IB/core: Add per port immutable struct to ib_device
[linux-block.git] / drivers / infiniband / hw / amso1100 / c2_provider.c
index bdf3507810cb767767cd8496ea510f9a14497f7c..fa638963908fdb4a8346e3040b1825cd94fd9cab 100644 (file)
@@ -99,6 +99,12 @@ static int c2_query_port(struct ib_device *ibdev,
        return 0;
 }
 
+static enum rdma_protocol_type
+c2_query_protocol(struct ib_device *device, u8 port_num)
+{
+       return RDMA_PROTOCOL_IWARP;
+}
+
 static int c2_query_pkey(struct ib_device *ibdev,
                         u8 port, u16 index, u16 * pkey)
 {
@@ -757,6 +763,22 @@ static struct net_device *c2_pseudo_netdev_init(struct c2_dev *c2dev)
        return netdev;
 }
 
+static int c2_port_immutable(struct ib_device *ibdev, u8 port_num,
+                            struct ib_port_immutable *immutable)
+{
+       struct ib_port_attr attr;
+       int err;
+
+       err = c2_query_port(ibdev, port_num, &attr);
+       if (err)
+               return err;
+
+       immutable->pkey_tbl_len = attr.pkey_tbl_len;
+       immutable->gid_tbl_len = attr.gid_tbl_len;
+
+       return 0;
+}
+
 int c2_register_device(struct c2_dev *dev)
 {
        int ret = -ENOMEM;
@@ -801,6 +823,7 @@ int c2_register_device(struct c2_dev *dev)
        dev->ibdev.dma_device = &dev->pcidev->dev;
        dev->ibdev.query_device = c2_query_device;
        dev->ibdev.query_port = c2_query_port;
+       dev->ibdev.query_protocol = c2_query_protocol;
        dev->ibdev.query_pkey = c2_query_pkey;
        dev->ibdev.query_gid = c2_query_gid;
        dev->ibdev.alloc_ucontext = c2_alloc_ucontext;
@@ -820,6 +843,7 @@ int c2_register_device(struct c2_dev *dev)
        dev->ibdev.reg_phys_mr = c2_reg_phys_mr;
        dev->ibdev.reg_user_mr = c2_reg_user_mr;
        dev->ibdev.dereg_mr = c2_dereg_mr;
+       dev->ibdev.get_port_immutable = c2_port_immutable;
 
        dev->ibdev.alloc_fmr = NULL;
        dev->ibdev.unmap_fmr = NULL;