v_UINT_t tx_timer_create_intern_debug( v_PVOID_t pMacGlobal, TX_TIMER *timer_ptr,
   char *name_ptr, 
   v_VOID_t ( *expiration_function )( v_PVOID_t, tANI_U32 ),
   tANI_U32 expiration_input, v_ULONG_t initScheduleTimeInTicks, 
   v_ULONG_t rescheduleTimeInTicks, v_ULONG_t auto_activate, 
   char* fileName, v_U32_t lineNum)
{
    VOS_STATUS status;

    VOS_ASSERT((NULL != expiration_function) && (NULL != name_ptr));

    if (!initScheduleTimeInTicks)
        return TX_TICK_ERROR;

    if (!timer_ptr)
        return TX_TIMER_ERROR;

    // Initialize timer structure
    timer_ptr->pExpireFunc = expiration_function;
    timer_ptr->expireInput = expiration_input;
    timer_ptr->initScheduleTimeInMsecs =
        TX_MSECS_IN_1_TICK * initScheduleTimeInTicks;
    timer_ptr->rescheduleTimeInMsecs =
        TX_MSECS_IN_1_TICK * rescheduleTimeInTicks;
    timer_ptr->pMac = pMacGlobal;

    // Set the flag indicating that the timer was created
    timer_ptr->tmrSignature = TX_AIRGO_TMR_SIGNATURE;

#ifdef WLAN_DEBUG
    // Store the timer name
    strlcpy(timer_ptr->timerName, name_ptr, sizeof(timer_ptr->timerName));
#endif // Store the timer name, for Debug build only

    status = vos_timer_init_debug( &timer_ptr->vosTimer, VOS_TIMER_TYPE_SW, 
          tx_main_timer_func, (v_PVOID_t)timer_ptr, fileName, lineNum);
    if (VOS_STATUS_SUCCESS != status)
    {
       VOS_TRACE(VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR,
             "Cannot create timer for %s\n", TIMER_NAME);
       return TX_TIMER_ERROR;
    }

    if(0 != rescheduleTimeInTicks)
    {
        VOS_TRACE(VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_INFO, 
                  "Creating periodic timer for %s\n", TIMER_NAME);
    }

    // Activate this timer if required
    if (auto_activate)
    {
        tx_timer_activate(timer_ptr);
    }

    return TX_SUCCESS;

} //** tx_timer_create() ***/
eHalStatus palTimerAlloc_debug( tHddHandle hHdd, tPalTimerHandle *phPalTimer, 
                          palTimerCallback pCallback, void *pContext, char* fileName, v_U32_t lineNum  )
{
   eHalStatus halStatus = eHAL_STATUS_FAILURE;
   tPalTimer *pPalTimer = NULL;
   VOS_STATUS vosStatus;
    
   do
   {
      // allocate the internal timer structure.
      pPalTimer = vos_mem_malloc( sizeof( tPalTimer ) );
      if ( NULL == pPalTimer ) break;
       
      // initialize the vos Timer that underlies the pal Timer.
      vosStatus = vos_timer_init_debug( &pPalTimer->vosTimer, VOS_TIMER_TYPE_SW, 
                                   internalTimerCallback, pPalTimer, fileName, lineNum );
      if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) )
      {
         // if fail to init the vos timer, free the memory and bail out.
         vos_mem_free( pPalTimer );
         break;
      }
      
      // initialize the info in the internal palTimer struct so we can 
      pPalTimer->timerCallback = pCallback;
      pPalTimer->pContext      = pContext;
      pPalTimer->hHdd          = hHdd;
      
      // return a 'handle' to the caller.
      *phPalTimer = pPalTimer;
      
      halStatus = eHAL_STATUS_SUCCESS;
      
   } while( 0 );   
       
    return( halStatus );
}