2026-01-29 22:25:33 +08:00

141 lines
3.0 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* SPDX-License-Identifier: GPL-2.0 */
/* Copyright (C) 2021 - 2023, Shanghai Yunsilicon Technology Co., Ltd.
* All rights reserved.
*/
#ifndef XSC_DEVICE_H
#define XSC_DEVICE_H
#include <linux/types.h>
#include <rdma/ib_verbs.h>
enum {
XSC_MAX_COMMANDS = 32,
XSC_CMD_DATA_BLOCK_SIZE = 512,
XSC_PCI_CMD_XPORT = 7,
};
enum {
XSC_PERM_LOCAL_READ = 1 << 0,
XSC_PERM_LOCAL_WRITE = 1 << 1,
XSC_PERM_REMOTE_READ = 1 << 2,
XSC_PERM_REMOTE_WRITE = 1 << 3,
XSC_PERM_ATOMIC = 1 << 6,
XSC_PERM_UMR_EN = 1 << 7,
};
enum {
XSC_ACCESS_MODE_PA = 0,
XSC_ACCESS_MODE_MTT = 1,
XSC_ACCESS_MODE_KLM = 2
};
enum {
XSC_MKEY_REMOTE_INVAL = 1 << 24,
XSC_MKEY_FLAG_SYNC_UMR = 1 << 29,
XSC_MKEY_BSF_EN = 1 << 30,
XSC_MKEY_LEN64 = 1 << 31,
};
enum {
XSC_BF_REGS_PER_PAGE = 4,
XSC_MAX_UAR_PAGES = 1 << 8,
XSC_MAX_UUARS = XSC_MAX_UAR_PAGES * XSC_BF_REGS_PER_PAGE,
};
enum {
XSC_DEV_CAP_FLAG_RC = 1LL << 0,
XSC_DEV_CAP_FLAG_UC = 1LL << 1,
XSC_DEV_CAP_FLAG_UD = 1LL << 2,
XSC_DEV_CAP_FLAG_XRC = 1LL << 3,
XSC_DEV_CAP_FLAG_SRQ = 1LL << 6,
XSC_DEV_CAP_FLAG_BAD_PKEY_CNTR = 1LL << 8,
XSC_DEV_CAP_FLAG_BAD_QKEY_CNTR = 1LL << 9,
XSC_DEV_CAP_FLAG_APM = 1LL << 17,
XSC_DEV_CAP_FLAG_ATOMIC = 1LL << 18,
XSC_DEV_CAP_FLAG_ON_DMND_PG = 1LL << 24,
XSC_DEV_CAP_FLAG_RESIZE_SRQ = 1LL << 32,
XSC_DEV_CAP_FLAG_REMOTE_FENCE = 1LL << 38,
XSC_DEV_CAP_FLAG_TLP_HINTS = 1LL << 39,
XSC_DEV_CAP_FLAG_SIG_HAND_OVER = 1LL << 40,
XSC_DEV_CAP_FLAG_DCT = 1LL << 41,
XSC_DEV_CAP_FLAG_CMDIF_CSUM = 1LL << 46,
};
enum xsc_event {
XSC_EVENT_TYPE_COMP = 0x0,
XSC_EVENT_TYPE_COMM_EST = 0x02,//mad
XSC_EVENT_TYPE_CQ_ERROR = 0x04,
XSC_EVENT_TYPE_WQ_CATAS_ERROR = 0x05,
XSC_EVENT_TYPE_INTERNAL_ERROR = 0x08,//tpe私有err无IB event对应
XSC_EVENT_TYPE_WQ_INVAL_REQ_ERROR = 0x10,//IBV_EVENT_QP_REQ_ERR
XSC_EVENT_TYPE_WQ_ACCESS_ERROR = 0x11,//IBV_EVENT_QP_ACCESS_ERR
};
struct xsc_cmd_prot_block {
u8 data[XSC_CMD_DATA_BLOCK_SIZE];
u8 rsvd0[48];
__be64 next;
__be32 block_num;
u8 owner_status; //init to 0, dma user should change this val to 1
u8 token;
u8 ctrl_sig;
u8 sig;
};
#define XSC_ATTR_EXTENDED_PORT_INFO cpu_to_be16(0xff90)
enum xsc_traffic_types {
XSC_TT_IPV4,
XSC_TT_IPV4_TCP,
XSC_TT_IPV4_UDP,
XSC_TT_IPV6,
XSC_TT_IPV6_TCP,
XSC_TT_IPV6_UDP,
XSC_TT_IPV4_IPSEC_AH,
XSC_TT_IPV6_IPSEC_AH,
XSC_TT_IPV4_IPSEC_ESP,
XSC_TT_IPV6_IPSEC_ESP,
XSC_TT_ANY,
XSC_NUM_TT,
};
#define XSC_NUM_INDIR_TIRS XSC_NUM_TT
enum {
XSC_HASH_FUNC_XOR = 0,
XSC_HASH_FUNC_TOP = 1,
XSC_HASH_FUNC_TOP_SYM = 2,
XSC_HASH_FUNC_RSV = 3,
};
enum {
XSC_L3_PROT_TYPE_IPV4 = 1 << 0,
XSC_L3_PROT_TYPE_IPV6 = 1 << 1,
};
enum {
XSC_L4_PROT_TYPE_TCP = 1 << 0,
XSC_L4_PROT_TYPE_UDP = 1 << 1,
};
struct xsc_tirc_config {
u8 l3_prot_type;
u8 l4_prot_type;
u32 rx_hash_fields;
};
static inline u8 hash_func_type(u8 hash_func)
{
switch (hash_func) {
case ETH_RSS_HASH_TOP:
return XSC_HASH_FUNC_TOP;
case ETH_RSS_HASH_XOR:
return XSC_HASH_FUNC_XOR;
default:
return XSC_HASH_FUNC_TOP;
}
}
#endif /* XSC_DEVICE_H */