The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/dev/pms/RefTisa/sat/src/sminit.c

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*******************************************************************************
    2 *Copyright (c) 2014 PMC-Sierra, Inc.  All rights reserved. 
    3 *
    4 *Redistribution and use in source and binary forms, with or without modification, are permitted provided 
    5 *that the following conditions are met: 
    6 *1. Redistributions of source code must retain the above copyright notice, this list of conditions and the
    7 *following disclaimer. 
    8 *2. Redistributions in binary form must reproduce the above copyright notice, 
    9 *this list of conditions and the following disclaimer in the documentation and/or other materials provided
   10 *with the distribution. 
   11 *
   12 *THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED 
   13 *WARRANTIES,INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
   14 *FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
   15 *FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
   16 *NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 
   17 *BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
   18 *LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
   19 *SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE
   20 
   21 ********************************************************************************/
   22 #include <sys/cdefs.h>
   23 __FBSDID("$FreeBSD$");
   24 #include <dev/pms/config.h>
   25 
   26 #include <dev/pms/freebsd/driver/common/osenv.h>
   27 #include <dev/pms/freebsd/driver/common/ostypes.h>
   28 #include <dev/pms/freebsd/driver/common/osdebug.h>
   29 
   30 #include <dev/pms/RefTisa/tisa/api/titypes.h>
   31 
   32 #include <dev/pms/RefTisa/sallsdk/api/sa.h>
   33 #include <dev/pms/RefTisa/sallsdk/api/saapi.h>
   34 #include <dev/pms/RefTisa/sallsdk/api/saosapi.h>
   35 
   36 #include <dev/pms/RefTisa/sat/api/sm.h>
   37 #include <dev/pms/RefTisa/sat/api/smapi.h>
   38 #include <dev/pms/RefTisa/sat/api/tdsmapi.h>
   39 
   40 #include <dev/pms/RefTisa/sat/src/smdefs.h>
   41 #include <dev/pms/RefTisa/sat/src/smproto.h>
   42 #include <dev/pms/RefTisa/sat/src/smtypes.h>
   43 
   44 #ifdef SM_DEBUG
   45 bit32 gSMDebugLevel = 1;
   46 #endif
   47 smRoot_t *gsmRoot = agNULL;
   48 
   49 /* start smapi defined APIS */
   50 osGLOBAL void
   51 smGetRequirements(
   52                   smRoot_t                      *smRoot,
   53                   smSwConfig_t                  *swConfig,
   54                   smMemoryRequirement_t         *memoryRequirement,
   55                   bit32                         *usecsPerTick,
   56                   bit32                         *maxNumLocks
   57                  )
   58 {
   59   bit32               memoryReqCount = 0;
   60   bit32               i; 
   61   bit32               max_dev = SM_MAX_DEV; 
   62   char                *buffer;
   63   bit32               buffLen;
   64   bit32               lenRecv = 0;
   65   static char         tmpBuffer[DEFAULT_KEY_BUFFER_SIZE];
   66   char                *pLastUsedChar = agNULL;
   67   char                globalStr[]     = "Global";
   68   char                iniParmsStr[]   = "InitiatorParms";
   69   SM_DBG2(("smGetRequirements: start\n"));  
   70   
   71   /* sanity check */
   72   SM_ASSERT((agNULL != swConfig), "");
   73   SM_ASSERT((agNULL != memoryRequirement), "");
   74   SM_ASSERT((agNULL != usecsPerTick), "");
   75   SM_ASSERT((agNULL != maxNumLocks), ""); 
   76   
   77   /* memory requirement for smRoot, CACHE memory */
   78   memoryRequirement->smMemory[SM_ROOT_MEM_INDEX].singleElementLength = sizeof(smIntRoot_t);
   79   memoryRequirement->smMemory[SM_ROOT_MEM_INDEX].numElements = 1;
   80   memoryRequirement->smMemory[SM_ROOT_MEM_INDEX].totalLength = 
   81       (memoryRequirement->smMemory[SM_ROOT_MEM_INDEX].singleElementLength) * (memoryRequirement->smMemory[SM_ROOT_MEM_INDEX].numElements);
   82   memoryRequirement->smMemory[SM_ROOT_MEM_INDEX].alignment = 4;
   83   memoryRequirement->smMemory[SM_ROOT_MEM_INDEX].type = SM_CACHED_MEM;
   84   memoryReqCount++;
   85   
   86   /* reading the configurable parameter of MaxTargets */
   87   buffer = tmpBuffer;
   88   buffLen = sizeof(tmpBuffer);
   89   sm_memset(buffer, 0, buffLen);
   90   lenRecv = 0;
   91   if ((tdsmGetTransportParam(
   92                              smRoot, 
   93                              globalStr,
   94                              iniParmsStr,
   95                              agNULL,
   96                              agNULL,
   97                              agNULL, 
   98                              agNULL, 
   99                              "MaxTargets",
  100                              buffer, 
  101                              buffLen, 
  102                              &lenRecv
  103                              ) == SM_RC_SUCCESS) && (lenRecv != 0))
  104   {
  105     if (osti_strncmp(buffer, "0x", 2) == 0)
  106     { 
  107       max_dev = osti_strtoul (buffer, &pLastUsedChar, 0);
  108     }
  109     else
  110     {
  111       max_dev = osti_strtoul (buffer, &pLastUsedChar, 10);
  112     }
  113   }
  114   SM_DBG3(("smGetRequirements: max_expander %d\n", max_dev));
  115   /* memory requirement for Device Links, CACHE memory */
  116   memoryRequirement->smMemory[SM_DEVICE_MEM_INDEX].singleElementLength = sizeof(smDeviceData_t);
  117   memoryRequirement->smMemory[SM_DEVICE_MEM_INDEX].numElements = max_dev; 
  118   memoryRequirement->smMemory[SM_DEVICE_MEM_INDEX].totalLength = 
  119       (memoryRequirement->smMemory[SM_DEVICE_MEM_INDEX].singleElementLength) * (memoryRequirement->smMemory[SM_DEVICE_MEM_INDEX].numElements);
  120   memoryRequirement->smMemory[SM_DEVICE_MEM_INDEX].alignment = 4;
  121   memoryRequirement->smMemory[SM_DEVICE_MEM_INDEX].type = SM_CACHED_MEM;
  122   memoryReqCount++;
  123   
  124   /* memory requirement for IO inks, CACHE memory */
  125   memoryRequirement->smMemory[SM_IO_MEM_INDEX].singleElementLength = sizeof(smIORequestBody_t);
  126   memoryRequirement->smMemory[SM_IO_MEM_INDEX].numElements = SM_MAX_IO; 
  127   memoryRequirement->smMemory[SM_IO_MEM_INDEX].totalLength = 
  128       (memoryRequirement->smMemory[SM_IO_MEM_INDEX].singleElementLength) * (memoryRequirement->smMemory[SM_IO_MEM_INDEX].numElements);
  129   memoryRequirement->smMemory[SM_IO_MEM_INDEX].alignment = 4;
  130   memoryRequirement->smMemory[SM_IO_MEM_INDEX].type = SM_CACHED_MEM;
  131   memoryReqCount++;
  132   
  133   /* for debugging */
  134   for (i=0;i< memoryReqCount;i++)
  135   {
  136     SM_DBG3(("smGetRequirements: index %d numElements %d totalLength %d singleElementLength %d alignment %d\n", i
  137     , memoryRequirement->smMemory[i].numElements, memoryRequirement->smMemory[i].totalLength, 
  138     memoryRequirement->smMemory[i].singleElementLength,memoryRequirement->smMemory[i].alignment ));
  139   }
  140   /* set up memory requirement count */
  141   memoryRequirement->count = memoryReqCount;
  142   
  143   /* requirement for locks */
  144   *maxNumLocks = SM_MAX_LOCKS;   
  145 
  146   /* setup the time tick */  
  147   *usecsPerTick = SM_USECS_PER_TICK;
  148 
  149   /* set up the number of active IOs */
  150   swConfig->maxActiveIOs = SM_MAX_IO;
  151   
  152   /* set up the number of device handles */
  153   swConfig->numDevHandles = SM_MAX_DEV;
  154   
  155   
  156   return;
  157 }               
  158 
  159 osGLOBAL bit32
  160 smInitialize(
  161              smRoot_t                           *smRoot,
  162              agsaRoot_t                         *agRoot,
  163              smMemoryRequirement_t              *memoryAllocated,
  164              smSwConfig_t                       *swConfig,
  165              bit32                              usecsPerTick 
  166             )
  167 {
  168   smIntRoot_t               *smIntRoot;
  169   smDeviceData_t            *smDevice;  
  170   smIORequestBody_t         *smIORequest; 
  171   smIntContext_t            *smAllShared;
  172   bit32                     i;
  173   bit32                     max_dev = SM_MAX_DEV; 
  174   char                      *buffer;
  175   bit32                     buffLen;
  176   bit32                     lenRecv = 0;
  177   static char               tmpBuffer[DEFAULT_KEY_BUFFER_SIZE];
  178   char                      *pLastUsedChar = agNULL;
  179   char                      globalStr[]     = "Global";
  180   char                      iniParmsStr[]   = "InitiatorParms";
  181   
  182   SM_DBG2(("smInitialize: start\n"));  
  183   
  184   /* sanity check */  
  185   SM_ASSERT((agNULL != smRoot), "");
  186   SM_ASSERT((agNULL != agRoot), "");
  187   SM_ASSERT((agNULL != memoryAllocated), "");
  188   SM_ASSERT((agNULL != swConfig), "");
  189   SM_ASSERT((SM_ROOT_MEM_INDEX < memoryAllocated->count), "");
  190   SM_ASSERT((SM_DEVICE_MEM_INDEX < memoryAllocated->count), "");
  191   SM_ASSERT((SM_IO_MEM_INDEX < memoryAllocated->count), "");
  192   
  193   /* Check the memory allocated */
  194   for ( i = 0; i < memoryAllocated->count; i ++ )
  195   {
  196     /* If memory allocatation failed  */
  197     if (memoryAllocated->smMemory[i].singleElementLength &&
  198         memoryAllocated->smMemory[i].numElements)
  199     {
  200       if ( (0 != memoryAllocated->smMemory[i].numElements)
  201           && (0 == memoryAllocated->smMemory[i].totalLength) )
  202       {
  203         /* return failure */
  204         SM_DBG1(("smInitialize: Memory[%d]  singleElementLength = 0x%x  numElements = 0x%x NOT allocated!!!\n",
  205           i,
  206           memoryAllocated->smMemory[i].singleElementLength,
  207           memoryAllocated->smMemory[i].numElements));
  208         return SM_RC_FAILURE;
  209       }
  210     }
  211   }
  212   
  213   /* for debugging */
  214   for ( i = 0; i < memoryAllocated->count; i ++ )
  215   {
  216     SM_DBG3(("smInitialize: index %d virtPtr %p osHandle%p\n",i, memoryAllocated->smMemory[i].virtPtr, memoryAllocated->smMemory[i].osHandle)); 
  217     SM_DBG3(("smInitialize: index %d phyAddrUpper 0x%x phyAddrLower 0x%x totalLength %d numElements %d\n", i, 
  218     memoryAllocated->smMemory[i].physAddrUpper, 
  219     memoryAllocated->smMemory[i].physAddrLower, 
  220     memoryAllocated->smMemory[i].totalLength, 
  221     memoryAllocated->smMemory[i].numElements));
  222     SM_DBG3(("smInitialize: index %d singleElementLength 0x%x alignment 0x%x type %d reserved %d\n", i, 
  223     memoryAllocated->smMemory[i].singleElementLength, 
  224     memoryAllocated->smMemory[i].alignment, 
  225     memoryAllocated->smMemory[i].type, 
  226     memoryAllocated->smMemory[i].reserved));
  227   }  
  228   
  229   /* SM's internal root */
  230   smIntRoot  = (smIntRoot_t *) (memoryAllocated->smMemory[SM_ROOT_MEM_INDEX].virtPtr);
  231   smRoot->smData = (void *) smIntRoot;
  232   
  233   smAllShared = (smIntContext_t *)&(smIntRoot->smAllShared);
  234   /**<  Initialize the TDM data part of the interrupt context */
  235   smAllShared->smRootOsData.smRoot     = smRoot;
  236   smAllShared->smRootOsData.smAllShared   = (void *) smAllShared;
  237   gsmRoot = smRoot; 
  238   smAllShared->FCA = agTRUE;
  239   
  240   /* Devices */
  241   smDevice = (smDeviceData_t *) (memoryAllocated->smMemory[SM_DEVICE_MEM_INDEX].virtPtr);
  242   smAllShared->DeviceMem = (smDeviceData_t *)smDevice;
  243   
  244   /* IOs */
  245   smIORequest = (smIORequestBody_t *) (memoryAllocated->smMemory[SM_IO_MEM_INDEX].virtPtr);
  246   smAllShared->IOMem = (smIORequestBody_t *)smIORequest;
  247   
  248   smAllShared->agRoot = agRoot;
  249   
  250   smAllShared->usecsPerTick = usecsPerTick;        
  251   
  252   /**< initializes timers */
  253   smInitTimers(smRoot);
  254   
  255   /**< initializes devices */
  256   buffer = tmpBuffer;
  257   buffLen = sizeof(tmpBuffer);
  258   sm_memset(buffer, 0, buffLen);
  259   lenRecv = 0;
  260   if ((tdsmGetTransportParam(
  261                              smRoot, 
  262                              globalStr,
  263                              iniParmsStr,
  264                              agNULL,
  265                              agNULL,
  266                              agNULL, 
  267                              agNULL, 
  268                              "MaxTargets",
  269                              buffer, 
  270                              buffLen, 
  271                              &lenRecv
  272                              ) == SM_RC_SUCCESS) && (lenRecv != 0))
  273   {
  274     if (osti_strncmp(buffer, "0x", 2) == 0)
  275     { 
  276       max_dev = osti_strtoul (buffer, &pLastUsedChar, 0);
  277     }
  278     else
  279     {
  280       max_dev = osti_strtoul (buffer, &pLastUsedChar, 10);
  281     }
  282    SM_DBG1(("smInitialize: MaxTargets %d\n", max_dev));
  283  }  
  284 
  285   smDeviceDataInit(smRoot, max_dev);
  286   
  287   /**< initializes IOs */
  288   smIOInit(smRoot);
  289 
  290 #ifdef SM_DEBUG
  291   gSMDebugLevel = swConfig->SMDebugLevel;
  292 #endif    
  293   
  294   return SM_RC_SUCCESS;
  295 }               
  296 
  297 osGLOBAL void
  298 smInitTimers(
  299              smRoot_t *smRoot 
  300             )
  301 {
  302   smIntRoot_t               *smIntRoot    = (smIntRoot_t *)smRoot->smData;
  303   smIntContext_t            *smAllShared = (smIntContext_t *)&smIntRoot->smAllShared;
  304   
  305   SM_DBG2(("smInitTimers: start\n"));  
  306   
  307   /* initialize the timerlist */
  308   SMLIST_INIT_HDR(&(smAllShared->timerlist));
  309 
  310   return;
  311 }
  312 
  313 osGLOBAL void
  314 smDeviceDataReInit(
  315                    smRoot_t               *smRoot,
  316                    smDeviceData_t         *oneDeviceData                     
  317                   )
  318 {
  319   int               j=0;
  320   smSatInternalIo_t   *satIntIO;
  321   
  322   SM_DBG2(("smDeviceDataReInit: start \n"));
  323   
  324   if (oneDeviceData->satPendingIO != 0)
  325   {
  326     SM_DBG1(("smDeviceDataReInit: did %d\n", oneDeviceData->id));
  327     SM_DBG1(("smDeviceDataReInit: satPendingIO %d satNCQMaxIO %d!!!\n", oneDeviceData->satPendingIO, oneDeviceData->satNCQMaxIO ));
  328     SM_DBG1(("smDeviceDataReInit: satPendingNCQIO %d satPendingNONNCQIO %d!!!\n", oneDeviceData->satPendingNCQIO, oneDeviceData->satPendingNONNCQIO));
  329   }
  330 
  331 //  oneDeviceData->smRoot = agNULL;
  332   oneDeviceData->agDevHandle = agNULL;
  333   oneDeviceData->valid = agFALSE;
  334   oneDeviceData->SMAbortAll = agFALSE;
  335   oneDeviceData->smDevHandle = agNULL;
  336   oneDeviceData->directlyAttached = agFALSE;
  337   oneDeviceData->agExpDevHandle = agNULL;
  338   oneDeviceData->phyID = 0xFF;
  339   oneDeviceData->SMNumOfFCA = 0;
  340   
  341   /* default */
  342   oneDeviceData->satDriveState = SAT_DEV_STATE_NORMAL;
  343   oneDeviceData->satNCQMaxIO =SAT_NCQ_MAX;
  344   oneDeviceData->satPendingIO = 0;
  345   oneDeviceData->satPendingNCQIO = 0;
  346   oneDeviceData->satPendingNONNCQIO = 0;
  347   oneDeviceData->IDDeviceValid = agFALSE;
  348   oneDeviceData->freeSATAFDMATagBitmap = 0;
  349   oneDeviceData->NumOfFCA = 0;
  350   oneDeviceData->NumOfIDRetries = 0;
  351   oneDeviceData->ID_Retries = 0;
  352   oneDeviceData->OSAbortAll = agFALSE;
  353     
  354   sm_memset(oneDeviceData->satMaxLBA, 0, sizeof(oneDeviceData->satMaxLBA));
  355   sm_memset(&(oneDeviceData->satIdentifyData), 0xFF, sizeof(agsaSATAIdentifyData_t));
  356 
  357   oneDeviceData->satSaDeviceData = oneDeviceData;
  358     
  359   satIntIO = (smSatInternalIo_t *)&(oneDeviceData->satIntIo[0]);
  360   for (j = 0; j < SAT_MAX_INT_IO; j++)
  361   {
  362     SM_DBG2(("tdsaDeviceDataReInit: in loop of internal io free, id %d\n", satIntIO->id));
  363     smsatFreeIntIoResource(smRoot, oneDeviceData, satIntIO);    
  364     satIntIO = satIntIO + 1;    
  365   }
  366   
  367   return;
  368 }           
  369 osGLOBAL void
  370 smDeviceDataInit(
  371                  smRoot_t *smRoot,
  372                  bit32    max_dev                 
  373                 )
  374 {
  375   smIntRoot_t               *smIntRoot    = (smIntRoot_t *)smRoot->smData;
  376   smIntContext_t            *smAllShared = (smIntContext_t *)&smIntRoot->smAllShared;  
  377   smDeviceData_t            *smDeviceData = (smDeviceData_t *)smAllShared->DeviceMem;
  378   int                       i,j;
  379   smSatInternalIo_t           *satIntIO;
  380   
  381   SM_DBG2(("smDeviceDataInit: start \n"));
  382   
  383   SMLIST_INIT_HDR(&(smAllShared->MainDeviceList));
  384   SMLIST_INIT_HDR(&(smAllShared->FreeDeviceList));
  385   
  386   for(i=0;i<(int)max_dev;i++)
  387   {
  388     SMLIST_INIT_ELEMENT(&(smDeviceData[i].FreeLink));
  389     SMLIST_INIT_ELEMENT(&(smDeviceData[i].MainLink));
  390     smDeviceData[i].id = i;
  391     smDeviceData[i].smRoot = agNULL;
  392     smDeviceData[i].agDevHandle = agNULL;
  393     smDeviceData[i].valid = agFALSE;
  394     smDeviceData[i].SMAbortAll = agFALSE;
  395     smDeviceData[i].smDevHandle = agNULL;
  396     smDeviceData[i].directlyAttached = agFALSE;
  397     smDeviceData[i].agExpDevHandle = agNULL;
  398     smDeviceData[i].phyID = 0xFF;
  399     smDeviceData[i].SMNumOfFCA = 0;
  400  
  401     
  402     SMLIST_INIT_HDR(&(smDeviceData[i].satIoLinkList));
  403     SMLIST_INIT_HDR(&(smDeviceData[i].satFreeIntIoLinkList));
  404     SMLIST_INIT_HDR(&(smDeviceData[i].satActiveIntIoLinkList));
  405     
  406     /* default */
  407     smDeviceData[i].satDriveState = SAT_DEV_STATE_NORMAL;
  408     smDeviceData[i].satNCQMaxIO =SAT_NCQ_MAX;
  409     smDeviceData[i].satPendingIO = 0;
  410     smDeviceData[i].satPendingNCQIO = 0;
  411     smDeviceData[i].satPendingNONNCQIO = 0;
  412     smDeviceData[i].IDDeviceValid = agFALSE;
  413     smDeviceData[i].freeSATAFDMATagBitmap = 0;
  414     smDeviceData[i].NumOfFCA = 0;
  415     smDeviceData[i].NumOfIDRetries = 0;
  416     smDeviceData[i].ID_Retries = 0;
  417     smDeviceData[i].OSAbortAll = agFALSE;
  418     smInitTimerRequest(smRoot, &(smDeviceData[i].SATAIDDeviceTimer));
  419    
  420     sm_memset(&(smDeviceData[i].satIdentifyData), 0xFF, sizeof(agsaSATAIdentifyData_t));
  421     sm_memset(smDeviceData[i].satMaxLBA, 0, sizeof(smDeviceData[i].satMaxLBA));
  422 
  423     smDeviceData[i].satSaDeviceData = &smDeviceData[i];
  424     
  425 #if 1    
  426     satIntIO = &smDeviceData[i].satIntIo[0];
  427     for (j = 0; j < SAT_MAX_INT_IO; j++)
  428     {
  429       SMLIST_INIT_ELEMENT (&satIntIO->satIntIoLink);
  430       SMLIST_ENQUEUE_AT_TAIL (&satIntIO->satIntIoLink, 
  431                               &smDeviceData[i].satFreeIntIoLinkList);
  432       satIntIO->satOrgSmIORequest = agNULL;
  433       satIntIO->id = j;
  434       satIntIO = satIntIO + 1;
  435     }
  436 #endif
  437     
  438     /* some other variables */
  439     SMLIST_ENQUEUE_AT_TAIL(&(smDeviceData[i].FreeLink), &(smAllShared->FreeDeviceList)); 
  440   }  
  441   
  442   return;
  443 }
  444 
  445 osGLOBAL void
  446 smIOInit(
  447          smRoot_t *smRoot 
  448         )
  449 {
  450   smIntRoot_t               *smIntRoot    = (smIntRoot_t *)smRoot->smData;
  451   smIntContext_t            *smAllShared = (smIntContext_t *)&smIntRoot->smAllShared;  
  452   smIORequestBody_t         *smIOCommand = (smIORequestBody_t *)smAllShared->IOMem;
  453   int                       i = 0;
  454   
  455   SM_DBG3(("smIOInit: start\n"));  
  456   
  457   SMLIST_INIT_HDR(&(smAllShared->freeIOList));
  458   SMLIST_INIT_HDR(&(smAllShared->mainIOList));
  459   
  460   for(i=0;i<SM_MAX_IO;i++)
  461   {
  462     SMLIST_INIT_ELEMENT(&(smIOCommand[i].satIoBodyLink));
  463     smIOCommand[i].id = i;
  464     smIOCommand[i].InUse = agFALSE;
  465     smIOCommand[i].ioStarted = agFALSE;
  466     smIOCommand[i].ioCompleted = agFALSE;
  467     smIOCommand[i].reTries = 0;
  468 
  469     smIOCommand[i].smDevHandle = agNULL;
  470     smIOCommand[i].smIORequest = agNULL;
  471     smIOCommand[i].smIOToBeAbortedRequest = agNULL;
  472     smIOCommand[i].transport.SATA.satIOContext.satOrgIOContext = agNULL;
  473         
  474     sm_memset(&(smIOCommand[i].transport.SATA.agSATARequestBody), 0, sizeof(agsaSATAInitiatorRequest_t));   
  475     
  476     
  477     SMLIST_ENQUEUE_AT_TAIL(&(smIOCommand[i].satIoBodyLink), &(smAllShared->freeIOList)); 
  478   }
  479   
  480   return;
  481 }
  482                     
  483 FORCEINLINE void
  484 smIOReInit(
  485           smRoot_t          *smRoot,
  486           smIORequestBody_t *smIORequestBody
  487           )
  488 {
  489   SM_DBG3(("smIOReInit: start\n"));  
  490   smIORequestBody->InUse = agTRUE;
  491   smIORequestBody->ioStarted = agFALSE;
  492   smIORequestBody->ioCompleted = agFALSE;
  493   smIORequestBody->reTries = 0;
  494   smIORequestBody->smDevHandle = agNULL;
  495   smIORequestBody->smIORequest = agNULL;
  496   smIORequestBody->smIOToBeAbortedRequest = agNULL;
  497   smIORequestBody->transport.SATA.satIOContext.satOrgIOContext = agNULL;
  498   /*sm_memset(&(smIORequestBody->transport.SATA.agSATARequestBody), 0, sizeof(agsaSATAInitiatorRequest_t));*/
  499   return;
  500 }
  501 
  502 /* end smapi defined APIS */
  503 

Cache object: d70b3a5fc963f997b46bcbfa0f4681f3


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.