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