summaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/huawei/hinic/hinic_hw_io.h
diff options
context:
space:
mode:
authorAviad Krawczyk2017-08-21 17:55:58 +0200
committerDavid S. Miller2017-08-22 19:48:53 +0200
commitf91090f7da3a215e3cf8f678ab71ad65d1d627a1 (patch)
treeaab79f1a1b0aadebf6c319e38137ee153de0e48f /drivers/net/ethernet/huawei/hinic/hinic_hw_io.h
parentnet-next/hinic: Add wq (diff)
downloadkernel-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.h27
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,