1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(c) 2019 Intel Corporation.
10 extern int ntb_logtype;
12 #define NTB_LOG(level, fmt, args...) \
13 rte_log(RTE_LOG_ ## level, ntb_logtype, "%s(): " fmt "\n", \
17 #define NTB_INTEL_VENDOR_ID 0x8086
20 #define NTB_INTEL_DEV_ID_B2B_SKX 0x201C
22 #define NTB_TOPO_NAME "topo"
23 #define NTB_LINK_STATUS_NAME "link_status"
24 #define NTB_SPEED_NAME "speed"
25 #define NTB_WIDTH_NAME "width"
26 #define NTB_MW_CNT_NAME "mw_count"
27 #define NTB_DB_CNT_NAME "db_count"
28 #define NTB_SPAD_CNT_NAME "spad_count"
29 /* Reserved to app to use. */
30 #define NTB_SPAD_USER "spad_user_"
31 #define NTB_SPAD_USER_LEN (sizeof(NTB_SPAD_USER) - 1)
32 #define NTB_SPAD_USER_MAX_NUM 10
33 #define NTB_ATTR_NAME_LEN 30
34 #define NTB_ATTR_VAL_LEN 30
35 #define NTB_ATTR_MAX 20
39 /**< Name of the attribute */
40 char name[NTB_ATTR_NAME_LEN];
41 /**< Value or reference of value of attribute */
42 char value[NTB_ATTR_NAME_LEN];
85 /* Define spad registers usage. 0 is reserved. */
97 * NTB device operations
98 * @ntb_dev_init: Init ntb dev.
99 * @get_peer_mw_addr: To get the addr of peer mw[mw_idx].
100 * @mw_set_trans: Set translation of internal memory that remote can access.
101 * @get_link_status: get link status, link speed and link width.
102 * @set_link: Set local side up/down.
103 * @spad_read: Read local/peer spad register val.
104 * @spad_write: Write val to local/peer spad register.
105 * @db_read: Read doorbells status.
106 * @db_clear: Clear local doorbells.
107 * @db_set_mask: Set bits in db mask, preventing db interrpts generated
109 * @peer_db_set: Set doorbell bit to generate peer interrupt for that bit.
110 * @vector_bind: Bind vector source [intr] to msix vector [msix].
113 int (*ntb_dev_init)(struct rte_rawdev *dev);
114 void *(*get_peer_mw_addr)(struct rte_rawdev *dev, int mw_idx);
115 int (*mw_set_trans)(struct rte_rawdev *dev, int mw_idx,
116 uint64_t addr, uint64_t size);
117 int (*get_link_status)(struct rte_rawdev *dev);
118 int (*set_link)(struct rte_rawdev *dev, bool up);
119 uint32_t (*spad_read)(struct rte_rawdev *dev, int spad, bool peer);
120 int (*spad_write)(struct rte_rawdev *dev, int spad,
121 bool peer, uint32_t spad_v);
122 uint64_t (*db_read)(struct rte_rawdev *dev);
123 int (*db_clear)(struct rte_rawdev *dev, uint64_t db_bits);
124 int (*db_set_mask)(struct rte_rawdev *dev, uint64_t db_mask);
125 int (*peer_db_set)(struct rte_rawdev *dev, uint8_t db_bit);
126 int (*vector_bind)(struct rte_rawdev *dev, uint8_t intr, uint8_t msix);
129 /* ntb private data. */
136 uint64_t db_valid_mask;
141 enum ntb_link link_status;
142 enum ntb_speed link_speed;
143 enum ntb_width link_width;
145 const struct ntb_dev_ops *ntb_ops;
147 struct rte_pci_device *pci_dev;
151 uint64_t *peer_mw_size;
154 uint16_t queue_pairs;
157 /**< mem zone to populate RX ring. */
158 const struct rte_memzone **mz;
160 /* Reserve several spad for app to use. */
161 int spad_user_list[NTB_SPAD_USER_MAX_NUM];
164 #endif /* _NTB_RAWDEV_H_ */