diff options
Diffstat (limited to 'wl1271/platforms/os/linux/src/osapi.c')
-rw-r--r-- | wl1271/platforms/os/linux/src/osapi.c | 939 |
1 files changed, 0 insertions, 939 deletions
diff --git a/wl1271/platforms/os/linux/src/osapi.c b/wl1271/platforms/os/linux/src/osapi.c deleted file mode 100644 index a40da482..00000000 --- a/wl1271/platforms/os/linux/src/osapi.c +++ /dev/null @@ -1,939 +0,0 @@ -/* - * osapi.c - * - * Copyright(c) 1998 - 2010 Texas Instruments. All rights reserved. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * * Neither the name Texas Instruments nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - - -/* - * src/osapi.c - * - */ -#include "tidef.h" -#include "arch_ti.h" - -#include <linux/stddef.h> -#include <linux/string.h> -#include <linux/time.h> -#include <linux/timer.h> -#include <linux/module.h> -#include <linux/kernel.h> -#include <linux/netdevice.h> -#include <linux/completion.h> -#include <linux/etherdevice.h> -#include <linux/vmalloc.h> -#include <linux/string.h> -#include <linux/delay.h> -#include <linux/time.h> -#include <linux/list.h> -#include <stdarg.h> -#include <asm/io.h> -#include "RxBuf_linux.h" - -/*#include "debug_module.h"*/ -#include "host_platform.h" -#include "WlanDrvIf.h" -#include "bmtrace_api.h" -#include "TI_IPC_Api.h" -#include "802_11Defs.h" -#include "osApi.h" -#include "txMgmtQueue_Api.h" -#include "EvHandler.h" - -#ifdef ESTA_TIMER_DEBUG -#define esta_timer_log(fmt,args...) printk(fmt, ## args) -#else -#define esta_timer_log(fmt,args...) -#endif - -#define FRAG_SIZE 200 - -typedef struct timer_list TOsTimer; - -TI_BOOL bRedirectOutputToLogger = TI_FALSE; -TI_BOOL use_debug_module = TI_FALSE; - -/**************************************************************************************** - * * - * OS Report API * - * * - ****************************************************************************************/ -static void SendLoggerData (TI_HANDLE OsContext, TI_UINT8 *pMsg, TI_UINT16 len) -{ - TWlanDrvIfObj *drv = (TWlanDrvIfObj *)OsContext; - - if (len > 0) - { - EvHandlerSendEvent(drv->tCommon.hEvHandler, IPC_EVENT_LOGGER, pMsg, len); - } -} - -void os_setDebugOutputToLogger(TI_BOOL value) -{ - bRedirectOutputToLogger = value; -} -/**************************************************************************************** - * os_setDebugMode() - **************************************************************************************** -DESCRIPTION: Set the Debug Mode - -INPUT: - -RETURN: None - -NOTES: -*****************************************************************************************/ -void os_setDebugMode(TI_BOOL enable) -{ - use_debug_module = enable; -} - - -/**************************************************************************************** - * 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( 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); -} - -/**************************************************************************************** - * * - * OS TIMER API * - * * - ****************************************************************************************/ - -/**************************************************************************************** - * os_timerCreate() - **************************************************************************************** -DESCRIPTION: This function creates and initializes an OS timer object associated with a - caller's pRoutine function. - -ARGUMENTS: OsContext - The OS handle - pRoutine - The user callback function - hFuncHandle - The user callback handle - -RETURN: A handle of the created OS timer. - -NOTES: 1) The user's callback is called directly from OS timer context when expired. - 2) In some OSs, it may be needed to use an intermediate callback in the - osapi layer (use os_timerHandlr for that). - -*****************************************************************************************/ -TI_HANDLE os_timerCreate (TI_HANDLE OsContext, fTimerFunction pRoutine, TI_HANDLE hFuncHandle) -{ - TOsTimer *pOsTimer = os_memoryAlloc (OsContext, sizeof(TOsTimer)); - - if(pOsTimer) - { - init_timer (pOsTimer); - pOsTimer->function = (void *)pRoutine; - pOsTimer->data = (int)hFuncHandle; - } - - return (TI_HANDLE)pOsTimer; -} - - -/**************************************************************************************** - * os_timerDestroy() - **************************************************************************************** -DESCRIPTION: This function destroys the OS timer object. - -ARGUMENTS: - -RETURN: - -NOTES: -*****************************************************************************************/ -void os_timerDestroy (TI_HANDLE OsContext, TI_HANDLE TimerHandle) -{ - os_timerStop (OsContext, TimerHandle); - os_memoryFree (OsContext, TimerHandle, sizeof(TOsTimer)); -} - - -/**************************************************************************************** - * os_timerStart() - **************************************************************************************** -DESCRIPTION: This function start the timer object. - -ARGUMENTS: - -RETURN: - -NOTES: -*****************************************************************************************/ -void os_timerStart (TI_HANDLE OsContext, TI_HANDLE TimerHandle, TI_UINT32 DelayMs) -{ - TI_UINT32 jiffie_cnt = msecs_to_jiffies (DelayMs); - - mod_timer ((TOsTimer *)TimerHandle, jiffies + jiffie_cnt); -} - - -/**************************************************************************************** - * os_stopTimer() - **************************************************************************************** -DESCRIPTION: This function stop the timer object. - -ARGUMENTS: - -RETURN: - -NOTES: -*****************************************************************************************/ -void os_timerStop (TI_HANDLE OsContext, TI_HANDLE TimerHandle) -{ - del_timer_sync((TOsTimer *)TimerHandle); -} - - -/**************************************************************************************** - * os_periodicIntrTimerStart() - **************************************************************************************** -DESCRIPTION: This function starts the periodic interrupt mechanism. This mode is used - when interrupts that usually received from the Fw is now masked, and we are - checking for any need of Fw handling in time periods. - -ARGUMENTS: - -RETURN: - -NOTES: Power level of the CHIP should be always awake in this mode (no ELP) -*****************************************************************************************/ -#ifdef PRIODIC_INTERRUPT -void os_periodicIntrTimerStart (TI_HANDLE OsContext) -{ - TWlanDrvIfObj *drv = (TWlanDrvIfObj *)OsContext; - - mod_timer (drv->hPollTimer, jiffies + TIWLAN_IRQ_POLL_INTERVAL); -} -#endif - - -/**************************************************************************************** - * os_timeStampMs() - **************************************************************************************** -DESCRIPTION: This function returns the number of milliseconds that have elapsed since - the system was booted. - -ARGUMENTS: OsContext - our adapter context. - -RETURN: - -NOTES: -*****************************************************************************************/ -TI_UINT32 os_timeStampMs (TI_HANDLE OsContext) -{ - struct timeval tv; - do_gettimeofday(&tv); - return tv.tv_sec*1000 + tv.tv_usec/1000; -} - - -/**************************************************************************************** - * os_timeStampUs() - **************************************************************************************** -DESCRIPTION: This function returns the number of microseconds that have elapsed since - the system was booted. - -ARGUMENTS: OsContext - our adapter context. - Note that sometimes this function will be called with NULL(!!!) as argument! - -RETURN: - -NOTES: -*****************************************************************************************/ -TI_UINT32 os_timeStampUs (TI_HANDLE OsContext) -{ - struct timeval tv; - do_gettimeofday(&tv); - return tv.tv_sec*1000000 + tv.tv_usec; -} - - -/**************************************************************************************** - * os_StalluSec() - **************************************************************************************** -DESCRIPTION: This function make delay in microseconds. - -ARGUMENTS: OsContext - our adapter context. - uSec - delay time in microseconds - -RETURN: - -NOTES: -*****************************************************************************************/ -void os_StalluSec (TI_HANDLE OsContext, TI_UINT32 uSec) -{ - udelay (uSec); -} - - -/**************************************************************************************** - * * - * Protection services API * - * * - **************************************************************************************** - * OS protection is implemented as spin_lock_irqsave and spin_unlock_irqrestore * - ****************************************************************************************/ - - -/**************************************************************************************** - * os_protectCreate() - **************************************************************************************** -DESCRIPTION: - -ARGUMENTS: OsContext - our adapter context. - -RETURN: A handle of the created mutex/spinlock. - TI_HANDLE_INVALID if there is insufficient memory available or problems - initializing the mutex - -NOTES: -*****************************************************************************************/ -TI_HANDLE os_protectCreate (TI_HANDLE OsContext) -{ - return NULL; -} - - -/**************************************************************************************** - * os_protectDestroy() - **************************************************************************************** -DESCRIPTION: - -ARGUMENTS: OsContext - our adapter context. - -RETURN: None - This had better work since there is not a return value to the user - -NOTES: -*****************************************************************************************/ -void os_protectDestroy (TI_HANDLE OsContext, TI_HANDLE ProtectCtx) -{ -} - - -/**************************************************************************************** - * os_protectLock() - **************************************************************************************** -DESCRIPTION: - -ARGUMENTS: OsContext - our adapter context. - -RETURN: None - This had better work since there is not a return value to the user - -NOTES: -*****************************************************************************************/ -void os_protectLock (TI_HANDLE OsContext, TI_HANDLE ProtectContext) -{ - TWlanDrvIfObj *drv = (TWlanDrvIfObj *)OsContext; - - spin_lock_irqsave (&drv->lock, drv->flags); -} - - -/**************************************************************************************** - * os_protectUnlock() - **************************************************************************************** -DESCRIPTION: - -ARGUMENTS: OsContext - our adapter context. - -RETURN: None - This had better work since there is not a return value to the user - -NOTES: -*****************************************************************************************/ -void os_protectUnlock (TI_HANDLE OsContext, TI_HANDLE ProtectContext) -{ - TWlanDrvIfObj *drv = (TWlanDrvIfObj *)OsContext; - - spin_unlock_irqrestore (&drv->lock, drv->flags); -} -/**************************************************************************************** - * os_receivePacket() - **************************************************************************************** -DESCRIPTION: - -ARGUMENTS: - -RETURN: - -NOTES: -*****************************************************************************************/ -TI_BOOL os_receivePacket(TI_HANDLE OsContext, void *pRxDesc ,void *pPacket, TI_UINT16 Length) -{ - TWlanDrvIfObj *drv = (TWlanDrvIfObj *)OsContext; - unsigned char *pdata = (unsigned char *)((TI_UINT32)pPacket & ~(TI_UINT32)0x3); - rx_head_t *rx_head = (rx_head_t *)(pdata - WSPI_PAD_BYTES - RX_HEAD_LEN_ALIGNED); - struct sk_buff *skb = rx_head->skb; - -#ifdef TI_DBG - if ((TI_UINT32)pPacket & 0x3) - { - if ((TI_UINT32)pPacket - (TI_UINT32)skb->data != 2) - { - printk("os_receivePacket() address error skb=0x%x skb->data=0x%x pPacket=0x%x !!!\n",(int)skb, (int)skb->data, (int)pPacket); - } - } - else - { - if ((TI_UINT32)skb->data != (TI_UINT32)pPacket) - { - printk("os_receivePacket() address error skb=0x%x skb->data=0x%x pPacket=0x%x !!!\n",(int)skb, (int)skb->data, (int)pPacket); - } - } - if (Length != RX_ETH_PKT_LEN(pPacket)) - { - printk("os_receivePacket() Length=%d != RX_ETH_PKT_LEN(pPacket)=%d!!!\n",(int)Length, RX_ETH_PKT_LEN(pPacket)); - } - -#endif -/* - printk("-->> os_receivePacket() pPacket=0x%x Length=%d skb=0x%x skb->data=0x%x skb->head=0x%x skb->len=%d\n", - (int)pPacket, (int)Length, (int)skb, (int)skb->data, (int)skb->head, (int)skb->len); -*/ - /* Use skb_reserve, it updates both skb->data and skb->tail. */ - skb->data = RX_ETH_PKT_DATA(pPacket); - skb->tail = skb->data; - skb_put(skb, RX_ETH_PKT_LEN(pPacket)); -/* - printk("-->> os_receivePacket() skb=0x%x skb->data=0x%x skb->head=0x%x skb->len=%d\n", - (int)skb, (int)skb->data, (int)skb->head, (int)skb->len); -*/ - ti_nodprintf(TIWLAN_LOG_INFO, "os_receivePacket - Received EAPOL len-%d\n", WBUF_LEN(pWbuf)); - - skb->dev = drv->netdev; - skb->protocol = eth_type_trans(skb, drv->netdev); - skb->ip_summed = CHECKSUM_NONE; - - drv->stats.rx_packets++; - drv->stats.rx_bytes += skb->len; - - /* Send the skb to the TCP stack. - * it responsibly of the Linux kernel to free the skb - */ - { - CL_TRACE_START_L1(); - - os_wake_lock_timeout_enable(drv); - - netif_rx_ni(skb); - - /* Note: Don't change this trace (needed to exclude OS processing from Rx CPU utilization) */ - CL_TRACE_END_L1("tiwlan_drv.ko", "OS", "RX", ""); - } - - return TI_TRUE; -} - -/*----------------------------------------------------------------------------- - -Routine Name: os_timerHandlr - -Routine Description: - - Just a place holder for timer expiration handling in other OSs. - In Linux, user callback is called directly on OS timer expiry. - -Arguments: parm - timer object handle - -Return Value: None. - -Notes: - ------------------------------------------------------------------------------*/ -void os_timerHandlr(unsigned long parm) -{ - /* Not needed in Linux (user callback is called directly on OS timer expiry). */ -} - - -/*----------------------------------------------------------------------------- -Routine Name: os_connectionStatus - -Routine Description: - -The eSTA-DK will call this API so the OS stack is aware that the -WLAN layer is ready to function. - -Arguments: -cStatus = 1; WLAN in ready for network packets -cStatus = 0; WLAN in not ready for network packets - -Return Value: None ------------------------------------------------------------------------------*/ -TI_INT32 os_IndicateEvent (TI_HANDLE OsContext, IPC_EV_DATA* pData) -{ - IPC_EVENT_PARAMS *pInParam = &pData->EvParams; - TWlanDrvIfObj *drv = (TWlanDrvIfObj *)OsContext; - /*TI_UINT8 AuthBuf[sizeof(TI_UINT32) + sizeof(OS_802_11_AUTHENTICATION_REQUEST)];*/ - - ti_nodprintf(TIWLAN_LOG_INFO, "\n os_ConnectionStatus Event 0x%08x \n", CsStatus->Event); - - switch(pInParam->uEventType) - { - case IPC_EVENT_ASSOCIATED: - if (drv->netdev != NULL) - netif_carrier_on(drv->netdev); - break; - - case IPC_EVENT_DISASSOCIATED: - if (drv->netdev != NULL) - netif_carrier_off(drv->netdev); - break; - - case IPC_EVENT_LINK_SPEED: - drv->tCommon.uLinkSpeed = (*(TI_UINT32*)pData->uBuffer * 10000) / 2; - ti_nodprintf(TIWLAN_LOG_INFO, "\n Link Speed = 0x%08x \n",drv->tCommon.uLinkSpeed); - break; - } - - return TI_OK; -} - - - -/******************************************************************************/ - -void os_disableIrq (TI_HANDLE OsContext) -{ - TWlanDrvIfObj *drv = (TWlanDrvIfObj *)OsContext; - disable_irq (drv->irq); -} - -void os_enableIrq (TI_HANDLE OsContext) -{ - TWlanDrvIfObj *drv = (TWlanDrvIfObj *)OsContext; - enable_irq (drv->irq); -} - -/*----------------------------------------------------------------------------- -Routine Name: os_InterruptServiced - -Routine Description: Called when IRQ line is not asserted any more - (i.e. we can enable IRQ in Level sensitive platform) - -Arguments: OsContext - handle to OS context - -Return Value: none ------------------------------------------------------------------------------*/ -void os_InterruptServiced (TI_HANDLE OsContext) -{ - /* To be implemented with Level IRQ */ -} - -/*----------------------------------------------------------------------------- -Routine Name: os_wake_lock_timeout - -Routine Description: Called to prevent system from suspend for 1 sec - -Arguments: OsContext - handle to OS context - -Return Value: packet counter ------------------------------------------------------------------------------*/ -int os_wake_lock_timeout (TI_HANDLE OsContext) -{ - TWlanDrvIfObj *drv = (TWlanDrvIfObj *)OsContext; - int ret = 0; - unsigned long flags; - - if (drv) { - spin_lock_irqsave(&drv->lock, flags); - ret = drv->wl_packet; - if (drv->wl_packet) { - drv->wl_packet = 0; -#ifdef CONFIG_HAS_WAKELOCK - wake_lock_timeout(&drv->wl_rxwake, HZ); -#endif - } - spin_unlock_irqrestore(&drv->lock, flags); - } - /* printk("%s: %d\n", __func__, ret); */ - return ret; -} - -/*----------------------------------------------------------------------------- -Routine Name: os_wake_lock_timeout_enable - -Routine Description: Called to set flag for suspend prevention for some time - -Arguments: OsContext - handle to OS context - -Return Value: packet counter ------------------------------------------------------------------------------*/ -int os_wake_lock_timeout_enable (TI_HANDLE OsContext) -{ - TWlanDrvIfObj *drv = (TWlanDrvIfObj *)OsContext; - unsigned long flags; - int ret = 0; - - if (drv) { - spin_lock_irqsave(&drv->lock, flags); - ret = drv->wl_packet = 1; - spin_unlock_irqrestore(&drv->lock, flags); - } - return ret; -} - -/*----------------------------------------------------------------------------- -Routine Name: os_wake_lock - -Routine Description: Called to prevent system from suspend - -Arguments: OsContext - handle to OS context - -Return Value: wake_lock counter ------------------------------------------------------------------------------*/ -int os_wake_lock (TI_HANDLE OsContext) -{ - TWlanDrvIfObj *drv = (TWlanDrvIfObj *)OsContext; - int ret = 0; - unsigned long flags; - - if (drv) { - spin_lock_irqsave(&drv->lock, flags); -#ifdef CONFIG_HAS_WAKELOCK - if (!drv->wl_count) - wake_lock(&drv->wl_wifi); -#endif - drv->wl_count++; - ret = drv->wl_count; - spin_unlock_irqrestore(&drv->lock, flags); - } - /* printk("%s: %d\n", __func__, ret); */ - return ret; -} - -/*----------------------------------------------------------------------------- -Routine Name: os_wake_unlock - -Routine Description: Called to allow system to suspend - -Arguments: OsContext - handle to OS context - -Return Value: wake_lock counter ------------------------------------------------------------------------------*/ -int os_wake_unlock (TI_HANDLE OsContext) -{ - TWlanDrvIfObj *drv = (TWlanDrvIfObj *)OsContext; - int ret = 0; - unsigned long flags; - - if (drv) { - spin_lock_irqsave(&drv->lock, flags); - if (drv->wl_count) { - drv->wl_count--; -#ifdef CONFIG_HAS_WAKELOCK - if (!drv->wl_count) - wake_unlock(&drv->wl_wifi); -#endif - ret = drv->wl_count; - } - spin_unlock_irqrestore(&drv->lock, flags); - } - /* printk("%s: %d\n", __func__, ret); */ - return ret; -} - -/*----------------------------------------------------------------------------- -Routine Name: os_RequestSchedule - -Routine Description: - -Arguments: - -Return Value: TI_OK ------------------------------------------------------------------------------*/ -int os_RequestSchedule (TI_HANDLE OsContext) -{ - TWlanDrvIfObj *drv = (TWlanDrvIfObj *)OsContext; - - /* Note: The performance trace below doesn't inclose the schedule - * itself because the rescheduling can occur immediately and call - * os_RequestSchedule again which will confuse the trace tools */ - CL_TRACE_START_L3(); - CL_TRACE_END_L3("tiwlan_drv.ko", "OS", "TASK", ""); - - if( !queue_work(drv->tiwlan_wq, &drv->tWork) ) { - /* printk("%s: Fail\n",__func__); */ - return TI_NOK; - } - - return TI_OK; -} - - -/*----------------------------------------------------------------------------- -Routine Name: os_SignalObjectCreate - -Routine Description: - -Arguments: - -Return Value: TI_OK ------------------------------------------------------------------------------*/ -void *os_SignalObjectCreate (TI_HANDLE OsContext) -{ - struct completion *myPtr; - myPtr = os_memoryAlloc(OsContext, sizeof(struct completion)); - if (myPtr) - init_completion (myPtr); - return (myPtr); -} - - -/*----------------------------------------------------------------------------- -Routine Name: os_SignalObjectWait - -Routine Description: - -Arguments: - -Return Value: TI_OK ------------------------------------------------------------------------------*/ -int os_SignalObjectWait (TI_HANDLE OsContext, void *signalObject) -{ - if (!signalObject) - return TI_NOK; - if (!wait_for_completion_timeout((struct completion *)signalObject, - msecs_to_jiffies(10000))) { - printk("tiwlan: 10 sec %s timeout\n", __func__); - } - return TI_OK; -} - - -/*----------------------------------------------------------------------------- -Routine Name: os_SignalObjectSet - -Routine Description: - -Arguments: - -Return Value: TI_OK ------------------------------------------------------------------------------*/ -int os_SignalObjectSet (TI_HANDLE OsContext, void *signalObject) -{ - if (!signalObject) - return TI_NOK; - complete ((struct completion *)signalObject); - return TI_OK; -} - - -/*----------------------------------------------------------------------------- -Routine Name: os_SignalObjectFree - -Routine Description: - -Arguments: - -Return Value: TI_OK ------------------------------------------------------------------------------*/ -int os_SignalObjectFree (TI_HANDLE OsContext, void *signalObject) -{ - if (!signalObject) - return TI_NOK; - os_memoryFree(OsContext, signalObject, sizeof(struct completion)); - return TI_OK; -} - - -/** - * \fn os_Trace - * \brief Prepare and send trace message to the logger. - * - * \param OsContext - The OS handle - * \param uLevel - Severity level of the trace message - * \param uFileId - Source file ID of the trace message - * \param uLineNum - Line number of the trace message - * \param uParamsNum - Number of parameters in the trace message - * \param ... - The trace message parameters - * - * \return void - */ -void os_Trace (TI_HANDLE OsContext, TI_UINT32 uLevel, TI_UINT32 uFileId, TI_UINT32 uLineNum, TI_UINT32 uParamsNum, ...) -{ - TI_UINT32 index; - TI_UINT32 uParam; - TI_UINT32 uMaxParamValue = 0; - TI_UINT32 uMsgLen = TRACE_MSG_MIN_LENGTH; - TI_UINT8 aMsg[TRACE_MSG_MAX_LENGTH] = {0}; - TTraceMsg *pMsgHdr = (TTraceMsg *)&aMsg[0]; - TI_UINT8 *pMsgData = &aMsg[0] + sizeof(TTraceMsg); - va_list list; - - if (!bRedirectOutputToLogger) - { - return; - } - - if (uParamsNum > TRACE_MSG_MAX_PARAMS) - { - uParamsNum = TRACE_MSG_MAX_PARAMS; - } - - /* sync on the parameters */ - va_start(list, uParamsNum); - - /* find the longest parameter */ - for (index = 0; index < uParamsNum; index++) - { - /* get parameter from the stack */ - uParam = va_arg (list, TI_UINT32); - - /* save the longest parameter at variable 'uMaxParamValue' */ - if (uParam > uMaxParamValue) - { - uMaxParamValue = uParam; - } - - /* 32 bit parameter is the longest possible - get out of the loop */ - if (uMaxParamValue > UINT16_MAX_VAL) - { - break; - } - } - - /* Set msg length and format according to the biggest parameter value (8/16/32 bits) */ - if (uMaxParamValue > UINT16_MAX_VAL) - { - pMsgHdr->uFormat = TRACE_FORMAT_32_BITS_PARAMS; - uMsgLen += uParamsNum * sizeof(TI_UINT32); - } - else if (uMaxParamValue > UINT8_MAX_VAL) - { - pMsgHdr->uFormat = TRACE_FORMAT_16_BITS_PARAMS; - uMsgLen += uParamsNum * sizeof(TI_UINT16); - } - else - { - pMsgHdr->uFormat = TRACE_FORMAT_8_BITS_PARAMS; - uMsgLen += uParamsNum; - } - - /* Fill all other header information */ - pMsgHdr->uLevel = (TI_UINT8)uLevel; - pMsgHdr->uParamsNum = (TI_UINT8)uParamsNum; - pMsgHdr->uFileId = (TI_UINT16)uFileId; - pMsgHdr->uLineNum = (TI_UINT16)uLineNum; - - /* re-sync on the parameters */ - va_start(list, uParamsNum); - - /* add the parameters */ - for (index = 0; index < uParamsNum; index++) - { - /* get parameter from the stack */ - uParam = va_arg(list, TI_UINT32); - - /* insert the parameter and increment msg pointer */ - switch(pMsgHdr->uFormat) - { - case TRACE_FORMAT_8_BITS_PARAMS: - INSERT_BYTE(pMsgData, uParam); - break; - - case TRACE_FORMAT_16_BITS_PARAMS: - INSERT_2_BYTES(pMsgData, uParam); - break; - - case TRACE_FORMAT_32_BITS_PARAMS: - INSERT_4_BYTES(pMsgData, uParam); - break; - - default: - va_end(list); - return; - } - } - - va_end(list); - - /* Send the trace message to the logger */ - SendLoggerData(OsContext, aMsg, (TI_UINT16)uMsgLen); -} - -/*--------------------------------------------------------------------------------------*/ - -/** - * \fn os_SetDrvThreadPriority - * \brief Called upon init to set WLAN driver thread priority. - * Currently not supported in Linux. - * - * \param OsContext - The OS handle - * \param uWlanDrvThreadPriority - The WLAN driver thread priority - * \return - */ -void os_SetDrvThreadPriority (TI_HANDLE OsContext, TI_UINT32 uWlanDrvThreadPriority) -{ -} |