14e1bc9a0SAchim Leubner /*******************************************************************************
24e1bc9a0SAchim Leubner *Copyright (c) 2014 PMC-Sierra, Inc. All rights reserved.
34e1bc9a0SAchim Leubner *
44e1bc9a0SAchim Leubner *Redistribution and use in source and binary forms, with or without modification, are permitted provided
54e1bc9a0SAchim Leubner *that the following conditions are met:
64e1bc9a0SAchim Leubner *1. Redistributions of source code must retain the above copyright notice, this list of conditions and the
74e1bc9a0SAchim Leubner *following disclaimer.
84e1bc9a0SAchim Leubner *2. Redistributions in binary form must reproduce the above copyright notice,
94e1bc9a0SAchim Leubner *this list of conditions and the following disclaimer in the documentation and/or other materials provided
104e1bc9a0SAchim Leubner *with the distribution.
114e1bc9a0SAchim Leubner *
124e1bc9a0SAchim Leubner *THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED
134e1bc9a0SAchim Leubner *WARRANTIES,INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
144e1bc9a0SAchim Leubner *FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
154e1bc9a0SAchim Leubner *FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
164e1bc9a0SAchim Leubner *NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
174e1bc9a0SAchim Leubner *BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
184e1bc9a0SAchim Leubner *LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
194e1bc9a0SAchim Leubner *SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE
204e1bc9a0SAchim Leubner
214e1bc9a0SAchim Leubner ********************************************************************************/
224e1bc9a0SAchim Leubner /*******************************************************************************/
234e1bc9a0SAchim Leubner /** \file
244e1bc9a0SAchim Leubner *
254e1bc9a0SAchim Leubner *
264e1bc9a0SAchim Leubner * This file contains initiator initialization functions
274e1bc9a0SAchim Leubner *
284e1bc9a0SAchim Leubner */
294e1bc9a0SAchim Leubner #include <sys/cdefs.h>
304e1bc9a0SAchim Leubner #include <dev/pms/config.h>
314e1bc9a0SAchim Leubner
324e1bc9a0SAchim Leubner #include <dev/pms/freebsd/driver/common/osenv.h>
334e1bc9a0SAchim Leubner #include <dev/pms/freebsd/driver/common/ostypes.h>
344e1bc9a0SAchim Leubner #include <dev/pms/freebsd/driver/common/osdebug.h>
354e1bc9a0SAchim Leubner
364e1bc9a0SAchim Leubner #include <dev/pms/RefTisa/sallsdk/api/sa.h>
374e1bc9a0SAchim Leubner #include <dev/pms/RefTisa/sallsdk/api/saapi.h>
384e1bc9a0SAchim Leubner #include <dev/pms/RefTisa/sallsdk/api/saosapi.h>
394e1bc9a0SAchim Leubner
404e1bc9a0SAchim Leubner #include <dev/pms/RefTisa/tisa/api/titypes.h>
414e1bc9a0SAchim Leubner #include <dev/pms/RefTisa/tisa/api/ostiapi.h>
424e1bc9a0SAchim Leubner #include <dev/pms/RefTisa/tisa/api/tiapi.h>
434e1bc9a0SAchim Leubner #include <dev/pms/RefTisa/tisa/api/tiglobal.h>
444e1bc9a0SAchim Leubner
454e1bc9a0SAchim Leubner #ifdef FDS_SM
464e1bc9a0SAchim Leubner #include <dev/pms/RefTisa/sat/api/sm.h>
474e1bc9a0SAchim Leubner #include <dev/pms/RefTisa/sat/api/smapi.h>
484e1bc9a0SAchim Leubner #include <dev/pms/RefTisa/sat/api/tdsmapi.h>
494e1bc9a0SAchim Leubner #endif
504e1bc9a0SAchim Leubner
514e1bc9a0SAchim Leubner #ifdef FDS_DM
524e1bc9a0SAchim Leubner #include <dev/pms/RefTisa/discovery/api/dm.h>
534e1bc9a0SAchim Leubner #include <dev/pms/RefTisa/discovery/api/dmapi.h>
544e1bc9a0SAchim Leubner #include <dev/pms/RefTisa/discovery/api/tddmapi.h>
554e1bc9a0SAchim Leubner #endif
564e1bc9a0SAchim Leubner
574e1bc9a0SAchim Leubner #include <dev/pms/RefTisa/tisa/sassata/sas/common/tdtypes.h>
584e1bc9a0SAchim Leubner #include <dev/pms/freebsd/driver/common/osstring.h>
594e1bc9a0SAchim Leubner #include <dev/pms/RefTisa/tisa/sassata/common/tdutil.h>
604e1bc9a0SAchim Leubner
614e1bc9a0SAchim Leubner #ifdef INITIATOR_DRIVER
624e1bc9a0SAchim Leubner #include <dev/pms/RefTisa/tisa/sassata/sas/ini/itdtypes.h>
634e1bc9a0SAchim Leubner #include <dev/pms/RefTisa/tisa/sassata/sas/ini/itddefs.h>
644e1bc9a0SAchim Leubner #include <dev/pms/RefTisa/tisa/sassata/sas/ini/itdglobl.h>
654e1bc9a0SAchim Leubner #endif
664e1bc9a0SAchim Leubner
674e1bc9a0SAchim Leubner #ifdef TARGET_DRIVER
684e1bc9a0SAchim Leubner #include <dev/pms/RefTisa/tisa/sassata/sas/tgt/ttdglobl.h>
694e1bc9a0SAchim Leubner #include <dev/pms/RefTisa/tisa/sassata/sas/tgt/ttdxchg.h>
704e1bc9a0SAchim Leubner #include <dev/pms/RefTisa/tisa/sassata/sas/tgt/ttdtypes.h>
714e1bc9a0SAchim Leubner #endif
724e1bc9a0SAchim Leubner
734e1bc9a0SAchim Leubner #include <dev/pms/RefTisa/tisa/sassata/common/tdsatypes.h>
744e1bc9a0SAchim Leubner #include <dev/pms/RefTisa/tisa/sassata/common/tdproto.h>
754e1bc9a0SAchim Leubner
764e1bc9a0SAchim Leubner /*****************************************************************************
774e1bc9a0SAchim Leubner *! \brief itdssGetResource
784e1bc9a0SAchim Leubner *
794e1bc9a0SAchim Leubner * Purpose: This function is called to determine the Transport
804e1bc9a0SAchim Leubner * Dependent Layer internal resource requirement for the initiator
814e1bc9a0SAchim Leubner * side.
824e1bc9a0SAchim Leubner *
834e1bc9a0SAchim Leubner * /param tiRoot: Pointer to driver/port instance.
844e1bc9a0SAchim Leubner * /param initiatorResource: Pointer to initiator functionality memory and
854e1bc9a0SAchim Leubner * option requirement.
864e1bc9a0SAchim Leubner *
874e1bc9a0SAchim Leubner * /return: None
884e1bc9a0SAchim Leubner *
894e1bc9a0SAchim Leubner * /note - This function only return the memory requirement in the tiMem_t
904e1bc9a0SAchim Leubner * structure in initiatorResource. It does not allocated memory, so the
914e1bc9a0SAchim Leubner * address fields in tiMem_t are not used.
924e1bc9a0SAchim Leubner *
934e1bc9a0SAchim Leubner *****************************************************************************/
944e1bc9a0SAchim Leubner osGLOBAL void
itdssGetResource(tiRoot_t * tiRoot,tiInitiatorResource_t * initiatorResource)954e1bc9a0SAchim Leubner itdssGetResource(
964e1bc9a0SAchim Leubner tiRoot_t * tiRoot,
974e1bc9a0SAchim Leubner tiInitiatorResource_t * initiatorResource
984e1bc9a0SAchim Leubner )
994e1bc9a0SAchim Leubner {
1004e1bc9a0SAchim Leubner itdssOperatingOption_t OperatingOption;
1014e1bc9a0SAchim Leubner tiInitiatorMem_t *iniMem;
1024e1bc9a0SAchim Leubner bit32 i;
1034e1bc9a0SAchim Leubner
1044e1bc9a0SAchim Leubner iniMem = &initiatorResource->initiatorMem;
1054e1bc9a0SAchim Leubner iniMem->count = 1; /* Only 1 memory descriptors are used */
1064e1bc9a0SAchim Leubner
1074e1bc9a0SAchim Leubner TI_DBG6(("itdssGetResource: start\n"));
1084e1bc9a0SAchim Leubner
1094e1bc9a0SAchim Leubner /* other than [0], nothing is used
1104e1bc9a0SAchim Leubner * tdCachedMem[0]: cached mem for initiator TD Layer main functionality :
1114e1bc9a0SAchim Leubner * itdssIni_t
1124e1bc9a0SAchim Leubner * tdCachedMem[1-5]: is availalbe
1134e1bc9a0SAchim Leubner */
1144e1bc9a0SAchim Leubner
1154e1bc9a0SAchim Leubner /*
1164e1bc9a0SAchim Leubner * Get default parameters from the OS Specific area
1174e1bc9a0SAchim Leubner * and reads parameters from the configuration file
1184e1bc9a0SAchim Leubner */
1194e1bc9a0SAchim Leubner itdssGetOperatingOptionParams(tiRoot, &OperatingOption);
1204e1bc9a0SAchim Leubner
1214e1bc9a0SAchim Leubner /*
1224e1bc9a0SAchim Leubner * Cached mem for initiator Transport Dependent Layer main functionality
1234e1bc9a0SAchim Leubner */
1244e1bc9a0SAchim Leubner
1254e1bc9a0SAchim Leubner iniMem->tdCachedMem[0].singleElementLength = sizeof(itdsaIni_t);
1264e1bc9a0SAchim Leubner iniMem->tdCachedMem[0].numElements = 1;
1274e1bc9a0SAchim Leubner iniMem->tdCachedMem[0].totalLength =
1284e1bc9a0SAchim Leubner iniMem->tdCachedMem[0].singleElementLength *
1294e1bc9a0SAchim Leubner iniMem->tdCachedMem[0].numElements;
1304e1bc9a0SAchim Leubner iniMem->tdCachedMem[0].alignment = sizeof (void *); /* 4 bytes */
1314e1bc9a0SAchim Leubner iniMem->tdCachedMem[0].type = TI_CACHED_MEM;
1324e1bc9a0SAchim Leubner iniMem->tdCachedMem[0].reserved = 0;
1334e1bc9a0SAchim Leubner iniMem->tdCachedMem[0].virtPtr = agNULL;
1344e1bc9a0SAchim Leubner iniMem->tdCachedMem[0].osHandle = agNULL;
1354e1bc9a0SAchim Leubner iniMem->tdCachedMem[0].physAddrUpper = 0;
1364e1bc9a0SAchim Leubner iniMem->tdCachedMem[0].physAddrLower = 0;
1374e1bc9a0SAchim Leubner
1384e1bc9a0SAchim Leubner
1394e1bc9a0SAchim Leubner /*
1404e1bc9a0SAchim Leubner * Not used mem structure. Initialize them.
1414e1bc9a0SAchim Leubner */
1424e1bc9a0SAchim Leubner for (i = iniMem->count; i < 6; i++)
1434e1bc9a0SAchim Leubner {
1444e1bc9a0SAchim Leubner iniMem->tdCachedMem[i].singleElementLength = 0;
1454e1bc9a0SAchim Leubner iniMem->tdCachedMem[i].numElements = 0;
1464e1bc9a0SAchim Leubner iniMem->tdCachedMem[i].totalLength = 0;
1474e1bc9a0SAchim Leubner iniMem->tdCachedMem[i].alignment = 0;
1484e1bc9a0SAchim Leubner iniMem->tdCachedMem[i].type = TI_CACHED_MEM;
1494e1bc9a0SAchim Leubner iniMem->tdCachedMem[i].reserved = 0;
1504e1bc9a0SAchim Leubner
1514e1bc9a0SAchim Leubner iniMem->tdCachedMem[i].virtPtr = agNULL;
1524e1bc9a0SAchim Leubner iniMem->tdCachedMem[i].osHandle = agNULL;
1534e1bc9a0SAchim Leubner iniMem->tdCachedMem[i].physAddrUpper = 0;
1544e1bc9a0SAchim Leubner iniMem->tdCachedMem[i].physAddrLower = 0;
1554e1bc9a0SAchim Leubner
1564e1bc9a0SAchim Leubner }
1574e1bc9a0SAchim Leubner
1584e1bc9a0SAchim Leubner /*
1594e1bc9a0SAchim Leubner * Operating option of TISA
1604e1bc9a0SAchim Leubner * fills in tiInitiatorOption
1614e1bc9a0SAchim Leubner */
1624e1bc9a0SAchim Leubner initiatorResource->initiatorOption.usecsPerTick = OperatingOption.UsecsPerTick; /* default value 1 sec*/
1634e1bc9a0SAchim Leubner
1644e1bc9a0SAchim Leubner initiatorResource->initiatorOption.pageSize = 0;
1654e1bc9a0SAchim Leubner
1664e1bc9a0SAchim Leubner /* initialization */
1674e1bc9a0SAchim Leubner initiatorResource->initiatorOption.dynamicDmaMem.numElements = 0;
1684e1bc9a0SAchim Leubner initiatorResource->initiatorOption.dynamicDmaMem.singleElementLength = 0;
1694e1bc9a0SAchim Leubner initiatorResource->initiatorOption.dynamicDmaMem.totalLength = 0;
1704e1bc9a0SAchim Leubner initiatorResource->initiatorOption.dynamicDmaMem.alignment = 0;
1714e1bc9a0SAchim Leubner
1724e1bc9a0SAchim Leubner /* initialization */
1734e1bc9a0SAchim Leubner initiatorResource->initiatorOption.dynamicCachedMem.numElements = 0;
1744e1bc9a0SAchim Leubner initiatorResource->initiatorOption.dynamicCachedMem.singleElementLength = 0;
1754e1bc9a0SAchim Leubner initiatorResource->initiatorOption.dynamicCachedMem.totalLength = 0;
1764e1bc9a0SAchim Leubner initiatorResource->initiatorOption.dynamicCachedMem.alignment = 0;
1774e1bc9a0SAchim Leubner
1784e1bc9a0SAchim Leubner
1794e1bc9a0SAchim Leubner /* This is not used in OS like Linux which supports dynamic memeory allocation
1804e1bc9a0SAchim Leubner In short, this is for Windows, which does not support dynamic memory allocation */
1814e1bc9a0SAchim Leubner /* ostiallocmemory(..... ,agFALSE) is supported by the following code eg) sat.c
1824e1bc9a0SAchim Leubner The memory is DMA capable(uncached)
1834e1bc9a0SAchim Leubner */
1844e1bc9a0SAchim Leubner #ifdef CCBUILD_EncryptionDriver
1854e1bc9a0SAchim Leubner /* extend the DMA memory for supporting two encryption DEK tables */
1864e1bc9a0SAchim Leubner initiatorResource->initiatorOption.dynamicDmaMem.numElements = 128 + DEK_MAX_TABLE_ENTRIES / 2;
1874e1bc9a0SAchim Leubner #else
1884e1bc9a0SAchim Leubner initiatorResource->initiatorOption.dynamicDmaMem.numElements = 128;
1894e1bc9a0SAchim Leubner #endif
1904e1bc9a0SAchim Leubner /* worked
1914e1bc9a0SAchim Leubner initiatorResource->initiatorOption.dynamicDmaMem.singleElementLength = sizeof(tdIORequestBody_t);
1924e1bc9a0SAchim Leubner */
1934e1bc9a0SAchim Leubner initiatorResource->initiatorOption.dynamicDmaMem.singleElementLength = 512;
1944e1bc9a0SAchim Leubner initiatorResource->initiatorOption.dynamicDmaMem.totalLength =
1954e1bc9a0SAchim Leubner initiatorResource->initiatorOption.dynamicDmaMem.numElements *
1964e1bc9a0SAchim Leubner initiatorResource->initiatorOption.dynamicDmaMem.singleElementLength;
1974e1bc9a0SAchim Leubner initiatorResource->initiatorOption.dynamicDmaMem.alignment = sizeof(void *);
1984e1bc9a0SAchim Leubner
1994e1bc9a0SAchim Leubner
2004e1bc9a0SAchim Leubner /* This is not used in OS like Linux which supports dynamic memeory allocation
2014e1bc9a0SAchim Leubner In short, this is for Windows, which does not support dynamic memory allocation */
2024e1bc9a0SAchim Leubner /* ostiallocmemory(..... ,agTRUE) is supported by the following code eg) sat.c
2034e1bc9a0SAchim Leubner The memory is DMA incapable(cached)
2044e1bc9a0SAchim Leubner */
2054e1bc9a0SAchim Leubner initiatorResource->initiatorOption.dynamicCachedMem.numElements = 1024 + 256;
2064e1bc9a0SAchim Leubner /* worked
2074e1bc9a0SAchim Leubner initiatorResource->initiatorOption.dynamicCachedMem.singleElementLength = sizeof(tdIORequestBody_t);
2084e1bc9a0SAchim Leubner initiatorResource->initiatorOption.dynamicCachedMem.singleElementLength = sizeof(tdssSMPRequestBody_t);
2094e1bc9a0SAchim Leubner */
2104e1bc9a0SAchim Leubner initiatorResource->initiatorOption.dynamicCachedMem.singleElementLength = 512;
2114e1bc9a0SAchim Leubner initiatorResource->initiatorOption.dynamicCachedMem.totalLength =
2124e1bc9a0SAchim Leubner initiatorResource->initiatorOption.dynamicCachedMem.numElements *
2134e1bc9a0SAchim Leubner initiatorResource->initiatorOption.dynamicCachedMem.singleElementLength;
2144e1bc9a0SAchim Leubner initiatorResource->initiatorOption.dynamicCachedMem.alignment = sizeof(void *);
2154e1bc9a0SAchim Leubner
2164e1bc9a0SAchim Leubner /*
2174e1bc9a0SAchim Leubner * set the I/O request body size
2184e1bc9a0SAchim Leubner */
2194e1bc9a0SAchim Leubner initiatorResource->initiatorOption.ioRequestBodySize = sizeof(tdIORequestBody_t);
2204e1bc9a0SAchim Leubner TI_DBG6(("itdssGetResource: sizeof(tdssSMPRequestBody_t) %d\n", (int)sizeof(tdssSMPRequestBody_t)));
2214e1bc9a0SAchim Leubner TI_DBG6(("itdssGetResource: end\n"));
2224e1bc9a0SAchim Leubner
2234e1bc9a0SAchim Leubner return;
2244e1bc9a0SAchim Leubner }
2254e1bc9a0SAchim Leubner
2264e1bc9a0SAchim Leubner
2274e1bc9a0SAchim Leubner /*****************************************************************************
2284e1bc9a0SAchim Leubner *! \brief itdssGetOperatingOptionParams
2294e1bc9a0SAchim Leubner *
2304e1bc9a0SAchim Leubner * Purpose: This function is called to get default parameters from the
2314e1bc9a0SAchim Leubner * OS Specific area. This function is called in the context of
2324e1bc9a0SAchim Leubner * tiCOMGetResource() and tiCOMInit().
2334e1bc9a0SAchim Leubner *
2344e1bc9a0SAchim Leubner *
2354e1bc9a0SAchim Leubner * \param tiRoot: Pointer to initiator driver/port instance.
2364e1bc9a0SAchim Leubner * \param option: Pointer to the Transport Dependent options.
2374e1bc9a0SAchim Leubner *
2384e1bc9a0SAchim Leubner * \return: None
2394e1bc9a0SAchim Leubner *
2404e1bc9a0SAchim Leubner * \note -
2414e1bc9a0SAchim Leubner *
2424e1bc9a0SAchim Leubner *****************************************************************************/
2434e1bc9a0SAchim Leubner osGLOBAL void
itdssGetOperatingOptionParams(tiRoot_t * tiRoot,itdssOperatingOption_t * OperatingOption)2444e1bc9a0SAchim Leubner itdssGetOperatingOptionParams(
2454e1bc9a0SAchim Leubner tiRoot_t *tiRoot,
2464e1bc9a0SAchim Leubner itdssOperatingOption_t *OperatingOption
2474e1bc9a0SAchim Leubner )
2484e1bc9a0SAchim Leubner {
2494e1bc9a0SAchim Leubner char *key = agNULL;
2504e1bc9a0SAchim Leubner char *subkey1 = agNULL;
2514e1bc9a0SAchim Leubner char *subkey2 = agNULL;
2524e1bc9a0SAchim Leubner char *buffer;
2534e1bc9a0SAchim Leubner bit32 buffLen;
2544e1bc9a0SAchim Leubner bit32 lenRecv = 0;
2554e1bc9a0SAchim Leubner char *pLastUsedChar = agNULL;
2564e1bc9a0SAchim Leubner char tmpBuffer[DEFAULT_KEY_BUFFER_SIZE];
2574e1bc9a0SAchim Leubner char globalStr[] = "Global";
2584e1bc9a0SAchim Leubner char iniParmsStr[] = "InitiatorParms";
2594e1bc9a0SAchim Leubner
2604e1bc9a0SAchim Leubner TI_DBG6(("itdssGetOperatingOptionParams: start\n"));
2614e1bc9a0SAchim Leubner
2624e1bc9a0SAchim Leubner /*
2634e1bc9a0SAchim Leubner first set the values to Default values
2644e1bc9a0SAchim Leubner Then, overwrite them using ostiGetTransportParam()
2654e1bc9a0SAchim Leubner */
2664e1bc9a0SAchim Leubner
2674e1bc9a0SAchim Leubner
2684e1bc9a0SAchim Leubner /* to remove compiler warnings */
2694e1bc9a0SAchim Leubner pLastUsedChar = pLastUsedChar;
2704e1bc9a0SAchim Leubner lenRecv = lenRecv;
2714e1bc9a0SAchim Leubner subkey2 = subkey2;
2724e1bc9a0SAchim Leubner subkey1 = subkey1;
2734e1bc9a0SAchim Leubner key = key;
2744e1bc9a0SAchim Leubner buffer = &tmpBuffer[0];
2754e1bc9a0SAchim Leubner buffLen = sizeof (tmpBuffer);
2764e1bc9a0SAchim Leubner
2774e1bc9a0SAchim Leubner osti_memset(buffer, 0, buffLen);
2784e1bc9a0SAchim Leubner
2794e1bc9a0SAchim Leubner
2804e1bc9a0SAchim Leubner
2814e1bc9a0SAchim Leubner /* default values */
2824e1bc9a0SAchim Leubner OperatingOption->MaxTargets = DEFAULT_MAX_DEV; /* DEFAULT_MAX_TARGETS; */ /* 256 */
2834e1bc9a0SAchim Leubner OperatingOption->UsecsPerTick = DEFAULT_INI_TIMER_TICK; /* 1 sec */
2844e1bc9a0SAchim Leubner
2854e1bc9a0SAchim Leubner osti_memset(buffer, 0, buffLen);
2864e1bc9a0SAchim Leubner lenRecv = 0;
2874e1bc9a0SAchim Leubner
2884e1bc9a0SAchim Leubner /* defaults are overwritten in the following */
2894e1bc9a0SAchim Leubner /* Get MaxTargets */
2904e1bc9a0SAchim Leubner if ((ostiGetTransportParam(
2914e1bc9a0SAchim Leubner tiRoot,
2924e1bc9a0SAchim Leubner globalStr,
2934e1bc9a0SAchim Leubner iniParmsStr,
2944e1bc9a0SAchim Leubner agNULL,
2954e1bc9a0SAchim Leubner agNULL,
2964e1bc9a0SAchim Leubner agNULL,
2974e1bc9a0SAchim Leubner agNULL,
2984e1bc9a0SAchim Leubner "MaxTargets",
2994e1bc9a0SAchim Leubner buffer,
3004e1bc9a0SAchim Leubner buffLen,
3014e1bc9a0SAchim Leubner &lenRecv
3024e1bc9a0SAchim Leubner ) == tiSuccess) && (lenRecv != 0))
3034e1bc9a0SAchim Leubner {
3044e1bc9a0SAchim Leubner if (osti_strncmp(buffer, "0x", 2) == 0)
3054e1bc9a0SAchim Leubner {
3064e1bc9a0SAchim Leubner OperatingOption->MaxTargets = osti_strtoul (buffer, &pLastUsedChar, 0);
3074e1bc9a0SAchim Leubner }
3084e1bc9a0SAchim Leubner else
3094e1bc9a0SAchim Leubner {
3104e1bc9a0SAchim Leubner OperatingOption->MaxTargets = osti_strtoul (buffer, &pLastUsedChar, 10);
3114e1bc9a0SAchim Leubner }
3124e1bc9a0SAchim Leubner TI_DBG2(("itdssGetOperatingOptionParams: MaxTargets %d\n", OperatingOption->MaxTargets ));
3134e1bc9a0SAchim Leubner }
3144e1bc9a0SAchim Leubner
3154e1bc9a0SAchim Leubner #ifdef REMOVED
3164e1bc9a0SAchim Leubner /* get UsecsPerTick */
3174e1bc9a0SAchim Leubner if ((ostiGetTransportParam(
3184e1bc9a0SAchim Leubner tiRoot,
3194e1bc9a0SAchim Leubner globalStr,
3204e1bc9a0SAchim Leubner iniParmsStr,
3214e1bc9a0SAchim Leubner agNULL,
3224e1bc9a0SAchim Leubner agNULL,
3234e1bc9a0SAchim Leubner agNULL,
3244e1bc9a0SAchim Leubner agNULL,
3254e1bc9a0SAchim Leubner "UsecsPerTick",
3264e1bc9a0SAchim Leubner buffer,
3274e1bc9a0SAchim Leubner buffLen,
3284e1bc9a0SAchim Leubner &lenRecv
3294e1bc9a0SAchim Leubner ) == tiSuccess) && (lenRecv != 0))
3304e1bc9a0SAchim Leubner {
3314e1bc9a0SAchim Leubner if (osti_strncmp(buffer, "0x", 2) == 0)
3324e1bc9a0SAchim Leubner {
3334e1bc9a0SAchim Leubner OperatingOption->UsecsPerTick = osti_strtoul (buffer, &pLastUsedChar, 0);
3344e1bc9a0SAchim Leubner }
3354e1bc9a0SAchim Leubner else
3364e1bc9a0SAchim Leubner {
3374e1bc9a0SAchim Leubner OperatingOption->UsecsPerTick = osti_strtoul (buffer, &pLastUsedChar, 10);
3384e1bc9a0SAchim Leubner }
3394e1bc9a0SAchim Leubner }
3404e1bc9a0SAchim Leubner osti_memset(buffer, 0, buffLen);
3414e1bc9a0SAchim Leubner lenRecv = 0;
3424e1bc9a0SAchim Leubner #endif
3434e1bc9a0SAchim Leubner
3444e1bc9a0SAchim Leubner return;
3454e1bc9a0SAchim Leubner }
3464e1bc9a0SAchim Leubner
3474e1bc9a0SAchim Leubner
3484e1bc9a0SAchim Leubner /*****************************************************************************
3494e1bc9a0SAchim Leubner *! \brief itdssInit
3504e1bc9a0SAchim Leubner *
3514e1bc9a0SAchim Leubner * Purpose: This function is called to initialize the initiator specific
3524e1bc9a0SAchim Leubner * Transport Dependent Layer.
3534e1bc9a0SAchim Leubner * This function is not directly called by OS Specific module,
3544e1bc9a0SAchim Leubner * as it is internally called by tiCOMInit().
3554e1bc9a0SAchim Leubner *
3564e1bc9a0SAchim Leubner * /param tiRoot: Pointer to driver/port instance.
3574e1bc9a0SAchim Leubner * /param initiatorResource: Pointer to initiator functionality memory
3584e1bc9a0SAchim Leubner * and option requirement.
3594e1bc9a0SAchim Leubner * /param tdSharedMem: Pointer to cached memory required by the
3604e1bc9a0SAchim Leubner * target/initiator shared functionality.
3614e1bc9a0SAchim Leubner *
3624e1bc9a0SAchim Leubner * /return:
3634e1bc9a0SAchim Leubner * tiSuccess OK
3644e1bc9a0SAchim Leubner * others not OK
3654e1bc9a0SAchim Leubner *
3664e1bc9a0SAchim Leubner * /note -
3674e1bc9a0SAchim Leubner *
3684e1bc9a0SAchim Leubner *****************************************************************************/
3694e1bc9a0SAchim Leubner osGLOBAL bit32
itdssInit(tiRoot_t * tiRoot,tiInitiatorResource_t * initiatorResource,tiTdSharedMem_t * tdSharedMem)3704e1bc9a0SAchim Leubner itdssInit(
3714e1bc9a0SAchim Leubner tiRoot_t *tiRoot,
3724e1bc9a0SAchim Leubner tiInitiatorResource_t *initiatorResource,
3734e1bc9a0SAchim Leubner tiTdSharedMem_t *tdSharedMem
3744e1bc9a0SAchim Leubner )
3754e1bc9a0SAchim Leubner {
3764e1bc9a0SAchim Leubner tiInitiatorMem_t *iniMem;
3774e1bc9a0SAchim Leubner itdsaIni_t *Initiator;
3784e1bc9a0SAchim Leubner itdssOperatingOption_t *OperatingOption;
3794e1bc9a0SAchim Leubner tdsaRoot_t *tdsaRoot;
3804e1bc9a0SAchim Leubner
3814e1bc9a0SAchim Leubner TI_DBG6(("itdssInit: start\n"));
3824e1bc9a0SAchim Leubner iniMem = &initiatorResource->initiatorMem;
3834e1bc9a0SAchim Leubner tdsaRoot = (tdsaRoot_t *)tiRoot->tdData;
3844e1bc9a0SAchim Leubner /*
3854e1bc9a0SAchim Leubner * Cached mem for initiator Transport Dependent Layer main functionality
3864e1bc9a0SAchim Leubner */
3874e1bc9a0SAchim Leubner Initiator = iniMem->tdCachedMem[0].virtPtr;
3884e1bc9a0SAchim Leubner
3894e1bc9a0SAchim Leubner /*
3904e1bc9a0SAchim Leubner * Get default parameters from the OS Specific area
3914e1bc9a0SAchim Leubner */
3924e1bc9a0SAchim Leubner OperatingOption = &Initiator->OperatingOption;
3934e1bc9a0SAchim Leubner
3944e1bc9a0SAchim Leubner /*
3954e1bc9a0SAchim Leubner * Get default parameters from the OS Specific area
3964e1bc9a0SAchim Leubner * and reads parameters from the configuration file
3974e1bc9a0SAchim Leubner */
3984e1bc9a0SAchim Leubner
3994e1bc9a0SAchim Leubner itdssGetOperatingOptionParams(tiRoot, OperatingOption);
4004e1bc9a0SAchim Leubner /*
4014e1bc9a0SAchim Leubner * Update TD operating options with OS-layer-saved value
4024e1bc9a0SAchim Leubner * Only UsecsPerTick is updated
4034e1bc9a0SAchim Leubner */
4044e1bc9a0SAchim Leubner OperatingOption->UsecsPerTick =
4054e1bc9a0SAchim Leubner initiatorResource->initiatorOption.usecsPerTick;
4064e1bc9a0SAchim Leubner
4074e1bc9a0SAchim Leubner Initiator->NumIOsActive = 0;
4084e1bc9a0SAchim Leubner
4094e1bc9a0SAchim Leubner /*
4104e1bc9a0SAchim Leubner * tdCachedMem[0]: cached mem for initiator TD Layer main functionality :
4114e1bc9a0SAchim Leubner * itdssIni_t
4124e1bc9a0SAchim Leubner * tdCachedMem[1-5]: not in use
4134e1bc9a0SAchim Leubner */
4144e1bc9a0SAchim Leubner
4154e1bc9a0SAchim Leubner /* initialize the timerlist */
4164e1bc9a0SAchim Leubner itdssInitTimers(tiRoot);
4174e1bc9a0SAchim Leubner
4184e1bc9a0SAchim Leubner
4194e1bc9a0SAchim Leubner /* Initialize the tdsaAllShared, tdssSASShared pointers */
4204e1bc9a0SAchim Leubner
4214e1bc9a0SAchim Leubner Initiator->tdsaAllShared = &(tdsaRoot->tdsaAllShared);
4224e1bc9a0SAchim Leubner
4234e1bc9a0SAchim Leubner TI_DBG6(("itdssInit: end\n"));
4244e1bc9a0SAchim Leubner return (tiSuccess);
4254e1bc9a0SAchim Leubner
4264e1bc9a0SAchim Leubner }
4274e1bc9a0SAchim Leubner
4284e1bc9a0SAchim Leubner /*****************************************************************************
4294e1bc9a0SAchim Leubner *! \brief
4304e1bc9a0SAchim Leubner * itdssInitTimers
4314e1bc9a0SAchim Leubner *
4324e1bc9a0SAchim Leubner * Purpose: This function is called to initialize the timers
4334e1bc9a0SAchim Leubner * for initiator
4344e1bc9a0SAchim Leubner *
4354e1bc9a0SAchim Leubner * \param tiRoot: pointer to the driver instance
4364e1bc9a0SAchim Leubner *
4374e1bc9a0SAchim Leubner * \return: None
4384e1bc9a0SAchim Leubner *
4394e1bc9a0SAchim Leubner * \note -
4404e1bc9a0SAchim Leubner *
4414e1bc9a0SAchim Leubner *****************************************************************************/
4424e1bc9a0SAchim Leubner osGLOBAL void
itdssInitTimers(tiRoot_t * tiRoot)4434e1bc9a0SAchim Leubner itdssInitTimers(
4444e1bc9a0SAchim Leubner tiRoot_t *tiRoot
4454e1bc9a0SAchim Leubner )
4464e1bc9a0SAchim Leubner {
4474e1bc9a0SAchim Leubner tdsaRoot_t *tdsaRoot = (tdsaRoot_t *)(tiRoot->tdData);
4484e1bc9a0SAchim Leubner tdsaContext_t *tdsaAllShared = (tdsaContext_t *)&tdsaRoot->tdsaAllShared;
4494e1bc9a0SAchim Leubner itdsaIni_t *Initiator = (itdsaIni_t *)tdsaAllShared->itdsaIni;
4504e1bc9a0SAchim Leubner
4514e1bc9a0SAchim Leubner /* initialize the timerlist */
4524e1bc9a0SAchim Leubner TDLIST_INIT_HDR(&(Initiator->timerlist));
4534e1bc9a0SAchim Leubner
4544e1bc9a0SAchim Leubner return;
4554e1bc9a0SAchim Leubner }
456