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/discovery/dm/dminit.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 **
    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 #include <sys/cdefs.h>
   24 __FBSDID("$FreeBSD$");
   25 #include <dev/pms/config.h>
   26 
   27 #include <dev/pms/freebsd/driver/common/osenv.h>
   28 #include <dev/pms/freebsd/driver/common/ostypes.h>
   29 #include <dev/pms/freebsd/driver/common/osdebug.h>
   30 
   31 #include <dev/pms/RefTisa/sallsdk/api/sa.h>
   32 #include <dev/pms/RefTisa/sallsdk/api/saapi.h>
   33 #include <dev/pms/RefTisa/sallsdk/api/saosapi.h>
   34 
   35 #ifdef FDS_DM
   36 #include <dev/pms/RefTisa/discovery/api/dm.h>
   37 #include <dev/pms/RefTisa/discovery/api/dmapi.h>
   38 #include <dev/pms/RefTisa/discovery/api/tddmapi.h>
   39 
   40 #include <dev/pms/RefTisa/discovery/dm/dmdefs.h>
   41 #include <dev/pms/RefTisa/discovery/dm/dmtypes.h>
   42 #include <dev/pms/RefTisa/discovery/dm/dmproto.h>
   43 
   44 #ifdef DM_DEBUG
   45 bit32 gDMDebugLevel = 1;
   46 #endif
   47 
   48 osGLOBAL void   
   49 dmGetRequirements(
   50                   dmRoot_t                      *dmRoot,
   51                   dmSwConfig_t                  *swConfig,
   52                   dmMemoryRequirement_t         *memoryRequirement,
   53                   bit32                         *usecsPerTick,
   54                   bit32                         *maxNumLocks)
   55 {
   56   bit32               memoryReqCount = 0;
   57   bit32               max_expander = DM_MAX_EXPANDER_DEV; 
   58   char    *buffer;
   59   bit32   buffLen;
   60   bit32   lenRecv = 0;
   61   static char    tmpBuffer[DEFAULT_KEY_BUFFER_SIZE];
   62   char    *pLastUsedChar = agNULL;
   63   char    globalStr[]     = "Global";
   64   char    iniParmsStr[]   = "InitiatorParms";
   65   char    SwParmsStr[]    = "SWParms";    
   66    
   67   DM_DBG3(("dmGetRequirements: start\n"));
   68   /* sanity check */
   69   DM_ASSERT((agNULL != swConfig), "");
   70   DM_ASSERT((agNULL != memoryRequirement), "");
   71   DM_ASSERT((agNULL != usecsPerTick), "");
   72   DM_ASSERT((agNULL != maxNumLocks), ""); 
   73   
   74   /* memory requirement for dmRoot, CACHE memory */
   75   memoryRequirement->dmMemory[DM_ROOT_MEM_INDEX].singleElementLength = sizeof(dmIntRoot_t);
   76   memoryRequirement->dmMemory[DM_ROOT_MEM_INDEX].numElements = 1;
   77   memoryRequirement->dmMemory[DM_ROOT_MEM_INDEX].totalLength = 
   78       (memoryRequirement->dmMemory[DM_ROOT_MEM_INDEX].singleElementLength) * (memoryRequirement->dmMemory[DM_ROOT_MEM_INDEX].numElements);
   79   memoryRequirement->dmMemory[DM_ROOT_MEM_INDEX].alignment = 4;
   80   memoryRequirement->dmMemory[DM_ROOT_MEM_INDEX].type = DM_CACHED_MEM;
   81   memoryReqCount++;
   82   
   83   /* memory requirement for Port Context Links, CACHE memory */
   84   memoryRequirement->dmMemory[DM_PORT_MEM_INDEX].singleElementLength = sizeof(dmIntPortContext_t);
   85   memoryRequirement->dmMemory[DM_PORT_MEM_INDEX].numElements = DM_MAX_PORT_CONTEXT; 
   86   memoryRequirement->dmMemory[DM_PORT_MEM_INDEX].totalLength = 
   87       (memoryRequirement->dmMemory[DM_PORT_MEM_INDEX].singleElementLength) * (memoryRequirement->dmMemory[DM_PORT_MEM_INDEX].numElements);
   88   memoryRequirement->dmMemory[DM_PORT_MEM_INDEX].alignment = 4;
   89   memoryRequirement->dmMemory[DM_PORT_MEM_INDEX].type = DM_CACHED_MEM;
   90   memoryReqCount++;
   91 
   92   /* memory requirement for Device Links, CACHE memory */
   93   memoryRequirement->dmMemory[DM_DEVICE_MEM_INDEX].singleElementLength = sizeof(dmDeviceData_t);
   94   memoryRequirement->dmMemory[DM_DEVICE_MEM_INDEX].numElements = DM_MAX_DEV; 
   95   memoryRequirement->dmMemory[DM_DEVICE_MEM_INDEX].totalLength = 
   96       (memoryRequirement->dmMemory[DM_DEVICE_MEM_INDEX].singleElementLength) * (memoryRequirement->dmMemory[DM_DEVICE_MEM_INDEX].numElements);
   97   memoryRequirement->dmMemory[DM_DEVICE_MEM_INDEX].alignment = 4;
   98   memoryRequirement->dmMemory[DM_DEVICE_MEM_INDEX].type = DM_CACHED_MEM;
   99   memoryReqCount++;
  100 
  101   /* memory requirement for Expander Device Links, CACHE memory */
  102   /*
  103      Maximum number of expanders are configurable
  104      The default is DM_MAX_EXPANDER_DEV
  105   */
  106   buffer = tmpBuffer;
  107   buffLen = sizeof(tmpBuffer);
  108   
  109   dm_memset(buffer, 0, buffLen);
  110   lenRecv = 0;
  111   
  112   if ((tddmGetTransportParam(
  113                              dmRoot, 
  114                              globalStr,
  115                              iniParmsStr,
  116                              agNULL,
  117                              agNULL,
  118                              agNULL, 
  119                              agNULL, 
  120                              "MaxExpanders",
  121                              buffer, 
  122                              buffLen, 
  123                              &lenRecv
  124                              ) == DM_RC_SUCCESS) && (lenRecv != 0))
  125   {
  126     if (osti_strncmp(buffer, "0x", 2) == 0)
  127     { 
  128       max_expander = osti_strtoul (buffer, &pLastUsedChar, 0);
  129     }
  130     else
  131     {
  132       max_expander = osti_strtoul (buffer, &pLastUsedChar, 10);
  133     }
  134   }
  135   DM_DBG3(("dmGetRequirements: max_expander %d\n", max_expander));
  136   
  137   
  138   memoryRequirement->dmMemory[DM_EXPANDER_MEM_INDEX].singleElementLength = sizeof(dmExpander_t);
  139   memoryRequirement->dmMemory[DM_EXPANDER_MEM_INDEX].numElements = max_expander; 
  140   memoryRequirement->dmMemory[DM_EXPANDER_MEM_INDEX].totalLength = 
  141       (memoryRequirement->dmMemory[DM_EXPANDER_MEM_INDEX].singleElementLength) * (memoryRequirement->dmMemory[DM_EXPANDER_MEM_INDEX].numElements);
  142   memoryRequirement->dmMemory[DM_EXPANDER_MEM_INDEX].alignment = 4;
  143   memoryRequirement->dmMemory[DM_EXPANDER_MEM_INDEX].type = DM_CACHED_MEM;
  144   memoryReqCount++;
  145 
  146   /* memory requirement for SMP command Links, CACHE memory */
  147   memoryRequirement->dmMemory[DM_SMP_MEM_INDEX].singleElementLength = sizeof(dmSMPRequestBody_t);
  148   memoryRequirement->dmMemory[DM_SMP_MEM_INDEX].numElements = DM_MAX_SMP; 
  149   memoryRequirement->dmMemory[DM_SMP_MEM_INDEX].totalLength = 
  150       (memoryRequirement->dmMemory[DM_SMP_MEM_INDEX].singleElementLength) * (memoryRequirement->dmMemory[DM_SMP_MEM_INDEX].numElements);
  151   memoryRequirement->dmMemory[DM_SMP_MEM_INDEX].alignment = 4;
  152   memoryRequirement->dmMemory[DM_SMP_MEM_INDEX].type = DM_CACHED_MEM;
  153   memoryReqCount++;
  154   
  155   /* memory requirement for INDIRECT SMP command/response Links, DMA memory */
  156   memoryRequirement->dmMemory[DM_INDIRECT_SMP_MEM_INDEX].singleElementLength = SMP_INDIRECT_PAYLOAD; /* 512 */
  157   memoryRequirement->dmMemory[DM_INDIRECT_SMP_MEM_INDEX].numElements = DM_MAX_INDIRECT_SMP; 
  158   memoryRequirement->dmMemory[DM_INDIRECT_SMP_MEM_INDEX].totalLength = 
  159       (memoryRequirement->dmMemory[DM_INDIRECT_SMP_MEM_INDEX].singleElementLength) * (memoryRequirement->dmMemory[DM_INDIRECT_SMP_MEM_INDEX].numElements);
  160   memoryRequirement->dmMemory[DM_INDIRECT_SMP_MEM_INDEX].alignment = 4;
  161   memoryRequirement->dmMemory[DM_INDIRECT_SMP_MEM_INDEX].type = DM_DMA_MEM;
  162   memoryReqCount++;
  163   
  164   
  165   /* set up memory requirement count */
  166   memoryRequirement->count = memoryReqCount;
  167   
  168   /* requirement for locks */
  169   *maxNumLocks = DM_MAX_LOCKS;   
  170 
  171   /* setup the time tick */  
  172   *usecsPerTick = DM_USECS_PER_TICK;
  173 
  174 
  175   /* set up the number of Expander device handles */
  176   swConfig->numDevHandles = DM_MAX_DEV;
  177   swConfig->itNexusTimeout = IT_NEXUS_TIMEOUT;   /* default is 2000 ms*/
  178 
  179   dm_memset(buffer, 0, buffLen);
  180   lenRecv = 0;
  181   
  182   if ((tddmGetTransportParam(
  183                              dmRoot, 
  184                              globalStr,
  185                              SwParmsStr,
  186                              agNULL,
  187                              agNULL,
  188                              agNULL, 
  189                              agNULL, 
  190                              "IT_NEXUS_TIMEOUT",
  191                              buffer, 
  192                              buffLen, 
  193                              &lenRecv
  194                              ) == DM_RC_SUCCESS) && (lenRecv != 0))
  195   {
  196     if (osti_strncmp(buffer, "0x", 2) == 0)
  197     { 
  198       swConfig->itNexusTimeout = osti_strtoul (buffer, &pLastUsedChar, 0);
  199     }
  200     else
  201     {
  202       swConfig->itNexusTimeout = osti_strtoul (buffer, &pLastUsedChar, 10);
  203     }
  204   }
  205 
  206   DM_DBG1(("dmGetRequirements: swConfig->itNexusTimeout 0x%X\n", swConfig->itNexusTimeout));
  207   
  208   DM_DBG3(("dmGetRequirements: memoryReqCount %d\n", memoryRequirement->count));
  209 
  210   return;
  211 }                                       
  212 /*
  213   ??? processing swConfig
  214 */
  215 osGLOBAL bit32  
  216 dmInitialize(
  217              dmRoot_t                   *dmRoot,
  218              agsaRoot_t                 *agRoot,
  219              dmMemoryRequirement_t      *memoryAllocated,
  220              dmSwConfig_t               *swConfig,
  221              bit32                      usecsPerTick )
  222 {
  223   dmIntRoot_t               *dmIntRoot;
  224   dmIntPortContext_t        *dmIntPortContext;
  225   dmDeviceData_t            *dmDevice;  
  226   dmExpander_t              *dmExpander;
  227   dmSMPRequestBody_t        *dmSMPRequest; 
  228   bit8                      *dmIndirectSMPRequest; 
  229   dmIntContext_t            *dmAllShared;
  230   bit32              i;
  231   bit32               max_expander = DM_MAX_EXPANDER_DEV; 
  232   char    *buffer;
  233   bit32   buffLen;
  234   bit32   lenRecv = 0;
  235   static char    tmpBuffer[DEFAULT_KEY_BUFFER_SIZE];
  236   char    *pLastUsedChar = agNULL;
  237   char    globalStr[]     = "Global";
  238   char    iniParmsStr[]   = "InitiatorParms";
  239   char    SwParmsStr[]    = "SWParms"; 
  240   
  241   DM_DBG3(("dmInitialize: start\n"));
  242   /* sanity check */  
  243   DM_ASSERT((agNULL != dmRoot), "");
  244   DM_ASSERT((agNULL != agRoot), "");
  245   DM_ASSERT((agNULL != memoryAllocated), "");
  246   DM_ASSERT((agNULL != swConfig), "");
  247   DM_ASSERT((DM_ROOT_MEM_INDEX < memoryAllocated->count), "");
  248   DM_ASSERT((DM_PORT_MEM_INDEX < memoryAllocated->count), "");
  249   DM_ASSERT((DM_DEVICE_MEM_INDEX < memoryAllocated->count), "");
  250   DM_ASSERT((DM_EXPANDER_MEM_INDEX < memoryAllocated->count), "");
  251   DM_ASSERT((DM_SMP_MEM_INDEX < memoryAllocated->count), "");  
  252   DM_ASSERT((DM_INDIRECT_SMP_MEM_INDEX < memoryAllocated->count), "");  
  253 
  254   /* Check the memory allocated */
  255   for ( i = 0; i < memoryAllocated->count; i ++ )
  256   {
  257     /* If memory allocatation failed  */
  258     if (memoryAllocated->dmMemory[i].singleElementLength &&
  259         memoryAllocated->dmMemory[i].numElements)
  260     {
  261       if ( (0 != memoryAllocated->dmMemory[i].numElements)
  262           && (0 == memoryAllocated->dmMemory[i].totalLength) )
  263       {
  264         /* return failure */
  265         DM_DBG1(("dmInitialize: Memory[%d]  singleElementLength = 0x%0x  numElements = 0x%x NOT allocated!!!\n",
  266           i,
  267           memoryAllocated->dmMemory[i].singleElementLength,
  268           memoryAllocated->dmMemory[i].numElements));
  269         return DM_RC_FAILURE;
  270       }
  271     }
  272   }
  273   
  274   /* DM's internal root */
  275   dmIntRoot  = (dmIntRoot_t *) (memoryAllocated->dmMemory[DM_ROOT_MEM_INDEX].virtPtr);
  276   dmRoot->dmData = (void *) dmIntRoot;
  277   
  278   dmAllShared = (dmIntContext_t *)&(dmIntRoot->dmAllShared);
  279   /**<  Initialize the TDM data part of the interrupt context */
  280   dmAllShared->dmRootOsData.dmRoot     = dmRoot;
  281   dmAllShared->dmRootOsData.dmAllShared   = (void *) dmAllShared;
  282   
  283   /* Port Contexts */
  284   dmIntPortContext = (dmIntPortContext_t *) (memoryAllocated->dmMemory[DM_PORT_MEM_INDEX].virtPtr);
  285   dmAllShared->PortContextMem = (dmIntPortContext_t *)dmIntPortContext;
  286   
  287   /* Devices */
  288   dmDevice = (dmDeviceData_t *) (memoryAllocated->dmMemory[DM_DEVICE_MEM_INDEX].virtPtr);
  289   dmAllShared->DeviceMem = (dmDeviceData_t *)dmDevice;
  290   
  291   /* Expanders */
  292   dmExpander = (dmExpander_t *) (memoryAllocated->dmMemory[DM_EXPANDER_MEM_INDEX].virtPtr);
  293   dmAllShared->ExpanderMem = (dmExpander_t *)dmExpander;
  294   
  295   /* SMP commands */
  296   dmSMPRequest = (dmSMPRequestBody_t *) (memoryAllocated->dmMemory[DM_SMP_MEM_INDEX].virtPtr);
  297   dmAllShared->SMPMem = (dmSMPRequestBody_t *)dmSMPRequest;
  298 
  299   /* DMAable SMP request/reponse pointed by dmSMPRequestBody_t */
  300   dmIndirectSMPRequest = (bit8 *) (memoryAllocated->dmMemory[DM_INDIRECT_SMP_MEM_INDEX].virtPtr);
  301   dmAllShared->IndirectSMPMem = (bit8 *)dmIndirectSMPRequest;
  302   dmAllShared->IndirectSMPUpper32 = memoryAllocated->dmMemory[DM_INDIRECT_SMP_MEM_INDEX].physAddrUpper;
  303   dmAllShared->IndirectSMPLower32 = memoryAllocated->dmMemory[DM_INDIRECT_SMP_MEM_INDEX].physAddrLower;
  304     
  305   dmAllShared->agRoot = agRoot;
  306   
  307      
  308   dmAllShared->usecsPerTick = usecsPerTick;        
  309   dmAllShared->itNexusTimeout = IT_NEXUS_TIMEOUT;/*swConfig->itNexusTimeout;*/
  310   dmAllShared->MaxRetryDiscovery = DISCOVERY_RETRIES;
  311   dmAllShared->RateAdjust = 0;
  312   /**< initializes timers */
  313   dmInitTimers(dmRoot);
  314 
  315   /**< initializes port contexts */
  316   dmPortContextInit(dmRoot);
  317   
  318   /**< initializes devices */
  319   dmDeviceDataInit(dmRoot);
  320   
  321   /**< initializes expander devices */
  322   buffer = tmpBuffer;
  323   buffLen = sizeof(tmpBuffer);
  324   
  325   dm_memset(buffer, 0, buffLen);
  326   lenRecv = 0;
  327   
  328   if ((tddmGetTransportParam(
  329                              dmRoot, 
  330                              globalStr,
  331                              iniParmsStr,
  332                              agNULL,
  333                              agNULL,
  334                              agNULL, 
  335                              agNULL, 
  336                              "MaxExpanders",
  337                              buffer, 
  338                              buffLen, 
  339                              &lenRecv
  340                              ) == DM_RC_SUCCESS) && (lenRecv != 0))
  341   {
  342     if (osti_strncmp(buffer, "0x", 2) == 0)
  343     { 
  344       max_expander = osti_strtoul (buffer, &pLastUsedChar, 0);
  345     }
  346     else
  347     {
  348       max_expander = osti_strtoul (buffer, &pLastUsedChar, 10);
  349     }
  350   }  
  351 
  352   dm_memset(buffer, 0, buffLen);
  353   lenRecv = 0;
  354   
  355   if ((tddmGetTransportParam(
  356                              dmRoot, 
  357                              globalStr,
  358                              SwParmsStr,
  359                              agNULL,
  360                              agNULL,
  361                              agNULL, 
  362                              agNULL, 
  363                              "IT_NEXUS_TIMEOUT",
  364                              buffer, 
  365                              buffLen, 
  366                              &lenRecv
  367                              ) == DM_RC_SUCCESS) && (lenRecv != 0))
  368   {
  369     if (osti_strncmp(buffer, "0x", 2) == 0)
  370     { 
  371       dmAllShared->itNexusTimeout = osti_strtoul (buffer, &pLastUsedChar, 0);
  372     }
  373     else
  374     {
  375       dmAllShared->itNexusTimeout = osti_strtoul (buffer, &pLastUsedChar, 10);
  376     }
  377   }
  378 
  379   DM_DBG1(("dmAllShared->itNexusTimeout %d \n", dmAllShared->itNexusTimeout)); 
  380 
  381   dm_memset(buffer, 0, buffLen);
  382   lenRecv = 0;
  383   
  384   if ((tddmGetTransportParam(
  385                              dmRoot, 
  386                              globalStr,
  387                              SwParmsStr,
  388                              agNULL,
  389                              agNULL,
  390                              agNULL, 
  391                              agNULL, 
  392                              "MaxRetryDiscovery",
  393                              buffer, 
  394                              buffLen, 
  395                              &lenRecv
  396                              ) == DM_RC_SUCCESS) && (lenRecv != 0))
  397   {
  398     if (osti_strncmp(buffer, "0x", 2) == 0)
  399     { 
  400       dmAllShared->MaxRetryDiscovery = osti_strtoul (buffer, &pLastUsedChar, 0);
  401     }
  402     else
  403     {
  404       dmAllShared->MaxRetryDiscovery = osti_strtoul (buffer, &pLastUsedChar, 10);
  405     }
  406   }
  407 
  408   DM_DBG1(("dmAllShared->MaxRetryDiscovery %d \n", dmAllShared->MaxRetryDiscovery)); 
  409 
  410   dm_memset(buffer, 0, buffLen);
  411   lenRecv = 0;
  412   if ((tddmGetTransportParam(
  413                              dmRoot, 
  414                              globalStr,
  415                              SwParmsStr,
  416                              agNULL,
  417                              agNULL,
  418                              agNULL, 
  419                              agNULL, 
  420                              "RateAdjust",
  421                              buffer, 
  422                              buffLen, 
  423                              &lenRecv
  424                              ) == DM_RC_SUCCESS) && (lenRecv != 0))
  425   {
  426     if (osti_strncmp(buffer, "0x", 2) == 0)
  427     { 
  428       dmAllShared->RateAdjust = osti_strtoul (buffer, &pLastUsedChar, 0);
  429     }
  430     else
  431     {
  432       dmAllShared->RateAdjust = osti_strtoul (buffer, &pLastUsedChar, 10);
  433     }
  434   }
  435   DM_DBG1(("dmAllShared->RateAdjust %d \n", dmAllShared->RateAdjust)); 
  436 
  437   dmExpanderDeviceDataInit(dmRoot, max_expander);
  438     
  439   /**< initializes SMP commands */
  440   dmSMPInit(dmRoot);
  441 
  442 #ifdef DM_DEBUG
  443   gDMDebugLevel = swConfig->DMDebugLevel;
  444 #endif
  445   return DM_RC_SUCCESS;
  446 }
  447 
  448 osGLOBAL void
  449 dmSMPInit(
  450           dmRoot_t *dmRoot 
  451          )
  452 {
  453   dmIntRoot_t               *dmIntRoot    = (dmIntRoot_t *)dmRoot->dmData;
  454   dmIntContext_t            *dmAllShared = (dmIntContext_t *)&dmIntRoot->dmAllShared;
  455   dmSMPRequestBody_t        *dmSMPCommand = (dmSMPRequestBody_t *)dmAllShared->SMPMem;
  456   bit8                      *dmIndirectSMPReqRsp = (bit8 *)dmAllShared->IndirectSMPMem;
  457   bit32                     prev_PhysAddrLower;
  458   
  459   int i = 0;
  460   DM_DBG3(("dmSMPInit: start \n"));
  461   
  462   DMLIST_INIT_HDR(&(dmAllShared->freeSMPList));
  463   
  464   for(i=0;i<DM_MAX_SMP;i++)
  465   {
  466     DMLIST_INIT_ELEMENT(&(dmSMPCommand[i].Link));
  467     /* initialize expander fields */
  468     dmSMPCommand[i].dmRoot = agNULL;
  469     dmSMPCommand[i].dmDevice = agNULL;
  470     dmSMPCommand[i].dmPortContext = agNULL;
  471     dmSMPCommand[i].retries = 0;
  472     dmSMPCommand[i].id = i;
  473     dm_memset( &(dmSMPCommand[i].smpPayload), 0, sizeof(dmSMPCommand[i].smpPayload));
  474     /* indirect SMP related */
  475     dmSMPCommand[i].IndirectSMPResponse = agNULL;
  476     dmSMPCommand[i].IndirectSMP = ((bit8 *)dmIndirectSMPReqRsp) + (i*SMP_INDIRECT_PAYLOAD);
  477     dmSMPCommand[i].IndirectSMPUpper32 = dmAllShared->IndirectSMPUpper32;
  478     dmSMPCommand[i].IndirectSMPLower32 = dmAllShared->IndirectSMPLower32;
  479     
  480     prev_PhysAddrLower = dmAllShared->IndirectSMPLower32;
  481     dmAllShared->IndirectSMPLower32 = dmAllShared->IndirectSMPLower32 + SMP_INDIRECT_PAYLOAD;
  482     if (dmAllShared->IndirectSMPLower32 <= prev_PhysAddrLower)
  483     {
  484       dmAllShared->IndirectSMPUpper32++;    
  485     }
  486     
  487     DMLIST_ENQUEUE_AT_TAIL(&(dmSMPCommand[i].Link), &(dmAllShared->freeSMPList)); 
  488   }
  489   return;
  490   
  491 }
  492 
  493 osGLOBAL void
  494 dmDeviceDataInit(
  495                  dmRoot_t *dmRoot 
  496                 )
  497 {
  498   dmIntRoot_t               *dmIntRoot    = (dmIntRoot_t *)dmRoot->dmData;
  499   dmIntContext_t            *dmAllShared = (dmIntContext_t *)&dmIntRoot->dmAllShared;  
  500   dmDeviceData_t            *dmDeviceData = (dmDeviceData_t *)dmAllShared->DeviceMem;
  501   int i;
  502   
  503   DM_DBG3(("dmDeviceDataInit: start \n"));
  504   
  505   DMLIST_INIT_HDR(&(dmAllShared->MainDeviceList));
  506   DMLIST_INIT_HDR(&(dmAllShared->FreeDeviceList));
  507   
  508   for(i=0;i<DM_MAX_DEV;i++)
  509   {
  510     DMLIST_INIT_ELEMENT(&(dmDeviceData[i].FreeLink));
  511     DMLIST_INIT_ELEMENT(&(dmDeviceData[i].MainLink));
  512     DMLIST_INIT_ELEMENT(&(dmDeviceData[i].IncDisLink));
  513     dmDeviceData[i].id = i;
  514     dmDeviceData[i].DeviceType = DM_DEFAULT_DEVICE;
  515     dmDeviceData[i].dmRoot = agNULL;
  516 //    dmDeviceData[i].agDevHandle = agNULL;
  517     
  518     dmDeviceData[i].dmPortContext = agNULL;
  519     dmDeviceData[i].dmExpander = agNULL;
  520     dmDeviceData[i].ExpDevice = agNULL;
  521     dmDeviceData[i].phyID = 0xFF;
  522     dmDeviceData[i].SASAddressID.sasAddressHi = 0;
  523     dmDeviceData[i].SASAddressID.sasAddressLo = 0;
  524     dmDeviceData[i].valid = agFALSE;
  525     dmDeviceData[i].valid2 = agFALSE;
  526     dmDeviceData[i].processed = agFALSE;
  527     dmDeviceData[i].initiator_ssp_stp_smp = 0;
  528     dmDeviceData[i].target_ssp_stp_smp = 0;
  529     dmDeviceData[i].numOfPhys = 0;
  530 //    dmDeviceData[i].registered = agFALSE;
  531     dmDeviceData[i].directlyAttached = agFALSE;
  532     dmDeviceData[i].SASSpecDeviceType = 0xFF;
  533     dmDeviceData[i].IOStart = 0;
  534     dmDeviceData[i].IOResponse = 0;
  535     dmDeviceData[i].agDeviceResetContext.osData = agNULL;
  536     dmDeviceData[i].agDeviceResetContext.sdkData = agNULL;
  537     dmDeviceData[i].TRflag = agFALSE;
  538     dmDeviceData[i].ResetCnt = 0;
  539     dmDeviceData[i].registered = agFALSE;
  540     dmDeviceData[i].reported = agFALSE;
  541   
  542     dmDeviceData[i].MCN = 0;
  543     dmDeviceData[i].MCNDone = agFALSE;
  544     dmDeviceData[i].PrevMCN = 0;
  545     
  546     dm_memset( &(dmDeviceData[i].dmDeviceInfo), 0, sizeof(dmDeviceInfo_t));
  547     /* some other variables */
  548     DMLIST_ENQUEUE_AT_TAIL(&(dmDeviceData[i].FreeLink), &(dmAllShared->FreeDeviceList)); 
  549   }  
  550   
  551   return;
  552 }
  553 osGLOBAL void
  554 dmDeviceDataReInit(
  555                    dmRoot_t               *dmRoot,
  556                    dmDeviceData_t         *oneDeviceData                     
  557                   )
  558 {
  559   DM_DBG3(("dmDeviceDataReInit: start \n"));
  560   
  561   oneDeviceData->DeviceType = DM_DEFAULT_DEVICE;
  562 //  oneDeviceData->agDevHandle = agNULL;
  563     
  564   oneDeviceData->dmPortContext = agNULL;
  565   oneDeviceData->dmExpander = agNULL;
  566   oneDeviceData->ExpDevice = agNULL;
  567   oneDeviceData->phyID = 0xFF;
  568   oneDeviceData->SASAddressID.sasAddressHi = 0;
  569   oneDeviceData->SASAddressID.sasAddressLo = 0;
  570   oneDeviceData->valid = agFALSE;
  571   oneDeviceData->valid2 = agFALSE;
  572   oneDeviceData->processed = agFALSE;
  573   oneDeviceData->initiator_ssp_stp_smp = 0;
  574   oneDeviceData->target_ssp_stp_smp = 0;
  575   oneDeviceData->numOfPhys = 0;
  576 //  oneDeviceData->registered = agFALSE;
  577   oneDeviceData->directlyAttached = agFALSE;
  578   oneDeviceData->SASSpecDeviceType = 0xFF;
  579   oneDeviceData->IOStart = 0;
  580   oneDeviceData->IOResponse = 0;
  581   oneDeviceData->agDeviceResetContext.osData = agNULL;
  582   oneDeviceData->agDeviceResetContext.sdkData = agNULL;
  583   oneDeviceData->TRflag = agFALSE;
  584   oneDeviceData->ResetCnt = 0;   
  585   oneDeviceData->registered = agFALSE;
  586   oneDeviceData->reported = agFALSE;
  587   
  588   oneDeviceData->MCN = 0;
  589   oneDeviceData->MCNDone = agFALSE;
  590   oneDeviceData->PrevMCN = 0;
  591     
  592   dm_memset( &(oneDeviceData->dmDeviceInfo), 0, sizeof(dmDeviceInfo_t));
  593   
  594   return;
  595 }
  596 
  597 
  598 osGLOBAL void
  599 dmExpanderDeviceDataInit(
  600                          dmRoot_t *dmRoot,
  601                          bit32    max_exp  
  602                         )
  603 {
  604   dmIntRoot_t               *dmIntRoot    = (dmIntRoot_t *)dmRoot->dmData;
  605   dmIntContext_t            *dmAllShared = (dmIntContext_t *)&dmIntRoot->dmAllShared;
  606   dmExpander_t              *dmExpData = (dmExpander_t *)dmAllShared->ExpanderMem;
  607   bit32 i = 0;
  608   DM_DBG3(("dmExpanderDeviceDataInit: start \n"));
  609   
  610   DMLIST_INIT_HDR(&(dmAllShared->freeExpanderList));
  611   DMLIST_INIT_HDR(&(dmAllShared->mainExpanderList));
  612   
  613   for(i=0;i<max_exp;i++)
  614   {
  615     DMLIST_INIT_ELEMENT(&(dmExpData[i].linkNode));
  616     DMLIST_INIT_ELEMENT(&(dmExpData[i].upNode));
  617     /* initialize expander fields */
  618     dmExpData[i].dmRoot = agNULL;
  619     dmExpData[i].agDevHandle = agNULL;
  620     dmExpData[i].dmDevice = agNULL;
  621     dmExpData[i].dmUpStreamExpander = agNULL;
  622     dmExpData[i].dmCurrentDownStreamExpander = agNULL;
  623     dmExpData[i].hasUpStreamDevice = agFALSE;
  624     dmExpData[i].numOfUpStreamPhys = 0;
  625     dmExpData[i].currentUpStreamPhyIndex = 0;
  626     dmExpData[i].numOfDownStreamPhys = 0;
  627     dmExpData[i].currentDownStreamPhyIndex = 0;
  628     dmExpData[i].discoveringPhyId = 0;
  629     dmExpData[i].underDiscovering = agFALSE;
  630     dmExpData[i].id = i;
  631     DM_DBG3(("dmExpanderDeviceDataInit: exp id %d\n", i));
  632     
  633     dmExpData[i].dmReturnginExpander = agNULL;
  634     dmExpData[i].discoverSMPAllowed = agTRUE;
  635     dm_memset( &(dmExpData[i].currentIndex), 0, sizeof(dmExpData[i].currentIndex));
  636     dm_memset( &(dmExpData[i].upStreamPhys), 0, sizeof(dmExpData[i].upStreamPhys));
  637     dm_memset( &(dmExpData[i].downStreamPhys), 0, sizeof(dmExpData[i].downStreamPhys));
  638     dm_memset( &(dmExpData[i].routingAttribute), 0, sizeof(dmExpData[i].routingAttribute));
  639     dmExpData[i].configSASAddrTableIndex = 0;
  640     dm_memset( &(dmExpData[i].configSASAddressHiTable), 0, sizeof(dmExpData[i].configSASAddressHiTable));
  641     dm_memset( &(dmExpData[i].configSASAddressLoTable), 0, sizeof(dmExpData[i].configSASAddressLoTable));
  642     dmExpData[i].SAS2 = 0;  /* default is SAS 1.1 spec */ 
  643     dmExpData[i].TTTSupported = agFALSE;  /* Table to Table is supported */
  644     dmExpData[i].UndoDueToTTTSupported = agFALSE;
  645     
  646        
  647     DMLIST_ENQUEUE_AT_TAIL(&(dmExpData[i].linkNode), &(dmAllShared->freeExpanderList)); 
  648   }
  649   return;
  650 }
  651 
  652 /* re-intialize an expander */
  653 osGLOBAL void
  654 dmExpanderDeviceDataReInit(
  655                            dmRoot_t         *dmRoot, 
  656                            dmExpander_t     *oneExpander
  657                           )
  658 {
  659   DM_DBG3(("dmExpanderDeviceDataReInit: start \n"));
  660   oneExpander->dmRoot = agNULL;
  661   oneExpander->agDevHandle = agNULL;
  662   oneExpander->dmDevice = agNULL;
  663   oneExpander->dmUpStreamExpander = agNULL;
  664   oneExpander->dmCurrentDownStreamExpander = agNULL;
  665   oneExpander->hasUpStreamDevice = agFALSE;
  666   oneExpander->numOfUpStreamPhys = 0;
  667   oneExpander->currentUpStreamPhyIndex = 0;
  668   oneExpander->numOfDownStreamPhys = 0;
  669   oneExpander->currentDownStreamPhyIndex = 0;
  670   oneExpander->discoveringPhyId = 0;
  671   oneExpander->underDiscovering = agFALSE;
  672   oneExpander->dmReturnginExpander = agNULL;
  673   oneExpander->discoverSMPAllowed = agTRUE;
  674   dm_memset( &(oneExpander->currentIndex), 0, sizeof(oneExpander->currentIndex));
  675   dm_memset( &(oneExpander->upStreamPhys), 0, sizeof(oneExpander->upStreamPhys));
  676   dm_memset( &(oneExpander->downStreamPhys), 0, sizeof(oneExpander->downStreamPhys));
  677   dm_memset( &(oneExpander->routingAttribute), 0, sizeof(oneExpander->routingAttribute));
  678   oneExpander->configSASAddrTableIndex = 0;
  679   dm_memset( &(oneExpander->configSASAddressHiTable), 0, sizeof(oneExpander->configSASAddressHiTable));
  680   dm_memset( &(oneExpander->configSASAddressLoTable), 0, sizeof(oneExpander->configSASAddressLoTable));
  681   oneExpander->SAS2 = 0;  /* default is SAS 1.1 spec */ 
  682   oneExpander->TTTSupported = agFALSE;  /* Table to Table is supported */
  683   oneExpander->UndoDueToTTTSupported = agFALSE;
  684   
  685   return;
  686 }                         
  687 
  688 osGLOBAL void
  689 dmPortContextInit(
  690                   dmRoot_t *dmRoot 
  691                  )
  692 {
  693   dmIntRoot_t               *dmIntRoot    = (dmIntRoot_t *)dmRoot->dmData;
  694   dmIntContext_t            *dmAllShared = (dmIntContext_t *)&dmIntRoot->dmAllShared;
  695   dmIntPortContext_t        *dmPortContext = (dmIntPortContext_t *)dmAllShared->PortContextMem;
  696   int i = 0;
  697 #ifdef TBD  
  698   int j = 0;
  699 #endif  
  700   
  701   DM_DBG3(("dmPortContextInit: start \n"));
  702   
  703   DMLIST_INIT_HDR(&(dmAllShared->MainPortContextList));
  704   DMLIST_INIT_HDR(&(dmAllShared->FreePortContextList));
  705   for(i=0;i<DM_MAX_PORT_CONTEXT;i++)
  706   {
  707     DMLIST_INIT_ELEMENT(&(dmPortContext[i].FreeLink));
  708     DMLIST_INIT_ELEMENT(&(dmPortContext[i].MainLink));
  709 
  710     DMLIST_INIT_HDR(&(dmPortContext[i].discovery.discoveringExpanderList));
  711     DMLIST_INIT_HDR(&(dmPortContext[i].discovery.UpdiscoveringExpanderList));
  712     dmPortContext[i].discovery.type = DM_DISCOVERY_OPTION_FULL_START;
  713     dmInitTimerRequest(dmRoot, &(dmPortContext[i].discovery.discoveryTimer));
  714     dmInitTimerRequest(dmRoot, &(dmPortContext[i].discovery.configureRouteTimer));
  715     dmInitTimerRequest(dmRoot, &(dmPortContext[i].discovery.deviceRegistrationTimer));
  716     dmInitTimerRequest(dmRoot, &(dmPortContext[i].discovery.SMPBusyTimer));
  717     dmInitTimerRequest(dmRoot, &(dmPortContext[i].discovery.BCTimer));
  718     dmInitTimerRequest(dmRoot, &(dmPortContext[i].discovery.DiscoverySMPTimer));
  719     dmPortContext[i].discovery.retries = 0;  
  720     dmPortContext[i].discovery.configureRouteRetries = 0;  
  721     dmPortContext[i].discovery.deviceRetistrationRetries = 0;  
  722     dmPortContext[i].discovery.pendingSMP = 0;  
  723     dmPortContext[i].discovery.SeenBC = agFALSE;  
  724     dmPortContext[i].discovery.forcedOK = agFALSE;  
  725     dmPortContext[i].discovery.SMPRetries = 0;  
  726     dmPortContext[i].discovery.DeferredError = agFALSE;  
  727     dmPortContext[i].discovery.ConfiguresOthers = agFALSE;  
  728     dmPortContext[i].discovery.ResetTriggerred = agFALSE;  
  729 
  730 #ifdef INITIATOR_DRIVER  
  731     dmPortContext[i].DiscoveryState = DM_DSTATE_NOT_STARTED;
  732     dmPortContext[i].DiscoveryAbortInProgress = agFALSE;
  733     dmPortContext[i].directAttatchedSAS = agFALSE;
  734     dmPortContext[i].DiscoveryRdyGiven = agFALSE;
  735     dmPortContext[i].SeenLinkUp = agFALSE;
  736     
  737 #endif      
  738     dmPortContext[i].id = i;
  739 #ifdef TBD    
  740     dmPortContext[i].agPortContext = agNULL;
  741 #endif    
  742     dmPortContext[i].LinkRate = 0;
  743     dmPortContext[i].Count = 0;
  744     dmPortContext[i].valid = agFALSE;
  745     dmPortContext[i].RegFailed = agFALSE;
  746     
  747 #ifdef TBD    
  748     for (j=0;j<DM_MAX_NUM_PHYS;j++)
  749     {
  750       dmPortContext[i].PhyIDList[j] = agFALSE;
  751     }
  752 #endif    
  753     dmPortContext[i].RegisteredDevNums = 0;
  754     dmPortContext[i].eventPhyID = 0xFF;
  755     dmPortContext[i].Transient = agFALSE;
  756 
  757     /* add more variables later */
  758     DMLIST_ENQUEUE_AT_TAIL(&(dmPortContext[i].FreeLink), &(dmAllShared->FreePortContextList));
  759   }
  760 
  761 #ifdef DM_INTERNAL_DEBUG  /* for debugging only */
  762   for(i=0;i<DM_MAX_PORT_CONTEXT;i++)
  763   {
  764     DM_DBG6(("dmPortContextInit: index %d  &tdsaPortContext[] %p\n", i, &(dmPortContext[i])));
  765   }
  766   DM_DBG6(("dmPortContextInit: sizeof(tdsaPortContext_t) %d 0x%x\n", sizeof(dmIntPortContext_t), sizeof(dmIntPortContext_t)));
  767 #endif
  768 
  769   return;
  770 }                
  771 
  772 osGLOBAL void
  773 dmPortContextReInit(
  774                     dmRoot_t              *dmRoot,
  775                     dmIntPortContext_t    *onePortContext                    
  776                     )
  777 {
  778   dmDiscovery_t   *discovery;
  779   
  780   DM_DBG3(("dmPortContextReInit: start \n"));
  781   
  782   discovery = &(onePortContext->discovery);
  783 
  784   onePortContext->discovery.type = DM_DISCOVERY_OPTION_FULL_START;
  785   onePortContext->discovery.retries = 0;  
  786   onePortContext->discovery.configureRouteRetries = 0;  
  787   onePortContext->discovery.deviceRetistrationRetries = 0;  
  788   onePortContext->discovery.pendingSMP = 0;  
  789   onePortContext->discovery.SeenBC = agFALSE;  
  790   onePortContext->discovery.forcedOK = agFALSE;  
  791   onePortContext->discovery.SMPRetries = 0;  
  792   onePortContext->discovery.DeferredError = agFALSE;
  793   onePortContext->discovery.ConfiguresOthers = agFALSE;
  794   onePortContext->discovery.ResetTriggerred = agFALSE;
  795   
  796   /* free expander lists */
  797   dmCleanAllExp(dmRoot, onePortContext);
  798     
  799   /* kill the discovery-related timers if they are running */  
  800   tddmSingleThreadedEnter(dmRoot, DM_TIMER_LOCK);
  801   if (discovery->discoveryTimer.timerRunning == agTRUE)
  802   {
  803     tddmSingleThreadedLeave(dmRoot, DM_TIMER_LOCK);
  804     dmKillTimer(
  805                 dmRoot,
  806                 &discovery->discoveryTimer
  807                );
  808   }
  809   else
  810   {
  811     tddmSingleThreadedLeave(dmRoot, DM_TIMER_LOCK);
  812   }
  813   
  814   
  815   tddmSingleThreadedEnter(dmRoot, DM_TIMER_LOCK);
  816   if (discovery->configureRouteTimer.timerRunning == agTRUE)
  817   {
  818     tddmSingleThreadedLeave(dmRoot, DM_TIMER_LOCK);
  819     dmKillTimer(
  820                 dmRoot,
  821                 &discovery->configureRouteTimer
  822                );
  823   }
  824   else
  825   {
  826     tddmSingleThreadedLeave(dmRoot, DM_TIMER_LOCK);
  827   }
  828   
  829   
  830   tddmSingleThreadedEnter(dmRoot, DM_TIMER_LOCK);
  831   if (discovery->deviceRegistrationTimer.timerRunning == agTRUE)
  832   {
  833     tddmSingleThreadedLeave(dmRoot, DM_TIMER_LOCK);
  834     dmKillTimer(
  835                 dmRoot,
  836                 &discovery->deviceRegistrationTimer
  837                );
  838   }
  839   else
  840   {
  841     tddmSingleThreadedLeave(dmRoot, DM_TIMER_LOCK);
  842   }
  843   
  844   
  845   tddmSingleThreadedEnter(dmRoot, DM_TIMER_LOCK);
  846   if (discovery->BCTimer.timerRunning == agTRUE)
  847   {
  848     tddmSingleThreadedLeave(dmRoot, DM_TIMER_LOCK);
  849     dmKillTimer(
  850                 dmRoot,
  851                 &discovery->BCTimer
  852                );
  853   }
  854   else
  855   {
  856     tddmSingleThreadedLeave(dmRoot, DM_TIMER_LOCK);
  857   }
  858   
  859   
  860   tddmSingleThreadedEnter(dmRoot, DM_TIMER_LOCK);
  861   if (discovery->SMPBusyTimer.timerRunning == agTRUE)
  862   {
  863     tddmSingleThreadedLeave(dmRoot, DM_TIMER_LOCK);
  864     dmKillTimer(
  865                 dmRoot,
  866                 &discovery->SMPBusyTimer
  867                );
  868   }    
  869   else
  870   {
  871     tddmSingleThreadedLeave(dmRoot, DM_TIMER_LOCK);
  872   }
  873   
  874   
  875   tddmSingleThreadedEnter(dmRoot, DM_TIMER_LOCK);
  876   if (discovery->DiscoverySMPTimer.timerRunning == agTRUE)
  877   {
  878     tddmSingleThreadedLeave(dmRoot, DM_TIMER_LOCK);
  879     dmKillTimer(
  880                 dmRoot,
  881                 &discovery->DiscoverySMPTimer
  882                );
  883   }    
  884   else
  885   {
  886     tddmSingleThreadedLeave(dmRoot, DM_TIMER_LOCK);
  887   }
  888 
  889   onePortContext->DiscoveryState = DM_DSTATE_NOT_STARTED;
  890   onePortContext->DiscoveryAbortInProgress = agFALSE;
  891   onePortContext->directAttatchedSAS = agFALSE;
  892   onePortContext->DiscoveryRdyGiven = agFALSE;
  893   onePortContext->SeenLinkUp = agFALSE;
  894   
  895   onePortContext->dmPortContext->dmData = agNULL;
  896   onePortContext->dmPortContext = agNULL;
  897   onePortContext->dmRoot = agNULL;
  898   
  899   onePortContext->LinkRate = 0;
  900   onePortContext->Count = 0;
  901   onePortContext->valid = agFALSE;
  902   onePortContext->RegisteredDevNums = 0;
  903   onePortContext->eventPhyID = 0xFF;
  904   onePortContext->Transient = agFALSE;
  905     
  906   return;
  907 }                   
  908 
  909 
  910 osGLOBAL void
  911 dmInitTimers(
  912                dmRoot_t *dmRoot 
  913                )
  914 {
  915   dmIntRoot_t               *dmIntRoot    = (dmIntRoot_t *)dmRoot->dmData;
  916   dmIntContext_t            *dmAllShared = (dmIntContext_t *)&dmIntRoot->dmAllShared;
  917   
  918 #ifdef DM_DEBUG_ENABLE
  919   dmIntPortContext_t *dmPortContext = (dmIntPortContext_t *)dmAllShared->PortContextMem;
  920   
  921   DM_DBG6(("dmInitTimers: start \n"));
  922   DM_DBG6(("dmInitTimers: ******* tdsaRoot %p \n", dmIntRoot));
  923   DM_DBG6(("dmInitTimers: ******* tdsaPortContext %p \n",dmPortContext));
  924 #endif
  925   
  926   /* initialize the timerlist */
  927   DMLIST_INIT_HDR(&(dmAllShared->timerlist));
  928 
  929   return;
  930 }
  931 #endif /* FDS_ DM */
  932 
  933 

Cache object: f85d989b7d678f3c36a2235d9a60fb2d


[ 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.