xref: /freebsd/sys/dev/pms/RefTisa/tisa/sassata/common/tdioctl.h (revision 2ff63af9b88c7413b7d71715b5532625752a248e)
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