cxgb3 - Expose HW memory page info
authorDivy Le Ray <divy@chelsio.com>
Wed, 22 Aug 2007 03:49:21 +0000 (20:49 -0700)
committerDavid S. Miller <davem@sunset.davemloft.net>
Wed, 10 Oct 2007 23:50:49 +0000 (16:50 -0700)
A HW issue requires limiting the receive window size
to 23 pages of internal memory.
These pages can be configured to different sizes,
thus the RDMA driver needs to know the
page size to enforce the upper limit.

Also assign explicit enum values.

Signed-off-by: Divy Le Ray <divy@chelsio.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
drivers/net/cxgb3/cxgb3_ctl_defs.h
drivers/net/cxgb3/cxgb3_offload.c

index 2095ddacff786902b1b0b6d8fb1389cb4231d5f0..6c4f32066919b89271678151d763d9278eed7368 100644 (file)
 #define _CXGB3_OFFLOAD_CTL_DEFS_H
 
 enum {
-       GET_MAX_OUTSTANDING_WR,
-       GET_TX_MAX_CHUNK,
-       GET_TID_RANGE,
-       GET_STID_RANGE,
-       GET_RTBL_RANGE,
-       GET_L2T_CAPACITY,
-       GET_MTUS,
-       GET_WR_LEN,
-       GET_IFF_FROM_MAC,
-       GET_DDP_PARAMS,
-       GET_PORTS,
-
-       ULP_ISCSI_GET_PARAMS,
-       ULP_ISCSI_SET_PARAMS,
-
-       RDMA_GET_PARAMS,
-       RDMA_CQ_OP,
-       RDMA_CQ_SETUP,
-       RDMA_CQ_DISABLE,
-       RDMA_CTRL_QP_SETUP,
-       RDMA_GET_MEM,
+       GET_MAX_OUTSTANDING_WR  = 0,
+       GET_TX_MAX_CHUNK        = 1,
+       GET_TID_RANGE           = 2,
+       GET_STID_RANGE          = 3,
+       GET_RTBL_RANGE          = 4,
+       GET_L2T_CAPACITY        = 5,
+       GET_MTUS                = 6,
+       GET_WR_LEN              = 7,
+       GET_IFF_FROM_MAC        = 8,
+       GET_DDP_PARAMS          = 9,
+       GET_PORTS               = 10,
+
+       ULP_ISCSI_GET_PARAMS    = 11,
+       ULP_ISCSI_SET_PARAMS    = 12,
+
+       RDMA_GET_PARAMS         = 13,
+       RDMA_CQ_OP              = 14,
+       RDMA_CQ_SETUP           = 15,
+       RDMA_CQ_DISABLE         = 16,
+       RDMA_CTRL_QP_SETUP      = 17,
+       RDMA_GET_MEM            = 18,
+
+       GET_RX_PAGE_INFO        = 50,
 };
 
 /*
@@ -161,4 +163,12 @@ struct rdma_ctrlqp_setup {
        unsigned long long base_addr;
        unsigned int size;
 };
+
+/*
+ * Offload TX/RX page information.
+ */
+struct ofld_page_info {
+       unsigned int page_size;  /* Page size, should be a power of 2 */
+       unsigned int num;        /* Number of pages */
+};
 #endif                         /* _CXGB3_OFFLOAD_CTL_DEFS_H */
index bdff7baeb59da4d5683270d50a1cea9da5fcb845..bac9214170ae591475752ec5890a0e2b9d8507fd 100644 (file)
@@ -317,6 +317,8 @@ static int cxgb_offload_ctl(struct t3cdev *tdev, unsigned int req, void *data)
        struct iff_mac *iffmacp;
        struct ddp_params *ddpp;
        struct adap_ports *ports;
+       struct ofld_page_info *rx_page_info;
+       struct tp_params *tp = &adapter->params.tp;
        int i;
 
        switch (req) {
@@ -382,6 +384,11 @@ static int cxgb_offload_ctl(struct t3cdev *tdev, unsigned int req, void *data)
                if (!offload_running(adapter))
                        return -EAGAIN;
                return cxgb_rdma_ctl(adapter, req, data);
+       case GET_RX_PAGE_INFO:
+               rx_page_info = data;
+               rx_page_info->page_size = tp->rx_pg_size;
+               rx_page_info->num = tp->rx_num_pgs;
+               break;
        default:
                return -EOPNOTSUPP;
        }