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