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