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