xref: /freebsd/sys/dev/pms/RefTisa/discovery/api/dm.h (revision 2ff63af9b88c7413b7d71715b5532625752a248e)
1*4e1bc9a0SAchim Leubner /*******************************************************************************
2*4e1bc9a0SAchim Leubner **
3*4e1bc9a0SAchim Leubner *Copyright (c) 2014 PMC-Sierra, Inc.  All rights reserved.
4*4e1bc9a0SAchim Leubner *
5*4e1bc9a0SAchim Leubner *Redistribution and use in source and binary forms, with or without modification, are permitted provided
6*4e1bc9a0SAchim Leubner *that the following conditions are met:
7*4e1bc9a0SAchim Leubner *1. Redistributions of source code must retain the above copyright notice, this list of conditions and the
8*4e1bc9a0SAchim Leubner *following disclaimer.
9*4e1bc9a0SAchim Leubner *2. Redistributions in binary form must reproduce the above copyright notice,
10*4e1bc9a0SAchim Leubner *this list of conditions and the following disclaimer in the documentation and/or other materials provided
11*4e1bc9a0SAchim Leubner *with the distribution.
12*4e1bc9a0SAchim Leubner *
13*4e1bc9a0SAchim Leubner *THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED
14*4e1bc9a0SAchim Leubner *WARRANTIES,INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
15*4e1bc9a0SAchim Leubner *FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
16*4e1bc9a0SAchim Leubner *FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
17*4e1bc9a0SAchim Leubner *NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
18*4e1bc9a0SAchim Leubner *BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
19*4e1bc9a0SAchim Leubner *LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
20*4e1bc9a0SAchim Leubner *SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE
21*4e1bc9a0SAchim Leubner *
22*4e1bc9a0SAchim Leubner *
23*4e1bc9a0SAchim Leubner ********************************************************************************/
24*4e1bc9a0SAchim Leubner /********************************************************************************
25*4e1bc9a0SAchim Leubner **
26*4e1bc9a0SAchim Leubner *   dm.h
27*4e1bc9a0SAchim Leubner *
28*4e1bc9a0SAchim Leubner *   Abstract:   This module defines the contants, enum and #define definition used
29*4e1bc9a0SAchim Leubner *               by Discovery Moduled (DM).
30*4e1bc9a0SAchim Leubner *
31*4e1bc9a0SAchim Leubner ********************************************************************************/
32*4e1bc9a0SAchim Leubner 
33*4e1bc9a0SAchim Leubner #ifndef DM_H
34*4e1bc9a0SAchim Leubner 
35*4e1bc9a0SAchim Leubner #define DM_H
36*4e1bc9a0SAchim Leubner 
37*4e1bc9a0SAchim Leubner /*************************************************
38*4e1bc9a0SAchim Leubner  *   constants for type field in agsaMem_t
39*4e1bc9a0SAchim Leubner  *************************************************/
40*4e1bc9a0SAchim Leubner #define DM_CACHED_MEM                             0x00     /**< CACHED memory type */
41*4e1bc9a0SAchim Leubner #define DM_DMA_MEM                                0x01     /**< DMA memory type */
42*4e1bc9a0SAchim Leubner #define DM_CACHED_DMA_MEM                         0x02     /**< CACHED DMA memory type */
43*4e1bc9a0SAchim Leubner 
44*4e1bc9a0SAchim Leubner /*************************************************
45*4e1bc9a0SAchim Leubner  *   constants for API return values
46*4e1bc9a0SAchim Leubner  *************************************************/
47*4e1bc9a0SAchim Leubner #define DM_RC_SUCCESS                             0x00     /**< Successful function return value */
48*4e1bc9a0SAchim Leubner #define DM_RC_FAILURE                             0x01     /**< Failed function return value */
49*4e1bc9a0SAchim Leubner #define DM_RC_BUSY                                0x02     /**< Busy function return value */
50*4e1bc9a0SAchim Leubner #define DM_RC_VERSION_INCOMPATIBLE                0x03     /**< Version miss match */
51*4e1bc9a0SAchim Leubner #define DM_RC_VERSION_UNTESTED                    0x04     /**< Version not tested */
52*4e1bc9a0SAchim Leubner 
53*4e1bc9a0SAchim Leubner 
54*4e1bc9a0SAchim Leubner 
55*4e1bc9a0SAchim Leubner /*************************************************
56*4e1bc9a0SAchim Leubner  *   Discovery option
57*4e1bc9a0SAchim Leubner  *************************************************/
58*4e1bc9a0SAchim Leubner #define DM_DISCOVERY_OPTION_FULL_START			0x00     /**< Full discovery */
59*4e1bc9a0SAchim Leubner #define DM_DISCOVERY_OPTION_INCREMENTAL_START		0x01     /**< Incremental discovery */
60*4e1bc9a0SAchim Leubner #define DM_DISCOVERY_OPTION_ABORT			0x02     /**< Discovery abort */
61*4e1bc9a0SAchim Leubner 
62*4e1bc9a0SAchim Leubner 
63*4e1bc9a0SAchim Leubner /*************************************************
64*4e1bc9a0SAchim Leubner  *   Discovery status
65*4e1bc9a0SAchim Leubner  *************************************************/
66*4e1bc9a0SAchim Leubner enum dmDiscoveryState_e
67*4e1bc9a0SAchim Leubner {
68*4e1bc9a0SAchim Leubner   dmDiscCompleted  = 0,
69*4e1bc9a0SAchim Leubner   dmDiscFailed,
70*4e1bc9a0SAchim Leubner   dmDiscAborted,
71*4e1bc9a0SAchim Leubner   dmDiscAbortFailed,
72*4e1bc9a0SAchim Leubner   dmDiscInProgress,
73*4e1bc9a0SAchim Leubner   dmDiscAbortInvalid, /* no discovery to abort */
74*4e1bc9a0SAchim Leubner   dmDiscAbortInProgress, /* abort in progress */
75*4e1bc9a0SAchim Leubner 
76*4e1bc9a0SAchim Leubner };
77*4e1bc9a0SAchim Leubner 
78*4e1bc9a0SAchim Leubner /*************************************************
79*4e1bc9a0SAchim Leubner  *   Device status
80*4e1bc9a0SAchim Leubner  *************************************************/
81*4e1bc9a0SAchim Leubner enum dmDeviceState_e
82*4e1bc9a0SAchim Leubner {
83*4e1bc9a0SAchim Leubner   dmDeviceNoChange = 0,
84*4e1bc9a0SAchim Leubner   dmDeviceArrival,
85*4e1bc9a0SAchim Leubner   dmDeviceRemoval,
86*4e1bc9a0SAchim Leubner   dmDeviceMCNChange,
87*4e1bc9a0SAchim Leubner   dmDeviceRateChange,
88*4e1bc9a0SAchim Leubner };
89*4e1bc9a0SAchim Leubner 
90*4e1bc9a0SAchim Leubner typedef struct  dmContext_s {
91*4e1bc9a0SAchim Leubner 		void		*tdData;
92*4e1bc9a0SAchim Leubner 		void		*dmData;
93*4e1bc9a0SAchim Leubner } dmContext_t;
94*4e1bc9a0SAchim Leubner 
95*4e1bc9a0SAchim Leubner typedef struct{
96*4e1bc9a0SAchim Leubner         bit16	smpTimeout;
97*4e1bc9a0SAchim Leubner         bit16	it_NexusTimeout;
98*4e1bc9a0SAchim Leubner         bit16	firstBurstSize;
99*4e1bc9a0SAchim Leubner         bit8	 flag;
100*4e1bc9a0SAchim Leubner         bit8	 devType_S_Rate;
101*4e1bc9a0SAchim Leubner         bit8 	sasAddressHi[4];
102*4e1bc9a0SAchim Leubner         bit8 	sasAddressLo[4];
103*4e1bc9a0SAchim Leubner         bit8    initiator_ssp_stp_smp;
104*4e1bc9a0SAchim Leubner         bit8    target_ssp_stp_smp;
105*4e1bc9a0SAchim Leubner         /* bit8 - bit14 are set by the user of DM such as TDM for directly attached expander
106*4e1bc9a0SAchim Leubner            0 - 7; PhyID
107*4e1bc9a0SAchim Leubner            8: non SMP or not
108*4e1bc9a0SAchim Leubner            9 - 10: types of expander, valid only when bit8 is set
109*4e1bc9a0SAchim Leubner                    10b (2): edge expander
110*4e1bc9a0SAchim Leubner                    11b (3): fanout expander
111*4e1bc9a0SAchim Leubner            11 - 14: MCN
112*4e1bc9a0SAchim Leubner         */
113*4e1bc9a0SAchim Leubner         bit16   ext;
114*4e1bc9a0SAchim Leubner         bit8    sataDeviceType;
115*4e1bc9a0SAchim Leubner         bit8    reserved;
116*4e1bc9a0SAchim Leubner } dmDeviceInfo_t;
117*4e1bc9a0SAchim Leubner 
118*4e1bc9a0SAchim Leubner 
119*4e1bc9a0SAchim Leubner typedef struct{
120*4e1bc9a0SAchim Leubner 	void 	*virtPtr;
121*4e1bc9a0SAchim Leubner 	void 	*osHandle;
122*4e1bc9a0SAchim Leubner 	bit32 	physAddrUpper;
123*4e1bc9a0SAchim Leubner 	bit32 	physAddrLower;
124*4e1bc9a0SAchim Leubner 	bit32 	totalLength;
125*4e1bc9a0SAchim Leubner 	bit32 	numElements;
126*4e1bc9a0SAchim Leubner 	bit32 	singleElementLength;
127*4e1bc9a0SAchim Leubner 	bit32 	alignment;
128*4e1bc9a0SAchim Leubner 	bit32 	type;
129*4e1bc9a0SAchim Leubner 	bit32 	reserved;
130*4e1bc9a0SAchim Leubner } dmMem_t;
131*4e1bc9a0SAchim Leubner 
132*4e1bc9a0SAchim Leubner #define DM_NUM_MEM_CHUNKS 8
133*4e1bc9a0SAchim Leubner 
134*4e1bc9a0SAchim Leubner typedef struct{
135*4e1bc9a0SAchim Leubner 	bit32 		count;
136*4e1bc9a0SAchim Leubner 	dmMem_t 	dmMemory[DM_NUM_MEM_CHUNKS];
137*4e1bc9a0SAchim Leubner } dmMemoryRequirement_t;
138*4e1bc9a0SAchim Leubner 
139*4e1bc9a0SAchim Leubner typedef    dmContext_t    dmPortContext_t;
140*4e1bc9a0SAchim Leubner 
141*4e1bc9a0SAchim Leubner typedef    dmContext_t    dmRoot_t;
142*4e1bc9a0SAchim Leubner 
143*4e1bc9a0SAchim Leubner typedef struct{
144*4e1bc9a0SAchim Leubner  bit32   numDevHandles;
145*4e1bc9a0SAchim Leubner  bit32   tbd1;
146*4e1bc9a0SAchim Leubner  bit32   tbd2;
147*4e1bc9a0SAchim Leubner #ifdef DM_DEBUG
148*4e1bc9a0SAchim Leubner  bit32   DMDebugLevel;
149*4e1bc9a0SAchim Leubner #endif
150*4e1bc9a0SAchim Leubner  bit32   itNexusTimeout;
151*4e1bc9a0SAchim Leubner } dmSwConfig_t;
152*4e1bc9a0SAchim Leubner 
153*4e1bc9a0SAchim Leubner typedef struct{
154*4e1bc9a0SAchim Leubner                bit8  	sasRemoteAddressHi[4];
155*4e1bc9a0SAchim Leubner                bit8  	sasRemoteAddressLo[4];
156*4e1bc9a0SAchim Leubner                bit8  	sasLocalAddressHi[4];
157*4e1bc9a0SAchim Leubner                bit8  	sasLocalAddressLo[4];
158*4e1bc9a0SAchim Leubner                bit32    flag;
159*4e1bc9a0SAchim Leubner } dmPortInfo_t;
160*4e1bc9a0SAchim Leubner 
161*4e1bc9a0SAchim Leubner 
162*4e1bc9a0SAchim Leubner #endif  /* DM_H */
163