1*14b24e2bSVaishali Kulkarni /*
2*14b24e2bSVaishali Kulkarni * CDDL HEADER START
3*14b24e2bSVaishali Kulkarni *
4*14b24e2bSVaishali Kulkarni * The contents of this file are subject to the terms of the
5*14b24e2bSVaishali Kulkarni * Common Development and Distribution License, v.1,  (the "License").
6*14b24e2bSVaishali Kulkarni * You may not use this file except in compliance with the License.
7*14b24e2bSVaishali Kulkarni *
8*14b24e2bSVaishali Kulkarni * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*14b24e2bSVaishali Kulkarni * or http://opensource.org/licenses/CDDL-1.0.
10*14b24e2bSVaishali Kulkarni * See the License for the specific language governing permissions
11*14b24e2bSVaishali Kulkarni * and limitations under the License.
12*14b24e2bSVaishali Kulkarni *
13*14b24e2bSVaishali Kulkarni * When distributing Covered Code, include this CDDL HEADER in each
14*14b24e2bSVaishali Kulkarni * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*14b24e2bSVaishali Kulkarni * If applicable, add the following below this CDDL HEADER, with the
16*14b24e2bSVaishali Kulkarni * fields enclosed by brackets "[]" replaced with your own identifying
17*14b24e2bSVaishali Kulkarni * information: Portions Copyright [yyyy] [name of copyright owner]
18*14b24e2bSVaishali Kulkarni *
19*14b24e2bSVaishali Kulkarni * CDDL HEADER END
20*14b24e2bSVaishali Kulkarni */
21*14b24e2bSVaishali Kulkarni 
22*14b24e2bSVaishali Kulkarni /*
23*14b24e2bSVaishali Kulkarni * Copyright 2014-2017 Cavium, Inc.
24*14b24e2bSVaishali Kulkarni * The contents of this file are subject to the terms of the Common Development
25*14b24e2bSVaishali Kulkarni * and Distribution License, v.1,  (the "License").
26*14b24e2bSVaishali Kulkarni 
27*14b24e2bSVaishali Kulkarni * You may not use this file except in compliance with the License.
28*14b24e2bSVaishali Kulkarni 
29*14b24e2bSVaishali Kulkarni * You can obtain a copy of the License at available
30*14b24e2bSVaishali Kulkarni * at http://opensource.org/licenses/CDDL-1.0
31*14b24e2bSVaishali Kulkarni 
32*14b24e2bSVaishali Kulkarni * See the License for the specific language governing permissions and
33*14b24e2bSVaishali Kulkarni * limitations under the License.
34*14b24e2bSVaishali Kulkarni */
35*14b24e2bSVaishali Kulkarni 
36*14b24e2bSVaishali Kulkarni /****************************************************************************
37*14b24e2bSVaishali Kulkarni  * Copyright(c) 2009-2015 Broadcom Corporation, all rights reserved
38*14b24e2bSVaishali Kulkarni  * Proprietary and Confidential Information.
39*14b24e2bSVaishali Kulkarni  *
40*14b24e2bSVaishali Kulkarni  * This source file is the property of Broadcom Corporation, and
41*14b24e2bSVaishali Kulkarni  * may not be copied or distributed in any isomorphic form without
42*14b24e2bSVaishali Kulkarni  * the prior written consent of Broadcom Corporation.
43*14b24e2bSVaishali Kulkarni  *
44*14b24e2bSVaishali Kulkarni  * Name: bdn.h
45*14b24e2bSVaishali Kulkarni  *
46*14b24e2bSVaishali Kulkarni  * Description: BDN definitions
47*14b24e2bSVaishali Kulkarni  *
48*14b24e2bSVaishali Kulkarni  * Author: Yaniv Rosner
49*14b24e2bSVaishali Kulkarni  *
50*14b24e2bSVaishali Kulkarni  ****************************************************************************/
51*14b24e2bSVaishali Kulkarni 
52*14b24e2bSVaishali Kulkarni #ifndef BDN_H
53*14b24e2bSVaishali Kulkarni #define BDN_H
54*14b24e2bSVaishali Kulkarni 
55*14b24e2bSVaishali Kulkarni #if 0
56*14b24e2bSVaishali Kulkarni typedef u32 bdn_cfg;
57*14b24e2bSVaishali Kulkarni #define BDN_CFG_SIZE_MASK		0x0000ffff
58*14b24e2bSVaishali Kulkarni #define BDN_CFG_SIZE_OFFSET		0
59*14b24e2bSVaishali Kulkarni #define BDN_CFG_STATE_MASK		0x00ff0000
60*14b24e2bSVaishali Kulkarni #define BDN_CFG_STATE_OFFSET		16
61*14b24e2bSVaishali Kulkarni 	#define BDN_CFG_STATE_ACTIVE		0x00010000
62*14b24e2bSVaishali Kulkarni 	#define BDN_CFG_STATE_PENDING		0x00020000
63*14b24e2bSVaishali Kulkarni 	#define BDN_CFG_STATE_DEFAULT		0x00040000
64*14b24e2bSVaishali Kulkarni 
65*14b24e2bSVaishali Kulkarni #define SERVER_DESCRIPTION_MAX_LENGTH 64
66*14b24e2bSVaishali Kulkarni struct server_descrip {
67*14b24e2bSVaishali Kulkarni 	u8 len;
68*14b24e2bSVaishali Kulkarni 	u8 str[SERVER_DESCRIPTION_MAX_LENGTH];
69*14b24e2bSVaishali Kulkarni };
70*14b24e2bSVaishali Kulkarni 
71*14b24e2bSVaishali Kulkarni #define SERVER_UUID_LENGTH	 36
72*14b24e2bSVaishali Kulkarni struct server_uuid {
73*14b24e2bSVaishali Kulkarni 	u8 len;
74*14b24e2bSVaishali Kulkarni 	u8 str[SERVER_UUID_LENGTH];
75*14b24e2bSVaishali Kulkarni };
76*14b24e2bSVaishali Kulkarni 
77*14b24e2bSVaishali Kulkarni #define GENERALIZED_TIME_MAX_SIZE 16 /* YYYYMMDDhhmmss.s */
78*14b24e2bSVaishali Kulkarni struct generalized_time {
79*14b24e2bSVaishali Kulkarni 	u8 len;
80*14b24e2bSVaishali Kulkarni 	u8 time_str[GENERALIZED_TIME_MAX_SIZE];
81*14b24e2bSVaishali Kulkarni };
82*14b24e2bSVaishali Kulkarni #define CONNECTION_ID_LENGTH	16
83*14b24e2bSVaishali Kulkarni 
84*14b24e2bSVaishali Kulkarni #define SLOT_TYPE_NUM_MAX_LENGTH 32
85*14b24e2bSVaishali Kulkarni struct slot_type_num {
86*14b24e2bSVaishali Kulkarni 	u8 len;
87*14b24e2bSVaishali Kulkarni 	u8 str[SLOT_TYPE_NUM_MAX_LENGTH];
88*14b24e2bSVaishali Kulkarni };
89*14b24e2bSVaishali Kulkarni 
90*14b24e2bSVaishali Kulkarni #define ILO_MGMT_MAX_NUM_OF_ADDR 3
91*14b24e2bSVaishali Kulkarni #define ILO_MGMT_ADDR_MAX_LENGTH 16
92*14b24e2bSVaishali Kulkarni struct iLO_mgmt_addr {
93*14b24e2bSVaishali Kulkarni 	u8 num_of_add;
94*14b24e2bSVaishali Kulkarni 	u8 len_of_add[ILO_MGMT_MAX_NUM_OF_ADDR];
95*14b24e2bSVaishali Kulkarni 	u8 str[ILO_MGMT_MAX_NUM_OF_ADDR][ILO_MGMT_ADDR_MAX_LENGTH];
96*14b24e2bSVaishali Kulkarni };
97*14b24e2bSVaishali Kulkarni 
98*14b24e2bSVaishali Kulkarni #define ENCLOSURE_ID_LENGTH	 36
99*14b24e2bSVaishali Kulkarni struct enclosure_id {
100*14b24e2bSVaishali Kulkarni 	u8 len;
101*14b24e2bSVaishali Kulkarni 	u8 str[ENCLOSURE_ID_LENGTH];
102*14b24e2bSVaishali Kulkarni 	u8 res[3];
103*14b24e2bSVaishali Kulkarni };
104*14b24e2bSVaishali Kulkarni 
105*14b24e2bSVaishali Kulkarni struct base_dev_next_os {
106*14b24e2bSVaishali Kulkarni 	u8 reset_2_factory;
107*14b24e2bSVaishali Kulkarni 	u8 res[3];
108*14b24e2bSVaishali Kulkarni };
109*14b24e2bSVaishali Kulkarni 
110*14b24e2bSVaishali Kulkarni struct base_dev_now {
111*14b24e2bSVaishali Kulkarni 	u8 one_view_config;
112*14b24e2bSVaishali Kulkarni 	u8 res[3];
113*14b24e2bSVaishali Kulkarni };
114*14b24e2bSVaishali Kulkarni 
115*14b24e2bSVaishali Kulkarni struct base_dev {
116*14b24e2bSVaishali Kulkarni 	struct base_dev_now now;
117*14b24e2bSVaishali Kulkarni 	struct base_dev_next_os next_os;
118*14b24e2bSVaishali Kulkarni };
119*14b24e2bSVaishali Kulkarni 
120*14b24e2bSVaishali Kulkarni struct server_info {
121*14b24e2bSVaishali Kulkarni 	u8 optional_bitmap;
122*14b24e2bSVaishali Kulkarni #define SERVER_INFO_ILO_MGMT_VLAN_PRESENT	(1<<0)
123*14b24e2bSVaishali Kulkarni #define SERVER_INFO_DATA_TIMESTAMP_PRESENT	(1<<1)
124*14b24e2bSVaishali Kulkarni #define SERVER_INFO_ENCLOSURE_ID_PRESENT	(1<<2)
125*14b24e2bSVaishali Kulkarni 	struct server_descrip server_descrip;
126*14b24e2bSVaishali Kulkarni 	struct server_uuid server_uuid;
127*14b24e2bSVaishali Kulkarni 	struct slot_type_num slot_type_num;
128*14b24e2bSVaishali Kulkarni 	struct iLO_mgmt_addr iLO_mgmt_addr;
129*14b24e2bSVaishali Kulkarni 	u16 iLO_mgmt_vlan;
130*14b24e2bSVaishali Kulkarni 	struct generalized_time data_timestamp;
131*14b24e2bSVaishali Kulkarni };
132*14b24e2bSVaishali Kulkarni 
133*14b24e2bSVaishali Kulkarni struct Codec_Info {
134*14b24e2bSVaishali Kulkarni 	u32 version;	/* Version of Codec */
135*14b24e2bSVaishali Kulkarni 
136*14b24e2bSVaishali Kulkarni 	enum codec_location {
137*14b24e2bSVaishali Kulkarni 		e_None		= 0,
138*14b24e2bSVaishali Kulkarni 		e_Here		= 1,
139*14b24e2bSVaishali Kulkarni 		e_FRU_EEPROM	= 2
140*14b24e2bSVaishali Kulkarni 	} loc; /* DEFAULT e-None */
141*14b24e2bSVaishali Kulkarni 	u16 total_size;	/* total size of Codec in bytes.Max size 32K (64K?)*/
142*14b24e2bSVaishali Kulkarni 	u16 num_msg_segments;	/* number of segments = total size / max message payload size */
143*14b24e2bSVaishali Kulkarni };
144*14b24e2bSVaishali Kulkarni 
145*14b24e2bSVaishali Kulkarni #define MAX_CODEC_SIZE		0x8000
146*14b24e2bSVaishali Kulkarni #define CODEC_SEGMENT_SIZE	0x400
147*14b24e2bSVaishali Kulkarni #define NUMBER_OF_SEGMENTS (MAX_CODEC_SIZE/CODEC_SEGMENT_SIZE)
148*14b24e2bSVaishali Kulkarni struct codec_t {
149*14b24e2bSVaishali Kulkarni 	u8 data[NUMBER_OF_SEGMENTS][CODEC_SEGMENT_SIZE];
150*14b24e2bSVaishali Kulkarni };
151*14b24e2bSVaishali Kulkarni 
152*14b24e2bSVaishali Kulkarni struct bdn_netport_now {
153*14b24e2bSVaishali Kulkarni 	bdn_cfg hdr;
154*14b24e2bSVaishali Kulkarni 	u8 enable_port;
155*14b24e2bSVaishali Kulkarni 	u8 enable_diag;
156*14b24e2bSVaishali Kulkarni 	u8 num_pfs_min_bw;
157*14b24e2bSVaishali Kulkarni 	u8 num_pfs_max_bw;
158*14b24e2bSVaishali Kulkarni 	u8 min_bw[MCP_GLOB_FUNC_MAX];
159*14b24e2bSVaishali Kulkarni 	u8 max_bw[MCP_GLOB_FUNC_MAX];
160*14b24e2bSVaishali Kulkarni };
161*14b24e2bSVaishali Kulkarni 
162*14b24e2bSVaishali Kulkarni struct bdn_netport_on_port_reset {
163*14b24e2bSVaishali Kulkarni 	bdn_cfg hdr;
164*14b24e2bSVaishali Kulkarni 	u32 link_config;
165*14b24e2bSVaishali Kulkarni /* Same definitions as in PORT_HW_CFG_SPEED_CAPABILITY_D3_MASK */
166*14b24e2bSVaishali Kulkarni #define BDN_LINK_CONFIG_ADVERTISED_SPEED_MASK	0x0000ffff
167*14b24e2bSVaishali Kulkarni #define BDN_LINK_CONFIG_ADVERTISED_SPEED_SHIFT	0
168*14b24e2bSVaishali Kulkarni /* Same definitions as PORT_FEATURE_FLOW_CONTROL_MASK */
169*14b24e2bSVaishali Kulkarni #define BDN_LINK_CONFIG_FLOW_CONTROL_MASK	0x00070000
170*14b24e2bSVaishali Kulkarni #define BDN_LINK_CONFIG_FLOW_CONTROL_SHIFT	16
171*14b24e2bSVaishali Kulkarni 
172*14b24e2bSVaishali Kulkarni #define BDN_LINK_CONFIG_PFC_ENABLED_MASK	0x00080000
173*14b24e2bSVaishali Kulkarni #define BDN_LINK_CONFIG_PFC_ENABLED_SHIFT	19
174*14b24e2bSVaishali Kulkarni 
175*14b24e2bSVaishali Kulkarni #define BDN_LINK_CONFIG_EEE_ENABLED_MASK	0x00100000
176*14b24e2bSVaishali Kulkarni #define BDN_LINK_CONFIG_EEE_ENABLED_SHIFT	20
177*14b24e2bSVaishali Kulkarni };
178*14b24e2bSVaishali Kulkarni 
179*14b24e2bSVaishali Kulkarni struct bdn_netport_next_os_boot {
180*14b24e2bSVaishali Kulkarni 	bdn_cfg hdr;
181*14b24e2bSVaishali Kulkarni 	u8   num_pfs;
182*14b24e2bSVaishali Kulkarni 	u8   num_vf_per_pf[MCP_GLOB_FUNC_MAX];
183*14b24e2bSVaishali Kulkarni };
184*14b24e2bSVaishali Kulkarni 
185*14b24e2bSVaishali Kulkarni struct bdn_netport_diag_ctrl {
186*14b24e2bSVaishali Kulkarni 	bdn_cfg hdr;
187*14b24e2bSVaishali Kulkarni 	u8  port_reset;
188*14b24e2bSVaishali Kulkarni 	u8  local_loopback;
189*14b24e2bSVaishali Kulkarni 	u8  remote_loopback;
190*14b24e2bSVaishali Kulkarni 	u8  rsrv[1];
191*14b24e2bSVaishali Kulkarni };
192*14b24e2bSVaishali Kulkarni 
193*14b24e2bSVaishali Kulkarni struct bdn_netport {
194*14b24e2bSVaishali Kulkarni 	struct bdn_netport_now now;
195*14b24e2bSVaishali Kulkarni 	struct bdn_netport_on_port_reset on_port_reset; /* On Port Reset */
196*14b24e2bSVaishali Kulkarni 	struct bdn_netport_next_os_boot next_os_boot; /* Next OS Boot */
197*14b24e2bSVaishali Kulkarni 	struct bdn_netport_diag_ctrl diag_ctrl;
198*14b24e2bSVaishali Kulkarni };
199*14b24e2bSVaishali Kulkarni 
200*14b24e2bSVaishali Kulkarni #define CONNECTION_ID_LEN 16
201*14b24e2bSVaishali Kulkarni struct bdn_flexfunc_now {
202*14b24e2bSVaishali Kulkarni 	bdn_cfg hdr;
203*14b24e2bSVaishali Kulkarni 	u8 connection_id[CONNECTION_ID_LEN];
204*14b24e2bSVaishali Kulkarni 	u8 fnic_enabled;
205*14b24e2bSVaishali Kulkarni 	u8 rsrv[3];
206*14b24e2bSVaishali Kulkarni };
207*14b24e2bSVaishali Kulkarni 
208*14b24e2bSVaishali Kulkarni struct bdn_flexfunc_next_os_boot {
209*14b24e2bSVaishali Kulkarni 	bdn_cfg hdr;
210*14b24e2bSVaishali Kulkarni 	u32 optional_bitmap;
211*14b24e2bSVaishali Kulkarni #define FLEXFUNC_CFG_NEXT_OS_C2S_PCP_MAP_PRESENT	(1<<0)
212*14b24e2bSVaishali Kulkarni #define FLEXFUNC_CFG_NEXT_OS_PORT_ASSIGNMENT_PRESENT	(1<<1)
213*14b24e2bSVaishali Kulkarni #define FLEXFUNC_CFG_NEXT_OS_EMB_LAG_PRESENT		(1<<2)
214*14b24e2bSVaishali Kulkarni 	u8 mac_addr[6];
215*14b24e2bSVaishali Kulkarni 	u8 func_type;
216*14b24e2bSVaishali Kulkarni 	u8 boot_mode;
217*14b24e2bSVaishali Kulkarni 	u8 c_2_s_pcp_map[9]; /*  Maps O/S C-VLAN PCP value to S-VLAN PCP value for TX
218*14b24e2bSVaishali Kulkarni 			      * -- items 1-8 correspond to the O/S C-VLAN PCP values 0-7
219*14b24e2bSVaishali Kulkarni 			      * -- item 9 is the default if no C-VLAN present
220*14b24e2bSVaishali Kulkarni 			      * -- Values in these 9 bytes are the expected S-PCP values.
221*14b24e2bSVaishali Kulkarni 			      * -- If NetDev-Device-Module: EVB-Support.c-2-s-pcp-map = FALSE, then
222*14b24e2bSVaishali Kulkarni 			      * --     all values must be identical
223*14b24e2bSVaishali Kulkarni 			      * -- else, it supports C-PCP -> S-PCP mapping
224*14b24e2bSVaishali Kulkarni 			      */
225*14b24e2bSVaishali Kulkarni 	u16 mtu_size;
226*14b24e2bSVaishali Kulkarni 	u8 rsrv[1];
227*14b24e2bSVaishali Kulkarni };
228*14b24e2bSVaishali Kulkarni 
229*14b24e2bSVaishali Kulkarni struct bdn_flex_func_diag_ctrl {
230*14b24e2bSVaishali Kulkarni 	bdn_cfg hdr;
231*14b24e2bSVaishali Kulkarni 	u8  enable_wol;
232*14b24e2bSVaishali Kulkarni 	u8  rsrv[3];
233*14b24e2bSVaishali Kulkarni };
234*14b24e2bSVaishali Kulkarni 
235*14b24e2bSVaishali Kulkarni struct bdn_flex_func {
236*14b24e2bSVaishali Kulkarni 	struct bdn_flexfunc_now now;
237*14b24e2bSVaishali Kulkarni 	struct bdn_flexfunc_next_os_boot next_os_boot; /* Next OS Boot */
238*14b24e2bSVaishali Kulkarni 	struct bdn_flex_func_diag_ctrl diag_ctrl;
239*14b24e2bSVaishali Kulkarni };
240*14b24e2bSVaishali Kulkarni 
241*14b24e2bSVaishali Kulkarni #define FC_NPIV_WWPN_SIZE 8
242*14b24e2bSVaishali Kulkarni #define FC_NPIV_WWNN_SIZE 8
243*14b24e2bSVaishali Kulkarni struct bdn_npiv_settings {
244*14b24e2bSVaishali Kulkarni 	u8 npiv_wwpn[FC_NPIV_WWPN_SIZE];
245*14b24e2bSVaishali Kulkarni 	u8 npiv_wwnn[FC_NPIV_WWNN_SIZE];
246*14b24e2bSVaishali Kulkarni };
247*14b24e2bSVaishali Kulkarni 
248*14b24e2bSVaishali Kulkarni struct bdn_fc_npiv_cfg {
249*14b24e2bSVaishali Kulkarni 	/* hdr used internally by the MFW */
250*14b24e2bSVaishali Kulkarni 	u32 hdr;
251*14b24e2bSVaishali Kulkarni 	u32 num_of_npiv;
252*14b24e2bSVaishali Kulkarni };
253*14b24e2bSVaishali Kulkarni 
254*14b24e2bSVaishali Kulkarni #define MAX_NUMBER_NPIV 64
255*14b24e2bSVaishali Kulkarni struct bdn_fc_npiv_tbl {
256*14b24e2bSVaishali Kulkarni 	struct bdn_fc_npiv_cfg fc_npiv_cfg;
257*14b24e2bSVaishali Kulkarni 	struct bdn_npiv_settings settings[MAX_NUMBER_NPIV];
258*14b24e2bSVaishali Kulkarni };
259*14b24e2bSVaishali Kulkarni 
260*14b24e2bSVaishali Kulkarni 
261*14b24e2bSVaishali Kulkarni struct bdn_fc_npiv {
262*14b24e2bSVaishali Kulkarni 	struct bdn_fc_npiv_tbl now; /* Next device level reset */
263*14b24e2bSVaishali Kulkarni };
264*14b24e2bSVaishali Kulkarni 
265*14b24e2bSVaishali Kulkarni struct bdn_iscsi_initiator_cfg {
266*14b24e2bSVaishali Kulkarni 	u32 optional_bitmap;
267*14b24e2bSVaishali Kulkarni #define ISCSI_INITIATOR_ROUTE_PRESENT	(1<<0)
268*14b24e2bSVaishali Kulkarni #define ISCSI_INITIATOR_PRIMARY_DNS_PRESENT	(1<<1)
269*14b24e2bSVaishali Kulkarni #define ISCSI_INITIATOR_SECONDARY_DNS_PRESENT	(1<<2)
270*14b24e2bSVaishali Kulkarni 	u8 name[232];
271*14b24e2bSVaishali Kulkarni 	u8 ip_add[16];
272*14b24e2bSVaishali Kulkarni 	u8 netmask[16];
273*14b24e2bSVaishali Kulkarni 	u8 route[16];
274*14b24e2bSVaishali Kulkarni 	u8 primary_dns[16];
275*14b24e2bSVaishali Kulkarni 	u8 secondary_dns[16];
276*14b24e2bSVaishali Kulkarni };
277*14b24e2bSVaishali Kulkarni 
278*14b24e2bSVaishali Kulkarni struct bdn_iscsi_target_params {
279*14b24e2bSVaishali Kulkarni 	u32 optional_bitmap;
280*14b24e2bSVaishali Kulkarni #define ISCSI_TARGET_LLMNR_ENABLE_PRESENT	(1<<0)
281*14b24e2bSVaishali Kulkarni #define ISCSI_TARGET_ROUTE_ADV_ENABLE_PRESENT	(1<<1)
282*14b24e2bSVaishali Kulkarni #define ISCSI_TARGET_IPV2_PRESENT	(1<<2)
283*14b24e2bSVaishali Kulkarni 	u8 name[232];
284*14b24e2bSVaishali Kulkarni 	u32 lun;
285*14b24e2bSVaishali Kulkarni 	u8 ip_addr[16];
286*14b24e2bSVaishali Kulkarni 	u32 tcp_port;
287*14b24e2bSVaishali Kulkarni 	u8 ip_addr_2[16];
288*14b24e2bSVaishali Kulkarni 	u32 tcp_port_2;
289*14b24e2bSVaishali Kulkarni 	u32 llmnr_en;
290*14b24e2bSVaishali Kulkarni 	u32 route_adv_en;
291*14b24e2bSVaishali Kulkarni };
292*14b24e2bSVaishali Kulkarni 
293*14b24e2bSVaishali Kulkarni struct bdn_iscsi_authentication {
294*14b24e2bSVaishali Kulkarni 	u32 optional_bitmap;
295*14b24e2bSVaishali Kulkarni #define ISCSI_AUTH_CHAP_USERNAME_PRESENT	(1<<0)
296*14b24e2bSVaishali Kulkarni #define ISCSI_AUTH_CHAP_SECRET_PRESENT	(1<<1)
297*14b24e2bSVaishali Kulkarni #define ISCSI_AUTH_MUTUAL_USERNAME_PRESENT	(1<<2)
298*14b24e2bSVaishali Kulkarni #define ISCSI_AUTH_MUTUAL_SECRET_PRESENT	(1<<3)
299*14b24e2bSVaishali Kulkarni 	u32 auth_meth;
300*14b24e2bSVaishali Kulkarni 	u8 username[232];
301*14b24e2bSVaishali Kulkarni 	u8 secret[16];
302*14b24e2bSVaishali Kulkarni 	u32 secret_len;
303*14b24e2bSVaishali Kulkarni 	u8 mutual_username[232];
304*14b24e2bSVaishali Kulkarni 	u8 mutual_secret[16];
305*14b24e2bSVaishali Kulkarni 	u32 mutual_secret_len;
306*14b24e2bSVaishali Kulkarni };
307*14b24e2bSVaishali Kulkarni 
308*14b24e2bSVaishali Kulkarni struct bdn_iscsi_boot_cfg {
309*14b24e2bSVaishali Kulkarni 	u32 optional_bitmap;
310*14b24e2bSVaishali Kulkarni #define ISCSI_CFG_CVID_PRESENT	(1<<0)
311*14b24e2bSVaishali Kulkarni #define ISCSI_CFG_DNS_VIA_DHCP_PRESENT	(1<<1)
312*14b24e2bSVaishali Kulkarni #define ISCSI_CFG_TARGET_INFO_DHCP_PRESENT	(1<<2)
313*14b24e2bSVaishali Kulkarni #define ISCSI_CFG_INITIATOR_PRESENT	(1<<3)
314*14b24e2bSVaishali Kulkarni #define ISCSI_CFG_TARGET_PRESENT	(1<<4)
315*14b24e2bSVaishali Kulkarni #define ISCSI_CFG_DHCP_VENDOR_ID_PRESENT	(1<<5)
316*14b24e2bSVaishali Kulkarni #define ISCSI_CFG_AUTH_PRESENT	(1<<6)
317*14b24e2bSVaishali Kulkarni #define ISCSI_AUTH_HEADER_DIGEST_FLAG_PRESENT	(1<<7)
318*14b24e2bSVaishali Kulkarni #define ISCSI_AUTH_DATA_DIGEST_FLAG_PRESENT	(1<<8)
319*14b24e2bSVaishali Kulkarni 	bdn_cfg hdr;
320*14b24e2bSVaishali Kulkarni 	u32 cvid;
321*14b24e2bSVaishali Kulkarni 	u32 ip_add_type;
322*14b24e2bSVaishali Kulkarni 	u32 dns_via_dhcp;
323*14b24e2bSVaishali Kulkarni 	u32 target_via_dhcp;
324*14b24e2bSVaishali Kulkarni 	u8 dhcp_vendor_id[32];
325*14b24e2bSVaishali Kulkarni 	u32 head_digest_flag_en;
326*14b24e2bSVaishali Kulkarni 	u32 data_digest_flag_en;
327*14b24e2bSVaishali Kulkarni };
328*14b24e2bSVaishali Kulkarni 
329*14b24e2bSVaishali Kulkarni struct bdn_iscsi_boot_next_dlr {
330*14b24e2bSVaishali Kulkarni 	struct bdn_iscsi_boot_cfg cfg; /* Next device level reset */
331*14b24e2bSVaishali Kulkarni 	struct bdn_iscsi_initiator_cfg initiator_cfg;
332*14b24e2bSVaishali Kulkarni 	struct bdn_iscsi_target_params target_params;
333*14b24e2bSVaishali Kulkarni 	struct bdn_iscsi_authentication authentication;
334*14b24e2bSVaishali Kulkarni };
335*14b24e2bSVaishali Kulkarni 
336*14b24e2bSVaishali Kulkarni struct bdn_iscsi_boot {
337*14b24e2bSVaishali Kulkarni 	struct bdn_iscsi_boot_next_dlr next_dlr; /* Next device level reset */
338*14b24e2bSVaishali Kulkarni };
339*14b24e2bSVaishali Kulkarni 
340*14b24e2bSVaishali Kulkarni #define FCOE_TARGETS_WWPN_SIZE 8
341*14b24e2bSVaishali Kulkarni #define FCOE_TARGETS_LUN_SIZE 8
342*14b24e2bSVaishali Kulkarni 
343*14b24e2bSVaishali Kulkarni struct bdn_fcoe_targets {
344*14b24e2bSVaishali Kulkarni 	u8 wwpn[FCOE_TARGETS_WWPN_SIZE];
345*14b24e2bSVaishali Kulkarni 	u8 lun_id[FCOE_TARGETS_LUN_SIZE];
346*14b24e2bSVaishali Kulkarni };
347*14b24e2bSVaishali Kulkarni 
348*14b24e2bSVaishali Kulkarni struct bdn_fcoe_boot_cfg {
349*14b24e2bSVaishali Kulkarni 		u32 optional_bitmap;
350*14b24e2bSVaishali Kulkarni #define FCOE_CFG_CVID_PRESENT	(1<<0)
351*14b24e2bSVaishali Kulkarni #define FCOE_BASE_WWNN_PRESENT	(1<<1)
352*14b24e2bSVaishali Kulkarni #define FCOE_WWPN_PRESENT	(1<<2)
353*14b24e2bSVaishali Kulkarni 	bdn_cfg hdr;
354*14b24e2bSVaishali Kulkarni 	u32 cvid;
355*14b24e2bSVaishali Kulkarni 	u8 base_wwnn[FCOE_TARGETS_WWPN_SIZE]; /* Host World wide name*/
356*14b24e2bSVaishali Kulkarni 	u8 wwpn[FCOE_TARGETS_WWPN_SIZE]; /* base wwpn */
357*14b24e2bSVaishali Kulkarni 	u32 num_of_fcoe_targets;
358*14b24e2bSVaishali Kulkarni };
359*14b24e2bSVaishali Kulkarni 
360*14b24e2bSVaishali Kulkarni struct bdn_fcoe_boot_next_dlr {
361*14b24e2bSVaishali Kulkarni 	struct bdn_fcoe_boot_cfg cfg; /* Next device level reset */
362*14b24e2bSVaishali Kulkarni 	struct bdn_fcoe_targets fcoe_targets[8];
363*14b24e2bSVaishali Kulkarni };
364*14b24e2bSVaishali Kulkarni 
365*14b24e2bSVaishali Kulkarni struct bdn_fcoe_boot {
366*14b24e2bSVaishali Kulkarni 	struct bdn_fcoe_boot_next_dlr next_dlr; /* Next device level reset */
367*14b24e2bSVaishali Kulkarni };
368*14b24e2bSVaishali Kulkarni #ifndef PF_NUM_MAX
369*14b24e2bSVaishali Kulkarni #define PF_NUM_MAX 8
370*14b24e2bSVaishali Kulkarni #endif
371*14b24e2bSVaishali Kulkarni struct bdn_ncsi_next_dlr {
372*14b24e2bSVaishali Kulkarni 	bdn_cfg hdr;
373*14b24e2bSVaishali Kulkarni 	u32 ncsi_scid;
374*14b24e2bSVaishali Kulkarni };
375*14b24e2bSVaishali Kulkarni 
376*14b24e2bSVaishali Kulkarni struct bdn_ncsi {
377*14b24e2bSVaishali Kulkarni 	struct bdn_ncsi_next_dlr bdn_ncsi_next_dlr;
378*14b24e2bSVaishali Kulkarni };
379*14b24e2bSVaishali Kulkarni 
380*14b24e2bSVaishali Kulkarni // Rapid-Response-Poll-Module definition
381*14b24e2bSVaishali Kulkarni #define MAX_CCT_SIZE			64
382*14b24e2bSVaishali Kulkarni #define VALID_RPP_SIGNATURE		0x69616853
383*14b24e2bSVaishali Kulkarni struct rpp_sum_stc {
384*14b24e2bSVaishali Kulkarni 	u32 hash;
385*14b24e2bSVaishali Kulkarni 	u32 num;
386*14b24e2bSVaishali Kulkarni };
387*14b24e2bSVaishali Kulkarni 
388*14b24e2bSVaishali Kulkarni struct digest_stc {
389*14b24e2bSVaishali Kulkarni 	u8 type;
390*14b24e2bSVaishali Kulkarni 	u8 inst;
391*14b24e2bSVaishali Kulkarni 	u16 digest;
392*14b24e2bSVaishali Kulkarni };
393*14b24e2bSVaishali Kulkarni 
394*14b24e2bSVaishali Kulkarni struct bdn_rapid_respon_stc {
395*14b24e2bSVaishali Kulkarni 	u32 sig;
396*14b24e2bSVaishali Kulkarni 	struct rpp_sum_stc rpp_sum;
397*14b24e2bSVaishali Kulkarni 	u8 num_of_cct;
398*14b24e2bSVaishali Kulkarni 	u8 res[3];
399*14b24e2bSVaishali Kulkarni 	struct digest_stc cct[MAX_CCT_SIZE];
400*14b24e2bSVaishali Kulkarni #ifdef CONFIG_SUPPORT_SCI
401*14b24e2bSVaishali Kulkarni 	struct digest_stc sci[MAX_CCT_SIZE];
402*14b24e2bSVaishali Kulkarni #endif
403*14b24e2bSVaishali Kulkarni };
404*14b24e2bSVaishali Kulkarni 
405*14b24e2bSVaishali Kulkarni struct bdn {
406*14b24e2bSVaishali Kulkarni 	u32 size;
407*14b24e2bSVaishali Kulkarni 	struct base_dev	base_dev;
408*14b24e2bSVaishali Kulkarni 	struct server_info server_info;
409*14b24e2bSVaishali Kulkarni 	struct bdn_netport netport[MCP_GLOB_PORT_MAX * MCP_GLOB_PATH_MAX];
410*14b24e2bSVaishali Kulkarni 	struct bdn_flex_func flexfunc[PF_NUM_MAX];
411*14b24e2bSVaishali Kulkarni 	struct bdn_fc_npiv fc_npiv[MCP_GLOB_PORT_MAX * MCP_GLOB_PATH_MAX];
412*14b24e2bSVaishali Kulkarni 	struct bdn_iscsi_boot iscsi_boot[MCP_GLOB_PORT_MAX * MCP_GLOB_PATH_MAX];
413*14b24e2bSVaishali Kulkarni 	struct bdn_fcoe_boot fcoe_boot[MCP_GLOB_PORT_MAX * MCP_GLOB_PATH_MAX];
414*14b24e2bSVaishali Kulkarni 	struct bdn_ncsi ncsi;
415*14b24e2bSVaishali Kulkarni 	struct bdn_rapid_respon_stc rpp_stc;
416*14b24e2bSVaishali Kulkarni 	struct enclosure_id serv_info_enc_id;
417*14b24e2bSVaishali Kulkarni 	u32 crc;
418*14b24e2bSVaishali Kulkarni };
419*14b24e2bSVaishali Kulkarni 
420*14b24e2bSVaishali Kulkarni union bdn_image {
421*14b24e2bSVaishali Kulkarni 	struct bdn bdn;
422*14b24e2bSVaishali Kulkarni 	u8 rsrv[0x9000];
423*14b24e2bSVaishali Kulkarni };
424*14b24e2bSVaishali Kulkarni 
425*14b24e2bSVaishali Kulkarni /* Expected BDN size is basically the offset of rsrv within the bdn structure */
426*14b24e2bSVaishali Kulkarni #define BDN_SIZE (sizeof(struct bdn))
427*14b24e2bSVaishali Kulkarni #define BDN_SERVER_INFO()		  (ASN1_P->bdn_addr + OFFSETOF(struct bdn, server_info))
428*14b24e2bSVaishali Kulkarni #define BDN_BASE_DEV_NEXT_OS()		   (ASN1_P->bdn_addr + OFFSETOF(struct bdn, base_dev.next_os))
429*14b24e2bSVaishali Kulkarni #define BDN_BASE_DEV_NOW()			  (ASN1_P->bdn_addr + OFFSETOF(struct bdn, base_dev.now))
430*14b24e2bSVaishali Kulkarni /* #define BDN_CODEC_INFO()		  (ASN1_P->bdn_addr + OFFSETOF(struct bdn, codec_info)) */
431*14b24e2bSVaishali Kulkarni /* #define BDN_CODEC_DATA()		  (ASN1_P->bdn_addr + OFFSETOF(struct bdn, codec)) */
432*14b24e2bSVaishali Kulkarni #define BDN_NETPORT_NOW(papo)		  (ASN1_P->bdn_addr + OFFSETOF(struct bdn, netport[(papo.path << 1) + papo.port].now))
433*14b24e2bSVaishali Kulkarni #define BDN_NETPORT_ON_PORT_RESET(papo)   (ASN1_P->bdn_addr + OFFSETOF(struct bdn, netport[(papo.path << 1) + papo.port].on_port_reset))
434*14b24e2bSVaishali Kulkarni #define BDN_NETPORT_NEXT_OS_BOOT(papo)	  (ASN1_P->bdn_addr + OFFSETOF(struct bdn, netport[(papo.path << 1) + papo.port].next_os_boot))
435*14b24e2bSVaishali Kulkarni #define BDN_NETPORT_DIAG_CTRL(papo)	  (ASN1_P->bdn_addr + OFFSETOF(struct bdn, netport[(papo.path << 1) + papo.port].diag_ctrl))
436*14b24e2bSVaishali Kulkarni #define BDN_FLEXFUNC_NOW(pf_num)	  (ASN1_P->bdn_addr + OFFSETOF(struct bdn, flexfunc[pf_num].now))
437*14b24e2bSVaishali Kulkarni #define BDN_FLEXFUNC_NEXT_OS_BOOT(pf_num) (ASN1_P->bdn_addr + OFFSETOF(struct bdn, flexfunc[pf_num].next_os_boot))
438*14b24e2bSVaishali Kulkarni #define BDN_FLEXFUNC_DIAG_CTRL(pf_num)	  (ASN1_P->bdn_addr + OFFSETOF(struct bdn, flexfunc[pf_num].diag_ctrl))
439*14b24e2bSVaishali Kulkarni #define BDN_FC_NPIV_NOW(papo)		  (ASN1_P->bdn_addr + OFFSETOF(struct bdn, fc_npiv[(papo.path << 1) + papo.port].now))
440*14b24e2bSVaishali Kulkarni #define BDN_FC_NPIV_NOW_CFG(papo)		  (ASN1_P->bdn_addr + OFFSETOF(struct bdn, fc_npiv[(papo.path << 1) + papo.port].now.fc_npiv_cfg))
441*14b24e2bSVaishali Kulkarni #define BDN_FC_NPIV_NOW_SETTINGS(papo, idx)		  (ASN1_P->bdn_addr + OFFSETOF(struct bdn, fc_npiv[(papo.path << 1) + papo.port].now.settings[idx]))
442*14b24e2bSVaishali Kulkarni #define BDN_ISCSI_BOOT_NEXT_DLR_CFG(papo)	  (ASN1_P->bdn_addr + OFFSETOF(struct bdn, iscsi_boot[(papo.path << 1) + papo.port].next_dlr.cfg))
443*14b24e2bSVaishali Kulkarni #define BDN_ISCSI_BOOT_NEXT_DLR_INITIATOR(papo)	  (ASN1_P->bdn_addr + OFFSETOF(struct bdn, iscsi_boot[(papo.path << 1) + papo.port].next_dlr.initiator_cfg))
444*14b24e2bSVaishali Kulkarni #define BDN_ISCSI_BOOT_NEXT_DLR_TARGET(papo)	  (ASN1_P->bdn_addr + OFFSETOF(struct bdn, iscsi_boot[(papo.path << 1) + papo.port].next_dlr.target_params))
445*14b24e2bSVaishali Kulkarni #define BDN_ISCSI_BOOT_NEXT_DLR_AUTHENTICATION(papo)	  (ASN1_P->bdn_addr + OFFSETOF(struct bdn, iscsi_boot[(papo.path << 1) + papo.port].next_dlr.authentication))
446*14b24e2bSVaishali Kulkarni #define BDN_FCOE_BOOT_NEXT_DLR_CFG(papo)	  (ASN1_P->bdn_addr + OFFSETOF(struct bdn, fcoe_boot[(papo.path << 1) + papo.port].next_dlr.cfg))
447*14b24e2bSVaishali Kulkarni #define BDN_FCOE_BOOT_NEXT_DLR_TARGET(papo, idx)	 (ASN1_P->bdn_addr + OFFSETOF(struct bdn, fcoe_boot[(papo.path << 1) + papo.port].next_dlr.fcoe_targets[idx]))
448*14b24e2bSVaishali Kulkarni #define BDN_NCSI_NEXT_DLR()	  (ASN1_P->bdn_addr + OFFSETOF(struct bdn, ncsi.bdn_ncsi_next_dlr))
449*14b24e2bSVaishali Kulkarni #define BDN_RAPID_RESPONSE		  (ASN1_P->bdn_addr + OFFSETOF(struct bdn, rpp_stc))
450*14b24e2bSVaishali Kulkarni #define BDN_SERV_INFO_ENC_ID()		  (ASN1_P->bdn_addr + OFFSETOF(struct bdn, serv_info_enc_id))
451*14b24e2bSVaishali Kulkarni #define BDN_CRC()			  (ASN1_P->bdn_addr + sizeof(union bdn_image))
452*14b24e2bSVaishali Kulkarni #endif
453*14b24e2bSVaishali Kulkarni 
454*14b24e2bSVaishali Kulkarni #define BDN_SIZE_IMAGE_MAX		(0x9000)
455*14b24e2bSVaishali Kulkarni 
456*14b24e2bSVaishali Kulkarni #define BDN_SIZE_OF_MAC			(6)
457*14b24e2bSVaishali Kulkarni #define BDN_SIZE_OF_WWN			(8)
458*14b24e2bSVaishali Kulkarni #define BDN_SIZE_OF_IPV4		(4)
459*14b24e2bSVaishali Kulkarni #define BDN_SIZE_OF_IPV6		(16)
460*14b24e2bSVaishali Kulkarni #define BDN_DIR_MAX			(8)
461*14b24e2bSVaishali Kulkarni #define BDN_SIZE_OF_PF_PER_PORT		(16)
462*14b24e2bSVaishali Kulkarni #define BDN_SIZE_OF_CONNECTION_ID	(16)
463*14b24e2bSVaishali Kulkarni #define BDN_SIZE_OF_C2SPCP_MAP		(9)
464*14b24e2bSVaishali Kulkarni #define BDN_SIZE_OF_ISCSI_NAME		(236)
465*14b24e2bSVaishali Kulkarni #define BDN_SIZE_OF_ISCSI_SEC		(16)
466*14b24e2bSVaishali Kulkarni #define BDN_SIZE_OF_FCOE_TARGETS	(8)
467*14b24e2bSVaishali Kulkarni #define BDN_SIZE_OF_FCOE_LUN_ID		(8)
468*14b24e2bSVaishali Kulkarni #define BDN_SIZE_OF_DHCP_VENDOR_ID	(32)
469*14b24e2bSVaishali Kulkarni #define BDN_SIZE_OF_SERV_DESC		(64)
470*14b24e2bSVaishali Kulkarni #define BDN_SIZE_OF_SERV_UUID		(36)
471*14b24e2bSVaishali Kulkarni #define BDN_SIZE_OF_SERV_SLOT		(32)
472*14b24e2bSVaishali Kulkarni #define BDN_NUM_OF_ILO_ADDR		(3)
473*14b24e2bSVaishali Kulkarni #define BDN_SIZE_OF_ILO_ADDR		(16)
474*14b24e2bSVaishali Kulkarni #define BDN_SIZE_OF_SERV_TIME		(20)
475*14b24e2bSVaishali Kulkarni #define BDN_SIZE_OF_ENCLOSURE_ID	(36)
476*14b24e2bSVaishali Kulkarni #define BDN_CCT_MAX_SIZE		(64)
477*14b24e2bSVaishali Kulkarni #define BDN_SCI_MAX_SIZE		(64)
478*14b24e2bSVaishali Kulkarni 
479*14b24e2bSVaishali Kulkarni struct bdn_dir {
480*14b24e2bSVaishali Kulkarni 	u16 offset;
481*14b24e2bSVaishali Kulkarni 	u16 length;
482*14b24e2bSVaishali Kulkarni };
483*14b24e2bSVaishali Kulkarni 
484*14b24e2bSVaishali Kulkarni #define BDN_DIR_CFG_NOW			(0)
485*14b24e2bSVaishali Kulkarni #define BDN_DIR_CFG_NEXT_FLR		(1)
486*14b24e2bSVaishali Kulkarni #define BDN_DIR_CFG_PORT_RESET		(2)
487*14b24e2bSVaishali Kulkarni #define BDN_DIR_CFG_NEXT_DLR		(3)
488*14b24e2bSVaishali Kulkarni #define BDN_DIR_CFG_NEXT_OS_BOOT	(4)
489*14b24e2bSVaishali Kulkarni #define BDN_DIR_CFG_NEXT_PWR_CYC	(5)
490*14b24e2bSVaishali Kulkarni #define BDN_DIR_CFG_DIAG_CTRL		(6)
491*14b24e2bSVaishali Kulkarni 
492*14b24e2bSVaishali Kulkarni typedef u32 bdn_cfg_state;
493*14b24e2bSVaishali Kulkarni #define BDN_CFG_STATE_MASK		0x000000ff
494*14b24e2bSVaishali Kulkarni #define BDN_CFG_STATE_OFFSET		0
495*14b24e2bSVaishali Kulkarni #define BDN_CFG_STATE_NA		0x00000000
496*14b24e2bSVaishali Kulkarni #define BDN_CFG_STATE_ACTIVE		0x00000001
497*14b24e2bSVaishali Kulkarni #define BDN_CFG_STATE_PENDING		0x00000002
498*14b24e2bSVaishali Kulkarni #define BDN_CFG_STATE_DEFAULT		0x00000004
499*14b24e2bSVaishali Kulkarni 
500*14b24e2bSVaishali Kulkarni #define BDN_CFG_STATE_IS(x, y)		((((x)->state & BDN_CFG_STATE_MASK) >> BDN_CFG_STATE_OFFSET) == BDN_CFG_STATE_##y)
501*14b24e2bSVaishali Kulkarni #define BDN_OPTIONAL_SET(x, y)		(x)->optional |= (1 << (y))
502*14b24e2bSVaishali Kulkarni #define BDN_OPTIONAL_CHECK(x, y)	((x)->optional & (1 << (y)))
503*14b24e2bSVaishali Kulkarni 
504*14b24e2bSVaishali Kulkarni /*.************************* Base-Device-Module************************* */
505*14b24e2bSVaishali Kulkarni struct bdn_base_now {
506*14b24e2bSVaishali Kulkarni 	bdn_cfg_state	state;
507*14b24e2bSVaishali Kulkarni 	u32		optional;
508*14b24e2bSVaishali Kulkarni 
509*14b24e2bSVaishali Kulkarni 	u32	rsv:24,
510*14b24e2bSVaishali Kulkarni 		dci_mgmt:8;
511*14b24e2bSVaishali Kulkarni 
512*14b24e2bSVaishali Kulkarni 	u32	rsrv;
513*14b24e2bSVaishali Kulkarni };
514*14b24e2bSVaishali Kulkarni 
515*14b24e2bSVaishali Kulkarni struct bdn_base_osb {
516*14b24e2bSVaishali Kulkarni 	bdn_cfg_state	state;
517*14b24e2bSVaishali Kulkarni 	u32		optional;
518*14b24e2bSVaishali Kulkarni 
519*14b24e2bSVaishali Kulkarni 	u32	rsv:31,
520*14b24e2bSVaishali Kulkarni 		reset_2_factory:1;
521*14b24e2bSVaishali Kulkarni 
522*14b24e2bSVaishali Kulkarni 	u32	rsrv;
523*14b24e2bSVaishali Kulkarni };
524*14b24e2bSVaishali Kulkarni 
525*14b24e2bSVaishali Kulkarni struct bdn_base {
526*14b24e2bSVaishali Kulkarni 	struct bdn_dir		dir[BDN_DIR_MAX];
527*14b24e2bSVaishali Kulkarni 
528*14b24e2bSVaishali Kulkarni 	struct bdn_base_now	now;
529*14b24e2bSVaishali Kulkarni 	struct bdn_base_osb	osb;	/* Next os reboot */
530*14b24e2bSVaishali Kulkarni };
531*14b24e2bSVaishali Kulkarni 
532*14b24e2bSVaishali Kulkarni /*.************************* Network-Device-Module********************** */
533*14b24e2bSVaishali Kulkarni struct bdn_nport_now {
534*14b24e2bSVaishali Kulkarni 	bdn_cfg_state	state;
535*14b24e2bSVaishali Kulkarni 	u32		optional;
536*14b24e2bSVaishali Kulkarni #define BDN_NETPORT_NOW_OPT_MIN_BW		(0)
537*14b24e2bSVaishali Kulkarni #define BDN_NETPORT_NOW_OPT_MAX_BW		(1)
538*14b24e2bSVaishali Kulkarni 
539*14b24e2bSVaishali Kulkarni 	u32	rsv:14,
540*14b24e2bSVaishali Kulkarni 		enable_port:1,
541*14b24e2bSVaishali Kulkarni 		enable_diag:1,
542*14b24e2bSVaishali Kulkarni 		num_pfs_min_bw:8,
543*14b24e2bSVaishali Kulkarni 		num_pfs_max_bw:8;
544*14b24e2bSVaishali Kulkarni 
545*14b24e2bSVaishali Kulkarni 	u8	min_bw[BDN_SIZE_OF_PF_PER_PORT];
546*14b24e2bSVaishali Kulkarni 	u8	max_bw[BDN_SIZE_OF_PF_PER_PORT];
547*14b24e2bSVaishali Kulkarni 
548*14b24e2bSVaishali Kulkarni 	u32	rsrv;
549*14b24e2bSVaishali Kulkarni };
550*14b24e2bSVaishali Kulkarni 
551*14b24e2bSVaishali Kulkarni struct bdn_nport_plr {
552*14b24e2bSVaishali Kulkarni 	bdn_cfg_state	state;
553*14b24e2bSVaishali Kulkarni 	u32		optional;
554*14b24e2bSVaishali Kulkarni #define BDN_NETPORT_RESET_OPT_ADV_SPEED		(0)
555*14b24e2bSVaishali Kulkarni #define BDN_NETPORT_RESET_OPT_FLOW_CTRL		(1)
556*14b24e2bSVaishali Kulkarni #define BDN_NETPORT_RESET_OPT_EEE_ENABLE	(2)
557*14b24e2bSVaishali Kulkarni 
558*14b24e2bSVaishali Kulkarni 	u32	rsv:11,
559*14b24e2bSVaishali Kulkarni 		eee_enable:1,
560*14b24e2bSVaishali Kulkarni 		flow_ctrl:4,
561*14b24e2bSVaishali Kulkarni 		adv_speed:16;
562*14b24e2bSVaishali Kulkarni 
563*14b24e2bSVaishali Kulkarni 	u32	rsrv;
564*14b24e2bSVaishali Kulkarni };
565*14b24e2bSVaishali Kulkarni 
566*14b24e2bSVaishali Kulkarni struct bdn_nport_osb {
567*14b24e2bSVaishali Kulkarni 	bdn_cfg_state	state;
568*14b24e2bSVaishali Kulkarni 	u32		optional;
569*14b24e2bSVaishali Kulkarni #define BDN_NETPORT_BOOT_OPT_NUM_VF		(0)
570*14b24e2bSVaishali Kulkarni #define BDN_NETPORT_BOOT_OPT_NPIV_ENABLE	(1)
571*14b24e2bSVaishali Kulkarni 
572*14b24e2bSVaishali Kulkarni 	u32	rsv:23,
573*14b24e2bSVaishali Kulkarni 		npiv_enable:1,
574*14b24e2bSVaishali Kulkarni 		num_pfs:8;
575*14b24e2bSVaishali Kulkarni 	u8	num_vfs[BDN_SIZE_OF_PF_PER_PORT];
576*14b24e2bSVaishali Kulkarni 
577*14b24e2bSVaishali Kulkarni 	u32	rsrv;
578*14b24e2bSVaishali Kulkarni };
579*14b24e2bSVaishali Kulkarni 
580*14b24e2bSVaishali Kulkarni struct bdn_nport_dgn {
581*14b24e2bSVaishali Kulkarni 	bdn_cfg_state	state;
582*14b24e2bSVaishali Kulkarni 	u32		optional;
583*14b24e2bSVaishali Kulkarni 
584*14b24e2bSVaishali Kulkarni 	u32	rsv:29,
585*14b24e2bSVaishali Kulkarni 		port_reset:1,
586*14b24e2bSVaishali Kulkarni 		local_loopback:1,
587*14b24e2bSVaishali Kulkarni 		remote_loopback:1;
588*14b24e2bSVaishali Kulkarni 
589*14b24e2bSVaishali Kulkarni 	u32	rsrv;
590*14b24e2bSVaishali Kulkarni };
591*14b24e2bSVaishali Kulkarni 
592*14b24e2bSVaishali Kulkarni struct bdn_nport {
593*14b24e2bSVaishali Kulkarni 	struct bdn_dir		dir[BDN_DIR_MAX];
594*14b24e2bSVaishali Kulkarni 
595*14b24e2bSVaishali Kulkarni 	struct bdn_nport_now	now;
596*14b24e2bSVaishali Kulkarni 	struct bdn_nport_plr	plr;	/* Next device level reset */
597*14b24e2bSVaishali Kulkarni 	struct bdn_nport_osb	osb;	/* Next os reboot */
598*14b24e2bSVaishali Kulkarni 	struct bdn_nport_dgn	dgn;
599*14b24e2bSVaishali Kulkarni };
600*14b24e2bSVaishali Kulkarni 
601*14b24e2bSVaishali Kulkarni /* ************************* FlexFunc-Module************************* */
602*14b24e2bSVaishali Kulkarni struct bdn_flex_now {
603*14b24e2bSVaishali Kulkarni 	bdn_cfg_state	state;
604*14b24e2bSVaishali Kulkarni 	u32		optional;
605*14b24e2bSVaishali Kulkarni 
606*14b24e2bSVaishali Kulkarni 	u8	connection_id[BDN_SIZE_OF_CONNECTION_ID];
607*14b24e2bSVaishali Kulkarni 	u32	rsv:31,
608*14b24e2bSVaishali Kulkarni 		fnic_enabled:1;
609*14b24e2bSVaishali Kulkarni 
610*14b24e2bSVaishali Kulkarni 	u32	rsrv;
611*14b24e2bSVaishali Kulkarni };
612*14b24e2bSVaishali Kulkarni 
613*14b24e2bSVaishali Kulkarni struct bdn_flex_dlr {
614*14b24e2bSVaishali Kulkarni 	bdn_cfg_state	state;
615*14b24e2bSVaishali Kulkarni 	u32		optional;
616*14b24e2bSVaishali Kulkarni #define BDN_FLEXFUNC_DLR_OPT_FC_WWNN		(0)
617*14b24e2bSVaishali Kulkarni #define BDN_FLEXFUNC_DLR_OPT_FC_WWPN		(1)
618*14b24e2bSVaishali Kulkarni 
619*14b24e2bSVaishali Kulkarni 	u8	fc_wwnn[BDN_SIZE_OF_WWN];
620*14b24e2bSVaishali Kulkarni 	u8	fc_wwpn[BDN_SIZE_OF_WWN];
621*14b24e2bSVaishali Kulkarni 
622*14b24e2bSVaishali Kulkarni 	u32	rsrv[2];
623*14b24e2bSVaishali Kulkarni };
624*14b24e2bSVaishali Kulkarni 
625*14b24e2bSVaishali Kulkarni struct bdn_flex_osb {
626*14b24e2bSVaishali Kulkarni 	bdn_cfg_state	state;
627*14b24e2bSVaishali Kulkarni 	u32		optional;
628*14b24e2bSVaishali Kulkarni #define BDN_FLEXFUNC_BOOT_OPT_C2SPCP_MAP	(0)
629*14b24e2bSVaishali Kulkarni #define BDN_FLEXFUNC_BOOT_OPT_PORT_ASSIGNMENT	(1)
630*14b24e2bSVaishali Kulkarni #define BDN_FLEXFUNC_BOOT_OPT_EMB_LAG		(2)
631*14b24e2bSVaishali Kulkarni #define BDN_FLEXFUNC_BOOT_OPT_MTU_SIZE		(3)
632*14b24e2bSVaishali Kulkarni #define BDN_FLEXFUNC_BOOT_OPT_OVER_MTU		(4)
633*14b24e2bSVaishali Kulkarni 
634*14b24e2bSVaishali Kulkarni 	u8	mac_addr[BDN_SIZE_OF_MAC];
635*14b24e2bSVaishali Kulkarni 	u8	c_2_s_pcp_map[BDN_SIZE_OF_C2SPCP_MAP];
636*14b24e2bSVaishali Kulkarni 	/*  Maps O/S C-VLAN PCP value to S-VLAN PCP value for TX
637*14b24e2bSVaishali Kulkarni 	 * -- items 1-8 correspond to the O/S C-VLAN PCP values 0-7
638*14b24e2bSVaishali Kulkarni 	 * -- item 9 is the default if no C-VLAN present
639*14b24e2bSVaishali Kulkarni 	 * -- Values in these 9 bytes are the expected S-PCP values.
640*14b24e2bSVaishali Kulkarni 	 * -- If NetDev-Device-Module: EVB-Support.c-2-s-pcp-map = FALSE, then
641*14b24e2bSVaishali Kulkarni 	 * --     all values must be identical
642*14b24e2bSVaishali Kulkarni 	 * -- else, it supports C-PCP -> S-PCP mapping
643*14b24e2bSVaishali Kulkarni 	 */
644*14b24e2bSVaishali Kulkarni 	u8	func_type;
645*14b24e2bSVaishali Kulkarni 	u32	rsv:2,
646*14b24e2bSVaishali Kulkarni 		valid_mac_addr:1,
647*14b24e2bSVaishali Kulkarni 		override_mtu:1,
648*14b24e2bSVaishali Kulkarni 		boot_mode:4,
649*14b24e2bSVaishali Kulkarni 		port_assign:4,
650*14b24e2bSVaishali Kulkarni 		emb_lag:4,
651*14b24e2bSVaishali Kulkarni 		mtu_size:16;
652*14b24e2bSVaishali Kulkarni 
653*14b24e2bSVaishali Kulkarni 	u32	rsrv;
654*14b24e2bSVaishali Kulkarni };
655*14b24e2bSVaishali Kulkarni 
656*14b24e2bSVaishali Kulkarni struct bdn_flex_dgn {
657*14b24e2bSVaishali Kulkarni 	bdn_cfg_state	state;
658*14b24e2bSVaishali Kulkarni 	u32		optional;
659*14b24e2bSVaishali Kulkarni 
660*14b24e2bSVaishali Kulkarni 	u32	rsv:31,
661*14b24e2bSVaishali Kulkarni 		enable_wol:1;
662*14b24e2bSVaishali Kulkarni 
663*14b24e2bSVaishali Kulkarni 	u32	rsrv;
664*14b24e2bSVaishali Kulkarni };
665*14b24e2bSVaishali Kulkarni 
666*14b24e2bSVaishali Kulkarni struct bdn_flex {
667*14b24e2bSVaishali Kulkarni 	struct bdn_dir		dir[BDN_DIR_MAX];
668*14b24e2bSVaishali Kulkarni 
669*14b24e2bSVaishali Kulkarni 	struct bdn_flex_now	now;
670*14b24e2bSVaishali Kulkarni 	struct bdn_flex_dlr	dlr;	/* Next device level reset */
671*14b24e2bSVaishali Kulkarni 	struct bdn_flex_osb	osb;	/* Next os reboot */
672*14b24e2bSVaishali Kulkarni 	struct bdn_flex_dgn	dgn;
673*14b24e2bSVaishali Kulkarni };
674*14b24e2bSVaishali Kulkarni 
675*14b24e2bSVaishali Kulkarni /* ************************* FC-NPIV-Module************************* */
676*14b24e2bSVaishali Kulkarni struct bdn_npiv_dlr {
677*14b24e2bSVaishali Kulkarni 	bdn_cfg_state	state;
678*14b24e2bSVaishali Kulkarni 	u32		optional;
679*14b24e2bSVaishali Kulkarni 
680*14b24e2bSVaishali Kulkarni 	struct dci_fc_npiv_tbl	npiv_tbl;
681*14b24e2bSVaishali Kulkarni };
682*14b24e2bSVaishali Kulkarni 
683*14b24e2bSVaishali Kulkarni struct bdn_npiv {
684*14b24e2bSVaishali Kulkarni 	struct bdn_dir		dir[BDN_DIR_MAX];
685*14b24e2bSVaishali Kulkarni 
686*14b24e2bSVaishali Kulkarni 	struct bdn_npiv_dlr	dlr;	/* Next device level reset */
687*14b24e2bSVaishali Kulkarni };
688*14b24e2bSVaishali Kulkarni 
689*14b24e2bSVaishali Kulkarni /* ************************* iSCSI-Boot-Module************************* */
690*14b24e2bSVaishali Kulkarni struct bdn_iscsi_init {
691*14b24e2bSVaishali Kulkarni 	u32	rsv:21,
692*14b24e2bSVaishali Kulkarni 		opt_route:1,
693*14b24e2bSVaishali Kulkarni 		opt_pri_dns:1,
694*14b24e2bSVaishali Kulkarni 		opt_sec_dns:1,
695*14b24e2bSVaishali Kulkarni 		name_size:8;
696*14b24e2bSVaishali Kulkarni 
697*14b24e2bSVaishali Kulkarni 	u8	ip_add[BDN_SIZE_OF_IPV6];
698*14b24e2bSVaishali Kulkarni 	u8	netmask[BDN_SIZE_OF_IPV6];
699*14b24e2bSVaishali Kulkarni 	u8	route[BDN_SIZE_OF_IPV6];
700*14b24e2bSVaishali Kulkarni 	u8	primary_dns[BDN_SIZE_OF_IPV6];
701*14b24e2bSVaishali Kulkarni 	u8	secondary_dns[BDN_SIZE_OF_IPV6];
702*14b24e2bSVaishali Kulkarni 	u8	name[BDN_SIZE_OF_ISCSI_NAME];
703*14b24e2bSVaishali Kulkarni };
704*14b24e2bSVaishali Kulkarni 
705*14b24e2bSVaishali Kulkarni struct bdn_iscsi_trgt {
706*14b24e2bSVaishali Kulkarni 	u32 optional;
707*14b24e2bSVaishali Kulkarni #define BDN_ISCSI_TARGET_OPT_LLMNR_ENABLE	(0)
708*14b24e2bSVaishali Kulkarni #define BDN_ISCSI_TARGET_OPT_ROUTE_ADV_ENABLE	(1)
709*14b24e2bSVaishali Kulkarni 
710*14b24e2bSVaishali Kulkarni 	u32	rsv:21,
711*14b24e2bSVaishali Kulkarni 		opt_ip2:1,
712*14b24e2bSVaishali Kulkarni 		llmnr_en:1,
713*14b24e2bSVaishali Kulkarni 		route_adv_en:1,
714*14b24e2bSVaishali Kulkarni 		name_size:8;
715*14b24e2bSVaishali Kulkarni 
716*14b24e2bSVaishali Kulkarni 	u32	lun;
717*14b24e2bSVaishali Kulkarni 	u16	tcpport;
718*14b24e2bSVaishali Kulkarni 	u16	tcpport2;
719*14b24e2bSVaishali Kulkarni 
720*14b24e2bSVaishali Kulkarni 	u8	ip[BDN_SIZE_OF_IPV6];
721*14b24e2bSVaishali Kulkarni 	u8	ip2[BDN_SIZE_OF_IPV6];
722*14b24e2bSVaishali Kulkarni 	u8	name[BDN_SIZE_OF_ISCSI_NAME];
723*14b24e2bSVaishali Kulkarni 
724*14b24e2bSVaishali Kulkarni 	u32	rsrv;
725*14b24e2bSVaishali Kulkarni };
726*14b24e2bSVaishali Kulkarni 
727*14b24e2bSVaishali Kulkarni struct bdn_iscsi_auth {
728*14b24e2bSVaishali Kulkarni 	u32	rsv:2,
729*14b24e2bSVaishali Kulkarni 		c_sec_size:6,
730*14b24e2bSVaishali Kulkarni 		auth_method:2,
731*14b24e2bSVaishali Kulkarni 		m_sec_size:6,
732*14b24e2bSVaishali Kulkarni 		c_name_size:8,
733*14b24e2bSVaishali Kulkarni 		m_name_size:8;
734*14b24e2bSVaishali Kulkarni 
735*14b24e2bSVaishali Kulkarni 	u8	chap_username[BDN_SIZE_OF_ISCSI_NAME];
736*14b24e2bSVaishali Kulkarni 	u8	chap_secret[BDN_SIZE_OF_ISCSI_SEC];
737*14b24e2bSVaishali Kulkarni 	u8	mutual_username[BDN_SIZE_OF_ISCSI_NAME];
738*14b24e2bSVaishali Kulkarni 	u8	mutual_secret[BDN_SIZE_OF_ISCSI_SEC];
739*14b24e2bSVaishali Kulkarni 
740*14b24e2bSVaishali Kulkarni 	u32	rsrv;
741*14b24e2bSVaishali Kulkarni };
742*14b24e2bSVaishali Kulkarni 
743*14b24e2bSVaishali Kulkarni struct bdn_iboot_dlr {
744*14b24e2bSVaishali Kulkarni 	bdn_cfg_state	state;
745*14b24e2bSVaishali Kulkarni 	u32		optional;
746*14b24e2bSVaishali Kulkarni #define BDN_ISCSI_BOOT_OPT_CVID			(0)
747*14b24e2bSVaishali Kulkarni #define BDN_ISCSI_BOOT_OPT_INITIATOR		(1)
748*14b24e2bSVaishali Kulkarni #define BDN_ISCSI_BOOT_OPT_TARGET		(2)
749*14b24e2bSVaishali Kulkarni #define BDN_ISCSI_BOOT_OPT_AUTH			(3)
750*14b24e2bSVaishali Kulkarni #define BDN_ISCSI_BOOT_OPT_HEAD_DIGEST_EN	(4)
751*14b24e2bSVaishali Kulkarni #define BDN_ISCSI_BOOT_OPT_DATA_DIGEST_EN	(5)
752*14b24e2bSVaishali Kulkarni 
753*14b24e2bSVaishali Kulkarni 	u32	rsv:4,
754*14b24e2bSVaishali Kulkarni 		initiator_dhcp:1,
755*14b24e2bSVaishali Kulkarni 		target_dhcp:1,
756*14b24e2bSVaishali Kulkarni 		head_digest_en:1,
757*14b24e2bSVaishali Kulkarni 		data_digest_en:1,
758*14b24e2bSVaishali Kulkarni 		dhcp_vendor_id_size:8,
759*14b24e2bSVaishali Kulkarni 		ip_type:4,
760*14b24e2bSVaishali Kulkarni 		cvid:12;
761*14b24e2bSVaishali Kulkarni 
762*14b24e2bSVaishali Kulkarni 	u8	dhcp_vendor_id[BDN_SIZE_OF_DHCP_VENDOR_ID];
763*14b24e2bSVaishali Kulkarni 
764*14b24e2bSVaishali Kulkarni 	u32	rsrv;
765*14b24e2bSVaishali Kulkarni 
766*14b24e2bSVaishali Kulkarni 	struct bdn_iscsi_init	init;
767*14b24e2bSVaishali Kulkarni 	struct bdn_iscsi_trgt	trgt;
768*14b24e2bSVaishali Kulkarni 	struct bdn_iscsi_auth	auth;
769*14b24e2bSVaishali Kulkarni };
770*14b24e2bSVaishali Kulkarni 
771*14b24e2bSVaishali Kulkarni struct bdn_iboot {
772*14b24e2bSVaishali Kulkarni 	struct bdn_dir		dir[BDN_DIR_MAX];
773*14b24e2bSVaishali Kulkarni 
774*14b24e2bSVaishali Kulkarni 	struct bdn_iboot_dlr	dlr;	/* Next device level reset */
775*14b24e2bSVaishali Kulkarni };
776*14b24e2bSVaishali Kulkarni 
777*14b24e2bSVaishali Kulkarni /* ************************* FCoE-Boot-Module************************* */
778*14b24e2bSVaishali Kulkarni struct bdn_fcoe_trgt {
779*14b24e2bSVaishali Kulkarni 	u8 wwpn[BDN_SIZE_OF_WWN];
780*14b24e2bSVaishali Kulkarni 	u8 lunid[BDN_SIZE_OF_FCOE_LUN_ID];
781*14b24e2bSVaishali Kulkarni };
782*14b24e2bSVaishali Kulkarni 
783*14b24e2bSVaishali Kulkarni struct bdn_fboot_dlr {
784*14b24e2bSVaishali Kulkarni 	bdn_cfg_state	state;
785*14b24e2bSVaishali Kulkarni 	u32		optional;
786*14b24e2bSVaishali Kulkarni 
787*14b24e2bSVaishali Kulkarni 	u32	rsv:24,
788*14b24e2bSVaishali Kulkarni 		num_of_targets:4;
789*14b24e2bSVaishali Kulkarni 
790*14b24e2bSVaishali Kulkarni 	struct bdn_fcoe_trgt trgt[BDN_SIZE_OF_FCOE_TARGETS];
791*14b24e2bSVaishali Kulkarni 
792*14b24e2bSVaishali Kulkarni 	u32	rsrv;
793*14b24e2bSVaishali Kulkarni };
794*14b24e2bSVaishali Kulkarni 
795*14b24e2bSVaishali Kulkarni struct bdn_fboot {
796*14b24e2bSVaishali Kulkarni 	struct bdn_dir		dir[BDN_DIR_MAX];
797*14b24e2bSVaishali Kulkarni 
798*14b24e2bSVaishali Kulkarni 	struct bdn_fboot_dlr	dlr;	 /* Next device level reset */
799*14b24e2bSVaishali Kulkarni };
800*14b24e2bSVaishali Kulkarni 
801*14b24e2bSVaishali Kulkarni /* *************************    NCSI-Module    ************************* */
802*14b24e2bSVaishali Kulkarni struct bdn_ncsi_dlr {
803*14b24e2bSVaishali Kulkarni 	bdn_cfg_state	state;
804*14b24e2bSVaishali Kulkarni 	u32		optional;
805*14b24e2bSVaishali Kulkarni 
806*14b24e2bSVaishali Kulkarni 	u32	ncsi_scid:12,
807*14b24e2bSVaishali Kulkarni 		rsv:20;
808*14b24e2bSVaishali Kulkarni 	u32	rsv2;
809*14b24e2bSVaishali Kulkarni };
810*14b24e2bSVaishali Kulkarni 
811*14b24e2bSVaishali Kulkarni struct bdn_ncsi {
812*14b24e2bSVaishali Kulkarni 	struct bdn_dir		dir[BDN_DIR_MAX];
813*14b24e2bSVaishali Kulkarni 
814*14b24e2bSVaishali Kulkarni 	struct bdn_ncsi_dlr	dlr;
815*14b24e2bSVaishali Kulkarni };
816*14b24e2bSVaishali Kulkarni 
817*14b24e2bSVaishali Kulkarni /* ************************* Server-Info-Module************************* */
818*14b24e2bSVaishali Kulkarni struct bdn_serv {
819*14b24e2bSVaishali Kulkarni 	bdn_cfg_state	state;
820*14b24e2bSVaishali Kulkarni 	u32		optional;
821*14b24e2bSVaishali Kulkarni #define BDN_SERV_INFO_OPT_ILO_VLAN	(0)
822*14b24e2bSVaishali Kulkarni #define BDN_SERV_INFO_OPT_TIMESTAMP	(1)
823*14b24e2bSVaishali Kulkarni #define BDN_SERV_INFO_OPT_ENCLOSURE	(2)
824*14b24e2bSVaishali Kulkarni 
825*14b24e2bSVaishali Kulkarni 	u16 ilo_vlan;
826*14b24e2bSVaishali Kulkarni 	u8 serv_desc_size;
827*14b24e2bSVaishali Kulkarni 	u8 serv_uuid_size;
828*14b24e2bSVaishali Kulkarni 	u8 slot_info_size;
829*14b24e2bSVaishali Kulkarni 	u8 timestamp_size;
830*14b24e2bSVaishali Kulkarni 	u8 enclosure_size;
831*14b24e2bSVaishali Kulkarni 	u8 ilo_addr_num;
832*14b24e2bSVaishali Kulkarni 	u8 ilo_addr_size[BDN_NUM_OF_ILO_ADDR];
833*14b24e2bSVaishali Kulkarni 	u8 crc8; /* the crc8 from last put command */
834*14b24e2bSVaishali Kulkarni 
835*14b24e2bSVaishali Kulkarni 	u8 serv_desc[BDN_SIZE_OF_SERV_DESC];
836*14b24e2bSVaishali Kulkarni 	u8 serv_uuid[BDN_SIZE_OF_SERV_UUID];
837*14b24e2bSVaishali Kulkarni 	u8 slot_info[BDN_SIZE_OF_SERV_SLOT];
838*14b24e2bSVaishali Kulkarni 	u8 ilo_addr[BDN_NUM_OF_ILO_ADDR][BDN_SIZE_OF_ILO_ADDR];
839*14b24e2bSVaishali Kulkarni 	u8 timestamp[BDN_SIZE_OF_SERV_TIME];
840*14b24e2bSVaishali Kulkarni 	u8 enclosure[BDN_SIZE_OF_ENCLOSURE_ID];
841*14b24e2bSVaishali Kulkarni };
842*14b24e2bSVaishali Kulkarni 
843*14b24e2bSVaishali Kulkarni /* ********************* Rapid-Response-Poll-Module ******************** */
844*14b24e2bSVaishali Kulkarni struct bdn_rrp_digest {
845*14b24e2bSVaishali Kulkarni 	u8	object;
846*14b24e2bSVaishali Kulkarni 	u8	index;	/* the index from zero */
847*14b24e2bSVaishali Kulkarni 	u16	digest;
848*14b24e2bSVaishali Kulkarni };
849*14b24e2bSVaishali Kulkarni 
850*14b24e2bSVaishali Kulkarni struct bdn_rrp {
851*14b24e2bSVaishali Kulkarni 	bdn_cfg_state	state;
852*14b24e2bSVaishali Kulkarni 	u32		optional;
853*14b24e2bSVaishali Kulkarni #define BDN_RRP_OPT_CCT		(0)
854*14b24e2bSVaishali Kulkarni #define BDN_RRP_OPT_SCI		(1)
855*14b24e2bSVaishali Kulkarni 
856*14b24e2bSVaishali Kulkarni 	u32	hash;
857*14b24e2bSVaishali Kulkarni 	u32	num_cct:8,
858*14b24e2bSVaishali Kulkarni 		num_sci:8,
859*14b24e2bSVaishali Kulkarni 		rsv:16;
860*14b24e2bSVaishali Kulkarni 
861*14b24e2bSVaishali Kulkarni 	struct bdn_rrp_digest cct[BDN_CCT_MAX_SIZE];
862*14b24e2bSVaishali Kulkarni 	struct bdn_rrp_digest sci[BDN_SCI_MAX_SIZE];
863*14b24e2bSVaishali Kulkarni };
864*14b24e2bSVaishali Kulkarni 
865*14b24e2bSVaishali Kulkarni /* 0x20 bytes */
866*14b24e2bSVaishali Kulkarni struct bdn_head {
867*14b24e2bSVaishali Kulkarni 	u32	signature;
868*14b24e2bSVaishali Kulkarni #define BDN_HEAD_SIGN_SHIFT		(8)
869*14b24e2bSVaishali Kulkarni #define BDN_HEAD_SIGN_MASK		(0xffffff << BDN_HEAD_SIGN_SHIFT)
870*14b24e2bSVaishali Kulkarni #define BDN_HEAD_SIGN_VALID		(((u32)'B' << 16) | ((u32)'D' << 8) | 'N')
871*14b24e2bSVaishali Kulkarni #define BDN_HEAD_SIGN_VER_SHIFT		(0)
872*14b24e2bSVaishali Kulkarni #define BDN_HEAD_SIGN_VER_MASK		(0xff << BDN_HEAD_SIGN_VER_SHIFT)
873*14b24e2bSVaishali Kulkarni #define BDN_HEAD_SIGN_VER_CURRENT	(1)
874*14b24e2bSVaishali Kulkarni #define BDN_HEAD_SIGN_CURRENT		((BDN_HEAD_SIGN_VALID << BDN_HEAD_SIGN_SHIFT) | (BDN_HEAD_SIGN_VER_CURRENT << BDN_HEAD_SIGN_VER_SHIFT))
875*14b24e2bSVaishali Kulkarni 
876*14b24e2bSVaishali Kulkarni 	u32	num_port:8,
877*14b24e2bSVaishali Kulkarni 		num_func:8,
878*14b24e2bSVaishali Kulkarni 		rsrv_bit:16;
879*14b24e2bSVaishali Kulkarni 
880*14b24e2bSVaishali Kulkarni 	struct bdn_dir	glob;
881*14b24e2bSVaishali Kulkarni 	struct bdn_dir	port;
882*14b24e2bSVaishali Kulkarni 	struct bdn_dir	func;
883*14b24e2bSVaishali Kulkarni 
884*14b24e2bSVaishali Kulkarni 	u32	rsrv[3];
885*14b24e2bSVaishali Kulkarni };
886*14b24e2bSVaishali Kulkarni 
887*14b24e2bSVaishali Kulkarni struct bdn_glob {
888*14b24e2bSVaishali Kulkarni #define BDN_DIR_GLOB_SERV_INFO		0
889*14b24e2bSVaishali Kulkarni #define BDN_DIR_GLOB_BASE_DEV		1
890*14b24e2bSVaishali Kulkarni #define BDN_DIR_GLOB_NCSI		2
891*14b24e2bSVaishali Kulkarni #define BDN_DIR_GLOB_RRP		3
892*14b24e2bSVaishali Kulkarni 	struct bdn_dir	dir[BDN_DIR_MAX];
893*14b24e2bSVaishali Kulkarni 
894*14b24e2bSVaishali Kulkarni 	struct bdn_serv	serv;
895*14b24e2bSVaishali Kulkarni 	struct bdn_base	base;
896*14b24e2bSVaishali Kulkarni 	struct bdn_ncsi	ncsi;
897*14b24e2bSVaishali Kulkarni 	struct bdn_rrp	rrp;
898*14b24e2bSVaishali Kulkarni 
899*14b24e2bSVaishali Kulkarni 	u32	rsrv[8];
900*14b24e2bSVaishali Kulkarni };
901*14b24e2bSVaishali Kulkarni 
902*14b24e2bSVaishali Kulkarni struct bdn_port {
903*14b24e2bSVaishali Kulkarni #define BDN_DIR_PORT_NETPORT		0
904*14b24e2bSVaishali Kulkarni #define BDN_DIR_PORT_FC_NPIV		1
905*14b24e2bSVaishali Kulkarni #define BDN_DIR_PORT_ISCSI_BOOT		2
906*14b24e2bSVaishali Kulkarni #define BDN_DIR_PORT_FCOE_BOOT		3
907*14b24e2bSVaishali Kulkarni 	struct bdn_dir		dir[BDN_DIR_MAX];
908*14b24e2bSVaishali Kulkarni 
909*14b24e2bSVaishali Kulkarni 	struct bdn_nport	port;
910*14b24e2bSVaishali Kulkarni 	struct bdn_npiv		npiv;
911*14b24e2bSVaishali Kulkarni 	struct bdn_iboot	iboot;
912*14b24e2bSVaishali Kulkarni 	struct bdn_fboot	fboot;
913*14b24e2bSVaishali Kulkarni 
914*14b24e2bSVaishali Kulkarni };
915*14b24e2bSVaishali Kulkarni 
916*14b24e2bSVaishali Kulkarni struct bdn_func {
917*14b24e2bSVaishali Kulkarni #define BDN_DIR_FUNC_FLEX_FUNC		0
918*14b24e2bSVaishali Kulkarni 	struct bdn_dir	dir[BDN_DIR_MAX];
919*14b24e2bSVaishali Kulkarni 
920*14b24e2bSVaishali Kulkarni 	struct bdn_flex	flex;
921*14b24e2bSVaishali Kulkarni 
922*14b24e2bSVaishali Kulkarni 	u32	rsrv[4];
923*14b24e2bSVaishali Kulkarni };
924*14b24e2bSVaishali Kulkarni 
925*14b24e2bSVaishali Kulkarni struct bdn {
926*14b24e2bSVaishali Kulkarni 	struct bdn_head head;
927*14b24e2bSVaishali Kulkarni 	struct bdn_glob glob;
928*14b24e2bSVaishali Kulkarni 	struct bdn_port port[MCP_GLOB_PORT_MAX];
929*14b24e2bSVaishali Kulkarni 	struct bdn_func func[MCP_GLOB_FUNC_MAX];
930*14b24e2bSVaishali Kulkarni };
931*14b24e2bSVaishali Kulkarni 
932*14b24e2bSVaishali Kulkarni #define BDN_OFFSET_GLOB(x)		(OFFSETOF(struct bdn, glob.x) & 0xffff)
933*14b24e2bSVaishali Kulkarni #define BDN_OFFSET_BASE(x)		(OFFSETOF(struct bdn, glob.base.x) & 0xffff)
934*14b24e2bSVaishali Kulkarni #define BDN_OFFSET_NCSI(x)		(OFFSETOF(struct bdn, glob.ncsi.x) & 0xffff)
935*14b24e2bSVaishali Kulkarni #define BDN_OFFSET_PORT(x, y)		(OFFSETOF(struct bdn, port[(x)].y) & 0xffff)
936*14b24e2bSVaishali Kulkarni #define BDN_OFFSET_NPORT(x, y)		(OFFSETOF(struct bdn, port[(x)].port.y) & 0xffff)
937*14b24e2bSVaishali Kulkarni #define BDN_OFFSET_NPIV(x, y)		(OFFSETOF(struct bdn, port[(x)].npiv.y) & 0xffff)
938*14b24e2bSVaishali Kulkarni #define BDN_OFFSET_IBOOT(x, y)		(OFFSETOF(struct bdn, port[(x)].iboot.y) & 0xffff)
939*14b24e2bSVaishali Kulkarni #define BDN_OFFSET_FBOOT(x, y)		(OFFSETOF(struct bdn, port[(x)].fboot.y) & 0xffff)
940*14b24e2bSVaishali Kulkarni #define BDN_OFFSET_FUNC(x, y)		(OFFSETOF(struct bdn, func[(x)].y) & 0xffff)
941*14b24e2bSVaishali Kulkarni #define BDN_OFFSET_FLEX(x, y)		(OFFSETOF(struct bdn, func[(x)].flex.y) & 0xffff)
942*14b24e2bSVaishali Kulkarni #define BDN_OFFSET_CRC			(BDN_SIZE_IMAGE_MAX - 4)
943*14b24e2bSVaishali Kulkarni 
944*14b24e2bSVaishali Kulkarni union bdn_image {
945*14b24e2bSVaishali Kulkarni 	struct bdn bdn;
946*14b24e2bSVaishali Kulkarni 	u8_t rsrv[BDN_SIZE_IMAGE_MAX];
947*14b24e2bSVaishali Kulkarni };
948*14b24e2bSVaishali Kulkarni 
949*14b24e2bSVaishali Kulkarni #endif /* BDN_H */
950