mirror of
https://github.com/torvalds/linux.git
synced 2024-11-28 07:01:32 +00:00
libata: Include WWN ID in inquiry VPD emulation
As per SAT-3 the WWN ID should be included in the VPD page 0x83 (device identification) emulation. Signed-off-by: Hannes Reinecke <hare@suse.de> Acked-by: Tejun Heo <tj@kernel.org> Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
This commit is contained in:
parent
60a230e4a6
commit
6b3b9d73e0
@ -2056,6 +2056,17 @@ static unsigned int ata_scsiop_inq_83(struct ata_scsi_args *args, u8 *rbuf)
|
|||||||
ATA_ID_SERNO_LEN);
|
ATA_ID_SERNO_LEN);
|
||||||
num += ATA_ID_SERNO_LEN;
|
num += ATA_ID_SERNO_LEN;
|
||||||
|
|
||||||
|
if (ata_id_has_wwn(args->id)) {
|
||||||
|
/* SAT defined lu world wide name */
|
||||||
|
/* piv=0, assoc=lu, code_set=binary, designator=NAA */
|
||||||
|
rbuf[num + 0] = 1;
|
||||||
|
rbuf[num + 1] = 3;
|
||||||
|
rbuf[num + 3] = ATA_ID_WWN_LEN;
|
||||||
|
num += 4;
|
||||||
|
ata_id_string(args->id, (unsigned char *) rbuf + num,
|
||||||
|
ATA_ID_WWN, ATA_ID_WWN_LEN);
|
||||||
|
num += ATA_ID_WWN_LEN;
|
||||||
|
}
|
||||||
rbuf[3] = num - 4; /* page len (assume less than 256 bytes) */
|
rbuf[3] = num - 4; /* page len (assume less than 256 bytes) */
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -89,6 +89,7 @@ enum {
|
|||||||
ATA_ID_SPG = 98,
|
ATA_ID_SPG = 98,
|
||||||
ATA_ID_LBA_CAPACITY_2 = 100,
|
ATA_ID_LBA_CAPACITY_2 = 100,
|
||||||
ATA_ID_SECTOR_SIZE = 106,
|
ATA_ID_SECTOR_SIZE = 106,
|
||||||
|
ATA_ID_WWN = 108,
|
||||||
ATA_ID_LOGICAL_SECTOR_SIZE = 117, /* and 118 */
|
ATA_ID_LOGICAL_SECTOR_SIZE = 117, /* and 118 */
|
||||||
ATA_ID_LAST_LUN = 126,
|
ATA_ID_LAST_LUN = 126,
|
||||||
ATA_ID_DLF = 128,
|
ATA_ID_DLF = 128,
|
||||||
@ -103,6 +104,7 @@ enum {
|
|||||||
ATA_ID_SERNO_LEN = 20,
|
ATA_ID_SERNO_LEN = 20,
|
||||||
ATA_ID_FW_REV_LEN = 8,
|
ATA_ID_FW_REV_LEN = 8,
|
||||||
ATA_ID_PROD_LEN = 40,
|
ATA_ID_PROD_LEN = 40,
|
||||||
|
ATA_ID_WWN_LEN = 8,
|
||||||
|
|
||||||
ATA_PCI_CTL_OFS = 2,
|
ATA_PCI_CTL_OFS = 2,
|
||||||
|
|
||||||
@ -815,6 +817,11 @@ static inline int ata_id_has_unload(const u16 *id)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline bool ata_id_has_wwn(const u16 *id)
|
||||||
|
{
|
||||||
|
return (id[ATA_ID_CSF_DEFAULT] & 0xC100) == 0x4100;
|
||||||
|
}
|
||||||
|
|
||||||
static inline int ata_id_form_factor(const u16 *id)
|
static inline int ata_id_form_factor(const u16 *id)
|
||||||
{
|
{
|
||||||
u16 val = id[168];
|
u16 val = id[168];
|
||||||
|
Loading…
Reference in New Issue
Block a user