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 command structures for Hardware
294d0e5007SSukumar Swaminathan  */
304d0e5007SSukumar Swaminathan 
314d0e5007SSukumar Swaminathan #ifndef _OCE_HW_H_
324d0e5007SSukumar Swaminathan #define	_OCE_HW_H_
334d0e5007SSukumar Swaminathan 
344d0e5007SSukumar Swaminathan #ifdef __cplusplus
354d0e5007SSukumar Swaminathan extern "C" {
364d0e5007SSukumar Swaminathan #endif
374d0e5007SSukumar Swaminathan 
384d0e5007SSukumar Swaminathan #include <sys/types.h>
394d0e5007SSukumar Swaminathan 
404d0e5007SSukumar Swaminathan #pragma pack(1)
414d0e5007SSukumar Swaminathan 
424d0e5007SSukumar Swaminathan /* PCI CSR offsets */
434d0e5007SSukumar Swaminathan #define	PCICFG_F1_CSR		0x0 /* F1 for NIC */
444d0e5007SSukumar Swaminathan #define	PCICFG_SEMAPHORE	0xbc
454d0e5007SSukumar Swaminathan #define	PCICFG_SOFT_RESET	0x5c
464d0e5007SSukumar Swaminathan #define	PCICFG_UE_STATUS_HI_MASK	0xac
474d0e5007SSukumar Swaminathan #define	PCICFG_UE_STATUS_LO_MASK	0xa8
484d0e5007SSukumar Swaminathan #define	PCICFG_ONLINE0		0xb0
494d0e5007SSukumar Swaminathan #define	PCICFG_ONLINE1		0xb4
504d0e5007SSukumar Swaminathan #define	INTR_EN				0x20000000
514d0e5007SSukumar Swaminathan #define	IMAGE_TRANSFER_SIZE	(32 * 1024) /* 32K at a time */
524d0e5007SSukumar Swaminathan 
534d0e5007SSukumar Swaminathan /* CSR register offsets */
544d0e5007SSukumar Swaminathan #define	MPU_EP_CONTROL		0
554d0e5007SSukumar Swaminathan #define	MPU_EP_SEMAPHORE	0xac
564d0e5007SSukumar Swaminathan #define	PCICFG_INTR_CTRL	0xfc
574d0e5007SSukumar Swaminathan #define	HOSTINTR_MASK		(1 << 29)
584d0e5007SSukumar Swaminathan #define	HOSTINTR_PFUNC_SHIFT	26
594d0e5007SSukumar Swaminathan #define	HOSTINTR_PFUNC_MASK	7
604d0e5007SSukumar Swaminathan 
614d0e5007SSukumar Swaminathan /* POST status reg struct */
624d0e5007SSukumar Swaminathan #define	POST_STAGE_POWER_ON_RESET	0x00
634d0e5007SSukumar Swaminathan #define	POST_STAGE_AWAITING_HOST_RDY	0x01
644d0e5007SSukumar Swaminathan #define	POST_STAGE_HOST_RDY		0x02
654d0e5007SSukumar Swaminathan #define	POST_STAGE_CHIP_RESET		0x03
664d0e5007SSukumar Swaminathan #define	POST_STAGE_ARMFW_READY		0xc000
674d0e5007SSukumar Swaminathan #define	POST_STAGE_ARMFW_UE		0xf000
684d0e5007SSukumar Swaminathan 
694d0e5007SSukumar Swaminathan /* DOORBELL registers */
704d0e5007SSukumar Swaminathan #define	PD_RXULP_DB	0x0100
714d0e5007SSukumar Swaminathan #define	PD_TXULP_DB	0x0060
724d0e5007SSukumar Swaminathan #define	DB_RQ_ID_MASK	0x3FF
734d0e5007SSukumar Swaminathan 
744d0e5007SSukumar Swaminathan #define	PD_CQ_DB	0x0120
754d0e5007SSukumar Swaminathan #define	PD_EQ_DB	PD_CQ_DB
764d0e5007SSukumar Swaminathan #define	PD_MPU_MBOX_DB	0x0160
774d0e5007SSukumar Swaminathan #define	PD_MQ_DB	0x0140
784d0e5007SSukumar Swaminathan 
794d0e5007SSukumar Swaminathan /* EQE completion types */
804d0e5007SSukumar Swaminathan #define	EQ_MINOR_CODE_COMPLETION 	0x00
814d0e5007SSukumar Swaminathan #define	EQ_MINOR_CODE_OTHER			0x01
824d0e5007SSukumar Swaminathan #define	EQ_MAJOR_CODE_COMPLETION 	0x00
834d0e5007SSukumar Swaminathan 
844d0e5007SSukumar Swaminathan /* Link Status field values */
854d0e5007SSukumar Swaminathan #define	PHY_LINK_FAULT_NONE			0x0
864d0e5007SSukumar Swaminathan #define	PHY_LINK_FAULT_LOCAL		0x01
874d0e5007SSukumar Swaminathan #define	PHY_LINK_FAULT_REMOTE		0x02
884d0e5007SSukumar Swaminathan 
894d0e5007SSukumar Swaminathan #define	PHY_LINK_SPEED_ZERO			0x0 /* No link */
904d0e5007SSukumar Swaminathan #define	PHY_LINK_SPEED_10MBPS		0x1 /* (10 Mbps) */
914d0e5007SSukumar Swaminathan #define	PHY_LINK_SPEED_100MBPS		0x2 /* (100 Mbps) */
924d0e5007SSukumar Swaminathan #define	PHY_LINK_SPEED_1GBPS		0x3 /* (1 Gbps) */
934d0e5007SSukumar Swaminathan #define	PHY_LINK_SPEED_10GBPS		0x4 /* (10 Gbps) */
944d0e5007SSukumar Swaminathan 
954d0e5007SSukumar Swaminathan #define	PHY_LINK_DUPLEX_NONE		0x0
964d0e5007SSukumar Swaminathan #define	PHY_LINK_DUPLEX_HALF		0x1
974d0e5007SSukumar Swaminathan #define	PHY_LINK_DUPLEX_FULL		0x2
984d0e5007SSukumar Swaminathan 
994d0e5007SSukumar Swaminathan #define	NTWK_PORT_A			0x0 /* (Port A) */
1004d0e5007SSukumar Swaminathan #define	NTWK_PORT_B			0x1 /* (Port B) */
1014d0e5007SSukumar Swaminathan 
1024d0e5007SSukumar Swaminathan #define	PHY_LINK_SPEED_ZERO			0x0 /* (No link.) */
1034d0e5007SSukumar Swaminathan #define	PHY_LINK_SPEED_10MBPS		0x1 /* (10 Mbps) */
1044d0e5007SSukumar Swaminathan #define	PHY_LINK_SPEED_100MBPS		0x2 /* (100 Mbps) */
1054d0e5007SSukumar Swaminathan #define	PHY_LINK_SPEED_1GBPS		0x3 /* (1 Gbps) */
1064d0e5007SSukumar Swaminathan #define	PHY_LINK_SPEED_10GBPS		0x4 /* (10 Gbps) */
1074d0e5007SSukumar Swaminathan 
1084d0e5007SSukumar Swaminathan /* Hardware Address types */
1094d0e5007SSukumar Swaminathan #define	MAC_ADDRESS_TYPE_STORAGE	0x0 /* (Storage MAC Address) */
1104d0e5007SSukumar Swaminathan #define	MAC_ADDRESS_TYPE_NETWORK	0x1 /* (Network MAC Address) */
1114d0e5007SSukumar Swaminathan #define	MAC_ADDRESS_TYPE_PD		0x2 /* (Protection Domain MAC Addr) */
1124d0e5007SSukumar Swaminathan #define	MAC_ADDRESS_TYPE_MANAGEMENT	0x3 /* (Management MAC Address) */
1134d0e5007SSukumar Swaminathan #define	MAC_ADDRESS_TYPE_FCOE		0x4 /* (FCoE MAC Address) */
1144d0e5007SSukumar Swaminathan 
1154d0e5007SSukumar Swaminathan /* CREATE_IFACE capability and cap_en flags */
1164d0e5007SSukumar Swaminathan #define	MBX_RX_IFACE_FLAGS_RSS				0x4
1174d0e5007SSukumar Swaminathan #define	MBX_RX_IFACE_FLAGS_PROMISCUOUS		0x8
1184d0e5007SSukumar Swaminathan #define	MBX_RX_IFACE_FLAGS_BROADCAST 		0x10
1194d0e5007SSukumar Swaminathan #define	MBX_RX_IFACE_FLAGS_UNTAGGED			0x20
1204d0e5007SSukumar Swaminathan #define	MBX_RX_IFACE_FLAGS_ULP				0x40
1214d0e5007SSukumar Swaminathan #define	MBX_RX_IFACE_FLAGS_VLAN_PROMISCUOUS 0x80
1224d0e5007SSukumar Swaminathan #define	MBX_RX_IFACE_FLAGS_VLAN				0x100
1234d0e5007SSukumar Swaminathan #define	MBX_RX_IFACE_FLAGS_MCAST_PROMISCUOUS	0x200
1244d0e5007SSukumar Swaminathan #define	MBX_RX_IFACE_FLAGS_PASS_L2				0x400
1254d0e5007SSukumar Swaminathan #define	MBX_RX_IFACE_FLAGS_PASS_L3L4			0x800
1264d0e5007SSukumar Swaminathan 
1274d0e5007SSukumar Swaminathan #define	MQ_RING_CONTEXT_SIZE_16		0x5 /* (16 entries) */
1284d0e5007SSukumar Swaminathan #define	MQ_RING_CONTEXT_SIZE_32		0x6 /* (32 entries) */
1294d0e5007SSukumar Swaminathan #define	MQ_RING_CONTEXT_SIZE_64		0x7 /* (64 entries) */
1304d0e5007SSukumar Swaminathan #define	MQ_RING_CONTEXT_SIZE_128	0x8 /* (128 entries) */
1314d0e5007SSukumar Swaminathan 
1324d0e5007SSukumar Swaminathan 
1334d0e5007SSukumar Swaminathan #define	MBX_DB_READY_BIT	0x1
1344d0e5007SSukumar Swaminathan #define	MBX_DB_HI_BIT		0x2
1354d0e5007SSukumar Swaminathan #define	ASYNC_EVENT_CODE_LINK_STATE	0x1
1364d0e5007SSukumar Swaminathan #define	ASYNC_EVENT_LINK_UP			0x1
1374d0e5007SSukumar Swaminathan #define	ASYNC_EVENT_LINK_DOWN		0x0
1384d0e5007SSukumar Swaminathan 
1394d0e5007SSukumar Swaminathan /* Rx filter bits */
1404d0e5007SSukumar Swaminathan #define	NTWK_RX_FILTER_IP_CKSUM 	0x1
1414d0e5007SSukumar Swaminathan #define	NTWK_RX_FILTER_TCP_CKSUM	0x2
1424d0e5007SSukumar Swaminathan #define	NTWK_RX_FILTER_UDP_CKSUM	0x4
1434d0e5007SSukumar Swaminathan #define	NTWK_RX_FILTER_STRIP_CRC	0x8
1444d0e5007SSukumar Swaminathan 
1454d0e5007SSukumar Swaminathan /* max SGE per mbx */
1464d0e5007SSukumar Swaminathan #define	MAX_MBX_SGE	19
1474d0e5007SSukumar Swaminathan 
1484d0e5007SSukumar Swaminathan /* physical address structure to be used in MBX */
1494d0e5007SSukumar Swaminathan struct phys_addr {
1504d0e5007SSukumar Swaminathan 	/* dw0 */
1514d0e5007SSukumar Swaminathan 	uint32_t lo;
1524d0e5007SSukumar Swaminathan 	/* dw1 */
1534d0e5007SSukumar Swaminathan 	uint32_t hi;
1544d0e5007SSukumar Swaminathan };
1554d0e5007SSukumar Swaminathan 
1564d0e5007SSukumar Swaminathan typedef union pcicfg_intr_ctl_u {
1574d0e5007SSukumar Swaminathan 	uint32_t dw0;
1584d0e5007SSukumar Swaminathan 	struct {
1594d0e5007SSukumar Swaminathan #ifdef _BIG_ENDIAN
1604d0e5007SSukumar Swaminathan 		uint32_t winselect:2;
1614d0e5007SSukumar Swaminathan 		uint32_t hostintr:1;
1624d0e5007SSukumar Swaminathan 		uint32_t pfnum:3;
1634d0e5007SSukumar Swaminathan 		uint32_t vf_cev_int_line_en:1;
1644d0e5007SSukumar Swaminathan 		uint32_t winaddr:23;
1654d0e5007SSukumar Swaminathan 		uint32_t membarwinen:1;
1664d0e5007SSukumar Swaminathan #else
1674d0e5007SSukumar Swaminathan 		uint32_t membarwinen:1;
1684d0e5007SSukumar Swaminathan 		uint32_t winaddr:23;
1694d0e5007SSukumar Swaminathan 		uint32_t vf_cev_int_line_en:1;
1704d0e5007SSukumar Swaminathan 		uint32_t pfnum:3;
1714d0e5007SSukumar Swaminathan 		uint32_t hostintr:1;
1724d0e5007SSukumar Swaminathan 		uint32_t winselect:2;
1734d0e5007SSukumar Swaminathan #endif
1744d0e5007SSukumar Swaminathan 	} bits;
1754d0e5007SSukumar Swaminathan }pcicfg_intr_ctl_t;
1764d0e5007SSukumar Swaminathan 
1774d0e5007SSukumar Swaminathan typedef union  pcicfg_semaphore_u {
1784d0e5007SSukumar Swaminathan 	uint32_t dw0;
1794d0e5007SSukumar Swaminathan 	struct {
1804d0e5007SSukumar Swaminathan #ifdef _BIG_ENDIAN
1814d0e5007SSukumar Swaminathan 		uint32_t rsvd:31;
1824d0e5007SSukumar Swaminathan 		uint32_t lock:1;
1834d0e5007SSukumar Swaminathan #else
1844d0e5007SSukumar Swaminathan 		uint32_t lock:1;
1854d0e5007SSukumar Swaminathan 		uint32_t rsvd:31;
1864d0e5007SSukumar Swaminathan #endif
1874d0e5007SSukumar Swaminathan 	}bits;
1884d0e5007SSukumar Swaminathan }pcicfg_semaphore_t;
1894d0e5007SSukumar Swaminathan 
1904d0e5007SSukumar Swaminathan typedef union pcicfg_soft_reset_u {
1914d0e5007SSukumar Swaminathan 	uint32_t dw0;
1924d0e5007SSukumar Swaminathan 	struct {
1934d0e5007SSukumar Swaminathan #ifdef _BIG_ENDIAN
1944d0e5007SSukumar Swaminathan 		uint32_t nec_ll_rcvdetect:8;
1954d0e5007SSukumar Swaminathan 		uint32_t dbg_all_reqs_62_49:14;
1964d0e5007SSukumar Swaminathan 		uint32_t scratchpad0:1;
1974d0e5007SSukumar Swaminathan 		uint32_t exception_oe:1;
1984d0e5007SSukumar Swaminathan 		uint32_t soft_reset:1;
1994d0e5007SSukumar Swaminathan 		uint32_t rsvd0:7;
2004d0e5007SSukumar Swaminathan #else
2014d0e5007SSukumar Swaminathan 		uint32_t rsvd0:7;
2024d0e5007SSukumar Swaminathan 		uint32_t soft_reset:1;
2034d0e5007SSukumar Swaminathan 		uint32_t exception_oe:1;
2044d0e5007SSukumar Swaminathan 		uint32_t scratchpad0:1;
2054d0e5007SSukumar Swaminathan 		uint32_t dbg_all_reqs_62_49:14;
2064d0e5007SSukumar Swaminathan 		uint32_t nec_ll_rcvdetect:8;
2074d0e5007SSukumar Swaminathan #endif
2084d0e5007SSukumar Swaminathan 	}bits;
2094d0e5007SSukumar Swaminathan }pcicfg_soft_reset_t;
2104d0e5007SSukumar Swaminathan 
2114d0e5007SSukumar Swaminathan typedef union pcicfg_online1_u {
2124d0e5007SSukumar Swaminathan 	uint32_t dw0;
2134d0e5007SSukumar Swaminathan 	struct {
2144d0e5007SSukumar Swaminathan #ifdef _BIG_ENDIAN
2154d0e5007SSukumar Swaminathan 		uint32_t host8_online:1;
2164d0e5007SSukumar Swaminathan 		uint32_t host7_online:1;
2174d0e5007SSukumar Swaminathan 		uint32_t host6_online:1;
2184d0e5007SSukumar Swaminathan 		uint32_t host5_online:1;
2194d0e5007SSukumar Swaminathan 		uint32_t host4_online:1;
2204d0e5007SSukumar Swaminathan 		uint32_t host3_online:1;
2214d0e5007SSukumar Swaminathan 		uint32_t host2_online:1;
2224d0e5007SSukumar Swaminathan 		uint32_t ipc_online:1;
2234d0e5007SSukumar Swaminathan 		uint32_t arm_online:1;
2244d0e5007SSukumar Swaminathan 		uint32_t txp_online:1;
2254d0e5007SSukumar Swaminathan 		uint32_t xaui_online:1;
2264d0e5007SSukumar Swaminathan 		uint32_t rxpp_online:1;
2274d0e5007SSukumar Swaminathan 		uint32_t txpb_online:1;
2284d0e5007SSukumar Swaminathan 		uint32_t rr_online:1;
2294d0e5007SSukumar Swaminathan 		uint32_t pmem_online:1;
2304d0e5007SSukumar Swaminathan 		uint32_t pctl1_online:1;
2314d0e5007SSukumar Swaminathan 		uint32_t pctl0_online:1;
2324d0e5007SSukumar Swaminathan 		uint32_t pcs1online_online:1;
2334d0e5007SSukumar Swaminathan 		uint32_t mpu_iram_online:1;
2344d0e5007SSukumar Swaminathan 		uint32_t pcs0online_online:1;
2354d0e5007SSukumar Swaminathan 		uint32_t mgmt_mac_online:1;
2364d0e5007SSukumar Swaminathan 		uint32_t lpcmemhost_online:1;
2374d0e5007SSukumar Swaminathan #else
2384d0e5007SSukumar Swaminathan 		uint32_t lpcmemhost_online:1;
2394d0e5007SSukumar Swaminathan 		uint32_t mgmt_mac_online:1;
2404d0e5007SSukumar Swaminathan 		uint32_t pcs0online_online:1;
2414d0e5007SSukumar Swaminathan 		uint32_t mpu_iram_online:1;
2424d0e5007SSukumar Swaminathan 		uint32_t pcs1online_online:1;
2434d0e5007SSukumar Swaminathan 		uint32_t pctl0_online:1;
2444d0e5007SSukumar Swaminathan 		uint32_t pctl1_online:1;
2454d0e5007SSukumar Swaminathan 		uint32_t pmem_online:1;
2464d0e5007SSukumar Swaminathan 		uint32_t rr_online:1;
2474d0e5007SSukumar Swaminathan 		uint32_t txpb_online:1;
2484d0e5007SSukumar Swaminathan 		uint32_t rxpp_online:1;
2494d0e5007SSukumar Swaminathan 		uint32_t xaui_online:1;
2504d0e5007SSukumar Swaminathan 		uint32_t txp_online:1;
2514d0e5007SSukumar Swaminathan 		uint32_t arm_online:1;
2524d0e5007SSukumar Swaminathan 		uint32_t ipc_online:1;
2534d0e5007SSukumar Swaminathan 		uint32_t host2_online:1;
2544d0e5007SSukumar Swaminathan 		uint32_t host3_online:1;
2554d0e5007SSukumar Swaminathan 		uint32_t host4_online:1;
2564d0e5007SSukumar Swaminathan 		uint32_t host5_online:1;
2574d0e5007SSukumar Swaminathan 		uint32_t host6_online:1;
2584d0e5007SSukumar Swaminathan 		uint32_t host7_online:1;
2594d0e5007SSukumar Swaminathan 		uint32_t host8_online:1;
2604d0e5007SSukumar Swaminathan #endif
2614d0e5007SSukumar Swaminathan 	}bits;
2624d0e5007SSukumar Swaminathan }pcicfg_online1_t;
2634d0e5007SSukumar Swaminathan 
2644d0e5007SSukumar Swaminathan typedef union mpu_ep_semaphore_u {
2654d0e5007SSukumar Swaminathan 	uint32_t dw0;
2664d0e5007SSukumar Swaminathan 	struct {
2674d0e5007SSukumar Swaminathan #ifdef _BIG_ENDIAN
2684d0e5007SSukumar Swaminathan 		uint32_t error:1;
2694d0e5007SSukumar Swaminathan 		uint32_t backup_fw:1;
2704d0e5007SSukumar Swaminathan 		uint32_t iscsi_no_ip:1;
2714d0e5007SSukumar Swaminathan 		uint32_t iscsi_ip_conflict:1;
2724d0e5007SSukumar Swaminathan 		uint32_t option_rom_installed:1;
2734d0e5007SSukumar Swaminathan 		uint32_t iscsi_drv_loaded:1;
2744d0e5007SSukumar Swaminathan 		uint32_t rsvd0:10;
2754d0e5007SSukumar Swaminathan 		uint32_t stage:16;
2764d0e5007SSukumar Swaminathan #else
2774d0e5007SSukumar Swaminathan 		uint32_t stage:16;
2784d0e5007SSukumar Swaminathan 		uint32_t rsvd0:10;
2794d0e5007SSukumar Swaminathan 		uint32_t iscsi_drv_loaded:1;
2804d0e5007SSukumar Swaminathan 		uint32_t option_rom_installed:1;
2814d0e5007SSukumar Swaminathan 		uint32_t iscsi_ip_conflict:1;
2824d0e5007SSukumar Swaminathan 		uint32_t iscsi_no_ip:1;
2834d0e5007SSukumar Swaminathan 		uint32_t backup_fw:1;
2844d0e5007SSukumar Swaminathan 		uint32_t error:1;
2854d0e5007SSukumar Swaminathan #endif
2864d0e5007SSukumar Swaminathan 	}bits;
2874d0e5007SSukumar Swaminathan }mpu_ep_semaphore_t;
2884d0e5007SSukumar Swaminathan 
2894d0e5007SSukumar Swaminathan typedef union mpu_ep_control_u {
2904d0e5007SSukumar Swaminathan 	uint32_t dw0;
2914d0e5007SSukumar Swaminathan 	struct {
2924d0e5007SSukumar Swaminathan #ifdef _BIG_ENDIAN
2934d0e5007SSukumar Swaminathan 		uint32_t cpu_reset:1;
2944d0e5007SSukumar Swaminathan 		uint32_t rsvd1:15;
2954d0e5007SSukumar Swaminathan 		uint32_t ep_ram_init_status:1;
2964d0e5007SSukumar Swaminathan 		uint32_t rsvd0:12;
2974d0e5007SSukumar Swaminathan 		uint32_t m2_rxpbuf:1;
2984d0e5007SSukumar Swaminathan 		uint32_t m1_rxpbuf:1;
2994d0e5007SSukumar Swaminathan 		uint32_t m0_rxpbuf:1;
3004d0e5007SSukumar Swaminathan #else
3014d0e5007SSukumar Swaminathan 		uint32_t m0_rxpbuf:1;
3024d0e5007SSukumar Swaminathan 		uint32_t m1_rxpbuf:1;
3034d0e5007SSukumar Swaminathan 		uint32_t m2_rxpbuf:1;
3044d0e5007SSukumar Swaminathan 		uint32_t rsvd0:12;
3054d0e5007SSukumar Swaminathan 		uint32_t ep_ram_init_status:1;
3064d0e5007SSukumar Swaminathan 		uint32_t rsvd1:15;
3074d0e5007SSukumar Swaminathan 		uint32_t cpu_reset:1;
3084d0e5007SSukumar Swaminathan #endif
3094d0e5007SSukumar Swaminathan 	}bits;
3104d0e5007SSukumar Swaminathan }mpu_ep_control_t;
3114d0e5007SSukumar Swaminathan 
3124d0e5007SSukumar Swaminathan /* RX doorbell */
3134d0e5007SSukumar Swaminathan typedef union pd_rxulp_db_u {
3144d0e5007SSukumar Swaminathan 	uint32_t dw0;
3154d0e5007SSukumar Swaminathan 	struct {
3164d0e5007SSukumar Swaminathan #ifdef _BIG_ENDIAN
3174d0e5007SSukumar Swaminathan 		uint32_t num_posted:8;
3184d0e5007SSukumar Swaminathan 		uint32_t invalidate:1;
3194d0e5007SSukumar Swaminathan 		uint32_t rsvd1:13;
3204d0e5007SSukumar Swaminathan 		uint32_t qid:10;
3214d0e5007SSukumar Swaminathan #else
3224d0e5007SSukumar Swaminathan 		uint32_t qid:10;
3234d0e5007SSukumar Swaminathan 		uint32_t rsvd1:13;
3244d0e5007SSukumar Swaminathan 		uint32_t invalidate:1;
3254d0e5007SSukumar Swaminathan 		uint32_t num_posted:8;
3264d0e5007SSukumar Swaminathan #endif
3274d0e5007SSukumar Swaminathan 	}bits;
3284d0e5007SSukumar Swaminathan }pd_rxulp_db_t;
3294d0e5007SSukumar Swaminathan 
3304d0e5007SSukumar Swaminathan /* TX doorbell */
3314d0e5007SSukumar Swaminathan typedef union pd_txulp_db_u {
3324d0e5007SSukumar Swaminathan 	uint32_t dw0;
3334d0e5007SSukumar Swaminathan 	struct {
3344d0e5007SSukumar Swaminathan #ifdef _BIG_ENDIAN
3354d0e5007SSukumar Swaminathan 		uint32_t rsvd1:2;
3364d0e5007SSukumar Swaminathan 		uint32_t num_posted:14;
3374d0e5007SSukumar Swaminathan 		uint32_t rsvd0:6;
3384d0e5007SSukumar Swaminathan 		uint32_t qid:10;
3394d0e5007SSukumar Swaminathan #else
3404d0e5007SSukumar Swaminathan 		uint32_t qid:10;
3414d0e5007SSukumar Swaminathan 		uint32_t rsvd0:6;
3424d0e5007SSukumar Swaminathan 		uint32_t num_posted:14;
3434d0e5007SSukumar Swaminathan 		uint32_t rsvd1:2;
3444d0e5007SSukumar Swaminathan #endif
3454d0e5007SSukumar Swaminathan 	}bits;
3464d0e5007SSukumar Swaminathan }pd_txulp_db_t;
3474d0e5007SSukumar Swaminathan 
3484d0e5007SSukumar Swaminathan /* CQ doorbell */
3494d0e5007SSukumar Swaminathan typedef union cq_db_u {
3504d0e5007SSukumar Swaminathan 	uint32_t dw0;
3514d0e5007SSukumar Swaminathan 	struct {
3524d0e5007SSukumar Swaminathan #ifdef _BIG_ENDIAN
3534d0e5007SSukumar Swaminathan 		uint32_t rsvd1:2;
3544d0e5007SSukumar Swaminathan 		uint32_t rearm:1;
3554d0e5007SSukumar Swaminathan 		uint32_t num_popped:13;
3564d0e5007SSukumar Swaminathan 		uint32_t rsvd0:5;
3574d0e5007SSukumar Swaminathan 		uint32_t event:1;
3584d0e5007SSukumar Swaminathan 		uint32_t qid:10;
3594d0e5007SSukumar Swaminathan #else
3604d0e5007SSukumar Swaminathan 		uint32_t qid:10;
3614d0e5007SSukumar Swaminathan 		uint32_t event:1;
3624d0e5007SSukumar Swaminathan 		uint32_t rsvd0:5;
3634d0e5007SSukumar Swaminathan 		uint32_t num_popped:13;
3644d0e5007SSukumar Swaminathan 		uint32_t rearm:1;
3654d0e5007SSukumar Swaminathan 		uint32_t rsvd1:2;
3664d0e5007SSukumar Swaminathan #endif
3674d0e5007SSukumar Swaminathan 	}bits;
3684d0e5007SSukumar Swaminathan }cq_db_t;
3694d0e5007SSukumar Swaminathan 
3704d0e5007SSukumar Swaminathan /* EQ doorbell */
3714d0e5007SSukumar Swaminathan typedef union eq_db_u {
3724d0e5007SSukumar Swaminathan 	uint32_t dw0;
3734d0e5007SSukumar Swaminathan 	struct {
3744d0e5007SSukumar Swaminathan #ifdef _BIG_ENDIAN
3754d0e5007SSukumar Swaminathan 		uint32_t rsvd1:2;
3764d0e5007SSukumar Swaminathan 		uint32_t rearm:1;
3774d0e5007SSukumar Swaminathan 		uint32_t num_popped:13;
3784d0e5007SSukumar Swaminathan 		uint32_t rsvd0:5;
3794d0e5007SSukumar Swaminathan 		uint32_t event:1;
3804d0e5007SSukumar Swaminathan 		uint32_t clrint:1;
3814d0e5007SSukumar Swaminathan 		uint32_t qid:9;
3824d0e5007SSukumar Swaminathan #else
3834d0e5007SSukumar Swaminathan 		uint32_t qid:9;
3844d0e5007SSukumar Swaminathan 		uint32_t clrint:1;
3854d0e5007SSukumar Swaminathan 		uint32_t event:1;
3864d0e5007SSukumar Swaminathan 		uint32_t rsvd0:5;
3874d0e5007SSukumar Swaminathan 		uint32_t num_popped:13;
3884d0e5007SSukumar Swaminathan 		uint32_t rearm:1;
3894d0e5007SSukumar Swaminathan 		uint32_t rsvd1:2;
3904d0e5007SSukumar Swaminathan #endif
3914d0e5007SSukumar Swaminathan 	}bits;
3924d0e5007SSukumar Swaminathan }eq_db_t;
3934d0e5007SSukumar Swaminathan 
3944d0e5007SSukumar Swaminathan /* bootstrap mbox doorbell */
3954d0e5007SSukumar Swaminathan typedef union pd_mpu_mbox_db_u {
3964d0e5007SSukumar Swaminathan 	uint32_t dw0;
3974d0e5007SSukumar Swaminathan 	struct {
3984d0e5007SSukumar Swaminathan #ifdef _BIG_ENDIAN
3994d0e5007SSukumar Swaminathan 		uint32_t address:30;
4004d0e5007SSukumar Swaminathan 		uint32_t hi:1;
4014d0e5007SSukumar Swaminathan 		uint32_t ready:1;
4024d0e5007SSukumar Swaminathan #else
4034d0e5007SSukumar Swaminathan 		uint32_t ready:1;
4044d0e5007SSukumar Swaminathan 		uint32_t hi:1;
4054d0e5007SSukumar Swaminathan 		uint32_t address:30;
4064d0e5007SSukumar Swaminathan #endif
4074d0e5007SSukumar Swaminathan 	}bits;
4084d0e5007SSukumar Swaminathan }pd_mpu_mbox_db_t;
4094d0e5007SSukumar Swaminathan 
4104d0e5007SSukumar Swaminathan 
4114d0e5007SSukumar Swaminathan /* MQ ring doorbell */
4124d0e5007SSukumar Swaminathan typedef union pd_mq_db_u {
4134d0e5007SSukumar Swaminathan 	uint32_t dw0;
4144d0e5007SSukumar Swaminathan 	struct {
4154d0e5007SSukumar Swaminathan #ifdef _BIG_ENDIAN
4164d0e5007SSukumar Swaminathan 		uint32_t rsvd1:2;
4174d0e5007SSukumar Swaminathan 		uint32_t num_posted:14;
4184d0e5007SSukumar Swaminathan 		uint32_t rsvd0:5;
4194d0e5007SSukumar Swaminathan 		uint32_t mq_id:11;
4204d0e5007SSukumar Swaminathan #else
4214d0e5007SSukumar Swaminathan 		uint32_t mq_id:11;
4224d0e5007SSukumar Swaminathan 		uint32_t rsvd0:5;
4234d0e5007SSukumar Swaminathan 		uint32_t num_posted:14;
4244d0e5007SSukumar Swaminathan 		uint32_t rsvd1:2;
4254d0e5007SSukumar Swaminathan #endif
4264d0e5007SSukumar Swaminathan 	}bits;
4274d0e5007SSukumar Swaminathan }pd_mq_db_t;
4284d0e5007SSukumar Swaminathan 
4294d0e5007SSukumar Swaminathan /*
4304d0e5007SSukumar Swaminathan  * Event Queue Entry
4314d0e5007SSukumar Swaminathan  */
4324d0e5007SSukumar Swaminathan struct oce_eqe {
4334d0e5007SSukumar Swaminathan 	union {
4344d0e5007SSukumar Swaminathan 		struct {
4354d0e5007SSukumar Swaminathan #ifdef _BIG_ENDIAN
4364d0e5007SSukumar Swaminathan 			uint32_t resource_id:16;
4374d0e5007SSukumar Swaminathan 			uint32_t minor_code:12;
4384d0e5007SSukumar Swaminathan 			uint32_t major_code:3;
4394d0e5007SSukumar Swaminathan 			uint32_t valid:1;
4404d0e5007SSukumar Swaminathan #else
4414d0e5007SSukumar Swaminathan 			uint32_t valid:1;
4424d0e5007SSukumar Swaminathan 			uint32_t major_code:3;
4434d0e5007SSukumar Swaminathan 			uint32_t minor_code:12;
4444d0e5007SSukumar Swaminathan 			uint32_t resource_id:16;
4454d0e5007SSukumar Swaminathan #endif
4464d0e5007SSukumar Swaminathan 		}s;
4474d0e5007SSukumar Swaminathan 		uint32_t dw0;
4484d0e5007SSukumar Swaminathan 	}u0;
4494d0e5007SSukumar Swaminathan };
4504d0e5007SSukumar Swaminathan 
4514d0e5007SSukumar Swaminathan /* MQ scatter gather entry. Array of these make an SGL */
4524d0e5007SSukumar Swaminathan struct oce_mq_sge {
4534d0e5007SSukumar Swaminathan 	uint32_t pa_lo;
4544d0e5007SSukumar Swaminathan 	uint32_t pa_hi;
4554d0e5007SSukumar Swaminathan 	uint32_t length;
4564d0e5007SSukumar Swaminathan };
4574d0e5007SSukumar Swaminathan 
4584d0e5007SSukumar Swaminathan /*
4594d0e5007SSukumar Swaminathan  * payload can contain an SGL or an embedded array of upto 59 dwords
4604d0e5007SSukumar Swaminathan  */
4614d0e5007SSukumar Swaminathan struct oce_mbx_payload {
4624d0e5007SSukumar Swaminathan 	union {
4634d0e5007SSukumar Swaminathan 		union {
4644d0e5007SSukumar Swaminathan 			struct oce_mq_sge sgl[MAX_MBX_SGE];
4654d0e5007SSukumar Swaminathan 			uint32_t embedded[59];
4664d0e5007SSukumar Swaminathan 		}u1;
4674d0e5007SSukumar Swaminathan 		uint32_t dw[59];
4684d0e5007SSukumar Swaminathan 	}u0;
4694d0e5007SSukumar Swaminathan };
4704d0e5007SSukumar Swaminathan 
4714d0e5007SSukumar Swaminathan /*
4724d0e5007SSukumar Swaminathan  * MQ MBX structure
4734d0e5007SSukumar Swaminathan  */
4744d0e5007SSukumar Swaminathan struct oce_mbx {
4754d0e5007SSukumar Swaminathan 	union {
4764d0e5007SSukumar Swaminathan 		struct {
4774d0e5007SSukumar Swaminathan #ifdef _BIG_ENDIAN
4784d0e5007SSukumar Swaminathan 			uint32_t special : 8;
4794d0e5007SSukumar Swaminathan 			uint32_t rsvd1 : 16;
4804d0e5007SSukumar Swaminathan 			uint32_t sge_count : 5;
4814d0e5007SSukumar Swaminathan 			uint32_t rsvd0 : 2;
4824d0e5007SSukumar Swaminathan 			uint32_t embedded : 1;
4834d0e5007SSukumar Swaminathan #else
4844d0e5007SSukumar Swaminathan 			uint32_t embedded:1;
4854d0e5007SSukumar Swaminathan 			uint32_t rsvd0:2;
4864d0e5007SSukumar Swaminathan 			uint32_t sge_count:5;
4874d0e5007SSukumar Swaminathan 			uint32_t rsvd1:16;
4884d0e5007SSukumar Swaminathan 			uint32_t special:8;
4894d0e5007SSukumar Swaminathan #endif
4904d0e5007SSukumar Swaminathan 		}s;
4914d0e5007SSukumar Swaminathan 		uint32_t dw0;
4924d0e5007SSukumar Swaminathan 	}u0;
4934d0e5007SSukumar Swaminathan 
4944d0e5007SSukumar Swaminathan 	uint32_t payload_length;
4954d0e5007SSukumar Swaminathan 	uint32_t tag[2];
4964d0e5007SSukumar Swaminathan 	uint32_t rsvd2[1];
4974d0e5007SSukumar Swaminathan 	struct oce_mbx_payload payload;
4984d0e5007SSukumar Swaminathan };
4994d0e5007SSukumar Swaminathan 
5004d0e5007SSukumar Swaminathan /* completion queue entry for MQ */
5014d0e5007SSukumar Swaminathan struct oce_mq_cqe {
5024d0e5007SSukumar Swaminathan 	union {
5034d0e5007SSukumar Swaminathan 		struct {
5044d0e5007SSukumar Swaminathan #ifdef _BIG_ENDIAN
5054d0e5007SSukumar Swaminathan 			/* dw0 */
5064d0e5007SSukumar Swaminathan 			uint32_t extended_status:16;
5074d0e5007SSukumar Swaminathan 			uint32_t completion_status:16;
5084d0e5007SSukumar Swaminathan 			/* dw1 dw2 */
5094d0e5007SSukumar Swaminathan 			uint32_t mq_tag[2];
5104d0e5007SSukumar Swaminathan 			/* dw3 */
5114d0e5007SSukumar Swaminathan 			uint32_t valid:1;
5124d0e5007SSukumar Swaminathan 			uint32_t async_event:1;
5134d0e5007SSukumar Swaminathan 			uint32_t hpi_buffer_cmpl:1;
5144d0e5007SSukumar Swaminathan 			uint32_t completed:1;
5154d0e5007SSukumar Swaminathan 			uint32_t consumed:1;
5164d0e5007SSukumar Swaminathan 			uint32_t rsvd0:27;
5174d0e5007SSukumar Swaminathan #else
5184d0e5007SSukumar Swaminathan 			/* dw0 */
5194d0e5007SSukumar Swaminathan 			uint32_t completion_status:16;
5204d0e5007SSukumar Swaminathan 			uint32_t extended_status:16;
5214d0e5007SSukumar Swaminathan 			/* dw1 dw2 */
5224d0e5007SSukumar Swaminathan 			uint32_t mq_tag[2];
5234d0e5007SSukumar Swaminathan 			/* dw3 */
5244d0e5007SSukumar Swaminathan 			uint32_t rsvd0:27;
5254d0e5007SSukumar Swaminathan 			uint32_t consumed:1;
5264d0e5007SSukumar Swaminathan 			uint32_t completed:1;
5274d0e5007SSukumar Swaminathan 			uint32_t hpi_buffer_cmpl:1;
5284d0e5007SSukumar Swaminathan 			uint32_t async_event:1;
5294d0e5007SSukumar Swaminathan 			uint32_t valid:1;
5304d0e5007SSukumar Swaminathan #endif
5314d0e5007SSukumar Swaminathan 		}s;
5324d0e5007SSukumar Swaminathan 		uint32_t dw[4];
5334d0e5007SSukumar Swaminathan 	}u0;
5344d0e5007SSukumar Swaminathan };
5354d0e5007SSukumar Swaminathan 
5364d0e5007SSukumar Swaminathan struct oce_async_cqe_link_state {
5374d0e5007SSukumar Swaminathan 	union {
5384d0e5007SSukumar Swaminathan 		struct {
5394d0e5007SSukumar Swaminathan #ifdef _BIG_ENDIAN
5404d0e5007SSukumar Swaminathan 			/* dw0 */
5414d0e5007SSukumar Swaminathan 			uint8_t speed;
5424d0e5007SSukumar Swaminathan 			uint8_t duplex;
5434d0e5007SSukumar Swaminathan 			uint8_t link_status;
5444d0e5007SSukumar Swaminathan 			uint8_t phy_port;
5454d0e5007SSukumar Swaminathan 			/* dw1 */
5464d0e5007SSukumar Swaminathan 			uint8_t rsvd0[3];
5474d0e5007SSukumar Swaminathan 			uint8_t fault;
5484d0e5007SSukumar Swaminathan 			/* dw2 */
5494d0e5007SSukumar Swaminathan 			uint32_t event_tag;
5504d0e5007SSukumar Swaminathan 			/* dw3 */
5514d0e5007SSukumar Swaminathan 			uint32_t valid:1;
5524d0e5007SSukumar Swaminathan 			uint32_t async_event:1;
5534d0e5007SSukumar Swaminathan 			uint32_t rsvd2:6;
5544d0e5007SSukumar Swaminathan 			uint32_t event_type:8;
5554d0e5007SSukumar Swaminathan 			uint32_t event_code:8;
5564d0e5007SSukumar Swaminathan 			uint32_t rsvd1:8;
5574d0e5007SSukumar Swaminathan #else
5584d0e5007SSukumar Swaminathan 			/* dw0 */
5594d0e5007SSukumar Swaminathan 			uint8_t phy_port;
5604d0e5007SSukumar Swaminathan 			uint8_t link_status;
5614d0e5007SSukumar Swaminathan 			uint8_t duplex;
5624d0e5007SSukumar Swaminathan 			uint8_t speed;
5634d0e5007SSukumar Swaminathan 			/* dw1 */
5644d0e5007SSukumar Swaminathan 			uint8_t fault;
5654d0e5007SSukumar Swaminathan 			uint8_t rsvd0[3];
5664d0e5007SSukumar Swaminathan 			/* dw2 */
5674d0e5007SSukumar Swaminathan 			uint32_t event_tag;
5684d0e5007SSukumar Swaminathan 			/* dw3 */
5694d0e5007SSukumar Swaminathan 			uint32_t rsvd1:8;
5704d0e5007SSukumar Swaminathan 			uint32_t event_code:8;
5714d0e5007SSukumar Swaminathan 			uint32_t event_type:8;
5724d0e5007SSukumar Swaminathan 			uint32_t rsvd2:6;
5734d0e5007SSukumar Swaminathan 			uint32_t async_event:1;
5744d0e5007SSukumar Swaminathan 			uint32_t valid:1;
5754d0e5007SSukumar Swaminathan #endif
5764d0e5007SSukumar Swaminathan 		}s;
5774d0e5007SSukumar Swaminathan 		uint32_t dw[4];
5784d0e5007SSukumar Swaminathan 	}u0;
5794d0e5007SSukumar Swaminathan };
5804d0e5007SSukumar Swaminathan 
5814d0e5007SSukumar Swaminathan /* MQ mailbox structure */
5824d0e5007SSukumar Swaminathan struct oce_bmbx {
5834d0e5007SSukumar Swaminathan 	struct oce_mbx mbx;
5844d0e5007SSukumar Swaminathan 	struct oce_mq_cqe cqe;
5854d0e5007SSukumar Swaminathan };
5864d0e5007SSukumar Swaminathan 
5874d0e5007SSukumar Swaminathan /* ---[ MBXs start here ]---------------------------------------------- */
5884d0e5007SSukumar Swaminathan /* MBXs sub system codes */
5894d0e5007SSukumar Swaminathan enum {
5904d0e5007SSukumar Swaminathan 	MBX_SUBSYSTEM_RSVD = 0,
5914d0e5007SSukumar Swaminathan 	MBX_SUBSYSTEM_COMMON = 1,
5924d0e5007SSukumar Swaminathan 	MBX_SUBSYSTEM_COMMON_ISCSI = 2,
5934d0e5007SSukumar Swaminathan 	MBX_SUBSYSTEM_NIC = 3,
5944d0e5007SSukumar Swaminathan 	MBX_SUBSYSTEM_TOE = 4,
5954d0e5007SSukumar Swaminathan 	MBX_SUBSYSTEM_PXE_UNDI = 5,
5964d0e5007SSukumar Swaminathan 	MBX_SUBSYSTEM_ISCSI_INI	= 6,
5974d0e5007SSukumar Swaminathan 	MBX_SUBSYSTEM_ISCSI_TGT	= 7,
5984d0e5007SSukumar Swaminathan 	MBX_SUBSYSTEM_MILI_PTL = 8,
5994d0e5007SSukumar Swaminathan 	MBX_SUBSYSTEM_MILI_TMD = 9,
6004d0e5007SSukumar Swaminathan 	MBX_SUBSYSTEM_RDMA = 10,
6014d0e5007SSukumar Swaminathan 	MBX_SUBSYSTEM_LOWLEVEL = 11,
6024d0e5007SSukumar Swaminathan 	MBX_SUBSYSTEM_LRO = 13,
6034d0e5007SSukumar Swaminathan 	IOCBMBX_SUBSYSTEM_DCBX = 15,
6044d0e5007SSukumar Swaminathan 	IOCBMBX_SUBSYSTEM_DIAG = 16,
6054d0e5007SSukumar Swaminathan 	IOCBMBX_SUBSYSTEM_VENDOR = 17
6064d0e5007SSukumar Swaminathan };
6074d0e5007SSukumar Swaminathan 
6084d0e5007SSukumar Swaminathan /* common ioctl opcodes */
6094d0e5007SSukumar Swaminathan enum {
6104d0e5007SSukumar Swaminathan 	OPCODE_QUERY_COMMON_IFACE_MAC = 1,
6114d0e5007SSukumar Swaminathan 	OPCODE_SET_COMMON_IFACE_MAC = 2,
6124d0e5007SSukumar Swaminathan 	OPCODE_SET_COMMON_IFACE_MULTICAST = 3,
6134d0e5007SSukumar Swaminathan 	OPCODE_CONFIG_COMMON_IFACE_VLAN	= 4,
6144d0e5007SSukumar Swaminathan 	OPCODE_QUERY_COMMON_LINK_STATUS = 5,
6154d0e5007SSukumar Swaminathan 	OPCODE_READ_COMMON_FLASHROM = 6,
6164d0e5007SSukumar Swaminathan 	OPCODE_WRITE_COMMON_FLASHROM = 7,
6174d0e5007SSukumar Swaminathan 	OPCODE_QUERY_COMMON_MAX_MBX_BUFFER_SIZE = 8,
6184d0e5007SSukumar Swaminathan 	OPCODE_ADD_COMMON_PAGE_TABLES = 9,
6194d0e5007SSukumar Swaminathan 	OPCODE_REMOVE_COMMON_PAGE_TABLES = 10,
6204d0e5007SSukumar Swaminathan 	OPCODE_CREATE_COMMON_CQ = 12,
6214d0e5007SSukumar Swaminathan 	OPCODE_CREATE_COMMON_EQ = 13,
6224d0e5007SSukumar Swaminathan 	OPCODE_CREATE_COMMON_MQ = 21,
6234d0e5007SSukumar Swaminathan 	OPCODE_COMMON_JELL_CONFIG = 22,
6244d0e5007SSukumar Swaminathan 	OPCODE_COMMON_ADD_TEMPLATE_HEADER_BUFFERS = 24,
6254d0e5007SSukumar Swaminathan 	OPCODE_COMMON_REMOVE_TEMPLATE_HEADER_BUFFERS = 25,
6264d0e5007SSukumar Swaminathan 	OPCODE_COMMON_POST_ZERO_BUFFER = 26,
6274d0e5007SSukumar Swaminathan 	OPCODE_COMMON_GET_QOS = 27,
6284d0e5007SSukumar Swaminathan 	OPCODE_COMMON_SET_QOS = 28,
6294d0e5007SSukumar Swaminathan 	OPCODE_COMMON_TCP_GET_STATISTICS = 29,
6304d0e5007SSukumar Swaminathan 	OPCODE_READ_COMMON_SEEPROM = 30,
6314d0e5007SSukumar Swaminathan 	OPCODE_COMMON_TCP_STATE_QUERY = 31,
6324d0e5007SSukumar Swaminathan 	OPCODE_GET_COMMON_CNTL_ATTRIBUTES = 32,
6334d0e5007SSukumar Swaminathan 	OPCODE_COMMON_NOP = 33,
6344d0e5007SSukumar Swaminathan 	OPCODE_COMMON_NTWK_RX_FILTER = 34,
6354d0e5007SSukumar Swaminathan 	OPCODE_GET_COMMON_FW_VERSION = 35,
6364d0e5007SSukumar Swaminathan 	OPCODE_SET_COMMON_FLOW_CONTROL = 36,
6374d0e5007SSukumar Swaminathan 	OPCODE_GET_COMMON_FLOW_CONTROL = 37,
6384d0e5007SSukumar Swaminathan 	OPCODE_COMMON_SET_TCP_PARAMETERS = 38,
6394d0e5007SSukumar Swaminathan 	OPCODE_SET_COMMON_FRAME_SIZE = 39,
6404d0e5007SSukumar Swaminathan 	OPCODE_COMMON_GET_FAT = 40,
6414d0e5007SSukumar Swaminathan 	OPCODE_MODIFY_COMMON_EQ_DELAY = 41,
6424d0e5007SSukumar Swaminathan 	OPCODE_COMMON_FIRMWARE_CONFIG = 42,
6434d0e5007SSukumar Swaminathan 	OPCODE_COMMON_ENABLE_DISABLE_DOMAINS = 43,
6444d0e5007SSukumar Swaminathan 	OPCODE_COMMON_GET_DOMAIN_CONFIG = 44,
6454d0e5007SSukumar Swaminathan 	OPCODE_COMMON_GET_PORT_EQUALIZATION = 47,
6464d0e5007SSukumar Swaminathan 	OPCODE_COMMON_SET_PORT_EQUALIZATION = 48,
6474d0e5007SSukumar Swaminathan 	OPCODE_COMMON_RED_CONFIG = 49,
6484d0e5007SSukumar Swaminathan 	OPCODE_CREATE_COMMON_IFACE = 50,
6494d0e5007SSukumar Swaminathan 	OPCODE_DESTROY_COMMON_IFACE = 51,
6504d0e5007SSukumar Swaminathan 	OPCODE_COMMON_CEV_MODIFY_MSI_MESSAGES = 52,
6514d0e5007SSukumar Swaminathan 	OPCODE_DESTROY_COMMON_MQ = 53,
6524d0e5007SSukumar Swaminathan 	OPCODE_DESTROY_COMMON_CQ = 54,
6534d0e5007SSukumar Swaminathan 	OPCODE_DESTROY_COMMON_EQ = 55,
6544d0e5007SSukumar Swaminathan 	OPCODE_COMMON_TCP_UPL_OAD = 56,
6554d0e5007SSukumar Swaminathan 	OPCODE_SET_COMMON_LINK_SPEED = 57,
6564d0e5007SSukumar Swaminathan 	OPCODE_QUERY_COMMON_FIRMWARE_CONFIG = 58,
6574d0e5007SSukumar Swaminathan 	OPCODE_ADD_COMMON_IFACE_MAC = 59,
6584d0e5007SSukumar Swaminathan 	OPCODE_DEL_COMMON_IFACE_MAC = 60,
6594d0e5007SSukumar Swaminathan 	OPCODE_COMMON_FUNCTION_RESET = 61,
6604d0e5007SSukumar Swaminathan 	OPCODE_COMMON_FUNCTION_LINK_CONFIG = 80
6614d0e5007SSukumar Swaminathan };
6624d0e5007SSukumar Swaminathan 
6634d0e5007SSukumar Swaminathan /* common ioctl header */
6644d0e5007SSukumar Swaminathan struct mbx_hdr {
6654d0e5007SSukumar Swaminathan 	union {
6664d0e5007SSukumar Swaminathan 		struct {
6674d0e5007SSukumar Swaminathan #ifdef _BIG_ENDIAN
6684d0e5007SSukumar Swaminathan 			uint8_t domain;
6694d0e5007SSukumar Swaminathan 			uint8_t port_number;
6704d0e5007SSukumar Swaminathan 			uint8_t subsystem;
6714d0e5007SSukumar Swaminathan 			uint8_t opcode;
6724d0e5007SSukumar Swaminathan #else
6734d0e5007SSukumar Swaminathan 			uint8_t opcode;
6744d0e5007SSukumar Swaminathan 			uint8_t subsystem;
6754d0e5007SSukumar Swaminathan 			uint8_t port_number;
6764d0e5007SSukumar Swaminathan 			uint8_t domain;
6774d0e5007SSukumar Swaminathan #endif
6784d0e5007SSukumar Swaminathan 			uint32_t timeout;
6794d0e5007SSukumar Swaminathan 			uint32_t request_length;
6804d0e5007SSukumar Swaminathan 			uint32_t rsvd0;
6814d0e5007SSukumar Swaminathan 		}req;
6824d0e5007SSukumar Swaminathan 
6834d0e5007SSukumar Swaminathan 		struct {
6844d0e5007SSukumar Swaminathan 			/* dw 0 */
6854d0e5007SSukumar Swaminathan 			uint8_t opcode;
6864d0e5007SSukumar Swaminathan 			uint8_t subsystem;
6874d0e5007SSukumar Swaminathan 			uint8_t rsvd0;
6884d0e5007SSukumar Swaminathan 			uint8_t domain;
6894d0e5007SSukumar Swaminathan 			/* dw 1 */
6904d0e5007SSukumar Swaminathan 			uint8_t status;
6914d0e5007SSukumar Swaminathan 			uint8_t additional_status;
6924d0e5007SSukumar Swaminathan 			uint16_t rsvd1;
6934d0e5007SSukumar Swaminathan 
6944d0e5007SSukumar Swaminathan 			uint32_t rsp_length;
6954d0e5007SSukumar Swaminathan 			uint32_t actual_rsp_length;
6964d0e5007SSukumar Swaminathan 		}rsp;
6974d0e5007SSukumar Swaminathan 		uint32_t dw[4];
6984d0e5007SSukumar Swaminathan 	}u0;
6994d0e5007SSukumar Swaminathan };
7004d0e5007SSukumar Swaminathan #define	OCE_BMBX_RHDR_SZ 20
7014d0e5007SSukumar Swaminathan #define	OCE_MBX_RRHDR_SZ sizeof (struct mbx_hdr)
7024d0e5007SSukumar Swaminathan #define	OCE_MBX_ADDL_STATUS(_MHDR) ((_MHDR)->u0.rsp.additional_status)
7034d0e5007SSukumar Swaminathan #define	OCE_MBX_STATUS(_MHDR) ((_MHDR)->u0.rsp.status)
7044d0e5007SSukumar Swaminathan 
7054d0e5007SSukumar Swaminathan /* [05] OPCODE_QUERY_COMMON_LINK_STATUS */
7064d0e5007SSukumar Swaminathan struct mbx_query_common_link_status {
7074d0e5007SSukumar Swaminathan 	struct mbx_hdr hdr;
7084d0e5007SSukumar Swaminathan 	union {
7094d0e5007SSukumar Swaminathan 		struct {
7104d0e5007SSukumar Swaminathan 			uint32_t rsvd0;
7114d0e5007SSukumar Swaminathan 		}req;
7124d0e5007SSukumar Swaminathan 
7134d0e5007SSukumar Swaminathan 		struct {
7144d0e5007SSukumar Swaminathan 			/* dw 0 */
7154d0e5007SSukumar Swaminathan 			uint8_t physical_port;
7164d0e5007SSukumar Swaminathan 			uint8_t mac_duplex;
7174d0e5007SSukumar Swaminathan 			uint8_t mac_speed;
7184d0e5007SSukumar Swaminathan 			uint8_t mac_fault;
7194d0e5007SSukumar Swaminathan 			/* dw 1 */
7204d0e5007SSukumar Swaminathan 			uint8_t mgmt_mac_duplex;
7214d0e5007SSukumar Swaminathan 			uint8_t mgmt_mac_speed;
722*8d738d7dSSukumar Swaminathan 			uint16_t qos_link_speed;
723*8d738d7dSSukumar Swaminathan 			uint32_t logical_link_status;
7244d0e5007SSukumar Swaminathan 		}rsp;
7254d0e5007SSukumar Swaminathan 	}params;
7264d0e5007SSukumar Swaminathan };
7274d0e5007SSukumar Swaminathan 
7284d0e5007SSukumar Swaminathan /* [57] OPCODE_SET_COMMON_LINK_SPEED */
7294d0e5007SSukumar Swaminathan struct mbx_set_common_link_speed {
7304d0e5007SSukumar Swaminathan 	struct mbx_hdr hdr;
7314d0e5007SSukumar Swaminathan 	union {
7324d0e5007SSukumar Swaminathan 		struct {
7334d0e5007SSukumar Swaminathan #ifdef _BIG_ENDIAN
7344d0e5007SSukumar Swaminathan 			uint8_t rsvd0;
7354d0e5007SSukumar Swaminathan 			uint8_t mac_speed;
7364d0e5007SSukumar Swaminathan 			uint8_t virtual_port;
7374d0e5007SSukumar Swaminathan 			uint8_t physical_port;
7384d0e5007SSukumar Swaminathan #else
7394d0e5007SSukumar Swaminathan 			uint8_t physical_port;
7404d0e5007SSukumar Swaminathan 			uint8_t virtual_port;
7414d0e5007SSukumar Swaminathan 			uint8_t mac_speed;
7424d0e5007SSukumar Swaminathan 			uint8_t rsvd0;
7434d0e5007SSukumar Swaminathan #endif
7444d0e5007SSukumar Swaminathan 		}req;
7454d0e5007SSukumar Swaminathan 
7464d0e5007SSukumar Swaminathan 		struct {
7474d0e5007SSukumar Swaminathan 			uint32_t rsvd0;
7484d0e5007SSukumar Swaminathan 		}rsp;
7494d0e5007SSukumar Swaminathan 
7504d0e5007SSukumar Swaminathan 		uint32_t dw;
7514d0e5007SSukumar Swaminathan 	}params;
7524d0e5007SSukumar Swaminathan };
7534d0e5007SSukumar Swaminathan 
7544d0e5007SSukumar Swaminathan struct mac_address_format {
7554d0e5007SSukumar Swaminathan 	uint16_t size_of_struct;
7564d0e5007SSukumar Swaminathan 	uint8_t	mac_addr[6];
7574d0e5007SSukumar Swaminathan };
7584d0e5007SSukumar Swaminathan 
7594d0e5007SSukumar Swaminathan /* [01] OPCODE_QUERY_COMMON_IFACE_MAC */
7604d0e5007SSukumar Swaminathan struct mbx_query_common_iface_mac {
7614d0e5007SSukumar Swaminathan 	struct mbx_hdr hdr;
7624d0e5007SSukumar Swaminathan 	union {
7634d0e5007SSukumar Swaminathan 		struct {
7644d0e5007SSukumar Swaminathan #ifdef _BIG_ENDIAN
7654d0e5007SSukumar Swaminathan 			uint16_t if_id;
7664d0e5007SSukumar Swaminathan 			uint8_t	permanent;
7674d0e5007SSukumar Swaminathan 			uint8_t type;
7684d0e5007SSukumar Swaminathan #else
7694d0e5007SSukumar Swaminathan 			uint8_t type;
7704d0e5007SSukumar Swaminathan 			uint8_t	permanent;
7714d0e5007SSukumar Swaminathan 			uint16_t if_id;
7724d0e5007SSukumar Swaminathan #endif
7734d0e5007SSukumar Swaminathan 
7744d0e5007SSukumar Swaminathan 		}req;
7754d0e5007SSukumar Swaminathan 
7764d0e5007SSukumar Swaminathan 		struct {
7774d0e5007SSukumar Swaminathan 			struct mac_address_format mac;
7784d0e5007SSukumar Swaminathan 		}rsp;
7794d0e5007SSukumar Swaminathan 	}params;
7804d0e5007SSukumar Swaminathan };
7814d0e5007SSukumar Swaminathan 
7824d0e5007SSukumar Swaminathan /* [02] OPCODE_SET_COMMON_IFACE_MAC */
7834d0e5007SSukumar Swaminathan struct mbx_set_common_iface_mac {
7844d0e5007SSukumar Swaminathan 	struct mbx_hdr hdr;
7854d0e5007SSukumar Swaminathan 	union {
7864d0e5007SSukumar Swaminathan 		struct {
7874d0e5007SSukumar Swaminathan #ifdef _BIG_ENDIAN
7884d0e5007SSukumar Swaminathan 			/* dw 0 */
7894d0e5007SSukumar Swaminathan 			uint16_t if_id;
7904d0e5007SSukumar Swaminathan 			uint8_t invalidate;
7914d0e5007SSukumar Swaminathan 			uint8_t type;
7924d0e5007SSukumar Swaminathan #else
7934d0e5007SSukumar Swaminathan 			/* dw 0 */
7944d0e5007SSukumar Swaminathan 			uint8_t type;
7954d0e5007SSukumar Swaminathan 			uint8_t invalidate;
7964d0e5007SSukumar Swaminathan 			uint16_t if_id;
7974d0e5007SSukumar Swaminathan #endif
7984d0e5007SSukumar Swaminathan 			/* dw 1 */
7994d0e5007SSukumar Swaminathan 			struct mac_address_format mac;
8004d0e5007SSukumar Swaminathan 		}req;
8014d0e5007SSukumar Swaminathan 
8024d0e5007SSukumar Swaminathan 		struct {
8034d0e5007SSukumar Swaminathan 			uint32_t rsvd0;
8044d0e5007SSukumar Swaminathan 		}rsp;
8054d0e5007SSukumar Swaminathan 
8064d0e5007SSukumar Swaminathan 		uint32_t dw[2];
8074d0e5007SSukumar Swaminathan 	}params;
8084d0e5007SSukumar Swaminathan };
8094d0e5007SSukumar Swaminathan 
8104d0e5007SSukumar Swaminathan /* [03] OPCODE_SET_COMMON_IFACE_MULTICAST */
8114d0e5007SSukumar Swaminathan struct mbx_set_common_iface_multicast {
8124d0e5007SSukumar Swaminathan 	struct mbx_hdr hdr;
8134d0e5007SSukumar Swaminathan 	union {
8144d0e5007SSukumar Swaminathan 		struct {
8154d0e5007SSukumar Swaminathan #ifdef _BIG_ENDIAN
8164d0e5007SSukumar Swaminathan 			/* dw 0 */
8174d0e5007SSukumar Swaminathan 			uint8_t if_id;
8184d0e5007SSukumar Swaminathan 			uint8_t promiscuous;
8194d0e5007SSukumar Swaminathan 			uint16_t num_mac;
8204d0e5007SSukumar Swaminathan #else
8214d0e5007SSukumar Swaminathan 			/* dw 0 */
8224d0e5007SSukumar Swaminathan 			uint16_t num_mac;
8234d0e5007SSukumar Swaminathan 			uint8_t promiscuous;
8244d0e5007SSukumar Swaminathan 			uint8_t if_id;
8254d0e5007SSukumar Swaminathan #endif
8264d0e5007SSukumar Swaminathan 			/* dw 1-48 */
8274d0e5007SSukumar Swaminathan 			struct {
8284d0e5007SSukumar Swaminathan 				uint8_t byte[6];
8294d0e5007SSukumar Swaminathan 			} mac[32];
8304d0e5007SSukumar Swaminathan 
8314d0e5007SSukumar Swaminathan 		}req;
8324d0e5007SSukumar Swaminathan 
8334d0e5007SSukumar Swaminathan 		struct {
8344d0e5007SSukumar Swaminathan 			uint32_t rsvd0;
8354d0e5007SSukumar Swaminathan 		}rsp;
8364d0e5007SSukumar Swaminathan 
8374d0e5007SSukumar Swaminathan 		uint32_t dw[49];
8384d0e5007SSukumar Swaminathan 	}params;
8394d0e5007SSukumar Swaminathan };
8404d0e5007SSukumar Swaminathan 
8414d0e5007SSukumar Swaminathan struct qinq_vlan {
8424d0e5007SSukumar Swaminathan #ifdef _BIG_ENDIAN
8434d0e5007SSukumar Swaminathan 	uint16_t inner;
8444d0e5007SSukumar Swaminathan 	uint16_t outer;
8454d0e5007SSukumar Swaminathan #else
8464d0e5007SSukumar Swaminathan 	uint16_t outer;
8474d0e5007SSukumar Swaminathan 	uint16_t inner;
8484d0e5007SSukumar Swaminathan #endif
8494d0e5007SSukumar Swaminathan };
8504d0e5007SSukumar Swaminathan 
8514d0e5007SSukumar Swaminathan struct normal_vlan {
8524d0e5007SSukumar Swaminathan 	uint16_t vtag;
8534d0e5007SSukumar Swaminathan };
8544d0e5007SSukumar Swaminathan 
8554d0e5007SSukumar Swaminathan struct ntwk_if_vlan_tag {
8564d0e5007SSukumar Swaminathan 	union {
8574d0e5007SSukumar Swaminathan 		struct normal_vlan normal;
8584d0e5007SSukumar Swaminathan 		struct qinq_vlan qinq;
8594d0e5007SSukumar Swaminathan 	}u0;
8604d0e5007SSukumar Swaminathan };
8614d0e5007SSukumar Swaminathan 
8624d0e5007SSukumar Swaminathan /* [50] OPCODE_CREATE_COMMON_IFACE */
8634d0e5007SSukumar Swaminathan struct mbx_create_common_iface {
8644d0e5007SSukumar Swaminathan 	struct mbx_hdr hdr;
8654d0e5007SSukumar Swaminathan 	union {
8664d0e5007SSukumar Swaminathan 		struct {
8674d0e5007SSukumar Swaminathan 			uint32_t version;
8684d0e5007SSukumar Swaminathan 			uint32_t cap_flags;
8694d0e5007SSukumar Swaminathan 			uint32_t enable_flags;
8704d0e5007SSukumar Swaminathan 			uint8_t mac_addr[6];
8714d0e5007SSukumar Swaminathan 			uint8_t rsvd0;
8724d0e5007SSukumar Swaminathan 			uint8_t mac_invalid;
8734d0e5007SSukumar Swaminathan 			struct ntwk_if_vlan_tag vlan_tag;
8744d0e5007SSukumar Swaminathan 		}req;
8754d0e5007SSukumar Swaminathan 
8764d0e5007SSukumar Swaminathan 		struct {
8774d0e5007SSukumar Swaminathan 			uint32_t if_id;
8784d0e5007SSukumar Swaminathan 			uint32_t pmac_id;
8794d0e5007SSukumar Swaminathan 		}rsp;
8804d0e5007SSukumar Swaminathan 		uint32_t dw[4];
8814d0e5007SSukumar Swaminathan 	}params;
8824d0e5007SSukumar Swaminathan };
8834d0e5007SSukumar Swaminathan 
8844d0e5007SSukumar Swaminathan /* [51] OPCODE_DESTROY_COMMON_IFACE */
8854d0e5007SSukumar Swaminathan struct mbx_destroy_common_iface {
8864d0e5007SSukumar Swaminathan 	struct mbx_hdr hdr;
8874d0e5007SSukumar Swaminathan 	union {
8884d0e5007SSukumar Swaminathan 		struct {
8894d0e5007SSukumar Swaminathan 			uint32_t if_id;
8904d0e5007SSukumar Swaminathan 		}req;
8914d0e5007SSukumar Swaminathan 
8924d0e5007SSukumar Swaminathan 		struct {
8934d0e5007SSukumar Swaminathan 			uint32_t rsvd0;
8944d0e5007SSukumar Swaminathan 		}rsp;
8954d0e5007SSukumar Swaminathan 
8964d0e5007SSukumar Swaminathan 		uint32_t dw;
8974d0e5007SSukumar Swaminathan 	}params;
8984d0e5007SSukumar Swaminathan };
8994d0e5007SSukumar Swaminathan 
9004d0e5007SSukumar Swaminathan /* event queue context structure */
9014d0e5007SSukumar Swaminathan struct   oce_eq_ctx {
9024d0e5007SSukumar Swaminathan #ifdef _BIG_ENDIAN
9034d0e5007SSukumar Swaminathan 	/* dw0 */
9044d0e5007SSukumar Swaminathan 	uint32_t size:1;
9054d0e5007SSukumar Swaminathan 	uint32_t rsvd1:1;
9064d0e5007SSukumar Swaminathan 	uint32_t valid:1;
9074d0e5007SSukumar Swaminathan 	uint32_t epidx:13;
9084d0e5007SSukumar Swaminathan 	uint32_t rsvd0:3;
9094d0e5007SSukumar Swaminathan 	uint32_t cidx:13;
9104d0e5007SSukumar Swaminathan 
9114d0e5007SSukumar Swaminathan 	/* dw1 */
9124d0e5007SSukumar Swaminathan 	uint32_t armed:1;
9134d0e5007SSukumar Swaminathan 	uint32_t stalled:1;
9144d0e5007SSukumar Swaminathan 	uint32_t sol_event:1;
9154d0e5007SSukumar Swaminathan 	uint32_t count:3;
9164d0e5007SSukumar Swaminathan 	uint32_t pd:10;
9174d0e5007SSukumar Swaminathan 	uint32_t rsvd2:3;
9184d0e5007SSukumar Swaminathan 	uint32_t pidx:13;
9194d0e5007SSukumar Swaminathan 
9204d0e5007SSukumar Swaminathan 	/* dw2 */
9214d0e5007SSukumar Swaminathan 	uint32_t rsvd6:4;
9224d0e5007SSukumar Swaminathan 	uint32_t nodelay:1;
9234d0e5007SSukumar Swaminathan 	uint32_t phase:2;
9244d0e5007SSukumar Swaminathan 	uint32_t rsvd5:2;
9254d0e5007SSukumar Swaminathan 	uint32_t delay_mult:10;
9264d0e5007SSukumar Swaminathan 	uint32_t rsvd4:1;
9274d0e5007SSukumar Swaminathan 	uint32_t function:8;
9284d0e5007SSukumar Swaminathan 	uint32_t rsvd3:4;
9294d0e5007SSukumar Swaminathan 
9304d0e5007SSukumar Swaminathan 	/* dw 3 */
9314d0e5007SSukumar Swaminathan 	uint32_t rsvd7;
9324d0e5007SSukumar Swaminathan #else
9334d0e5007SSukumar Swaminathan 	/* dw0 */
9344d0e5007SSukumar Swaminathan 	uint32_t cidx:13;
9354d0e5007SSukumar Swaminathan 	uint32_t rsvd0:3;
9364d0e5007SSukumar Swaminathan 	uint32_t epidx:13;
9374d0e5007SSukumar Swaminathan 	uint32_t valid:1;
9384d0e5007SSukumar Swaminathan 	uint32_t rsvd1:1;
9394d0e5007SSukumar Swaminathan 	uint32_t size:1;
9404d0e5007SSukumar Swaminathan 
9414d0e5007SSukumar Swaminathan 	/* dw1 */
9424d0e5007SSukumar Swaminathan 	uint32_t pidx:13;
9434d0e5007SSukumar Swaminathan 	uint32_t rsvd2:3;
9444d0e5007SSukumar Swaminathan 	uint32_t pd:10;
9454d0e5007SSukumar Swaminathan 	uint32_t count:3;
9464d0e5007SSukumar Swaminathan 	uint32_t sol_event:1;
9474d0e5007SSukumar Swaminathan 	uint32_t stalled:1;
9484d0e5007SSukumar Swaminathan 	uint32_t armed:1;
9494d0e5007SSukumar Swaminathan 
9504d0e5007SSukumar Swaminathan 	/* dw2 */
9514d0e5007SSukumar Swaminathan 	uint32_t rsvd3:4;
9524d0e5007SSukumar Swaminathan 	uint32_t function:8;
9534d0e5007SSukumar Swaminathan 	uint32_t rsvd4:1;
9544d0e5007SSukumar Swaminathan 	uint32_t delay_mult:10;
9554d0e5007SSukumar Swaminathan 	uint32_t rsvd5:2;
9564d0e5007SSukumar Swaminathan 	uint32_t phase:2;
9574d0e5007SSukumar Swaminathan 	uint32_t nodelay:1;
9584d0e5007SSukumar Swaminathan 	uint32_t rsvd6:4;
9594d0e5007SSukumar Swaminathan 
9604d0e5007SSukumar Swaminathan 	/* dw3 */
9614d0e5007SSukumar Swaminathan 	uint32_t rsvd7;
9624d0e5007SSukumar Swaminathan #endif
9634d0e5007SSukumar Swaminathan };
9644d0e5007SSukumar Swaminathan 
9654d0e5007SSukumar Swaminathan /* [13] OPCODE_CREATE_COMMON_EQ */
9664d0e5007SSukumar Swaminathan 	struct mbx_create_common_eq {
9674d0e5007SSukumar Swaminathan 	struct mbx_hdr hdr;
9684d0e5007SSukumar Swaminathan 	union {
9694d0e5007SSukumar Swaminathan 		struct {
9704d0e5007SSukumar Swaminathan #ifdef _BIG_ENDIAN
9714d0e5007SSukumar Swaminathan 			uint16_t rsvd0;
9724d0e5007SSukumar Swaminathan 			uint16_t num_pages;
9734d0e5007SSukumar Swaminathan #else
9744d0e5007SSukumar Swaminathan 			uint16_t num_pages;
9754d0e5007SSukumar Swaminathan 			uint16_t rsvd0;
9764d0e5007SSukumar Swaminathan #endif
9774d0e5007SSukumar Swaminathan 			struct oce_eq_ctx eq_ctx;
9784d0e5007SSukumar Swaminathan 			struct phys_addr pages[8];
9794d0e5007SSukumar Swaminathan 		}req;
9804d0e5007SSukumar Swaminathan 
9814d0e5007SSukumar Swaminathan 		struct {
9824d0e5007SSukumar Swaminathan 			uint16_t eq_id;
9834d0e5007SSukumar Swaminathan 			uint16_t rsvd0;
9844d0e5007SSukumar Swaminathan 		}rsp;
9854d0e5007SSukumar Swaminathan 	}params;
9864d0e5007SSukumar Swaminathan };
9874d0e5007SSukumar Swaminathan 
9884d0e5007SSukumar Swaminathan /* [55] OPCODE_DESTROY_COMMON_EQ */
9894d0e5007SSukumar Swaminathan struct mbx_destroy_common_eq {
9904d0e5007SSukumar Swaminathan 	struct mbx_hdr hdr;
9914d0e5007SSukumar Swaminathan 	union {
9924d0e5007SSukumar Swaminathan 		struct {
9934d0e5007SSukumar Swaminathan #ifdef _BIG_ENDIAN
9944d0e5007SSukumar Swaminathan 			uint16_t rsvd0;
9954d0e5007SSukumar Swaminathan 			uint16_t id;
9964d0e5007SSukumar Swaminathan #else
9974d0e5007SSukumar Swaminathan 			uint16_t id;
9984d0e5007SSukumar Swaminathan 			uint16_t rsvd0;
9994d0e5007SSukumar Swaminathan #endif
10004d0e5007SSukumar Swaminathan 		}req;
10014d0e5007SSukumar Swaminathan 
10024d0e5007SSukumar Swaminathan 		struct {
10034d0e5007SSukumar Swaminathan 			uint32_t rsvd0;
10044d0e5007SSukumar Swaminathan 		}rsp;
10054d0e5007SSukumar Swaminathan 	}params;
10064d0e5007SSukumar Swaminathan };
10074d0e5007SSukumar Swaminathan 
10084d0e5007SSukumar Swaminathan struct oce_cq_ctx {
10094d0e5007SSukumar Swaminathan #ifdef _BIG_ENDIAN
10104d0e5007SSukumar Swaminathan 	/* dw0 */
10114d0e5007SSukumar Swaminathan 	uint32_t eventable:1;
10124d0e5007SSukumar Swaminathan 	uint32_t sol_event:1;
10134d0e5007SSukumar Swaminathan 	uint32_t valid:1;
10144d0e5007SSukumar Swaminathan 	uint32_t count:2;
10154d0e5007SSukumar Swaminathan 	uint32_t rsvd1:1;
10164d0e5007SSukumar Swaminathan 	uint32_t epidx:11;
10174d0e5007SSukumar Swaminathan 	uint32_t nodelay:1;
10184d0e5007SSukumar Swaminathan 	uint32_t coalesce_wm:2;
10194d0e5007SSukumar Swaminathan 	uint32_t rsvd0:1;
10204d0e5007SSukumar Swaminathan 	uint32_t cidx:11;
10214d0e5007SSukumar Swaminathan 
10224d0e5007SSukumar Swaminathan 	/* dw1 */
10234d0e5007SSukumar Swaminathan 	uint32_t armed:1;
10244d0e5007SSukumar Swaminathan 	uint32_t stalled:1;
10254d0e5007SSukumar Swaminathan 	uint32_t eq_id:8;
10264d0e5007SSukumar Swaminathan 	uint32_t pd:10;
10274d0e5007SSukumar Swaminathan 	uint32_t rsvd2:1;
10284d0e5007SSukumar Swaminathan 	uint32_t pidx:11;
10294d0e5007SSukumar Swaminathan 
10304d0e5007SSukumar Swaminathan 	/* dw2 */
10314d0e5007SSukumar Swaminathan 	uint32_t rsvd4:20;
10324d0e5007SSukumar Swaminathan 	uint32_t function:8;
10334d0e5007SSukumar Swaminathan 	uint32_t rsvd3:4;
10344d0e5007SSukumar Swaminathan #else
10354d0e5007SSukumar Swaminathan 	/* dw0 */
10364d0e5007SSukumar Swaminathan 	uint32_t cidx:11;
10374d0e5007SSukumar Swaminathan 	uint32_t rsvd0:1;
10384d0e5007SSukumar Swaminathan 	uint32_t coalesce_wm:2;
10394d0e5007SSukumar Swaminathan 	uint32_t nodelay:1;
10404d0e5007SSukumar Swaminathan 	uint32_t epidx:11;
10414d0e5007SSukumar Swaminathan 	uint32_t rsvd1:1;
10424d0e5007SSukumar Swaminathan 	uint32_t count:2;
10434d0e5007SSukumar Swaminathan 	uint32_t valid:1;
10444d0e5007SSukumar Swaminathan 	uint32_t sol_event:1;
10454d0e5007SSukumar Swaminathan 	uint32_t eventable:1;
10464d0e5007SSukumar Swaminathan 
10474d0e5007SSukumar Swaminathan 	/* dw1 */
10484d0e5007SSukumar Swaminathan 	uint32_t pidx:11;
10494d0e5007SSukumar Swaminathan 	uint32_t rsvd2:1;
10504d0e5007SSukumar Swaminathan 	uint32_t pd:10;
10514d0e5007SSukumar Swaminathan 	uint32_t eq_id:8;
10524d0e5007SSukumar Swaminathan 	uint32_t stalled:1;
10534d0e5007SSukumar Swaminathan 	uint32_t armed:1;
10544d0e5007SSukumar Swaminathan 
10554d0e5007SSukumar Swaminathan 	/* dw2 */
10564d0e5007SSukumar Swaminathan 	uint32_t rsvd3:4;
10574d0e5007SSukumar Swaminathan 	uint32_t function:8;
10584d0e5007SSukumar Swaminathan 	uint32_t rsvd4:20;
10594d0e5007SSukumar Swaminathan #endif
10604d0e5007SSukumar Swaminathan 	uint32_t rsvd5;
10614d0e5007SSukumar Swaminathan };
10624d0e5007SSukumar Swaminathan 
10634d0e5007SSukumar Swaminathan /* [12] OPCODE_CREATE_COMMON_CQ */
10644d0e5007SSukumar Swaminathan struct mbx_create_common_cq {
10654d0e5007SSukumar Swaminathan 	struct mbx_hdr hdr;
10664d0e5007SSukumar Swaminathan 	union {
10674d0e5007SSukumar Swaminathan 		struct {
10684d0e5007SSukumar Swaminathan #ifdef _BIG_ENDIAN
10694d0e5007SSukumar Swaminathan 			uint16_t rsvd0;
10704d0e5007SSukumar Swaminathan 			uint16_t num_pages;
10714d0e5007SSukumar Swaminathan #else
10724d0e5007SSukumar Swaminathan 			uint16_t num_pages;
10734d0e5007SSukumar Swaminathan 			uint16_t rsvd0;
10744d0e5007SSukumar Swaminathan #endif
10754d0e5007SSukumar Swaminathan 			struct oce_cq_ctx cq_ctx;
1076*8d738d7dSSukumar Swaminathan 			struct phys_addr pages[4];
10774d0e5007SSukumar Swaminathan 		}req;
10784d0e5007SSukumar Swaminathan 
10794d0e5007SSukumar Swaminathan 		struct {
10804d0e5007SSukumar Swaminathan 			uint16_t cq_id;
10814d0e5007SSukumar Swaminathan 			uint16_t rsvd0;
10824d0e5007SSukumar Swaminathan 		}rsp;
10834d0e5007SSukumar Swaminathan 	}params;
10844d0e5007SSukumar Swaminathan };
10854d0e5007SSukumar Swaminathan 
10864d0e5007SSukumar Swaminathan /* [54] OPCODE_DESTROY_COMMON_CQ */
10874d0e5007SSukumar Swaminathan struct mbx_destroy_common_cq {
10884d0e5007SSukumar Swaminathan 	struct mbx_hdr hdr;
10894d0e5007SSukumar Swaminathan 	union {
10904d0e5007SSukumar Swaminathan 		struct {
10914d0e5007SSukumar Swaminathan #ifdef _BIG_ENDIAN
10924d0e5007SSukumar Swaminathan 			uint16_t rsvd0;
10934d0e5007SSukumar Swaminathan 			uint16_t id;
10944d0e5007SSukumar Swaminathan #else
10954d0e5007SSukumar Swaminathan 			uint16_t id;
10964d0e5007SSukumar Swaminathan 			uint16_t rsvd0;
10974d0e5007SSukumar Swaminathan #endif
10984d0e5007SSukumar Swaminathan 		}req;
10994d0e5007SSukumar Swaminathan 
11004d0e5007SSukumar Swaminathan 		struct {
11014d0e5007SSukumar Swaminathan 			uint32_t rsvd0;
11024d0e5007SSukumar Swaminathan 		}rsp;
11034d0e5007SSukumar Swaminathan 	}params;
11044d0e5007SSukumar Swaminathan };
11054d0e5007SSukumar Swaminathan 
11064d0e5007SSukumar Swaminathan struct mq_ring_ctx {
11074d0e5007SSukumar Swaminathan 	union {
11084d0e5007SSukumar Swaminathan 		struct {
11094d0e5007SSukumar Swaminathan #ifdef _BIG_ENDIAN
11104d0e5007SSukumar Swaminathan 			/* dw 0 */
11114d0e5007SSukumar Swaminathan 			uint32_t cq_id:10;
11124d0e5007SSukumar Swaminathan 			uint32_t fetch_r2t:1;
11134d0e5007SSukumar Swaminathan 			uint32_t fetch_wrb:1;
11144d0e5007SSukumar Swaminathan 			uint32_t ring_size:4;
11154d0e5007SSukumar Swaminathan 			uint32_t rsvd0:2;
11164d0e5007SSukumar Swaminathan 			uint32_t con_index:14;
11174d0e5007SSukumar Swaminathan 
11184d0e5007SSukumar Swaminathan 			/* dw1 */
11194d0e5007SSukumar Swaminathan 			uint32_t valid:1;
11204d0e5007SSukumar Swaminathan 			uint32_t pdid:9;
11214d0e5007SSukumar Swaminathan 			uint32_t fid:8;
11224d0e5007SSukumar Swaminathan 			uint32_t prod_index:14;
11234d0e5007SSukumar Swaminathan 
11244d0e5007SSukumar Swaminathan 			/* dw 2 */
11254d0e5007SSukumar Swaminathan 			uint32_t rsvd1:21;
11264d0e5007SSukumar Swaminathan 			uint32_t async_cq_id:10;
11274d0e5007SSukumar Swaminathan 			uint32_t async_cq_valid:1;
11284d0e5007SSukumar Swaminathan #else
11294d0e5007SSukumar Swaminathan 			/* dw 0 */
11304d0e5007SSukumar Swaminathan 			uint32_t con_index:14;
11314d0e5007SSukumar Swaminathan 			uint32_t rsvd0:2;
11324d0e5007SSukumar Swaminathan 			uint32_t ring_size:4;
11334d0e5007SSukumar Swaminathan 			uint32_t fetch_wrb:1;
11344d0e5007SSukumar Swaminathan 			uint32_t fetch_r2t:1;
11354d0e5007SSukumar Swaminathan 			uint32_t cq_id:10;
11364d0e5007SSukumar Swaminathan 
11374d0e5007SSukumar Swaminathan 			/* dw1 */
11384d0e5007SSukumar Swaminathan 			uint32_t prod_index:14;
11394d0e5007SSukumar Swaminathan 			uint32_t fid:8;
11404d0e5007SSukumar Swaminathan 			uint32_t pdid:9;
11414d0e5007SSukumar Swaminathan 			uint32_t valid:1;
11424d0e5007SSukumar Swaminathan 
11434d0e5007SSukumar Swaminathan 			/* dw 2 */
11444d0e5007SSukumar Swaminathan 			uint32_t async_cq_valid:1;
11454d0e5007SSukumar Swaminathan 			uint32_t async_cq_id:10;
11464d0e5007SSukumar Swaminathan 			uint32_t rsvd1:21;
11474d0e5007SSukumar Swaminathan #endif
11484d0e5007SSukumar Swaminathan 			/* dw3 */
11494d0e5007SSukumar Swaminathan 			uint32_t rsvd3;
11504d0e5007SSukumar Swaminathan 		}s;
11514d0e5007SSukumar Swaminathan 		uint32_t dw[4];
11524d0e5007SSukumar Swaminathan 	}u0;
11534d0e5007SSukumar Swaminathan };
11544d0e5007SSukumar Swaminathan 
11554d0e5007SSukumar Swaminathan /* [21] OPCODE_CREATE_COMMON_MQ */
11564d0e5007SSukumar Swaminathan struct mbx_create_common_mq {
11574d0e5007SSukumar Swaminathan 	struct mbx_hdr hdr;
11584d0e5007SSukumar Swaminathan 	union {
11594d0e5007SSukumar Swaminathan 		struct {
11604d0e5007SSukumar Swaminathan #ifdef _BIG_ENDIAN
11614d0e5007SSukumar Swaminathan 			uint16_t rsvd0;
11624d0e5007SSukumar Swaminathan 			uint16_t num_pages;
11634d0e5007SSukumar Swaminathan #else
11644d0e5007SSukumar Swaminathan 			uint16_t num_pages;
11654d0e5007SSukumar Swaminathan 			uint16_t rsvd0;
11664d0e5007SSukumar Swaminathan #endif
11674d0e5007SSukumar Swaminathan 			struct mq_ring_ctx context;
11684d0e5007SSukumar Swaminathan 			struct phys_addr pages[8];
11694d0e5007SSukumar Swaminathan 		}req;
11704d0e5007SSukumar Swaminathan 
11714d0e5007SSukumar Swaminathan 		struct {
11724d0e5007SSukumar Swaminathan 			uint32_t mq_id:16;
11734d0e5007SSukumar Swaminathan 			uint32_t rsvd0:16;
11744d0e5007SSukumar Swaminathan 		}rsp;
11754d0e5007SSukumar Swaminathan 	}params;
11764d0e5007SSukumar Swaminathan };
11774d0e5007SSukumar Swaminathan 
11784d0e5007SSukumar Swaminathan /* [53] OPCODE_DESTROY_COMMON_MQ */
11794d0e5007SSukumar Swaminathan struct mbx_destroy_common_mq {
11804d0e5007SSukumar Swaminathan 	struct mbx_hdr hdr;
11814d0e5007SSukumar Swaminathan 	union {
11824d0e5007SSukumar Swaminathan 		struct {
11834d0e5007SSukumar Swaminathan #ifdef _BIG_ENDIAN
11844d0e5007SSukumar Swaminathan 			uint16_t rsvd0;
11854d0e5007SSukumar Swaminathan 			uint16_t id;
11864d0e5007SSukumar Swaminathan #else
11874d0e5007SSukumar Swaminathan 			uint16_t id;
11884d0e5007SSukumar Swaminathan 			uint16_t rsvd0;
11894d0e5007SSukumar Swaminathan #endif
11904d0e5007SSukumar Swaminathan 		}req;
11914d0e5007SSukumar Swaminathan 
11924d0e5007SSukumar Swaminathan 		struct {
11934d0e5007SSukumar Swaminathan 			uint32_t rsvd0;
11944d0e5007SSukumar Swaminathan 		}rsp;
11954d0e5007SSukumar Swaminathan 	}params;
11964d0e5007SSukumar Swaminathan };
11974d0e5007SSukumar Swaminathan 
11984d0e5007SSukumar Swaminathan /* [35] OPCODE_GET_COMMON_ FW_VERSION */
11994d0e5007SSukumar Swaminathan struct mbx_get_common_fw_version {
12004d0e5007SSukumar Swaminathan 	struct mbx_hdr hdr;
12014d0e5007SSukumar Swaminathan 	union {
12024d0e5007SSukumar Swaminathan 		struct {
12034d0e5007SSukumar Swaminathan 			uint32_t rsvd0;
12044d0e5007SSukumar Swaminathan 		}req;
12054d0e5007SSukumar Swaminathan 
12064d0e5007SSukumar Swaminathan 		struct {
12074d0e5007SSukumar Swaminathan 			uint8_t fw_ver_str[32];
12084d0e5007SSukumar Swaminathan 			uint8_t fw_on_flash_ver_str[32];
12094d0e5007SSukumar Swaminathan 		}rsp;
12104d0e5007SSukumar Swaminathan 	}params;
12114d0e5007SSukumar Swaminathan };
12124d0e5007SSukumar Swaminathan 
12134d0e5007SSukumar Swaminathan /* [52] OPCODE_COMMON_CEV_MODIFY_MSI_MESSAGES */
12144d0e5007SSukumar Swaminathan struct mbx_common_cev_modify_msi_messages {
12154d0e5007SSukumar Swaminathan 	struct mbx_hdr hdr;
12164d0e5007SSukumar Swaminathan 	union {
12174d0e5007SSukumar Swaminathan 		struct {
12184d0e5007SSukumar Swaminathan 			uint32_t num_msi_msgs;
12194d0e5007SSukumar Swaminathan 		}req;
12204d0e5007SSukumar Swaminathan 
12214d0e5007SSukumar Swaminathan 		struct {
12224d0e5007SSukumar Swaminathan 			uint32_t rsvd0;
12234d0e5007SSukumar Swaminathan 		}rsp;
12244d0e5007SSukumar Swaminathan 	}params;
12254d0e5007SSukumar Swaminathan };
12264d0e5007SSukumar Swaminathan 
12274d0e5007SSukumar Swaminathan /* [36] OPCODE_SET_COMMON_FLOW_CONTROL */
12284d0e5007SSukumar Swaminathan /* [37] OPCODE_GET_COMMON_FLOW_CONTROL */
12294d0e5007SSukumar Swaminathan struct mbx_common_get_set_flow_control {
12304d0e5007SSukumar Swaminathan 	struct mbx_hdr hdr;
12314d0e5007SSukumar Swaminathan #ifdef _BIG_ENDIAN
12324d0e5007SSukumar Swaminathan 	uint16_t tx_flow_control;
12334d0e5007SSukumar Swaminathan 	uint16_t rx_flow_control;
12344d0e5007SSukumar Swaminathan #else
12354d0e5007SSukumar Swaminathan 	uint16_t rx_flow_control;
12364d0e5007SSukumar Swaminathan 	uint16_t tx_flow_control;
12374d0e5007SSukumar Swaminathan #endif
12384d0e5007SSukumar Swaminathan };
12394d0e5007SSukumar Swaminathan 
12404d0e5007SSukumar Swaminathan enum e_flash_opcode {
12414d0e5007SSukumar Swaminathan 	MGMT_FLASHROM_OPCODE_FLASH = 1,
12424d0e5007SSukumar Swaminathan 	MGMT_FLASHROM_OPCODE_SAVE = 2
12434d0e5007SSukumar Swaminathan };
12444d0e5007SSukumar Swaminathan 
12454d0e5007SSukumar Swaminathan /* [06]	OPCODE_READ_COMMON_FLASHROM */
12464d0e5007SSukumar Swaminathan /* [07]	OPCODE_WRITE_COMMON_FLASHROM */
12474d0e5007SSukumar Swaminathan 
12484d0e5007SSukumar Swaminathan struct mbx_common_read_write_flashrom {
12494d0e5007SSukumar Swaminathan 	struct mbx_hdr hdr;
12504d0e5007SSukumar Swaminathan 	uint32_t    flash_op_code;
12514d0e5007SSukumar Swaminathan 	uint32_t    flash_op_type;
12524d0e5007SSukumar Swaminathan 	uint32_t    data_buffer_size;
12534d0e5007SSukumar Swaminathan 	uint32_t    data_offset;
12544d0e5007SSukumar Swaminathan 	uint8_t		data_buffer[4];  /* + IMAGE_TRANSFER_SIZE */
12554d0e5007SSukumar Swaminathan };
12564d0e5007SSukumar Swaminathan 
12574d0e5007SSukumar Swaminathan struct mbx_common_query_fw_config {
12584d0e5007SSukumar Swaminathan 	struct mbx_hdr hdr;
12594d0e5007SSukumar Swaminathan 	union {
12604d0e5007SSukumar Swaminathan 		struct {
12614d0e5007SSukumar Swaminathan 			uint32_t rsvd0[30];
12624d0e5007SSukumar Swaminathan 		}req;
12634d0e5007SSukumar Swaminathan 
12644d0e5007SSukumar Swaminathan 		struct {
12654d0e5007SSukumar Swaminathan 			uint32_t    config_number;
12664d0e5007SSukumar Swaminathan 			uint32_t    asic_revision;
12674d0e5007SSukumar Swaminathan 			uint32_t    port_id; /* used for stats retrieval */
12684d0e5007SSukumar Swaminathan 			uint32_t    function_mode;
12694d0e5007SSukumar Swaminathan 			uint32_t    ulp0_mode;
12704d0e5007SSukumar Swaminathan 			uint32_t    ulp0_nic_wqid_base;
12714d0e5007SSukumar Swaminathan 			uint32_t    ulp0_nic_wq_tot;
12724d0e5007SSukumar Swaminathan 			uint32_t    ulp0_toe_wqid_base;
12734d0e5007SSukumar Swaminathan 			uint32_t    ulp0_toe_wq_tot;
12744d0e5007SSukumar Swaminathan 			uint32_t    ulp0_toe_rqid_base;
12754d0e5007SSukumar Swaminathan 			uint32_t    ulp0_toe_rqid_tot;
12764d0e5007SSukumar Swaminathan 			uint32_t    ulp0_toe_defrqid_base;
12774d0e5007SSukumar Swaminathan 			uint32_t    ulp0_toe_defrq_tot;
12784d0e5007SSukumar Swaminathan 			uint32_t    ulp0_lro_rqid_base;
12794d0e5007SSukumar Swaminathan 			uint32_t    ulp0_lro_rqid_tot;
12804d0e5007SSukumar Swaminathan 			uint32_t    ulp0_iscsi_icd_base;
12814d0e5007SSukumar Swaminathan 			uint32_t    ulp0_iscsi_icd_tot;
12824d0e5007SSukumar Swaminathan 			uint32_t    ulp1_mode;
12834d0e5007SSukumar Swaminathan 			uint32_t    ulp1_nic_wqid_base;
12844d0e5007SSukumar Swaminathan 			uint32_t    ulp1_wq_tot;
12854d0e5007SSukumar Swaminathan 			uint32_t    ulp1_toe_wqid_base;
12864d0e5007SSukumar Swaminathan 			uint32_t    ulp1_toe_wq_tot;
12874d0e5007SSukumar Swaminathan 			uint32_t    ulp1_toe_rqid_base;
12884d0e5007SSukumar Swaminathan 			uint32_t    ulp1_toe_rqid_tot;
12894d0e5007SSukumar Swaminathan 			uint32_t    ulp1_toe_defrqid_base;
12904d0e5007SSukumar Swaminathan 			uint32_t    ulp1_toe_defrq_tot;
12914d0e5007SSukumar Swaminathan 			uint32_t    ulp1_lro_rqid_base;
12924d0e5007SSukumar Swaminathan 			uint32_t    ulp1_lro_rqid_tot;
12934d0e5007SSukumar Swaminathan 			uint32_t    ulp1_iscsi_icd_base;
12944d0e5007SSukumar Swaminathan 			uint32_t    ulp1_iscsi_icd_tot;
12954d0e5007SSukumar Swaminathan 		}rsp;
12964d0e5007SSukumar Swaminathan 	}params;
12974d0e5007SSukumar Swaminathan };
12984d0e5007SSukumar Swaminathan 
12994d0e5007SSukumar Swaminathan struct mbx_common_config_vlan {
13004d0e5007SSukumar Swaminathan 	struct mbx_hdr hdr;
13014d0e5007SSukumar Swaminathan 	union {
13024d0e5007SSukumar Swaminathan 		struct {
13034d0e5007SSukumar Swaminathan #ifdef _BIG_ENDIAN
13044d0e5007SSukumar Swaminathan 			uint8_t num_vlans;
13054d0e5007SSukumar Swaminathan 			uint8_t untagged;
13064d0e5007SSukumar Swaminathan 			uint8_t promisc;
13074d0e5007SSukumar Swaminathan 			uint8_t if_id;
13084d0e5007SSukumar Swaminathan #else
13094d0e5007SSukumar Swaminathan 			uint8_t if_id;
13104d0e5007SSukumar Swaminathan 			uint8_t promisc;
13114d0e5007SSukumar Swaminathan 			uint8_t untagged;
13124d0e5007SSukumar Swaminathan 			uint8_t num_vlans;
13134d0e5007SSukumar Swaminathan #endif
13144d0e5007SSukumar Swaminathan 			union {
13154d0e5007SSukumar Swaminathan 				struct normal_vlan normal_vlans[64];
13164d0e5007SSukumar Swaminathan 				struct qinq_vlan  qinq_vlans[32];
13174d0e5007SSukumar Swaminathan 			}tags;
13184d0e5007SSukumar Swaminathan 		}req;
13194d0e5007SSukumar Swaminathan 
13204d0e5007SSukumar Swaminathan 		struct {
13214d0e5007SSukumar Swaminathan 			uint32_t rsvd;
13224d0e5007SSukumar Swaminathan 		}rsp;
13234d0e5007SSukumar Swaminathan 	}params;
13244d0e5007SSukumar Swaminathan };
13254d0e5007SSukumar Swaminathan 
13264d0e5007SSukumar Swaminathan /* [34] OPCODE_COMMON_NTWK_RX_FILTER */
13274d0e5007SSukumar Swaminathan struct mbx_set_common_ntwk_rx_filter {
13284d0e5007SSukumar Swaminathan 	struct mbx_hdr hdr;
13294d0e5007SSukumar Swaminathan 	uint32_t global_flags_mask;
13304d0e5007SSukumar Swaminathan 	uint32_t global_flags;
13314d0e5007SSukumar Swaminathan 	uint32_t iface_flags_mask;
13324d0e5007SSukumar Swaminathan 	uint32_t iface_flags;
13334d0e5007SSukumar Swaminathan 	uint32_t if_id;
13344d0e5007SSukumar Swaminathan 	uint32_t num_mcast;
13354d0e5007SSukumar Swaminathan 	struct {
13364d0e5007SSukumar Swaminathan 		uint8_t byte[6];
13374d0e5007SSukumar Swaminathan 	}mac[32];
13384d0e5007SSukumar Swaminathan };
13394d0e5007SSukumar Swaminathan /* [41] OPCODE_MODIFY_COMMON_EQ_DELAY */
13404d0e5007SSukumar Swaminathan struct mbx_modify_common_eq_delay {
13414d0e5007SSukumar Swaminathan 	struct mbx_hdr hdr;
13424d0e5007SSukumar Swaminathan 	union {
13434d0e5007SSukumar Swaminathan 		struct {
13444d0e5007SSukumar Swaminathan 			uint32_t num_eq;
13454d0e5007SSukumar Swaminathan 			struct {
13464d0e5007SSukumar Swaminathan 				uint32_t eq_id;
13474d0e5007SSukumar Swaminathan 				uint32_t phase;
13484d0e5007SSukumar Swaminathan 				uint32_t dm;
13494d0e5007SSukumar Swaminathan 			}delay[8];
13504d0e5007SSukumar Swaminathan 		}req;
13514d0e5007SSukumar Swaminathan 
13524d0e5007SSukumar Swaminathan 		struct {
13534d0e5007SSukumar Swaminathan 			uint32_t rsvd0;
13544d0e5007SSukumar Swaminathan 		}rsp;
13554d0e5007SSukumar Swaminathan 	}params;
13564d0e5007SSukumar Swaminathan };
13574d0e5007SSukumar Swaminathan /* [59] OPCODE_ADD_COMMON_IFACE_MAC */
13584d0e5007SSukumar Swaminathan struct mbx_add_common_iface_mac {
13594d0e5007SSukumar Swaminathan 	struct mbx_hdr hdr;
13604d0e5007SSukumar Swaminathan 	union {
13614d0e5007SSukumar Swaminathan 		struct {
13624d0e5007SSukumar Swaminathan 			uint32_t if_id;
13634d0e5007SSukumar Swaminathan 			uint8_t mac_address[6];
13644d0e5007SSukumar Swaminathan 			uint8_t rsvd0[2];
13654d0e5007SSukumar Swaminathan 		}req;
13664d0e5007SSukumar Swaminathan 		struct {
13674d0e5007SSukumar Swaminathan 			uint32_t pmac_id;
13684d0e5007SSukumar Swaminathan 		}rsp;
13694d0e5007SSukumar Swaminathan 	} params;
13704d0e5007SSukumar Swaminathan };
13714d0e5007SSukumar Swaminathan 
13724d0e5007SSukumar Swaminathan /* [60] OPCODE_DEL_COMMON_IFACE_MAC */
13734d0e5007SSukumar Swaminathan struct mbx_del_common_iface_mac {
13744d0e5007SSukumar Swaminathan 	struct mbx_hdr hdr;
13754d0e5007SSukumar Swaminathan 	union {
13764d0e5007SSukumar Swaminathan 		struct {
13774d0e5007SSukumar Swaminathan 			uint32_t if_id;
13784d0e5007SSukumar Swaminathan 			uint32_t pmac_id;
13794d0e5007SSukumar Swaminathan 		}req;
13804d0e5007SSukumar Swaminathan 		struct {
13814d0e5007SSukumar Swaminathan 			uint32_t rsvd0;
13824d0e5007SSukumar Swaminathan 		}rsp;
13834d0e5007SSukumar Swaminathan 	} params;
13844d0e5007SSukumar Swaminathan };
13854d0e5007SSukumar Swaminathan 
13864d0e5007SSukumar Swaminathan /* [8] OPCODE_QUERY_COMMON_MAX_MBX_BUFFER_SIZE */
13874d0e5007SSukumar Swaminathan struct mbx_query_common_max_mbx_buffer_size {
13884d0e5007SSukumar Swaminathan 	struct mbx_hdr hdr;
13894d0e5007SSukumar Swaminathan 	struct {
13904d0e5007SSukumar Swaminathan 		uint32_t max_ioctl_bufsz;
13914d0e5007SSukumar Swaminathan 	} rsp;
13924d0e5007SSukumar Swaminathan };
13934d0e5007SSukumar Swaminathan 
13944d0e5007SSukumar Swaminathan /* [61] OPCODE_COMMON_FUNCTION_RESET */
13954d0e5007SSukumar Swaminathan struct ioctl_common_function_reset {
13964d0e5007SSukumar Swaminathan 	struct mbx_hdr hdr;
13974d0e5007SSukumar Swaminathan };
13984d0e5007SSukumar Swaminathan 
13994d0e5007SSukumar Swaminathan /* [80] OPCODE_COMMON_FUNCTION_LINK_CONFIG */
14004d0e5007SSukumar Swaminathan struct mbx_common_func_link_cfg {
14014d0e5007SSukumar Swaminathan 	struct mbx_hdr hdr;
14024d0e5007SSukumar Swaminathan 	union {
14034d0e5007SSukumar Swaminathan 		struct {
14044d0e5007SSukumar Swaminathan 			uint32_t enable;
14054d0e5007SSukumar Swaminathan 		}req;
14064d0e5007SSukumar Swaminathan 		struct {
14074d0e5007SSukumar Swaminathan 			uint32_t rsvd0;
14084d0e5007SSukumar Swaminathan 		}rsp;
14094d0e5007SSukumar Swaminathan 	} params;
14104d0e5007SSukumar Swaminathan };
14114d0e5007SSukumar Swaminathan 
14124d0e5007SSukumar Swaminathan #pragma pack()
14134d0e5007SSukumar Swaminathan 
14144d0e5007SSukumar Swaminathan #ifdef __cplusplus
14154d0e5007SSukumar Swaminathan }
14164d0e5007SSukumar Swaminathan #endif
14174d0e5007SSukumar Swaminathan 
14184d0e5007SSukumar Swaminathan #endif /* _OCE_HW_H_ */
1419