From a451c4a6fe8fd8a4bb018c07ca7c1350ec7fe6e2 Mon Sep 17 00:00:00 2001 From: Hannes Reinecke Date: Mon, 7 Mar 2011 08:56:44 +0100 Subject: [PATCH] --- yaml --- r: 234999 b: refs/heads/master c: 6b3b9d73e08d8939aaf54f85bb47495171f49e20 h: refs/heads/master i: 234997: 72f43ab640a8b99be7d8c3ac65a4c4febae3022a 234995: b56f22e8c44c9192e1713cbb6aa1c422474d5c01 234991: 99b9f5e62303ca576af656e5415f8ed656cd9d80 v: v3 --- [refs] | 2 +- trunk/drivers/ata/libata-scsi.c | 11 +++++++++++ trunk/include/linux/ata.h | 7 +++++++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index fcccdb948ae1..08dabe8b14ff 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 60a230e4a62be6837335911b09101bd8aeb7c95a +refs/heads/master: 6b3b9d73e08d8939aaf54f85bb47495171f49e20 diff --git a/trunk/drivers/ata/libata-scsi.c b/trunk/drivers/ata/libata-scsi.c index c11675f34b93..a83419991357 100644 --- a/trunk/drivers/ata/libata-scsi.c +++ b/trunk/drivers/ata/libata-scsi.c @@ -2056,6 +2056,17 @@ static unsigned int ata_scsiop_inq_83(struct ata_scsi_args *args, u8 *rbuf) 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) */ return 0; } diff --git a/trunk/include/linux/ata.h b/trunk/include/linux/ata.h index 0c4929fa34d3..198e1ea2b2eb 100644 --- a/trunk/include/linux/ata.h +++ b/trunk/include/linux/ata.h @@ -89,6 +89,7 @@ enum { ATA_ID_SPG = 98, ATA_ID_LBA_CAPACITY_2 = 100, ATA_ID_SECTOR_SIZE = 106, + ATA_ID_WWN = 108, ATA_ID_LOGICAL_SECTOR_SIZE = 117, /* and 118 */ ATA_ID_LAST_LUN = 126, ATA_ID_DLF = 128, @@ -103,6 +104,7 @@ enum { ATA_ID_SERNO_LEN = 20, ATA_ID_FW_REV_LEN = 8, ATA_ID_PROD_LEN = 40, + ATA_ID_WWN_LEN = 8, ATA_PCI_CTL_OFS = 2, @@ -815,6 +817,11 @@ static inline int ata_id_has_unload(const u16 *id) 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) { u16 val = id[168];