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*
23********************************************************************************/
24/********************************************************************************
25**
26*   dm.h
27*
28*   Abstract:   This module defines the contants, enum and #define definition used
29*               by Discovery Moduled (DM).
30*
31********************************************************************************/
32
33#ifndef DM_H
34
35#define DM_H
36
37/*************************************************
38 *   constants for type field in agsaMem_t
39 *************************************************/
40#define DM_CACHED_MEM                             0x00     /**< CACHED memory type */
41#define DM_DMA_MEM                                0x01     /**< DMA memory type */
42#define DM_CACHED_DMA_MEM                         0x02     /**< CACHED DMA memory type */
43
44/*************************************************
45 *   constants for API return values
46 *************************************************/
47#define DM_RC_SUCCESS                             0x00     /**< Successful function return value */
48#define DM_RC_FAILURE                             0x01     /**< Failed function return value */
49#define DM_RC_BUSY                                0x02     /**< Busy function return value */
50#define DM_RC_VERSION_INCOMPATIBLE                0x03     /**< Version miss match */
51#define DM_RC_VERSION_UNTESTED                    0x04     /**< Version not tested */
52
53
54
55/*************************************************
56 *   Discovery option
57 *************************************************/
58#define DM_DISCOVERY_OPTION_FULL_START			0x00     /**< Full discovery */
59#define DM_DISCOVERY_OPTION_INCREMENTAL_START		0x01     /**< Incremental discovery */
60#define DM_DISCOVERY_OPTION_ABORT			0x02     /**< Discovery abort */
61
62
63/*************************************************
64 *   Discovery status
65 *************************************************/
66enum dmDiscoveryState_e
67{
68  dmDiscCompleted  = 0,
69  dmDiscFailed,
70  dmDiscAborted,
71  dmDiscAbortFailed,
72  dmDiscInProgress,
73  dmDiscAbortInvalid, /* no discovery to abort */
74  dmDiscAbortInProgress, /* abort in progress */
75
76};
77
78/*************************************************
79 *   Device status
80 *************************************************/
81enum dmDeviceState_e
82{
83  dmDeviceNoChange = 0,
84  dmDeviceArrival,
85  dmDeviceRemoval,
86  dmDeviceMCNChange,
87  dmDeviceRateChange,
88};
89
90typedef struct  dmContext_s {
91		void		*tdData;
92		void		*dmData;
93} dmContext_t;
94
95typedef struct{
96        bit16	smpTimeout;
97        bit16	it_NexusTimeout;
98        bit16	firstBurstSize;
99        bit8	 flag;
100        bit8	 devType_S_Rate;
101        bit8 	sasAddressHi[4];
102        bit8 	sasAddressLo[4];
103        bit8    initiator_ssp_stp_smp;
104        bit8    target_ssp_stp_smp;
105        /* bit8 - bit14 are set by the user of DM such as TDM for directly attached expander
106           0 - 7; PhyID
107           8: non SMP or not
108           9 - 10: types of expander, valid only when bit8 is set
109                   10b (2): edge expander
110                   11b (3): fanout expander
111           11 - 14: MCN
112        */
113        bit16   ext;
114        bit8    sataDeviceType;
115        bit8    reserved;
116} dmDeviceInfo_t;
117
118
119typedef struct{
120	void 	*virtPtr;
121	void 	*osHandle;
122	bit32 	physAddrUpper;
123	bit32 	physAddrLower;
124	bit32 	totalLength;
125	bit32 	numElements;
126	bit32 	singleElementLength;
127	bit32 	alignment;
128	bit32 	type;
129	bit32 	reserved;
130} dmMem_t;
131
132#define DM_NUM_MEM_CHUNKS 8
133
134typedef struct{
135	bit32 		count;
136	dmMem_t 	dmMemory[DM_NUM_MEM_CHUNKS];
137} dmMemoryRequirement_t;
138
139typedef    dmContext_t    dmPortContext_t;
140
141typedef    dmContext_t    dmRoot_t;
142
143typedef struct{
144 bit32   numDevHandles;
145 bit32   tbd1;
146 bit32   tbd2;
147#ifdef DM_DEBUG
148 bit32   DMDebugLevel;
149#endif
150 bit32   itNexusTimeout;
151} dmSwConfig_t;
152
153typedef struct{
154               bit8  	sasRemoteAddressHi[4];
155               bit8  	sasRemoteAddressLo[4];
156               bit8  	sasLocalAddressHi[4];
157               bit8  	sasLocalAddressLo[4];
158               bit32    flag;
159} dmPortInfo_t;
160
161
162#endif  /* DM_H */
163