14d0e5007SSukumar Swaminathan /*
24d0e5007SSukumar Swaminathan  * CDDL HEADER START
34d0e5007SSukumar Swaminathan  *
44d0e5007SSukumar Swaminathan  * The contents of this file are subject to the terms of the
54d0e5007SSukumar Swaminathan  * Common Development and Distribution License (the "License").
64d0e5007SSukumar Swaminathan  * You may not use this file except in compliance with the License.
74d0e5007SSukumar Swaminathan  *
84d0e5007SSukumar Swaminathan  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
94d0e5007SSukumar Swaminathan  * or http://www.opensolaris.org/os/licensing.
104d0e5007SSukumar Swaminathan  * See the License for the specific language governing permissions
114d0e5007SSukumar Swaminathan  * and limitations under the License.
124d0e5007SSukumar Swaminathan  *
134d0e5007SSukumar Swaminathan  * When distributing Covered Code, include this CDDL HEADER in each
144d0e5007SSukumar Swaminathan  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
154d0e5007SSukumar Swaminathan  * If applicable, add the following below this CDDL HEADER, with the
164d0e5007SSukumar Swaminathan  * fields enclosed by brackets "[]" replaced with your own identifying
174d0e5007SSukumar Swaminathan  * information: Portions Copyright [yyyy] [name of copyright owner]
184d0e5007SSukumar Swaminathan  *
194d0e5007SSukumar Swaminathan  * CDDL HEADER END
204d0e5007SSukumar Swaminathan  */
214d0e5007SSukumar Swaminathan 
22*3abb112fSGarrett D'Amore /* Copyright © 2003-2011 Emulex. All rights reserved.  */
234d0e5007SSukumar Swaminathan 
244d0e5007SSukumar Swaminathan /*
254d0e5007SSukumar Swaminathan  * header file containing the data structure definitions for the NIC
264d0e5007SSukumar Swaminathan  * subsystetm
274d0e5007SSukumar Swaminathan  */
284d0e5007SSukumar Swaminathan 
294d0e5007SSukumar Swaminathan #ifndef _OCE_HW_ETH_H_
304d0e5007SSukumar Swaminathan #define	_OCE_HW_ETH_H_
314d0e5007SSukumar Swaminathan 
324d0e5007SSukumar Swaminathan #ifdef __cplusplus
334d0e5007SSukumar Swaminathan extern "C" {
344d0e5007SSukumar Swaminathan #endif
354d0e5007SSukumar Swaminathan 
364d0e5007SSukumar Swaminathan #include <oce_hw.h>
374d0e5007SSukumar Swaminathan 
384d0e5007SSukumar Swaminathan #define	NIC_WQE_SIZE	16
394d0e5007SSukumar Swaminathan /* NIC packet type */
404d0e5007SSukumar Swaminathan #define	NIC_UNICAST	0x00
414d0e5007SSukumar Swaminathan #define	NIC_MULTICAST	0x01
424d0e5007SSukumar Swaminathan #define	NIC_BROADCAST	0x02
434d0e5007SSukumar Swaminathan 
444d0e5007SSukumar Swaminathan /* HDS type */
454d0e5007SSukumar Swaminathan #define	NIC_HDS_NO_SPLIT	0x00
464d0e5007SSukumar Swaminathan #define	NIC_HDS_SPLIT_L3PL	0x01
474d0e5007SSukumar Swaminathan #define	NIC_HDS_SPLIT_L4PL	0x02
484d0e5007SSukumar Swaminathan 
494d0e5007SSukumar Swaminathan /* NIC WQ types */
504d0e5007SSukumar Swaminathan #define	NIC_WQ_TYPE_FORWARDING		0x01
514d0e5007SSukumar Swaminathan #define	NIC_WQ_TYPE_STANDARD		0x02
524d0e5007SSukumar Swaminathan #define	NIC_WQ_TYPE_LOW_LATENCY		0x04
534d0e5007SSukumar Swaminathan 
544d0e5007SSukumar Swaminathan #pragma pack(1)
554d0e5007SSukumar Swaminathan enum {
564d0e5007SSukumar Swaminathan 	OPCODE_CONFIG_NIC_RSS = 1,
574d0e5007SSukumar Swaminathan 	OPCODE_CONFIG_NIC_ACPI = 2,
584d0e5007SSukumar Swaminathan 	OPCODE_CONFIG_NIC_PROMISCUOUS = 3,
594d0e5007SSukumar Swaminathan 	OPCODE_GET_NIC_STATS = 4,
604d0e5007SSukumar Swaminathan 	OPCODE_CREATE_NIC_WQ = 7,
614d0e5007SSukumar Swaminathan 	OPCODE_CREATE_NIC_RQ = 8,
624d0e5007SSukumar Swaminathan 	OPCODE_DELETE_NIC_WQ = 9,
634d0e5007SSukumar Swaminathan 	OPCODE_DELETE_NIC_RQ = 10,
644d0e5007SSukumar Swaminathan 	OPCODE_CREATE_NIC_RSS_CQ = 11,
654d0e5007SSukumar Swaminathan 	OPCODE_DELETE_NIC_RSS_CQ = 12,
664d0e5007SSukumar Swaminathan 	OPCODE_SET_RSS_EQ_MSI = 13,
674d0e5007SSukumar Swaminathan 	OPCODE_CREATE_NIC_HDS_RQ = 14,
684d0e5007SSukumar Swaminathan 	OPCODE_DELETE_NIC_HDS_RQ = 15,
694d0e5007SSukumar Swaminathan 	OPCODE_CONFIG_NIC_RSS_ADVANCED = 16
704d0e5007SSukumar Swaminathan };
714d0e5007SSukumar Swaminathan 
725b9d3151SSukumar Swaminathan enum {
735b9d3151SSukumar Swaminathan 	RSS_ENABLE_NONE		= 0x0, /* (No RSS) */
745b9d3151SSukumar Swaminathan 	RSS_ENABLE_IPV4		= 0x1, /* (IPV4 HASH enabled ) */
755b9d3151SSukumar Swaminathan 	RSS_ENABLE_TCP_IPV4	= 0x2, /* (TCP IPV4 Hash enabled) */
765b9d3151SSukumar Swaminathan 	RSS_ENABLE_IPV6		= 0x4, /* (IPV6 HASH enabled) */
775b9d3151SSukumar Swaminathan 	RSS_ENABLE_TCP_IPV6	= 0x8  /* (TCP IPV6 HASH */
785b9d3151SSukumar Swaminathan 
795b9d3151SSukumar Swaminathan };
804d0e5007SSukumar Swaminathan /* NIC header WQE */
814d0e5007SSukumar Swaminathan struct oce_nic_hdr_wqe {
824d0e5007SSukumar Swaminathan 	union {
834d0e5007SSukumar Swaminathan 		struct {
844d0e5007SSukumar Swaminathan #ifdef _BIG_ENDIAN
854d0e5007SSukumar Swaminathan 			/* dw0 */
864d0e5007SSukumar Swaminathan 			uint32_t rsvd0;
874d0e5007SSukumar Swaminathan 
884d0e5007SSukumar Swaminathan 			/* dw1 */
894d0e5007SSukumar Swaminathan 			uint32_t last_seg_udp_len:14;
904d0e5007SSukumar Swaminathan 			uint32_t rsvd1:18;
914d0e5007SSukumar Swaminathan 
924d0e5007SSukumar Swaminathan 			/* dw2 */
934d0e5007SSukumar Swaminathan 			uint32_t lso_mss:14;
944d0e5007SSukumar Swaminathan 			uint32_t num_wqe:5;
954d0e5007SSukumar Swaminathan 			uint32_t rsvd4:2;
964d0e5007SSukumar Swaminathan 			uint32_t vlan:1;
974d0e5007SSukumar Swaminathan 			uint32_t lso:1;
984d0e5007SSukumar Swaminathan 			uint32_t tcpcs:1;
994d0e5007SSukumar Swaminathan 			uint32_t udpcs:1;
1004d0e5007SSukumar Swaminathan 			uint32_t ipcs:1;
1014d0e5007SSukumar Swaminathan 			uint32_t rsvd3:1;
1024d0e5007SSukumar Swaminathan 			uint32_t rsvd2:1;
1034d0e5007SSukumar Swaminathan 			uint32_t forward:1;
1044d0e5007SSukumar Swaminathan 			uint32_t crc:1;
1054d0e5007SSukumar Swaminathan 			uint32_t event:1;
1064d0e5007SSukumar Swaminathan 			uint32_t complete:1;
1074d0e5007SSukumar Swaminathan 
1084d0e5007SSukumar Swaminathan 			/* dw3 */
1094d0e5007SSukumar Swaminathan 			uint32_t vlan_tag:16;
1104d0e5007SSukumar Swaminathan 			uint32_t total_length:16;
1114d0e5007SSukumar Swaminathan #else
1124d0e5007SSukumar Swaminathan 			/* dw0 */
1134d0e5007SSukumar Swaminathan 			uint32_t rsvd0;
1144d0e5007SSukumar Swaminathan 
1154d0e5007SSukumar Swaminathan 			/* dw1 */
1164d0e5007SSukumar Swaminathan 			uint32_t rsvd1:18;
1174d0e5007SSukumar Swaminathan 			uint32_t last_seg_udp_len:14;
1184d0e5007SSukumar Swaminathan 
1194d0e5007SSukumar Swaminathan 			/* dw2 */
1204d0e5007SSukumar Swaminathan 			uint32_t complete:1;
1214d0e5007SSukumar Swaminathan 			uint32_t event:1;
1224d0e5007SSukumar Swaminathan 			uint32_t crc:1;
1234d0e5007SSukumar Swaminathan 			uint32_t forward:1;
1244d0e5007SSukumar Swaminathan 			uint32_t rsvd2:1;
1254d0e5007SSukumar Swaminathan 			uint32_t rsvd3:1;
1264d0e5007SSukumar Swaminathan 			uint32_t ipcs:1;
1274d0e5007SSukumar Swaminathan 			uint32_t udpcs:1;
1284d0e5007SSukumar Swaminathan 			uint32_t tcpcs:1;
1294d0e5007SSukumar Swaminathan 			uint32_t lso:1;
1304d0e5007SSukumar Swaminathan 			uint32_t vlan:1;
1314d0e5007SSukumar Swaminathan 			uint32_t rsvd4:2;
1324d0e5007SSukumar Swaminathan 			uint32_t num_wqe:5;
1334d0e5007SSukumar Swaminathan 			uint32_t lso_mss:14;
1344d0e5007SSukumar Swaminathan 
1354d0e5007SSukumar Swaminathan 			/* dw3 */
1364d0e5007SSukumar Swaminathan 			uint32_t total_length:16;
1374d0e5007SSukumar Swaminathan 			uint32_t vlan_tag:16;
1384d0e5007SSukumar Swaminathan #endif
1394d0e5007SSukumar Swaminathan 		}s;
1404d0e5007SSukumar Swaminathan 		uint32_t dw[4];
1414d0e5007SSukumar Swaminathan 	}u0;
1424d0e5007SSukumar Swaminathan };
1434d0e5007SSukumar Swaminathan 
1444d0e5007SSukumar Swaminathan /* NIC fragment WQE */
1454d0e5007SSukumar Swaminathan struct oce_nic_frag_wqe {
1464d0e5007SSukumar Swaminathan 	union {
1474d0e5007SSukumar Swaminathan 		struct {
1484d0e5007SSukumar Swaminathan 			/* dw0 */
1494d0e5007SSukumar Swaminathan 			uint32_t frag_pa_hi;
1504d0e5007SSukumar Swaminathan 			/* dw1 */
1514d0e5007SSukumar Swaminathan 			uint32_t frag_pa_lo;
1524d0e5007SSukumar Swaminathan 			/* dw2 */
1534d0e5007SSukumar Swaminathan 			uint32_t rsvd0;
1544d0e5007SSukumar Swaminathan 			uint32_t frag_len;
1554d0e5007SSukumar Swaminathan 		}s;
1564d0e5007SSukumar Swaminathan 		uint32_t dw[4];
1574d0e5007SSukumar Swaminathan 	}u0;
1584d0e5007SSukumar Swaminathan };
1594d0e5007SSukumar Swaminathan 
1604d0e5007SSukumar Swaminathan /* Ethernet Tx Completion Descriptor */
1614d0e5007SSukumar Swaminathan struct oce_nic_tx_cqe {
1624d0e5007SSukumar Swaminathan 	union {
1634d0e5007SSukumar Swaminathan 		struct {
1644d0e5007SSukumar Swaminathan #ifdef _BIG_ENDIAN
1654d0e5007SSukumar Swaminathan 			/* dw 0 */
1664d0e5007SSukumar Swaminathan 			uint32_t status:4;
1674d0e5007SSukumar Swaminathan 			uint32_t rsvd0:8;
1684d0e5007SSukumar Swaminathan 			uint32_t port:2;
1694d0e5007SSukumar Swaminathan 			uint32_t ct:2;
1704d0e5007SSukumar Swaminathan 			uint32_t wqe_index:16;
1714d0e5007SSukumar Swaminathan 
1724d0e5007SSukumar Swaminathan 			/* dw 1 */
1734d0e5007SSukumar Swaminathan 			uint32_t rsvd1:5;
1744d0e5007SSukumar Swaminathan 			uint32_t cast_enc:2;
1754d0e5007SSukumar Swaminathan 			uint32_t lso:1;
1764d0e5007SSukumar Swaminathan 			uint32_t nwh_bytes:8;
1774d0e5007SSukumar Swaminathan 			uint32_t user_bytes:16;
1784d0e5007SSukumar Swaminathan 
1794d0e5007SSukumar Swaminathan 			/* dw 2 */
1804d0e5007SSukumar Swaminathan 			uint32_t rsvd2;
1814d0e5007SSukumar Swaminathan 
1824d0e5007SSukumar Swaminathan 
1834d0e5007SSukumar Swaminathan 			/* dw 3 */
1844d0e5007SSukumar Swaminathan 			uint32_t valid:1;
1854d0e5007SSukumar Swaminathan 			uint32_t rsvd3:4;
1864d0e5007SSukumar Swaminathan 			uint32_t wq_id:11;
1874d0e5007SSukumar Swaminathan 			uint32_t num_pkts:16;
1884d0e5007SSukumar Swaminathan #else
1894d0e5007SSukumar Swaminathan 			/* dw 0 */
1904d0e5007SSukumar Swaminathan 			uint32_t wqe_index:16;
1914d0e5007SSukumar Swaminathan 			uint32_t ct:2;
1924d0e5007SSukumar Swaminathan 			uint32_t port:2;
1934d0e5007SSukumar Swaminathan 			uint32_t rsvd0:8;
1944d0e5007SSukumar Swaminathan 			uint32_t status:4;
1954d0e5007SSukumar Swaminathan 
1964d0e5007SSukumar Swaminathan 			/* dw 1 */
1974d0e5007SSukumar Swaminathan 			uint32_t user_bytes:16;
1984d0e5007SSukumar Swaminathan 			uint32_t nwh_bytes:8;
1994d0e5007SSukumar Swaminathan 			uint32_t lso:1;
2004d0e5007SSukumar Swaminathan 			uint32_t cast_enc:2;
2014d0e5007SSukumar Swaminathan 			uint32_t rsvd1:5;
2024d0e5007SSukumar Swaminathan 			/* dw 2 */
2034d0e5007SSukumar Swaminathan 			uint32_t rsvd2;
2044d0e5007SSukumar Swaminathan 
2054d0e5007SSukumar Swaminathan 			/* dw 3 */
2064d0e5007SSukumar Swaminathan 			uint32_t num_pkts:16;
2074d0e5007SSukumar Swaminathan 			uint32_t wq_id:11;
2084d0e5007SSukumar Swaminathan 			uint32_t rsvd3:4;
2094d0e5007SSukumar Swaminathan 			uint32_t valid:1;
2104d0e5007SSukumar Swaminathan #endif
2114d0e5007SSukumar Swaminathan 		}s;
2124d0e5007SSukumar Swaminathan 		uint32_t dw[4];
2134d0e5007SSukumar Swaminathan 	}u0;
2144d0e5007SSukumar Swaminathan };
2154d0e5007SSukumar Swaminathan #define	WQ_CQE_VALID(_cqe)  (_cqe->u0.dw[3])
2164d0e5007SSukumar Swaminathan #define	WQ_CQE_INVALIDATE(_cqe)  (_cqe->u0.dw[3] = 0)
2174d0e5007SSukumar Swaminathan 
2184d0e5007SSukumar Swaminathan /* Receive Queue Entry (RQE) */
2194d0e5007SSukumar Swaminathan struct oce_nic_rqe {
2204d0e5007SSukumar Swaminathan 	union {
2214d0e5007SSukumar Swaminathan 		struct {
2224d0e5007SSukumar Swaminathan 			uint32_t frag_pa_hi;
2234d0e5007SSukumar Swaminathan 			uint32_t frag_pa_lo;
2244d0e5007SSukumar Swaminathan 		}s;
2254d0e5007SSukumar Swaminathan 		uint32_t dw[2];
2264d0e5007SSukumar Swaminathan 	}u0;
2274d0e5007SSukumar Swaminathan };
2284d0e5007SSukumar Swaminathan 
2294d0e5007SSukumar Swaminathan /* NIC Receive CQE */
2304d0e5007SSukumar Swaminathan struct oce_nic_rx_cqe {
2314d0e5007SSukumar Swaminathan 	union {
2324d0e5007SSukumar Swaminathan 		struct {
2334d0e5007SSukumar Swaminathan #ifdef _BIG_ENDIAN
2344d0e5007SSukumar Swaminathan 			/* dw 0 */
2354d0e5007SSukumar Swaminathan 			uint32_t ip_options:1;
2364d0e5007SSukumar Swaminathan 			uint32_t port:1;
2374d0e5007SSukumar Swaminathan 			uint32_t pkt_size:14;
2384d0e5007SSukumar Swaminathan 			uint32_t vlan_tag:16;
2394d0e5007SSukumar Swaminathan 
2404d0e5007SSukumar Swaminathan 			/* dw 1 */
2414d0e5007SSukumar Swaminathan 			uint32_t num_fragments:3;
2424d0e5007SSukumar Swaminathan 			uint32_t switched:1;
2434d0e5007SSukumar Swaminathan 			uint32_t ct:2;
2444d0e5007SSukumar Swaminathan 			uint32_t frag_index:10;
2454d0e5007SSukumar Swaminathan 			uint32_t rsvd0:1;
2464d0e5007SSukumar Swaminathan 			uint32_t vlan_tag_present:1;
2474d0e5007SSukumar Swaminathan 			uint32_t mac_dst:6;
2485b9d3151SSukumar Swaminathan 			uint32_t ip_ver:1;
2494d0e5007SSukumar Swaminathan 			uint32_t l4_cksum_pass:1;
2504d0e5007SSukumar Swaminathan 			uint32_t ip_cksum_pass:1;
2514d0e5007SSukumar Swaminathan 			uint32_t udpframe:1;
2524d0e5007SSukumar Swaminathan 			uint32_t tcpframe:1;
2535b9d3151SSukumar Swaminathan 			uint32_t ipframe:1;
2544d0e5007SSukumar Swaminathan 			uint32_t rss_hp:1;
2554d0e5007SSukumar Swaminathan 			uint32_t error:1;
2564d0e5007SSukumar Swaminathan 
2574d0e5007SSukumar Swaminathan 			/* dw 2 */
2584d0e5007SSukumar Swaminathan 			uint32_t valid:1;
2594d0e5007SSukumar Swaminathan 			uint32_t hds_type:2;
2604d0e5007SSukumar Swaminathan 			uint32_t lro_pkt:1;
2614d0e5007SSukumar Swaminathan 			uint32_t rsvd4:1;
2624d0e5007SSukumar Swaminathan 			uint32_t hds_hdr_size:12;
2634d0e5007SSukumar Swaminathan 			uint32_t hds_hdr_frag_index:10;
2644d0e5007SSukumar Swaminathan 			uint32_t rss_bank:1;
2654d0e5007SSukumar Swaminathan 			uint32_t qnq:1;
2664d0e5007SSukumar Swaminathan 			uint32_t pkt_type:2;
2674d0e5007SSukumar Swaminathan 			uint32_t rss_flush:1;
2684d0e5007SSukumar Swaminathan 
2694d0e5007SSukumar Swaminathan 			/* dw 3 */
2704d0e5007SSukumar Swaminathan 			uint32_t rss_hash_value;
2714d0e5007SSukumar Swaminathan #else
2724d0e5007SSukumar Swaminathan 			/* dw 0 */
2734d0e5007SSukumar Swaminathan 			uint32_t vlan_tag:16;
2744d0e5007SSukumar Swaminathan 			uint32_t pkt_size:14;
2754d0e5007SSukumar Swaminathan 			uint32_t port:1;
2764d0e5007SSukumar Swaminathan 			uint32_t ip_options:1;
2774d0e5007SSukumar Swaminathan 			/* dw 1 */
2784d0e5007SSukumar Swaminathan 			uint32_t error:1;
2794d0e5007SSukumar Swaminathan 			uint32_t rss_hp:1;
2805b9d3151SSukumar Swaminathan 			uint32_t ipframe:1;
2814d0e5007SSukumar Swaminathan 			uint32_t tcpframe:1;
2824d0e5007SSukumar Swaminathan 			uint32_t udpframe:1;
2834d0e5007SSukumar Swaminathan 			uint32_t ip_cksum_pass:1;
2844d0e5007SSukumar Swaminathan 			uint32_t l4_cksum_pass:1;
2855b9d3151SSukumar Swaminathan 			uint32_t ip_ver:1;
2864d0e5007SSukumar Swaminathan 			uint32_t mac_dst:6;
2874d0e5007SSukumar Swaminathan 			uint32_t vlan_tag_present:1;
2884d0e5007SSukumar Swaminathan 			uint32_t rsvd0:1;
2894d0e5007SSukumar Swaminathan 			uint32_t frag_index:10;
2904d0e5007SSukumar Swaminathan 			uint32_t ct:2;
2914d0e5007SSukumar Swaminathan 			uint32_t switched:1;
2924d0e5007SSukumar Swaminathan 			uint32_t num_fragments:3;
2934d0e5007SSukumar Swaminathan 
2944d0e5007SSukumar Swaminathan 			/* dw 2 */
2954d0e5007SSukumar Swaminathan 			uint32_t rss_flush:1;
2964d0e5007SSukumar Swaminathan 			uint32_t pkt_type:2;
2974d0e5007SSukumar Swaminathan 			uint32_t qnq:1;
2984d0e5007SSukumar Swaminathan 			uint32_t rss_bank:1;
2994d0e5007SSukumar Swaminathan 			uint32_t hds_hdr_frag_index:10;
3004d0e5007SSukumar Swaminathan 			uint32_t hds_hdr_size:12;
3014d0e5007SSukumar Swaminathan 			uint32_t rsvd4:1;
3024d0e5007SSukumar Swaminathan 			uint32_t lro_pkt:1;
3034d0e5007SSukumar Swaminathan 			uint32_t hds_type:2;
3044d0e5007SSukumar Swaminathan 			uint32_t valid:1;
3054d0e5007SSukumar Swaminathan 			/* dw 3 */
3064d0e5007SSukumar Swaminathan 			uint32_t rss_hash_value;
3074d0e5007SSukumar Swaminathan #endif
3084d0e5007SSukumar Swaminathan 		}s;
3094d0e5007SSukumar Swaminathan 		uint32_t dw[4];
3104d0e5007SSukumar Swaminathan 	}u0;
3114d0e5007SSukumar Swaminathan };
3124d0e5007SSukumar Swaminathan #define	RQ_CQE_VALID_MASK  0x80
3134d0e5007SSukumar Swaminathan #define	RQ_CQE_VALID(_cqe) (_cqe->u0.dw[2])
3144d0e5007SSukumar Swaminathan #define	RQ_CQE_INVALIDATE(_cqe) (_cqe->u0.dw[2] = 0)
3154d0e5007SSukumar Swaminathan 
3164d0e5007SSukumar Swaminathan struct mbx_config_nic_promiscuous {
3174d0e5007SSukumar Swaminathan 	struct mbx_hdr hdr;
3184d0e5007SSukumar Swaminathan 	union {
3194d0e5007SSukumar Swaminathan 		struct {
3204d0e5007SSukumar Swaminathan #ifdef _BIG_ENDIAN
3214d0e5007SSukumar Swaminathan 			uint16_t rsvd0;
3224d0e5007SSukumar Swaminathan 			uint8_t port1_promisc;
3234d0e5007SSukumar Swaminathan 			uint8_t port0_promisc;
3244d0e5007SSukumar Swaminathan #else
3254d0e5007SSukumar Swaminathan 			uint8_t port0_promisc;
3264d0e5007SSukumar Swaminathan 			uint8_t port1_promisc;
3274d0e5007SSukumar Swaminathan 			uint16_t rsvd0;
3284d0e5007SSukumar Swaminathan #endif
3294d0e5007SSukumar Swaminathan 		}req;
3304d0e5007SSukumar Swaminathan 
3314d0e5007SSukumar Swaminathan 		struct {
3324d0e5007SSukumar Swaminathan 			uint32_t rsvd0;
3334d0e5007SSukumar Swaminathan 		}rsp;
3344d0e5007SSukumar Swaminathan 	}params;
3354d0e5007SSukumar Swaminathan };
3364d0e5007SSukumar Swaminathan 
3374d0e5007SSukumar Swaminathan /* [07] OPCODE_CREATE_NIC_WQ */
3384d0e5007SSukumar Swaminathan struct mbx_create_nic_wq {
3394d0e5007SSukumar Swaminathan 
3404d0e5007SSukumar Swaminathan 	/* dw0 - dw3 */
3414d0e5007SSukumar Swaminathan 	struct mbx_hdr hdr;
3424d0e5007SSukumar Swaminathan 	union {
3434d0e5007SSukumar Swaminathan 		struct {
3444d0e5007SSukumar Swaminathan #ifdef _BIG_ENDIAN
3454d0e5007SSukumar Swaminathan 			/* dw4 */
3464d0e5007SSukumar Swaminathan 			uint8_t	rsvd1;
3474d0e5007SSukumar Swaminathan 			uint8_t	nic_wq_type;
3484d0e5007SSukumar Swaminathan 			uint8_t	rsvd0;
3494d0e5007SSukumar Swaminathan 			uint8_t	num_pages;
3504d0e5007SSukumar Swaminathan 
3514d0e5007SSukumar Swaminathan 			/* dw5 */
3524d0e5007SSukumar Swaminathan 			uint32_t rsvd3:12;
3534d0e5007SSukumar Swaminathan 			uint32_t wq_size:4;
3544d0e5007SSukumar Swaminathan 			uint32_t rsvd2:16;
3554d0e5007SSukumar Swaminathan 
3564d0e5007SSukumar Swaminathan 			/* dw6 */
3574d0e5007SSukumar Swaminathan 			uint32_t valid:1;
3584d0e5007SSukumar Swaminathan 			uint32_t pd_id:9;
3594d0e5007SSukumar Swaminathan 			uint32_t pci_function_id:8;
3604d0e5007SSukumar Swaminathan 			uint32_t rsvd4:14;
3614d0e5007SSukumar Swaminathan 
3624d0e5007SSukumar Swaminathan 			/* dw7 */
3634d0e5007SSukumar Swaminathan 			uint32_t rsvd5:16;
3644d0e5007SSukumar Swaminathan 			uint32_t cq_id:16;
3654d0e5007SSukumar Swaminathan #else
3664d0e5007SSukumar Swaminathan 			/* dw4 */
3674d0e5007SSukumar Swaminathan 			uint8_t	num_pages;
3684d0e5007SSukumar Swaminathan 			uint8_t	rsvd0;
3694d0e5007SSukumar Swaminathan 			uint8_t	nic_wq_type;
3704d0e5007SSukumar Swaminathan 			uint8_t	rsvd1;
3714d0e5007SSukumar Swaminathan 
3724d0e5007SSukumar Swaminathan 			/* dw5 */
3734d0e5007SSukumar Swaminathan 			uint32_t rsvd2:16;
3744d0e5007SSukumar Swaminathan 			uint32_t wq_size:4;
3754d0e5007SSukumar Swaminathan 			uint32_t rsvd3:12;
3764d0e5007SSukumar Swaminathan 
3774d0e5007SSukumar Swaminathan 			/* dw6 */
3784d0e5007SSukumar Swaminathan 			uint32_t rsvd4:14;
3794d0e5007SSukumar Swaminathan 			uint32_t pci_function_id:8;
3804d0e5007SSukumar Swaminathan 			uint32_t pd_id:9;
3814d0e5007SSukumar Swaminathan 			uint32_t valid:1;
3824d0e5007SSukumar Swaminathan 
3834d0e5007SSukumar Swaminathan 			/* dw7 */
3844d0e5007SSukumar Swaminathan 			uint32_t cq_id:16;
3854d0e5007SSukumar Swaminathan 			uint32_t rsvd5:16;
3864d0e5007SSukumar Swaminathan #endif
3874d0e5007SSukumar Swaminathan 			/* dw8 - dw20 */
3884d0e5007SSukumar Swaminathan 			uint32_t rsvd6[13];
3894d0e5007SSukumar Swaminathan 			/* dw21 - dw36 */
3904d0e5007SSukumar Swaminathan 			struct phys_addr	pages[8];
3914d0e5007SSukumar Swaminathan 		}req;
3924d0e5007SSukumar Swaminathan 
3934d0e5007SSukumar Swaminathan 		struct {
3944d0e5007SSukumar Swaminathan 			uint16_t	wq_id;
3954d0e5007SSukumar Swaminathan 			uint16_t	rsvd0;
3964d0e5007SSukumar Swaminathan 		}rsp;
3974d0e5007SSukumar Swaminathan 	}params;
3984d0e5007SSukumar Swaminathan };
3994d0e5007SSukumar Swaminathan 
4004d0e5007SSukumar Swaminathan /* [09] OPCODE_DELETE_NIC_WQ */
4014d0e5007SSukumar Swaminathan struct mbx_delete_nic_wq {
4024d0e5007SSukumar Swaminathan 	/* dw0 - dw3 */
4034d0e5007SSukumar Swaminathan 	struct mbx_hdr hdr;
4044d0e5007SSukumar Swaminathan 	union {
4054d0e5007SSukumar Swaminathan 		struct {
4064d0e5007SSukumar Swaminathan #ifdef _BIG_ENDIAN
4074d0e5007SSukumar Swaminathan 			/* dw4 */
4084d0e5007SSukumar Swaminathan 			uint16_t	rsvd0;
4094d0e5007SSukumar Swaminathan 			uint16_t	wq_id;
4104d0e5007SSukumar Swaminathan #else
4114d0e5007SSukumar Swaminathan 			/* dw4 */
4124d0e5007SSukumar Swaminathan 			uint16_t	wq_id;
4134d0e5007SSukumar Swaminathan 			uint16_t	rsvd0;
4144d0e5007SSukumar Swaminathan #endif
4154d0e5007SSukumar Swaminathan 		}req;
4164d0e5007SSukumar Swaminathan 		struct {
4174d0e5007SSukumar Swaminathan 			uint32_t	rsvd0;
4184d0e5007SSukumar Swaminathan 		}rsp;
4194d0e5007SSukumar Swaminathan 	}params;
4204d0e5007SSukumar Swaminathan };
4214d0e5007SSukumar Swaminathan 
4224d0e5007SSukumar Swaminathan /* [08] OPCODE_CREATE_NIC_RQ */
4234d0e5007SSukumar Swaminathan struct mbx_create_nic_rq {
4244d0e5007SSukumar Swaminathan 	/* dw0 - dw3 */
4254d0e5007SSukumar Swaminathan 	struct mbx_hdr hdr;
4264d0e5007SSukumar Swaminathan 	union {
4274d0e5007SSukumar Swaminathan 		struct {
4284d0e5007SSukumar Swaminathan #ifdef _BIG_ENDIAN
4294d0e5007SSukumar Swaminathan 			/* dw4 */
4304d0e5007SSukumar Swaminathan 			uint8_t	num_pages;
4314d0e5007SSukumar Swaminathan 			uint8_t	frag_size;
4324d0e5007SSukumar Swaminathan 			uint16_t cq_id;
4334d0e5007SSukumar Swaminathan #else
4344d0e5007SSukumar Swaminathan 			/* dw4 */
4354d0e5007SSukumar Swaminathan 			uint16_t cq_id;
4364d0e5007SSukumar Swaminathan 			uint8_t	frag_size;
4374d0e5007SSukumar Swaminathan 			uint8_t	num_pages;
4384d0e5007SSukumar Swaminathan #endif
4394d0e5007SSukumar Swaminathan 			/* dw5 - dw8 */
4404d0e5007SSukumar Swaminathan 			struct phys_addr pages[2];
4414d0e5007SSukumar Swaminathan 			/* dw9 */
4424d0e5007SSukumar Swaminathan 			uint32_t if_id;
4434d0e5007SSukumar Swaminathan #ifdef _BIG_ENDIAN
4444d0e5007SSukumar Swaminathan 			/* dw10 */
4454d0e5007SSukumar Swaminathan 			uint16_t rsvd0;
4464d0e5007SSukumar Swaminathan 			uint16_t max_frame_size;
4474d0e5007SSukumar Swaminathan #else
4484d0e5007SSukumar Swaminathan 			/* dw10 */
4494d0e5007SSukumar Swaminathan 			uint16_t max_frame_size;
4504d0e5007SSukumar Swaminathan 			uint16_t rsvd0;
4514d0e5007SSukumar Swaminathan #endif
4524d0e5007SSukumar Swaminathan 			/* dw11 */
4534d0e5007SSukumar Swaminathan 			uint32_t is_rss_queue;
4544d0e5007SSukumar Swaminathan 		}req;
4554d0e5007SSukumar Swaminathan 
4564d0e5007SSukumar Swaminathan 		struct {
4574d0e5007SSukumar Swaminathan 			/* dw4 */
4584d0e5007SSukumar Swaminathan 			union {
4594d0e5007SSukumar Swaminathan 				struct {
4604d0e5007SSukumar Swaminathan 					uint16_t rq_id;
4614d0e5007SSukumar Swaminathan 					uint8_t rss_cpuid;
4624d0e5007SSukumar Swaminathan 					uint8_t rsvd0;
4634d0e5007SSukumar Swaminathan 				} s;
4644d0e5007SSukumar Swaminathan 				uint32_t dw4;
4654d0e5007SSukumar Swaminathan 			}u0;
4664d0e5007SSukumar Swaminathan 		}rsp;
4674d0e5007SSukumar Swaminathan 	}params;
4684d0e5007SSukumar Swaminathan };
4694d0e5007SSukumar Swaminathan 
4704d0e5007SSukumar Swaminathan /* [10] OPCODE_DELETE_NIC_RQ */
4714d0e5007SSukumar Swaminathan struct mbx_delete_nic_rq {
4724d0e5007SSukumar Swaminathan 	/* dw0 - dw3 */
4734d0e5007SSukumar Swaminathan 	struct mbx_hdr hdr;
4744d0e5007SSukumar Swaminathan 	union {
4754d0e5007SSukumar Swaminathan 		struct {
4764d0e5007SSukumar Swaminathan #ifdef _BIG_ENDIAN
4774d0e5007SSukumar Swaminathan 			/* dw4 */
4784d0e5007SSukumar Swaminathan 			uint16_t	bypass_flush;
4794d0e5007SSukumar Swaminathan 			uint16_t	rq_id;
4804d0e5007SSukumar Swaminathan #else
4814d0e5007SSukumar Swaminathan 			/* dw4 */
4824d0e5007SSukumar Swaminathan 			uint16_t	rq_id;
4834d0e5007SSukumar Swaminathan 			uint16_t	bypass_flush;
4844d0e5007SSukumar Swaminathan #endif
4854d0e5007SSukumar Swaminathan 		}req;
4864d0e5007SSukumar Swaminathan 
4874d0e5007SSukumar Swaminathan 		struct {
4884d0e5007SSukumar Swaminathan 			/* dw4 */
4894d0e5007SSukumar Swaminathan 			uint32_t	rsvd0;
4904d0e5007SSukumar Swaminathan 		}rsp;
4914d0e5007SSukumar Swaminathan 	}params;
4924d0e5007SSukumar Swaminathan };
4934d0e5007SSukumar Swaminathan 
4944d0e5007SSukumar Swaminathan struct rx_port_stats {
4954d0e5007SSukumar Swaminathan 	uint32_t rx_bytes_lsd;
4964d0e5007SSukumar Swaminathan 	uint32_t rx_bytes_msd;
4974d0e5007SSukumar Swaminathan 	uint32_t rx_total_frames;
4984d0e5007SSukumar Swaminathan 	uint32_t rx_unicast_frames;
4994d0e5007SSukumar Swaminathan 	uint32_t rx_multicast_frames;
5004d0e5007SSukumar Swaminathan 	uint32_t rx_broadcast_frames;
5014d0e5007SSukumar Swaminathan 	uint32_t rx_crc_errors;
5024d0e5007SSukumar Swaminathan 	uint32_t rx_alignment_symbol_errors;
5034d0e5007SSukumar Swaminathan 	uint32_t rx_pause_frames;
5044d0e5007SSukumar Swaminathan 	uint32_t rx_control_frames;
5054d0e5007SSukumar Swaminathan 	uint32_t rx_in_range_errors;
5064d0e5007SSukumar Swaminathan 	uint32_t rx_out_range_errors;
5074d0e5007SSukumar Swaminathan 	uint32_t rx_frame_too_long;
5084d0e5007SSukumar Swaminathan 	uint32_t rx_address_match_errors;
5094d0e5007SSukumar Swaminathan 	uint32_t rx_vlan_mismatch;
5104d0e5007SSukumar Swaminathan 	uint32_t rx_dropped_too_small;
5114d0e5007SSukumar Swaminathan 	uint32_t rx_dropped_too_short;
5124d0e5007SSukumar Swaminathan 	uint32_t rx_dropped_header_too_small;
5134d0e5007SSukumar Swaminathan 	uint32_t rx_dropped_tcp_length;
5144d0e5007SSukumar Swaminathan 	uint32_t rx_dropped_runt;
5154d0e5007SSukumar Swaminathan 	uint32_t rx_64_byte_packets;
5164d0e5007SSukumar Swaminathan 	uint32_t rx_65_127_byte_packets;
5174d0e5007SSukumar Swaminathan 	uint32_t rx_128_256_byte_packets;
5184d0e5007SSukumar Swaminathan 	uint32_t rx_256_511_byte_packets;
5194d0e5007SSukumar Swaminathan 	uint32_t rx_512_1023_byte_packets;
5204d0e5007SSukumar Swaminathan 	uint32_t rx_1024_1518_byte_packets;
5214d0e5007SSukumar Swaminathan 	uint32_t rx_1519_2047_byte_packets;
5224d0e5007SSukumar Swaminathan 	uint32_t rx_2048_4095_byte_packets;
5234d0e5007SSukumar Swaminathan 	uint32_t rx_4096_8191_byte_packets;
5244d0e5007SSukumar Swaminathan 	uint32_t rx_8192_9216_byte_packets;
5254d0e5007SSukumar Swaminathan 	uint32_t rx_ip_checksum_errs;
5264d0e5007SSukumar Swaminathan 	uint32_t rx_tcp_checksum_errs;
5274d0e5007SSukumar Swaminathan 	uint32_t rx_udp_checksum_errs;
5284d0e5007SSukumar Swaminathan 	uint32_t rx_non_rss_packets;
5294d0e5007SSukumar Swaminathan 	uint32_t rx_ipv4_packets;
5304d0e5007SSukumar Swaminathan 	uint32_t rx_ipv6_packets;
5314d0e5007SSukumar Swaminathan 	uint32_t rx_ipv4_bytes_lsd;
5324d0e5007SSukumar Swaminathan 	uint32_t rx_ipv4_bytes_msd;
5334d0e5007SSukumar Swaminathan 	uint32_t rx_ipv6_bytes_lsd;
5344d0e5007SSukumar Swaminathan 	uint32_t rx_ipv6_bytes_msd;
5354d0e5007SSukumar Swaminathan 	uint32_t rx_chute1_packets;
5364d0e5007SSukumar Swaminathan 	uint32_t rx_chute2_packets;
5374d0e5007SSukumar Swaminathan 	uint32_t rx_chute3_packets;
5384d0e5007SSukumar Swaminathan 	uint32_t rx_management_packets;
5394d0e5007SSukumar Swaminathan 	uint32_t rx_switched_unicast_packets;
5404d0e5007SSukumar Swaminathan 	uint32_t rx_switched_multicast_packets;
5414d0e5007SSukumar Swaminathan 	uint32_t rx_switched_broadcast_packets;
5424d0e5007SSukumar Swaminathan 	uint32_t tx_bytes_lsd;
5434d0e5007SSukumar Swaminathan 	uint32_t tx_bytes_msd;
5444d0e5007SSukumar Swaminathan 	uint32_t tx_unicast_frames;
5454d0e5007SSukumar Swaminathan 	uint32_t tx_multicast_frames;
5464d0e5007SSukumar Swaminathan 	uint32_t tx_broadcast_frames;
5474d0e5007SSukumar Swaminathan 	uint32_t tx_pause_frames;
5484d0e5007SSukumar Swaminathan 	uint32_t tx_control_frames;
5494d0e5007SSukumar Swaminathan 	uint32_t tx_64_byte_packets;
5504d0e5007SSukumar Swaminathan 	uint32_t tx_65_127_byte_packets;
5514d0e5007SSukumar Swaminathan 	uint32_t tx_128_256_byte_packets;
5524d0e5007SSukumar Swaminathan 	uint32_t tx_256_511_byte_packets;
5534d0e5007SSukumar Swaminathan 	uint32_t tx_512_1023_byte_packets;
5544d0e5007SSukumar Swaminathan 	uint32_t tx_1024_1518_byte_packets;
5554d0e5007SSukumar Swaminathan 	uint32_t tx_1519_2047_byte_packets;
5564d0e5007SSukumar Swaminathan 	uint32_t tx_2048_4095_byte_packets;
5574d0e5007SSukumar Swaminathan 	uint32_t tx_4096_8191_byte_packets;
5584d0e5007SSukumar Swaminathan 	uint32_t tx_8192_9216_byte_packets;
5594d0e5007SSukumar Swaminathan 	uint32_t rx_fifo_overflow;
5604d0e5007SSukumar Swaminathan 	uint32_t rx_input_fifo_overflow;
5614d0e5007SSukumar Swaminathan };
5624d0e5007SSukumar Swaminathan 
5634d0e5007SSukumar Swaminathan struct rx_stats {
5644d0e5007SSukumar Swaminathan 	/* dw 0-131 --2 X 66 */
5654d0e5007SSukumar Swaminathan 	struct rx_port_stats port[2];
5664d0e5007SSukumar Swaminathan 	/* dw 132-147 --16 */
5674d0e5007SSukumar Swaminathan 	uint32_t rx_drops_no_pbuf;
5684d0e5007SSukumar Swaminathan 	uint32_t rx_drops_no_txpb;
5694d0e5007SSukumar Swaminathan 	uint32_t rx_drops_no_erx_descr;
5704d0e5007SSukumar Swaminathan 	uint32_t rx_drops_no_tpre_descr;
5714d0e5007SSukumar Swaminathan 	uint32_t management_rx_port_packets;
5724d0e5007SSukumar Swaminathan 	uint32_t management_rx_port_bytes;
5734d0e5007SSukumar Swaminathan 	uint32_t management_rx_port_pause_frames;
5744d0e5007SSukumar Swaminathan 	uint32_t management_rx_port_errors;
5754d0e5007SSukumar Swaminathan 	uint32_t management_tx_port_packets;
5764d0e5007SSukumar Swaminathan 	uint32_t management_tx_port_bytes;
5774d0e5007SSukumar Swaminathan 	uint32_t management_tx_port_pause;
5784d0e5007SSukumar Swaminathan 	uint32_t management_rx_port_rxfifo_overflow;
5794d0e5007SSukumar Swaminathan 	uint32_t rx_drops_too_many_frags;
5804d0e5007SSukumar Swaminathan 	uint32_t rx_drops_invalid_ring;
5814d0e5007SSukumar Swaminathan 	uint32_t forwarded_packets;
5824d0e5007SSukumar Swaminathan 	uint32_t rx_drops_mtu;
5834d0e5007SSukumar Swaminathan 	/* fcoe is not relevent */
5844d0e5007SSukumar Swaminathan 	uint32_t rsvd[15];
5854d0e5007SSukumar Swaminathan };
5864d0e5007SSukumar Swaminathan 
5874d0e5007SSukumar Swaminathan struct tx_counter {
5884d0e5007SSukumar Swaminathan 	uint32_t pkts;
5894d0e5007SSukumar Swaminathan 	uint32_t lsd;
5904d0e5007SSukumar Swaminathan 	uint32_t msd;
5914d0e5007SSukumar Swaminathan };
5924d0e5007SSukumar Swaminathan 
5934d0e5007SSukumar Swaminathan struct tx_stats {
5944d0e5007SSukumar Swaminathan 	struct tx_counter ct1pt0_xmt_ipv4_ctrs;
5954d0e5007SSukumar Swaminathan 	struct tx_counter ct1pt0_xmt_ipv6_ctrs;
5964d0e5007SSukumar Swaminathan 	struct tx_counter ct1pt0_rexmt_ipv4_ctrs;
5974d0e5007SSukumar Swaminathan 	struct tx_counter ct1pt0_rexmt_ipv6_ctrs;
5984d0e5007SSukumar Swaminathan 	struct tx_counter ct1pt1_xmt_ipv4_ctrs;
5994d0e5007SSukumar Swaminathan 	struct tx_counter ct1pt1_xmt_ipv6_ctrs;
6004d0e5007SSukumar Swaminathan 	struct tx_counter ct1pt1_rexmt_ipv4_ctrs;
6014d0e5007SSukumar Swaminathan 	struct tx_counter ct1pt1_rexmt_ipv6_ctrs;
6024d0e5007SSukumar Swaminathan 	struct tx_counter ct2pt0_xmt_ipv4_ctrs;
6034d0e5007SSukumar Swaminathan 	struct tx_counter ct2pt0_xmt_ipv6_ctrs;
6044d0e5007SSukumar Swaminathan 	struct tx_counter ct2pt0_rexmt_ipv4_ctrs;
6054d0e5007SSukumar Swaminathan 	struct tx_counter ct2pt0_rexmt_ipv6_ctrs;
6064d0e5007SSukumar Swaminathan 	struct tx_counter ct2pt1_xmt_ipv4_ctrs;
6074d0e5007SSukumar Swaminathan 	struct tx_counter ct2pt1_xmt_ipv6_ctrs;
6084d0e5007SSukumar Swaminathan 	struct tx_counter ct2pt1_rexmt_ipv4_ctrs;
6094d0e5007SSukumar Swaminathan 	struct tx_counter ct2pt1_rexmt_ipv6_ctrs;
6104d0e5007SSukumar Swaminathan };
6114d0e5007SSukumar Swaminathan 
6124d0e5007SSukumar Swaminathan struct rx_err_stats {
6134d0e5007SSukumar Swaminathan 	uint32_t rx_drops_no_fragments[44];
6144d0e5007SSukumar Swaminathan 	uint32_t debug_wdma_sent_hold;
6154d0e5007SSukumar Swaminathan 	uint32_t debug_wdma_pbfree_sent_hold;
6164d0e5007SSukumar Swaminathan 	uint32_t debug_wdma_zerobyte_pbfree_sent_hold;
6174d0e5007SSukumar Swaminathan 	uint32_t debug_pmem_pbuf_dealloc;
6184d0e5007SSukumar Swaminathan };
6194d0e5007SSukumar Swaminathan 
6204d0e5007SSukumar Swaminathan struct mem_stats {
6214d0e5007SSukumar Swaminathan 	uint32_t eth_red_drops;
6224d0e5007SSukumar Swaminathan 	uint32_t lro_red_drops;
6234d0e5007SSukumar Swaminathan 	uint32_t ulp0_red_drops;
6244d0e5007SSukumar Swaminathan 	uint32_t ulp1_red_drops;
6254d0e5007SSukumar Swaminathan };
6264d0e5007SSukumar Swaminathan 
6274d0e5007SSukumar Swaminathan /* [04] OPCODE_GET_NIC_STATS */
6284d0e5007SSukumar Swaminathan struct mbx_get_nic_stats {
6294d0e5007SSukumar Swaminathan 	/* dw0 - dw3 */
6304d0e5007SSukumar Swaminathan 	struct mbx_hdr hdr;
6314d0e5007SSukumar Swaminathan 	union {
6324d0e5007SSukumar Swaminathan 		struct {
6334d0e5007SSukumar Swaminathan 			uint32_t rsvd0;
6344d0e5007SSukumar Swaminathan 		}req;
6354d0e5007SSukumar Swaminathan 
6364d0e5007SSukumar Swaminathan 		struct {
6374d0e5007SSukumar Swaminathan 			struct rx_stats rx;
6384d0e5007SSukumar Swaminathan 			struct tx_stats tx;
6394d0e5007SSukumar Swaminathan 			struct rx_err_stats err_rx;
6404d0e5007SSukumar Swaminathan 			struct mem_stats mem;
6414d0e5007SSukumar Swaminathan 		}rsp;
6424d0e5007SSukumar Swaminathan 	}params;
6434d0e5007SSukumar Swaminathan };
6444d0e5007SSukumar Swaminathan 
6455b9d3151SSukumar Swaminathan /* [01] OPCODE_CONFIG_NIC_RSS */
6465b9d3151SSukumar Swaminathan struct mbx_config_nic_rss {
6475b9d3151SSukumar Swaminathan 	struct mbx_hdr hdr;
6485b9d3151SSukumar Swaminathan 	union {
6495b9d3151SSukumar Swaminathan 		struct {
6505b9d3151SSukumar Swaminathan #ifdef _BIG_ENDIAN
6515b9d3151SSukumar Swaminathan 			uint32_t if_id;
6525b9d3151SSukumar Swaminathan 			uint16_t cpu_tbl_sz_log2;
6535b9d3151SSukumar Swaminathan 			uint16_t enable_rss;
6545b9d3151SSukumar Swaminathan 			uint32_t hash[10];
6555b9d3151SSukumar Swaminathan 			uint8_t cputable[128];
6565b9d3151SSukumar Swaminathan 			uint8_t rsvd[3];
6575b9d3151SSukumar Swaminathan 			uint8_t flush;
6585b9d3151SSukumar Swaminathan #else
6595b9d3151SSukumar Swaminathan 			uint32_t if_id;
6605b9d3151SSukumar Swaminathan 			uint16_t enable_rss;
6615b9d3151SSukumar Swaminathan 			uint16_t cpu_tbl_sz_log2;
6625b9d3151SSukumar Swaminathan 			uint32_t hash[10];
6635b9d3151SSukumar Swaminathan 			uint8_t cputable[128];
6645b9d3151SSukumar Swaminathan 			uint8_t flush;
6655b9d3151SSukumar Swaminathan 			uint8_t rsvd[3];
6665b9d3151SSukumar Swaminathan #endif
6675b9d3151SSukumar Swaminathan 		}req;
6685b9d3151SSukumar Swaminathan 		struct {
6695b9d3151SSukumar Swaminathan 			uint8_t rsvd[3];
6705b9d3151SSukumar Swaminathan 			uint8_t rss_bank;
6715b9d3151SSukumar Swaminathan 		}rsp;
6725b9d3151SSukumar Swaminathan 	}params;
6735b9d3151SSukumar Swaminathan };
6745b9d3151SSukumar Swaminathan 
6754d0e5007SSukumar Swaminathan #pragma pack()
6764d0e5007SSukumar Swaminathan 
6774d0e5007SSukumar Swaminathan #ifdef __cplusplus
6784d0e5007SSukumar Swaminathan }
6794d0e5007SSukumar Swaminathan #endif
6804d0e5007SSukumar Swaminathan 
6814d0e5007SSukumar Swaminathan #endif /* _OCE_HW_ETH_H_ */
682