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