diff options
author | Jing Huang <huangj@brocade.com> | 2010-07-08 22:48:12 -0400 |
---|---|---|
committer | James Bottomley <James.Bottomley@suse.de> | 2010-07-27 13:04:06 -0400 |
commit | 15b64a835def4c784c6e62ad762677f5cb56eba2 (patch) | |
tree | 0d6ca06f6472c2bb71d254dbbc255ea6f18f8988 | |
parent | 1769f990fc182695bc215ce4369688064addcd1e (diff) |
[SCSI] bfa: ioc attributes fix
This patch fixes the APIs to obtain ioc attributes
- fix API to obtain wwpn, wwnn, and mac.
- add API to get mfg wwpn, wwnn, and mac.
- fix API to obtain wwn of boot target.
Signed-off-by: Jing Huang <huangj@brocade.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
-rw-r--r-- | drivers/scsi/bfa/bfa_fcport.c | 3 | ||||
-rw-r--r-- | drivers/scsi/bfa/bfa_ioc.c | 58 | ||||
-rw-r--r-- | drivers/scsi/bfa/bfa_ioc.h | 3 | ||||
-rw-r--r-- | drivers/scsi/bfa/bfa_iocfc.c | 18 | ||||
-rw-r--r-- | drivers/scsi/bfa/bfa_iocfc.h | 2 | ||||
-rw-r--r-- | drivers/scsi/bfa/bfad_im.c | 8 | ||||
-rw-r--r-- | drivers/scsi/bfa/fabric.c | 16 | ||||
-rw-r--r-- | drivers/scsi/bfa/fcs_fabric.h | 2 | ||||
-rw-r--r-- | drivers/scsi/bfa/include/bfi/bfi_ioc.h | 19 | ||||
-rw-r--r-- | drivers/scsi/bfa/ns.c | 4 |
10 files changed, 86 insertions, 47 deletions
diff --git a/drivers/scsi/bfa/bfa_fcport.c b/drivers/scsi/bfa/bfa_fcport.c index 4961b8da9127..d28b721acaf8 100644 --- a/drivers/scsi/bfa/bfa_fcport.c +++ b/drivers/scsi/bfa/bfa_fcport.c | |||
@@ -1569,6 +1569,9 @@ bfa_fcport_get_attr(struct bfa_s *bfa, struct bfa_pport_attr_s *attr) | |||
1569 | attr->nwwn = fcport->nwwn; | 1569 | attr->nwwn = fcport->nwwn; |
1570 | attr->pwwn = fcport->pwwn; | 1570 | attr->pwwn = fcport->pwwn; |
1571 | 1571 | ||
1572 | attr->factorypwwn = bfa_ioc_get_mfg_pwwn(&bfa->ioc); | ||
1573 | attr->factorynwwn = bfa_ioc_get_mfg_nwwn(&bfa->ioc); | ||
1574 | |||
1572 | bfa_os_memcpy(&attr->pport_cfg, &fcport->cfg, | 1575 | bfa_os_memcpy(&attr->pport_cfg, &fcport->cfg, |
1573 | sizeof(struct bfa_pport_cfg_s)); | 1576 | sizeof(struct bfa_pport_cfg_s)); |
1574 | /* | 1577 | /* |
diff --git a/drivers/scsi/bfa/bfa_ioc.c b/drivers/scsi/bfa/bfa_ioc.c index 268c071ce673..1600f747eb6c 100644 --- a/drivers/scsi/bfa/bfa_ioc.c +++ b/drivers/scsi/bfa/bfa_ioc.c | |||
@@ -1838,54 +1838,54 @@ bfa_ioc_get_attr(struct bfa_ioc_s *ioc, struct bfa_ioc_attr_s *ioc_attr) | |||
1838 | } | 1838 | } |
1839 | 1839 | ||
1840 | /** | 1840 | /** |
1841 | * hal_wwn_public | 1841 | * bfa_wwn_public |
1842 | */ | 1842 | */ |
1843 | wwn_t | 1843 | wwn_t |
1844 | bfa_ioc_get_pwwn(struct bfa_ioc_s *ioc) | 1844 | bfa_ioc_get_pwwn(struct bfa_ioc_s *ioc) |
1845 | { | 1845 | { |
1846 | union { | 1846 | return ioc->attr->pwwn; |
1847 | wwn_t wwn; | ||
1848 | u8 byte[sizeof(wwn_t)]; | ||
1849 | } | ||
1850 | w; | ||
1851 | |||
1852 | w.wwn = ioc->attr->mfg_wwn; | ||
1853 | |||
1854 | if (bfa_ioc_portid(ioc) == 1) | ||
1855 | w.byte[7]++; | ||
1856 | |||
1857 | return w.wwn; | ||
1858 | } | 1847 | } |
1859 | 1848 | ||
1860 | wwn_t | 1849 | wwn_t |
1861 | bfa_ioc_get_nwwn(struct bfa_ioc_s *ioc) | 1850 | bfa_ioc_get_nwwn(struct bfa_ioc_s *ioc) |
1862 | { | 1851 | { |
1863 | union { | 1852 | return ioc->attr->nwwn; |
1864 | wwn_t wwn; | ||
1865 | u8 byte[sizeof(wwn_t)]; | ||
1866 | } | ||
1867 | w; | ||
1868 | |||
1869 | w.wwn = ioc->attr->mfg_wwn; | ||
1870 | |||
1871 | if (bfa_ioc_portid(ioc) == 1) | ||
1872 | w.byte[7]++; | ||
1873 | |||
1874 | w.byte[0] = 0x20; | ||
1875 | |||
1876 | return w.wwn; | ||
1877 | } | 1853 | } |
1878 | 1854 | ||
1879 | u64 | 1855 | u64 |
1880 | bfa_ioc_get_adid(struct bfa_ioc_s *ioc) | 1856 | bfa_ioc_get_adid(struct bfa_ioc_s *ioc) |
1881 | { | 1857 | { |
1882 | return ioc->attr->mfg_wwn; | 1858 | return ioc->attr->mfg_pwwn; |
1883 | } | 1859 | } |
1884 | 1860 | ||
1885 | mac_t | 1861 | mac_t |
1886 | bfa_ioc_get_mac(struct bfa_ioc_s *ioc) | 1862 | bfa_ioc_get_mac(struct bfa_ioc_s *ioc) |
1887 | { | 1863 | { |
1888 | mac_t mac; | 1864 | /* |
1865 | * Currently mfg mac is used as FCoE enode mac (not configured by PBC) | ||
1866 | */ | ||
1867 | if (bfa_ioc_get_type(ioc) == BFA_IOC_TYPE_FCoE) | ||
1868 | return bfa_ioc_get_mfg_mac(ioc); | ||
1869 | else | ||
1870 | return ioc->attr->mac; | ||
1871 | } | ||
1872 | |||
1873 | wwn_t | ||
1874 | bfa_ioc_get_mfg_pwwn(struct bfa_ioc_s *ioc) | ||
1875 | { | ||
1876 | return ioc->attr->mfg_pwwn; | ||
1877 | } | ||
1878 | |||
1879 | wwn_t | ||
1880 | bfa_ioc_get_mfg_nwwn(struct bfa_ioc_s *ioc) | ||
1881 | { | ||
1882 | return ioc->attr->mfg_nwwn; | ||
1883 | } | ||
1884 | |||
1885 | mac_t | ||
1886 | bfa_ioc_get_mfg_mac(struct bfa_ioc_s *ioc) | ||
1887 | { | ||
1888 | mac_t mac; | ||
1889 | 1889 | ||
1890 | mac = ioc->attr->mfg_mac; | 1890 | mac = ioc->attr->mfg_mac; |
1891 | mac.mac[MAC_ADDRLEN - 1] += bfa_ioc_pcifn(ioc); | 1891 | mac.mac[MAC_ADDRLEN - 1] += bfa_ioc_pcifn(ioc); |
diff --git a/drivers/scsi/bfa/bfa_ioc.h b/drivers/scsi/bfa/bfa_ioc.h index df15eccd760f..2425c00a72d3 100644 --- a/drivers/scsi/bfa/bfa_ioc.h +++ b/drivers/scsi/bfa/bfa_ioc.h | |||
@@ -304,6 +304,9 @@ bfa_boolean_t bfa_ioc_fwver_cmp(struct bfa_ioc_s *ioc, | |||
304 | wwn_t bfa_ioc_get_pwwn(struct bfa_ioc_s *ioc); | 304 | wwn_t bfa_ioc_get_pwwn(struct bfa_ioc_s *ioc); |
305 | wwn_t bfa_ioc_get_nwwn(struct bfa_ioc_s *ioc); | 305 | wwn_t bfa_ioc_get_nwwn(struct bfa_ioc_s *ioc); |
306 | mac_t bfa_ioc_get_mac(struct bfa_ioc_s *ioc); | 306 | mac_t bfa_ioc_get_mac(struct bfa_ioc_s *ioc); |
307 | wwn_t bfa_ioc_get_mfg_pwwn(struct bfa_ioc_s *ioc); | ||
308 | wwn_t bfa_ioc_get_mfg_nwwn(struct bfa_ioc_s *ioc); | ||
309 | mac_t bfa_ioc_get_mfg_mac(struct bfa_ioc_s *ioc); | ||
307 | u64 bfa_ioc_get_adid(struct bfa_ioc_s *ioc); | 310 | u64 bfa_ioc_get_adid(struct bfa_ioc_s *ioc); |
308 | 311 | ||
309 | #endif /* __BFA_IOC_H__ */ | 312 | #endif /* __BFA_IOC_H__ */ |
diff --git a/drivers/scsi/bfa/bfa_iocfc.c b/drivers/scsi/bfa/bfa_iocfc.c index d3f1052744d3..6f54bea356c6 100644 --- a/drivers/scsi/bfa/bfa_iocfc.c +++ b/drivers/scsi/bfa/bfa_iocfc.c | |||
@@ -861,13 +861,23 @@ bfa_iocfc_is_operational(struct bfa_s *bfa) | |||
861 | * Return boot target port wwns -- read from boot information in flash. | 861 | * Return boot target port wwns -- read from boot information in flash. |
862 | */ | 862 | */ |
863 | void | 863 | void |
864 | bfa_iocfc_get_bootwwns(struct bfa_s *bfa, u8 *nwwns, wwn_t **wwns) | 864 | bfa_iocfc_get_bootwwns(struct bfa_s *bfa, u8 *nwwns, wwn_t *wwns) |
865 | { | 865 | { |
866 | struct bfa_iocfc_s *iocfc = &bfa->iocfc; | 866 | struct bfa_iocfc_s *iocfc = &bfa->iocfc; |
867 | struct bfi_iocfc_cfgrsp_s *cfgrsp = iocfc->cfgrsp; | 867 | struct bfi_iocfc_cfgrsp_s *cfgrsp = iocfc->cfgrsp; |
868 | int i; | ||
869 | |||
870 | if (cfgrsp->pbc_cfg.boot_enabled && cfgrsp->pbc_cfg.nbluns) { | ||
871 | bfa_trc(bfa, cfgrsp->pbc_cfg.nbluns); | ||
872 | *nwwns = cfgrsp->pbc_cfg.nbluns; | ||
873 | for (i = 0; i < cfgrsp->pbc_cfg.nbluns; i++) | ||
874 | wwns[i] = cfgrsp->pbc_cfg.blun[i].tgt_pwwn; | ||
875 | |||
876 | return; | ||
877 | } | ||
868 | 878 | ||
869 | *nwwns = cfgrsp->bootwwns.nwwns; | 879 | *nwwns = cfgrsp->bootwwns.nwwns; |
870 | *wwns = cfgrsp->bootwwns.wwn; | 880 | memcpy(wwns, cfgrsp->bootwwns.wwn, sizeof(cfgrsp->bootwwns.wwn)); |
871 | } | 881 | } |
872 | 882 | ||
873 | void | 883 | void |
diff --git a/drivers/scsi/bfa/bfa_iocfc.h b/drivers/scsi/bfa/bfa_iocfc.h index a08309fb981d..2b281037fd79 100644 --- a/drivers/scsi/bfa/bfa_iocfc.h +++ b/drivers/scsi/bfa/bfa_iocfc.h | |||
@@ -167,7 +167,7 @@ void bfa_hwct_msix_getvecs(struct bfa_s *bfa, u32 *vecmap, | |||
167 | void bfa_com_meminfo(bfa_boolean_t mincfg, u32 *dm_len); | 167 | void bfa_com_meminfo(bfa_boolean_t mincfg, u32 *dm_len); |
168 | void bfa_com_attach(struct bfa_s *bfa, struct bfa_meminfo_s *mi, | 168 | void bfa_com_attach(struct bfa_s *bfa, struct bfa_meminfo_s *mi, |
169 | bfa_boolean_t mincfg); | 169 | bfa_boolean_t mincfg); |
170 | void bfa_iocfc_get_bootwwns(struct bfa_s *bfa, u8 *nwwns, wwn_t **wwns); | 170 | void bfa_iocfc_get_bootwwns(struct bfa_s *bfa, u8 *nwwns, wwn_t *wwns); |
171 | void bfa_iocfc_get_pbc_boot_cfg(struct bfa_s *bfa, | 171 | void bfa_iocfc_get_pbc_boot_cfg(struct bfa_s *bfa, |
172 | struct bfa_boot_pbc_s *pbcfg); | 172 | struct bfa_boot_pbc_s *pbcfg); |
173 | int bfa_iocfc_get_pbc_vports(struct bfa_s *bfa, | 173 | int bfa_iocfc_get_pbc_vports(struct bfa_s *bfa, |
diff --git a/drivers/scsi/bfa/bfad_im.c b/drivers/scsi/bfa/bfad_im.c index 0dff0d4b03c9..943bc4b37284 100644 --- a/drivers/scsi/bfa/bfad_im.c +++ b/drivers/scsi/bfa/bfad_im.c | |||
@@ -1205,9 +1205,9 @@ int | |||
1205 | bfad_os_get_linkup_delay(struct bfad_s *bfad) | 1205 | bfad_os_get_linkup_delay(struct bfad_s *bfad) |
1206 | { | 1206 | { |
1207 | 1207 | ||
1208 | u8 nwwns = 0; | 1208 | u8 nwwns = 0; |
1209 | wwn_t *wwns; | 1209 | wwn_t wwns[BFA_PREBOOT_BOOTLUN_MAX]; |
1210 | int ldelay; | 1210 | int ldelay; |
1211 | 1211 | ||
1212 | /* | 1212 | /* |
1213 | * Querying for the boot target port wwns | 1213 | * Querying for the boot target port wwns |
@@ -1216,7 +1216,7 @@ bfad_os_get_linkup_delay(struct bfad_s *bfad) | |||
1216 | * else => local boot machine set bfa_linkup_delay = 10 | 1216 | * else => local boot machine set bfa_linkup_delay = 10 |
1217 | */ | 1217 | */ |
1218 | 1218 | ||
1219 | bfa_iocfc_get_bootwwns(&bfad->bfa, &nwwns, &wwns); | 1219 | bfa_iocfc_get_bootwwns(&bfad->bfa, &nwwns, wwns); |
1220 | 1220 | ||
1221 | if (nwwns > 0) { | 1221 | if (nwwns > 0) { |
1222 | /* If boot over SAN; linkup_delay = 30sec */ | 1222 | /* If boot over SAN; linkup_delay = 30sec */ |
diff --git a/drivers/scsi/bfa/fabric.c b/drivers/scsi/bfa/fabric.c index 9315383fff8a..c646d6dd789b 100644 --- a/drivers/scsi/bfa/fabric.c +++ b/drivers/scsi/bfa/fabric.c | |||
@@ -1271,6 +1271,22 @@ bfa_fcs_fabric_set_fabric_name(struct bfa_fcs_fabric_s *fabric, | |||
1271 | } | 1271 | } |
1272 | 1272 | ||
1273 | /** | 1273 | /** |
1274 | * | ||
1275 | * @param[in] fabric - fabric | ||
1276 | * @param[in] node_symname - | ||
1277 | * Caller allocated buffer to receive the symbolic name | ||
1278 | * | ||
1279 | * @return - none | ||
1280 | */ | ||
1281 | void | ||
1282 | bfa_fcs_get_sym_name(const struct bfa_fcs_s *fcs, char *node_symname) | ||
1283 | { | ||
1284 | bfa_os_memcpy(node_symname, | ||
1285 | fcs->fabric.bport.port_cfg.sym_name.symname, | ||
1286 | BFA_SYMNAME_MAXLEN); | ||
1287 | } | ||
1288 | |||
1289 | /** | ||
1274 | * Not used by FCS. | 1290 | * Not used by FCS. |
1275 | */ | 1291 | */ |
1276 | void | 1292 | void |
diff --git a/drivers/scsi/bfa/fcs_fabric.h b/drivers/scsi/bfa/fcs_fabric.h index 244c3f00c50c..ed532db14e86 100644 --- a/drivers/scsi/bfa/fcs_fabric.h +++ b/drivers/scsi/bfa/fcs_fabric.h | |||
@@ -60,4 +60,6 @@ void bfa_fcs_auth_finished(struct bfa_fcs_fabric_s *fabric, | |||
60 | 60 | ||
61 | void bfa_fcs_fabric_set_fabric_name(struct bfa_fcs_fabric_s *fabric, | 61 | void bfa_fcs_fabric_set_fabric_name(struct bfa_fcs_fabric_s *fabric, |
62 | wwn_t fabric_name); | 62 | wwn_t fabric_name); |
63 | void bfa_fcs_get_sym_name(const struct bfa_fcs_s *fcs, char *node_symname); | ||
64 | |||
63 | #endif /* __FCS_FABRIC_H__ */ | 65 | #endif /* __FCS_FABRIC_H__ */ |
diff --git a/drivers/scsi/bfa/include/bfi/bfi_ioc.h b/drivers/scsi/bfa/include/bfi/bfi_ioc.h index 03a9c9408ca5..7c5e6d5716df 100644 --- a/drivers/scsi/bfa/include/bfi/bfi_ioc.h +++ b/drivers/scsi/bfa/include/bfi/bfi_ioc.h | |||
@@ -48,9 +48,14 @@ struct bfi_ioc_getattr_req_s { | |||
48 | }; | 48 | }; |
49 | 49 | ||
50 | struct bfi_ioc_attr_s { | 50 | struct bfi_ioc_attr_s { |
51 | wwn_t mfg_wwn; | 51 | wwn_t mfg_pwwn; /* Mfg port wwn */ |
52 | wwn_t mfg_nwwn; /* Mfg node wwn */ | ||
52 | mac_t mfg_mac; | 53 | mac_t mfg_mac; |
53 | u16 rsvd_a; | 54 | u16 rsvd_a; |
55 | wwn_t pwwn; | ||
56 | wwn_t nwwn; | ||
57 | mac_t mac; /* PBC or Mfg mac */ | ||
58 | u16 rsvd_b; | ||
54 | char brcd_serialnum[STRSZ(BFA_MFG_SERIALNUM_SIZE)]; | 59 | char brcd_serialnum[STRSZ(BFA_MFG_SERIALNUM_SIZE)]; |
55 | u8 pcie_gen; | 60 | u8 pcie_gen; |
56 | u8 pcie_lanes_orig; | 61 | u8 pcie_lanes_orig; |
@@ -58,12 +63,12 @@ struct bfi_ioc_attr_s { | |||
58 | u8 rx_bbcredit; /* receive buffer credits */ | 63 | u8 rx_bbcredit; /* receive buffer credits */ |
59 | u32 adapter_prop; /* adapter properties */ | 64 | u32 adapter_prop; /* adapter properties */ |
60 | u16 maxfrsize; /* max receive frame size */ | 65 | u16 maxfrsize; /* max receive frame size */ |
61 | char asic_rev; | 66 | char asic_rev; |
62 | u8 rsvd_b; | 67 | u8 rsvd_c; |
63 | char fw_version[BFA_VERSION_LEN]; | 68 | char fw_version[BFA_VERSION_LEN]; |
64 | char optrom_version[BFA_VERSION_LEN]; | 69 | char optrom_version[BFA_VERSION_LEN]; |
65 | struct bfa_mfg_vpd_s vpd; | 70 | struct bfa_mfg_vpd_s vpd; |
66 | uint32_t card_type; /* card type */ | 71 | u32 card_type; /* card type */ |
67 | }; | 72 | }; |
68 | 73 | ||
69 | /** | 74 | /** |
diff --git a/drivers/scsi/bfa/ns.c b/drivers/scsi/bfa/ns.c index d20dd7e15742..2d6d2d6ff8dc 100644 --- a/drivers/scsi/bfa/ns.c +++ b/drivers/scsi/bfa/ns.c | |||
@@ -1228,10 +1228,10 @@ bfa_fcs_port_ns_boot_target_disc(struct bfa_fcs_port_s *port) | |||
1228 | 1228 | ||
1229 | struct bfa_fcs_rport_s *rport; | 1229 | struct bfa_fcs_rport_s *rport; |
1230 | u8 nwwns; | 1230 | u8 nwwns; |
1231 | wwn_t *wwns; | 1231 | wwn_t wwns[BFA_PREBOOT_BOOTLUN_MAX]; |
1232 | int ii; | 1232 | int ii; |
1233 | 1233 | ||
1234 | bfa_iocfc_get_bootwwns(port->fcs->bfa, &nwwns, &wwns); | 1234 | bfa_iocfc_get_bootwwns(port->fcs->bfa, &nwwns, wwns); |
1235 | 1235 | ||
1236 | for (ii = 0; ii < nwwns; ++ii) { | 1236 | for (ii = 0; ii < nwwns; ++ii) { |
1237 | rport = bfa_fcs_rport_create_by_wwn(port, wwns[ii]); | 1237 | rport = bfa_fcs_rport_create_by_wwn(port, wwns[ii]); |