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 34*d14abf15SRobert Mustacchi /* Init operation types and structures */ 35*d14abf15SRobert Mustacchi enum { 36*d14abf15SRobert Mustacchi OP_RD = 0x1, /* read a single register */ 37*d14abf15SRobert Mustacchi OP_WR, /* write a single register */ 38*d14abf15SRobert Mustacchi OP_SW, /* copy a string to the device */ 39*d14abf15SRobert Mustacchi OP_ZR, /* clear memory */ 40*d14abf15SRobert Mustacchi OP_ZP, /* unzip then copy with DMAE */ 41*d14abf15SRobert Mustacchi OP_WR_64, /* write 64 bit pattern */ 42*d14abf15SRobert Mustacchi OP_WB, /* copy a string using DMAE */ 43*d14abf15SRobert Mustacchi #ifndef FW_ZIP_SUPPORT /* ! BNX2X_UPSTREAM */ 44*d14abf15SRobert Mustacchi OP_FW, /* copy an array from fw data (only used with unzipped FW) */ 45*d14abf15SRobert Mustacchi #endif 46*d14abf15SRobert Mustacchi OP_WB_ZR, /* Clear a string using DMAE or indirect-wr */ 47*d14abf15SRobert Mustacchi OP_IF_MODE_OR, /* Skip the following ops if all init modes don't match */ 48*d14abf15SRobert Mustacchi OP_IF_MODE_AND, /* Skip the following ops if any init modes don't match */ 49*d14abf15SRobert Mustacchi #ifndef BNX2X_UPSTREAM /* ! BNX2X_UPSTREAM */ 50*d14abf15SRobert Mustacchi OP_IF_PHASE, 51*d14abf15SRobert Mustacchi OP_RT, 52*d14abf15SRobert Mustacchi OP_DELAY, 53*d14abf15SRobert Mustacchi OP_VERIFY, 54*d14abf15SRobert Mustacchi #endif 55*d14abf15SRobert Mustacchi OP_MAX 56*d14abf15SRobert Mustacchi }; 57*d14abf15SRobert Mustacchi 58*d14abf15SRobert Mustacchi enum { 59*d14abf15SRobert Mustacchi STAGE_START, 60*d14abf15SRobert Mustacchi STAGE_END, 61*d14abf15SRobert Mustacchi }; 62*d14abf15SRobert Mustacchi 63*d14abf15SRobert Mustacchi /* Returns the index of start or end of a specific block stage in ops array*/ 64*d14abf15SRobert Mustacchi #define BLOCK_OPS_IDX(block, stage, end) \ 65*d14abf15SRobert Mustacchi (2*(((block)*NUM_OF_INIT_PHASES) + (stage)) + (end)) 66*d14abf15SRobert Mustacchi 67*d14abf15SRobert Mustacchi 68*d14abf15SRobert Mustacchi /* structs for the various opcodes */ 69*d14abf15SRobert Mustacchi struct raw_op { 70*d14abf15SRobert Mustacchi u32 op:8; 71*d14abf15SRobert Mustacchi u32 offset:24; 72*d14abf15SRobert Mustacchi u32 raw_data; 73*d14abf15SRobert Mustacchi }; 74*d14abf15SRobert Mustacchi 75*d14abf15SRobert Mustacchi struct op_read { 76*d14abf15SRobert Mustacchi u32 op:8; 77*d14abf15SRobert Mustacchi u32 offset:24; 78*d14abf15SRobert Mustacchi u32 val; 79*d14abf15SRobert Mustacchi }; 80*d14abf15SRobert Mustacchi 81*d14abf15SRobert Mustacchi struct op_write { 82*d14abf15SRobert Mustacchi u32 op:8; 83*d14abf15SRobert Mustacchi u32 offset:24; 84*d14abf15SRobert Mustacchi u32 val; 85*d14abf15SRobert Mustacchi }; 86*d14abf15SRobert Mustacchi 87*d14abf15SRobert Mustacchi struct op_arr_write { 88*d14abf15SRobert Mustacchi u32 op:8; 89*d14abf15SRobert Mustacchi u32 offset:24; 90*d14abf15SRobert Mustacchi #ifdef __BIG_ENDIAN 91*d14abf15SRobert Mustacchi u16 data_len; 92*d14abf15SRobert Mustacchi u16 data_off; 93*d14abf15SRobert Mustacchi #else /* __LITTLE_ENDIAN */ 94*d14abf15SRobert Mustacchi u16 data_off; 95*d14abf15SRobert Mustacchi u16 data_len; 96*d14abf15SRobert Mustacchi #endif 97*d14abf15SRobert Mustacchi }; 98*d14abf15SRobert Mustacchi 99*d14abf15SRobert Mustacchi struct op_zero { 100*d14abf15SRobert Mustacchi u32 op:8; 101*d14abf15SRobert Mustacchi u32 offset:24; 102*d14abf15SRobert Mustacchi u32 len; 103*d14abf15SRobert Mustacchi }; 104*d14abf15SRobert Mustacchi 105*d14abf15SRobert Mustacchi struct op_if_mode { 106*d14abf15SRobert Mustacchi u32 op:8; 107*d14abf15SRobert Mustacchi u32 cmd_offset:24; 108*d14abf15SRobert Mustacchi u32 mode_bit_map; 109*d14abf15SRobert Mustacchi }; 110*d14abf15SRobert Mustacchi 111*d14abf15SRobert Mustacchi #ifndef BNX2X_UPSTREAM /* ! BNX2X_UPSTREAM */ 112*d14abf15SRobert Mustacchi struct op_if_phase { 113*d14abf15SRobert Mustacchi u32 op:8; 114*d14abf15SRobert Mustacchi u32 cmd_offset:24; 115*d14abf15SRobert Mustacchi u32 phase_bit_map; 116*d14abf15SRobert Mustacchi }; 117*d14abf15SRobert Mustacchi 118*d14abf15SRobert Mustacchi struct op_delay { 119*d14abf15SRobert Mustacchi u32 op:8; 120*d14abf15SRobert Mustacchi u32 reserved:24; 121*d14abf15SRobert Mustacchi u32 delay; 122*d14abf15SRobert Mustacchi }; 123*d14abf15SRobert Mustacchi #endif 124*d14abf15SRobert Mustacchi 125*d14abf15SRobert Mustacchi union init_op { 126*d14abf15SRobert Mustacchi struct op_read read; 127*d14abf15SRobert Mustacchi struct op_write write; 128*d14abf15SRobert Mustacchi struct op_arr_write arr_wr; 129*d14abf15SRobert Mustacchi struct op_zero zero; 130*d14abf15SRobert Mustacchi struct raw_op raw; 131*d14abf15SRobert Mustacchi struct op_if_mode if_mode; 132*d14abf15SRobert Mustacchi #ifndef BNX2X_UPSTREAM /* ! BNX2X_UPSTREAM */ 133*d14abf15SRobert Mustacchi struct op_if_phase if_phase; 134*d14abf15SRobert Mustacchi struct op_delay delay; 135*d14abf15SRobert Mustacchi #endif 136*d14abf15SRobert Mustacchi }; 137*d14abf15SRobert Mustacchi 138*d14abf15SRobert Mustacchi 139*d14abf15SRobert Mustacchi /* Init Phases */ 140*d14abf15SRobert Mustacchi enum { 141*d14abf15SRobert Mustacchi PHASE_COMMON, 142*d14abf15SRobert Mustacchi PHASE_PORT0, 143*d14abf15SRobert Mustacchi PHASE_PORT1, 144*d14abf15SRobert Mustacchi PHASE_PF0, 145*d14abf15SRobert Mustacchi PHASE_PF1, 146*d14abf15SRobert Mustacchi PHASE_PF2, 147*d14abf15SRobert Mustacchi PHASE_PF3, 148*d14abf15SRobert Mustacchi PHASE_PF4, 149*d14abf15SRobert Mustacchi PHASE_PF5, 150*d14abf15SRobert Mustacchi PHASE_PF6, 151*d14abf15SRobert Mustacchi PHASE_PF7, 152*d14abf15SRobert Mustacchi NUM_OF_INIT_PHASES 153*d14abf15SRobert Mustacchi }; 154*d14abf15SRobert Mustacchi 155*d14abf15SRobert Mustacchi /* Init Modes */ 156*d14abf15SRobert Mustacchi enum { 157*d14abf15SRobert Mustacchi MODE_ASIC = 0x00000001, 158*d14abf15SRobert Mustacchi MODE_FPGA = 0x00000002, 159*d14abf15SRobert Mustacchi MODE_EMUL = 0x00000004, 160*d14abf15SRobert Mustacchi MODE_E2 = 0x00000008, 161*d14abf15SRobert Mustacchi MODE_E3 = 0x00000010, 162*d14abf15SRobert Mustacchi MODE_PORT2 = 0x00000020, 163*d14abf15SRobert Mustacchi MODE_PORT4 = 0x00000040, 164*d14abf15SRobert Mustacchi MODE_SF = 0x00000080, 165*d14abf15SRobert Mustacchi MODE_MF = 0x00000100, 166*d14abf15SRobert Mustacchi MODE_MF_SD = 0x00000200, 167*d14abf15SRobert Mustacchi MODE_MF_SI = 0x00000400, 168*d14abf15SRobert Mustacchi MODE_MF_AFEX = 0x00000800, 169*d14abf15SRobert Mustacchi MODE_E3_A0 = 0x00001000, 170*d14abf15SRobert Mustacchi MODE_E3_B0 = 0x00002000, 171*d14abf15SRobert Mustacchi MODE_COS3 = 0x00004000, 172*d14abf15SRobert Mustacchi MODE_COS6 = 0x00008000, 173*d14abf15SRobert Mustacchi MODE_LITTLE_ENDIAN = 0x00010000, 174*d14abf15SRobert Mustacchi MODE_BIG_ENDIAN = 0x00020000, 175*d14abf15SRobert Mustacchi }; 176*d14abf15SRobert Mustacchi 177*d14abf15SRobert Mustacchi /* Init Blocks */ 178*d14abf15SRobert Mustacchi enum { 179*d14abf15SRobert Mustacchi BLOCK_ATC, 180*d14abf15SRobert Mustacchi BLOCK_BRB1, 181*d14abf15SRobert Mustacchi BLOCK_CCM, 182*d14abf15SRobert Mustacchi BLOCK_CDU, 183*d14abf15SRobert Mustacchi BLOCK_CFC, 184*d14abf15SRobert Mustacchi BLOCK_CSDM, 185*d14abf15SRobert Mustacchi BLOCK_CSEM, 186*d14abf15SRobert Mustacchi BLOCK_DBG, 187*d14abf15SRobert Mustacchi BLOCK_DMAE, 188*d14abf15SRobert Mustacchi BLOCK_DORQ, 189*d14abf15SRobert Mustacchi BLOCK_HC, 190*d14abf15SRobert Mustacchi BLOCK_IGU, 191*d14abf15SRobert Mustacchi BLOCK_MISC, 192*d14abf15SRobert Mustacchi BLOCK_NIG, 193*d14abf15SRobert Mustacchi BLOCK_PBF, 194*d14abf15SRobert Mustacchi BLOCK_PGLUE_B, 195*d14abf15SRobert Mustacchi BLOCK_PRS, 196*d14abf15SRobert Mustacchi BLOCK_PXP2, 197*d14abf15SRobert Mustacchi BLOCK_PXP, 198*d14abf15SRobert Mustacchi BLOCK_QM, 199*d14abf15SRobert Mustacchi BLOCK_SRC, 200*d14abf15SRobert Mustacchi BLOCK_TCM, 201*d14abf15SRobert Mustacchi BLOCK_TM, 202*d14abf15SRobert Mustacchi BLOCK_TSDM, 203*d14abf15SRobert Mustacchi BLOCK_TSEM, 204*d14abf15SRobert Mustacchi BLOCK_UCM, 205*d14abf15SRobert Mustacchi BLOCK_UPB, 206*d14abf15SRobert Mustacchi BLOCK_USDM, 207*d14abf15SRobert Mustacchi BLOCK_USEM, 208*d14abf15SRobert Mustacchi BLOCK_XCM, 209*d14abf15SRobert Mustacchi BLOCK_XPB, 210*d14abf15SRobert Mustacchi BLOCK_XSDM, 211*d14abf15SRobert Mustacchi BLOCK_XSEM, 212*d14abf15SRobert Mustacchi BLOCK_MISC_AEU, 213*d14abf15SRobert Mustacchi NUM_OF_INIT_BLOCKS 214*d14abf15SRobert Mustacchi }; 215*d14abf15SRobert Mustacchi 216