/**************************************************************************************** * os_printf() **************************************************************************************** DESCRIPTION: Print formatted output. INPUT: format - Specifies the string, to be printed RETURN: None NOTES: *****************************************************************************************/ void os_printf(const char *format ,...) { static int from_new_line = 1; /* Used to save the last message EOL */ va_list ap; static char msg[MAX_MESSAGE_SIZE]; char *p_msg = msg; /* Pointer to the message */ TI_UINT16 message_len; TI_UINT32 sec = 0; TI_UINT32 uSec = 0; os_memoryZero(NULL,msg, MAX_MESSAGE_SIZE); /* Format the message and keep the message length */ va_start(ap,format); message_len = vsnprintf(&msg[0], sizeof(msg) -1 , format, ap); if (message_len > 0) { if ( from_new_line ) { if (msg[1] == '$') { p_msg += 4; } sec = os_timeStampUs(NULL); uSec = sec % MICROSECOND_IN_SECONDS; sec /= MICROSECOND_IN_SECONDS; printk(KERN_INFO DRIVER_NAME ": %d.%06d: %s",sec,uSec,p_msg); } else { printk(&msg[0]); } from_new_line = ( msg[message_len - 1] == '\n' ); } va_end(ap); }
/* Add trace entry. not safe, but will do */ int tb_trace(int loc, unsigned long p1, unsigned long p2) { int pos; if ((tb_control->options & TB_OPTION_STOP) || ((pos = tb_next()) < 0)) { return -1; } tb_control->entry[pos].ts = os_timeStampUs(NULL); tb_control->entry[pos].loc= loc; tb_control->entry[pos].p1 = p1; tb_control->entry[pos].p2 = p2; return pos; }
/*********************************************************************** * txCtrlParams_setAdmissionCtrlParams *********************************************************************** DESCRIPTION: This function is called for add/delete a tspec in order to update parameters. INPUT: hTxCtrl - handale to the ts data object acId - the AC of the tspec mediumTime - tha alocated medium time for this UP minimumPHYRate - the min phy rate to send a packet of this UP admFlag - indicate if the its addition or deletion of tspec OUTPUT: None RETURN: void ************************************************************************/ TI_STATUS txCtrlParams_setAdmissionCtrlParams(TI_HANDLE hTxCtrl, TI_UINT8 acId, TI_UINT16 mediumTime, TI_UINT32 minimumPHYRate, TI_BOOL admFlag) { txCtrl_t *pTxCtrl = (txCtrl_t *)hTxCtrl; TI_UINT32 i; if(admFlag == TI_TRUE) { pTxCtrl->tokenCalcParams[acId].allocatedMediumTime = mediumTime; pTxCtrl->tokenCalcParams[acId].tokens = mediumTime; pTxCtrl->tokenCalcParams[acId].unusedTokensReminder = 0; pTxCtrl->tokenCalcParams[acId].usedTokensReminder = 0; pTxCtrl->tokenCalcParams[acId].lastCalcTimeStamp = os_timeStampUs(pTxCtrl->hOs); pTxCtrl->tokenCalcParams[acId].timeDiffMinThreshold = (1000000/mediumTime); /* tspec added */ pTxCtrl->mediumTime[acId] = mediumTime; pTxCtrl->admissionState[acId] = AC_ADMITTED; pTxCtrl->useAdmissionAlgo[acId] = TI_TRUE; pTxCtrl->lastCreditCalcTimeStamp[acId] = os_timeStampMs(pTxCtrl->hOs); pTxCtrl->credit[acId] = mediumTime; } else { pTxCtrl->tokenCalcParams[acId].allocatedMediumTime = 0; pTxCtrl->tokenCalcParams[acId].tokens = 0; pTxCtrl->tokenCalcParams[acId].unusedTokensReminder = 0; pTxCtrl->tokenCalcParams[acId].usedTokensReminder = 0; pTxCtrl->tokenCalcParams[acId].timeDiffMinThreshold = 0; /* tspaec deleted */ pTxCtrl->mediumTime[acId] = 0; pTxCtrl->admissionState[acId] = AC_NOT_ADMITTED; pTxCtrl->useAdmissionAlgo[acId] = TI_FALSE; pTxCtrl->lastCreditCalcTimeStamp[acId] = 0; pTxCtrl->credit[acId] = 0; } /* Update the Tx queues mapping after admission change. */ txCtrl_UpdateQueuesMapping (hTxCtrl); /* If the timer was not enabled in registry than we will never set it */ if (pTxCtrl->bCreditCalcTimerEnabled) { /* enable disable credit calculation timer */ for (i = 0; i < MAX_NUM_OF_AC; i++) { if (pTxCtrl->useAdmissionAlgo[i]) { if (!pTxCtrl->bCreditCalcTimerRunning) { pTxCtrl->bCreditCalcTimerRunning = TI_TRUE; tmr_StartTimer (pTxCtrl->hCreditTimer, calcCreditFromTimer, (TI_HANDLE)pTxCtrl, pTxCtrl->creditCalculationTimeout, TI_TRUE); } return TI_OK; } } /* in all queues useAdmissionAlgo is not TRUE, so stop timer if running */ if (pTxCtrl->bCreditCalcTimerRunning) { tmr_StopTimer (pTxCtrl->hCreditTimer); pTxCtrl->bCreditCalcTimerRunning = TI_FALSE; } } return TI_OK; }