File Index
Files and directories
Sign in
FILE

rtase.h

File preview with syntax highlighting.

linux-6.19.14/drivers/net/ethernet/realtek/rtase/rtase.h C
  1/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
  2/*
  3 *  rtase is the Linux device driver released for Realtek Automotive Switch
  4 *  controllers with PCI-Express interface.
  5 *
  6 *  Copyright(c) 2024 Realtek Semiconductor Corp.
  7 */
  8
  9#ifndef RTASE_H
 10#define RTASE_H
 11
 12#define RTASE_HW_VER_MASK     0x7C800000
 13#define RTASE_HW_VER_906X_7XA 0x00800000
 14#define RTASE_HW_VER_906X_7XC 0x04000000
 15#define RTASE_HW_VER_907XD_V1 0x04800000
 16#define RTASE_HW_VER_907XD_VA 0x08000000
 17
 18#define RTASE_RX_DMA_BURST_256       4
 19#define RTASE_TX_DMA_BURST_UNLIMITED 7
 20
 21#define RTASE_RX_BUF_SIZE    (PAGE_SIZE - \
 22			      SKB_DATA_ALIGN(sizeof(struct skb_shared_info)))
 23#define RTASE_MAX_JUMBO_SIZE (RTASE_RX_BUF_SIZE - VLAN_ETH_HLEN - ETH_FCS_LEN)
 24
 25/* 3 means InterFrameGap = the shortest one */
 26#define RTASE_INTERFRAMEGAP 0x03
 27
 28#define RTASE_REGS_SIZE     256
 29#define RTASE_PCI_REGS_SIZE 0x100
 30
 31#define RTASE_MULTICAST_FILTER_MASK GENMASK(30, 26)
 32
 33#define RTASE_VLAN_FILTER_ENTRY_NUM 32
 34#define RTASE_NUM_TX_QUEUE 8
 35#define RTASE_NUM_RX_QUEUE 4
 36
 37#define RTASE_TXQ_CTRL      1
 38#define RTASE_FUNC_TXQ_NUM  1
 39#define RTASE_FUNC_RXQ_NUM  1
 40#define RTASE_INTERRUPT_NUM 1
 41
 42#define RTASE_MITI_TIME_COUNT_MASK    GENMASK(3, 0)
 43#define RTASE_MITI_TIME_UNIT_MASK     GENMASK(7, 4)
 44#define RTASE_MITI_DEFAULT_TIME       128
 45#define RTASE_MITI_MAX_TIME           491520
 46#define RTASE_MITI_PKT_NUM_COUNT_MASK GENMASK(11, 8)
 47#define RTASE_MITI_PKT_NUM_UNIT_MASK  GENMASK(13, 12)
 48#define RTASE_MITI_DEFAULT_PKT_NUM    64
 49#define RTASE_MITI_MAX_PKT_NUM_IDX    3
 50#define RTASE_MITI_MAX_PKT_NUM_UNIT   16
 51#define RTASE_MITI_MAX_PKT_NUM        240
 52#define RTASE_MITI_COUNT_BIT_NUM      4
 53
 54#define RTASE_NUM_MSIX 4
 55
 56#define RTASE_DWORD_MOD 16
 57
 58/*****************************************************************************/
 59enum rtase_registers {
 60	RTASE_MAC0   = 0x0000,
 61	RTASE_MAC4   = 0x0004,
 62	RTASE_MAR0   = 0x0008,
 63	RTASE_MAR1   = 0x000C,
 64	RTASE_DTCCR0 = 0x0010,
 65	RTASE_DTCCR4 = 0x0014,
 66#define RTASE_COUNTER_RESET BIT(0)
 67#define RTASE_COUNTER_DUMP  BIT(3)
 68
 69	RTASE_FCR = 0x0018,
 70#define RTASE_FCR_RXQ_MASK GENMASK(5, 4)
 71
 72	RTASE_LBK_CTRL = 0x001A,
 73#define RTASE_LBK_ATLD BIT(1)
 74#define RTASE_LBK_CLR  BIT(0)
 75
 76	RTASE_TX_DESC_ADDR0   = 0x0020,
 77	RTASE_TX_DESC_ADDR4   = 0x0024,
 78	RTASE_TX_DESC_COMMAND = 0x0028,
 79#define RTASE_TX_DESC_CMD_CS BIT(15)
 80#define RTASE_TX_DESC_CMD_WE BIT(14)
 81
 82	RTASE_BOOT_CTL  = 0x6004,
 83	RTASE_CLKSW_SET = 0x6018,
 84
 85	RTASE_CHIP_CMD = 0x0037,
 86#define RTASE_STOP_REQ      BIT(7)
 87#define RTASE_STOP_REQ_DONE BIT(6)
 88#define RTASE_RE            BIT(3)
 89#define RTASE_TE            BIT(2)
 90
 91	RTASE_IMR0 = 0x0038,
 92	RTASE_ISR0 = 0x003C,
 93#define RTASE_TOK7 BIT(30)
 94#define RTASE_TOK6 BIT(28)
 95#define RTASE_TOK5 BIT(26)
 96#define RTASE_TOK4 BIT(24)
 97#define RTASE_FOVW BIT(6)
 98#define RTASE_RDU  BIT(4)
 99#define RTASE_TOK  BIT(2)
100#define RTASE_ROK  BIT(0)
101
102	RTASE_IMR1 = 0x0800,
103	RTASE_ISR1 = 0x0802,
104#define RTASE_Q_TOK BIT(4)
105#define RTASE_Q_RDU BIT(1)
106#define RTASE_Q_ROK BIT(0)
107
108	RTASE_EPHY_ISR = 0x6014,
109	RTASE_EPHY_IMR = 0x6016,
110
111	RTASE_TX_CONFIG_0 = 0x0040,
112#define RTASE_TX_INTER_FRAME_GAP_MASK GENMASK(25, 24)
113	/* DMA burst value (0-7) is shift this many bits */
114#define RTASE_TX_DMA_MASK             GENMASK(10, 8)
115
116	RTASE_RX_CONFIG_0 = 0x0044,
117#define RTASE_RX_SINGLE_FETCH  BIT(14)
118#define RTASE_RX_SINGLE_TAG    BIT(13)
119#define RTASE_RX_MX_DMA_MASK   GENMASK(10, 8)
120#define RTASE_ACPT_FLOW        BIT(7)
121#define RTASE_ACCEPT_ERR       BIT(5)
122#define RTASE_ACCEPT_RUNT      BIT(4)
123#define RTASE_ACCEPT_BROADCAST BIT(3)
124#define RTASE_ACCEPT_MULTICAST BIT(2)
125#define RTASE_ACCEPT_MYPHYS    BIT(1)
126#define RTASE_ACCEPT_ALLPHYS   BIT(0)
127#define RTASE_ACCEPT_MASK      (RTASE_ACPT_FLOW | RTASE_ACCEPT_ERR | \
128				RTASE_ACCEPT_RUNT | RTASE_ACCEPT_BROADCAST | \
129				RTASE_ACCEPT_MULTICAST | RTASE_ACCEPT_MYPHYS | \
130				RTASE_ACCEPT_ALLPHYS)
131
132	RTASE_RX_CONFIG_1 = 0x0046,
133#define RTASE_RX_MAX_FETCH_DESC_MASK GENMASK(15, 11)
134#define RTASE_RX_NEW_DESC_FORMAT_EN  BIT(8)
135#define RTASE_OUTER_VLAN_DETAG_EN    BIT(7)
136#define RTASE_INNER_VLAN_DETAG_EN    BIT(6)
137#define RTASE_PCIE_NEW_FLOW          BIT(2)
138#define RTASE_PCIE_RELOAD_EN         BIT(0)
139
140	RTASE_EEM = 0x0050,
141#define RTASE_EEM_UNLOCK 0xC0
142
143	RTASE_TDFNR  = 0x0057,
144	RTASE_TPPOLL = 0x0090,
145	RTASE_PDR    = 0x00B0,
146	RTASE_FIFOR  = 0x00D3,
147#define RTASE_TX_FIFO_EMPTY BIT(5)
148#define RTASE_RX_FIFO_EMPTY BIT(4)
149
150	RTASE_RMS       = 0x00DA,
151	RTASE_CPLUS_CMD = 0x00E0,
152#define RTASE_FORCE_RXFLOW_EN BIT(11)
153#define RTASE_FORCE_TXFLOW_EN BIT(10)
154#define RTASE_RX_CHKSUM       BIT(5)
155
156	RTASE_Q0_RX_DESC_ADDR0 = 0x00E4,
157	RTASE_Q0_RX_DESC_ADDR4 = 0x00E8,
158	RTASE_Q1_RX_DESC_ADDR0 = 0x4000,
159	RTASE_Q1_RX_DESC_ADDR4 = 0x4004,
160	RTASE_MTPS             = 0x00EC,
161#define RTASE_TAG_NUM_SEL_MASK GENMASK(10, 8)
162
163	RTASE_MISC = 0x00F2,
164#define RTASE_RX_DV_GATE_EN BIT(3)
165
166	RTASE_TFUN_CTRL = 0x0400,
167#define RTASE_TX_NEW_DESC_FORMAT_EN BIT(0)
168
169	RTASE_TX_CONFIG_1 = 0x203E,
170#define RTASE_TC_MODE_MASK GENMASK(11, 10)
171
172	RTASE_TOKSEL      = 0x2046,
173	RTASE_TXQCRDT_0   = 0x2500,
174	RTASE_RFIFONFULL  = 0x4406,
175	RTASE_INT_MITI_TX = 0x0A00,
176	RTASE_INT_MITI_RX = 0x0A80,
177
178	RTASE_VLAN_ENTRY_0 = 0xAC80,
179};
180
181enum rtase_desc_status_bit {
182	RTASE_DESC_OWN = BIT(31), /* Descriptor is owned by NIC */
183	RTASE_RING_END = BIT(30), /* End of descriptor ring */
184};
185
186enum rtase_sw_flag_content {
187	RTASE_SWF_MSI_ENABLED  = BIT(1),
188	RTASE_SWF_MSIX_ENABLED = BIT(2),
189};
190
191#define RSVD_MASK 0x3FFFC000
192
193struct rtase_tx_desc {
194	__le32 opts1;
195	__le32 opts2;
196	__le64 addr;
197	__le32 opts3;
198	__le32 reserved1;
199	__le32 reserved2;
200	__le32 reserved3;
201} __packed;
202
203/*------ offset 0 of tx descriptor ------*/
204#define RTASE_TX_FIRST_FRAG BIT(29) /* Tx First segment of a packet */
205#define RTASE_TX_LAST_FRAG  BIT(28) /* Tx Final segment of a packet */
206#define RTASE_GIANT_SEND_V4 BIT(26) /* TCP Giant Send Offload V4 (GSOv4) */
207#define RTASE_GIANT_SEND_V6 BIT(25) /* TCP Giant Send Offload V6 (GSOv6) */
208#define RTASE_TX_VLAN_TAG   BIT(17) /* Add VLAN tag */
209
210/*------ offset 4 of tx descriptor ------*/
211#define RTASE_TX_UDPCS_C BIT(31) /* Calculate UDP/IP checksum */
212#define RTASE_TX_TCPCS_C BIT(30) /* Calculate TCP/IP checksum */
213#define RTASE_TX_IPCS_C  BIT(29) /* Calculate IP checksum */
214#define RTASE_TX_IPV6F_C BIT(28) /* Indicate it is an IPv6 packet */
215
216union rtase_rx_desc {
217	struct {
218		__le64 header_buf_addr;
219		__le32 reserved1;
220		__le32 opts_header_len;
221		__le64 addr;
222		__le32 reserved2;
223		__le32 opts1;
224	} __packed desc_cmd;
225
226	struct {
227		__le32 reserved1;
228		__le32 reserved2;
229		__le32 rss;
230		__le32 opts4;
231		__le32 reserved3;
232		__le32 opts3;
233		__le32 opts2;
234		__le32 opts1;
235	} __packed desc_status;
236} __packed;
237
238/*------ offset 28 of rx descriptor ------*/
239#define RTASE_RX_FIRST_FRAG BIT(25) /* Rx First segment of a packet */
240#define RTASE_RX_LAST_FRAG  BIT(24) /* Rx Final segment of a packet */
241#define RTASE_RX_RES        BIT(20)
242#define RTASE_RX_RUNT       BIT(19)
243#define RTASE_RX_RWT        BIT(18)
244#define RTASE_RX_CRC        BIT(17)
245#define RTASE_RX_V6F        BIT(31)
246#define RTASE_RX_V4F        BIT(30)
247#define RTASE_RX_UDPT       BIT(29)
248#define RTASE_RX_TCPT       BIT(28)
249#define RTASE_RX_IPF        BIT(26) /* IP checksum failed */
250#define RTASE_RX_UDPF       BIT(25) /* UDP/IP checksum failed */
251#define RTASE_RX_TCPF       BIT(24) /* TCP/IP checksum failed */
252#define RTASE_RX_VLAN_TAG   BIT(16) /* VLAN tag available */
253
254#define RTASE_NUM_DESC          1024
255#define RTASE_TX_BUDGET_DEFAULT 256
256#define RTASE_TX_RING_DESC_SIZE (RTASE_NUM_DESC * sizeof(struct rtase_tx_desc))
257#define RTASE_RX_RING_DESC_SIZE (RTASE_NUM_DESC * sizeof(union rtase_rx_desc))
258#define RTASE_TX_STOP_THRS      (MAX_SKB_FRAGS + 1)
259#define RTASE_TX_START_THRS     (2 * RTASE_TX_STOP_THRS)
260#define RTASE_VLAN_TAG_MASK     GENMASK(15, 0)
261#define RTASE_RX_PKT_SIZE_MASK  GENMASK(13, 0)
262
263/* txqos hardware definitions */
264#define RTASE_1T_CLOCK            64
265#define RTASE_1T_POWER            10000000
266#define RTASE_IDLESLOPE_INT_SHIFT 25
267#define RTASE_IDLESLOPE_INT_MASK  GENMASK(31, 25)
268
269#define RTASE_IVEC_NAME_SIZE (IFNAMSIZ + 10)
270
271struct rtase_int_vector {
272	struct rtase_private *tp;
273	unsigned int irq;
274	char name[RTASE_IVEC_NAME_SIZE];
275	u16 index;
276	u16 imr_addr;
277	u16 isr_addr;
278	u32 imr;
279	struct list_head ring_list;
280	struct napi_struct napi;
281	int (*poll)(struct napi_struct *napi, int budget);
282};
283
284struct rtase_ring {
285	struct rtase_int_vector *ivec;
286	void *desc;
287	dma_addr_t phy_addr;
288	u32 cur_idx;
289	u32 dirty_idx;
290	u16 index;
291	u8 type;
292
293	struct sk_buff *skbuff[RTASE_NUM_DESC];
294	void *data_buf[RTASE_NUM_DESC];
295	union {
296		u32 len[RTASE_NUM_DESC];
297		dma_addr_t data_phy_addr[RTASE_NUM_DESC];
298	} mis;
299
300	struct list_head ring_entry;
301	int (*ring_handler)(struct rtase_ring *ring, int budget);
302	u64 alloc_fail;
303};
304
305struct rtase_txqos {
306	int hicredit;
307	int locredit;
308	int idleslope;
309	int sendslope;
310};
311
312struct rtase_stats {
313	u64 tx_dropped;
314	u64 rx_dropped;
315	u64 multicast;
316	u64 rx_errors;
317	u64 rx_length_errors;
318	u64 rx_crc_errors;
319};
320
321struct rtase_private {
322	void __iomem *mmio_addr;
323	u32 sw_flag;
324
325	struct pci_dev *pdev;
326	struct net_device *dev;
327	u32 rx_buf_sz;
328
329	struct page_pool *page_pool;
330	struct rtase_ring tx_ring[RTASE_NUM_TX_QUEUE];
331	struct rtase_txqos tx_qos[RTASE_NUM_TX_QUEUE];
332	struct rtase_ring rx_ring[RTASE_NUM_RX_QUEUE];
333	struct rtase_counters *tally_vaddr;
334	dma_addr_t tally_paddr;
335
336	u32 vlan_filter_ctrl;
337	u16 vlan_filter_vid[RTASE_VLAN_FILTER_ENTRY_NUM];
338
339	struct msix_entry msix_entry[RTASE_NUM_MSIX];
340	struct rtase_int_vector int_vector[RTASE_NUM_MSIX];
341
342	struct rtase_stats stats;
343
344	u16 tx_queue_ctrl;
345	u16 func_tx_queue_num;
346	u16 func_rx_queue_num;
347	u16 int_nums;
348	u16 tx_int_mit;
349	u16 rx_int_mit;
350
351	u32 hw_ver;
352};
353
354#define RTASE_LSO_64K 64000
355
356#define RTASE_NIC_MAX_PHYS_BUF_COUNT_LSO2 (16 * 4)
357
358#define RTASE_TCPHO_MASK GENMASK(24, 18)
359
360#define RTASE_MSS_MASK GENMASK(28, 18)
361
362#endif /* RTASE_H */
~/ Read-only file preview.