Quelle rtase.h
Sprache: C
/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
/*
* rtase is the Linux device driver released for Realtek Automotive Switch
* controllers with PCI-Express interface.
*
* Copyright(c) 2024 Realtek Semiconductor Corp.
*/
#ifndef RTASE_H
#define RTASE_H
#define RTASE_HW_VER_MASK 0 x7C800000
#define RTASE_HW_VER_906X_7XA 0 x00800000
#define RTASE_HW_VER_906X_7XC 0 x04000000
#define RTASE_HW_VER_907XD_V1 0 x04800000
#define RTASE_HW_VER_907XD_VA 0 x08000000
#define RTASE_RX_DMA_BURST_256 4
#define RTASE_TX_DMA_BURST_UNLIMITED 7
#define RTASE_RX_BUF_SIZE (PAGE_SIZE - \
SKB_DATA_ALIGN(sizeof (struct skb_shared_info)))
#define RTASE_MAX_JUMBO_SIZE (RTASE_RX_BUF_SIZE - VLAN_ETH_HLEN - ETH_FCS_LEN)
/* 3 means InterFrameGap = the shortest one */
#define RTASE_INTERFRAMEGAP 0 x03
#define RTASE_REGS_SIZE 256
#define RTASE_PCI_REGS_SIZE 0 x100
#define RTASE_MULTICAST_FILTER_MASK GENMASK(30 , 26 )
#define RTASE_VLAN_FILTER_ENTRY_NUM 32
#define RTASE_NUM_TX_QUEUE 8
#define RTASE_NUM_RX_QUEUE 4
#define RTASE_TXQ_CTRL 1
#define RTASE_FUNC_TXQ_NUM 1
#define RTASE_FUNC_RXQ_NUM 1
#define RTASE_INTERRUPT_NUM 1
#define RTASE_MITI_TIME_COUNT_MASK GENMASK(3 , 0 )
#define RTASE_MITI_TIME_UNIT_MASK GENMASK(7 , 4 )
#define RTASE_MITI_DEFAULT_TIME 128
#define RTASE_MITI_MAX_TIME 491520
#define RTASE_MITI_PKT_NUM_COUNT_MASK GENMASK(11 , 8 )
#define RTASE_MITI_PKT_NUM_UNIT_MASK GENMASK(13 , 12 )
#define RTASE_MITI_DEFAULT_PKT_NUM 64
#define RTASE_MITI_MAX_PKT_NUM_IDX 3
#define RTASE_MITI_MAX_PKT_NUM_UNIT 16
#define RTASE_MITI_MAX_PKT_NUM 240
#define RTASE_MITI_COUNT_BIT_NUM 4
#define RTASE_NUM_MSIX 4
#define RTASE_DWORD_MOD 16
/*****************************************************************************/
enum rtase_registers {
RTASE_MAC0 = 0 x0000,
RTASE_MAC4 = 0 x0004,
RTASE_MAR0 = 0 x0008,
RTASE_MAR1 = 0 x000C,
RTASE_DTCCR0 = 0 x0010,
RTASE_DTCCR4 = 0 x0014,
#define RTASE_COUNTER_RESET BIT(0 )
#define RTASE_COUNTER_DUMP BIT(3 )
RTASE_FCR = 0 x0018,
#define RTASE_FCR_RXQ_MASK GENMASK(5 , 4 )
RTASE_LBK_CTRL = 0 x001A,
#define RTASE_LBK_ATLD BIT(1 )
#define RTASE_LBK_CLR BIT(0 )
RTASE_TX_DESC_ADDR0 = 0 x0020,
RTASE_TX_DESC_ADDR4 = 0 x0024,
RTASE_TX_DESC_COMMAND = 0 x0028,
#define RTASE_TX_DESC_CMD_CS BIT(15 )
#define RTASE_TX_DESC_CMD_WE BIT(14 )
RTASE_BOOT_CTL = 0 x6004,
RTASE_CLKSW_SET = 0 x6018,
RTASE_CHIP_CMD = 0 x0037,
#define RTASE_STOP_REQ BIT(7 )
#define RTASE_STOP_REQ_DONE BIT(6 )
#define RTASE_RE BIT(3 )
#define RTASE_TE BIT(2 )
RTASE_IMR0 = 0 x0038,
RTASE_ISR0 = 0 x003C,
#define RTASE_TOK7 BIT(30 )
#define RTASE_TOK6 BIT(28 )
#define RTASE_TOK5 BIT(26 )
#define RTASE_TOK4 BIT(24 )
#define RTASE_FOVW BIT(6 )
#define RTASE_RDU BIT(4 )
#define RTASE_TOK BIT(2 )
#define RTASE_ROK BIT(0 )
RTASE_IMR1 = 0 x0800,
RTASE_ISR1 = 0 x0802,
#define RTASE_Q_TOK BIT(4 )
#define RTASE_Q_RDU BIT(1 )
#define RTASE_Q_ROK BIT(0 )
RTASE_EPHY_ISR = 0 x6014,
RTASE_EPHY_IMR = 0 x6016,
RTASE_TX_CONFIG_0 = 0 x0040,
#define RTASE_TX_INTER_FRAME_GAP_MASK GENMASK(25 , 24 )
/* DMA burst value (0-7) is shift this many bits */
#define RTASE_TX_DMA_MASK GENMASK(10 , 8 )
RTASE_RX_CONFIG_0 = 0 x0044,
#define RTASE_RX_SINGLE_FETCH BIT(14 )
#define RTASE_RX_SINGLE_TAG BIT(13 )
#define RTASE_RX_MX_DMA_MASK GENMASK(10 , 8 )
#define RTASE_ACPT_FLOW BIT(7 )
#define RTASE_ACCEPT_ERR BIT(5 )
#define RTASE_ACCEPT_RUNT BIT(4 )
#define RTASE_ACCEPT_BROADCAST BIT(3 )
#define RTASE_ACCEPT_MULTICAST BIT(2 )
#define RTASE_ACCEPT_MYPHYS BIT(1 )
#define RTASE_ACCEPT_ALLPHYS BIT(0 )
#define RTASE_ACCEPT_MASK (RTASE_ACPT_FLOW | RTASE_ACCEPT_ERR | \
RTASE_ACCEPT_RUNT | RTASE_ACCEPT_BROADCAST | \
RTASE_ACCEPT_MULTICAST | RTASE_ACCEPT_MYPHYS | \
RTASE_ACCEPT_ALLPHYS)
RTASE_RX_CONFIG_1 = 0 x0046,
#define RTASE_RX_MAX_FETCH_DESC_MASK GENMASK(15 , 11 )
#define RTASE_RX_NEW_DESC_FORMAT_EN BIT(8 )
#define RTASE_OUTER_VLAN_DETAG_EN BIT(7 )
#define RTASE_INNER_VLAN_DETAG_EN BIT(6 )
#define RTASE_PCIE_NEW_FLOW BIT(2 )
#define RTASE_PCIE_RELOAD_EN BIT(0 )
RTASE_EEM = 0 x0050,
#define RTASE_EEM_UNLOCK 0 xC0
RTASE_TDFNR = 0 x0057,
RTASE_TPPOLL = 0 x0090,
RTASE_PDR = 0 x00B0,
RTASE_FIFOR = 0 x00D3,
#define RTASE_TX_FIFO_EMPTY BIT(5 )
#define RTASE_RX_FIFO_EMPTY BIT(4 )
RTASE_RMS = 0 x00DA,
RTASE_CPLUS_CMD = 0 x00E0,
#define RTASE_FORCE_RXFLOW_EN BIT(11 )
#define RTASE_FORCE_TXFLOW_EN BIT(10 )
#define RTASE_RX_CHKSUM BIT(5 )
RTASE_Q0_RX_DESC_ADDR0 = 0 x00E4,
RTASE_Q0_RX_DESC_ADDR4 = 0 x00E8,
RTASE_Q1_RX_DESC_ADDR0 = 0 x4000,
RTASE_Q1_RX_DESC_ADDR4 = 0 x4004,
RTASE_MTPS = 0 x00EC,
#define RTASE_TAG_NUM_SEL_MASK GENMASK(10 , 8 )
RTASE_MISC = 0 x00F2,
#define RTASE_RX_DV_GATE_EN BIT(3 )
RTASE_TFUN_CTRL = 0 x0400,
#define RTASE_TX_NEW_DESC_FORMAT_EN BIT(0 )
RTASE_TX_CONFIG_1 = 0 x203E,
#define RTASE_TC_MODE_MASK GENMASK(11 , 10 )
RTASE_TOKSEL = 0 x2046,
RTASE_TXQCRDT_0 = 0 x2500,
RTASE_RFIFONFULL = 0 x4406,
RTASE_INT_MITI_TX = 0 x0A00,
RTASE_INT_MITI_RX = 0 x0A80,
RTASE_VLAN_ENTRY_0 = 0 xAC80,
};
enum rtase_desc_status_bit {
RTASE_DESC_OWN = BIT(31 ), /* Descriptor is owned by NIC */
RTASE_RING_END = BIT(30 ), /* End of descriptor ring */
};
enum rtase_sw_flag_content {
RTASE_SWF_MSI_ENABLED = BIT(1 ),
RTASE_SWF_MSIX_ENABLED = BIT(2 ),
};
#define RSVD_MASK 0 x3FFFC000
struct rtase_tx_desc {
__le32 opts1;
__le32 opts2;
__le64 addr;
__le32 opts3;
__le32 reserved1;
__le32 reserved2;
__le32 reserved3;
} __packed;
/*------ offset 0 of tx descriptor ------*/
#define RTASE_TX_FIRST_FRAG BIT(29 ) /* Tx First segment of a packet */
#define RTASE_TX_LAST_FRAG BIT(28 ) /* Tx Final segment of a packet */
#define RTASE_GIANT_SEND_V4 BIT(26 ) /* TCP Giant Send Offload V4 (GSOv4) */
#define RTASE_GIANT_SEND_V6 BIT(25 ) /* TCP Giant Send Offload V6 (GSOv6) */
#define RTASE_TX_VLAN_TAG BIT(17 ) /* Add VLAN tag */
/*------ offset 4 of tx descriptor ------*/
#define RTASE_TX_UDPCS_C BIT(31 ) /* Calculate UDP/IP checksum */
#define RTASE_TX_TCPCS_C BIT(30 ) /* Calculate TCP/IP checksum */
#define RTASE_TX_IPCS_C BIT(29 ) /* Calculate IP checksum */
#define RTASE_TX_IPV6F_C BIT(28 ) /* Indicate it is an IPv6 packet */
union rtase_rx_desc {
struct {
__le64 header_buf_addr;
__le32 reserved1;
__le32 opts_header_len;
__le64 addr;
__le32 reserved2;
__le32 opts1;
} __packed desc_cmd;
struct {
__le32 reserved1;
__le32 reserved2;
__le32 rss;
__le32 opts4;
__le32 reserved3;
__le32 opts3;
__le32 opts2;
__le32 opts1;
} __packed desc_status;
} __packed;
/*------ offset 28 of rx descriptor ------*/
#define RTASE_RX_FIRST_FRAG BIT(25 ) /* Rx First segment of a packet */
#define RTASE_RX_LAST_FRAG BIT(24 ) /* Rx Final segment of a packet */
#define RTASE_RX_RES BIT(20 )
#define RTASE_RX_RUNT BIT(19 )
#define RTASE_RX_RWT BIT(18 )
#define RTASE_RX_CRC BIT(17 )
#define RTASE_RX_V6F BIT(31 )
#define RTASE_RX_V4F BIT(30 )
#define RTASE_RX_UDPT BIT(29 )
#define RTASE_RX_TCPT BIT(28 )
#define RTASE_RX_IPF BIT(26 ) /* IP checksum failed */
#define RTASE_RX_UDPF BIT(25 ) /* UDP/IP checksum failed */
#define RTASE_RX_TCPF BIT(24 ) /* TCP/IP checksum failed */
#define RTASE_RX_VLAN_TAG BIT(16 ) /* VLAN tag available */
#define RTASE_NUM_DESC 1024
#define RTASE_TX_BUDGET_DEFAULT 256
#define RTASE_TX_RING_DESC_SIZE (RTASE_NUM_DESC * sizeof (struct rtase_tx_desc))
#define RTASE_RX_RING_DESC_SIZE (RTASE_NUM_DESC * sizeof (union rtase_rx_desc))
#define RTASE_TX_STOP_THRS (MAX_SKB_FRAGS + 1 )
#define RTASE_TX_START_THRS (2 * RTASE_TX_STOP_THRS)
#define RTASE_VLAN_TAG_MASK GENMASK(15 , 0 )
#define RTASE_RX_PKT_SIZE_MASK GENMASK(13 , 0 )
/* txqos hardware definitions */
#define RTASE_1T_CLOCK 64
#define RTASE_1T_POWER 10000000
#define RTASE_IDLESLOPE_INT_SHIFT 25
#define RTASE_IDLESLOPE_INT_MASK GENMASK(31 , 25 )
#define RTASE_IVEC_NAME_SIZE (IFNAMSIZ + 10 )
struct rtase_int_vector {
struct rtase_private *tp;
unsigned int irq;
char name[RTASE_IVEC_NAME_SIZE];
u16 index;
u16 imr_addr;
u16 isr_addr;
u32 imr;
struct list_head ring_list;
struct napi_struct napi;
int (*poll)(struct napi_struct *napi, int budget);
};
struct rtase_ring {
struct rtase_int_vector *ivec;
void *desc;
dma_addr_t phy_addr;
u32 cur_idx;
u32 dirty_idx;
u16 index;
u8 type;
struct sk_buff *skbuff[RTASE_NUM_DESC];
void *data_buf[RTASE_NUM_DESC];
union {
u32 len[RTASE_NUM_DESC];
dma_addr_t data_phy_addr[RTASE_NUM_DESC];
} mis;
struct list_head ring_entry;
int (*ring_handler)(struct rtase_ring *ring, int budget);
u64 alloc_fail;
};
struct rtase_txqos {
int hicredit;
int locredit;
int idleslope;
int sendslope;
};
struct rtase_stats {
u64 tx_dropped;
u64 rx_dropped;
u64 multicast;
u64 rx_errors;
u64 rx_length_errors;
u64 rx_crc_errors;
};
struct rtase_private {
void __iomem *mmio_addr;
u32 sw_flag;
struct pci_dev *pdev;
struct net_device *dev;
u32 rx_buf_sz;
struct page_pool *page_pool;
struct rtase_ring tx_ring[RTASE_NUM_TX_QUEUE];
struct rtase_txqos tx_qos[RTASE_NUM_TX_QUEUE];
struct rtase_ring rx_ring[RTASE_NUM_RX_QUEUE];
struct rtase_counters *tally_vaddr;
dma_addr_t tally_paddr;
u32 vlan_filter_ctrl;
u16 vlan_filter_vid[RTASE_VLAN_FILTER_ENTRY_NUM];
struct msix_entry msix_entry[RTASE_NUM_MSIX];
struct rtase_int_vector int_vector[RTASE_NUM_MSIX];
struct rtase_stats stats;
u16 tx_queue_ctrl;
u16 func_tx_queue_num;
u16 func_rx_queue_num;
u16 int_nums;
u16 tx_int_mit;
u16 rx_int_mit;
u32 hw_ver;
};
#define RTASE_LSO_64K 64000
#define RTASE_NIC_MAX_PHYS_BUF_COUNT_LSO2 (16 * 4 )
#define RTASE_TCPHO_MASK GENMASK(24 , 18 )
#define RTASE_MSS_MASK GENMASK(28 , 18 )
#endif /* RTASE_H */
Messung V0.5 in Prozent C=94 H=92 G=92
¤ Dauer der Verarbeitung: 0.13 Sekunden
(vorverarbeitet am 2026-06-07)
¤
*© Formatika GbR, Deutschland
2026-08-25
Neuigkeiten
Aktuelles
Motto des Tages
Open Source Software
Jenseits des Üblichen ....
Besucherstatistik
Statistik
#Sources=434850
#Domains=655579