diff options
author | Ralph Campbell <ralph.campbell@qlogic.com> | 2008-01-10 03:50:41 -0500 |
---|---|---|
committer | Roland Dreier <rolandd@cisco.com> | 2008-01-25 17:17:44 -0500 |
commit | 3d68ea32611095c7e09409ac1b2a56da22fd5eb7 (patch) | |
tree | 6713954de767902d74c6b8d9ac432efa3b86b6b9 | |
parent | 6ac50727bda29e961385e4c40318dadbb5730193 (diff) |
IB/ipath: Add mappings from HW register to PortInfo port physical state
Add new mappings from port physical state (a HW register value) to the
IB SubnGet(PortInfo) port physical state.
Signed-off-by: Ralph Campbell <ralph.campbell@qlogic.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
-rw-r--r-- | drivers/infiniband/hw/ipath/ipath_verbs.c | 47 | ||||
-rw-r--r-- | drivers/infiniband/hw/ipath/ipath_verbs.h | 10 |
2 files changed, 41 insertions, 16 deletions
diff --git a/drivers/infiniband/hw/ipath/ipath_verbs.c b/drivers/infiniband/hw/ipath/ipath_verbs.c index 904ff1571ba6..32d8f882e56c 100644 --- a/drivers/infiniband/hw/ipath/ipath_verbs.c +++ b/drivers/infiniband/hw/ipath/ipath_verbs.c | |||
@@ -1133,20 +1133,34 @@ static int ipath_query_device(struct ib_device *ibdev, | |||
1133 | return 0; | 1133 | return 0; |
1134 | } | 1134 | } |
1135 | 1135 | ||
1136 | const u8 ipath_cvt_physportstate[16] = { | 1136 | const u8 ipath_cvt_physportstate[32] = { |
1137 | [INFINIPATH_IBCS_LT_STATE_DISABLED] = 3, | 1137 | [INFINIPATH_IBCS_LT_STATE_DISABLED] = IB_PHYSPORTSTATE_DISABLED, |
1138 | [INFINIPATH_IBCS_LT_STATE_LINKUP] = 5, | 1138 | [INFINIPATH_IBCS_LT_STATE_LINKUP] = IB_PHYSPORTSTATE_LINKUP, |
1139 | [INFINIPATH_IBCS_LT_STATE_POLLACTIVE] = 2, | 1139 | [INFINIPATH_IBCS_LT_STATE_POLLACTIVE] = IB_PHYSPORTSTATE_POLL, |
1140 | [INFINIPATH_IBCS_LT_STATE_POLLQUIET] = 2, | 1140 | [INFINIPATH_IBCS_LT_STATE_POLLQUIET] = IB_PHYSPORTSTATE_POLL, |
1141 | [INFINIPATH_IBCS_LT_STATE_SLEEPDELAY] = 1, | 1141 | [INFINIPATH_IBCS_LT_STATE_SLEEPDELAY] = IB_PHYSPORTSTATE_SLEEP, |
1142 | [INFINIPATH_IBCS_LT_STATE_SLEEPQUIET] = 1, | 1142 | [INFINIPATH_IBCS_LT_STATE_SLEEPQUIET] = IB_PHYSPORTSTATE_SLEEP, |
1143 | [INFINIPATH_IBCS_LT_STATE_CFGDEBOUNCE] = 4, | 1143 | [INFINIPATH_IBCS_LT_STATE_CFGDEBOUNCE] = |
1144 | [INFINIPATH_IBCS_LT_STATE_CFGRCVFCFG] = 4, | 1144 | IB_PHYSPORTSTATE_CFG_TRAIN, |
1145 | [INFINIPATH_IBCS_LT_STATE_CFGWAITRMT] = 4, | 1145 | [INFINIPATH_IBCS_LT_STATE_CFGRCVFCFG] = |
1146 | [INFINIPATH_IBCS_LT_STATE_CFGIDLE] = 4, | 1146 | IB_PHYSPORTSTATE_CFG_TRAIN, |
1147 | [INFINIPATH_IBCS_LT_STATE_RECOVERRETRAIN] = 6, | 1147 | [INFINIPATH_IBCS_LT_STATE_CFGWAITRMT] = |
1148 | [INFINIPATH_IBCS_LT_STATE_RECOVERWAITRMT] = 6, | 1148 | IB_PHYSPORTSTATE_CFG_TRAIN, |
1149 | [INFINIPATH_IBCS_LT_STATE_RECOVERIDLE] = 6, | 1149 | [INFINIPATH_IBCS_LT_STATE_CFGIDLE] = IB_PHYSPORTSTATE_CFG_TRAIN, |
1150 | [INFINIPATH_IBCS_LT_STATE_RECOVERRETRAIN] = | ||
1151 | IB_PHYSPORTSTATE_LINK_ERR_RECOVER, | ||
1152 | [INFINIPATH_IBCS_LT_STATE_RECOVERWAITRMT] = | ||
1153 | IB_PHYSPORTSTATE_LINK_ERR_RECOVER, | ||
1154 | [INFINIPATH_IBCS_LT_STATE_RECOVERIDLE] = | ||
1155 | IB_PHYSPORTSTATE_LINK_ERR_RECOVER, | ||
1156 | [0x10] = IB_PHYSPORTSTATE_CFG_TRAIN, | ||
1157 | [0x11] = IB_PHYSPORTSTATE_CFG_TRAIN, | ||
1158 | [0x12] = IB_PHYSPORTSTATE_CFG_TRAIN, | ||
1159 | [0x13] = IB_PHYSPORTSTATE_CFG_TRAIN, | ||
1160 | [0x14] = IB_PHYSPORTSTATE_CFG_TRAIN, | ||
1161 | [0x15] = IB_PHYSPORTSTATE_CFG_TRAIN, | ||
1162 | [0x16] = IB_PHYSPORTSTATE_CFG_TRAIN, | ||
1163 | [0x17] = IB_PHYSPORTSTATE_CFG_TRAIN | ||
1150 | }; | 1164 | }; |
1151 | 1165 | ||
1152 | u32 ipath_get_cr_errpkey(struct ipath_devdata *dd) | 1166 | u32 ipath_get_cr_errpkey(struct ipath_devdata *dd) |
@@ -1171,8 +1185,9 @@ static int ipath_query_port(struct ib_device *ibdev, | |||
1171 | ibcstat = dd->ipath_lastibcstat; | 1185 | ibcstat = dd->ipath_lastibcstat; |
1172 | props->state = ((ibcstat >> 4) & 0x3) + 1; | 1186 | props->state = ((ibcstat >> 4) & 0x3) + 1; |
1173 | /* See phys_state_show() */ | 1187 | /* See phys_state_show() */ |
1174 | props->phys_state = ipath_cvt_physportstate[ | 1188 | props->phys_state = /* MEA: assumes shift == 0 */ |
1175 | dd->ipath_lastibcstat & 0xf]; | 1189 | ipath_cvt_physportstate[dd->ipath_lastibcstat & |
1190 | dd->ibcs_lts_mask]; | ||
1176 | props->port_cap_flags = dev->port_cap_flags; | 1191 | props->port_cap_flags = dev->port_cap_flags; |
1177 | props->gid_tbl_len = 1; | 1192 | props->gid_tbl_len = 1; |
1178 | props->max_msg_sz = 0x80000000; | 1193 | props->max_msg_sz = 0x80000000; |
diff --git a/drivers/infiniband/hw/ipath/ipath_verbs.h b/drivers/infiniband/hw/ipath/ipath_verbs.h index 1c8985012743..3d59736b49b2 100644 --- a/drivers/infiniband/hw/ipath/ipath_verbs.h +++ b/drivers/infiniband/hw/ipath/ipath_verbs.h | |||
@@ -832,7 +832,17 @@ unsigned ipath_get_pkey(struct ipath_devdata *, unsigned); | |||
832 | 832 | ||
833 | extern const enum ib_wc_opcode ib_ipath_wc_opcode[]; | 833 | extern const enum ib_wc_opcode ib_ipath_wc_opcode[]; |
834 | 834 | ||
835 | /* | ||
836 | * Below converts HCA-specific LinkTrainingState to IB PhysPortState | ||
837 | * values. | ||
838 | */ | ||
835 | extern const u8 ipath_cvt_physportstate[]; | 839 | extern const u8 ipath_cvt_physportstate[]; |
840 | #define IB_PHYSPORTSTATE_SLEEP 1 | ||
841 | #define IB_PHYSPORTSTATE_POLL 2 | ||
842 | #define IB_PHYSPORTSTATE_DISABLED 3 | ||
843 | #define IB_PHYSPORTSTATE_CFG_TRAIN 4 | ||
844 | #define IB_PHYSPORTSTATE_LINKUP 5 | ||
845 | #define IB_PHYSPORTSTATE_LINK_ERR_RECOVER 6 | ||
836 | 846 | ||
837 | extern const int ib_ipath_state_ops[]; | 847 | extern const int ib_ipath_state_ops[]; |
838 | 848 | ||