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