Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
ad355b46
cloud-kernel
项目概览
openanolis
/
cloud-kernel
大约 1 年 前同步成功
通知
158
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看板
体验新版 GitCode,发现更多精彩内容 >>
提交
ad355b46
编写于
9月 21, 2007
作者:
J
Jeff Garzik
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[libata] SCSI: support INQUIRY page 89h (ATA info page)
Signed-off-by:
N
Jeff Garzik
<
jeff@garzik.org
>
上级
d4155e6f
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
68 addition
and
4 deletion
+68
-4
drivers/ata/libata-scsi.c
drivers/ata/libata-scsi.c
+68
-4
未找到文件。
drivers/ata/libata-scsi.c
浏览文件 @
ad355b46
...
...
@@ -1803,6 +1803,61 @@ unsigned int ata_scsiop_inq_83(struct ata_scsi_args *args, u8 *rbuf,
return
0
;
}
/**
* ata_scsiop_inq_89 - Simulate INQUIRY VPD page 89, ATA info
* @args: device IDENTIFY data / SCSI command of interest.
* @rbuf: Response buffer, to which simulated SCSI cmd output is sent.
* @buflen: Response buffer length.
*
* Yields SAT-specified ATA VPD page.
*
* LOCKING:
* spin_lock_irqsave(host lock)
*/
unsigned
int
ata_scsiop_inq_89
(
struct
ata_scsi_args
*
args
,
u8
*
rbuf
,
unsigned
int
buflen
)
{
u8
pbuf
[
60
];
struct
ata_taskfile
tf
;
unsigned
int
i
;
if
(
!
buflen
)
return
0
;
memset
(
&
pbuf
,
0
,
sizeof
(
pbuf
));
memset
(
&
tf
,
0
,
sizeof
(
tf
));
pbuf
[
1
]
=
0x89
;
/* our page code */
pbuf
[
2
]
=
(
0x238
>>
8
);
/* page size fixed at 238h */
pbuf
[
3
]
=
(
0x238
&
0xff
);
memcpy
(
&
pbuf
[
8
],
"ATA "
,
8
);
ata_id_string
(
args
->
id
,
&
pbuf
[
16
],
ATA_ID_PROD
,
16
);
ata_id_string
(
args
->
id
,
&
pbuf
[
32
],
ATA_ID_FW_REV
,
4
);
/* we don't store the ATA device signature, so we fake it */
tf
.
command
=
ATA_DRDY
;
/* really, this is Status reg */
tf
.
lbal
=
0x1
;
tf
.
nsect
=
0x1
;
ata_tf_to_fis
(
&
tf
,
0
,
1
,
&
pbuf
[
36
]);
/* TODO: PMP? */
pbuf
[
36
]
=
0x34
;
/* force D2H Reg FIS (34h) */
pbuf
[
56
]
=
ATA_CMD_ID_ATA
;
i
=
min
(
buflen
,
60U
);
memcpy
(
rbuf
,
&
pbuf
[
0
],
i
);
buflen
-=
i
;
if
(
!
buflen
)
return
0
;
memcpy
(
&
rbuf
[
60
],
&
args
->
id
[
0
],
min
(
buflen
,
512U
));
return
0
;
}
/**
* ata_scsiop_noop - Command handler that simply returns success.
* @args: device IDENTIFY data / SCSI command of interest.
...
...
@@ -2880,14 +2935,23 @@ void ata_scsi_simulate(struct ata_device *dev, struct scsi_cmnd *cmd,
ata_scsi_invalid_field
(
cmd
,
done
);
else
if
((
scsicmd
[
1
]
&
1
)
==
0
)
/* is EVPD clear? */
ata_scsi_rbuf_fill
(
&
args
,
ata_scsiop_inq_std
);
else
if
(
scsicmd
[
2
]
==
0x00
)
else
switch
(
scsicmd
[
2
])
{
case
0x00
:
ata_scsi_rbuf_fill
(
&
args
,
ata_scsiop_inq_00
);
else
if
(
scsicmd
[
2
]
==
0x80
)
break
;
case
0x80
:
ata_scsi_rbuf_fill
(
&
args
,
ata_scsiop_inq_80
);
else
if
(
scsicmd
[
2
]
==
0x83
)
break
;
case
0x83
:
ata_scsi_rbuf_fill
(
&
args
,
ata_scsiop_inq_83
);
else
break
;
case
0x89
:
ata_scsi_rbuf_fill
(
&
args
,
ata_scsiop_inq_89
);
break
;
default:
ata_scsi_invalid_field
(
cmd
,
done
);
break
;
}
break
;
case
MODE_SENSE
:
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录