1*4e1bc9a0SAchim Leubner /******************************************************************************* 2*4e1bc9a0SAchim Leubner *Copyright (c) 2014 PMC-Sierra, Inc. All rights reserved. 3*4e1bc9a0SAchim Leubner * 4*4e1bc9a0SAchim Leubner *Redistribution and use in source and binary forms, with or without modification, are permitted provided 5*4e1bc9a0SAchim Leubner *that the following conditions are met: 6*4e1bc9a0SAchim Leubner *1. Redistributions of source code must retain the above copyright notice, this list of conditions and the 7*4e1bc9a0SAchim Leubner *following disclaimer. 8*4e1bc9a0SAchim Leubner *2. Redistributions in binary form must reproduce the above copyright notice, 9*4e1bc9a0SAchim Leubner *this list of conditions and the following disclaimer in the documentation and/or other materials provided 10*4e1bc9a0SAchim Leubner *with the distribution. 11*4e1bc9a0SAchim Leubner * 12*4e1bc9a0SAchim Leubner *THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED 13*4e1bc9a0SAchim Leubner *WARRANTIES,INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 14*4e1bc9a0SAchim Leubner *FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 15*4e1bc9a0SAchim Leubner *FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 16*4e1bc9a0SAchim Leubner *NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 17*4e1bc9a0SAchim Leubner *BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 18*4e1bc9a0SAchim Leubner *LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 19*4e1bc9a0SAchim Leubner *SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE 20*4e1bc9a0SAchim Leubner * 21*4e1bc9a0SAchim Leubner * 22*4e1bc9a0SAchim Leubner *******************************************************************************/ 23*4e1bc9a0SAchim Leubner /***************************************************************************** 24*4e1bc9a0SAchim Leubner * 25*4e1bc9a0SAchim Leubner * tdioctl.h 26*4e1bc9a0SAchim Leubner * 27*4e1bc9a0SAchim Leubner * Abstract: This module contains data structure definition used 28*4e1bc9a0SAchim Leubner * by the Transport Dependent (TD) Layer IOCTL. 29*4e1bc9a0SAchim Leubner * 30*4e1bc9a0SAchim Leubner * 31*4e1bc9a0SAchim Leubner * Notes: 32*4e1bc9a0SAchim Leubner * 33*4e1bc9a0SAchim Leubner * 34*4e1bc9a0SAchim Leubner ** MODIFICATION HISTORY ****************************************************** 35*4e1bc9a0SAchim Leubner * 36*4e1bc9a0SAchim Leubner * NAME DATE DESCRIPTION 37*4e1bc9a0SAchim Leubner * ---- ---- ----------- 38*4e1bc9a0SAchim Leubner * IWN 12/11/02 Initial creation. 39*4e1bc9a0SAchim Leubner * 40*4e1bc9a0SAchim Leubner * 41*4e1bc9a0SAchim Leubner *****************************************************************************/ 42*4e1bc9a0SAchim Leubner 43*4e1bc9a0SAchim Leubner 44*4e1bc9a0SAchim Leubner #ifndef TD_IOCTL_H 45*4e1bc9a0SAchim Leubner 46*4e1bc9a0SAchim Leubner #define TD_IOCTL_H 47*4e1bc9a0SAchim Leubner 48*4e1bc9a0SAchim Leubner //#include "global.h" 49*4e1bc9a0SAchim Leubner 50*4e1bc9a0SAchim Leubner /* 51*4e1bc9a0SAchim Leubner * PMC-Sierra IOCTL signature 52*4e1bc9a0SAchim Leubner */ 53*4e1bc9a0SAchim Leubner #define PMC_SIERRA_SIGNATURE 0x1234 54*4e1bc9a0SAchim Leubner #define PMC_SIERRA_IOCTL_SIGNATURE "PMC-STRG" 55*4e1bc9a0SAchim Leubner 56*4e1bc9a0SAchim Leubner /* 57*4e1bc9a0SAchim Leubner * Major function code of IOCTL functions, common to target and initiator. 58*4e1bc9a0SAchim Leubner */ 59*4e1bc9a0SAchim Leubner #define IOCTL_MJ_CARD_PARAMETER 0x01 60*4e1bc9a0SAchim Leubner #define IOCTL_MJ_FW_CONTROL 0x02 61*4e1bc9a0SAchim Leubner #define IOCTL_MJ_NVMD_GET 0x03 62*4e1bc9a0SAchim Leubner #define IOCTL_MJ_NVMD_SET 0x04 63*4e1bc9a0SAchim Leubner #define IOCTL_MJ_GET_EVENT_LOG1 0x05 64*4e1bc9a0SAchim Leubner #define IOCTL_MJ_GET_EVENT_LOG2 0x06 65*4e1bc9a0SAchim Leubner #define IOCTL_MJ_GET_CORE_DUMP 0x07 66*4e1bc9a0SAchim Leubner #define IOCTL_MJ_LL_TRACING 0x08 67*4e1bc9a0SAchim Leubner #define IOCTL_MJ_FW_PROFILE 0x09 68*4e1bc9a0SAchim Leubner #define IOCTL_MJ_MNID 0x0A 69*4e1bc9a0SAchim Leubner #define IOCTL_MJ_ENCRYPTION_CTL 0x0B 70*4e1bc9a0SAchim Leubner 71*4e1bc9a0SAchim Leubner #define IOCTL_MJ_FW_INFO 0x0C 72*4e1bc9a0SAchim Leubner 73*4e1bc9a0SAchim Leubner #define IOCTL_MJ_LL_API_TEST 0x11 74*4e1bc9a0SAchim Leubner #define IOCTL_MJ_CHECK_DPMC_EVENT 0x16 75*4e1bc9a0SAchim Leubner #define IOCTL_MJ_GET_FW_REV 0x1A 76*4e1bc9a0SAchim Leubner #define IOCTL_MJ_GET_DEVICE_INFO 0x1B 77*4e1bc9a0SAchim Leubner #define IOCTL_MJ_GET_IO_ERROR_STATISTIC 0x1C 78*4e1bc9a0SAchim Leubner #define IOCTL_MJ_GET_IO_EVENT_STATISTIC 0x1D 79*4e1bc9a0SAchim Leubner #define IOCTL_MJ_GET_FORENSIC_DATA 0x1E 80*4e1bc9a0SAchim Leubner #define IOCTL_MJ_GET_DEVICE_LIST 0x1F 81*4e1bc9a0SAchim Leubner #define IOCTL_MJ_SMP_REQUEST 0x6D 82*4e1bc9a0SAchim Leubner #define IOCTL_MJ_GET_DEVICE_LUN 0x7A1 83*4e1bc9a0SAchim Leubner #define IOCTL_MJ_PHY_GENERAL_STATUS 0x7A6 84*4e1bc9a0SAchim Leubner #define IOCTL_MJ_PHY_DETAILS 0x7A7 85*4e1bc9a0SAchim Leubner #define IOCTL_MJ_SEND_BIST 0x20 86*4e1bc9a0SAchim Leubner #define IOCTL_MJ_CHECK_FATAL_ERROR 0x70 87*4e1bc9a0SAchim Leubner #define IOCTL_MJ_FATAL_ERROR_DUMP_COMPLETE 0x71 88*4e1bc9a0SAchim Leubner #define IOCTL_MJ_GPIO 0x41 89*4e1bc9a0SAchim Leubner #define IOCTL_MJ_SGPIO 0x42 90*4e1bc9a0SAchim Leubner #define IOCTL_MJ_SEND_TMF 0x6E 91*4e1bc9a0SAchim Leubner #define IOCTL_MJ_FATAL_ERROR_SOFT_RESET_TRIG 0x72 92*4e1bc9a0SAchim Leubner #define IOCTL_MJ_FATAL_ERR_CHK_RET_FALSE 0x76 93*4e1bc9a0SAchim Leubner #define IOCTL_MJ_FATAL_ERR_CHK_SEND_FALSE 0x76 94*4e1bc9a0SAchim Leubner #define IOCTL_MJ_FATAL_ERR_CHK_SEND_TRUE 0x77 95*4e1bc9a0SAchim Leubner 96*4e1bc9a0SAchim Leubner 97*4e1bc9a0SAchim Leubner /* 98*4e1bc9a0SAchim Leubner * Major function code of IOCTL functions, specific to initiator. 99*4e1bc9a0SAchim Leubner */ 100*4e1bc9a0SAchim Leubner #define IOCTL_MJ_INI_ISCSI_DISCOVERY 0x21 101*4e1bc9a0SAchim Leubner #define IOCTL_MJ_INI_SESSION_CONTROL 0x22 102*4e1bc9a0SAchim Leubner #define IOCTL_MJ_INI_SNIA_IMA 0x23 103*4e1bc9a0SAchim Leubner #define IOCTL_MJ_INI_SCSI 0x24 104*4e1bc9a0SAchim Leubner #define IOCTL_MJ_INI_WMI 0x25 105*4e1bc9a0SAchim Leubner #define IOCTL_MJ_INI_DRIVER_EVENT_LOG 0x26 106*4e1bc9a0SAchim Leubner #define IOCTL_MJ_INI_PERSISTENT_BINDING 0x27 107*4e1bc9a0SAchim Leubner #define IOCTL_MJ_INI_DRIVER_IDENTIFY 0x28 108*4e1bc9a0SAchim Leubner 109*4e1bc9a0SAchim Leubner /* temp */ 110*4e1bc9a0SAchim Leubner #define IOCTL_MJ_PORT_STOP 0x29 111*4e1bc9a0SAchim Leubner #define IOCTL_MJ_PORT_START 0x30 112*4e1bc9a0SAchim Leubner 113*4e1bc9a0SAchim Leubner /* SPCv controller configuration page commands */ 114*4e1bc9a0SAchim Leubner #define IOCTL_MJ_MODE_CTL_PAGE 0x40 115*4e1bc9a0SAchim Leubner 116*4e1bc9a0SAchim Leubner #define IOCTL_MJ_SET_OR_GET_REGISTER 0x41 117*4e1bc9a0SAchim Leubner 118*4e1bc9a0SAchim Leubner #define IOCTL_MJ_GET_PHY_PROFILE 0x44 119*4e1bc9a0SAchim Leubner #define IOCTL_MJ_SET_PHY_PROFILE 0x43 120*4e1bc9a0SAchim Leubner 121*4e1bc9a0SAchim Leubner #define IOCTL_MJ_GET_DRIVER_VERSION 0x101 122*4e1bc9a0SAchim Leubner 123*4e1bc9a0SAchim Leubner #define IOCTL_MN_PHY_PROFILE_COUNTERS 0x01 124*4e1bc9a0SAchim Leubner #define IOCTL_MN_PHY_PROFILE_COUNTERS_CLR 0x02 125*4e1bc9a0SAchim Leubner #define IOCTL_MN_PHY_PROFILE_BW_COUNTERS 0x03 126*4e1bc9a0SAchim Leubner #define IOCTL_MN_PHY_PROFILE_ANALOG_SETTINGS 0x04 127*4e1bc9a0SAchim Leubner 128*4e1bc9a0SAchim Leubner /* 129*4e1bc9a0SAchim Leubner * Minor functions for Card parameter IOCTL functions. 130*4e1bc9a0SAchim Leubner */ 131*4e1bc9a0SAchim Leubner #define IOCTL_MN_CARD_GET_VPD_INFO 0x01 132*4e1bc9a0SAchim Leubner #define IOCTL_MN_CARD_GET_PORTSTART_INFO 0x02 133*4e1bc9a0SAchim Leubner #define IOCTL_MN_CARD_GET_INTERRUPT_CONFIG 0x03 134*4e1bc9a0SAchim Leubner #define IOCTL_MN_CARD_GET_PHY_ANALOGSETTING 0x04 135*4e1bc9a0SAchim Leubner #define IOCTL_MN_CARD_GET_TIMER_CONFIG 0x05 136*4e1bc9a0SAchim Leubner #define IOCTL_MN_CARD_GET_TYPE_FATAL_DUMP 0x06 137*4e1bc9a0SAchim Leubner 138*4e1bc9a0SAchim Leubner /* 139*4e1bc9a0SAchim Leubner * Minor functions for FW control IOCTL functions. 140*4e1bc9a0SAchim Leubner */ 141*4e1bc9a0SAchim Leubner 142*4e1bc9a0SAchim Leubner /* Send FW data requests. 143*4e1bc9a0SAchim Leubner */ 144*4e1bc9a0SAchim Leubner #define IOCTL_MN_FW_DOWNLOAD_DATA 0x01 145*4e1bc9a0SAchim Leubner 146*4e1bc9a0SAchim Leubner /* Send the request for burning the new firmware. 147*4e1bc9a0SAchim Leubner */ 148*4e1bc9a0SAchim Leubner #define IOCTL_MN_FW_DOWNLOAD_BURN 0x02 149*4e1bc9a0SAchim Leubner 150*4e1bc9a0SAchim Leubner /* Poll for the flash burn phases. Sequences of poll function calls are 151*4e1bc9a0SAchim Leubner * needed following the IOCTL_MN_FW_DOWNLOAD_BURN, IOCTL_MN_FW_BURN_OSPD 152*4e1bc9a0SAchim Leubner * and IOCTL_MN_FW_ROLL_BACK_FW functions. 153*4e1bc9a0SAchim Leubner */ 154*4e1bc9a0SAchim Leubner #define IOCTL_MN_FW_BURN_POLL 0x03 155*4e1bc9a0SAchim Leubner 156*4e1bc9a0SAchim Leubner /* Instruct the FW to roll back FW to prior revision. 157*4e1bc9a0SAchim Leubner */ 158*4e1bc9a0SAchim Leubner #define IOCTL_MN_FW_ROLL_BACK_FW 0x04 159*4e1bc9a0SAchim Leubner 160*4e1bc9a0SAchim Leubner /* Instruct the FW to return the current firmware revision number. 161*4e1bc9a0SAchim Leubner */ 162*4e1bc9a0SAchim Leubner #define IOCTL_MN_FW_VERSION 0x05 163*4e1bc9a0SAchim Leubner 164*4e1bc9a0SAchim Leubner /* Retrieve the maximum size of the OS Persistent Data stored on the card. 165*4e1bc9a0SAchim Leubner */ 166*4e1bc9a0SAchim Leubner #define IOCTL_MN_FW_GET_OSPD_SIZE 0x06 167*4e1bc9a0SAchim Leubner 168*4e1bc9a0SAchim Leubner /* Retrieve the OS Persistent Data from the card. 169*4e1bc9a0SAchim Leubner */ 170*4e1bc9a0SAchim Leubner #define IOCTL_MN_FW_GET_OSPD 0x07 171*4e1bc9a0SAchim Leubner 172*4e1bc9a0SAchim Leubner /* Send a new OS Persistent Data to the card and burn in flash. 173*4e1bc9a0SAchim Leubner */ 174*4e1bc9a0SAchim Leubner #define IOCTL_MN_FW_BURN_OSPD 0x08 175*4e1bc9a0SAchim Leubner 176*4e1bc9a0SAchim Leubner /* Retrieve the trace buffer from the card FW. Only available on the debug 177*4e1bc9a0SAchim Leubner * version of the FW. 178*4e1bc9a0SAchim Leubner */ 179*4e1bc9a0SAchim Leubner #define IOCTL_MN_FW_GET_TRACE_BUFFER 0x0f 180*4e1bc9a0SAchim Leubner 181*4e1bc9a0SAchim Leubner #define IOCTL_MN_NVMD_GET_CONFIG 0x0A 182*4e1bc9a0SAchim Leubner #define IOCTL_MN_NVMD_SET_CONFIG 0x0B 183*4e1bc9a0SAchim Leubner 184*4e1bc9a0SAchim Leubner #define IOCTL_MN_FW_GET_CORE_DUMP_AAP1 0x0C 185*4e1bc9a0SAchim Leubner #define IOCTL_MN_FW_GET_CORE_DUMP_IOP 0x0D 186*4e1bc9a0SAchim Leubner #define IOCTL_MN_FW_GET_CORE_DUMP_FLASH_AAP1 0x12 187*4e1bc9a0SAchim Leubner #define IOCTL_MN_FW_GET_CORE_DUMP_FLASH_IOP 0x13 188*4e1bc9a0SAchim Leubner 189*4e1bc9a0SAchim Leubner #define IOCTL_MN_LL_RESET_TRACE_INDEX 0x0e 190*4e1bc9a0SAchim Leubner #define IOCTL_MN_LL_GET_TRACE_BUFFER_INFO 0x0f 191*4e1bc9a0SAchim Leubner #define IOCTL_MN_LL_GET_TRACE_BUFFER 0x10 192*4e1bc9a0SAchim Leubner 193*4e1bc9a0SAchim Leubner #define IOCTL_MN_ENCRYPTION_GET_INFO 0x13 194*4e1bc9a0SAchim Leubner #define IOCTL_MN_ENCRYPTION_SET_MODE 0x14 195*4e1bc9a0SAchim Leubner #define IOCTL_MN_ENCRYPTION_KEK_ADD 0x15 196*4e1bc9a0SAchim Leubner #define IOCTL_MN_ENCRYPTION_DEK_ADD 0x16 197*4e1bc9a0SAchim Leubner #define IOCTL_MN_ENCRYPTION_DEK_INVALID 0x17 198*4e1bc9a0SAchim Leubner #define IOCTL_MN_ENCRYPTION_KEK_NVRAM 0x18 199*4e1bc9a0SAchim Leubner #define IOCTL_MN_ENCRYPTION_DEK_ASSIGN 0x19 200*4e1bc9a0SAchim Leubner #define IOCTL_MN_ENCRYPTION_LUN_QUERY 0x1A 201*4e1bc9a0SAchim Leubner #define IOCTL_MN_ENCRYPTION_KEK_LOAD_NVRAM 0x1B 202*4e1bc9a0SAchim Leubner #define IOCTL_MN_ENCRYPTION_ERROR_QUERY 0x1C 203*4e1bc9a0SAchim Leubner #define IOCTL_MN_ENCRYPTION_DEK_TABLE_INIT 0x1D 204*4e1bc9a0SAchim Leubner #define IOCTL_MN_ENCRYPT_LUN_VERIFY 0x1E 205*4e1bc9a0SAchim Leubner #define IOCTL_MN_ENCRYPT_OPERATOR_MGMT 0x1F 206*4e1bc9a0SAchim Leubner #define IOCTL_MN_ENCRYPT_SET_DEK_CONFIG_PAGE 0x21 207*4e1bc9a0SAchim Leubner #define IOCTL_MN_ENCRYPT_SET_CONTROL_PAGE 0x22 208*4e1bc9a0SAchim Leubner #define IOCTL_MN_ENCRYPT_SET_OPERATOR_CMD 0x23 209*4e1bc9a0SAchim Leubner #define IOCTL_MN_ENCRYPT_TEST_EXECUTE 0x24 210*4e1bc9a0SAchim Leubner #define IOCTL_MN_ENCRYPT_SET_HMAC_CONFIG_PAGE 0x25 211*4e1bc9a0SAchim Leubner #define IOCTL_MN_ENCRYPT_GET_OPERATOR_CMD 0x26 212*4e1bc9a0SAchim Leubner #define IOCTL_MN_ENCRYPT_RESCAN 0x27 213*4e1bc9a0SAchim Leubner #ifdef SOFT_RESET_TEST 214*4e1bc9a0SAchim Leubner #define IOCTL_MN_SOFT_RESET 0x28 215*4e1bc9a0SAchim Leubner #endif 216*4e1bc9a0SAchim Leubner /* SPCv configuration pages */ 217*4e1bc9a0SAchim Leubner #define IOCTL_MN_MODE_SENSE 0x30 218*4e1bc9a0SAchim Leubner #define IOCTL_MN_MODE_SELECT 0x31 219*4e1bc9a0SAchim Leubner 220*4e1bc9a0SAchim Leubner #define IOCTL_MN_TISA_TEST_ENCRYPT_DEK_DUMP 0x51 221*4e1bc9a0SAchim Leubner 222*4e1bc9a0SAchim Leubner #define IOCTL_MN_FW_GET_EVENT_FLASH_LOG1 0x5A 223*4e1bc9a0SAchim Leubner #define IOCTL_MN_FW_GET_EVENT_FLASH_LOG2 0x6A 224*4e1bc9a0SAchim Leubner #define IOCTL_MN_GET_EVENT_LOG1 0x5B 225*4e1bc9a0SAchim Leubner #define IOCTL_MN_GET_EVENT_LOG2 0x6B 226*4e1bc9a0SAchim Leubner 227*4e1bc9a0SAchim Leubner #define IOCTL_MN_GPIO_PINSETUP 0x01 228*4e1bc9a0SAchim Leubner #define IOCTL_MN_GPIO_EVENTSETUP 0x02 229*4e1bc9a0SAchim Leubner #define IOCTL_MN_GPIO_READ 0x03 230*4e1bc9a0SAchim Leubner #define IOCTL_MN_GPIO_WRITE 0x04 231*4e1bc9a0SAchim Leubner 232*4e1bc9a0SAchim Leubner #define IOCTL_MN_TMF_DEVICE_RESET 0x6F 233*4e1bc9a0SAchim Leubner #define IOCTL_MN_TMF_LUN_RESET 0x70 234*4e1bc9a0SAchim Leubner typedef struct tdFWControl 235*4e1bc9a0SAchim Leubner { 236*4e1bc9a0SAchim Leubner bit32 retcode; /* ret code (status) = (bit32)oscmCtrlEvnt_e */ 237*4e1bc9a0SAchim Leubner bit32 phase; /* ret code phase = (bit32)agcmCtrlFwPhase_e */ 238*4e1bc9a0SAchim Leubner bit32 phaseCmplt; /* percent complete for the current update phase */ 239*4e1bc9a0SAchim Leubner bit32 version; /* Hex encoded firmware version number */ 240*4e1bc9a0SAchim Leubner bit32 offset; /* Used for downloading firmware */ 241*4e1bc9a0SAchim Leubner bit32 len; /* len of buffer */ 242*4e1bc9a0SAchim Leubner bit32 size; /* Used in OS VPD and Trace get size operations. */ 243*4e1bc9a0SAchim Leubner bit32 reserved; /* padding required for 64 bit alignment */ 244*4e1bc9a0SAchim Leubner bit8 buffer[1]; /* Start of buffer */ 245*4e1bc9a0SAchim Leubner } tdFWControl_t; 246*4e1bc9a0SAchim Leubner 247*4e1bc9a0SAchim Leubner 248*4e1bc9a0SAchim Leubner typedef struct tdFWControlEx 249*4e1bc9a0SAchim Leubner { 250*4e1bc9a0SAchim Leubner tdFWControl_t *tdFWControl; 251*4e1bc9a0SAchim Leubner bit8 *buffer; // keep buffer pointer to be freed when the responce comes 252*4e1bc9a0SAchim Leubner bit8 *virtAddr; /* keep virtual address of the data */ 253*4e1bc9a0SAchim Leubner bit8 *usrAddr; /* keep virtual address of the user data */ 254*4e1bc9a0SAchim Leubner bit32 len; /* len of buffer */ 255*4e1bc9a0SAchim Leubner void *payload; /* pointer to IOCTL Payload */ 256*4e1bc9a0SAchim Leubner bit8 inProgress; /* if 1 - the IOCTL request is in progress */ 257*4e1bc9a0SAchim Leubner void *param1; 258*4e1bc9a0SAchim Leubner void *param2; 259*4e1bc9a0SAchim Leubner void *param3; 260*4e1bc9a0SAchim Leubner } tdFWControlEx_t; 261*4e1bc9a0SAchim Leubner 262*4e1bc9a0SAchim Leubner /************************************************************/ 263*4e1bc9a0SAchim Leubner //This flag and datastructure are specific for fw profiling, Now defined as 264*4e1bc9a0SAchim Leubner // compiler flag 265*4e1bc9a0SAchim Leubner //#define SPC_ENABLE_PROFILE 266*4e1bc9a0SAchim Leubner 267*4e1bc9a0SAchim Leubner #ifdef SPC_ENABLE_PROFILE 268*4e1bc9a0SAchim Leubner typedef struct tdFWProfile 269*4e1bc9a0SAchim Leubner { 270*4e1bc9a0SAchim Leubner bit32 status; 271*4e1bc9a0SAchim Leubner bit32 tcid; 272*4e1bc9a0SAchim Leubner bit32 processor; /* processor name "iop/aap1" */ 273*4e1bc9a0SAchim Leubner bit32 cmd; /* cmd to fw */ 274*4e1bc9a0SAchim Leubner bit32 len; /* len of buffer */ 275*4e1bc9a0SAchim Leubner bit32 codeStartAdd; 276*4e1bc9a0SAchim Leubner bit32 codeEndAdd; 277*4e1bc9a0SAchim Leubner bit32 reserved; /* padding required for 64 bit alignment */ 278*4e1bc9a0SAchim Leubner bit8 buffer[1]; /* Start of buffer */ 279*4e1bc9a0SAchim Leubner } tdFWProfile_t; 280*4e1bc9a0SAchim Leubner 281*4e1bc9a0SAchim Leubner /************************************************/ 282*4e1bc9a0SAchim Leubner /**Definations for FW profile*/ 283*4e1bc9a0SAchim Leubner #define FW_PROFILE_PROCESSOR_ID_IOP 0x00 284*4e1bc9a0SAchim Leubner #define FW_PROFILE_PROCESSOR_ID_AAP1 0x02 285*4e1bc9a0SAchim Leubner /* definitions for sub operation */ 286*4e1bc9a0SAchim Leubner #define START_TIMER_PROFILE 0x01 287*4e1bc9a0SAchim Leubner #define START_CODE_PROFILE 0x02 288*4e1bc9a0SAchim Leubner #define STOP_TIMER_PROFILE 0x81 289*4e1bc9a0SAchim Leubner #define STOP_CODE_PROFILE 0x82 290*4e1bc9a0SAchim Leubner /************************************************/ 291*4e1bc9a0SAchim Leubner 292*4e1bc9a0SAchim Leubner typedef struct tdFWProfileEx 293*4e1bc9a0SAchim Leubner { 294*4e1bc9a0SAchim Leubner tdFWProfile_t *tdFWProfile; 295*4e1bc9a0SAchim Leubner bit8 *buffer; // keep buffer pointer to be freed when the responce comes 296*4e1bc9a0SAchim Leubner bit8 *virtAddr; /* keep virtual address of the data */ 297*4e1bc9a0SAchim Leubner bit8 *usrAddr; /* keep virtual address of the user data */ 298*4e1bc9a0SAchim Leubner bit32 len; /* len of buffer */ 299*4e1bc9a0SAchim Leubner void *payload; /* pointer to IOCTL Payload */ 300*4e1bc9a0SAchim Leubner bit8 inProgress; /* if 1 - the IOCTL request is in progress */ 301*4e1bc9a0SAchim Leubner void *param1; 302*4e1bc9a0SAchim Leubner void *param2; 303*4e1bc9a0SAchim Leubner void *param3; 304*4e1bc9a0SAchim Leubner } tdFWProfileEx_t; 305*4e1bc9a0SAchim Leubner #endif 306*4e1bc9a0SAchim Leubner /************************************************************/ 307*4e1bc9a0SAchim Leubner typedef struct tdVPDControl 308*4e1bc9a0SAchim Leubner { 309*4e1bc9a0SAchim Leubner bit32 retcode; /* ret code (status) */ 310*4e1bc9a0SAchim Leubner bit32 phase; /* ret code phase */ 311*4e1bc9a0SAchim Leubner bit32 phaseCmplt; /* percent complete for the current update phase */ 312*4e1bc9a0SAchim Leubner bit32 version; /* Hex encoded firmware version number */ 313*4e1bc9a0SAchim Leubner bit32 offset; /* Used for downloading firmware */ 314*4e1bc9a0SAchim Leubner bit32 len; /* len of buffer */ 315*4e1bc9a0SAchim Leubner bit32 size; /* Used in OS VPD and Trace get size operations. */ 316*4e1bc9a0SAchim Leubner bit8 deviceID; /* padding required for 64 bit alignment */ 317*4e1bc9a0SAchim Leubner bit8 reserved1; 318*4e1bc9a0SAchim Leubner bit16 reserved2; 319*4e1bc9a0SAchim Leubner bit32 signature; 320*4e1bc9a0SAchim Leubner bit8 buffer[1]; /* Start of buffer */ 321*4e1bc9a0SAchim Leubner } tdVPDControl_t; 322*4e1bc9a0SAchim Leubner 323*4e1bc9a0SAchim Leubner typedef struct tdDeviceInfoIOCTL_s 324*4e1bc9a0SAchim Leubner { 325*4e1bc9a0SAchim Leubner bit8 deviceType; // TD_SATA_DEVICE or TD_SAS_DEVICE 326*4e1bc9a0SAchim Leubner bit8 linkRate; // 0x08: 1.5 Gbit/s; 0x09: 3.0; 0x0A: 6.0 Gbit/s. 327*4e1bc9a0SAchim Leubner bit8 phyId; 328*4e1bc9a0SAchim Leubner bit8 reserved; 329*4e1bc9a0SAchim Leubner bit32 sasAddressHi; // SAS address high 330*4e1bc9a0SAchim Leubner bit32 sasAddressLo; // SAS address low 331*4e1bc9a0SAchim Leubner bit32 up_sasAddressHi; // upstream SAS address high 332*4e1bc9a0SAchim Leubner bit32 up_sasAddressLo; // upstream SAS address low 333*4e1bc9a0SAchim Leubner bit32 ishost; 334*4e1bc9a0SAchim Leubner bit32 isEncryption; // is encryption enabled 335*4e1bc9a0SAchim Leubner bit32 isDIF; // is DIF enabled 336*4e1bc9a0SAchim Leubner unsigned long DeviceHandle; 337*4e1bc9a0SAchim Leubner bit32 host_num; 338*4e1bc9a0SAchim Leubner bit32 channel; 339*4e1bc9a0SAchim Leubner bit32 id; 340*4e1bc9a0SAchim Leubner bit32 lun; 341*4e1bc9a0SAchim Leubner }tdDeviceInfoIOCTL_t; 342*4e1bc9a0SAchim Leubner 343*4e1bc9a0SAchim Leubner /* Payload of IOCTL dump device list at OS layer */ 344*4e1bc9a0SAchim Leubner typedef struct tdDeviceInfoPayload_s 345*4e1bc9a0SAchim Leubner { 346*4e1bc9a0SAchim Leubner bit32 PathId; 347*4e1bc9a0SAchim Leubner bit32 TargetId; 348*4e1bc9a0SAchim Leubner bit32 Lun; 349*4e1bc9a0SAchim Leubner bit32 Reserved; /* Had better aligned to 64-bit. */ 350*4e1bc9a0SAchim Leubner 351*4e1bc9a0SAchim Leubner /* output */ 352*4e1bc9a0SAchim Leubner tdDeviceInfoIOCTL_t devInfo; 353*4e1bc9a0SAchim Leubner }tdDeviceInfoPayload_t; 354*4e1bc9a0SAchim Leubner 355*4e1bc9a0SAchim Leubner typedef struct tdDeviceListPayload_s 356*4e1bc9a0SAchim Leubner { 357*4e1bc9a0SAchim Leubner bit32 realDeviceCount;// the real device out in the array, returned by driver 358*4e1bc9a0SAchim Leubner bit32 deviceLength; // the length of tdDeviceInfoIOCTL_t array 359*4e1bc9a0SAchim Leubner bit8 pDeviceInfo[1]; // point to tdDeviceInfoIOCTL_t array 360*4e1bc9a0SAchim Leubner }tdDeviceListPayload_t; 361*4e1bc9a0SAchim Leubner 362*4e1bc9a0SAchim Leubner // Payload of IO error and event statistic IOCTL. 363*4e1bc9a0SAchim Leubner typedef struct tdIoErrorEventStatisticIOCTL_s 364*4e1bc9a0SAchim Leubner { 365*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_COMPLETED_ERROR_SCSI_STATUS; 366*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_ABORTED; 367*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_OVERFLOW; 368*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_UNDERFLOW; 369*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_FAILED; 370*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_ABORT_RESET; 371*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_NOT_VALID; 372*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_NO_DEVICE; 373*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_ILLEGAL_PARAMETER; 374*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_LINK_FAILURE; 375*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_PROG_ERROR; 376*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_DIF_IN_ERROR; 377*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_DIF_OUT_ERROR; 378*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_ERROR_HW_TIMEOUT; 379*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_XFER_ERROR_BREAK; 380*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_XFER_ERROR_PHY_NOT_READY; 381*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_OPEN_CNX_ERROR_PROTOCOL_NOT_SUPPORTED; 382*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_OPEN_CNX_ERROR_ZONE_VIOLATION; 383*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_OPEN_CNX_ERROR_BREAK; 384*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS; 385*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_OPEN_CNX_ERROR_BAD_DESTINATION; 386*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_OPEN_CNX_ERROR_CONNECTION_RATE_NOT_SUPPORTED; 387*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_OPEN_CNX_ERROR_STP_RESOURCES_BUSY; 388*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_OPEN_CNX_ERROR_WRONG_DESTINATION; 389*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_OPEN_CNX_ERROR_UNKNOWN_ERROR; 390*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_XFER_ERROR_NAK_RECEIVED; 391*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_XFER_ERROR_ACK_NAK_TIMEOUT; 392*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_XFER_ERROR_PEER_ABORTED; 393*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_XFER_ERROR_RX_FRAME; 394*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_XFER_ERROR_DMA; 395*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_XFER_ERROR_CREDIT_TIMEOUT; 396*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_XFER_ERROR_SATA_LINK_TIMEOUT; 397*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_XFER_ERROR_SATA; 398*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_XFER_ERROR_ABORTED_DUE_TO_SRST; 399*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_XFER_ERROR_REJECTED_NCQ_MODE; 400*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_XFER_ERROR_ABORTED_NCQ_MODE; 401*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_XFER_OPEN_RETRY_TIMEOUT; 402*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_XFER_SMP_RESP_CONNECTION_ERROR; 403*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_XFER_ERROR_UNEXPECTED_PHASE; 404*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_XFER_ERROR_XFER_RDY_OVERRUN; 405*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_XFER_ERROR_XFER_RDY_NOT_EXPECTED; 406*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_XFER_ERROR_CMD_ISSUE_ACK_NAK_TIMEOUT; 407*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_XFER_ERROR_CMD_ISSUE_BREAK_BEFORE_ACK_NAK; 408*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_XFER_ERROR_CMD_ISSUE_PHY_DOWN_BEFORE_ACK_NAK; 409*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_XFER_ERROR_OFFSET_MISMATCH; 410*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_XFER_ERROR_XFER_ZERO_DATA_LEN; 411*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_XFER_CMD_FRAME_ISSUED; 412*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_ERROR_INTERNAL_SMP_RESOURCE; 413*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_PORT_IN_RESET; 414*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_DS_NON_OPERATIONAL; 415*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_DS_IN_RECOVERY; 416*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_TM_TAG_NOT_FOUND; 417*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_XFER_PIO_SETUP_ERROR; 418*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_SSP_EXT_IU_ZERO_LEN_ERROR; 419*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_DS_IN_ERROR; 420*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_OPEN_CNX_ERROR_HW_RESOURCE_BUSY; 421*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_ABORT_IN_PROGRESS; 422*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_ABORT_DELAYED; 423*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_INVALID_LENGTH; 424*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_OPEN_CNX_ERROR_HW_RESOURCE_BUSY_ALT; 425*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS_OPEN_RETRY_BACKOFF_THRESHOLD_REACHED; 426*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS_OPEN_TMO; 427*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS_NO_DEST; 428*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS_OPEN_COLLIDE; 429*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS_PATHWAY_BLOCKED; 430*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_DS_INVALID; 431*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_XFER_READ_COMPL_ERR; 432*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_XFER_ERR_LAST_PIO_DATAIN_CRC_ERR; 433*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_XFR_ERROR_INTERNAL_CRC_ERROR; 434*4e1bc9a0SAchim Leubner bit32 agOSSA_MPI_IO_RQE_BUSY_FULL; 435*4e1bc9a0SAchim Leubner bit32 agOSSA_MPI_ERR_IO_RESOURCE_UNAVAILABLE; 436*4e1bc9a0SAchim Leubner bit32 agOSSA_MPI_ERR_ATAPI_DEVICE_BUSY; 437*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_XFR_ERROR_DEK_KEY_CACHE_MISS; 438*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_XFR_ERROR_DEK_KEY_TAG_MISMATCH; 439*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_XFR_ERROR_CIPHER_MODE_INVALID; 440*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_XFR_ERROR_DEK_IV_MISMATCH; 441*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_XFR_ERROR_DEK_RAM_INTERFACE_ERROR; 442*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_XFR_ERROR_INTERNAL_RAM; 443*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_XFR_ERROR_DIF_MISMATCH; 444*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_XFR_ERROR_DIF_APPLICATION_TAG_MISMATCH; 445*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_XFR_ERROR_DIF_REFERENCE_TAG_MISMATCH; 446*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_XFR_ERROR_DIF_CRC_MISMATCH; 447*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_XFR_ERROR_INVALID_SSP_RSP_FRAME; 448*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_XFER_ERR_EOB_DATA_OVERRUN; 449*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_XFR_ERROR_DEK_INDEX_OUT_OF_BOUNDS; 450*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_OPEN_CNX_ERROR_OPEN_PREEMPTED; 451*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_XFR_ERROR_DEK_ILLEGAL_TABLE; 452*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_XFER_ERROR_DIF_INTERNAL_ERROR; 453*4e1bc9a0SAchim Leubner bit32 agOSSA_MPI_ERR_OFFLOAD_DIF_OR_ENC_NOT_ENABLED; 454*4e1bc9a0SAchim Leubner bit32 agOSSA_IO_UNKNOWN_ERROR; 455*4e1bc9a0SAchim Leubner 456*4e1bc9a0SAchim Leubner } tdIoErrorEventStatisticIOCTL_t; 457*4e1bc9a0SAchim Leubner 458*4e1bc9a0SAchim Leubner /* 459*4e1bc9a0SAchim Leubner 01: soft error 460*4e1bc9a0SAchim Leubner 02: not ready 461*4e1bc9a0SAchim Leubner 03: medium error 462*4e1bc9a0SAchim Leubner 04: hardware error 463*4e1bc9a0SAchim Leubner 05: illegal request 464*4e1bc9a0SAchim Leubner 06: unit attention 465*4e1bc9a0SAchim Leubner 0b: abort command 466*4e1bc9a0SAchim Leubner */ 467*4e1bc9a0SAchim Leubner typedef struct tdSenseKeyCount_s{ 468*4e1bc9a0SAchim Leubner bit32 SoftError; 469*4e1bc9a0SAchim Leubner bit32 MediumNotReady; 470*4e1bc9a0SAchim Leubner bit32 MediumError; 471*4e1bc9a0SAchim Leubner bit32 HardwareError; 472*4e1bc9a0SAchim Leubner bit32 IllegalRequest; 473*4e1bc9a0SAchim Leubner bit32 UnitAttention; 474*4e1bc9a0SAchim Leubner bit32 AbortCommand; 475*4e1bc9a0SAchim Leubner bit32 OtherKeyType; 476*4e1bc9a0SAchim Leubner }tdSenseKeyCount_t; 477*4e1bc9a0SAchim Leubner 478*4e1bc9a0SAchim Leubner /* 479*4e1bc9a0SAchim Leubner Code Status Command completed Service response 480*4e1bc9a0SAchim Leubner 00h GOOD Yes COMMAND COMPLETE 481*4e1bc9a0SAchim Leubner 02h CHECK CONDITION Yes COMMAND COMPLETE 482*4e1bc9a0SAchim Leubner 04h CONDITION MET Yes COMMAND COMPLETE 483*4e1bc9a0SAchim Leubner 08h BUSY Yes COMMAND COMPLETE 484*4e1bc9a0SAchim Leubner 10h Obsolete 485*4e1bc9a0SAchim Leubner 14h Obsolete 486*4e1bc9a0SAchim Leubner 18h RESERVATION CONFLICT Yes COMMAND COMPLETE 487*4e1bc9a0SAchim Leubner 22h Obsolete 488*4e1bc9a0SAchim Leubner 28h TASK SET FULL Yes COMMAND COMPLETE 489*4e1bc9a0SAchim Leubner 30h ACA ACTIVE Yes COMMAND COMPLETE 490*4e1bc9a0SAchim Leubner 40h TASK ABORTED Yes COMMAND COMPLETE 491*4e1bc9a0SAchim Leubner */ 492*4e1bc9a0SAchim Leubner typedef struct tdSCSIStatusCount_s{ 493*4e1bc9a0SAchim Leubner bit32 GoodStatus; 494*4e1bc9a0SAchim Leubner bit32 CheckCondition; 495*4e1bc9a0SAchim Leubner bit32 ConditionMet; 496*4e1bc9a0SAchim Leubner bit32 BusyStatus; 497*4e1bc9a0SAchim Leubner bit32 ResvConflict; 498*4e1bc9a0SAchim Leubner bit32 TaskSetFull; 499*4e1bc9a0SAchim Leubner bit32 AcaActive; 500*4e1bc9a0SAchim Leubner bit32 TaskAborted; 501*4e1bc9a0SAchim Leubner bit32 ObsoleteStatus; 502*4e1bc9a0SAchim Leubner }tdSCSIStatusCount_t; 503*4e1bc9a0SAchim Leubner 504*4e1bc9a0SAchim Leubner /* Payload of Io Error Statistic IOCTL. */ 505*4e1bc9a0SAchim Leubner typedef struct tdIoErrorStatisticPayload_s 506*4e1bc9a0SAchim Leubner { 507*4e1bc9a0SAchim Leubner bit32 flag; 508*4e1bc9a0SAchim Leubner bit32 Reserved; /* Had better aligned to 64-bit. */ 509*4e1bc9a0SAchim Leubner 510*4e1bc9a0SAchim Leubner /* output */ 511*4e1bc9a0SAchim Leubner tdIoErrorEventStatisticIOCTL_t IoError; 512*4e1bc9a0SAchim Leubner tdSCSIStatusCount_t ScsiStatusCounter; 513*4e1bc9a0SAchim Leubner tdSenseKeyCount_t SenseKeyCounter; 514*4e1bc9a0SAchim Leubner } tdIoErrorStatisticPayload_t; 515*4e1bc9a0SAchim Leubner 516*4e1bc9a0SAchim Leubner /* Payload of Io Error Statistic IOCTL. */ 517*4e1bc9a0SAchim Leubner typedef struct tdIoEventStatisticPayload_s 518*4e1bc9a0SAchim Leubner { 519*4e1bc9a0SAchim Leubner bit32 flag; 520*4e1bc9a0SAchim Leubner bit32 Reserved; /* Had better aligned to 64-bit. */ 521*4e1bc9a0SAchim Leubner 522*4e1bc9a0SAchim Leubner /* output */ 523*4e1bc9a0SAchim Leubner tdIoErrorEventStatisticIOCTL_t IoEvent; 524*4e1bc9a0SAchim Leubner } tdIoEventStatisticPayload_t; 525*4e1bc9a0SAchim Leubner 526*4e1bc9a0SAchim Leubner /* Payload of Register IOCTL. */ 527*4e1bc9a0SAchim Leubner typedef struct tdRegisterPayload_s 528*4e1bc9a0SAchim Leubner { 529*4e1bc9a0SAchim Leubner bit32 flag; 530*4e1bc9a0SAchim Leubner bit32 busNum; 531*4e1bc9a0SAchim Leubner bit32 RegAddr; /* Register address */ 532*4e1bc9a0SAchim Leubner bit32 RegValue; /* Register value */ 533*4e1bc9a0SAchim Leubner 534*4e1bc9a0SAchim Leubner } tdRegisterPayload_t; 535*4e1bc9a0SAchim Leubner 536*4e1bc9a0SAchim Leubner 537*4e1bc9a0SAchim Leubner #define FORENSIC_DATA_TYPE_GSM_SPACE 1 538*4e1bc9a0SAchim Leubner #define FORENSIC_DATA_TYPE_QUEUE 2 539*4e1bc9a0SAchim Leubner #define FORENSIC_DATA_TYPE_FATAL 3 540*4e1bc9a0SAchim Leubner #define FORENSIC_DATA_TYPE_NON_FATAL 4 541*4e1bc9a0SAchim Leubner #define FORENSIC_DATA_TYPE_IB_QUEUE 5 542*4e1bc9a0SAchim Leubner #define FORENSIC_DATA_TYPE_OB_QUEUE 6 543*4e1bc9a0SAchim Leubner #define FORENSIC_DATA_TYPE_CHECK_FATAL 0x70 544*4e1bc9a0SAchim Leubner 545*4e1bc9a0SAchim Leubner #define FORENSIC_Q_TYPE_INBOUND 1 546*4e1bc9a0SAchim Leubner #define FORENSIC_Q_TYPE_OUTBOUND 2 547*4e1bc9a0SAchim Leubner 548*4e1bc9a0SAchim Leubner /* get forensic data IOCTL payload */ 549*4e1bc9a0SAchim Leubner typedef struct tdForensicDataPayload_s 550*4e1bc9a0SAchim Leubner { 551*4e1bc9a0SAchim Leubner bit32 DataType; 552*4e1bc9a0SAchim Leubner union 553*4e1bc9a0SAchim Leubner { 554*4e1bc9a0SAchim Leubner struct 555*4e1bc9a0SAchim Leubner { 556*4e1bc9a0SAchim Leubner bit32 directLen; 557*4e1bc9a0SAchim Leubner bit32 directOffset; 558*4e1bc9a0SAchim Leubner bit32 readLen; 559*4e1bc9a0SAchim Leubner bit8 directData[1]; 560*4e1bc9a0SAchim Leubner } gsmBuffer; 561*4e1bc9a0SAchim Leubner 562*4e1bc9a0SAchim Leubner struct 563*4e1bc9a0SAchim Leubner { 564*4e1bc9a0SAchim Leubner bit16 queueType; 565*4e1bc9a0SAchim Leubner bit16 queueIndex; 566*4e1bc9a0SAchim Leubner bit32 directLen; 567*4e1bc9a0SAchim Leubner bit8 directData[1]; 568*4e1bc9a0SAchim Leubner } queueBuffer; 569*4e1bc9a0SAchim Leubner 570*4e1bc9a0SAchim Leubner struct 571*4e1bc9a0SAchim Leubner { 572*4e1bc9a0SAchim Leubner bit32 directLen; 573*4e1bc9a0SAchim Leubner bit32 directOffset; 574*4e1bc9a0SAchim Leubner bit32 readLen; 575*4e1bc9a0SAchim Leubner bit8 directData[1]; 576*4e1bc9a0SAchim Leubner } dataBuffer; 577*4e1bc9a0SAchim Leubner }; 578*4e1bc9a0SAchim Leubner }tdForensicDataPayload_t; 579*4e1bc9a0SAchim Leubner 580*4e1bc9a0SAchim Leubner typedef struct tdBistPayload_s 581*4e1bc9a0SAchim Leubner { 582*4e1bc9a0SAchim Leubner bit32 testType; 583*4e1bc9a0SAchim Leubner bit32 testLength; 584*4e1bc9a0SAchim Leubner bit32 testData[29]; 585*4e1bc9a0SAchim Leubner }tdBistPayload_t; 586*4e1bc9a0SAchim Leubner 587*4e1bc9a0SAchim Leubner typedef struct _TSTMTID_CARD_LOCATION_INFO 588*4e1bc9a0SAchim Leubner { 589*4e1bc9a0SAchim Leubner bit32 CardNo; 590*4e1bc9a0SAchim Leubner bit32 Bus; 591*4e1bc9a0SAchim Leubner bit32 Slot; 592*4e1bc9a0SAchim Leubner bit32 Device; 593*4e1bc9a0SAchim Leubner bit32 Function; 594*4e1bc9a0SAchim Leubner bit32 IOLower; 595*4e1bc9a0SAchim Leubner bit32 IO_Upper; 596*4e1bc9a0SAchim Leubner bit32 VidDid; 597*4e1bc9a0SAchim Leubner bit32 PhyMem; 598*4e1bc9a0SAchim Leubner bit32 Flag; 599*4e1bc9a0SAchim Leubner 600*4e1bc9a0SAchim Leubner } TSTMTID_CARD_LOCATION_INFO; 601*4e1bc9a0SAchim Leubner 602*4e1bc9a0SAchim Leubner typedef struct _TSTMTID_TRACE_BUFFER_INFO 603*4e1bc9a0SAchim Leubner { 604*4e1bc9a0SAchim Leubner bit32 CardNo; 605*4e1bc9a0SAchim Leubner bit32 TraceCompiled; 606*4e1bc9a0SAchim Leubner bit32 BufferSize; 607*4e1bc9a0SAchim Leubner bit32 CurrentIndex; 608*4e1bc9a0SAchim Leubner bit32 TraceWrap; 609*4e1bc9a0SAchim Leubner bit32 CurrentTraceIndexWrapCount; 610*4e1bc9a0SAchim Leubner bit32 TraceMask; 611*4e1bc9a0SAchim Leubner bit32 Flag; 612*4e1bc9a0SAchim Leubner 613*4e1bc9a0SAchim Leubner } TSTMTID_TRACE_BUFFER_INFO; 614*4e1bc9a0SAchim Leubner 615*4e1bc9a0SAchim Leubner #define FetchBufferSIZE 32 616*4e1bc9a0SAchim Leubner #define LowFence32Bits 0xFCFD1234 617*4e1bc9a0SAchim Leubner #define HighFence32Bits 0x5678ABDC 618*4e1bc9a0SAchim Leubner 619*4e1bc9a0SAchim Leubner typedef struct _TSTMTID_TRACE_BUFFER_FETCH 620*4e1bc9a0SAchim Leubner { 621*4e1bc9a0SAchim Leubner bit32 CardNo; 622*4e1bc9a0SAchim Leubner bit32 BufferOffsetBegin; 623*4e1bc9a0SAchim Leubner bit32 LowFence; 624*4e1bc9a0SAchim Leubner bit8 Data[FetchBufferSIZE]; 625*4e1bc9a0SAchim Leubner bit32 HighFence; 626*4e1bc9a0SAchim Leubner bit32 Flag; 627*4e1bc9a0SAchim Leubner 628*4e1bc9a0SAchim Leubner } TSTMTID_TRACE_BUFFER_FETCH; 629*4e1bc9a0SAchim Leubner 630*4e1bc9a0SAchim Leubner 631*4e1bc9a0SAchim Leubner typedef struct _TSTMTID_TRACE_BUFFER_RESET 632*4e1bc9a0SAchim Leubner { 633*4e1bc9a0SAchim Leubner bit32 CardNo; 634*4e1bc9a0SAchim Leubner bit32 Reset; 635*4e1bc9a0SAchim Leubner bit32 TraceMask; 636*4e1bc9a0SAchim Leubner bit32 Flag; 637*4e1bc9a0SAchim Leubner 638*4e1bc9a0SAchim Leubner } TSTMTID_TRACE_BUFFER_RESET; 639*4e1bc9a0SAchim Leubner 640*4e1bc9a0SAchim Leubner 641*4e1bc9a0SAchim Leubner 642*4e1bc9a0SAchim Leubner typedef struct tdPhyCount_s{ 643*4e1bc9a0SAchim Leubner bit32 Phy; 644*4e1bc9a0SAchim Leubner bit32 BW_tx; 645*4e1bc9a0SAchim Leubner bit32 BW_rx; 646*4e1bc9a0SAchim Leubner bit32 InvalidDword; 647*4e1bc9a0SAchim Leubner bit32 runningDisparityError; 648*4e1bc9a0SAchim Leubner bit32 codeViolation; 649*4e1bc9a0SAchim Leubner bit32 LossOfSyncDW; 650*4e1bc9a0SAchim Leubner bit32 phyResetProblem; 651*4e1bc9a0SAchim Leubner bit32 inboundCRCError; 652*4e1bc9a0SAchim Leubner }tdPhyCount_t; 653*4e1bc9a0SAchim Leubner 654*4e1bc9a0SAchim Leubner 655*4e1bc9a0SAchim Leubner typedef struct _PHY_GENERAL_STATE 656*4e1bc9a0SAchim Leubner { 657*4e1bc9a0SAchim Leubner bit32 Dword0; 658*4e1bc9a0SAchim Leubner bit32 Dword1; 659*4e1bc9a0SAchim Leubner 660*4e1bc9a0SAchim Leubner }GetPhyGenState_t; 661*4e1bc9a0SAchim Leubner typedef struct agsaPhyGeneralState_s 662*4e1bc9a0SAchim Leubner { 663*4e1bc9a0SAchim Leubner GetPhyGenState_t PhyGenData[16]; 664*4e1bc9a0SAchim Leubner bit32 Reserved1; 665*4e1bc9a0SAchim Leubner bit32 Reserved2; 666*4e1bc9a0SAchim Leubner } agsaPhyGeneralState_t; 667*4e1bc9a0SAchim Leubner 668*4e1bc9a0SAchim Leubner typedef struct _PHY_DETAILS_ 669*4e1bc9a0SAchim Leubner { 670*4e1bc9a0SAchim Leubner bit8 sasAddressLo[4]; 671*4e1bc9a0SAchim Leubner bit8 sasAddressHi[4]; 672*4e1bc9a0SAchim Leubner bit8 attached_sasAddressLo[4]; 673*4e1bc9a0SAchim Leubner bit8 attached_sasAddressHi[4]; 674*4e1bc9a0SAchim Leubner bit8 attached_phy; 675*4e1bc9a0SAchim Leubner bit8 attached_dev_type ; 676*4e1bc9a0SAchim Leubner }PhyDetails_t; 677*4e1bc9a0SAchim Leubner 678*4e1bc9a0SAchim Leubner enum SAS_SATA_DEVICE_TYPE { 679*4e1bc9a0SAchim Leubner SAS_PHY_NO_DEVICE , 680*4e1bc9a0SAchim Leubner SAS_PHY_END_DEVICE, 681*4e1bc9a0SAchim Leubner SAS_PHY_EXPANDER_DEVICE, 682*4e1bc9a0SAchim Leubner SAS_PHY_SATA_DEVICE = 0x11, 683*4e1bc9a0SAchim Leubner }; 684*4e1bc9a0SAchim Leubner #define PHY_SETTINGS_LEN 1024 685*4e1bc9a0SAchim Leubner 686*4e1bc9a0SAchim Leubner #endif /* TD_IOCTL_H */ 687