xref: /dpdk/drivers/net/r8169/r8169_ethdev.h (revision fa0b0ad6246709184d73fbc944039391c1db22be)
19b170cfcSHoward Wang /* SPDX-License-Identifier: BSD-3-Clause
29b170cfcSHoward Wang  * Copyright(c) 2024 Realtek Corporation. All rights reserved
39b170cfcSHoward Wang  */
49b170cfcSHoward Wang 
59b170cfcSHoward Wang #ifndef R8169_ETHDEV_H
69b170cfcSHoward Wang #define R8169_ETHDEV_H
79b170cfcSHoward Wang 
89b170cfcSHoward Wang #include <stdint.h>
99b170cfcSHoward Wang 
109b170cfcSHoward Wang #include <rte_ethdev.h>
119b170cfcSHoward Wang #include <rte_ethdev_core.h>
129b170cfcSHoward Wang 
139b170cfcSHoward Wang #include "r8169_compat.h"
149b170cfcSHoward Wang 
158e852260SHoward Wang struct rtl_hw;
168e852260SHoward Wang 
178e852260SHoward Wang struct rtl_hw_ops {
188e852260SHoward Wang 	void (*hw_init_rxcfg)(struct rtl_hw *hw);
198e852260SHoward Wang 	void (*hw_ephy_config)(struct rtl_hw *hw);
208e852260SHoward Wang 	void (*hw_phy_config)(struct rtl_hw *hw);
218e852260SHoward Wang 	void (*hw_mac_mcu_config)(struct rtl_hw *hw);
228e852260SHoward Wang 	void (*hw_phy_mcu_config)(struct rtl_hw *hw);
238e852260SHoward Wang };
248e852260SHoward Wang 
257d502791SHoward Wang /* Flow control settings */
267d502791SHoward Wang enum rtl_fc_mode {
277d502791SHoward Wang 	rtl_fc_none = 0,
287d502791SHoward Wang 	rtl_fc_rx_pause,
297d502791SHoward Wang 	rtl_fc_tx_pause,
307d502791SHoward Wang 	rtl_fc_full,
317d502791SHoward Wang 	rtl_fc_default
327d502791SHoward Wang };
337d502791SHoward Wang 
3488f5b657SHoward Wang struct rtl_hw {
358e852260SHoward Wang 	struct rtl_hw_ops hw_ops;
3688f5b657SHoward Wang 	u8  *mmio_addr;
377d502791SHoward Wang 	u8  *cmac_ioaddr; /* cmac memory map physical address */
387d502791SHoward Wang 	u8  chipset_name;
397d502791SHoward Wang 	u8  efuse_ver;
407d502791SHoward Wang 	u8  HwIcVerUnknown;
41619f6ebcSHoward Wang 	u32 mcfg;
428e852260SHoward Wang 	u32 mtu;
43619f6ebcSHoward Wang 	u8  HwSuppIntMitiVer;
44c4adac96SHoward Wang 	u16 cur_page;
457d502791SHoward Wang 	u8  mac_addr[MAC_ADDR_LEN];
462f198f0aSHoward Wang 	u32 rx_buf_sz;
47619f6ebcSHoward Wang 
48*fa0b0ad6SHoward Wang 	struct rtl_counters *tally_vaddr;
49*fa0b0ad6SHoward Wang 	u64 tally_paddr;
50*fa0b0ad6SHoward Wang 
518e852260SHoward Wang 	u8  RequirePhyMdiSwapPatch;
528e852260SHoward Wang 	u8  NotWrMcuPatchCode;
538e852260SHoward Wang 	u8  HwSuppMacMcuVer;
548e852260SHoward Wang 	u16 MacMcuPageSize;
558e852260SHoward Wang 
568e852260SHoward Wang 	u8  NotWrRamCodeToMicroP;
578e852260SHoward Wang 	u8  HwHasWrRamCodeToMicroP;
5838589978SHoward Wang 	u8  HwSuppCheckPhyDisableModeVer;
5938589978SHoward Wang 
6038589978SHoward Wang 	u16 sw_ram_code_ver;
6138589978SHoward Wang 	u16 hw_ram_code_ver;
6238589978SHoward Wang 
637d502791SHoward Wang 	u8  autoneg;
647d502791SHoward Wang 	u8  duplex;
657d502791SHoward Wang 	u32 speed;
667d502791SHoward Wang 	u32 advertising;
677d502791SHoward Wang 	enum rtl_fc_mode fcpause;
687d502791SHoward Wang 
6938589978SHoward Wang 	u32 HwSuppMaxPhyLinkSpeed;
708e852260SHoward Wang 
717d502791SHoward Wang 	u8  HwSuppNowIsOobVer;
727d502791SHoward Wang 
737d502791SHoward Wang 	u16 mcu_pme_setting;
747d502791SHoward Wang 
75619f6ebcSHoward Wang 	/* Enable Tx No Close */
767d502791SHoward Wang 	u8  HwSuppTxNoCloseVer;
77619f6ebcSHoward Wang 	u8  EnableTxNoClose;
787d502791SHoward Wang 	u16 hw_clo_ptr_reg;
797d502791SHoward Wang 	u16 sw_tail_ptr_reg;
807d502791SHoward Wang 	u32 MaxTxDescPtrMask;
8163d37ff9SHoward Wang 	u32 NextHwDesCloPtr0;
8263d37ff9SHoward Wang 	u32 BeginHwDesCloPtr0;
83619f6ebcSHoward Wang 
84619f6ebcSHoward Wang 	/* Dash */
85619f6ebcSHoward Wang 	u8 HwSuppDashVer;
86619f6ebcSHoward Wang 	u8 DASH;
87619f6ebcSHoward Wang 	u8 HwSuppOcpChannelVer;
88619f6ebcSHoward Wang 	u8 AllowAccessDashOcp;
8988f5b657SHoward Wang };
9088f5b657SHoward Wang 
919b170cfcSHoward Wang struct rtl_sw_stats {
929b170cfcSHoward Wang 	u64 tx_packets;
939b170cfcSHoward Wang 	u64 tx_bytes;
949b170cfcSHoward Wang 	u64 tx_errors;
959b170cfcSHoward Wang 	u64 rx_packets;
969b170cfcSHoward Wang 	u64 rx_bytes;
979b170cfcSHoward Wang 	u64 rx_errors;
989b170cfcSHoward Wang };
999b170cfcSHoward Wang 
1009b170cfcSHoward Wang struct rtl_adapter {
10188f5b657SHoward Wang 	struct rtl_hw       hw;
1029b170cfcSHoward Wang 	struct rtl_sw_stats sw_stats;
1039b170cfcSHoward Wang };
1049b170cfcSHoward Wang 
105619f6ebcSHoward Wang #define RTL_DEV_PRIVATE(eth_dev) \
106619f6ebcSHoward Wang 	((struct rtl_adapter *)((eth_dev)->data->dev_private))
107619f6ebcSHoward Wang 
108f7327670SHoward Wang #define R8169_LINK_CHECK_TIMEOUT  50   /* 10s */
109f7327670SHoward Wang #define R8169_LINK_CHECK_INTERVAL 200  /* ms */
110f7327670SHoward Wang 
1111bbe869eSHoward Wang int rtl_rx_init(struct rte_eth_dev *dev);
1121bbe869eSHoward Wang int rtl_tx_init(struct rte_eth_dev *dev);
1131bbe869eSHoward Wang 
1141bbe869eSHoward Wang uint16_t rtl_xmit_pkts(void *txq, struct rte_mbuf **tx_pkts, uint16_t nb_pkts);
1151bbe869eSHoward Wang uint16_t rtl_recv_pkts(void *rxq, struct rte_mbuf **rx_pkts, uint16_t nb_pkts);
1162f198f0aSHoward Wang uint16_t rtl_recv_scattered_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,
1172f198f0aSHoward Wang 				 uint16_t nb_pkts);
1182f198f0aSHoward Wang 
1192f198f0aSHoward Wang void rtl_rx_queue_release(struct rte_eth_dev *dev, uint16_t rx_queue_id);
12063d37ff9SHoward Wang void rtl_tx_queue_release(struct rte_eth_dev *dev, uint16_t tx_queue_id);
1212f198f0aSHoward Wang 
1222f198f0aSHoward Wang void rtl_rxq_info_get(struct rte_eth_dev *dev, uint16_t queue_id,
1232f198f0aSHoward Wang 		      struct rte_eth_rxq_info *qinfo);
12463d37ff9SHoward Wang void rtl_txq_info_get(struct rte_eth_dev *dev, uint16_t queue_id,
12563d37ff9SHoward Wang 		      struct rte_eth_txq_info *qinfo);
1262f198f0aSHoward Wang 
1272f198f0aSHoward Wang uint64_t rtl_get_rx_port_offloads(void);
12863d37ff9SHoward Wang uint64_t rtl_get_tx_port_offloads(void);
1292f198f0aSHoward Wang 
1302f198f0aSHoward Wang int rtl_rx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_idx,
1312f198f0aSHoward Wang 		       uint16_t nb_rx_desc, unsigned int socket_id,
1322f198f0aSHoward Wang 		       const struct rte_eth_rxconf *rx_conf,
1332f198f0aSHoward Wang 		       struct rte_mempool *mb_pool);
13463d37ff9SHoward Wang int rtl_tx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_idx,
13563d37ff9SHoward Wang 		       uint16_t nb_tx_desc, unsigned int socket_id,
13663d37ff9SHoward Wang 		       const struct rte_eth_txconf *tx_conf);
13763d37ff9SHoward Wang 
13863d37ff9SHoward Wang int rtl_tx_done_cleanup(void *tx_queue, uint32_t free_cnt);
1392f198f0aSHoward Wang 
1402f198f0aSHoward Wang int rtl_stop_queues(struct rte_eth_dev *dev);
1412f198f0aSHoward Wang void rtl_free_queues(struct rte_eth_dev *dev);
1421bbe869eSHoward Wang 
1439b170cfcSHoward Wang #endif /* R8169_ETHDEV_H */
144