mirror of
https://github.com/torvalds/linux.git
synced 2024-12-26 21:02:19 +00:00
53e7d6feb9
Update the nic about the resources of the queue pairs. 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>
215 lines
6.7 KiB
C
215 lines
6.7 KiB
C
/*
|
|
* Huawei HiNIC PCI Express Linux driver
|
|
* Copyright(c) 2017 Huawei Technologies Co., Ltd
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify it
|
|
* under the terms and conditions of the GNU General Public License,
|
|
* version 2, as published by the Free Software Foundation.
|
|
*
|
|
* This program is distributed in the hope it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
* for more details.
|
|
*
|
|
*/
|
|
|
|
#ifndef HINIC_HW_QP_CTXT_H
|
|
#define HINIC_HW_QP_CTXT_H
|
|
|
|
#include <linux/types.h>
|
|
|
|
#include "hinic_hw_cmdq.h"
|
|
|
|
#define HINIC_SQ_CTXT_CEQ_ATTR_GLOBAL_SQ_ID_SHIFT 13
|
|
#define HINIC_SQ_CTXT_CEQ_ATTR_EN_SHIFT 23
|
|
|
|
#define HINIC_SQ_CTXT_CEQ_ATTR_GLOBAL_SQ_ID_MASK 0x3FF
|
|
#define HINIC_SQ_CTXT_CEQ_ATTR_EN_MASK 0x1
|
|
|
|
#define HINIC_SQ_CTXT_CEQ_ATTR_SET(val, member) \
|
|
(((u32)(val) & HINIC_SQ_CTXT_CEQ_ATTR_##member##_MASK) \
|
|
<< HINIC_SQ_CTXT_CEQ_ATTR_##member##_SHIFT)
|
|
|
|
#define HINIC_SQ_CTXT_CI_IDX_SHIFT 11
|
|
#define HINIC_SQ_CTXT_CI_WRAPPED_SHIFT 23
|
|
|
|
#define HINIC_SQ_CTXT_CI_IDX_MASK 0xFFF
|
|
#define HINIC_SQ_CTXT_CI_WRAPPED_MASK 0x1
|
|
|
|
#define HINIC_SQ_CTXT_CI_SET(val, member) \
|
|
(((u32)(val) & HINIC_SQ_CTXT_CI_##member##_MASK) \
|
|
<< HINIC_SQ_CTXT_CI_##member##_SHIFT)
|
|
|
|
#define HINIC_SQ_CTXT_WQ_PAGE_HI_PFN_SHIFT 0
|
|
#define HINIC_SQ_CTXT_WQ_PAGE_PI_SHIFT 20
|
|
|
|
#define HINIC_SQ_CTXT_WQ_PAGE_HI_PFN_MASK 0xFFFFF
|
|
#define HINIC_SQ_CTXT_WQ_PAGE_PI_MASK 0xFFF
|
|
|
|
#define HINIC_SQ_CTXT_WQ_PAGE_SET(val, member) \
|
|
(((u32)(val) & HINIC_SQ_CTXT_WQ_PAGE_##member##_MASK) \
|
|
<< HINIC_SQ_CTXT_WQ_PAGE_##member##_SHIFT)
|
|
|
|
#define HINIC_SQ_CTXT_PREF_CACHE_THRESHOLD_SHIFT 0
|
|
#define HINIC_SQ_CTXT_PREF_CACHE_MAX_SHIFT 14
|
|
#define HINIC_SQ_CTXT_PREF_CACHE_MIN_SHIFT 25
|
|
|
|
#define HINIC_SQ_CTXT_PREF_CACHE_THRESHOLD_MASK 0x3FFF
|
|
#define HINIC_SQ_CTXT_PREF_CACHE_MAX_MASK 0x7FF
|
|
#define HINIC_SQ_CTXT_PREF_CACHE_MIN_MASK 0x7F
|
|
|
|
#define HINIC_SQ_CTXT_PREF_WQ_HI_PFN_SHIFT 0
|
|
#define HINIC_SQ_CTXT_PREF_CI_SHIFT 20
|
|
|
|
#define HINIC_SQ_CTXT_PREF_WQ_HI_PFN_MASK 0xFFFFF
|
|
#define HINIC_SQ_CTXT_PREF_CI_MASK 0xFFF
|
|
|
|
#define HINIC_SQ_CTXT_PREF_SET(val, member) \
|
|
(((u32)(val) & HINIC_SQ_CTXT_PREF_##member##_MASK) \
|
|
<< HINIC_SQ_CTXT_PREF_##member##_SHIFT)
|
|
|
|
#define HINIC_SQ_CTXT_WQ_BLOCK_HI_PFN_SHIFT 0
|
|
|
|
#define HINIC_SQ_CTXT_WQ_BLOCK_HI_PFN_MASK 0x7FFFFF
|
|
|
|
#define HINIC_SQ_CTXT_WQ_BLOCK_SET(val, member) \
|
|
(((u32)(val) & HINIC_SQ_CTXT_WQ_BLOCK_##member##_MASK) \
|
|
<< HINIC_SQ_CTXT_WQ_BLOCK_##member##_SHIFT)
|
|
|
|
#define HINIC_RQ_CTXT_CEQ_ATTR_EN_SHIFT 0
|
|
#define HINIC_RQ_CTXT_CEQ_ATTR_WRAPPED_SHIFT 1
|
|
|
|
#define HINIC_RQ_CTXT_CEQ_ATTR_EN_MASK 0x1
|
|
#define HINIC_RQ_CTXT_CEQ_ATTR_WRAPPED_MASK 0x1
|
|
|
|
#define HINIC_RQ_CTXT_CEQ_ATTR_SET(val, member) \
|
|
(((u32)(val) & HINIC_RQ_CTXT_CEQ_ATTR_##member##_MASK) \
|
|
<< HINIC_RQ_CTXT_CEQ_ATTR_##member##_SHIFT)
|
|
|
|
#define HINIC_RQ_CTXT_PI_IDX_SHIFT 0
|
|
#define HINIC_RQ_CTXT_PI_INTR_SHIFT 22
|
|
|
|
#define HINIC_RQ_CTXT_PI_IDX_MASK 0xFFF
|
|
#define HINIC_RQ_CTXT_PI_INTR_MASK 0x3FF
|
|
|
|
#define HINIC_RQ_CTXT_PI_SET(val, member) \
|
|
(((u32)(val) & HINIC_RQ_CTXT_PI_##member##_MASK) << \
|
|
HINIC_RQ_CTXT_PI_##member##_SHIFT)
|
|
|
|
#define HINIC_RQ_CTXT_WQ_PAGE_HI_PFN_SHIFT 0
|
|
#define HINIC_RQ_CTXT_WQ_PAGE_CI_SHIFT 20
|
|
|
|
#define HINIC_RQ_CTXT_WQ_PAGE_HI_PFN_MASK 0xFFFFF
|
|
#define HINIC_RQ_CTXT_WQ_PAGE_CI_MASK 0xFFF
|
|
|
|
#define HINIC_RQ_CTXT_WQ_PAGE_SET(val, member) \
|
|
(((u32)(val) & HINIC_RQ_CTXT_WQ_PAGE_##member##_MASK) << \
|
|
HINIC_RQ_CTXT_WQ_PAGE_##member##_SHIFT)
|
|
|
|
#define HINIC_RQ_CTXT_PREF_CACHE_THRESHOLD_SHIFT 0
|
|
#define HINIC_RQ_CTXT_PREF_CACHE_MAX_SHIFT 14
|
|
#define HINIC_RQ_CTXT_PREF_CACHE_MIN_SHIFT 25
|
|
|
|
#define HINIC_RQ_CTXT_PREF_CACHE_THRESHOLD_MASK 0x3FFF
|
|
#define HINIC_RQ_CTXT_PREF_CACHE_MAX_MASK 0x7FF
|
|
#define HINIC_RQ_CTXT_PREF_CACHE_MIN_MASK 0x7F
|
|
|
|
#define HINIC_RQ_CTXT_PREF_WQ_HI_PFN_SHIFT 0
|
|
#define HINIC_RQ_CTXT_PREF_CI_SHIFT 20
|
|
|
|
#define HINIC_RQ_CTXT_PREF_WQ_HI_PFN_MASK 0xFFFFF
|
|
#define HINIC_RQ_CTXT_PREF_CI_MASK 0xFFF
|
|
|
|
#define HINIC_RQ_CTXT_PREF_SET(val, member) \
|
|
(((u32)(val) & HINIC_RQ_CTXT_PREF_##member##_MASK) << \
|
|
HINIC_RQ_CTXT_PREF_##member##_SHIFT)
|
|
|
|
#define HINIC_RQ_CTXT_WQ_BLOCK_HI_PFN_SHIFT 0
|
|
|
|
#define HINIC_RQ_CTXT_WQ_BLOCK_HI_PFN_MASK 0x7FFFFF
|
|
|
|
#define HINIC_RQ_CTXT_WQ_BLOCK_SET(val, member) \
|
|
(((u32)(val) & HINIC_RQ_CTXT_WQ_BLOCK_##member##_MASK) << \
|
|
HINIC_RQ_CTXT_WQ_BLOCK_##member##_SHIFT)
|
|
|
|
#define HINIC_SQ_CTXT_SIZE(num_sqs) (sizeof(struct hinic_qp_ctxt_header) \
|
|
+ (num_sqs) * sizeof(struct hinic_sq_ctxt))
|
|
|
|
#define HINIC_RQ_CTXT_SIZE(num_rqs) (sizeof(struct hinic_qp_ctxt_header) \
|
|
+ (num_rqs) * sizeof(struct hinic_rq_ctxt))
|
|
|
|
#define HINIC_WQ_PAGE_PFN_SHIFT 12
|
|
#define HINIC_WQ_BLOCK_PFN_SHIFT 9
|
|
|
|
#define HINIC_WQ_PAGE_PFN(page_addr) ((page_addr) >> HINIC_WQ_PAGE_PFN_SHIFT)
|
|
#define HINIC_WQ_BLOCK_PFN(page_addr) ((page_addr) >> \
|
|
HINIC_WQ_BLOCK_PFN_SHIFT)
|
|
|
|
#define HINIC_Q_CTXT_MAX \
|
|
((HINIC_CMDQ_BUF_SIZE - sizeof(struct hinic_qp_ctxt_header)) \
|
|
/ sizeof(struct hinic_sq_ctxt))
|
|
|
|
enum hinic_qp_ctxt_type {
|
|
HINIC_QP_CTXT_TYPE_SQ,
|
|
HINIC_QP_CTXT_TYPE_RQ
|
|
};
|
|
|
|
struct hinic_qp_ctxt_header {
|
|
u16 num_queues;
|
|
u16 queue_type;
|
|
u32 addr_offset;
|
|
};
|
|
|
|
struct hinic_sq_ctxt {
|
|
u32 ceq_attr;
|
|
|
|
u32 ci_wrapped;
|
|
|
|
u32 wq_hi_pfn_pi;
|
|
u32 wq_lo_pfn;
|
|
|
|
u32 pref_cache;
|
|
u32 pref_wrapped;
|
|
u32 pref_wq_hi_pfn_ci;
|
|
u32 pref_wq_lo_pfn;
|
|
|
|
u32 rsvd0;
|
|
u32 rsvd1;
|
|
|
|
u32 wq_block_hi_pfn;
|
|
u32 wq_block_lo_pfn;
|
|
};
|
|
|
|
struct hinic_rq_ctxt {
|
|
u32 ceq_attr;
|
|
|
|
u32 pi_intr_attr;
|
|
|
|
u32 wq_hi_pfn_ci;
|
|
u32 wq_lo_pfn;
|
|
|
|
u32 pref_cache;
|
|
u32 pref_wrapped;
|
|
|
|
u32 pref_wq_hi_pfn_ci;
|
|
u32 pref_wq_lo_pfn;
|
|
|
|
u32 pi_paddr_hi;
|
|
u32 pi_paddr_lo;
|
|
|
|
u32 wq_block_hi_pfn;
|
|
u32 wq_block_lo_pfn;
|
|
};
|
|
|
|
struct hinic_sq_ctxt_block {
|
|
struct hinic_qp_ctxt_header hdr;
|
|
struct hinic_sq_ctxt sq_ctxt[HINIC_Q_CTXT_MAX];
|
|
};
|
|
|
|
struct hinic_rq_ctxt_block {
|
|
struct hinic_qp_ctxt_header hdr;
|
|
struct hinic_rq_ctxt rq_ctxt[HINIC_Q_CTXT_MAX];
|
|
};
|
|
|
|
#endif
|