1*d14abf15SRobert Mustacchi /****************************************************************************
2*d14abf15SRobert Mustacchi  * CDDL HEADER START
3*d14abf15SRobert Mustacchi  *
4*d14abf15SRobert Mustacchi  * The contents of this file are subject to the terms of the
5*d14abf15SRobert Mustacchi  * Common Development and Distribution License (the "License").
6*d14abf15SRobert Mustacchi  * You may not use this file except in compliance with the License.
7*d14abf15SRobert Mustacchi  *
8*d14abf15SRobert Mustacchi  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*d14abf15SRobert Mustacchi  * or http://www.opensolaris.org/os/licensing.
10*d14abf15SRobert Mustacchi  * See the License for the specific language governing permissions
11*d14abf15SRobert Mustacchi  * and limitations under the License.
12*d14abf15SRobert Mustacchi  *
13*d14abf15SRobert Mustacchi  * When distributing Covered Code, include this CDDL HEADER in each
14*d14abf15SRobert Mustacchi  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*d14abf15SRobert Mustacchi  * If applicable, add the following below this CDDL HEADER, with the
16*d14abf15SRobert Mustacchi  * fields enclosed by brackets "[]" replaced with your own identifying
17*d14abf15SRobert Mustacchi  * information: Portions Copyright [yyyy] [name of copyright owner]
18*d14abf15SRobert Mustacchi  *
19*d14abf15SRobert Mustacchi  * CDDL HEADER END
20*d14abf15SRobert Mustacchi  *
21*d14abf15SRobert Mustacchi  * Copyright 2014 QLogic Corporation
22*d14abf15SRobert Mustacchi  * The contents of this file are subject to the terms of the
23*d14abf15SRobert Mustacchi  * QLogic End User License (the "License").
24*d14abf15SRobert Mustacchi  * You may not use this file except in compliance with the License.
25*d14abf15SRobert Mustacchi  *
26*d14abf15SRobert Mustacchi  * You can obtain a copy of the License at
27*d14abf15SRobert Mustacchi  * http://www.qlogic.com/Resources/Documents/DriverDownloadHelp/
28*d14abf15SRobert Mustacchi  * QLogic_End_User_Software_License.txt
29*d14abf15SRobert Mustacchi  * See the License for the specific language governing permissions
30*d14abf15SRobert Mustacchi  * and limitations under the License.
31*d14abf15SRobert Mustacchi  *
32*d14abf15SRobert Mustacchi  *
33*d14abf15SRobert Mustacchi  * Name: bdn.h
34*d14abf15SRobert Mustacchi  *
35*d14abf15SRobert Mustacchi  * Description: BDN definitions
36*d14abf15SRobert Mustacchi  *
37*d14abf15SRobert Mustacchi  * Author: Yaniv Rosner
38*d14abf15SRobert Mustacchi  *
39*d14abf15SRobert Mustacchi  ****************************************************************************/
40*d14abf15SRobert Mustacchi 
41*d14abf15SRobert Mustacchi #ifndef BDN_H
42*d14abf15SRobert Mustacchi #define BDN_H
43*d14abf15SRobert Mustacchi 
44*d14abf15SRobert Mustacchi struct Codec_Info {
45*d14abf15SRobert Mustacchi 	u32_t version;	/* Version of Codec */
46*d14abf15SRobert Mustacchi 
47*d14abf15SRobert Mustacchi 	enum codec_location {
48*d14abf15SRobert Mustacchi 		e_None		= 0,
49*d14abf15SRobert Mustacchi 		e_Here		= 1,
50*d14abf15SRobert Mustacchi 		e_FRU_EEPROM	= 2
51*d14abf15SRobert Mustacchi 	} loc; /* DEFAULT e-None */
52*d14abf15SRobert Mustacchi 	u16_t total_size;	/* total size of Codec in bytes.Max size 32K (64K?)*/
53*d14abf15SRobert Mustacchi 	u16_t num_msg_segments;	/* number of segments = total size / max message payload size */
54*d14abf15SRobert Mustacchi };
55*d14abf15SRobert Mustacchi 
56*d14abf15SRobert Mustacchi #define MAX_CODEC_SIZE		0x8000
57*d14abf15SRobert Mustacchi #define CODEC_SEGMENT_SIZE	0x400
58*d14abf15SRobert Mustacchi #define NUMBER_OF_SEGMENTS (MAX_CODEC_SIZE/CODEC_SEGMENT_SIZE)
59*d14abf15SRobert Mustacchi struct codec_t {
60*d14abf15SRobert Mustacchi 	u8_t data[NUMBER_OF_SEGMENTS][CODEC_SEGMENT_SIZE];
61*d14abf15SRobert Mustacchi };
62*d14abf15SRobert Mustacchi 
63*d14abf15SRobert Mustacchi typedef u32 bdn_cfg;
64*d14abf15SRobert Mustacchi #define BDN_CFG_SIZE_MASK 		0x0000ffff
65*d14abf15SRobert Mustacchi #define BDN_CFG_SIZE_OFFSET		0
66*d14abf15SRobert Mustacchi #define BDN_CFG_STATE_MASK 		0x00ff0000
67*d14abf15SRobert Mustacchi #define BDN_CFG_STATE_OFFSET		16
68*d14abf15SRobert Mustacchi 	#define BDN_CFG_STATE_ACTIVE	0x00010000
69*d14abf15SRobert Mustacchi 	#define BDN_CFG_STATE_PENDING	0x00020000
70*d14abf15SRobert Mustacchi 
71*d14abf15SRobert Mustacchi struct bdn_fcoe_boot_target {
72*d14abf15SRobert Mustacchi 	u16 wwpn;
73*d14abf15SRobert Mustacchi 	u16 lUNID;
74*d14abf15SRobert Mustacchi };
75*d14abf15SRobert Mustacchi 
76*d14abf15SRobert Mustacchi #if 0
77*d14abf15SRobert Mustacchi #define MAX_FCOE_IBOOT_PORT_ID 8  /* @@@TBD - what's this ? */
78*d14abf15SRobert Mustacchi #define MAX_IBOOT_TARGETS	8
79*d14abf15SRobert Mustacchi struct bdn_fcoe_boot_next_dlr {
80*d14abf15SRobert Mustacchi 	bdn_cfg hdr;
81*d14abf15SRobert Mustacchi 	u16 fcoe_boot_enable;
82*d14abf15SRobert Mustacchi 	u16 fcoe_cvid;
83*d14abf15SRobert Mustacchi 	u16 fcoe_wwnn;
84*d14abf15SRobert Mustacchi 	u16 n_port_id[MAX_FCOE_IBOOT_PORT_ID];	//Still Not sure how big the array is
85*d14abf15SRobert Mustacchi 	struct fcoe_boot_target targets[MAX_IBOOT_TARGETS];	//Still Not sure how big the array is
86*d14abf15SRobert Mustacchi };
87*d14abf15SRobert Mustacchi 
88*d14abf15SRobert Mustacchi struct bdn_fcoe_boot {	// Main fcoe_iboot struct
89*d14abf15SRobert Mustacchi 	fcoe_iboot_next_dlr next_dlr;	// Hold substruct per each activation type
90*d14abf15SRobert Mustacchi };
91*d14abf15SRobert Mustacchi #endif
92*d14abf15SRobert Mustacchi struct bdn_netport_now {
93*d14abf15SRobert Mustacchi 	bdn_cfg hdr;
94*d14abf15SRobert Mustacchi 	u8 enable_port;
95*d14abf15SRobert Mustacchi 	u8 rsrv;
96*d14abf15SRobert Mustacchi 	u8 num_pfs_min_bw;
97*d14abf15SRobert Mustacchi 	u8 num_pfs_max_bw;
98*d14abf15SRobert Mustacchi 	u8 min_bw[E2_FUNC_MAX]; /* 4 PFs in 2 port mode / 2 PFs in 4 port mode */
99*d14abf15SRobert Mustacchi 	u8 max_bw[E2_FUNC_MAX]; /* 4 PFs in 2 port mode / 2 PFs in 4 port mode */
100*d14abf15SRobert Mustacchi };
101*d14abf15SRobert Mustacchi 
102*d14abf15SRobert Mustacchi struct bdn_netport_on_port_reset {
103*d14abf15SRobert Mustacchi 	bdn_cfg hdr;
104*d14abf15SRobert Mustacchi 	u32 link_config;
105*d14abf15SRobert Mustacchi /* Same definitions as in PORT_HW_CFG_SPEED_CAPABILITY_D3_MASK */
106*d14abf15SRobert Mustacchi #define BDN_LINK_CONFIG_ADVERTISED_SPEED_MASK	0x0000ffff
107*d14abf15SRobert Mustacchi #define BDN_LINK_CONFIG_ADVERTISED_SPEED_SHIFT	0
108*d14abf15SRobert Mustacchi /* Same definitions as PORT_FEATURE_FLOW_CONTROL_MASK */
109*d14abf15SRobert Mustacchi #define BDN_LINK_CONFIG_FLOW_CONTROL_MASK	0x00070000
110*d14abf15SRobert Mustacchi #define BDN_LINK_CONFIG_FLOW_CONTROL_SHIFT	16
111*d14abf15SRobert Mustacchi 
112*d14abf15SRobert Mustacchi #define BDN_LINK_CONFIG_PFC_ENABLED_MASK	0x00080000
113*d14abf15SRobert Mustacchi #define BDN_LINK_CONFIG_PFC_ENABLED_SHIFT	19
114*d14abf15SRobert Mustacchi 
115*d14abf15SRobert Mustacchi #define BDN_LINK_CONFIG_EEE_ENABLED_MASK	0x00100000
116*d14abf15SRobert Mustacchi #define BDN_LINK_CONFIG_EEE_ENABLED_SHIFT	20
117*d14abf15SRobert Mustacchi };
118*d14abf15SRobert Mustacchi 
119*d14abf15SRobert Mustacchi struct bdn_netport_next_os_boot {
120*d14abf15SRobert Mustacchi 	bdn_cfg hdr;
121*d14abf15SRobert Mustacchi 	u8   num_pfs;
122*d14abf15SRobert Mustacchi 	u8   num_vf_per_pf[E2_FUNC_MAX];
123*d14abf15SRobert Mustacchi };
124*d14abf15SRobert Mustacchi 
125*d14abf15SRobert Mustacchi struct bdn_netport {
126*d14abf15SRobert Mustacchi 	struct bdn_netport_now now;
127*d14abf15SRobert Mustacchi 	struct bdn_netport_on_port_reset on_port_reset; /* On Port Reset */
128*d14abf15SRobert Mustacchi 	struct bdn_netport_next_os_boot next_os_boot; /* Next OS Boot */
129*d14abf15SRobert Mustacchi };
130*d14abf15SRobert Mustacchi 
131*d14abf15SRobert Mustacchi #define CONNECTION_ID_LEN 16
132*d14abf15SRobert Mustacchi struct bdn_flexfunc_now {
133*d14abf15SRobert Mustacchi 	bdn_cfg hdr;
134*d14abf15SRobert Mustacchi 	u8 connection_id[CONNECTION_ID_LEN];
135*d14abf15SRobert Mustacchi 	u8 fnic_enabled;
136*d14abf15SRobert Mustacchi 	u8 rsrv[3];
137*d14abf15SRobert Mustacchi };
138*d14abf15SRobert Mustacchi 
139*d14abf15SRobert Mustacchi struct bdn_flexfunc_next_os_boot {
140*d14abf15SRobert Mustacchi 	bdn_cfg hdr;
141*d14abf15SRobert Mustacchi 	u8 mac_addr[6];
142*d14abf15SRobert Mustacchi 	u8 func_type;
143*d14abf15SRobert Mustacchi 	u8 boot_mode;
144*d14abf15SRobert Mustacchi };
145*d14abf15SRobert Mustacchi 
146*d14abf15SRobert Mustacchi struct bdn_flex_func {
147*d14abf15SRobert Mustacchi 	struct bdn_flexfunc_now now;
148*d14abf15SRobert Mustacchi 	struct bdn_flexfunc_next_os_boot next_os_boot; /* Next OS Boot */
149*d14abf15SRobert Mustacchi };
150*d14abf15SRobert Mustacchi 
151*d14abf15SRobert Mustacchi #ifndef PF_NUM_MAX
152*d14abf15SRobert Mustacchi #define PF_NUM_MAX 8
153*d14abf15SRobert Mustacchi #endif
154*d14abf15SRobert Mustacchi 
155*d14abf15SRobert Mustacchi struct bdn {
156*d14abf15SRobert Mustacchi 	u32 size;
157*d14abf15SRobert Mustacchi 	u32 uuid;	// Unique identifer of the slot/chassis of the blade
158*d14abf15SRobert Mustacchi 	struct Codec_Info codec_info;
159*d14abf15SRobert Mustacchi 	struct codec_t codec;
160*d14abf15SRobert Mustacchi 	struct bdn_netport netport[PORT_MAX * NVM_PATH_MAX];
161*d14abf15SRobert Mustacchi 	struct bdn_flex_func flexfunc[PF_NUM_MAX];
162*d14abf15SRobert Mustacchi 	//struct bdn_pxe_boot pxe_boot;
163*d14abf15SRobert Mustacchi 	//struct bdn_iscsi_boot iscsi_boot;
164*d14abf15SRobert Mustacchi 	//struct bdn_fcoe_boot fcoe_boot;
165*d14abf15SRobert Mustacchi 	u32 crc;
166*d14abf15SRobert Mustacchi };
167*d14abf15SRobert Mustacchi 
168*d14abf15SRobert Mustacchi union bdn_image {
169*d14abf15SRobert Mustacchi 	struct bdn bdn;
170*d14abf15SRobert Mustacchi 	u8_t rsrv[0x9000];
171*d14abf15SRobert Mustacchi };
172*d14abf15SRobert Mustacchi 
173*d14abf15SRobert Mustacchi /* Expected BDN size is basically the offset of rsrv within the bdn structure */
174*d14abf15SRobert Mustacchi #define BDN_SIZE (sizeof(struct bdn))
175*d14abf15SRobert Mustacchi 
176*d14abf15SRobert Mustacchi #define BDN_CODEC_INFO()		  (ASN1_P->bdn_addr + OFFSETOF(struct bdn, codec_info))
177*d14abf15SRobert Mustacchi #define BDN_CODEC_DATA()		  (ASN1_P->bdn_addr + OFFSETOF(struct bdn, codec))
178*d14abf15SRobert Mustacchi #define BDN_NETPORT_NOW(papo)		  (ASN1_P->bdn_addr + OFFSETOF(struct bdn, netport[(papo.path << 1) + papo.port].now))
179*d14abf15SRobert Mustacchi #define BDN_NETPORT_ON_PORT_RESET(papo)   (ASN1_P->bdn_addr + OFFSETOF(struct bdn, netport[(papo.path << 1) + papo.port].on_port_reset))
180*d14abf15SRobert Mustacchi #define BDN_NETPORT_NEXT_OS_BOOT(papo)	  (ASN1_P->bdn_addr + OFFSETOF(struct bdn, netport[(papo.path << 1) + papo.port].next_os_boot))
181*d14abf15SRobert Mustacchi #define BDN_FLEXFUNC_NOW(pf_num)	  (ASN1_P->bdn_addr + OFFSETOF(struct bdn, flexfunc[pf_num].now))
182*d14abf15SRobert Mustacchi #define BDN_FLEXFUNC_NEXT_OS_BOOT(pf_num) (ASN1_P->bdn_addr + OFFSETOF(struct bdn, flexfunc[pf_num].next_os_boot))
183*d14abf15SRobert Mustacchi #define BDN_CRC()			  (ASN1_P->bdn_addr + sizeof(union bdn_image))
184*d14abf15SRobert Mustacchi 
185*d14abf15SRobert Mustacchi /*----------------------------------------------------------------------------
186*d14abf15SRobert Mustacchi  * ------------------------------ Function Prototypes ------------------------
187*d14abf15SRobert Mustacchi  * ---------------------------------------------------------------------------
188*d14abf15SRobert Mustacchi  */
189*d14abf15SRobert Mustacchi 
190*d14abf15SRobert Mustacchi int bd_populate_os_reset_config(void);
191*d14abf15SRobert Mustacchi int bd_populate_port_reset_config(int path, int port);
192*d14abf15SRobert Mustacchi #endif /* BDN_H */
193