diff options
author | Aviad Krawczyk | 2017-08-21 17:55:58 +0200 |
---|---|---|
committer | David S. Miller | 2017-08-22 19:48:53 +0200 |
commit | f91090f7da3a215e3cf8f678ab71ad65d1d627a1 (patch) | |
tree | aab79f1a1b0aadebf6c319e38137ee153de0e48f /drivers/net/ethernet/huawei/hinic/hinic_hw_io.h | |
parent | net-next/hinic: Add wq (diff) | |
download | kernel-qcow2-linux-f91090f7da3a215e3cf8f678ab71ad65d1d627a1.tar.gz kernel-qcow2-linux-f91090f7da3a215e3cf8f678ab71ad65d1d627a1.tar.xz kernel-qcow2-linux-f91090f7da3a215e3cf8f678ab71ad65d1d627a1.zip |
net-next/hinic: Add qp resources
Create the resources for queue pair operations: doorbell area,
consumer index address and producer index address.
Signed-off-by: Aviad Krawczyk <aviad.krawczyk@huawei.com>
Signed-off-by: Zhao Chen <zhaochen6@huawei.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/huawei/hinic/hinic_hw_io.h')
-rw-r--r-- | drivers/net/ethernet/huawei/hinic/hinic_hw_io.h | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/drivers/net/ethernet/huawei/hinic/hinic_hw_io.h b/drivers/net/ethernet/huawei/hinic/hinic_hw_io.h index 6cacb8eddd2e..2d85a38a1df6 100644 --- a/drivers/net/ethernet/huawei/hinic/hinic_hw_io.h +++ b/drivers/net/ethernet/huawei/hinic/hinic_hw_io.h @@ -18,11 +18,30 @@ #include <linux/types.h> #include <linux/pci.h> +#include <linux/semaphore.h> +#include <linux/sizes.h> #include "hinic_hw_if.h" #include "hinic_hw_wq.h" #include "hinic_hw_qp.h" +#define HINIC_DB_PAGE_SIZE SZ_4K +#define HINIC_DB_SIZE SZ_4M + +#define HINIC_DB_MAX_AREAS (HINIC_DB_SIZE / HINIC_DB_PAGE_SIZE) + +struct hinic_free_db_area { + int db_idx[HINIC_DB_MAX_AREAS]; + + int alloc_pos; + int return_pos; + + int num_free; + + /* Lock for getting db area */ + struct semaphore idx_lock; +}; + struct hinic_func_to_io { struct hinic_hwif *hwif; @@ -33,6 +52,14 @@ struct hinic_func_to_io { struct hinic_qp *qps; u16 max_qps; + + void __iomem **sq_db; + void __iomem *db_base; + + void *ci_addr_base; + dma_addr_t ci_dma_base; + + struct hinic_free_db_area free_db_area; }; int hinic_io_create_qps(struct hinic_func_to_io *func_to_io, |