1*17fcb3dcSFan Gong /* SPDX-License-Identifier: GPL-2.0 */ 2*17fcb3dcSFan Gong /* Copyright (c) Huawei Technologies Co., Ltd. 2025. All rights reserved. */ 3*17fcb3dcSFan Gong 4*17fcb3dcSFan Gong #ifndef _HINIC3_NIC_DEV_H_ 5*17fcb3dcSFan Gong #define _HINIC3_NIC_DEV_H_ 6*17fcb3dcSFan Gong 7*17fcb3dcSFan Gong #include <linux/netdevice.h> 8*17fcb3dcSFan Gong 9*17fcb3dcSFan Gong #include "hinic3_hw_cfg.h" 10*17fcb3dcSFan Gong #include "hinic3_mgmt_interface.h" 11*17fcb3dcSFan Gong 12*17fcb3dcSFan Gong enum hinic3_flags { 13*17fcb3dcSFan Gong HINIC3_RSS_ENABLE, 14*17fcb3dcSFan Gong }; 15*17fcb3dcSFan Gong 16*17fcb3dcSFan Gong enum hinic3_rss_hash_type { 17*17fcb3dcSFan Gong HINIC3_RSS_HASH_ENGINE_TYPE_XOR = 0, 18*17fcb3dcSFan Gong HINIC3_RSS_HASH_ENGINE_TYPE_TOEP = 1, 19*17fcb3dcSFan Gong }; 20*17fcb3dcSFan Gong 21*17fcb3dcSFan Gong struct hinic3_rss_type { 22*17fcb3dcSFan Gong u8 tcp_ipv6_ext; 23*17fcb3dcSFan Gong u8 ipv6_ext; 24*17fcb3dcSFan Gong u8 tcp_ipv6; 25*17fcb3dcSFan Gong u8 ipv6; 26*17fcb3dcSFan Gong u8 tcp_ipv4; 27*17fcb3dcSFan Gong u8 ipv4; 28*17fcb3dcSFan Gong u8 udp_ipv6; 29*17fcb3dcSFan Gong u8 udp_ipv4; 30*17fcb3dcSFan Gong }; 31*17fcb3dcSFan Gong 32*17fcb3dcSFan Gong struct hinic3_irq_cfg { 33*17fcb3dcSFan Gong struct net_device *netdev; 34*17fcb3dcSFan Gong u16 msix_entry_idx; 35*17fcb3dcSFan Gong /* provided by OS */ 36*17fcb3dcSFan Gong u32 irq_id; 37*17fcb3dcSFan Gong char irq_name[IFNAMSIZ + 16]; 38*17fcb3dcSFan Gong struct napi_struct napi; 39*17fcb3dcSFan Gong cpumask_t affinity_mask; 40*17fcb3dcSFan Gong struct hinic3_txq *txq; 41*17fcb3dcSFan Gong struct hinic3_rxq *rxq; 42*17fcb3dcSFan Gong }; 43*17fcb3dcSFan Gong 44*17fcb3dcSFan Gong struct hinic3_dyna_txrxq_params { 45*17fcb3dcSFan Gong u16 num_qps; 46*17fcb3dcSFan Gong u32 sq_depth; 47*17fcb3dcSFan Gong u32 rq_depth; 48*17fcb3dcSFan Gong 49*17fcb3dcSFan Gong struct hinic3_dyna_txq_res *txqs_res; 50*17fcb3dcSFan Gong struct hinic3_dyna_rxq_res *rxqs_res; 51*17fcb3dcSFan Gong struct hinic3_irq_cfg *irq_cfg; 52*17fcb3dcSFan Gong }; 53*17fcb3dcSFan Gong 54*17fcb3dcSFan Gong struct hinic3_nic_dev { 55*17fcb3dcSFan Gong struct pci_dev *pdev; 56*17fcb3dcSFan Gong struct net_device *netdev; 57*17fcb3dcSFan Gong struct hinic3_hwdev *hwdev; 58*17fcb3dcSFan Gong struct hinic3_nic_io *nic_io; 59*17fcb3dcSFan Gong 60*17fcb3dcSFan Gong u16 max_qps; 61*17fcb3dcSFan Gong u16 rx_buf_len; 62*17fcb3dcSFan Gong u32 lro_replenish_thld; 63*17fcb3dcSFan Gong unsigned long flags; 64*17fcb3dcSFan Gong struct hinic3_nic_service_cap nic_svc_cap; 65*17fcb3dcSFan Gong 66*17fcb3dcSFan Gong struct hinic3_dyna_txrxq_params q_params; 67*17fcb3dcSFan Gong struct hinic3_txq *txqs; 68*17fcb3dcSFan Gong struct hinic3_rxq *rxqs; 69*17fcb3dcSFan Gong 70*17fcb3dcSFan Gong u16 num_qp_irq; 71*17fcb3dcSFan Gong struct msix_entry *qps_msix_entries; 72*17fcb3dcSFan Gong 73*17fcb3dcSFan Gong bool link_status_up; 74*17fcb3dcSFan Gong }; 75*17fcb3dcSFan Gong 76*17fcb3dcSFan Gong void hinic3_set_netdev_ops(struct net_device *netdev); 77*17fcb3dcSFan Gong 78*17fcb3dcSFan Gong /* Temporary prototypes. Functions become static in later submission. */ 79*17fcb3dcSFan Gong void qp_add_napi(struct hinic3_irq_cfg *irq_cfg); 80*17fcb3dcSFan Gong void qp_del_napi(struct hinic3_irq_cfg *irq_cfg); 81*17fcb3dcSFan Gong 82*17fcb3dcSFan Gong #endif 83