Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
55d8ca4f
cloud-kernel
项目概览
openanolis
/
cloud-kernel
1 年多 前同步成功
通知
160
Star
36
Fork
7
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
10
列表
看板
标记
里程碑
合并请求
2
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
cloud-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
10
Issue
10
列表
看板
标记
里程碑
合并请求
2
合并请求
2
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
55d8ca4f
编写于
3月 29, 2006
作者:
J
Jeff Garzik
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'mv-merge'
Conflicts: drivers/scsi/sata_mv.c
上级
00b6f5e9
63af2a5c
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
24 addition
and
18 deletion
+24
-18
drivers/scsi/sata_mv.c
drivers/scsi/sata_mv.c
+24
-18
未找到文件。
drivers/scsi/sata_mv.c
浏览文件 @
55d8ca4f
...
...
@@ -1010,7 +1010,7 @@ static void mv_fill_sg(struct ata_queued_cmd *qc)
pp
->
sg_tbl
[
i
].
addr
=
cpu_to_le32
(
addr
&
0xffffffff
);
pp
->
sg_tbl
[
i
].
addr_hi
=
cpu_to_le32
((
addr
>>
16
)
>>
16
);
pp
->
sg_tbl
[
i
].
flags_size
=
cpu_to_le32
(
len
);
pp
->
sg_tbl
[
i
].
flags_size
=
cpu_to_le32
(
len
&
0xffff
);
sg_len
-=
len
;
addr
+=
len
;
...
...
@@ -1350,7 +1350,6 @@ static void mv_host_intr(struct ata_host_set *host_set, u32 relevant,
{
void
__iomem
*
mmio
=
host_set
->
mmio_base
;
void
__iomem
*
hc_mmio
=
mv_hc_base
(
mmio
,
hc
);
struct
ata_port
*
ap
;
struct
ata_queued_cmd
*
qc
;
u32
hc_irq_cause
;
int
shift
,
port
,
port0
,
hard_port
,
handled
;
...
...
@@ -1373,25 +1372,32 @@ static void mv_host_intr(struct ata_host_set *host_set, u32 relevant,
for
(
port
=
port0
;
port
<
port0
+
MV_PORTS_PER_HC
;
port
++
)
{
u8
ata_status
=
0
;
ap
=
host_set
->
ports
[
port
];
struct
ata_port
*
ap
=
host_set
->
ports
[
port
];
struct
mv_port_priv
*
pp
=
ap
->
private_data
;
hard_port
=
port
&
MV_PORT_MASK
;
/* range 0-3 */
handled
=
0
;
/* ensure ata_status is set if handled++ */
if
((
CRPB_DMA_DONE
<<
hard_port
)
&
hc_irq_cause
)
{
/* new CRPB on the queue; just one at a time until NCQ
*/
ata_status
=
mv_get_crpb_status
(
ap
);
handled
++
;
}
else
if
((
DEV_IRQ
<<
hard_port
)
&
hc_irq_cause
)
{
/* received ATA IRQ; read the status reg to clear INTRQ
*/
ata_status
=
readb
((
void
__iomem
*
)
/* Note that DEV_IRQ might happen spuriously during EDMA,
* and should be ignored in such cases. We could mask it,
* but it's pretty rare and may not be worth the overhead.
*/
if
(
pp
->
pp_flags
&
MV_PP_FLAG_EDMA_EN
)
{
/* EDMA: check for response queue interrupt */
if
((
CRPB_DMA_DONE
<<
hard_port
)
&
hc_irq_cause
)
{
ata_status
=
mv_get_crpb_status
(
ap
);
handled
=
1
;
}
}
else
{
/* PIO: check for device (drive) interrupt */
if
((
DEV_IRQ
<<
hard_port
)
&
hc_irq_cause
)
{
ata_status
=
readb
((
void
__iomem
*
)
ap
->
ioaddr
.
status_addr
);
handled
++
;
handled
=
1
;
}
}
if
(
ap
&&
(
ap
->
flags
&
(
ATA_FLAG_PORT_DISABLED
|
ATA_FLAG_NOINTR
)))
if
(
ap
->
flags
&
(
ATA_FLAG_PORT_DISABLED
|
ATA_FLAG_NOINTR
))
continue
;
err_mask
=
ac_err_mask
(
ata_status
);
...
...
@@ -1403,12 +1409,12 @@ static void mv_host_intr(struct ata_host_set *host_set, u32 relevant,
if
((
PORT0_ERR
<<
shift
)
&
relevant
)
{
mv_err_intr
(
ap
);
err_mask
|=
AC_ERR_OTHER
;
handled
++
;
handled
=
1
;
}
if
(
handled
&&
ap
)
{
if
(
handled
)
{
qc
=
ata_qc_from_tag
(
ap
,
ap
->
active_tag
);
if
(
NULL
!=
qc
)
{
if
(
qc
&&
(
qc
->
flags
&
ATA_QCFLAG_ACTIVE
)
)
{
VPRINTK
(
"port %u IRQ found for qc, "
"ata_status 0x%x
\n
"
,
port
,
ata_status
);
/* mark qc status appropriately */
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录