summaryrefslogtreecommitdiffstats
path: root/drivers/infiniband/hw/ocrdma/ocrdma.h
diff options
context:
space:
mode:
authorDevesh Sharma <devesh.sharma@emulex.com>2014-02-04 11:56:56 +0530
committerRoland Dreier <roland@purestorage.com>2014-04-03 08:29:40 -0700
commit21c3391a9adfaddd00481a1d03bf30fc1304e292 (patch)
tree05b9a15f8944b21d79cc32b9879dd272c8ae51e8 /drivers/infiniband/hw/ocrdma/ocrdma.h
parent2df84fa87f4d00299031b1335748c54176edfe87 (diff)
downloadlinux-21c3391a9adfaddd00481a1d03bf30fc1304e292.tar.bz2
RDMA/ocrdma: Read ASIC_ID register to select asic_gen
ocrdma driver selects execution path based on sli_family and asic generation number. This introduces code to read the asic gen number from pci register instead of obtaining it from the Emulex NIC driver. Signed-off-by: Devesh Sharma <devesh.sharma@emulex.com> Signed-off-by: Selvin Xavier <selvin.xavier@emulex.com> Signed-off-by: Roland Dreier <roland@purestorage.com>
Diffstat (limited to 'drivers/infiniband/hw/ocrdma/ocrdma.h')
-rw-r--r--drivers/infiniband/hw/ocrdma/ocrdma.h13
1 files changed, 13 insertions, 0 deletions
diff --git a/drivers/infiniband/hw/ocrdma/ocrdma.h b/drivers/infiniband/hw/ocrdma/ocrdma.h
index 1b51e67a26d7..24fe248fb35a 100644
--- a/drivers/infiniband/hw/ocrdma/ocrdma.h
+++ b/drivers/infiniband/hw/ocrdma/ocrdma.h
@@ -197,6 +197,7 @@ struct ocrdma_dev {
int id;
struct ocrdma_mr *stag_arr[OCRDMA_MAX_STAG];
u16 pvid;
+ u32 asic_id;
};
struct ocrdma_cq {
@@ -443,4 +444,16 @@ static inline int ocrdma_get_eq_table_index(struct ocrdma_dev *dev,
return -EINVAL;
}
+static inline u8 ocrdma_get_asic_type(struct ocrdma_dev *dev)
+{
+ if (dev->nic_info.dev_family == 0xF && !dev->asic_id) {
+ pci_read_config_dword(
+ dev->nic_info.pdev,
+ OCRDMA_SLI_ASIC_ID_OFFSET, &dev->asic_id);
+ }
+
+ return (dev->asic_id & OCRDMA_SLI_ASIC_GEN_NUM_MASK) >>
+ OCRDMA_SLI_ASIC_GEN_NUM_SHIFT;
+}
+
#endif