diff options
author | jack wang <jack_wang@usish.com> | 2009-12-07 04:23:08 -0500 |
---|---|---|
committer | James Bottomley <James.Bottomley@suse.de> | 2009-12-10 11:09:23 -0500 |
commit | 7c8356d969e203a8f2f740a9a80d4944eb8cf1d1 (patch) | |
tree | 913d69e1c99ea5ce4e82cdbc2867a2457883f972 /drivers/scsi/pm8001 | |
parent | 8257ec80ba5b333dedf3395acf90055075aeba94 (diff) |
[SCSI] pm8001: enable read HBA SAS address from VPD
Signed-off-by: Jack Wang <jack_wang@usish.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
Diffstat (limited to 'drivers/scsi/pm8001')
-rw-r--r-- | drivers/scsi/pm8001/pm8001_ctl.h | 10 | ||||
-rw-r--r-- | drivers/scsi/pm8001/pm8001_init.c | 12 | ||||
-rw-r--r-- | drivers/scsi/pm8001/pm8001_sas.h | 24 |
3 files changed, 26 insertions, 20 deletions
diff --git a/drivers/scsi/pm8001/pm8001_ctl.h b/drivers/scsi/pm8001/pm8001_ctl.h index 22644de26399..63ad4aa0c422 100644 --- a/drivers/scsi/pm8001/pm8001_ctl.h +++ b/drivers/scsi/pm8001/pm8001_ctl.h | |||
@@ -45,16 +45,6 @@ | |||
45 | #define HEADER_LEN 28 | 45 | #define HEADER_LEN 28 |
46 | #define SIZE_OFFSET 16 | 46 | #define SIZE_OFFSET 16 |
47 | 47 | ||
48 | struct pm8001_ioctl_payload { | ||
49 | u32 signature; | ||
50 | u16 major_function; | ||
51 | u16 minor_function; | ||
52 | u16 length; | ||
53 | u16 status; | ||
54 | u16 offset; | ||
55 | u16 id; | ||
56 | u8 func_specific[1]; | ||
57 | }; | ||
58 | 48 | ||
59 | #define FLASH_OK 0x000000 | 49 | #define FLASH_OK 0x000000 |
60 | #define FAIL_OPEN_BIOS_FILE 0x000100 | 50 | #define FAIL_OPEN_BIOS_FILE 0x000100 |
diff --git a/drivers/scsi/pm8001/pm8001_init.c b/drivers/scsi/pm8001/pm8001_init.c index fb6379a4bee4..c2f1032496cb 100644 --- a/drivers/scsi/pm8001/pm8001_init.c +++ b/drivers/scsi/pm8001/pm8001_init.c | |||
@@ -516,19 +516,23 @@ static void pm8001_init_sas_add(struct pm8001_hba_info *pm8001_ha) | |||
516 | u8 i; | 516 | u8 i; |
517 | #ifdef PM8001_READ_VPD | 517 | #ifdef PM8001_READ_VPD |
518 | DECLARE_COMPLETION_ONSTACK(completion); | 518 | DECLARE_COMPLETION_ONSTACK(completion); |
519 | struct pm8001_ioctl_payload payload; | ||
519 | pm8001_ha->nvmd_completion = &completion; | 520 | pm8001_ha->nvmd_completion = &completion; |
520 | PM8001_CHIP_DISP->get_nvmd_req(pm8001_ha, 0, 0); | 521 | payload.minor_function = 0; |
522 | payload.length = 128; | ||
523 | payload.func_specific = kzalloc(128, GFP_KERNEL); | ||
524 | PM8001_CHIP_DISP->get_nvmd_req(pm8001_ha, &payload); | ||
521 | wait_for_completion(&completion); | 525 | wait_for_completion(&completion); |
522 | for (i = 0; i < pm8001_ha->chip->n_phy; i++) { | 526 | for (i = 0; i < pm8001_ha->chip->n_phy; i++) { |
523 | memcpy(&pm8001_ha->phy[i].dev_sas_addr, pm8001_ha->sas_addr, | 527 | memcpy(&pm8001_ha->phy[i].dev_sas_addr, pm8001_ha->sas_addr, |
524 | SAS_ADDR_SIZE); | 528 | SAS_ADDR_SIZE); |
525 | PM8001_INIT_DBG(pm8001_ha, | 529 | PM8001_INIT_DBG(pm8001_ha, |
526 | pm8001_printk("phy %d sas_addr = %x \n", i, | 530 | pm8001_printk("phy %d sas_addr = %016llx \n", i, |
527 | (u64)pm8001_ha->phy[i].dev_sas_addr)); | 531 | pm8001_ha->phy[i].dev_sas_addr)); |
528 | } | 532 | } |
529 | #else | 533 | #else |
530 | for (i = 0; i < pm8001_ha->chip->n_phy; i++) { | 534 | for (i = 0; i < pm8001_ha->chip->n_phy; i++) { |
531 | pm8001_ha->phy[i].dev_sas_addr = 0x500e004010000004ULL; | 535 | pm8001_ha->phy[i].dev_sas_addr = 0x50010c600047f9d0ULL; |
532 | pm8001_ha->phy[i].dev_sas_addr = | 536 | pm8001_ha->phy[i].dev_sas_addr = |
533 | cpu_to_be64((u64) | 537 | cpu_to_be64((u64) |
534 | (*(u64 *)&pm8001_ha->phy[i].dev_sas_addr)); | 538 | (*(u64 *)&pm8001_ha->phy[i].dev_sas_addr)); |
diff --git a/drivers/scsi/pm8001/pm8001_sas.h b/drivers/scsi/pm8001/pm8001_sas.h index c44a1150d70d..599601e9fd08 100644 --- a/drivers/scsi/pm8001/pm8001_sas.h +++ b/drivers/scsi/pm8001/pm8001_sas.h | |||
@@ -100,6 +100,7 @@ do { \ | |||
100 | 100 | ||
101 | #define PM8001_USE_TASKLET | 101 | #define PM8001_USE_TASKLET |
102 | #define PM8001_USE_MSIX | 102 | #define PM8001_USE_MSIX |
103 | #define PM8001_READ_VPD | ||
103 | 104 | ||
104 | 105 | ||
105 | #define DEV_IS_EXPANDER(type) ((type == EDGE_DEV) || (type == FANOUT_DEV)) | 106 | #define DEV_IS_EXPANDER(type) ((type == EDGE_DEV) || (type == FANOUT_DEV)) |
@@ -111,7 +112,22 @@ extern const struct pm8001_dispatch pm8001_8001_dispatch; | |||
111 | struct pm8001_hba_info; | 112 | struct pm8001_hba_info; |
112 | struct pm8001_ccb_info; | 113 | struct pm8001_ccb_info; |
113 | struct pm8001_device; | 114 | struct pm8001_device; |
114 | struct pm8001_tmf_task; | 115 | /* define task management IU */ |
116 | struct pm8001_tmf_task { | ||
117 | u8 tmf; | ||
118 | u32 tag_of_task_to_be_managed; | ||
119 | }; | ||
120 | struct pm8001_ioctl_payload { | ||
121 | u32 signature; | ||
122 | u16 major_function; | ||
123 | u16 minor_function; | ||
124 | u16 length; | ||
125 | u16 status; | ||
126 | u16 offset; | ||
127 | u16 id; | ||
128 | u8 *func_specific; | ||
129 | }; | ||
130 | |||
115 | struct pm8001_dispatch { | 131 | struct pm8001_dispatch { |
116 | char *name; | 132 | char *name; |
117 | int (*chip_init)(struct pm8001_hba_info *pm8001_ha); | 133 | int (*chip_init)(struct pm8001_hba_info *pm8001_ha); |
@@ -390,11 +406,7 @@ struct pm8001_fw_image_header { | |||
390 | __be32 startup_entry; | 406 | __be32 startup_entry; |
391 | } __attribute__((packed, aligned(4))); | 407 | } __attribute__((packed, aligned(4))); |
392 | 408 | ||
393 | /* define task management IU */ | 409 | |
394 | struct pm8001_tmf_task { | ||
395 | u8 tmf; | ||
396 | u32 tag_of_task_to_be_managed; | ||
397 | }; | ||
398 | /** | 410 | /** |
399 | * FW Flash Update status values | 411 | * FW Flash Update status values |
400 | */ | 412 | */ |