12025cf9eSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */ 253e7d6feSAviad Krawczyk /* 353e7d6feSAviad Krawczyk * Huawei HiNIC PCI Express Linux driver 453e7d6feSAviad Krawczyk * Copyright(c) 2017 Huawei Technologies Co., Ltd 553e7d6feSAviad Krawczyk */ 653e7d6feSAviad Krawczyk 753e7d6feSAviad Krawczyk #ifndef HINIC_HW_QP_CTXT_H 853e7d6feSAviad Krawczyk #define HINIC_HW_QP_CTXT_H 953e7d6feSAviad Krawczyk 1053e7d6feSAviad Krawczyk #include <linux/types.h> 1153e7d6feSAviad Krawczyk 1253e7d6feSAviad Krawczyk #include "hinic_hw_cmdq.h" 1353e7d6feSAviad Krawczyk 1453e7d6feSAviad Krawczyk #define HINIC_SQ_CTXT_CEQ_ATTR_GLOBAL_SQ_ID_SHIFT 13 1553e7d6feSAviad Krawczyk #define HINIC_SQ_CTXT_CEQ_ATTR_EN_SHIFT 23 1653e7d6feSAviad Krawczyk 1753e7d6feSAviad Krawczyk #define HINIC_SQ_CTXT_CEQ_ATTR_GLOBAL_SQ_ID_MASK 0x3FF 1853e7d6feSAviad Krawczyk #define HINIC_SQ_CTXT_CEQ_ATTR_EN_MASK 0x1 1953e7d6feSAviad Krawczyk 2053e7d6feSAviad Krawczyk #define HINIC_SQ_CTXT_CEQ_ATTR_SET(val, member) \ 2153e7d6feSAviad Krawczyk (((u32)(val) & HINIC_SQ_CTXT_CEQ_ATTR_##member##_MASK) \ 2253e7d6feSAviad Krawczyk << HINIC_SQ_CTXT_CEQ_ATTR_##member##_SHIFT) 2353e7d6feSAviad Krawczyk 2453e7d6feSAviad Krawczyk #define HINIC_SQ_CTXT_CI_IDX_SHIFT 11 2553e7d6feSAviad Krawczyk #define HINIC_SQ_CTXT_CI_WRAPPED_SHIFT 23 2653e7d6feSAviad Krawczyk 2753e7d6feSAviad Krawczyk #define HINIC_SQ_CTXT_CI_IDX_MASK 0xFFF 2853e7d6feSAviad Krawczyk #define HINIC_SQ_CTXT_CI_WRAPPED_MASK 0x1 2953e7d6feSAviad Krawczyk 3053e7d6feSAviad Krawczyk #define HINIC_SQ_CTXT_CI_SET(val, member) \ 3153e7d6feSAviad Krawczyk (((u32)(val) & HINIC_SQ_CTXT_CI_##member##_MASK) \ 3253e7d6feSAviad Krawczyk << HINIC_SQ_CTXT_CI_##member##_SHIFT) 3353e7d6feSAviad Krawczyk 3453e7d6feSAviad Krawczyk #define HINIC_SQ_CTXT_WQ_PAGE_HI_PFN_SHIFT 0 3553e7d6feSAviad Krawczyk #define HINIC_SQ_CTXT_WQ_PAGE_PI_SHIFT 20 3653e7d6feSAviad Krawczyk 3753e7d6feSAviad Krawczyk #define HINIC_SQ_CTXT_WQ_PAGE_HI_PFN_MASK 0xFFFFF 3853e7d6feSAviad Krawczyk #define HINIC_SQ_CTXT_WQ_PAGE_PI_MASK 0xFFF 3953e7d6feSAviad Krawczyk 4053e7d6feSAviad Krawczyk #define HINIC_SQ_CTXT_WQ_PAGE_SET(val, member) \ 4153e7d6feSAviad Krawczyk (((u32)(val) & HINIC_SQ_CTXT_WQ_PAGE_##member##_MASK) \ 4253e7d6feSAviad Krawczyk << HINIC_SQ_CTXT_WQ_PAGE_##member##_SHIFT) 4353e7d6feSAviad Krawczyk 4453e7d6feSAviad Krawczyk #define HINIC_SQ_CTXT_PREF_CACHE_THRESHOLD_SHIFT 0 4553e7d6feSAviad Krawczyk #define HINIC_SQ_CTXT_PREF_CACHE_MAX_SHIFT 14 4653e7d6feSAviad Krawczyk #define HINIC_SQ_CTXT_PREF_CACHE_MIN_SHIFT 25 4753e7d6feSAviad Krawczyk 4853e7d6feSAviad Krawczyk #define HINIC_SQ_CTXT_PREF_CACHE_THRESHOLD_MASK 0x3FFF 4953e7d6feSAviad Krawczyk #define HINIC_SQ_CTXT_PREF_CACHE_MAX_MASK 0x7FF 5053e7d6feSAviad Krawczyk #define HINIC_SQ_CTXT_PREF_CACHE_MIN_MASK 0x7F 5153e7d6feSAviad Krawczyk 5253e7d6feSAviad Krawczyk #define HINIC_SQ_CTXT_PREF_WQ_HI_PFN_SHIFT 0 5353e7d6feSAviad Krawczyk #define HINIC_SQ_CTXT_PREF_CI_SHIFT 20 5453e7d6feSAviad Krawczyk 5553e7d6feSAviad Krawczyk #define HINIC_SQ_CTXT_PREF_WQ_HI_PFN_MASK 0xFFFFF 5653e7d6feSAviad Krawczyk #define HINIC_SQ_CTXT_PREF_CI_MASK 0xFFF 5753e7d6feSAviad Krawczyk 5853e7d6feSAviad Krawczyk #define HINIC_SQ_CTXT_PREF_SET(val, member) \ 5953e7d6feSAviad Krawczyk (((u32)(val) & HINIC_SQ_CTXT_PREF_##member##_MASK) \ 6053e7d6feSAviad Krawczyk << HINIC_SQ_CTXT_PREF_##member##_SHIFT) 6153e7d6feSAviad Krawczyk 6253e7d6feSAviad Krawczyk #define HINIC_SQ_CTXT_WQ_BLOCK_HI_PFN_SHIFT 0 6353e7d6feSAviad Krawczyk 6453e7d6feSAviad Krawczyk #define HINIC_SQ_CTXT_WQ_BLOCK_HI_PFN_MASK 0x7FFFFF 6553e7d6feSAviad Krawczyk 6653e7d6feSAviad Krawczyk #define HINIC_SQ_CTXT_WQ_BLOCK_SET(val, member) \ 6753e7d6feSAviad Krawczyk (((u32)(val) & HINIC_SQ_CTXT_WQ_BLOCK_##member##_MASK) \ 6853e7d6feSAviad Krawczyk << HINIC_SQ_CTXT_WQ_BLOCK_##member##_SHIFT) 6953e7d6feSAviad Krawczyk 7053e7d6feSAviad Krawczyk #define HINIC_RQ_CTXT_CEQ_ATTR_EN_SHIFT 0 7153e7d6feSAviad Krawczyk #define HINIC_RQ_CTXT_CEQ_ATTR_WRAPPED_SHIFT 1 7253e7d6feSAviad Krawczyk 7353e7d6feSAviad Krawczyk #define HINIC_RQ_CTXT_CEQ_ATTR_EN_MASK 0x1 7453e7d6feSAviad Krawczyk #define HINIC_RQ_CTXT_CEQ_ATTR_WRAPPED_MASK 0x1 7553e7d6feSAviad Krawczyk 7653e7d6feSAviad Krawczyk #define HINIC_RQ_CTXT_CEQ_ATTR_SET(val, member) \ 7753e7d6feSAviad Krawczyk (((u32)(val) & HINIC_RQ_CTXT_CEQ_ATTR_##member##_MASK) \ 7853e7d6feSAviad Krawczyk << HINIC_RQ_CTXT_CEQ_ATTR_##member##_SHIFT) 7953e7d6feSAviad Krawczyk 8053e7d6feSAviad Krawczyk #define HINIC_RQ_CTXT_PI_IDX_SHIFT 0 8153e7d6feSAviad Krawczyk #define HINIC_RQ_CTXT_PI_INTR_SHIFT 22 8253e7d6feSAviad Krawczyk 8353e7d6feSAviad Krawczyk #define HINIC_RQ_CTXT_PI_IDX_MASK 0xFFF 8453e7d6feSAviad Krawczyk #define HINIC_RQ_CTXT_PI_INTR_MASK 0x3FF 8553e7d6feSAviad Krawczyk 8653e7d6feSAviad Krawczyk #define HINIC_RQ_CTXT_PI_SET(val, member) \ 8753e7d6feSAviad Krawczyk (((u32)(val) & HINIC_RQ_CTXT_PI_##member##_MASK) << \ 8853e7d6feSAviad Krawczyk HINIC_RQ_CTXT_PI_##member##_SHIFT) 8953e7d6feSAviad Krawczyk 9053e7d6feSAviad Krawczyk #define HINIC_RQ_CTXT_WQ_PAGE_HI_PFN_SHIFT 0 9153e7d6feSAviad Krawczyk #define HINIC_RQ_CTXT_WQ_PAGE_CI_SHIFT 20 9253e7d6feSAviad Krawczyk 9353e7d6feSAviad Krawczyk #define HINIC_RQ_CTXT_WQ_PAGE_HI_PFN_MASK 0xFFFFF 9453e7d6feSAviad Krawczyk #define HINIC_RQ_CTXT_WQ_PAGE_CI_MASK 0xFFF 9553e7d6feSAviad Krawczyk 9653e7d6feSAviad Krawczyk #define HINIC_RQ_CTXT_WQ_PAGE_SET(val, member) \ 9753e7d6feSAviad Krawczyk (((u32)(val) & HINIC_RQ_CTXT_WQ_PAGE_##member##_MASK) << \ 9853e7d6feSAviad Krawczyk HINIC_RQ_CTXT_WQ_PAGE_##member##_SHIFT) 9953e7d6feSAviad Krawczyk 10053e7d6feSAviad Krawczyk #define HINIC_RQ_CTXT_PREF_CACHE_THRESHOLD_SHIFT 0 10153e7d6feSAviad Krawczyk #define HINIC_RQ_CTXT_PREF_CACHE_MAX_SHIFT 14 10253e7d6feSAviad Krawczyk #define HINIC_RQ_CTXT_PREF_CACHE_MIN_SHIFT 25 10353e7d6feSAviad Krawczyk 10453e7d6feSAviad Krawczyk #define HINIC_RQ_CTXT_PREF_CACHE_THRESHOLD_MASK 0x3FFF 10553e7d6feSAviad Krawczyk #define HINIC_RQ_CTXT_PREF_CACHE_MAX_MASK 0x7FF 10653e7d6feSAviad Krawczyk #define HINIC_RQ_CTXT_PREF_CACHE_MIN_MASK 0x7F 10753e7d6feSAviad Krawczyk 10853e7d6feSAviad Krawczyk #define HINIC_RQ_CTXT_PREF_WQ_HI_PFN_SHIFT 0 10953e7d6feSAviad Krawczyk #define HINIC_RQ_CTXT_PREF_CI_SHIFT 20 11053e7d6feSAviad Krawczyk 11153e7d6feSAviad Krawczyk #define HINIC_RQ_CTXT_PREF_WQ_HI_PFN_MASK 0xFFFFF 11253e7d6feSAviad Krawczyk #define HINIC_RQ_CTXT_PREF_CI_MASK 0xFFF 11353e7d6feSAviad Krawczyk 11453e7d6feSAviad Krawczyk #define HINIC_RQ_CTXT_PREF_SET(val, member) \ 11553e7d6feSAviad Krawczyk (((u32)(val) & HINIC_RQ_CTXT_PREF_##member##_MASK) << \ 11653e7d6feSAviad Krawczyk HINIC_RQ_CTXT_PREF_##member##_SHIFT) 11753e7d6feSAviad Krawczyk 11853e7d6feSAviad Krawczyk #define HINIC_RQ_CTXT_WQ_BLOCK_HI_PFN_SHIFT 0 11953e7d6feSAviad Krawczyk 12053e7d6feSAviad Krawczyk #define HINIC_RQ_CTXT_WQ_BLOCK_HI_PFN_MASK 0x7FFFFF 12153e7d6feSAviad Krawczyk 12253e7d6feSAviad Krawczyk #define HINIC_RQ_CTXT_WQ_BLOCK_SET(val, member) \ 12353e7d6feSAviad Krawczyk (((u32)(val) & HINIC_RQ_CTXT_WQ_BLOCK_##member##_MASK) << \ 12453e7d6feSAviad Krawczyk HINIC_RQ_CTXT_WQ_BLOCK_##member##_SHIFT) 12553e7d6feSAviad Krawczyk 12653e7d6feSAviad Krawczyk #define HINIC_SQ_CTXT_SIZE(num_sqs) (sizeof(struct hinic_qp_ctxt_header) \ 12753e7d6feSAviad Krawczyk + (num_sqs) * sizeof(struct hinic_sq_ctxt)) 12853e7d6feSAviad Krawczyk 12953e7d6feSAviad Krawczyk #define HINIC_RQ_CTXT_SIZE(num_rqs) (sizeof(struct hinic_qp_ctxt_header) \ 13053e7d6feSAviad Krawczyk + (num_rqs) * sizeof(struct hinic_rq_ctxt)) 13153e7d6feSAviad Krawczyk 13253e7d6feSAviad Krawczyk #define HINIC_WQ_PAGE_PFN_SHIFT 12 13353e7d6feSAviad Krawczyk #define HINIC_WQ_BLOCK_PFN_SHIFT 9 13453e7d6feSAviad Krawczyk 13553e7d6feSAviad Krawczyk #define HINIC_WQ_PAGE_PFN(page_addr) ((page_addr) >> HINIC_WQ_PAGE_PFN_SHIFT) 13653e7d6feSAviad Krawczyk #define HINIC_WQ_BLOCK_PFN(page_addr) ((page_addr) >> \ 13753e7d6feSAviad Krawczyk HINIC_WQ_BLOCK_PFN_SHIFT) 13853e7d6feSAviad Krawczyk 13953e7d6feSAviad Krawczyk #define HINIC_Q_CTXT_MAX \ 14053e7d6feSAviad Krawczyk ((HINIC_CMDQ_BUF_SIZE - sizeof(struct hinic_qp_ctxt_header)) \ 14153e7d6feSAviad Krawczyk / sizeof(struct hinic_sq_ctxt)) 14253e7d6feSAviad Krawczyk 14353e7d6feSAviad Krawczyk enum hinic_qp_ctxt_type { 14453e7d6feSAviad Krawczyk HINIC_QP_CTXT_TYPE_SQ, 14553e7d6feSAviad Krawczyk HINIC_QP_CTXT_TYPE_RQ 14653e7d6feSAviad Krawczyk }; 14753e7d6feSAviad Krawczyk 14853e7d6feSAviad Krawczyk struct hinic_qp_ctxt_header { 14953e7d6feSAviad Krawczyk u16 num_queues; 15053e7d6feSAviad Krawczyk u16 queue_type; 15153e7d6feSAviad Krawczyk u32 addr_offset; 15253e7d6feSAviad Krawczyk }; 15353e7d6feSAviad Krawczyk 15453e7d6feSAviad Krawczyk struct hinic_sq_ctxt { 15553e7d6feSAviad Krawczyk u32 ceq_attr; 15653e7d6feSAviad Krawczyk 15753e7d6feSAviad Krawczyk u32 ci_wrapped; 15853e7d6feSAviad Krawczyk 15953e7d6feSAviad Krawczyk u32 wq_hi_pfn_pi; 16053e7d6feSAviad Krawczyk u32 wq_lo_pfn; 16153e7d6feSAviad Krawczyk 16253e7d6feSAviad Krawczyk u32 pref_cache; 16353e7d6feSAviad Krawczyk u32 pref_wrapped; 16453e7d6feSAviad Krawczyk u32 pref_wq_hi_pfn_ci; 16553e7d6feSAviad Krawczyk u32 pref_wq_lo_pfn; 16653e7d6feSAviad Krawczyk 16753e7d6feSAviad Krawczyk u32 rsvd0; 16853e7d6feSAviad Krawczyk u32 rsvd1; 16953e7d6feSAviad Krawczyk 17053e7d6feSAviad Krawczyk u32 wq_block_hi_pfn; 17153e7d6feSAviad Krawczyk u32 wq_block_lo_pfn; 17253e7d6feSAviad Krawczyk }; 17353e7d6feSAviad Krawczyk 17453e7d6feSAviad Krawczyk struct hinic_rq_ctxt { 17553e7d6feSAviad Krawczyk u32 ceq_attr; 17653e7d6feSAviad Krawczyk 17753e7d6feSAviad Krawczyk u32 pi_intr_attr; 17853e7d6feSAviad Krawczyk 17953e7d6feSAviad Krawczyk u32 wq_hi_pfn_ci; 18053e7d6feSAviad Krawczyk u32 wq_lo_pfn; 18153e7d6feSAviad Krawczyk 18253e7d6feSAviad Krawczyk u32 pref_cache; 18353e7d6feSAviad Krawczyk u32 pref_wrapped; 18453e7d6feSAviad Krawczyk 18553e7d6feSAviad Krawczyk u32 pref_wq_hi_pfn_ci; 18653e7d6feSAviad Krawczyk u32 pref_wq_lo_pfn; 18753e7d6feSAviad Krawczyk 18853e7d6feSAviad Krawczyk u32 pi_paddr_hi; 18953e7d6feSAviad Krawczyk u32 pi_paddr_lo; 19053e7d6feSAviad Krawczyk 19153e7d6feSAviad Krawczyk u32 wq_block_hi_pfn; 19253e7d6feSAviad Krawczyk u32 wq_block_lo_pfn; 19353e7d6feSAviad Krawczyk }; 19453e7d6feSAviad Krawczyk 19553e7d6feSAviad Krawczyk struct hinic_clean_queue_ctxt { 19653e7d6feSAviad Krawczyk struct hinic_qp_ctxt_header cmdq_hdr; 19753e7d6feSAviad Krawczyk u32 ctxt_size; 19853e7d6feSAviad Krawczyk }; 19953e7d6feSAviad Krawczyk 20053e7d6feSAviad Krawczyk struct hinic_sq_ctxt_block { 20153e7d6feSAviad Krawczyk struct hinic_qp_ctxt_header hdr; 20253e7d6feSAviad Krawczyk struct hinic_sq_ctxt sq_ctxt[HINIC_Q_CTXT_MAX]; 20353e7d6feSAviad Krawczyk }; 20453e7d6feSAviad Krawczyk 20553e7d6feSAviad Krawczyk struct hinic_rq_ctxt_block { 206 struct hinic_qp_ctxt_header hdr; 207 struct hinic_rq_ctxt rq_ctxt[HINIC_Q_CTXT_MAX]; 208 }; 209 210 #endif 211