xref: /freebsd/sys/dev/aq/aq_hw.h (revision 493d26c58e732dcfcdd87993ef71880adfe9d0cb)
1*493d26c5SEd Maste /*
2*493d26c5SEd Maste  * aQuantia Corporation Network Driver
3*493d26c5SEd Maste  * Copyright (C) 2014-2017 aQuantia Corporation. All rights reserved
4*493d26c5SEd Maste  *
5*493d26c5SEd Maste  * Redistribution and use in source and binary forms, with or without
6*493d26c5SEd Maste  * modification, are permitted provided that the following conditions
7*493d26c5SEd Maste  * are met:
8*493d26c5SEd Maste  *
9*493d26c5SEd Maste  *   (1) Redistributions of source code must retain the above
10*493d26c5SEd Maste  *   copyright notice, this list of conditions and the following
11*493d26c5SEd Maste  *   disclaimer.
12*493d26c5SEd Maste  *
13*493d26c5SEd Maste  *   (2) Redistributions in binary form must reproduce the above
14*493d26c5SEd Maste  *   copyright notice, this list of conditions and the following
15*493d26c5SEd Maste  *   disclaimer in the documentation and/or other materials provided
16*493d26c5SEd Maste  *   with the distribution.
17*493d26c5SEd Maste  *
18*493d26c5SEd Maste  *   (3)The name of the author may not be used to endorse or promote
19*493d26c5SEd Maste  *   products derived from this software without specific prior
20*493d26c5SEd Maste  *   written permission.
21*493d26c5SEd Maste  *
22*493d26c5SEd Maste  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
23*493d26c5SEd Maste  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
24*493d26c5SEd Maste  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25*493d26c5SEd Maste  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
26*493d26c5SEd Maste  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27*493d26c5SEd Maste  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
28*493d26c5SEd Maste  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
29*493d26c5SEd Maste  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
30*493d26c5SEd Maste  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
31*493d26c5SEd Maste  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
32*493d26c5SEd Maste  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33*493d26c5SEd Maste  */
34*493d26c5SEd Maste 
35*493d26c5SEd Maste #ifndef _AQ_HW_H_
36*493d26c5SEd Maste #define _AQ_HW_H_
37*493d26c5SEd Maste 
38*493d26c5SEd Maste #include <stdbool.h>
39*493d26c5SEd Maste #include <sys/types.h>
40*493d26c5SEd Maste #include <sys/cdefs.h>
41*493d26c5SEd Maste #include <machine/cpufunc.h>
42*493d26c5SEd Maste #include <sys/endian.h>
43*493d26c5SEd Maste #include "aq_common.h"
44*493d26c5SEd Maste 
45*493d26c5SEd Maste #define AQ_WRITE_REG(hw, reg, value) writel(((hw)->hw_addr + (reg)), htole32(value))
46*493d26c5SEd Maste 
47*493d26c5SEd Maste #define AQ_READ_REG(hw, reg) le32toh(readl((hw)->hw_addr + reg))
48*493d26c5SEd Maste 
49*493d26c5SEd Maste 
50*493d26c5SEd Maste #define AQ_WRITE_REG_BIT(hw, reg, msk, shift, value) do { \
51*493d26c5SEd Maste     if (msk ^ ~0) { \
52*493d26c5SEd Maste         u32 reg_old, reg_new = 0U; \
53*493d26c5SEd Maste         reg_old = AQ_READ_REG(hw, reg); \
54*493d26c5SEd Maste         reg_new = (reg_old & (~msk)) | (value << shift); \
55*493d26c5SEd Maste         if (reg_old != reg_new) \
56*493d26c5SEd Maste             AQ_WRITE_REG(hw, reg, reg_new); \
57*493d26c5SEd Maste     } else { \
58*493d26c5SEd Maste         AQ_WRITE_REG(hw, reg, value); \
59*493d26c5SEd Maste     } } while(0)
60*493d26c5SEd Maste 
61*493d26c5SEd Maste 
62*493d26c5SEd Maste #define AQ_READ_REG_BIT(a, reg, msk, shift) ( \
63*493d26c5SEd Maste     ((AQ_READ_REG(a, reg) & msk) >> shift))
64*493d26c5SEd Maste 
65*493d26c5SEd Maste #define AQ_HW_FLUSH() { (void)AQ_READ_REG(hw, 0x10); }
66*493d26c5SEd Maste 
67*493d26c5SEd Maste #define aq_hw_write_reg_bit AQ_WRITE_REG_BIT
68*493d26c5SEd Maste 
69*493d26c5SEd Maste #define aq_hw_write_reg AQ_WRITE_REG
70*493d26c5SEd Maste 
71*493d26c5SEd Maste /* Statistics  */
72*493d26c5SEd Maste struct aq_hw_stats {
73*493d26c5SEd Maste     u64 crcerrs;
74*493d26c5SEd Maste };
75*493d26c5SEd Maste 
76*493d26c5SEd Maste struct aq_hw_stats_s {
77*493d26c5SEd Maste     u32 uprc;
78*493d26c5SEd Maste     u32 mprc;
79*493d26c5SEd Maste     u32 bprc;
80*493d26c5SEd Maste     u32 erpt;
81*493d26c5SEd Maste     u32 uptc;
82*493d26c5SEd Maste     u32 mptc;
83*493d26c5SEd Maste     u32 bptc;
84*493d26c5SEd Maste     u32 erpr;
85*493d26c5SEd Maste     u32 mbtc;
86*493d26c5SEd Maste     u32 bbtc;
87*493d26c5SEd Maste     u32 mbrc;
88*493d26c5SEd Maste     u32 bbrc;
89*493d26c5SEd Maste     u32 ubrc;
90*493d26c5SEd Maste     u32 ubtc;
91*493d26c5SEd Maste     u32 ptc;
92*493d26c5SEd Maste     u32 prc;
93*493d26c5SEd Maste     u32 dpc;
94*493d26c5SEd Maste     u32 cprc;
95*493d26c5SEd Maste } __attribute__((__packed__));
96*493d26c5SEd Maste 
97*493d26c5SEd Maste union ip_addr {
98*493d26c5SEd Maste     struct {
99*493d26c5SEd Maste         u8 addr[16];
100*493d26c5SEd Maste     } v6;
101*493d26c5SEd Maste     struct {
102*493d26c5SEd Maste         u8 padding[12];
103*493d26c5SEd Maste         u8 addr[4];
104*493d26c5SEd Maste     } v4;
105*493d26c5SEd Maste } __attribute__((__packed__));
106*493d26c5SEd Maste 
107*493d26c5SEd Maste struct aq_hw_fw_mbox {
108*493d26c5SEd Maste     u32 version;
109*493d26c5SEd Maste     u32 transaction_id;
110*493d26c5SEd Maste     int error;
111*493d26c5SEd Maste     struct aq_hw_stats_s stats;
112*493d26c5SEd Maste } __attribute__((__packed__));
113*493d26c5SEd Maste 
114*493d26c5SEd Maste typedef struct aq_hw_fw_version {
115*493d26c5SEd Maste     union {
116*493d26c5SEd Maste         struct {
117*493d26c5SEd Maste             u16 build_number;
118*493d26c5SEd Maste             u8 minor_version;
119*493d26c5SEd Maste             u8 major_version;
120*493d26c5SEd Maste         };
121*493d26c5SEd Maste         u32 raw;
122*493d26c5SEd Maste     };
123*493d26c5SEd Maste } aq_hw_fw_version;
124*493d26c5SEd Maste 
125*493d26c5SEd Maste enum aq_hw_irq_type {
126*493d26c5SEd Maste     aq_irq_invalid = 0,
127*493d26c5SEd Maste     aq_irq_legacy = 1,
128*493d26c5SEd Maste     aq_irq_msi = 2,
129*493d26c5SEd Maste     aq_irq_msix = 3,
130*493d26c5SEd Maste };
131*493d26c5SEd Maste 
132*493d26c5SEd Maste struct aq_hw_fc_info {
133*493d26c5SEd Maste     bool fc_rx;
134*493d26c5SEd Maste     bool fc_tx;
135*493d26c5SEd Maste };
136*493d26c5SEd Maste 
137*493d26c5SEd Maste struct aq_hw {
138*493d26c5SEd Maste     void *aq_dev;
139*493d26c5SEd Maste     u8 *hw_addr;
140*493d26c5SEd Maste     u32 regs_size;
141*493d26c5SEd Maste 
142*493d26c5SEd Maste     u8 mac_addr[ETH_MAC_LEN];
143*493d26c5SEd Maste 
144*493d26c5SEd Maste     enum aq_hw_irq_type irq_type;
145*493d26c5SEd Maste 
146*493d26c5SEd Maste     struct aq_hw_fc_info fc;
147*493d26c5SEd Maste     u16 link_rate;
148*493d26c5SEd Maste 
149*493d26c5SEd Maste     u16 device_id;
150*493d26c5SEd Maste     u16 subsystem_vendor_id;
151*493d26c5SEd Maste     u16 subsystem_device_id;
152*493d26c5SEd Maste     u16 vendor_id;
153*493d26c5SEd Maste     u8  revision_id;
154*493d26c5SEd Maste 
155*493d26c5SEd Maste     /* Interrupt Moderation value. */
156*493d26c5SEd Maste     int itr;
157*493d26c5SEd Maste 
158*493d26c5SEd Maste     /* Firmware-related stuff. */
159*493d26c5SEd Maste     aq_hw_fw_version fw_version;
160*493d26c5SEd Maste     const struct aq_firmware_ops* fw_ops;
161*493d26c5SEd Maste     bool rbl_enabled;
162*493d26c5SEd Maste     bool fast_start_enabled;
163*493d26c5SEd Maste     bool flash_present;
164*493d26c5SEd Maste     u32 chip_features;
165*493d26c5SEd Maste     u64 fw_caps;
166*493d26c5SEd Maste 
167*493d26c5SEd Maste 	bool lro_enabled;
168*493d26c5SEd Maste 
169*493d26c5SEd Maste     u32 mbox_addr;
170*493d26c5SEd Maste     struct aq_hw_fw_mbox mbox;
171*493d26c5SEd Maste };
172*493d26c5SEd Maste 
173*493d26c5SEd Maste #define aq_hw_s aq_hw
174*493d26c5SEd Maste 
175*493d26c5SEd Maste #define AQ_HW_MAC      0U
176*493d26c5SEd Maste #define AQ_HW_MAC_MIN  1U
177*493d26c5SEd Maste #define AQ_HW_MAC_MAX  33U
178*493d26c5SEd Maste 
179*493d26c5SEd Maste #define HW_ATL_B0_MIN_RXD 32U
180*493d26c5SEd Maste #define HW_ATL_B0_MIN_TXD 32U
181*493d26c5SEd Maste #define HW_ATL_B0_MAX_RXD 4096U /* in fact up to 8184, but closest to power of 2 */
182*493d26c5SEd Maste #define HW_ATL_B0_MAX_TXD 4096U /* in fact up to 8184, but closest to power of 2 */
183*493d26c5SEd Maste 
184*493d26c5SEd Maste #define HW_ATL_B0_MTU_JUMBO  16352U
185*493d26c5SEd Maste #define HW_ATL_B0_TSO_SIZE (160*1024)
186*493d26c5SEd Maste #define HW_ATL_B0_RINGS_MAX 32U
187*493d26c5SEd Maste #define HW_ATL_B0_LRO_RXD_MAX 16U
188*493d26c5SEd Maste 
189*493d26c5SEd Maste #define AQ_HW_FW_SM_RAM        0x2U
190*493d26c5SEd Maste 
191*493d26c5SEd Maste #define AQ_HW_MPI_STATE_MSK    0x00FFU
192*493d26c5SEd Maste #define AQ_HW_MPI_STATE_SHIFT  0U
193*493d26c5SEd Maste 
194*493d26c5SEd Maste #define AQ_HW_MPI_CONTROL_ADR       0x0368U
195*493d26c5SEd Maste #define AQ_HW_MPI_STATE_ADR         0x036CU
196*493d26c5SEd Maste 
197*493d26c5SEd Maste #define HW_ATL_RSS_INDIRECTION_TABLE_MAX  64U
198*493d26c5SEd Maste #define HW_ATL_RSS_HASHKEY_SIZE           40U
199*493d26c5SEd Maste 
200*493d26c5SEd Maste /* PCI core control register */
201*493d26c5SEd Maste #define AQ_HW_PCI_REG_CONTROL_6_ADR 0x1014U
202*493d26c5SEd Maste /* tx dma total request limit */
203*493d26c5SEd Maste #define AQ_HW_TX_DMA_TOTAL_REQ_LIMIT_ADR 0x00007b20U
204*493d26c5SEd Maste 
205*493d26c5SEd Maste #define AQ_HW_TXBUF_MAX  160U
206*493d26c5SEd Maste #define AQ_HW_RXBUF_MAX  320U
207*493d26c5SEd Maste 
208*493d26c5SEd Maste #define L2_FILTER_ACTION_DISCARD (0x0)
209*493d26c5SEd Maste #define L2_FILTER_ACTION_HOST    (0x1)
210*493d26c5SEd Maste 
211*493d26c5SEd Maste #define AQ_HW_UCP_0X370_REG  (0x370)
212*493d26c5SEd Maste #define AQ_HW_CHIP_MIPS         0x00000001U
213*493d26c5SEd Maste #define AQ_HW_CHIP_TPO2         0x00000002U
214*493d26c5SEd Maste #define AQ_HW_CHIP_RPF2         0x00000004U
215*493d26c5SEd Maste #define AQ_HW_CHIP_MPI_AQ       0x00000010U
216*493d26c5SEd Maste #define AQ_HW_CHIP_REVISION_A0  0x01000000U
217*493d26c5SEd Maste #define AQ_HW_CHIP_REVISION_B0  0x02000000U
218*493d26c5SEd Maste #define AQ_HW_CHIP_REVISION_B1  0x04000000U
219*493d26c5SEd Maste #define IS_CHIP_FEATURE(HW, _F_) (AQ_HW_CHIP_##_F_ & \
220*493d26c5SEd Maste     (HW)->chip_features)
221*493d26c5SEd Maste 
222*493d26c5SEd Maste #define AQ_HW_FW_VER_EXPECTED 0x01050006U
223*493d26c5SEd Maste 
224*493d26c5SEd Maste #define	AQ_RX_RSS_TYPE_NONE		0x0
225*493d26c5SEd Maste #define	AQ_RX_RSS_TYPE_IPV4		0x2
226*493d26c5SEd Maste #define	AQ_RX_RSS_TYPE_IPV6		0x3
227*493d26c5SEd Maste #define	AQ_RX_RSS_TYPE_IPV4_TCP	0x4
228*493d26c5SEd Maste #define	AQ_RX_RSS_TYPE_IPV6_TCP	0x5
229*493d26c5SEd Maste #define	AQ_RX_RSS_TYPE_IPV4_UDP	0x6
230*493d26c5SEd Maste #define	AQ_RX_RSS_TYPE_IPV6_UDP	0x7
231*493d26c5SEd Maste 
232*493d26c5SEd Maste enum hw_atl_rx_action_with_traffic {
233*493d26c5SEd Maste 	HW_ATL_RX_DISCARD,
234*493d26c5SEd Maste 	HW_ATL_RX_HOST,
235*493d26c5SEd Maste 	HW_ATL_RX_MNGMNT,
236*493d26c5SEd Maste 	HW_ATL_RX_HOST_AND_MNGMNT,
237*493d26c5SEd Maste 	HW_ATL_RX_WOL
238*493d26c5SEd Maste };
239*493d26c5SEd Maste 
240*493d26c5SEd Maste struct aq_rx_filter_vlan {
241*493d26c5SEd Maste 	u8 enable;
242*493d26c5SEd Maste 	u8 location;
243*493d26c5SEd Maste 	u16 vlan_id;
244*493d26c5SEd Maste 	u8 queue;
245*493d26c5SEd Maste };
246*493d26c5SEd Maste 
247*493d26c5SEd Maste #define AQ_HW_VLAN_MAX_FILTERS         16U
248*493d26c5SEd Maste #define AQ_HW_ETYPE_MAX_FILTERS        16U
249*493d26c5SEd Maste 
250*493d26c5SEd Maste struct aq_rx_filter_l2 {
251*493d26c5SEd Maste 	u8 enable;
252*493d26c5SEd Maste 	s8 queue;
253*493d26c5SEd Maste 	u8 location;
254*493d26c5SEd Maste 	u8 user_priority_en;
255*493d26c5SEd Maste 	u8 user_priority;
256*493d26c5SEd Maste 	u16 ethertype;
257*493d26c5SEd Maste };
258*493d26c5SEd Maste 
259*493d26c5SEd Maste enum hw_atl_rx_ctrl_registers_l2 {
260*493d26c5SEd Maste 	HW_ATL_RX_ENABLE_UNICAST_MNGNT_QUEUE_L2 = BIT(19),
261*493d26c5SEd Maste 	HW_ATL_RX_ENABLE_UNICAST_FLTR_L2        = BIT(31)
262*493d26c5SEd Maste };
263*493d26c5SEd Maste 
264*493d26c5SEd Maste struct aq_rx_filter_l3l4 {
265*493d26c5SEd Maste 	u32 cmd;
266*493d26c5SEd Maste 	u8 location;
267*493d26c5SEd Maste 	u32 ip_dst[4];
268*493d26c5SEd Maste 	u32 ip_src[4];
269*493d26c5SEd Maste 	u16 p_dst;
270*493d26c5SEd Maste 	u16 p_src;
271*493d26c5SEd Maste 	bool is_ipv6;
272*493d26c5SEd Maste };
273*493d26c5SEd Maste 
274*493d26c5SEd Maste enum hw_atl_rx_protocol_value_l3l4 {
275*493d26c5SEd Maste 	HW_ATL_RX_TCP,
276*493d26c5SEd Maste 	HW_ATL_RX_UDP,
277*493d26c5SEd Maste 	HW_ATL_RX_SCTP,
278*493d26c5SEd Maste 	HW_ATL_RX_ICMP
279*493d26c5SEd Maste };
280*493d26c5SEd Maste 
281*493d26c5SEd Maste enum hw_atl_rx_ctrl_registers_l3l4 {
282*493d26c5SEd Maste 	HW_ATL_RX_ENABLE_MNGMNT_QUEUE_L3L4 = BIT(22),
283*493d26c5SEd Maste 	HW_ATL_RX_ENABLE_QUEUE_L3L4        = BIT(23),
284*493d26c5SEd Maste 	HW_ATL_RX_ENABLE_ARP_FLTR_L3       = BIT(24),
285*493d26c5SEd Maste 	HW_ATL_RX_ENABLE_CMP_PROT_L4       = BIT(25),
286*493d26c5SEd Maste 	HW_ATL_RX_ENABLE_CMP_DEST_PORT_L4  = BIT(26),
287*493d26c5SEd Maste 	HW_ATL_RX_ENABLE_CMP_SRC_PORT_L4   = BIT(27),
288*493d26c5SEd Maste 	HW_ATL_RX_ENABLE_CMP_DEST_ADDR_L3  = BIT(28),
289*493d26c5SEd Maste 	HW_ATL_RX_ENABLE_CMP_SRC_ADDR_L3   = BIT(29),
290*493d26c5SEd Maste 	HW_ATL_RX_ENABLE_L3_IPv6           = BIT(30),
291*493d26c5SEd Maste 	HW_ATL_RX_ENABLE_FLTR_L3L4         = BIT(31)
292*493d26c5SEd Maste };
293*493d26c5SEd Maste 
294*493d26c5SEd Maste #define HW_ATL_RX_BOFFSET_PROT_FL3L4      0U
295*493d26c5SEd Maste #define HW_ATL_RX_BOFFSET_QUEUE_FL3L4     8U
296*493d26c5SEd Maste #define HW_ATL_RX_BOFFSET_ACTION_FL3F4    16U
297*493d26c5SEd Maste 
298*493d26c5SEd Maste #define HW_ATL_RX_CNT_REG_ADDR_IPV6       4U
299*493d26c5SEd Maste 
300*493d26c5SEd Maste #define HW_ATL_GET_REG_LOCATION_FL3L4(location) \
301*493d26c5SEd Maste 	((location) - AQ_RX_FIRST_LOC_FL3L4)
302*493d26c5SEd Maste 
303*493d26c5SEd Maste enum aq_hw_fw_mpi_state_e {
304*493d26c5SEd Maste     MPI_DEINIT = 0,
305*493d26c5SEd Maste     MPI_RESET = 1,
306*493d26c5SEd Maste     MPI_INIT = 2,
307*493d26c5SEd Maste     MPI_POWER = 4,
308*493d26c5SEd Maste };
309*493d26c5SEd Maste 
310*493d26c5SEd Maste int aq_hw_get_mac_permanent(struct aq_hw *hw, u8 *mac);
311*493d26c5SEd Maste 
312*493d26c5SEd Maste int aq_hw_mac_addr_set(struct aq_hw *hw, u8 *mac_addr, u8 index);
313*493d26c5SEd Maste 
314*493d26c5SEd Maste /* link speed in mbps. "0" - no link detected */
315*493d26c5SEd Maste int aq_hw_get_link_state(struct aq_hw *hw, u32 *link_speed, struct aq_hw_fc_info *fc_neg);
316*493d26c5SEd Maste 
317*493d26c5SEd Maste int aq_hw_set_link_speed(struct aq_hw *hw, u32 speed);
318*493d26c5SEd Maste 
319*493d26c5SEd Maste int aq_hw_fw_downld_dwords(struct aq_hw *hw, u32 a, u32 *p, u32 cnt);
320*493d26c5SEd Maste 
321*493d26c5SEd Maste int aq_hw_reset(struct aq_hw *hw);
322*493d26c5SEd Maste 
323*493d26c5SEd Maste int aq_hw_mpi_create(struct aq_hw *hw);
324*493d26c5SEd Maste 
325*493d26c5SEd Maste int aq_hw_mpi_read_stats(struct aq_hw *hw, struct aq_hw_fw_mbox *pmbox);
326*493d26c5SEd Maste 
327*493d26c5SEd Maste int aq_hw_init(struct aq_hw *hw, u8 *mac_addr, u8 adm_irq, bool msix);
328*493d26c5SEd Maste 
329*493d26c5SEd Maste int aq_hw_start(struct aq_hw *hw);
330*493d26c5SEd Maste 
331*493d26c5SEd Maste int aq_hw_interrupt_moderation_set(struct aq_hw *hw);
332*493d26c5SEd Maste 
333*493d26c5SEd Maste int aq_hw_get_fw_version(struct aq_hw *hw, u32 *fw_version);
334*493d26c5SEd Maste 
335*493d26c5SEd Maste int aq_hw_deinit(struct aq_hw *hw);
336*493d26c5SEd Maste 
337*493d26c5SEd Maste int aq_hw_ver_match(const aq_hw_fw_version* ver_expected, const aq_hw_fw_version* ver_actual);
338*493d26c5SEd Maste 
339*493d26c5SEd Maste void aq_hw_set_promisc(struct aq_hw_s *self, bool l2_promisc, bool vlan_promisc, bool mc_promisc);
340*493d26c5SEd Maste 
341*493d26c5SEd Maste int aq_hw_set_power(struct aq_hw *hw, unsigned int power_state);
342*493d26c5SEd Maste 
343*493d26c5SEd Maste int aq_hw_err_from_flags(struct aq_hw *hw);
344*493d26c5SEd Maste 
345*493d26c5SEd Maste int hw_atl_b0_hw_vlan_promisc_set(struct aq_hw_s *self, bool promisc);
346*493d26c5SEd Maste 
347*493d26c5SEd Maste int hw_atl_b0_hw_vlan_set(struct aq_hw_s *self,
348*493d26c5SEd Maste                   struct aq_rx_filter_vlan *aq_vlans);
349*493d26c5SEd Maste 
350*493d26c5SEd Maste int aq_hw_rss_hash_set(struct aq_hw_s *self, u8 rss_key[HW_ATL_RSS_HASHKEY_SIZE]);
351*493d26c5SEd Maste int aq_hw_rss_hash_get(struct aq_hw_s *self, u8 rss_key[HW_ATL_RSS_HASHKEY_SIZE]);
352*493d26c5SEd Maste int aq_hw_rss_set(struct aq_hw_s *self, u8 rss_table[HW_ATL_RSS_INDIRECTION_TABLE_MAX]);
353*493d26c5SEd Maste int aq_hw_udp_rss_enable(struct aq_hw_s *self, bool enable);
354*493d26c5SEd Maste 
355*493d26c5SEd Maste #endif //_AQ_HW_H_
356*493d26c5SEd Maste 
357