diff options
| author | John Brewer <lycanrom@hotmail.com> | 2014-08-20 19:59:13 -0400 |
|---|---|---|
| committer | John Brewer <lycanrom@hotmail.com> | 2014-08-20 19:59:13 -0400 |
| commit | 539bc3ee1ac57cc7afa5d8296c4213ed6d8ed2af (patch) | |
| tree | 75a5cfa2cfffc7652264bfe70a04d1839688c30c | |
| parent | ad2b56a24595b9fa3055d99d2c4251f8d02d91b6 (diff) | |
| parent | 80ee8a993886b353ab1ba5f0901344c87118b0cb (diff) | |
Merge remote-tracking branch 'tg/kk4.4' into lycan
156 files changed, 6609 insertions, 11919 deletions
diff --git a/arch/arm/mach-msm/timer.c b/arch/arm/mach-msm/timer.c index 833c4ff8587..b3195418946 100644 --- a/arch/arm/mach-msm/timer.c +++ b/arch/arm/mach-msm/timer.c @@ -87,8 +87,6 @@ static int msm_global_timer; static struct timespec persistent_ts; static u64 persistent_ns; static u64 last_persistent_ns; -static struct timespec suspend_ts; -static u64 cyc_offset; #define NR_TIMERS ARRAY_SIZE(msm_clocks) @@ -944,7 +942,7 @@ static u32 notrace msm_read_sched_clock(void) { struct msm_clock *clock = &msm_clocks[msm_global_timer]; struct clocksource *cs = &clock->clocksource; - return cs->read(NULL) + cyc_offset; + return cs->read(NULL); } int read_current_timer(unsigned long *timer_val) @@ -1035,30 +1033,6 @@ void read_persistent_clock(struct timespec *ts) *ts = *tsp; } -static int msm_timer_suspend(void) -{ - read_persistent_clock(&suspend_ts); - return 0; -} - -static void msm_timer_resume(void) -{ - struct timespec ts; - struct msm_clock *clock = &msm_clocks[msm_global_timer]; - int div = NSEC_PER_SEC / clock->freq; - - read_persistent_clock(&ts); - if (timespec_compare(&ts, &suspend_ts) > 0) { - ts = timespec_sub(ts, suspend_ts); - cyc_offset += (clock->freq * ts.tv_sec) + (ts.tv_nsec / div); - } -} - -static struct syscore_ops msm_timer_syscore_ops = { - .suspend = msm_timer_suspend, - .resume = msm_timer_resume, -}; - static void __init msm_timer_init(void) { int i; @@ -1233,8 +1207,6 @@ static void __init msm_timer_init(void) #ifdef CONFIG_LOCAL_TIMERS local_timer_register(&msm_lt_ops); #endif - - register_syscore_ops(&msm_timer_syscore_ops); } struct sys_timer msm_timer = { diff --git a/drivers/gpu/msm/adreno.c b/drivers/gpu/msm/adreno.c index e9dbcc778e0..fb8eebcdb07 100644 --- a/drivers/gpu/msm/adreno.c +++ b/drivers/gpu/msm/adreno.c @@ -141,7 +141,7 @@ int kgsl_ft_report_pos; /* This set of registers are used for Hang detection * If the values of these registers are same after - * KGSL_TIMEOUT_PART time, GPU hang is reported in + * KGSL_TIMEOUT_HANG_DETECT time, GPU hang is reported in * kernel log. * *****ALERT******ALERT********ALERT************* * Order of registers below is important, registers @@ -565,7 +565,7 @@ static irqreturn_t adreno_irq_handler(struct kgsl_device *device) mod_timer_pending(&device->idle_timer, jiffies + device->pwrctrl.interval_timeout); mod_timer_pending(&device->hang_timer, - (jiffies + msecs_to_jiffies(KGSL_TIMEOUT_PART))); + (jiffies + msecs_to_jiffies(KGSL_TIMEOUT_HANG_DETECT))); return result; } @@ -1730,7 +1730,7 @@ static int adreno_start(struct kgsl_device *device) } mod_timer(&device->hang_timer, - (jiffies + msecs_to_jiffies(KGSL_TIMEOUT_PART))); + (jiffies + msecs_to_jiffies(KGSL_TIMEOUT_HANG_DETECT))); device->reset_counter++; @@ -2620,7 +2620,7 @@ adreno_dump_and_exec_ft(struct kgsl_device *device) mod_timer(&device->idle_timer, jiffies + FIRST_TIMEOUT); mod_timer(&device->hang_timer, (jiffies + - msecs_to_jiffies(KGSL_TIMEOUT_PART))); + msecs_to_jiffies(KGSL_TIMEOUT_HANG_DETECT))); } complete_all(&device->ft_gate); dropbox_queue_event_text("gpu_ft_report", kgsl_ft_report, @@ -3049,7 +3049,7 @@ static int adreno_ringbuffer_drain(struct kgsl_device *device, /* * The first time into the loop, wait for 100 msecs and kick wptr again * to ensure that the hardware has updated correctly. After that, kick - * it periodically every KGSL_TIMEOUT_PART msecs until the timeout + * it periodically every KGSL_TIMEOUT_HANG_DETECT msecs until the timeout * expires */ @@ -3061,7 +3061,7 @@ static int adreno_ringbuffer_drain(struct kgsl_device *device, if (adreno_ft_detect(device, regs)) return -ETIMEDOUT; - wait = jiffies + msecs_to_jiffies(KGSL_TIMEOUT_PART); + wait = jiffies + msecs_to_jiffies(KGSL_TIMEOUT_HANG_DETECT); } GSL_RB_GET_READPTR(rb, &rb->rptr); @@ -3096,7 +3096,7 @@ retry: /* now, wait for the GPU to finish its operations */ wait_time = jiffies + msecs_to_jiffies(ADRENO_IDLE_TIMEOUT); - wait_time_part = jiffies + msecs_to_jiffies(KGSL_TIMEOUT_PART); + wait_time_part = jiffies + msecs_to_jiffies(KGSL_TIMEOUT_HANG_DETECT); while (time_before(jiffies, wait_time)) { if (adreno_isidle(device)) @@ -3105,7 +3105,7 @@ retry: /* Dont wait for timeout, detect hang faster. */ if (time_after(jiffies, wait_time_part)) { wait_time_part = jiffies + - msecs_to_jiffies(KGSL_TIMEOUT_PART); + msecs_to_jiffies(KGSL_TIMEOUT_HANG_DETECT); if ((adreno_ft_detect(device, prev_reg_val))) goto err; } @@ -3474,8 +3474,8 @@ unsigned int adreno_ft_detect(struct kgsl_device *device, } /* - * Time interval between hang detection should be KGSL_TIMEOUT_PART - * or more, if next hang detection is requested < KGSL_TIMEOUT_PART + * Time interval between hang detection should be KGSL_TIMEOUT_HANG_DETECT + * or more, if next hang detection is requested < KGSL_TIMEOUT_HANG_DETECT * from the last time do nothing. */ if ((next_hang_detect_time) && @@ -3483,7 +3483,7 @@ unsigned int adreno_ft_detect(struct kgsl_device *device, return 0; else next_hang_detect_time = (jiffies + - msecs_to_jiffies(KGSL_TIMEOUT_PART-1)); + msecs_to_jiffies(KGSL_TIMEOUT_HANG_DETECT)); /* Read the current Hang detect reg values here */ for (i = 0; i < FT_DETECT_REGS_COUNT; i++) { @@ -3555,7 +3555,7 @@ unsigned int adreno_ft_detect(struct kgsl_device *device, if (curr_context != NULL) { - curr_context->ib_gpu_time_used += KGSL_TIMEOUT_PART; + curr_context->ib_gpu_time_used += KGSL_TIMEOUT_HANG_DETECT; KGSL_FT_INFO(device, "Proc %s used GPU Time %d ms on timestamp 0x%X\n", curr_context->pid_name, curr_context->ib_gpu_time_used, diff --git a/drivers/gpu/msm/adreno_a3xx_snapshot.c b/drivers/gpu/msm/adreno_a3xx_snapshot.c index 34cac794447..b939fa00e32 100644..100755 --- a/drivers/gpu/msm/adreno_a3xx_snapshot.c +++ b/drivers/gpu/msm/adreno_a3xx_snapshot.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2012, The Linux Foundation. All rights reserved. +/* Copyright (c) 2012,2014 The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and @@ -443,6 +443,22 @@ void *a3xx_snapshot(struct adreno_device *adreno_dev, void *snapshot, /* Reading these will hang the GPU if it isn't already hung */ if (hang) { + unsigned int reg; + + /* + * Reading the microcode while the CP will is running will + * basically basically move the CP instruction pointer to + * whatever address we read. Big badaboom ensues. Stop the CP + * (if it isn't already stopped) to ensure that we are safe. + * We do this here and not earlier to avoid corrupting the RBBM + * status and CP registers - by the time we get here we don't + * care about the contents of the CP anymore. + */ + + adreno_regread(device, REG_CP_ME_CNTL, ®); + reg |= (1 << 27) | (1 << 28); + adreno_regwrite(device, REG_CP_ME_CNTL, reg); + snapshot = kgsl_snapshot_add_section(device, KGSL_SNAPSHOT_SECTION_DEBUG, snapshot, remain, a3xx_snapshot_cp_pfp_ram, NULL); diff --git a/drivers/gpu/msm/kgsl.c b/drivers/gpu/msm/kgsl.c index 4db11cf8a21..813b8a5e125 100644 --- a/drivers/gpu/msm/kgsl.c +++ b/drivers/gpu/msm/kgsl.c @@ -83,7 +83,7 @@ static struct { * kgsl_hang_check() - Check for GPU hang * data: KGSL device structure * - * This function is called every KGSL_TIMEOUT_PART time when + * This function is called every KGSL_TIMEOUT_HANG_DETECT time when * GPU is active to check for hang. If a hang is detected we * trigger fault tolerance. */ @@ -102,7 +102,7 @@ void kgsl_hang_check(struct work_struct *work) adreno_dump_and_exec_ft(device); mod_timer(&device->hang_timer, - (jiffies + msecs_to_jiffies(KGSL_TIMEOUT_PART))); + (jiffies + msecs_to_jiffies(KGSL_TIMEOUT_HANG_DETECT))); } mutex_unlock(&device->mutex); @@ -115,7 +115,7 @@ void kgsl_hang_check(struct work_struct *work) * This function is called when hang timer expires, in this * function we check if GPU is in active state and queue the * work on device workqueue to check for the hang. We restart - * the timer after KGSL_TIMEOUT_PART time. + * the timer after KGSL_TIMEOUT_HANG_DETECT time. */ void hang_timer(unsigned long data) { diff --git a/drivers/gpu/msm/kgsl_device.h b/drivers/gpu/msm/kgsl_device.h index 4177581a99b..6013e7d0644 100644 --- a/drivers/gpu/msm/kgsl_device.h +++ b/drivers/gpu/msm/kgsl_device.h @@ -28,6 +28,7 @@ #define KGSL_TIMEOUT_DEFAULT 0xFFFFFFFF #define KGSL_TIMEOUT_PART 50 /* 50 msec */ #define KGSL_TIMEOUT_LONG_IB_DETECTION 2000 /* 2 sec*/ +#define KGSL_TIMEOUT_HANG_DETECT 200 /* 200 msec */ #define FIRST_TIMEOUT (HZ / 2) diff --git a/drivers/gpu/msm/kgsl_pwrctrl.c b/drivers/gpu/msm/kgsl_pwrctrl.c index cb7661f760c..faad57856ea 100644 --- a/drivers/gpu/msm/kgsl_pwrctrl.c +++ b/drivers/gpu/msm/kgsl_pwrctrl.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2010-2012, The Linux Foundation. All rights reserved. +/* Copyright (c) 2010-2012,2014 The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and @@ -1274,7 +1274,7 @@ int kgsl_pwrctrl_wake(struct kgsl_device *device) mod_timer(&device->idle_timer, jiffies + device->pwrctrl.interval_timeout); mod_timer(&device->hang_timer, - (jiffies + msecs_to_jiffies(KGSL_TIMEOUT_PART))); + (jiffies + msecs_to_jiffies(KGSL_TIMEOUT_HANG_DETECT))); pm_qos_update_request(&device->pm_qos_req_dma, GPU_SWFI_LATENCY); case KGSL_STATE_ACTIVE: diff --git a/drivers/staging/prima/CORE/DXE/inc/wlan_qct_dxe.h b/drivers/staging/prima/CORE/DXE/inc/wlan_qct_dxe.h index 928f30eacc8..c0529eebcd1 100644 --- a/drivers/staging/prima/CORE/DXE/inc/wlan_qct_dxe.h +++ b/drivers/staging/prima/CORE/DXE/inc/wlan_qct_dxe.h @@ -423,10 +423,9 @@ wpt_uint32 WLANDXE_GetFreeTxDataResNumber @ Parameters displaySnapshot : Display DXE snapshot option - debugFlags : Enable stall detect features - defined by WPAL_DeviceDebugFlags - These features may effect - data performance. + enableStallDetect : Enable stall detect feature + This feature will take effect to data performance + Not integrate till fully verification @ Return NONE @@ -435,7 +434,7 @@ wpt_uint32 WLANDXE_GetFreeTxDataResNumber void WLANDXE_ChannelDebug ( wpt_boolean displaySnapshot, - wpt_uint8 debugFlags + wpt_boolean enableStallDetect ); #ifdef WLANDXE_TEST_CHANNEL_ENABLE diff --git a/drivers/staging/prima/CORE/DXE/src/wlan_qct_dxe.c b/drivers/staging/prima/CORE/DXE/src/wlan_qct_dxe.c index cb0c7328a31..99a814a3d32 100644 --- a/drivers/staging/prima/CORE/DXE/src/wlan_qct_dxe.c +++ b/drivers/staging/prima/CORE/DXE/src/wlan_qct_dxe.c @@ -97,20 +97,12 @@ when who what, where, why #define T_WLANDXE_TX_INT_ENABLE_FCOUNT 1 #define T_WLANDXE_MEMDUMP_BYTE_PER_LINE 16 #define T_WLANDXE_MAX_RX_PACKET_WAIT 6000 -#define T_WLANDXE_SSR_TIMEOUT 5000 #define T_WLANDXE_PERIODIC_HEALTH_M_TIME 2500 #define T_WLANDXE_MAX_HW_ACCESS_WAIT 2000 #define WLANDXE_MAX_REAPED_RX_FRAMES 512 #define WLANPAL_RX_INTERRUPT_PRO_MASK 0x20 #define WLANDXE_RX_INTERRUPT_PRO_UNMASK 0x5F - -/* 1msec busy wait in case CSR is not valid */ -#define WLANDXE_CSR_NEXT_READ_WAIT 1000 -/* CSR max retry count */ -#define WLANDXE_CSR_MAX_READ_COUNT 30 - - /* This is temporary fot the compile * WDI will release official version * This must be removed */ @@ -156,11 +148,6 @@ static wpt_status dxeNotifySmsm wpt_boolean ringEmpty ); -static void dxeStartSSRTimer -( - WLANDXE_CtrlBlkType *dxeCtxt -); - /*------------------------------------------------------------------------- * Local Function *-------------------------------------------------------------------------*/ @@ -474,79 +461,15 @@ void dxeChannelAllDescDump ===========================================================================*/ void dxeErrChannelDebug ( - WLANDXE_ChannelCBType *channelCb, - wpt_uint32 chStatusReg + WLANDXE_ChannelCBType *channelCb ) { - wpt_uint32 chLDescReg, channelLoop; - WLANDXE_DescCtrlBlkType *targetCtrlBlk; dxeChannelMonitor("INT_ERR", channelCb); dxeDescriptorDump(channelCb, channelCb->headCtrlBlk->linkedDesc, 0); dxeChannelRegisterDump(channelCb, "INT_ERR"); dxeChannelAllDescDump(channelCb, channelCb->channelType); - switch ((chStatusReg & WLANDXE_CH_STAT_ERR_CODE_MASK) >> - WLANDXE_CH_STAT_ERR_CODE_OFFSET) - { - - case WLANDXE_ERROR_PRG_INV_B2H_SRC_QID: - case WLANDXE_ERROR_PRG_INV_B2H_DST_QID: - case WLANDXE_ERROR_PRG_INV_B2H_SRC_IDX: - case WLANDXE_ERROR_PRG_INV_H2B_SRC_QID: - case WLANDXE_ERROR_PRG_INV_H2B_DST_QID: - case WLANDXE_ERROR_PRG_INV_H2B_DST_IDX: - { - dxeNotifySmsm(eWLAN_PAL_FALSE, eWLAN_PAL_TRUE); - dxeNotifySmsm(eWLAN_PAL_TRUE, eWLAN_PAL_FALSE); - wpalSleep(10); - - if(channelCb->channelType > WDTS_CHANNEL_RX_HIGH_PRI) - { - HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL, - "%s: Invalid Channel", __func__); - break; - } - - wpalReadRegister(channelCb->channelRegister.chDXELstDesclRegAddr, &chLDescReg); - - targetCtrlBlk = channelCb->headCtrlBlk; - - for(channelLoop = 0; channelLoop < channelCb->numDesc; channelLoop++) - { - if (targetCtrlBlk->linkedDescPhyAddr == chLDescReg) - { - HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL, - "%11s :CHx_DESCL: desc ctrl 0x%x, src 0x%x, dst 0x%x, next 0x%x", - channelType[channelCb->channelType], - targetCtrlBlk->linkedDesc->descCtrl.ctrl, - targetCtrlBlk->linkedDesc->dxedesc.dxe_short_desc.srcMemAddrL, - targetCtrlBlk->linkedDesc->dxedesc.dxe_short_desc.dstMemAddrL, - targetCtrlBlk->linkedDesc->dxedesc.dxe_short_desc.phyNextL); - - targetCtrlBlk = (WLANDXE_DescCtrlBlkType *)targetCtrlBlk->nextCtrlBlk; - - HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL, - "%11s :Next Desc: desc ctrl 0x%x, src 0x%x, dst 0x%x, next 0x%x", - channelType[channelCb->channelType], - targetCtrlBlk->linkedDesc->descCtrl.ctrl, - targetCtrlBlk->linkedDesc->dxedesc.dxe_short_desc.srcMemAddrL, - targetCtrlBlk->linkedDesc->dxedesc.dxe_short_desc.dstMemAddrL, - targetCtrlBlk->linkedDesc->dxedesc.dxe_short_desc.phyNextL); - break; - } - targetCtrlBlk = (WLANDXE_DescCtrlBlkType *)targetCtrlBlk->nextCtrlBlk; - } - break; - } - default: - { - HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL, - "%s: No Debug Inormation", __func__); - break; - } - - } wpalFwDumpReq(17, 0, 0, 0, 0); return; @@ -1185,6 +1108,24 @@ static wpt_status dxeDescAllocAndLink return eWLAN_PAL_STATUS_E_FAULT; } + if((WDTS_CHANNEL_TX_LOW_PRI == channelEntry->channelType) || + (WDTS_CHANNEL_TX_HIGH_PRI == channelEntry->channelType)) + { + currentDesc->descCtrl.ctrl = channelEntry->extraConfig.cw_ctrl_write; + currentDesc->dxedesc.dxe_short_desc.dstMemAddrL = channelEntry->extraConfig.refWQ_swapped; + } + else if((WDTS_CHANNEL_RX_LOW_PRI == channelEntry->channelType) || + (WDTS_CHANNEL_RX_HIGH_PRI == channelEntry->channelType)) + { + currentDesc->descCtrl.ctrl = channelEntry->extraConfig.cw_ctrl_read; + currentDesc->dxedesc.dxe_short_desc.srcMemAddrL = channelEntry->extraConfig.refWQ_swapped; + } + else + { + /* Just in case. H2H Test RX channel, do nothing + * By Definition this must not happen */ + } + currentCtrlBlk->linkedDesc = currentDesc; currentCtrlBlk->linkedDescPhyAddr = (unsigned int)physAddress; /* First descriptor, next none @@ -1239,24 +1180,6 @@ static wpt_status dxeDescAllocAndLink --channelEntry->numFreeDesc; } - if((WDTS_CHANNEL_TX_LOW_PRI == channelEntry->channelType) || - (WDTS_CHANNEL_TX_HIGH_PRI == channelEntry->channelType)) - { - currentDesc->descCtrl.ctrl = channelEntry->extraConfig.cw_ctrl_write; - currentDesc->dxedesc.dxe_short_desc.dstMemAddrL = channelEntry->extraConfig.refWQ_swapped; - } - else if((WDTS_CHANNEL_RX_LOW_PRI == channelEntry->channelType) || - (WDTS_CHANNEL_RX_HIGH_PRI == channelEntry->channelType)) - { - currentDesc->descCtrl.ctrl = channelEntry->extraConfig.cw_ctrl_read; - currentDesc->dxedesc.dxe_short_desc.srcMemAddrL = channelEntry->extraConfig.refWQ_swapped; - } - else - { - /* Just in case. H2H Test RX channel, do nothing - * By Definition this must not happen */ - } - currentCtrlBlk = currentCtrlBlk->nextCtrlBlk; prevDesc = currentDesc; @@ -1355,54 +1278,24 @@ static wpt_status dxeEngineCoreStart { wpt_status status = eWLAN_PAL_STATUS_SUCCESS; wpt_uint32 registerData = 0; - wpt_uint8 readRetry; HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW, "%s Enter", __func__); -#ifdef WCN_PRONTO - /* Read default */ - wpalReadRegister(WLANDXE_CCU_SOFT_RESET, ®isterData); - registerData |= WLANDXE_DMA_CCU_DXE_RESET_MASK; - - /* Make reset */ - wpalWriteRegister(WLANDXE_CCU_SOFT_RESET, registerData); - - /* Clear reset */ - registerData &= ~WLANDXE_DMA_CCU_DXE_RESET_MASK; - wpalWriteRegister(WLANDXE_CCU_SOFT_RESET, registerData); -#else /* START This core init is not needed for the integrated system */ /* Reset First */ registerData = WLANDXE_DMA_CSR_RESET_MASK; wpalWriteRegister(WALNDEX_DMA_CSR_ADDRESS, registerData); -#endif /* WCN_PRONTO */ - for(readRetry = 0; readRetry < WLANDXE_CSR_MAX_READ_COUNT; readRetry++) - { - wpalWriteRegister(WALNDEX_DMA_CSR_ADDRESS, - WLANDXE_CSR_DEFAULT_ENABLE); - wpalReadRegister(WALNDEX_DMA_CSR_ADDRESS, ®isterData); - if(!(registerData & WLANDXE_DMA_CSR_EN_MASK)) - { - HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR, - "%s CSR 0x%x, count %d", - __func__, registerData, readRetry); - /* CSR is not valid value, re-try to write */ - wpalBusyWait(WLANDXE_CSR_NEXT_READ_WAIT); - } - else - { - break; - } - } - if(WLANDXE_CSR_MAX_READ_COUNT == readRetry) - { - /* MAX wait, still cannot write correct value - * Panic device */ - wpalDevicePanic(); - } + registerData = WLANDXE_DMA_CSR_EN_MASK; + registerData |= WLANDXE_DMA_CSR_ECTR_EN_MASK; + registerData |= WLANDXE_DMA_CSR_TSTMP_EN_MASK; + registerData |= WLANDXE_DMA_CSR_H2H_SYNC_EN_MASK; + + registerData = 0x00005c89; + wpalWriteRegister(WALNDEX_DMA_CSR_ADDRESS, + registerData); /* Is This needed? * Not sure, revisit with integrated system */ @@ -1907,8 +1800,8 @@ static wpt_status dxeChannelCleanInt } /*========================================================================== - @ Function Name - dxeRXResourceAvailableTimerExpHandler + @ Function Name + dxeRXResourceAvailableTimerExpHandler @ Description During pre-set timeperiod, if free available RX buffer is not allocated @@ -1927,87 +1820,16 @@ void dxeRXResourceAvailableTimerExpHandler void *usrData ) { - WLANDXE_CtrlBlkType *dxeCtxt = NULL; - - dxeCtxt = (WLANDXE_CtrlBlkType *)usrData; - HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL, "RX Low resource, Durign wait time period %d, RX resource not allocated", T_WLANDXE_MAX_RX_PACKET_WAIT); - - if(0 != dxeCtxt) - dxeCtxt->driverReloadInProcessing = eWLAN_PAL_TRUE; - wpalWlanReload(); - if (NULL != usrData) - dxeStartSSRTimer((WLANDXE_CtrlBlkType *)usrData); - return; } /*========================================================================== @ Function Name - dxeStartSSRTimer - - @ Description - Start the dxeSSRTimer after issuing the FIQ to restart the WCN chip, - this makes sure that if the chip does not respond to the FIQ within - the timeout period the dxeSSRTimer expiration handler will take the - appropriate action. - - @ Parameters - NONE - - @ Return - NONE - -===========================================================================*/ -static void dxeStartSSRTimer -( - WLANDXE_CtrlBlkType *dxeCtxt -) -{ - if(VOS_TIMER_STATE_RUNNING != - wpalTimerGetCurStatus(&dxeCtxt->dxeSSRTimer)) - { - HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN, - "%s: Starting SSR Timer",__func__); - wpalTimerStart(&dxeCtxt->dxeSSRTimer, - T_WLANDXE_SSR_TIMEOUT); - } -} - -/*========================================================================== - @ Function Name - dxeSSRTimerExpHandler - - @ Description - Issue an explicit subsystem restart of the wcnss subsystem if the - WCN chip does not respond to the FIQ within the timeout period - - @ Parameters - v_VOID_t *usrData - - @ Return - NONE - -===========================================================================*/ -void dxeSSRTimerExpHandler -( - void *usrData -) -{ - HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL, - "DXE not shutdown %d ms after FIQ!! Issue SSR", - T_WLANDXE_SSR_TIMEOUT); - wpalRivaSubystemRestart(); - - return; -} - -/*========================================================================== - @ Function Name dxeRXPacketAvailableCB @ Description @@ -2060,18 +1882,13 @@ void dxeRXPacketAvailableCB dxeCtxt->freeRXPacket = freePacket; /* Serialize RX Packet Available message upon RX thread */ - if (NULL == dxeCtxt->rxPktAvailMsg) - { - HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL, - "DXE NULL pkt"); - HDXE_ASSERT(0); - return; - } + HDXE_ASSERT(NULL != dxeCtxt->rxPktAvailMsg); status = wpalPostRxMsg(WDI_GET_PAL_CTX(), dxeCtxt->rxPktAvailMsg); if(eWLAN_PAL_STATUS_SUCCESS != status) { + HDXE_ASSERT(eWLAN_PAL_STATUS_SUCCESS == status); HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL, "dxeRXPacketAvailableCB serialize fail"); } @@ -2125,13 +1942,6 @@ static wpt_status dxeRXFrameSingleBufferAlloc currentDesc = currentCtrlBlock->linkedDesc; - if(currentDesc->descCtrl.valid) - { - HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR, - "This Descriptor is valid, Do not refill"); - return eWLAN_PAL_STATUS_E_EXISTS; - } - /* First check if a packet pointer has already been provided by a previously invoked Rx packet available callback. If so use that packet. */ if(dxeCtxt->rxPalPacketUnavailable && (NULL != dxeCtxt->freeRXPacket)) @@ -2142,8 +1952,8 @@ static wpt_status dxeRXFrameSingleBufferAlloc } else if(!dxeCtxt->rxPalPacketUnavailable) { - /* Allocate platform Packet buffer and OS Frame Buffer at here */ - currentPalPacketBuffer = wpalPacketAlloc(eWLAN_PAL_PKT_TYPE_RX_RAW, + /* Allocate platform Packet buffer and OS Frame Buffer at here */ + currentPalPacketBuffer = wpalPacketAlloc(eWLAN_PAL_PKT_TYPE_RX_RAW, WLANDXE_DEFAULT_RX_OS_BUFFER_SIZE, dxeRXPacketAvailableCB, (void *)dxeCtxt); @@ -2163,7 +1973,7 @@ static wpt_status dxeRXFrameSingleBufferAlloc } } } - + if(NULL == currentPalPacketBuffer) { return eWLAN_PAL_STATUS_E_RESOURCES; @@ -2178,13 +1988,8 @@ static wpt_status dxeRXFrameSingleBufferAlloc status = wpalAllocateShadowRxFrame(currentPalPacketBuffer, &physicalAddressPCIe, &virtualAddressPCIe); - if((0 == physicalAddressPCIe) || (0 = virtualAddressPCIe)) - { - HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_MED, - "RX NULL Shadow Memory"); - HDXE_ASSERT(0); - return eWLAN_PAL_STATUS_E_FAULT; - } + HDXE_ASSERT(0 != physicalAddressPCIe); + HDXE_ASSERT(0 != virtualAddressPCIe); HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_MED, "RX Shadow Memory Va 0x%x, Pa 0x%x", virtualAddressPCIe, physicalAddressPCIe); @@ -2271,20 +2076,13 @@ static wpt_status dxeRXFrameRefillRing channelEntry, currentCtrlBlk); - if((eWLAN_PAL_STATUS_SUCCESS != status) && - (eWLAN_PAL_STATUS_E_EXISTS != status)) + if(eWLAN_PAL_STATUS_SUCCESS != status) { HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN, "dxeRXFrameRefillRing, out of RX buffer pool, break here"); break; } - if(eWLAN_PAL_STATUS_E_EXISTS == status) - { - HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR, - "dxeRXFrameRefillRing, Descriptor Non-Empry"); - } - currentDesc = currentCtrlBlk->linkedDesc; currentDesc->descCtrl.ctrl = channelEntry->extraConfig.cw_ctrl_read; @@ -2303,10 +2101,7 @@ static wpt_status dxeRXFrameRefillRing 1 << channelEntry->assignedDMAChannel); } currentCtrlBlk = currentCtrlBlk->nextCtrlBlk; - if(eWLAN_PAL_STATUS_E_EXISTS != status) - { - --channelEntry->numFreeDesc; - } + --channelEntry->numFreeDesc; } channelEntry->tailCtrlBlk = currentCtrlBlk; @@ -2492,11 +2287,9 @@ static wpt_status dxeRXFrameReady HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN, "dxeRXFrameReady %s RING Wrapped, RX Free Low 0x%x", channelType[channelEntry->channelType], chStat); - /* This is not empty interrupt case - * If handle this as empty interrupt, false SSR might be issued - * Frame count '1' is dummy frame count to avoid SSR */ - channelEntry->numFragmentCurrentChain = 1; - return eWLAN_PAL_STATUS_SUCCESS; + channelEntry->numFragmentCurrentChain = 0; + channelEntry->hitLowResource = eWLAN_PAL_TRUE; + return eWLAN_PAL_STATUS_E_RESOURCES; } currentCtrlBlk = channelEntry->headCtrlBlk; @@ -2577,7 +2370,6 @@ static wpt_status dxeRXFrameReady "RX successive empty interrupt, Could not find invalidated DESC reload driver"); dxeCtxt->driverReloadInProcessing = eWLAN_PAL_TRUE; wpalWlanReload(); - dxeStartSSRTimer(dxeCtxt); } } } @@ -2781,13 +2573,6 @@ void dxeRXEventHandler HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR, "dxeRXEventHandler Pull from RX high channel fail"); } - /* In case FW could not power collapse in IMPS mode - * Next power restore might have empty interrupt - * If IMPS mode has empty interrupt since RX thread race, - * Invalid re-load driver might happen - * To prevent invalid re-load driver, - * IMPS event handler set dummpy frame count */ - channelCb->numFragmentCurrentChain = 1; /* Second low priority */ channelCb = &dxeCtxt->dxeChannel[WDTS_CHANNEL_RX_LOW_PRI]; @@ -2799,8 +2584,6 @@ void dxeRXEventHandler HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR, "dxeRXEventHandler Pull from RX low channel fail"); } - /* LOW Priority CH same above */ - channelCb->numFragmentCurrentChain = 1; /* Interrupt will not enabled at here, it will be enabled at PS mode change */ tempDxeCtrlBlk->rxIntDisabledByIMPS = eWLAN_PAL_TRUE; @@ -2840,11 +2623,10 @@ void dxeRXEventHandler "%11s : 0x%x Error Reported, Reload Driver", channelType[channelCb->channelType], chHighStat); - dxeErrChannelDebug(channelCb, chHighStat); + dxeErrChannelDebug(channelCb); dxeCtxt->driverReloadInProcessing = eWLAN_PAL_TRUE; wpalWlanReload(); - dxeStartSSRTimer(dxeCtxt); } else if((WLANDXE_CH_STAT_INT_DONE_MASK & chHighStat) || (WLANDXE_CH_STAT_INT_ED_MASK & chHighStat)) @@ -2893,11 +2675,10 @@ void dxeRXEventHandler "%11s : 0x%x Error Reported, Reload Driver", channelType[channelCb->channelType], chStat); - dxeErrChannelDebug(channelCb, chStat); + dxeErrChannelDebug(channelCb); dxeCtxt->driverReloadInProcessing = eWLAN_PAL_TRUE; wpalWlanReload(); - dxeStartSSRTimer(dxeCtxt); } else if(WLANDXE_CH_STAT_INT_ED_MASK & chStat) { @@ -2941,11 +2722,10 @@ void dxeRXEventHandler "%11s : 0x%x Error Reported, Reload Driver", channelType[channelCb->channelType], chLowStat); - dxeErrChannelDebug(channelCb, chLowStat); + dxeErrChannelDebug(channelCb); dxeCtxt->driverReloadInProcessing = eWLAN_PAL_TRUE; wpalWlanReload(); - dxeStartSSRTimer(dxeCtxt); } else if(WLANDXE_CH_STAT_INT_ED_MASK & chLowStat) { @@ -2968,7 +2748,9 @@ void dxeRXEventHandler HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO, "RX LOW CH EVNT STAT 0x%x, %d frames handled", chLowStat, channelCb->numFragmentCurrentChain); } - if(eWLAN_PAL_STATUS_SUCCESS != status) + + if((eWLAN_PAL_STATUS_SUCCESS != status) && + (eWLAN_PAL_STATUS_E_RESOURCES != status)) { HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR, "dxeRXEventHandler Handle Frame Ready Fail"); @@ -3053,6 +2835,7 @@ void dxeRXPacketAvailableEventHandler } dxeCtxt = (WLANDXE_CtrlBlkType *)(rxPktAvailMsg->pContext); + /* Available resource allocated * Stop timer not needed */ if(VOS_TIMER_STATE_RUNNING == @@ -3156,18 +2939,12 @@ static void dxeRXISR } /* Serialize RX Ready interrupt upon RX thread */ - if(NULL == dxeCtxt->rxIsrMsg) - { - HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR, - "dxeRXFrameReadyISR NULL message"); - HDXE_ASSERT(0); - return; - } - + HDXE_ASSERT(NULL != dxeCtxt->rxIsrMsg); status = wpalPostRxMsg(WDI_GET_PAL_CTX(), dxeCtxt->rxIsrMsg); if(eWLAN_PAL_STATUS_SUCCESS != status) { + HDXE_ASSERT(eWLAN_PAL_STATUS_SUCCESS == status); HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL, "dxeRXFrameReadyISR interrupt serialize fail"); } @@ -3276,21 +3053,8 @@ static wpt_status dxeTXPushFrame sourcePhysicalAddress = (void *)frameVector.frg[fragCount].pa; xferSize = frameVector.frg[fragCount].size; fragCount++; - if(0 == xferSize) - { - HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR, - "dxeTXPushFrame invalid transfer size"); - - HDXE_ASSERT(0); - return eWLAN_PAL_STATUS_E_FAILURE; - } - if(NULL == sourcePhysicalAddress) - { - HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR, - "dxeTXPushFrame invalid sourcePhysicalAddress"); - HDXE_ASSERT(0); - return eWLAN_PAL_STATUS_E_FAILURE; - } + HDXE_ASSERT(0 != xferSize); + HDXE_ASSERT(NULL != sourcePhysicalAddress); #else status = wpalIteratorNext(&iterator, palPacket, @@ -3655,13 +3419,7 @@ static wpt_status dxeTXCompFrame break; } - if(currentCtrlBlk->xfrFrame == NULL) - { - HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR, - "Invalid transfer frame"); - HDXE_ASSERT(0); - break; - } + HDXE_ASSERT(currentCtrlBlk->xfrFrame != NULL); channelEntry->numFreeDesc++; channelEntry->numRsvdDesc--; @@ -3874,11 +3632,10 @@ void dxeTXEventHandler "%11s : 0x%x Error Reported, Reload Driver", channelType[channelCb->channelType], chStat); - dxeErrChannelDebug(channelCb, chStat); + dxeErrChannelDebug(channelCb); dxeCtxt->driverReloadInProcessing = eWLAN_PAL_TRUE; wpalWlanReload(); - dxeStartSSRTimer(dxeCtxt); } else if(WLANDXE_CH_STAT_INT_DONE_MASK & chStat) { @@ -3928,11 +3685,10 @@ void dxeTXEventHandler "%11s : 0x%x Error Reported, Reload Driver", channelType[channelCb->channelType], chStat); - dxeErrChannelDebug(channelCb, chStat); + dxeErrChannelDebug(channelCb); dxeCtxt->driverReloadInProcessing = eWLAN_PAL_TRUE; wpalWlanReload(); - dxeStartSSRTimer(dxeCtxt); } else if(WLANDXE_CH_STAT_INT_DONE_MASK & chStat) { @@ -3984,11 +3740,10 @@ void dxeTXEventHandler "%11s : 0x%x Error Reported, Reload Driver", channelType[channelCb->channelType], chStat); - dxeErrChannelDebug(channelCb, chStat); + dxeErrChannelDebug(channelCb); dxeCtxt->driverReloadInProcessing = eWLAN_PAL_TRUE; wpalWlanReload(); - dxeStartSSRTimer(dxeCtxt); } else if(WLANDXE_CH_STAT_INT_DONE_MASK & chStat) { @@ -4257,39 +4012,6 @@ void dxeTXReSyncDesc } /*========================================================================== - @ Function Name - dxeDebugTxDescReSync - - @ Description - Check DXE Tx channel state and correct it in - case Tx Data stall is detected by calling - %dxeTXReSyncDesc. Also ensure that WCN SS - is not power collapsed before calling - %dxeTXReSyncDesc - - @ Parameters - void *msgPtr - Message pointer to sync with TX thread - - @ Return - NONE -===========================================================================*/ -void dxeDebugTxDescReSync -( - wpt_msg *msgPtr -) -{ - HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR, - "%s: Check for DXE TX Async",__func__); - /* Make wake up HW */ - dxeNotifySmsm(eWLAN_PAL_FALSE, eWLAN_PAL_TRUE); - dxeNotifySmsm(eWLAN_PAL_TRUE, eWLAN_PAL_FALSE); - - wpalSleep(10); - - dxeTXReSyncDesc(msgPtr); -} -/*========================================================================== @ Function Name dxeTXISR @@ -4379,13 +4101,7 @@ static void dxeTXISR dxeCtxt->ucTxMsgCnt = 1; /* Serialize TX complete interrupt upon TX thread */ - if(NULL == dxeCtxt->txIsrMsg) - { - HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL, - "Invalid message"); - HDXE_ASSERT(0); - return; - } + HDXE_ASSERT(NULL != dxeCtxt->txIsrMsg); status = wpalPostTxMsg(WDI_GET_PAL_CTX(), dxeCtxt->txIsrMsg); if(eWLAN_PAL_STATUS_SUCCESS != status) @@ -4613,9 +4329,6 @@ void *WLANDXE_Open dxeRXResourceAvailableTimerExpHandler, tempDxeCtrlBlk); - wpalTimerInit(&tempDxeCtrlBlk->dxeSSRTimer, - dxeSSRTimerExpHandler, tempDxeCtrlBlk); - HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN, "WLANDXE_Open Success"); HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW, @@ -5183,7 +4896,6 @@ wpt_status WLANDXE_Close dxeCtxt = (WLANDXE_CtrlBlkType *)pDXEContext; wpalTimerDelete(&dxeCtxt->rxResourceAvailableTimer); - wpalTimerDelete(&dxeCtxt->dxeSSRTimer); for(idx = 0; idx < WDTS_CHANNEL_MAX; idx++) { @@ -5282,10 +4994,8 @@ void dxeTxThreadSetPowerStateEventHandler { wpt_msg *msgContent = (wpt_msg *)msgPtr; WLANDXE_CtrlBlkType *dxeCtxt; - wpt_status status = eWLAN_PAL_STATUS_SUCCESS; + wpt_status status = eWLAN_PAL_STATUS_E_FAILURE; WLANDXE_PowerStateType reqPowerState; - wpt_int8 i; - WLANDXE_ChannelCBType *channelEntry; HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW, "%s Enter", __func__); @@ -5313,31 +5023,7 @@ void dxeTxThreadSetPowerStateEventHandler case WLANDXE_POWER_STATE_IMPS: if(WLANDXE_RIVA_POWER_STATE_ACTIVE == dxeCtxt->rivaPowerState) { - - for(i = WDTS_CHANNEL_TX_LOW_PRI; i < WDTS_CHANNEL_RX_LOW_PRI; i++) - { - channelEntry = &dxeCtxt->dxeChannel[i]; - if(channelEntry->tailCtrlBlk != channelEntry->headCtrlBlk) - { - status = eWLAN_PAL_STATUS_E_FAILURE; - HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW, - "%11s : %s :TX Pending frame", - channelType[channelEntry->channelType], __func__); - - dxeChannelMonitor("DXE_IMP_ERR", channelEntry); - dxeDescriptorDump(channelEntry, - channelEntry->headCtrlBlk->linkedDesc, 0); - dxeChannelRegisterDump(channelEntry, "DXE_IMPS_ERR"); - dxeChannelAllDescDump(channelEntry, - channelEntry->channelType); - } - } - - if (eWLAN_PAL_STATUS_SUCCESS == status) - { - dxeCtxt->rivaPowerState = WLANDXE_RIVA_POWER_STATE_IMPS_UNKNOWN; - dxeCtxt->hostPowerState = WLANDXE_POWER_STATE_IMPS; - } + dxeCtxt->rivaPowerState = WLANDXE_RIVA_POWER_STATE_IMPS_UNKNOWN; } else { @@ -5488,6 +5174,7 @@ wpt_status WLANDXE_SetPowerState hostPowerState = WLANDXE_POWER_STATE_BMPS; break; case WDTS_POWER_STATE_IMPS: + pDxeCtrlBlk->hostPowerState = WLANDXE_POWER_STATE_IMPS; hostPowerState = WLANDXE_POWER_STATE_IMPS; break; case WDTS_POWER_STATE_DOWN: @@ -5581,10 +5268,6 @@ wpt_status WLANDXE_SetPowerState pDxeCtrlBlk->hostPowerState = hostPowerState; pDxeCtrlBlk->rivaPowerState = WLANDXE_RIVA_POWER_STATE_BMPS_UNKNOWN; } - else if ( hostPowerState == WLANDXE_POWER_STATE_IMPS ) - { - pDxeCtrlBlk->hostPowerState = WLANDXE_POWER_STATE_IMPS; - } else { HDXE_ASSERT(0); @@ -5640,10 +5323,9 @@ wpt_uint32 WLANDXE_GetFreeTxDataResNumber @ Parameters displaySnapshot : Display DXE snapshot option - debugFlags : Enable stall detect features - defined by WPAL_DeviceDebugFlags - These features may effect - data performance. + enableStallDetect : Enable stall detect feature + This feature will take effect to data performance + Not integrate till fully verification @ Return NONE @@ -5651,12 +5333,11 @@ wpt_uint32 WLANDXE_GetFreeTxDataResNumber ===========================================================================*/ void WLANDXE_ChannelDebug ( - wpt_boolean displaySnapshot, - wpt_uint8 debugFlags + wpt_boolean displaySnapshot, + wpt_boolean enableStallDetect ) { wpt_msg *channelDebugMsg; - wpt_msg *txDescReSyncMsg ; wpt_uint32 regValue; wpt_status status = eWLAN_PAL_STATUS_SUCCESS; @@ -5694,32 +5375,12 @@ void WLANDXE_ChannelDebug } } - if(debugFlags & WPAL_DEBUG_TX_DESC_RESYNC) - { - txDescReSyncMsg = (wpt_msg *)wpalMemoryAllocate(sizeof(wpt_msg)); - if(NULL == txDescReSyncMsg) - { - HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR, - "%s: Resync MSG MEM alloc Fail",__func__); - } - else - { - txDescReSyncMsg->callback = dxeDebugTxDescReSync; - txDescReSyncMsg->pContext = tempDxeCtrlBlk; - status = wpalPostTxMsg(WDI_GET_PAL_CTX(), - txDescReSyncMsg); - if(eWLAN_PAL_STATUS_SUCCESS != status) - { - HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR, - "%s: Post TX re-sync MSG fail",__func__); - } - } - } - - if(debugFlags & WPAL_DEBUG_START_HEALTH_TIMER) + /* Debug Type 2, toggling stall detect enable/disable */ + if(enableStallDetect) { - HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR, - "DXE TX Stall detect"); + HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN, + "DXE TX Stall detect", + 0, 0, 0); /* Start Stall detect timer and detect stall */ wpalTimerStart(&tempDxeCtrlBlk->dxeChannel[WDTS_CHANNEL_TX_LOW_PRI].healthMonitorTimer, T_WLANDXE_PERIODIC_HEALTH_M_TIME); diff --git a/drivers/staging/prima/CORE/DXE/src/wlan_qct_dxe_i.h b/drivers/staging/prima/CORE/DXE/src/wlan_qct_dxe_i.h index c59fcc39f3e..6d5980c6138 100644 --- a/drivers/staging/prima/CORE/DXE/src/wlan_qct_dxe_i.h +++ b/drivers/staging/prima/CORE/DXE/src/wlan_qct_dxe_i.h @@ -101,7 +101,6 @@ when who what, where, why #define WLANDXE_CCU_DXE_INT_SELECT 0xfb2050dc #define WLANDXE_CCU_DXE_INT_SELECT_STAT 0xfb2050e0 #define WLANDXE_CCU_ASIC_INT_ENABLE 0xfb2050e4 -#define WLANDXE_CCU_SOFT_RESET 0xfb204010 #else #define WLANDXE_CCU_DXE_INT_SELECT 0x03200b10 #define WLANDXE_CCU_DXE_INT_SELECT_STAT 0x03200b14 @@ -185,37 +184,6 @@ when who what, where, why #define WLANDXE_DMA_CH_TSTMP_REG 0x003C /* Common CSR Register Contorol mask and offset */ -#ifdef WCN_PRONTO -#define WLANDXE_DMA_CSR_RESERVED_MASK 0xFFFF0000 -#define WLANDXE_DMA_CSR_RESERVED_OFFSET 0x10 -#define WLANDXE_DMA_CSR_RESERVED_DEFAULT 0x0 - -#define WLANDXE_DMA_CSR_H2H_SYNC_EN_MASK 0x8000 -#define WLANDXE_DMA_CSR_H2H_SYNC_EN_OFFSET 0x0F -#define WLANDXE_DMA_CSR_H2H_SYNC_EN_DEFAULT 0x0 - -#define WLANDXE_DMA_CSR_PAUSED_MASK 0x4000 -#define WLANDXE_DMA_CSR_PAUSED_OFFSET 0x0E -#define WLANDXE_DMA_CSR_PAUSED_DEFAULT 0x0 - -#define WLANDXE_DMA_CSR_ECTR_EN_MASK 0x2000 -#define WLANDXE_DMA_CSR_ECTR_EN_OFFSET 0x0D -#define WLANDXE_DMA_CSR_ECTR_EN_DEFAULT 0x2000 - -#define WLANDXE_DMA_CSR_B2H_TSTMP_OFF_MASK 0x1F00 -#define WLANDXE_DMA_CSR_B2H_TSTMP_OFF_OFFSET 0x08 -#define WLANDXE_DMA_CSR_B2H_TSTMP_OFF_DEFAULT 0x0F00 - -#define WLANDXE_DMA_CSR_H2B_TSTMP_OFF_MASK 0xF8 -#define WLANDXE_DMA_CSR_H2B_TSTMP_OFF_OFFSET 0x03 -#define WLANDXE_DMA_CSR_H2B_TSTMP_OFF_DEFAULT 0x28 - -#define WLANDXE_DMA_CSR_TSTMP_EN_MASK 0x04 -#define WLANDXE_DMA_CSR_TSTMP_EN_OFFSET 0x02 -#define WLANDXE_DMA_CSR_TSTMP_EN_DEFAULT 0x0 - -#define WLANDXE_DMA_CCU_DXE_RESET_MASK 0x4 -#else #define WLANDXE_DMA_CSR_RESERVED_MASK 0xFFFE0000 #define WLANDXE_DMA_CSR_RESERVED_OFFSET 0x11 #define WLANDXE_DMA_CSR_RESERVED_DEFAULT 0x0 @@ -247,7 +215,6 @@ when who what, where, why #define WLANDXE_DMA_CSR_RESET_MASK 0x4 #define WLANDXE_DMA_CSR_RESET_OFFSET 0x2 #define WLANDXE_DMA_CSR_RESET_DEFAULT 0x0 -#endif /* WCN_PRONTO */ #define WLANDXE_DMA_CSR_PAUSE_MASK 0x2 #define WLANDXE_DMA_CSR_PAUSE_OFFSET 0x1 @@ -256,11 +223,7 @@ when who what, where, why #define WLANDXE_DMA_CSR_EN_MASK 0x1 #define WLANDXE_DMA_CSR_EN_OFFSET 0x0 #define WLANDXE_DMA_CSR_EN_DEFAULT 0x0 - -/* DXE CSR Master enable register value */ -#define WLANDXE_CSR_DEFAULT_ENABLE (WLANDXE_DMA_CSR_H2H_SYNC_EN_MASK | \ - WLANDXE_DMA_CSR_ECTR_EN_MASK | \ - WLANDXE_DMA_CSR_EN_MASK) +#define WLANDXE_DMA_CSR_DEFAULT 0x4E50 /* Channel CTRL Register Control mask and offset */ #define WLANDXE_CH_CTRL_RSVD_MASK 0x80000000 @@ -414,8 +377,6 @@ when who what, where, why #define WLANDXE_CH_STAT_INT_DONE_MASK 0x00008000 #define WLANDXE_CH_STAT_INT_ERR_MASK 0x00004000 #define WLANDXE_CH_STAT_INT_ED_MASK 0x00002000 -#define WLANDXE_CH_STAT_ERR_CODE_MASK 0x000007c0 -#define WLANDXE_CH_STAT_ERR_CODE_OFFSET (6) #define WLANDXE_CH_STAT_MASKED_MASK 0x00000008 #define WLANDXE_CH_STAT_ENABLED_MASK 0x00000001 @@ -434,37 +395,6 @@ when who what, where, why #define WLANDXE_TX_LOW_RES_THRESHOLD (5) -typedef enum { - WLANDXE_ERROR_NONE = 0, - WLANDXE_ERROR_SAHB_ERR = 1, - WLANDXE_ERROR_H2H_RD_BUS_ERR = 2, - WLANDXE_ERROR_H2H_WR_BUS_ERR = 3, - WLANDXE_ERROR_PRG_INV_XTYPE = 4, - WLANDXE_ERROR_BERR_POPWQ = 5, - WLANDXE_ERROR_BERR_PUSHWQ = 6, - WLANDXE_ERROR_BERR_RLSS = 7, - WLANDXE_ERROR_BERR_GETPDU = 8, - WLANDXE_ERROR_PRG_INV_WQ = 9, - WLANDXE_ERROR_PRG_INV_H2H_SRC_QID = 10, - WLANDXE_ERROR_PRG_INV_H2H_DST_QID = 11, - WLANDXE_ERROR_PRG_INV_B2H_SRC_QID = 12, - WLANDXE_ERROR_PRG_INV_B2H_DST_QID = 13, - WLANDXE_ERROR_PRG_INV_B2H_SRC_IDX = 14, - WLANDXE_ERROR_PRG_INV_H2B_SRC_QID = 15, - WLANDXE_ERROR_PRG_INV_H2B_DST_QID = 16, - WLANDXE_ERROR_PRG_INV_H2B_DST_IDX = 17, - WLANDXE_ERROR_PRG_INV_H2B_SZ = 18, - WLANDXE_ERROR_PRG_INV_SADR = 19, - WLANDXE_ERROR_PRG_INV_DADR = 20, - WLANDXE_ERROR_PRG_INV_EDADR = 21, - WLANDXE_ERROR_PRG_INV_SRC_WQID = 22, - WLANDXE_ERROR_PRG_INV_DST_WQID = 23, - WLANDXE_ERROR_PRG_XTYPE_MSMTCH = 24, - WLANDXE_ERROR_PKT_ERR = 25, - WLANDXE_ERROR_ABORT = 26, - WLANDXE_ERROR_PDU_CNT_OVFL = 27, -}WLANDXE_ErrorCode; - /* DXE Descriptor Endian swap macro */ #ifdef WLANDXE_ENDIAN_SWAP_ENABLE #define WLANDXE_U32_SWAP_ENDIAN(a) (((a & 0x000000FF) << 24) | \ @@ -715,7 +645,6 @@ typedef struct wpt_boolean driverReloadInProcessing; wpt_boolean smsmToggled; wpt_timer rxResourceAvailableTimer; - wpt_timer dxeSSRTimer; } WLANDXE_CtrlBlkType; /*========================================================================== diff --git a/drivers/staging/prima/CORE/HDD/inc/wlan_hdd_cfg.h b/drivers/staging/prima/CORE/HDD/inc/wlan_hdd_cfg.h index af54fd7f818..52508131713 100644 --- a/drivers/staging/prima/CORE/HDD/inc/wlan_hdd_cfg.h +++ b/drivers/staging/prima/CORE/HDD/inc/wlan_hdd_cfg.h @@ -1104,26 +1104,6 @@ typedef enum #define CFG_BTC_DHCP_PROT_ON_SCO_MAX ( 1 ) #define CFG_BTC_DHCP_PROT_ON_SCO_DEFAULT ( 0 ) -#define CFG_BTC_ACTIVE_WLAN_LEN_NAME "btcActiveWlanLen" -#define CFG_BTC_ACTIVE_WLAN_LEN_MIN ( 0 ) -#define CFG_BTC_ACTIVE_WLAN_LEN_MAX ( 250000 ) -#define CFG_BTC_ACTIVE_WLAN_LEN_DEFAULT ( 60000 ) - -#define CFG_BTC_ACTIVE_BT_LEN_NAME "btcActiveBtLen" -#define CFG_BTC_ACTIVE_BT_LEN_MIN ( 0 ) -#define CFG_BTC_ACTIVE_BT_LEN_MAX ( 250000 ) -#define CFG_BTC_ACTIVE_BT_LEN_DEFAULT ( 90000 ) - -#define CFG_BTC_SAP_ACTIVE_WLAN_LEN_NAME "btcSapActiveWlanLen" -#define CFG_BTC_SAP_ACTIVE_WLAN_LEN_MIN ( 0 ) -#define CFG_BTC_SAP_ACTIVE_WLAN_LEN_MAX ( 250000 ) -#define CFG_BTC_SAP_ACTIVE_WLAN_LEN_DEFAULT ( 60000 ) - -#define CFG_BTC_SAP_ACTIVE_BT_LEN_NAME "btcSapActiveBtLen" -#define CFG_BTC_SAP_ACTIVE_BT_LEN_MIN ( 0 ) -#define CFG_BTC_SAP_ACTIVE_BT_LEN_MAX ( 250000 ) -#define CFG_BTC_SAP_ACTIVE_BT_LEN_DEFAULT ( 90000 ) - #if defined WLAN_FEATURE_VOWIFI_11R #define CFG_FT_ENABLE_NAME "gFtEnabled" #define CFG_FT_ENABLE_MIN (0) @@ -1267,12 +1247,6 @@ typedef enum #define CFG_ENABLE_HOST_ARPOFFLOAD_MAX ( 1 ) #define CFG_ENABLE_HOST_ARPOFFLOAD_DEFAULT ( 0 ) -#define CFG_ENABLE_HOST_NSOFFLOAD_NAME "hostNSOffload" -#define CFG_ENABLE_HOST_NSOFFLOAD_MIN ( 0 ) -#define CFG_ENABLE_HOST_NSOFFLOAD_MAX ( 1 ) -#define CFG_ENABLE_HOST_NSOFFLOAD_DEFAULT ( 0 ) - - #define CFG_ENABLE_BTAMP_NAME "gEnableBtAmp" #define CFG_ENABLE_BTAMP_MIN ( 0 ) #define CFG_ENABLE_BTAMP_MAX ( 1 ) @@ -1303,7 +1277,7 @@ typedef enum #define CFG_ENABLE_BYPASS_11D_NAME "gEnableBypass11d" #define CFG_ENABLE_BYPASS_11D_MIN ( 0 ) #define CFG_ENABLE_BYPASS_11D_MAX ( 1 ) -#define CFG_ENABLE_BYPASS_11D_DEFAULT ( 1 ) +#define CFG_ENABLE_BYPASS_11D_DEFAULT ( 0 ) #define CFG_ENABLE_DFS_CHNL_SCAN_NAME "gEnableDFSChnlScan" #define CFG_ENABLE_DFS_CHNL_SCAN_MIN ( 0 ) @@ -1363,6 +1337,12 @@ typedef enum #define CFG_P2P_DEVICE_ADDRESS_ADMINISTRATED_MAX ( 1 ) #define CFG_P2P_DEVICE_ADDRESS_ADMINISTRATED_DEFAULT ( 0 ) +#ifdef WLAN_FEATURE_PACKET_FILTERING +#define CFG_MC_ADDR_LIST_FILTER_NAME "isMcAddrListFilter" +#define CFG_MC_ADDR_LIST_FILTER_MIN ( 0 ) +#define CFG_MC_ADDR_LIST_FILTER_MAX ( 1 ) +#define CFG_MC_ADDR_LIST_FILTER_DEFAULT ( 0 ) +#endif #define CFG_ENABLE_SSR "gEnableSSR" #define CFG_ENABLE_SSR_MIN ( 0 ) @@ -1396,7 +1376,6 @@ typedef enum #define CFG_VOS_TRACE_ENABLE_HDD_NAME "vosTraceEnableHDD" #define CFG_VOS_TRACE_ENABLE_SME_NAME "vosTraceEnableSME" #define CFG_VOS_TRACE_ENABLE_PE_NAME "vosTraceEnablePE" -#define CFG_VOS_TRACE_ENABLE_PMC_NAME "vosTraceEnablePMC" #define CFG_VOS_TRACE_ENABLE_WDA_NAME "vosTraceEnableWDA" #define CFG_VOS_TRACE_ENABLE_SYS_NAME "vosTraceEnableSYS" #define CFG_VOS_TRACE_ENABLE_VOSS_NAME "vosTraceEnableVOSS" @@ -1624,7 +1603,7 @@ typedef enum #define CFG_TDLS_IMPLICIT_TRIGGER_DEFAULT ( 0 ) #define CFG_TDLS_TX_STATS_PERIOD "gTDLSTxStatsPeriod" -#define CFG_TDLS_TX_STATS_PERIOD_MIN ( 10 ) +#define CFG_TDLS_TX_STATS_PERIOD_MIN ( 2000 ) #define CFG_TDLS_TX_STATS_PERIOD_MAX ( 4294967295UL ) #define CFG_TDLS_TX_STATS_PERIOD_DEFAULT ( 5000 ) @@ -1649,7 +1628,7 @@ typedef enum #define CFG_TDLS_IDLE_TIMEOUT_DEFAULT ( 5000 ) #define CFG_TDLS_IDLE_PACKET_THRESHOLD "gTDLSIdlePacketThreshold" -#define CFG_TDLS_IDLE_PACKET_THRESHOLD_MIN ( 0 ) +#define CFG_TDLS_IDLE_PACKET_THRESHOLD_MIN ( 1 ) #define CFG_TDLS_IDLE_PACKET_THRESHOLD_MAX ( 40000 ) #define CFG_TDLS_IDLE_PACKET_THRESHOLD_DEFAULT ( 5 ) @@ -1667,10 +1646,6 @@ typedef enum #define CFG_TDLS_RSSI_TEARDOWN_THRESHOLD_MIN ( -120 ) #define CFG_TDLS_RSSI_TEARDOWN_THRESHOLD_MAX ( 0 ) #define CFG_TDLS_RSSI_TEARDOWN_THRESHOLD_DEFAULT ( -75 ) -#define CFG_TDLS_EXTERNAL_CONTROL "gTDLSExternalControl" -#define CFG_TDLS_EXTERNAL_CONTROL_MIN (0) -#define CFG_TDLS_EXTERNAL_CONTROL_MAX (1) -#define CFG_TDLS_EXTERNAL_CONTROL_DEFAULT (0) #endif #ifdef WLAN_ACTIVEMODE_OFFLOAD_FEATURE @@ -1744,6 +1719,20 @@ typedef enum #define CFG_DISABLE_LDPC_WITH_TXBF_AP_DEFAULT ( 0 ) #endif + +/* ++ * SAP/P2P-GO mode traffic monitor ++ */ +#define CFG_ENABLE_TRAFFIC_MONITOR "gEnableTrafficMonitor" +#define CFG_ENABLE_TRAFFIC_MONITOR_MIN ( 0 ) +#define CFG_ENABLE_TRAFFIC_MONITOR_MAX ( 1 ) +#define CFG_ENABLE_TRAFFIC_MONITOR_DEFAULT ( 0 ) + +#define CFG_TRAFFIC_IDLE_TIMEOUT "gTrafficIdleTimeout" +#define CFG_TRAFFIC_IDLE_TIMEOUT_MIN ( 3000 ) +#define CFG_TRAFFIC_IDLE_TIMEOUT_MAX ( 10000 ) +#define CFG_TRAFFIC_IDLE_TIMEOUT_DEFAULT ( 5000 ) + #define CFG_LIST_OF_NON_DFS_COUNTRY_CODE "gListOfNonDfsCountryCode" #define CFG_LIST_OF_NON_DFS_COUNTRY_CODE_DEFAULT "JO,MA" @@ -1760,15 +1749,8 @@ typedef enum #define CFG_IBSS_ADHOC_CHANNEL_24GHZ_MAX ( 14 ) #define CFG_IBSS_ADHOC_CHANNEL_24GHZ_DEFAULT ( 6 ) -#define CFG_LIST_OF_NON_11AC_COUNTRY_CODE "gListOfNon11acCountryCode" -#define CFG_LIST_OF_NON_11AC_COUNTRY_CODE_DEFAULT "RU,UA,ZA" - -/* Parameter to control VHT support in 2.4 GHz band */ -#define CFG_ENABLE_VHT_FOR_24GHZ_NAME "gEnableVhtFor24GHzBand" -#define CFG_ENABLE_VHT_FOR_24GHZ_MIN (0) -#define CFG_ENABLE_VHT_FOR_24GHZ_MAX (1) -#define CFG_ENABLE_VHT_FOR_24GHZ_DEFAULT (0) - +#define CFG_LIST_OF_NON_11AC_COUNTRY_CODE "gListOfNon11acCountryCode" +#define CFG_LIST_OF_NON_11AC_COUNTRY_CODE_DEFAULT "RU,UA,ZA" #define CFG_MAX_MEDIUM_TIME "gMaxMediumTime" #define CFG_MAX_MEDIUM_TIME_STAMIN WNI_CFG_MAX_MEDIUM_TIME_STAMIN @@ -1788,61 +1770,14 @@ typedef enum #define CFG_TRAFFIC_IDLE_TIMEOUT_MAX ( 10000 ) #define CFG_TRAFFIC_IDLE_TIMEOUT_DEFAULT ( 5000 ) -#ifdef FEATURE_WLAN_SCAN_PNO -#define CFG_PNO_SCAN_SUPPORT "gPNOScanSupport" -#define CFG_PNO_SCAN_SUPPORT_ENABLE ( 1 ) -#define CFG_PNO_SCAN_SUPPORT_DISABLE ( 0 ) -#define CFG_PNO_SCAN_SUPPORT_DEFAULT ( 1 ) - -#define CFG_PNO_SCAN_TIMER_REPEAT_VALUE "gPNOScanTimerRepeatValue" -#define CFG_PNO_SCAN_TIMER_REPEAT_VALUE_DEFAULT ( 6 ) -#define CFG_PNO_SCAN_TIMER_REPEAT_VALUE_MIN ( 0 ) -#define CFG_PNO_SCAN_TIMER_REPEAT_VALUE_MAX ( 0xffffffff ) -#endif - -//Macro to enable/disable dynamic timer -#define CFG_DYNAMIC_SPLIT_SCAN_NAME "gEnableDynSplitScan" -#define CFG_DYNAMIC_SPLIT_SCAN_MIN ( 0 ) -#define CFG_DYNAMIC_SPLIT_SCAN_MAX ( 1 ) -#define CFG_DYNAMIC_SPLIT_SCAN_DEFAULT ( 1 ) - -//Macro to monitor the packet count -#define CFG_SPLIT_SCAN_TRAFFIC_MONITOR_THRSHLD_NAME "gSplitScanTxRxThreshold" -#define CFG_SPLIT_SCAN_TRAFFIC_MONITOR_THRSHLD_MIN ( 10 ) -#define CFG_SPLIT_SCAN_TRAFFIC_MONITOR_THRSHLD_MAX ( 100 ) -#define CFG_SPLIT_SCAN_TRAFFIC_MONITOR_THRSHLD_DEFAULT ( 50 ) - -//Macro to handle the monitor timer value in milliseconds -#define CFG_SPLIT_SCAN_TRAFFIC_MONITOR_TIMER_NAME "gSplitScanTxRxTimer" -#define CFG_SPLIT_SCAN_TRAFFIC_MONITOR_TIMER_MIN ( 1000 ) -#define CFG_SPLIT_SCAN_TRAFFIC_MONITOR_TIMER_MAX ( 10000 ) -#define CFG_SPLIT_SCAN_TRAFFIC_MONITOR_TIMER_DEFAULT ( 5000 ) - -//Enable debug for remain on channel issues -#define CFG_DEBUG_P2P_REMAIN_ON_CHANNEL_NAME "gDebugP2pRemainOnChannel" -#define CFG_DEBUG_P2P_REMAIN_ON_CHANNEL_DEFAULT ( 0 ) -#define CFG_DEBUG_P2P_REMAIN_ON_CHANNEL_MIN ( 0 ) -#define CFG_DEBUG_P2P_REMAIN_ON_CHANNEL_MAX ( 1 ) - - #define CFG_AMSDU_SUPPORT_IN_AMPDU_NAME "gAmsduSupportInAMPDU" #define CFG_AMSDU_SUPPORT_IN_AMPDU_MIN (0) #define CFG_AMSDU_SUPPORT_IN_AMPDU_MAX (1) #define CFG_AMSDU_SUPPORT_IN_AMPDU_DEFAULT (0) //disabled -#define CFG_ROAMING_DFS_CHANNEL_NAME "gAllowDFSChannelRoam" -#define CFG_ROAMING_DFS_CHANNEL_MIN (0) -#define CFG_ROAMING_DFS_CHANNEL_MAX (1) -#define CFG_ROAMING_DFS_CHANNEL_DEFAULT (0) - -#define CFG_ENABLE_STRICT_REGULATORY_FOR_FCC_NAME "gEnableStrictRegulatoryForFCC" -#define CFG_ENABLE_STRICT_REGULATORY_FOR_FCC_MIN ( 0 ) -#define CFG_ENABLE_STRICT_REGULATORY_FOR_FCC_MAX ( 1 ) -#define CFG_ENABLE_STRICT_REGULATORY_FOR_FCC_DEFAULT ( 0 ) - -/*--------------------------------------------------------------------------- +/*--------------------------------------------------------------------------- Type declarations - -------------------------------------------------------------------------*/ + -------------------------------------------------------------------------*/ typedef struct { @@ -1923,6 +1858,7 @@ typedef struct v_BOOL_t fIsShortPreamble; v_BOOL_t fIsAutoIbssBssid; v_MACADDR_t IbssBssid; + v_U8_t intfAddrMask; v_MACADDR_t intfMacAddr[VOS_MAX_CONCURRENCY_PERSONA]; v_U8_t crdaDefaultCountryCode [3]; @@ -1935,12 +1871,12 @@ typedef struct v_U8_t MinFramesProcThres; v_U8_t apCntryCode[4]; v_BOOL_t apDisableIntraBssFwd; - v_U8_t nEnableListenMode; + v_U8_t nEnableListenMode; v_U32_t nAPAutoShutOff; v_U8_t apStartChannelNum; v_U8_t apEndChannelNum; v_U8_t apOperatingBand; - v_BOOL_t apAutoChannelSelection; + v_BOOL_t apAutoChannelSelection; v_U8_t enableLTECoex; v_U32_t apKeepAlivePeriod; v_U32_t goKeepAlivePeriod; @@ -1967,8 +1903,8 @@ typedef struct v_U8_t nNeighborReassocRssiThreshold; v_U8_t nNeighborLookupRssiThreshold; v_U8_t neighborScanChanList[WNI_CFG_VALID_CHANNEL_LIST_LEN]; - v_U16_t nNeighborScanMinChanTime; - v_U16_t nNeighborScanMaxChanTime; + v_U16_t nNeighborScanMinChanTime; + v_U16_t nNeighborScanMaxChanTime; v_U16_t nMaxNeighborReqTries; v_U16_t nNeighborResultsRefreshPeriod; v_U16_t nEmptyScanRefreshPeriod; @@ -2059,7 +1995,7 @@ typedef struct v_U16_t InfraSbaAcVo; /* default TSPEC parameters for AC_VI */ -sme_QosWmmDirType InfraDirAcVi; + sme_QosWmmDirType InfraDirAcVi; v_U16_t InfraNomMsduSizeAcVi; v_U32_t InfraMeanDataRateAcVi; v_U32_t InfraMinPhyRateAcVi; @@ -2087,17 +2023,17 @@ sme_QosWmmDirType InfraDirAcVi; v_U32_t DelayedTriggerFrmInt; /* Wowl pattern */ - char wowlPattern[1024]; + char wowlPattern[1024]; v_BOOL_t b19p2MhzPmicClkEnabled; - /* Control for Replay counetr. value 1 means + /* Control for Replay counetr. value 1 means single replay counter for all TID*/ v_BOOL_t bSingleTidRc; v_U8_t mcastBcastFilterSetting; v_BOOL_t fhostArpOffload; - v_BOOL_t fhostNSOffload; v_BOOL_t burstSizeDefinition; v_U8_t tsInfoAckPolicy; + /* RF Settling Time Clock */ v_U32_t rfSettlingTimeUs; v_U8_t enableBtAmp; @@ -2124,7 +2060,6 @@ sme_QosWmmDirType InfraDirAcVi; v_U16_t vosTraceEnableHDD; v_U16_t vosTraceEnableSME; v_U16_t vosTraceEnablePE; - v_U16_t vosTraceEnablePMC; v_U16_t vosTraceEnableWDA; v_U16_t vosTraceEnableSYS; v_U16_t vosTraceEnableVOSS; @@ -2161,6 +2096,9 @@ sme_QosWmmDirType InfraDirAcVi; v_U8_t allowMCCGODiffBI; v_BOOL_t isP2pDeviceAddrAdministrated; v_U8_t thermalMitigationEnable; +#ifdef WLAN_FEATURE_PACKET_FILTERING + v_BOOL_t isMcAddrListFilter; +#endif #ifdef WLAN_FEATURE_11AC v_U8_t vhtChannelWidth; v_U8_t vhtRxMCS; @@ -2173,10 +2111,10 @@ sme_QosWmmDirType InfraDirAcVi; v_BOOL_t enableFirstScan2GOnly; v_BOOL_t skipDfsChnlInP2pSearch; v_BOOL_t ignoreDynamicDtimInP2pMode; -v_U16_t configMccParam; + v_U16_t configMccParam; v_U32_t numBuffAdvert; v_BOOL_t enableRxSTBC; -#ifdef FEATURE_WLAN_TDLS +#ifdef FEATURE_WLAN_TDLS v_BOOL_t fEnableTDLSSupport; v_BOOL_t fEnableTDLSImplicitTrigger; v_U32_t fTDLSTxStatsPeriod; @@ -2188,7 +2126,6 @@ v_U16_t configMccParam; v_U32_t fTDLSRSSIHysteresis; v_S31_t fTDLSRSSITriggerThreshold; v_S31_t fTDLSRSSITeardownThreshold; - v_BOOL_t fTDLSExternalControl; #endif v_U32_t enableLpwrImgTransition; #ifdef WLAN_SOFTAP_VSTA_FEATURE @@ -2213,26 +2150,7 @@ v_U16_t configMccParam; v_U32_t cfgMaxMediumTime; v_U8_t enableTrafficMonitor; v_U32_t trafficIdleTimeout; - /*PNO related parameters */ -#ifdef FEATURE_WLAN_SCAN_PNO - v_BOOL_t configPNOScanSupport; - v_U32_t configPNOScanTimerRepeatValue; -#endif - v_U32_t cfgBtcActiveWlanLen; - v_U32_t cfgBtcActiveBtLen; - v_U32_t cfgBtcSapActiveWlanLen; - v_U32_t cfgBtcSapActiveBtLen; - v_BOOL_t enableVhtFor24GHzBand; - //TX and RX traffic threshold for split scan - v_U8_t txRxThresholdForSplitScan; - v_U8_t dynSplitscan; //Enable/Disable dynamic - //splitscan - //Traffic monitor timer for split scan - v_U32_t trafficMntrTmrForSplitScan; - v_BOOL_t debugP2pRemainOnChannel; v_U8_t isAmsduSupportInAMPDU; - v_U8_t allowDFSChannelRoam; - v_BOOL_t gEnableStrictRegulatoryForFCC; } hdd_config_t; /*--------------------------------------------------------------------------- Function declarations and documenation diff --git a/drivers/staging/prima/CORE/HDD/inc/wlan_hdd_cfg80211.h b/drivers/staging/prima/CORE/HDD/inc/wlan_hdd_cfg80211.h index 53e82a64343..f8252943c1f 100644..100755 --- a/drivers/staging/prima/CORE/HDD/inc/wlan_hdd_cfg80211.h +++ b/drivers/staging/prima/CORE/HDD/inc/wlan_hdd_cfg80211.h @@ -123,18 +123,13 @@ int wlan_hdd_cfg80211_pmksa_candidate_notify( hdd_adapter_t *pAdapter, tCsrRoamInfo *pRoamInfo, int index, bool preauth ); #endif - +//Begin fjdw67 Motorola, IKJB42MAIN-6385 - LFR roaming instrumentation #ifdef FEATURE_WLAN_LFR_METRICS -VOS_STATUS wlan_hdd_cfg80211_roam_metrics_preauth(hdd_adapter_t *pAdapter, - tCsrRoamInfo *pRoamInfo); - -VOS_STATUS wlan_hdd_cfg80211_roam_metrics_preauth_status( - hdd_adapter_t *pAdapter, tCsrRoamInfo *pRoamInfo, bool preauth_status); - -VOS_STATUS wlan_hdd_cfg80211_roam_metrics_handover(hdd_adapter_t *pAdapter, - tCsrRoamInfo *pRoamInfo); + eHalStatus wlan_hdd_cfg80211_roam_metrics_preauth(hdd_adapter_t *pAdapter, tCsrRoamInfo *pRoamInfo); + eHalStatus wlan_hdd_cfg80211_roam_metrics_preauth_status(hdd_adapter_t *pAdapter, tCsrRoamInfo *pRoamInfo,bool preauth_status); + eHalStatus wlan_hdd_cfg80211_roam_metrics_handover(hdd_adapter_t *pAdapter, tCsrRoamInfo *pRoamInfo); #endif - +//End fjdw67 Motorola, IKJB42MAIN-6385 #ifdef FEATURE_WLAN_WAPI void wlan_hdd_cfg80211_set_key_wapi(hdd_adapter_t* pAdapter, u8 key_index, const u8 *mac_addr, u8 *key , int key_Len); @@ -170,6 +165,6 @@ int wlan_hdd_cfg80211_send_tdls_discover_req(struct wiphy *wiphy, extern void wlan_hdd_cfg80211_update_replayCounterCallback(void *callbackContext, tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp); #endif -void* wlan_hdd_change_country_code_cb(void *pAdapter); + #endif diff --git a/drivers/staging/prima/CORE/HDD/inc/wlan_hdd_dp_utils.h b/drivers/staging/prima/CORE/HDD/inc/wlan_hdd_dp_utils.h index 465a2903064..ee55d49d9b9 100644 --- a/drivers/staging/prima/CORE/HDD/inc/wlan_hdd_dp_utils.h +++ b/drivers/staging/prima/CORE/HDD/inc/wlan_hdd_dp_utils.h @@ -50,8 +50,13 @@ Description... Copyright 2008 (c) Qualcomm, Incorporated. All Rights Reserved. +<<<<<<< HEAD:CORE/HDD/inc/wlan_hdd_dp_utils.h + Qualcomm Confidential and Proprietary. + +======= Qualcomm Technologies Confidential and Proprietary. +>>>>>>> 009551c... wlan: hdd: remove obsolete "WLAN_SOFTAP_FEATURE" featurization:prima/CORE/HDD/inc/wlan_hdd_dp_utils.h ==============================================================================**/ /* $HEADER$ */ diff --git a/drivers/staging/prima/CORE/HDD/inc/wlan_hdd_ftm.h b/drivers/staging/prima/CORE/HDD/inc/wlan_hdd_ftm.h index a2d45fb7caf..b29b8cf0781 100644 --- a/drivers/staging/prima/CORE/HDD/inc/wlan_hdd_ftm.h +++ b/drivers/staging/prima/CORE/HDD/inc/wlan_hdd_ftm.h @@ -74,9 +74,6 @@ #define WE_CLEAR_RX_PKT_CNT 8 #define WE_RX 9 #define WE_ENABLE_CHAIN 10 -#define WE_SET_PWR_CNTL_MODE 11 -#define WE_ENABLE_DPD 12 -#define WE_SET_CB 13 /* Private ioctls and their sub-ioctls */ #define WLAN_FTM_PRIV_SET_NONE_GET_INT (SIOCIWFIRSTPRIV + 1) diff --git a/drivers/staging/prima/CORE/HDD/inc/wlan_hdd_hostapd.h b/drivers/staging/prima/CORE/HDD/inc/wlan_hdd_hostapd.h index fb99c2e13ea..3f105fd4a2e 100644 --- a/drivers/staging/prima/CORE/HDD/inc/wlan_hdd_hostapd.h +++ b/drivers/staging/prima/CORE/HDD/inc/wlan_hdd_hostapd.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2014, The Linux Foundation. All rights reserved. + * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -49,8 +49,13 @@ \brief Linux HDD HOSTAPD include file Copyright 2008-2013 (c) Qualcomm, Incorporated. All Rights Reserved. +<<<<<<< HEAD:CORE/HDD/inc/wlan_hdd_hostapd.h + Qualcomm Confidential and Proprietary. + +======= Qualcomm Technologies Confidential and Proprietary. +>>>>>>> 009551c... wlan: hdd: remove obsolete "WLAN_SOFTAP_FEATURE" featurization:prima/CORE/HDD/inc/wlan_hdd_hostapd.h ==========================================================================*/ /*--------------------------------------------------------------------------- @@ -69,9 +74,6 @@ Preprocessor definitions and constants -------------------------------------------------------------------------*/ -/* max length of command string in hostapd ioctl */ -#define HOSTAPD_IOCTL_COMMAND_STRLEN_MAX 2048 - hdd_adapter_t* hdd_wlan_create_ap_dev( hdd_context_t *pHddCtx, tSirMacAddr macAddr, tANI_U8 *name); VOS_STATUS hdd_register_hostapd(hdd_adapter_t *pAdapter, tANI_U8 rtnl_held); @@ -106,5 +108,5 @@ int hdd_softap_unpackIE( tHalHandle halHandle, VOS_STATUS hdd_hostapd_SAPEventCB( tpSap_Event pSapEvent, v_PVOID_t usrDataForCallback); VOS_STATUS hdd_init_ap_mode( hdd_adapter_t *pAdapter ); void hdd_set_ap_ops( struct net_device *pWlanHostapdDev ); -int hdd_hostapd_stop (struct net_device *dev); + #endif // end #if !defined( WLAN_HDD_HOSTAPD_H ) diff --git a/drivers/staging/prima/CORE/HDD/inc/wlan_hdd_main.h b/drivers/staging/prima/CORE/HDD/inc/wlan_hdd_main.h index 19c64baf968..207f090c793 100644 --- a/drivers/staging/prima/CORE/HDD/inc/wlan_hdd_main.h +++ b/drivers/staging/prima/CORE/HDD/inc/wlan_hdd_main.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2014, The Linux Foundation. All rights reserved. + * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -83,10 +83,12 @@ #define LIBRA_CARD_REMOVE_DETECT_MAX_COUNT 5 /** Number of Tx Queues */ #define NUM_TX_QUEUES 4 +// BEGIN Motorola, IKHSS7-12524 Increase wlan Kernel/driver buffer for mobile hotspot /** Queue length specified to OS in the net_device */ -#define NET_DEV_TX_QUEUE_LEN 100 +#define NET_DEV_TX_QUEUE_LEN 1000 /** HDD's internal Tx Queue Length. Needs to be a power of 2 */ -#define HDD_TX_QUEUE_MAX_LEN 128 +#define HDD_TX_QUEUE_MAX_LEN 1024 +// END IKHSS7-12524 /** HDD internal Tx Queue Low Watermark. Net Device TX queue is disabled * when HDD queue becomes full. This Low watermark is used to enable * the Net Device queue again */ @@ -115,9 +117,6 @@ #define WLAN_WAIT_TIME_DISCONNECT 500 #define WLAN_WAIT_TIME_STATS 800 #define WLAN_WAIT_TIME_POWER 800 -#define WLAN_WAIT_TIME_COUNTRY 1000 -#define WLAN_WAIT_TIME_CHANNEL_UPDATE 600 - /* Amount of time to wait for sme close session callback. This value should be larger than the timeout used by WDI to wait for a response from WCNSS */ @@ -148,7 +147,6 @@ #define MAC_ADDR_ARRAY(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5] /** Mac Address string **/ #define MAC_ADDRESS_STR "%02x:%02x:%02x:%02x:%02x:%02x" -#define MAC_ADDRESS_STR_LEN 18 /* Including null terminator */ #define MAX_GENIE_LEN 255 #define WLAN_CHIP_VERSION "WCNSS" @@ -194,63 +192,9 @@ #define GTK_OFFLOAD_DISABLE 1 #endif -#ifdef FEATURE_WLAN_SCAN_PNO -#define HDD_PNO_SCAN_TIMERS_SET_ONE 1 -/* value should not be greater than PNO_MAX_SCAN_TIMERS */ -#define HDD_PNO_SCAN_TIMERS_SET_MULTIPLE 6 -#define WLAN_WAIT_TIME_PNO 500 -#endif - -#define MAX_USER_COMMAND_SIZE 4096 - #define HDD_MAC_ADDR_LEN 6 typedef v_U8_t tWlanHddMacAddr[HDD_MAC_ADDR_LEN]; -/* - * Generic asynchronous request/response support - * - * Many of the APIs supported by HDD require a call to SME to - * perform an action or to retrieve some data. In most cases SME - * performs the operation asynchronously, and will execute a provided - * callback function when the request has completed. In order to - * synchronize this the HDD API allocates a context which is then - * passed to SME, and which is then, in turn, passed back to the - * callback function when the operation completes. The callback - * function then sets a completion variable inside the context which - * the HDD API is waiting on. In an ideal world the HDD API would - * wait forever (or at least for a long time) for the response to be - * received and for the completion variable to be set. However in - * most cases these HDD APIs are being invoked in the context of a - * userspace thread which has invoked either a cfg80211 API or a - * wireless extensions ioctl and which has taken the kernel rtnl_lock. - * Since this lock is used to synchronize many of the kernel tasks, we - * do not want to hold it for a long time. In addition we do not want - * to block userspace threads (such as the wpa supplicant's main - * thread) for an extended time. Therefore we only block for a short - * time waiting for the response before we timeout. This means that - * it is possible for the HDD API to timeout, and for the callback to - * be invoked afterwards. In order for the callback function to - * determine if the HDD API is still waiting, a magic value is also - * stored in the shared context. Only if the context has a valid - * magic will the callback routine do any work. In order to further - * synchronize these activities a spinlock is used so that if any HDD - * API timeout coincides with its callback, the operations of the two - * threads will be serialized. - */ -struct statsContext -{ - struct completion completion; - hdd_adapter_t *pAdapter; - unsigned int magic; -}; - -extern spinlock_t hdd_context_lock; - -#define STATS_CONTEXT_MAGIC 0x53544154 //STAT -#define RSSI_CONTEXT_MAGIC 0x52535349 //RSSI -#define POWER_CONTEXT_MAGIC 0x504F5752 //POWR -#define SNR_CONTEXT_MAGIC 0x534E5200 //SNR - typedef struct hdd_tx_rx_stats_s { // start_xmit stats @@ -283,8 +227,6 @@ typedef struct hdd_tx_rx_stats_s __u32 rxDropped; __u32 rxDelivered; __u32 rxRefused; - __u32 pkt_tx_count; //TX pkt Counter used for dynamic splitscan - __u32 pkt_rx_count; //RX pkt Counter used for dynamic splitscan } hdd_tx_rx_stats_t; typedef struct hdd_chip_reset_stats_s @@ -637,9 +579,6 @@ typedef struct { /**Track whether OS TX queue has been disabled.*/ v_BOOL_t txSuspended[NUM_TX_QUEUES]; - /**Track whether 3/4th of resources are used on softAP/P2P GO side. */ - v_BOOL_t vosLowResource; - /** Track QoS status of station */ v_BOOL_t isQosEnabled; @@ -702,10 +641,6 @@ typedef struct hdd_scaninfo_s /* The scan pending */ v_U32_t mScanPending; - /* Counter for mScanPending so that the scan pending - error log is not printed for more than 5 times */ - v_U32_t mScanPendingCounter; - /* Client Wait Scan Result */ v_U32_t waitScanResult; @@ -735,6 +670,7 @@ typedef struct multicast_addr_list v_U8_t isFilterApplied; v_U8_t mc_cnt; v_U8_t addr[WLAN_HDD_MAX_MC_ADDR_LIST][ETH_ALEN]; + v_U8_t filter_index[WLAN_HDD_MAX_MC_ADDR_LIST]; // IKJB42MAIN-1244, Motorola, a19091 } t_multicast_add_list; #endif @@ -747,19 +683,7 @@ struct hdd_adapter_s /** Handle to the network device */ struct net_device *dev; - -#ifdef WLAN_NS_OFFLOAD - /** IPv6 notifier callback for handling NS offload on change in IP */ - struct notifier_block ipv6_notifier; - bool ipv6_notifier_registered; - struct work_struct ipv6NotifierWorkQueue; -#endif - /** IPv4 notifier callback for handling ARP offload on change in IP */ - struct notifier_block ipv4_notifier; - bool ipv4_notifier_registered; - struct work_struct ipv4NotifierWorkQueue; - //TODO Move this to sta Ctx struct wireless_dev wdev ; struct cfg80211_scan_request *request ; @@ -806,10 +730,6 @@ struct hdd_adapter_s /* completion variable for cancel remain on channel Event */ struct completion cancel_rem_on_chan_var; - /** completion variable for PNO req callback */ - struct completion pno_comp_var; - int pno_req_status; - #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) /* completion variable for off channel remain on channel Event */ struct completion offchannel_tx_event; @@ -841,9 +761,6 @@ struct hdd_adapter_s hdd_list_t wmm_tx_queue[NUM_TX_QUEUES]; /**Track whether VOS is in a low resource state*/ v_BOOL_t isVosOutOfResource; - - /**Track whether 3/4th of resources are used on STA/p2p client side */ - v_BOOL_t isVosLowResource; /**Track whether OS TX queue has been disabled.*/ v_BOOL_t isTxSuspended[NUM_TX_QUEUES]; @@ -857,7 +774,7 @@ struct hdd_adapter_s */ /** Multiple station supports */ /** Per-station structure */ - spinlock_t staInfo_lock; //To protect access to station Info + spinlock_t staInfo_lock; //To protect access to station Info hdd_station_info_t aStaInfo[WLAN_MAX_STA_COUNT]; //v_U8_t uNumActiveStation; @@ -882,18 +799,29 @@ struct hdd_adapter_s hdd_cfg80211_state_t cfg80211State; #ifdef WLAN_FEATURE_PACKET_FILTERING + // IKJB42MAIN-1244, Motorola, a19091 - START + v_U32_t user_filter_config; + v_U32_t driver_filter_config; + v_U8_t ipv6_user_set_map : 4; + v_U8_t ipv6_code_set_map : 4; + v_SCHAR_t filter_v6_index; + // IKJB42MAIN-1244, Motorola, a19091 - END t_multicast_add_list mc_addr_list; #endif //Magic cookie for adapter sanity verification v_U32_t magic; v_BOOL_t higherDtimTransition; - /* Flag to ensure PSB is configured through framework */ - v_U8_t psbChanged; - /* UAPSD psb value configured through framework */ - v_U8_t configuredPsb; }; +typedef struct hdd_dynamic_mcbcfilter_s +{ + v_BOOL_t enableCfg; + v_U8_t mcastBcastFilterSetting; + v_BOOL_t enableSuspend; + v_U8_t mcBcFilterSuspend; +}hdd_dynamic_mcbcfilter_t; + #define WLAN_HDD_GET_STATION_CTX_PTR(pAdapter) (&(pAdapter)->sessionCtx.station) #define WLAN_HDD_GET_AP_CTX_PTR(pAdapter) (&(pAdapter)->sessionCtx.ap) #define WLAN_HDD_GET_WEXT_STATE_PTR(pAdapter) (&(pAdapter)->sessionCtx.station.WextState) @@ -958,6 +886,14 @@ struct hdd_context_s /** Pointer for nv data */ const struct firmware *nv; + #ifdef WLAN_NV_OTA_UPGRADE + /** Pointer for nv data cal */ + const struct firmware *nv_cal; + + /** Pointer for nv data reg */ + const struct firmware *nv_reg; +#endif + /** Pointer to the parent device */ struct device *parent_dev; @@ -987,11 +923,6 @@ struct hdd_context_s /* Completion variable to wlan_hdd_get_crda_regd_entry */ struct completion driver_crda_req; - /* Completion variable to indicate updation of channel */ - struct completion wiphy_channel_update_event; - - v_BOOL_t nEnableStrictRegulatoryForFCC; - v_BOOL_t isWlanSuspended; v_BOOL_t isTxThreadSuspended; @@ -1002,8 +933,6 @@ struct hdd_context_s volatile v_BOOL_t isLogpInProgress; - struct completion ssr_comp_var; - v_BOOL_t isLoadUnloadInProgress; /**Track whether driver has been suspended.*/ @@ -1039,6 +968,8 @@ struct hdd_context_s /* Number of times riva restarted */ v_U32_t hddRivaResetStats; + hdd_dynamic_mcbcfilter_t dynamic_mcbc_filter; + /* Can we allow AMP connection right now*/ v_BOOL_t isAmpAllowed; @@ -1082,22 +1013,10 @@ struct hdd_context_s /* TDLS peer connected count */ tANI_U16 connected_peer_count; tdls_scan_context_t tdls_scan_ctxt; - /* Lock to avoid race condition during TDLS operations*/ - struct mutex tdls_lock; #endif hdd_traffic_monitor_t traffic_monitor; - /* MC/BC Filter state variable - * This always contains the value that is currently - * configured - * */ - v_U8_t configuredMcastBcastFilter; - - v_U8_t sus_res_mcastbcast_filter; - - v_BOOL_t sus_res_mcastbcast_filter_valid; - /* Use below lock to protect access to isSchedScanUpdatePending * since it will be accessed in two different contexts. */ @@ -1108,14 +1027,6 @@ struct hdd_context_s // Indicates about pending sched_scan results v_BOOL_t isSchedScanUpdatePending; - /* - * TX_rx_pkt_count_timer - */ - vos_timer_t tx_rx_trafficTmr; - v_U8_t drvr_miracast; - v_U8_t issplitscan_enabled; - - v_BOOL_t btCoexModeSet; }; @@ -1170,7 +1081,7 @@ tVOS_CON_MODE hdd_get_conparam( void ); void wlan_hdd_enable_deepsleep(v_VOID_t * pVosContext); v_BOOL_t hdd_is_apps_power_collapse_allowed(hdd_context_t* pHddCtx); v_BOOL_t hdd_is_suspend_notify_allowed(hdd_context_t* pHddCtx); -void hdd_abort_mac_scan(hdd_context_t* pHddCtx, eCsrAbortReason reason); +void hdd_abort_mac_scan(hdd_context_t *pHddCtx); void wlan_hdd_set_monitor_tx_adapter( hdd_context_t *pHddCtx, hdd_adapter_t *pAdapter ); void hdd_cleanup_actionframe( hdd_context_t *pHddCtx, hdd_adapter_t *pAdapter ); v_BOOL_t is_crda_regulatory_entry_valid(void); @@ -1180,7 +1091,8 @@ void wlan_hdd_clear_concurrency_mode(hdd_context_t *pHddCtx, tVOS_CON_MODE mode) void wlan_hdd_reset_prob_rspies(hdd_adapter_t* pHostapdAdapter); void hdd_prevent_suspend(void); void hdd_allow_suspend(void); -void hdd_prevent_suspend_timeout(v_U32_t timeout); +void hdd_prevent_suspend_after_scan(long hz); //Mot IKHSS7-28961 :Empty scan results +void hdd_allow_suspend_timeout(v_U32_t timeout); bool hdd_is_ssr_required(void); void hdd_set_ssr_required(e_hdd_ssr_required value); @@ -1193,17 +1105,9 @@ void hdd_exchange_version_and_caps(hdd_context_t *pHddCtx); void hdd_set_pwrparams(hdd_context_t *pHddCtx); void hdd_reset_pwrparams(hdd_context_t *pHddCtx); int wlan_hdd_validate_context(hdd_context_t *pHddCtx); -v_BOOL_t hdd_is_valid_mac_address(const tANI_U8* pMacAddr); -void hdd_ipv4_notifier_work_queue(struct work_struct *work); #ifdef WLAN_FEATURE_PACKET_FILTERING int wlan_hdd_setIPv6Filter(hdd_context_t *pHddCtx, tANI_U8 filterType, tANI_U8 sessionId); #endif VOS_STATUS hdd_issta_p2p_clientconnected(hdd_context_t *pHddCtx); -#ifdef WLAN_NS_OFFLOAD -void hdd_ipv6_notifier_work_queue(struct work_struct *work); -#endif - -int hdd_wmmps_helper(hdd_adapter_t *pAdapter, tANI_U8 *ptr); -int wlan_hdd_scan_abort(hdd_adapter_t *pAdapter); #endif // end #if !defined( WLAN_HDD_MAIN_H ) diff --git a/drivers/staging/prima/CORE/HDD/inc/wlan_hdd_power.h b/drivers/staging/prima/CORE/HDD/inc/wlan_hdd_power.h index b0f077b6800..5b24ae8dd66 100644 --- a/drivers/staging/prima/CORE/HDD/inc/wlan_hdd_power.h +++ b/drivers/staging/prima/CORE/HDD/inc/wlan_hdd_power.h @@ -1,28 +1,43 @@ /* - * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved. - * - * Previously licensed under the ISC license by Qualcomm Atheros, Inc. - * - * - * Permission to use, copy, modify, and/or distribute this software for - * any purpose with or without fee is hereby granted, provided that the - * above copyright notice and this permission notice appear in all - * copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL - * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE - * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL - * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. -*/ + * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved. + * + * Previously licensed under the ISC license by Qualcomm Atheros, Inc. + * + * + * Permission to use, copy, modify, and/or distribute this software for + * any purpose with or without fee is hereby granted, provided that the + * above copyright notice and this permission notice appear in all + * copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE + * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ /* -* Copyright (c) 2012 Qualcomm Atheros, Inc. -* All Rights Reserved. -* Qualcomm Atheros Confidential and Proprietary. -*/ + * Copyright (c) 2012, The Linux Foundation. All rights reserved. + * + * Previously licensed under the ISC license by Qualcomm Atheros, Inc. + * + * + * Permission to use, copy, modify, and/or distribute this software for + * any purpose with or without fee is hereby granted, provided that the + * above copyright notice and this permission notice appear in all + * copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE + * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ #ifndef __WLAN_HDD_POWER_H #define __WLAN_HDD_POWER_H @@ -32,9 +47,9 @@ \file wlan_hdd_power.h \brief Linux HDD Power - Copyright 2008 (c) Qualcomm Technologies, Inc. + Copyright 2008 (c) Qualcomm, Incorporated. All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary. + Qualcomm Confidential and Proprietary. ==========================================================================*/ @@ -91,17 +106,5 @@ VOS_STATUS hdd_wlan_re_init(void); void hdd_conf_mcastbcast_filter(hdd_context_t* pHddCtx, v_BOOL_t setfilter); -VOS_STATUS hdd_conf_arp_offload(hdd_adapter_t* pAdapter, int fenable); -/* - * Function: hdd_conf_hostoffload - * Central function to configure the supported offloads, - * either enable or disable them. - */ -void hdd_conf_hostoffload(hdd_adapter_t * pAdapter, v_BOOL_t fenable); -#ifdef WLAN_FEATURE_GTK_OFFLOAD -void hdd_conf_gtk_offload(hdd_adapter_t *pAdapter, v_BOOL_t fenable); -#endif -#ifdef WLAN_NS_OFFLOAD -void hdd_conf_ns_offload(hdd_adapter_t *pAdapter, int fenable); -#endif +VOS_STATUS hdd_conf_hostarpoffload(hdd_adapter_t* pAdapter, v_BOOL_t fenable); #endif // if !defined __WLAN_QCT_DRIVER_H diff --git a/drivers/staging/prima/CORE/HDD/inc/wlan_hdd_tdls.h b/drivers/staging/prima/CORE/HDD/inc/wlan_hdd_tdls.h index f213b9c161d..c0e8bdadae8 100644 --- a/drivers/staging/prima/CORE/HDD/inc/wlan_hdd_tdls.h +++ b/drivers/staging/prima/CORE/HDD/inc/wlan_hdd_tdls.h @@ -125,7 +125,6 @@ typedef struct { } tdls_rssi_config_t; struct _hddTdlsPeer_t; - typedef struct { struct list_head peer_list[256]; hdd_adapter_t *pAdapter; @@ -159,7 +158,6 @@ typedef struct _hddTdlsPeer_t { tANI_U16 rx_pkt; vos_timer_t peerIdleTimer; vos_timer_t initiatorWaitTimeoutTimer; - tANI_BOOLEAN isForcedPeer; } hddTdlsPeer_t; typedef struct { @@ -183,7 +181,7 @@ int wlan_hdd_tdls_increment_pkt_count(hdd_adapter_t *pAdapter, u8 *mac, u8 tx); int wlan_hdd_tdls_set_sta_id(hdd_adapter_t *pAdapter, u8 *mac, u8 staId); -hddTdlsPeer_t *wlan_hdd_tdls_find_peer(hdd_adapter_t *pAdapter, u8 *mac, tANI_BOOLEAN mutexLock); +hddTdlsPeer_t *wlan_hdd_tdls_find_peer(hdd_adapter_t *pAdapter, u8 *mac); hddTdlsPeer_t *wlan_hdd_tdls_find_all_peer(hdd_context_t *pHddCtx, u8 *mac); @@ -227,7 +225,7 @@ void wlan_hdd_tdls_check_bmps(hdd_adapter_t *pAdapter); u8 wlan_hdd_tdls_is_peer_progress(hdd_adapter_t *pAdapter, u8 *mac); -hddTdlsPeer_t *wlan_hdd_tdls_is_progress(hdd_context_t *pHddCtx, u8* mac, u8 skip_self); +hddTdlsPeer_t *wlan_hdd_tdls_is_progress(hdd_context_t *pHddCtx, u8* mac, u8 skip_self, tANI_BOOLEAN mutexLock); void wlan_hdd_tdls_set_mode(hdd_context_t *pHddCtx, eTDLSSupportMode tdls_mode, @@ -262,7 +260,5 @@ void wlan_hdd_tdls_indicate_teardown(hdd_adapter_t *pAdapter, hddTdlsPeer_t *curr_peer, tANI_U16 reason); -int wlan_hdd_tdls_set_force_peer(hdd_adapter_t *pAdapter, u8 *mac, - tANI_BOOLEAN forcePeer); #endif // __HDD_TDSL_H diff --git a/drivers/staging/prima/CORE/HDD/inc/wlan_hdd_tx_rx.h b/drivers/staging/prima/CORE/HDD/inc/wlan_hdd_tx_rx.h index e2189297efe..efd8e22e983 100644 --- a/drivers/staging/prima/CORE/HDD/inc/wlan_hdd_tx_rx.h +++ b/drivers/staging/prima/CORE/HDD/inc/wlan_hdd_tx_rx.h @@ -47,6 +47,15 @@ \file wlan_hdd_tx_rx.h \brief Linux HDD Tx/RX APIs + Copyright 2008 (c) Qualcomm, Incorporated. + All Rights Reserved. +<<<<<<< HEAD:CORE/HDD/inc/wlan_hdd_tx_rx.h + Qualcomm Confidential and Proprietary. + +======= + Qualcomm Technologies Confidential and Proprietary. + +>>>>>>> 009551c... wlan: hdd: remove obsolete "WLAN_SOFTAP_FEATURE" featurization:prima/CORE/HDD/inc/wlan_hdd_tx_rx.h ==========================================================================*/ /*--------------------------------------------------------------------------- @@ -80,14 +89,6 @@ #define HDD_DEST_ADDR_OFFSET 6 #define HDD_MAC_HDR_SIZE 6 - -#define HDD_PSB_CFG_INVALID 0xFF -#define HDD_PSB_CHANGED 0xFF -#define SME_QOS_UAPSD_CFG_BK_CHANGED_MASK 0xF1 -#define SME_QOS_UAPSD_CFG_BE_CHANGED_MASK 0xF2 -#define SME_QOS_UAPSD_CFG_VI_CHANGED_MASK 0xF4 -#define SME_QOS_UAPSD_CFG_VO_CHANGED_MASK 0xF8 - /*--------------------------------------------------------------------------- Type declarations -------------------------------------------------------------------------*/ @@ -253,21 +254,4 @@ void hdd_mon_tx_mgmt_pkt(hdd_adapter_t* pAdapter); ===========================================================================*/ void hdd_mon_tx_work_queue(struct work_struct *work); -/**============================================================================ - @brief hdd_tx_rx_pkt_cnt_stat_timer_handler() - - Timer handler to check enable/disable split scan - @param pHddStaCtx : Hdd adapter - @return : VOS_STATUS_SUCCESS/VOS_STATUS_E_FAILURE - ===========================================================================*/ -void hdd_tx_rx_pkt_cnt_stat_timer_handler( void *pAdapter); - -/**========================================================================= - @brief hdd_wmm_acquire_access_required()- - Determine whether wmm ac acquire access is required - @param pAdapter : pointer to Adapter context - @param acType : AC - @return : void - ========================================================================*/ -void hdd_wmm_acquire_access_required(hdd_adapter_t *pAdapter, - WLANTL_ACEnumType acType); #endif // end #if !defined( WLAN_HDD_TX_RX_H ) diff --git a/drivers/staging/prima/CORE/HDD/inc/wlan_hdd_wext.h b/drivers/staging/prima/CORE/HDD/inc/wlan_hdd_wext.h index 7cca4af3ce0..94f91c6f476 100644 --- a/drivers/staging/prima/CORE/HDD/inc/wlan_hdd_wext.h +++ b/drivers/staging/prima/CORE/HDD/inc/wlan_hdd_wext.h @@ -56,23 +56,22 @@ #define HDD_WLAN_WMM_PARAM_HANDLE 0 #define HDD_WLAN_WMM_PARAM_TID 1 #define HDD_WLAN_WMM_PARAM_DIRECTION 2 -#define HDD_WLAN_WMM_PARAM_APSD 3 -#define HDD_WLAN_WMM_PARAM_USER_PRIORITY 4 -#define HDD_WLAN_WMM_PARAM_NOMINAL_MSDU_SIZE 5 -#define HDD_WLAN_WMM_PARAM_MAXIMUM_MSDU_SIZE 6 -#define HDD_WLAN_WMM_PARAM_MINIMUM_DATA_RATE 7 -#define HDD_WLAN_WMM_PARAM_MEAN_DATA_RATE 8 -#define HDD_WLAN_WMM_PARAM_PEAK_DATA_RATE 9 -#define HDD_WLAN_WMM_PARAM_MAX_BURST_SIZE 10 -#define HDD_WLAN_WMM_PARAM_MINIMUM_PHY_RATE 11 -#define HDD_WLAN_WMM_PARAM_SURPLUS_BANDWIDTH_ALLOWANCE 12 -#define HDD_WLAN_WMM_PARAM_SERVICE_INTERVAL 13 -#define HDD_WLAN_WMM_PARAM_SUSPENSION_INTERVAL 14 -#define HDD_WLAN_WMM_PARAM_BURST_SIZE_DEFN 15 -#define HDD_WLAN_WMM_PARAM_ACK_POLICY 16 -#define HDD_WLAN_WMM_PARAM_INACTIVITY_INTERVAL 17 -#define HDD_WLAN_WMM_PARAM_MAX_SERVICE_INTERVAL 18 -#define HDD_WLAN_WMM_PARAM_COUNT 19 +#define HDD_WLAN_WMM_PARAM_USER_PRIORITY 3 +#define HDD_WLAN_WMM_PARAM_NOMINAL_MSDU_SIZE 4 +#define HDD_WLAN_WMM_PARAM_MAXIMUM_MSDU_SIZE 5 +#define HDD_WLAN_WMM_PARAM_MINIMUM_DATA_RATE 6 +#define HDD_WLAN_WMM_PARAM_MEAN_DATA_RATE 7 +#define HDD_WLAN_WMM_PARAM_PEAK_DATA_RATE 8 +#define HDD_WLAN_WMM_PARAM_MAX_BURST_SIZE 9 +#define HDD_WLAN_WMM_PARAM_MINIMUM_PHY_RATE 10 +#define HDD_WLAN_WMM_PARAM_SURPLUS_BANDWIDTH_ALLOWANCE 11 +#define HDD_WLAN_WMM_PARAM_SERVICE_INTERVAL 12 +#define HDD_WLAN_WMM_PARAM_SUSPENSION_INTERVAL 13 +#define HDD_WLAN_WMM_PARAM_BURST_SIZE_DEFN 14 +#define HDD_WLAN_WMM_PARAM_ACK_POLICY 15 +#define HDD_WLAN_WMM_PARAM_INACTIVITY_INTERVAL 16 +#define HDD_WLAN_WMM_PARAM_MAX_SERVICE_INTERVAL 17 +#define HDD_WLAN_WMM_PARAM_COUNT 18 #define MHZ 6 @@ -426,6 +425,10 @@ VOS_STATUS wlan_hdd_get_roam_rssi(hdd_adapter_t *pAdapter, v_S7_t *rssi_value); #ifdef WLAN_FEATURE_PACKET_FILTERING void wlan_hdd_set_mc_addr_list(hdd_adapter_t *pAdapter, v_U8_t set); #endif +// IKJB42MAIN-1244, Motorola, a19091 - START +int wlan_hdd_update_v6_filters(hdd_adapter_t *pAdapter, v_U8_t set); +int wlan_hdd_set_v6_filter(void *pAdapter, v_U8_t set, v_U8_t userSet); +// IKJB42MAIN-1244, Motorola, a19091 - END #endif // __WEXT_IW_H__ diff --git a/drivers/staging/prima/CORE/HDD/inc/wlan_hdd_wmm.h b/drivers/staging/prima/CORE/HDD/inc/wlan_hdd_wmm.h index 5d902923a61..a51a4b60cf6 100644 --- a/drivers/staging/prima/CORE/HDD/inc/wlan_hdd_wmm.h +++ b/drivers/staging/prima/CORE/HDD/inc/wlan_hdd_wmm.h @@ -404,14 +404,5 @@ hdd_wlan_wmm_status_e hdd_wmm_delts( hdd_adapter_t* pAdapter, ===========================================================================*/ hdd_wlan_wmm_status_e hdd_wmm_checkts( hdd_adapter_t* pAdapter, v_U32_t handle ); -/**============================================================================ - @brief hdd_wmm_adapter_clear() - Function which will clear the WMM status - of all ACs - @param pAdapter : [in] pointer to adapter context - - @return : VOS_STATUS_SUCCESS if succssful - : other values if failure - ===========================================================================*/ -VOS_STATUS hdd_wmm_adapter_clear( hdd_adapter_t *pAdapter ); #endif /* #ifndef _WLAN_HDD_WMM_H */ diff --git a/drivers/staging/prima/CORE/HDD/src/wlan_hdd_assoc.c b/drivers/staging/prima/CORE/HDD/src/wlan_hdd_assoc.c index bf0d52cd98b..fd42267f8f7 100644 --- a/drivers/staging/prima/CORE/HDD/src/wlan_hdd_assoc.c +++ b/drivers/staging/prima/CORE/HDD/src/wlan_hdd_assoc.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2014, The Linux Foundation. All rights reserved. + * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -123,6 +123,11 @@ static eHalStatus hdd_RoamSetKeyCompleteHandler( hdd_adapter_t *pAdapter, tANI_U32 roamId, eRoamCmdStatus roamStatus, eCsrRoamResult roamResult ); +#ifdef WLAN_FEATURE_PACKET_FILTERING +extern int wlan_hdd_update_v6_filters(hdd_adapter_t *pAdapter, v_U8_t set); // IKJB42MAIN-1244, Motorola, a19091 +#endif + +void hdd_ResetCountryCodeAfterDisAssoc(hdd_adapter_t *pAdapter); static eHalStatus hdd_RoamSetKeyCompleteHandler( hdd_adapter_t *pAdapter, tCsrRoamInfo *pRoamInfo, @@ -839,8 +844,8 @@ static eHalStatus hdd_DisConnectHandler( hdd_adapter_t *pAdapter, tCsrRoamInfo * } } } + - hdd_wmm_adapter_clear(pAdapter); //We should clear all sta register with TL, for now, only one. vstatus = hdd_roamDeregisterSTA( pAdapter, pHddStaCtx->conn_info.staId [0] ); if ( !VOS_IS_STATUS_SUCCESS(vstatus ) ) @@ -886,8 +891,7 @@ static VOS_STATUS hdd_roamRegisterSTA( hdd_adapter_t *pAdapter, v_BOOL_t fConnected; hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); - hdd_config_t *cfg_param = pHddCtx->cfg_ini; - + // Get the Station ID from the one saved during the assocation. staDesc.ucSTAId = staId; @@ -1003,14 +1007,6 @@ static VOS_STATUS hdd_roamRegisterSTA( hdd_adapter_t *pAdapter, return vosStatus; } - if ( cfg_param->dynSplitscan && - ( VOS_TIMER_STATE_RUNNING != - vos_timer_getCurrentState(&pHddCtx->tx_rx_trafficTmr))) - { - vos_timer_start(&pHddCtx->tx_rx_trafficTmr, - cfg_param->trafficMntrTmrForSplitScan); - } - // if (WPA), tell TL to go to 'connected' and after keys come to the driver, // then go to 'authenticated'. For all other authentication types // (those that donot require upper layer authentication) we can put @@ -1151,6 +1147,11 @@ static eHalStatus hdd_AssociationCompletionHandler( hdd_adapter_t *pAdapter, tCs } #endif /* FEATURE_WLAN_WAPI */ + // IKJB42MAIN-1244, Motorola, a19091 - START + if(pAdapter->device_mode == WLAN_HDD_INFRA_STATION) + wlan_hdd_update_v6_filters(pAdapter, (pAdapter->mc_addr_list.mc_cnt==0)?1:0); + // IKJB42MAIN-1244, Motorola, a19091 - END + // indicate 'connect' status to userspace hdd_SendAssociationEvent(dev,pRoamInfo); @@ -1194,11 +1195,7 @@ static eHalStatus hdd_AssociationCompletionHandler( hdd_adapter_t *pAdapter, tCs ft_carrier_on = TRUE; } #endif - /* Check for STAID */ - if( (WLAN_MAX_STA_COUNT + 3) > pRoamInfo->staId ) - pHddCtx->sta_to_adapter[pRoamInfo->staId] = pAdapter; - else - hddLog(VOS_TRACE_LEVEL_ERROR, "%s: Wrong Staid: %d", __func__, pRoamInfo->staId); + pHddCtx->sta_to_adapter[pRoamInfo->staId] = pAdapter; #ifdef FEATURE_WLAN_TDLS wlan_hdd_tdls_connection_callback(pAdapter); @@ -1493,11 +1490,6 @@ static eHalStatus hdd_AssociationCompletionHandler( hdd_adapter_t *pAdapter, tCs /*Clear the roam profile*/ hdd_clearRoamProfileIe( pAdapter ); - if (pRoamInfo) - { - WLANTL_AssocFailed(pRoamInfo->staId); - } - netif_tx_disable(dev); netif_carrier_off(dev); } @@ -1878,8 +1870,6 @@ VOS_STATUS hdd_roamRegisterTDLSSTA( hdd_adapter_t *pAdapter, WLAN_STADescType staDesc = {0}; eCsrEncryptionType connectedCipherAlgo = eCSR_ENCRYPT_TYPE_UNKNOWN; v_BOOL_t fConnected = FALSE; - hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); - hdd_config_t *cfg_param = pHddCtx->cfg_ini; fConnected = hdd_connGetConnectedCipherAlgo( pHddStaCtx, &connectedCipherAlgo ); if (!fConnected) { @@ -1947,16 +1937,9 @@ VOS_STATUS hdd_roamRegisterTDLSSTA( hdd_adapter_t *pAdapter, VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "%s: WLANTL_RegisterSTAClient() failed to register. \ Status= %d [0x%08lX]", __func__, vosStatus, vosStatus ); - return vosStatus; - } - - if ( cfg_param->dynSplitscan && - ( VOS_TIMER_STATE_RUNNING != - vos_timer_getCurrentState(&pHddCtx->tx_rx_trafficTmr)) ) - { - vos_timer_start(&pHddCtx->tx_rx_trafficTmr, - cfg_param->trafficMntrTmrForSplitScan); - } + return vosStatus; + } + return( vosStatus ); } @@ -1992,7 +1975,7 @@ eHalStatus hdd_RoamTdlsStatusUpdateHandler(hdd_adapter_t *pAdapter, tANI_U8 staIdx; #ifdef WLAN_FEATURE_TDLS_DEBUG - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, ("hdd_tdlsStatusUpdate: %s staIdx %d %02x:%02x:%02x:%02x:%02x:%02x \n"), roamResult == eCSR_ROAM_RESULT_ADD_TDLS_PEER ? "ADD_TDLS_PEER" : roamResult == eCSR_ROAM_RESULT_DELETE_TDLS_PEER ? "DEL_TDLS_PEER" : @@ -2099,7 +2082,7 @@ eHalStatus hdd_RoamTdlsStatusUpdateHandler(hdd_adapter_t *pAdapter, VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, ("HDD: del STA IDX = %x"), pRoamInfo->staId) ; - curr_peer = wlan_hdd_tdls_find_peer(pAdapter, pRoamInfo->peerMac, TRUE); + curr_peer = wlan_hdd_tdls_find_peer(pAdapter, pRoamInfo->peerMac); if (NULL != curr_peer && TDLS_IS_CONNECTED(curr_peer)) { hdd_roamDeregisterTDLSSTA ( pAdapter, pRoamInfo->staId ); @@ -2128,7 +2111,7 @@ eHalStatus hdd_RoamTdlsStatusUpdateHandler(hdd_adapter_t *pAdapter, __func__, pRoamInfo->reasonCode); #ifdef CONFIG_TDLS_IMPLICIT - curr_peer = wlan_hdd_tdls_find_peer(pAdapter, pRoamInfo->peerMac, TRUE); + curr_peer = wlan_hdd_tdls_find_peer(pAdapter, pRoamInfo->peerMac); wlan_hdd_tdls_indicate_teardown(pAdapter, curr_peer, pRoamInfo->reasonCode); #endif status = eHAL_STATUS_SUCCESS ; @@ -2177,36 +2160,7 @@ eHalStatus hdd_RoamTdlsStatusUpdateHandler(hdd_adapter_t *pAdapter, } #endif -static void iw_full_power_cbfn (void *pContext, eHalStatus status) -{ - hdd_adapter_t *pAdapter = (hdd_adapter_t *)pContext; - hdd_context_t *pHddCtx = NULL; - int ret; - - if ((NULL == pAdapter) || (WLAN_HDD_ADAPTER_MAGIC != pAdapter->magic)) - { - hddLog(VOS_TRACE_LEVEL_ERROR, - "%s: Bad param, pAdapter [%p]", - __func__, pAdapter); - return; - } - - pHddCtx = WLAN_HDD_GET_CTX(pAdapter); - ret = wlan_hdd_validate_context(pHddCtx); - if (0 != ret) - { - hddLog(VOS_TRACE_LEVEL_ERROR, - "%s: HDD context is not valid (%d)", __func__, ret); - return; - } - - if (pHddCtx->cfg_ini->fIsBmpsEnabled) - { - sme_RequestBmps(WLAN_HDD_GET_HAL_CTX(pAdapter), NULL, NULL); - } -} - -eHalStatus hdd_smeRoamCallback( void *pContext, tCsrRoamInfo *pRoamInfo, tANI_U32 roamId, +eHalStatus hdd_smeRoamCallback( void *pContext, tCsrRoamInfo *pRoamInfo, tANI_U32 roamId, eRoamCmdStatus roamStatus, eCsrRoamResult roamResult ) { eHalStatus halStatus = eHAL_STATUS_SUCCESS; @@ -2214,7 +2168,6 @@ eHalStatus hdd_smeRoamCallback( void *pContext, tCsrRoamInfo *pRoamInfo, tANI_U3 hdd_wext_state_t *pWextState = NULL; hdd_station_ctx_t *pHddStaCtx = NULL; VOS_STATUS status = VOS_STATUS_SUCCESS; - hdd_context_t *pHddCtx = NULL; VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "CSR Callback: status= %d result= %d roamID=%ld", @@ -2230,9 +2183,8 @@ eHalStatus hdd_smeRoamCallback( void *pContext, tCsrRoamInfo *pRoamInfo, tANI_U3 pWextState = WLAN_HDD_GET_WEXT_STATE_PTR(pAdapter); pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); - pHddCtx = WLAN_HDD_GET_CTX(pAdapter); - if ((NULL == pWextState) || (NULL == pHddStaCtx) || (NULL == pHddCtx)) + if ((NULL == pWextState) || (NULL == pHddStaCtx)) { VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "invalid WEXT state or HDD station context"); @@ -2336,34 +2288,28 @@ eHalStatus hdd_smeRoamCallback( void *pContext, tCsrRoamInfo *pRoamInfo, tANI_U3 case eCSR_ROAM_LOSTLINK: case eCSR_ROAM_DISASSOCIATED: { + hdd_context_t* pHddCtx = (hdd_context_t*)pAdapter->pHddCtx; VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "****eCSR_ROAM_DISASSOCIATED****"); halStatus = hdd_DisConnectHandler( pAdapter, pRoamInfo, roamId, roamStatus, roamResult ); /* Check if Mcast/Bcast Filters are set, if yes clear the filters here */ - if (pHddCtx->hdd_mcastbcast_filter_set == TRUE) + if ((WLAN_HDD_GET_CTX(pAdapter))->hdd_mcastbcast_filter_set == TRUE) { + hdd_conf_mcastbcast_filter((WLAN_HDD_GET_CTX(pAdapter)), FALSE); + (WLAN_HDD_GET_CTX(pAdapter))->hdd_mcastbcast_filter_set = FALSE; + } +#ifdef WLAN_FEATURE_PACKET_FILTERING + if (pHddCtx->cfg_ini->isMcAddrListFilter) { - hdd_conf_mcastbcast_filter(pHddCtx, FALSE); - - if (VOS_TRUE == pHddCtx->sus_res_mcastbcast_filter_valid) { - pHddCtx->configuredMcastBcastFilter = - pHddCtx->sus_res_mcastbcast_filter; - pHddCtx->sus_res_mcastbcast_filter_valid = VOS_FALSE; + /*Multicast addr filtering is enabled*/ + if (pAdapter->mc_addr_list.isFilterApplied) + { + /*Filter applied during suspend mode*/ + /*Clear it here*/ + wlan_hdd_set_mc_addr_list(pAdapter, FALSE); } - - hddLog(VOS_TRACE_LEVEL_INFO, - "offload: disassociation happening, restoring configuredMcastBcastFilter"); - hddLog(VOS_TRACE_LEVEL_INFO,"McastBcastFilter = %d", - pHddCtx->configuredMcastBcastFilter); - hddLog(VOS_TRACE_LEVEL_INFO, - "offload: already called mcastbcast filter"); - (WLAN_HDD_GET_CTX(pAdapter))->hdd_mcastbcast_filter_set = FALSE; } -#ifdef WLAN_FEATURE_PACKET_FILTERING - /* Call to clear any MC Addr List filter applied after - * successful connection. - */ - wlan_hdd_set_mc_addr_list(pAdapter, FALSE); #endif + } break; case eCSR_ROAM_IBSS_LEAVE: @@ -2393,12 +2339,6 @@ eHalStatus hdd_smeRoamCallback( void *pContext, tCsrRoamInfo *pRoamInfo, tANI_U3 } else { - // To Do - address probable memory leak with WEP encryption upon successful association - if (eCSR_ROAM_RESULT_ASSOCIATED != roamResult) - { - //Clear saved connection information in HDD - hdd_connRemoveConnectInfo( WLAN_HDD_GET_STATION_CTX_PTR(pAdapter) ); - } halStatus = hdd_AssociationCompletionHandler( pAdapter, pRoamInfo, roamId, roamStatus, roamResult ); } @@ -2448,9 +2388,11 @@ eHalStatus hdd_smeRoamCallback( void *pContext, tCsrRoamInfo *pRoamInfo, tANI_U3 { hddLog( LOGE, FL("Not expected: device is already in BMPS mode, Exit & Enter BMPS again!")); - sme_RequestFullPower(WLAN_HDD_GET_HAL_CTX(pAdapter), - iw_full_power_cbfn, pAdapter, - eSME_FULL_PWR_NEEDED_BY_HDD); + /* put the device into full power */ + wlan_hdd_enter_bmps(pAdapter, DRIVER_POWER_MODE_ACTIVE); + + /* put the device back into BMPS */ + wlan_hdd_enter_bmps(pAdapter, DRIVER_POWER_MODE_AUTO); } } halStatus = hdd_RoamSetKeyCompleteHandler( pAdapter, pRoamInfo, roamId, roamStatus, roamResult ); @@ -2470,45 +2412,26 @@ eHalStatus hdd_smeRoamCallback( void *pContext, tCsrRoamInfo *pRoamInfo, tANI_U3 } break; #endif - +//Begin fjdw67 Motorola, IKJB42MAIN-6385 - LFR roaming instrumentation #ifdef FEATURE_WLAN_LFR_METRICS - case eCSR_ROAM_PREAUTH_INIT_NOTIFY: - /* This event is to notify pre-auth initiation */ - if (VOS_STATUS_SUCCESS != - wlan_hdd_cfg80211_roam_metrics_preauth(pAdapter, pRoamInfo)) - { - halStatus = eHAL_STATUS_FAILURE; - } - break; - case eCSR_ROAM_PREAUTH_STATUS_SUCCESS: - /* This event will notify pre-auth completion in case of success */ - if (VOS_STATUS_SUCCESS != - wlan_hdd_cfg80211_roam_metrics_preauth_status(pAdapter, - pRoamInfo, 1)) - { - halStatus = eHAL_STATUS_FAILURE; - } - break; - case eCSR_ROAM_PREAUTH_STATUS_FAILURE: - /* This event will notify pre-auth completion in case of failure. */ - if (VOS_STATUS_SUCCESS != - wlan_hdd_cfg80211_roam_metrics_preauth_status(pAdapter, - pRoamInfo, 0)) - { - halStatus = eHAL_STATUS_FAILURE; - } - break; - case eCSR_ROAM_HANDOVER_SUCCESS: - /* This event is to notify handover success. - It will be only invoked on success */ - if (VOS_STATUS_SUCCESS != - wlan_hdd_cfg80211_roam_metrics_handover(pAdapter, pRoamInfo)) - { - halStatus = eHAL_STATUS_FAILURE; - } - break; + case eCSR_ROAM_PREAUTH_INIT_NOTIFY: + /* This event is to notify pre-auth initiation */ + halStatus = wlan_hdd_cfg80211_roam_metrics_preauth(pAdapter, pRoamInfo); + break; + case eCSR_ROAM_PREAUTH_STATUS_SUCCESS: + /* This event will notify pre-auth completion in case of success */ + halStatus = wlan_hdd_cfg80211_roam_metrics_preauth_status(pAdapter, pRoamInfo, 1); + break; + case eCSR_ROAM_PREAUTH_STATUS_FAILURE: + /* This event will notify pre-auth completion in case of failure. */ + halStatus = wlan_hdd_cfg80211_roam_metrics_preauth_status(pAdapter,pRoamInfo, 0); + break; + case eCSR_ROAM_HANDOVER_SUCCESS: + /* This event is to notify handover success. It will be only invoked on success */ + halStatus = wlan_hdd_cfg80211_roam_metrics_handover(pAdapter, pRoamInfo); + break; #endif - +//End fjdw67 Motorola, IKJB42MAIN-6385 case eCSR_ROAM_INDICATE_MGMT_FRAME: hdd_indicateMgmtFrame( pAdapter, pRoamInfo->nFrameLength, diff --git a/drivers/staging/prima/CORE/HDD/src/wlan_hdd_cfg.c b/drivers/staging/prima/CORE/HDD/src/wlan_hdd_cfg.c index f17c245c8da..5ff2ad74f32 100644 --- a/drivers/staging/prima/CORE/HDD/src/wlan_hdd_cfg.c +++ b/drivers/staging/prima/CORE/HDD/src/wlan_hdd_cfg.c @@ -1601,13 +1601,6 @@ REG_TABLE_ENTRY g_registry_table[] = CFG_ENABLE_HOST_ARPOFFLOAD_MIN, CFG_ENABLE_HOST_ARPOFFLOAD_MAX ), - REG_VARIABLE( CFG_ENABLE_HOST_NSOFFLOAD_NAME, WLAN_PARAM_Integer, - hdd_config_t, fhostNSOffload, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_ENABLE_HOST_NSOFFLOAD_DEFAULT, - CFG_ENABLE_HOST_NSOFFLOAD_MIN, - CFG_ENABLE_HOST_NSOFFLOAD_MAX ), - REG_VARIABLE( CFG_QOS_WMM_TS_INFO_ACK_POLICY_NAME , WLAN_PARAM_HexInteger, hdd_config_t, tsInfoAckPolicy, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, @@ -1743,13 +1736,6 @@ REG_TABLE_ENTRY g_registry_table[] = CFG_VOS_TRACE_ENABLE_MIN, CFG_VOS_TRACE_ENABLE_MAX ), - REG_VARIABLE( CFG_VOS_TRACE_ENABLE_PMC_NAME, WLAN_PARAM_Integer, - hdd_config_t, vosTraceEnablePMC, - VAR_FLAGS_OPTIONAL, - CFG_VOS_TRACE_ENABLE_DEFAULT, - CFG_VOS_TRACE_ENABLE_MIN, - CFG_VOS_TRACE_ENABLE_MAX ), - REG_VARIABLE( CFG_VOS_TRACE_ENABLE_WDA_NAME, WLAN_PARAM_Integer, hdd_config_t, vosTraceEnableWDA, VAR_FLAGS_OPTIONAL, @@ -1815,42 +1801,42 @@ REG_TABLE_ENTRY g_registry_table[] = CFG_WDI_TRACE_ENABLE_MIN, CFG_WDI_TRACE_ENABLE_MAX ), - REG_VARIABLE( CFG_TELE_BCN_TRANS_LI_NAME, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_TELE_BCN_TRANS_LI_NAME, WLAN_PARAM_Integer, hdd_config_t, nTeleBcnTransListenInterval, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_TELE_BCN_TRANS_LI_DEFAULT, CFG_TELE_BCN_TRANS_LI_MIN, CFG_TELE_BCN_TRANS_LI_MAX ), - REG_VARIABLE( CFG_TELE_BCN_TRANS_LI_NUM_IDLE_BCNS_NAME, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_TELE_BCN_TRANS_LI_NUM_IDLE_BCNS_NAME, WLAN_PARAM_Integer, hdd_config_t, nTeleBcnTransLiNumIdleBeacons, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_TELE_BCN_TRANS_LI_NUM_IDLE_BCNS_DEFAULT, CFG_TELE_BCN_TRANS_LI_NUM_IDLE_BCNS_MIN, CFG_TELE_BCN_TRANS_LI_NUM_IDLE_BCNS_MAX ), - REG_VARIABLE( CFG_TELE_BCN_MAX_LI_NAME, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_TELE_BCN_MAX_LI_NAME, WLAN_PARAM_Integer, hdd_config_t, nTeleBcnMaxListenInterval, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_TELE_BCN_MAX_LI_DEFAULT, CFG_TELE_BCN_MAX_LI_MIN, CFG_TELE_BCN_MAX_LI_MAX ), - REG_VARIABLE( CFG_TELE_BCN_MAX_LI_NUM_IDLE_BCNS_NAME, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_TELE_BCN_MAX_LI_NUM_IDLE_BCNS_NAME, WLAN_PARAM_Integer, hdd_config_t, nTeleBcnMaxLiNumIdleBeacons, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_TELE_BCN_MAX_LI_NUM_IDLE_BCNS_DEFAULT, CFG_TELE_BCN_MAX_LI_NUM_IDLE_BCNS_MIN, CFG_TELE_BCN_MAX_LI_NUM_IDLE_BCNS_MAX ), - REG_VARIABLE( CFG_BCN_EARLY_TERM_WAKE_NAME, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_BCN_EARLY_TERM_WAKE_NAME, WLAN_PARAM_Integer, hdd_config_t, bcnEarlyTermWakeInterval, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_BCN_EARLY_TERM_WAKE_DEFAULT, CFG_BCN_EARLY_TERM_WAKE_MIN, CFG_BCN_EARLY_TERM_WAKE_MAX ), - REG_VARIABLE( CFG_AP_DATA_AVAIL_POLL_PERIOD_NAME, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_AP_DATA_AVAIL_POLL_PERIOD_NAME, WLAN_PARAM_Integer, hdd_config_t, apDataAvailPollPeriodInMs, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_AP_DATA_AVAIL_POLL_PERIOD_DEFAULT, @@ -1864,42 +1850,42 @@ REG_TABLE_ENTRY g_registry_table[] = CFG_ENABLE_CLOSE_LOOP_MIN, CFG_ENABLE_CLOSE_LOOP_MAX ), - REG_VARIABLE( CFG_ENABLE_BYPASS_11D_NAME, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_ENABLE_BYPASS_11D_NAME, WLAN_PARAM_Integer, hdd_config_t, enableBypass11d, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_ENABLE_BYPASS_11D_DEFAULT, CFG_ENABLE_BYPASS_11D_MIN, CFG_ENABLE_BYPASS_11D_MAX ), - REG_VARIABLE( CFG_ENABLE_DFS_CHNL_SCAN_NAME, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_ENABLE_DFS_CHNL_SCAN_NAME, WLAN_PARAM_Integer, hdd_config_t, enableDFSChnlScan, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_ENABLE_DFS_CHNL_SCAN_DEFAULT, CFG_ENABLE_DFS_CHNL_SCAN_MIN, CFG_ENABLE_DFS_CHNL_SCAN_MAX ), - REG_VARIABLE( CFG_ENABLE_DYNAMIC_DTIM_NAME, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_ENABLE_DYNAMIC_DTIM_NAME, WLAN_PARAM_Integer, hdd_config_t, enableDynamicDTIM, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_ENABLE_DYNAMIC_DTIM_DEFAULT, CFG_ENABLE_DYNAMIC_DTIM_MIN, CFG_ENABLE_DYNAMIC_DTIM_MAX ), - REG_VARIABLE( CFG_ENABLE_AUTOMATIC_TX_POWER_CONTROL_NAME, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_ENABLE_AUTOMATIC_TX_POWER_CONTROL_NAME, WLAN_PARAM_Integer, hdd_config_t, enableAutomaticTxPowerControl, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_ENABLE_AUTOMATIC_TX_POWER_CONTROL_DEFAULT, CFG_ENABLE_AUTOMATIC_TX_POWER_CONTROL_MIN, CFG_ENABLE_AUTOMATIC_TX_POWER_CONTROL_MAX ), - REG_VARIABLE( CFG_SHORT_GI_40MHZ_NAME, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_SHORT_GI_40MHZ_NAME, WLAN_PARAM_Integer, hdd_config_t, ShortGI40MhzEnable, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_SHORT_GI_40MHZ_DEFAULT, CFG_SHORT_GI_40MHZ_MIN, CFG_SHORT_GI_40MHZ_MAX ), - REG_DYNAMIC_VARIABLE( CFG_REPORT_MAX_LINK_SPEED, WLAN_PARAM_Integer, + REG_DYNAMIC_VARIABLE( CFG_REPORT_MAX_LINK_SPEED, WLAN_PARAM_Integer, hdd_config_t, reportMaxLinkSpeed, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_REPORT_MAX_LINK_SPEED_DEFAULT, @@ -1907,7 +1893,7 @@ REG_TABLE_ENTRY g_registry_table[] = CFG_REPORT_MAX_LINK_SPEED_MAX, NULL, 0 ), - REG_DYNAMIC_VARIABLE( CFG_LINK_SPEED_RSSI_HIGH, WLAN_PARAM_SignedInteger, + REG_DYNAMIC_VARIABLE( CFG_LINK_SPEED_RSSI_HIGH, WLAN_PARAM_SignedInteger, hdd_config_t, linkSpeedRssiHigh, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_LINK_SPEED_RSSI_HIGH_DEFAULT, @@ -1915,7 +1901,7 @@ REG_TABLE_ENTRY g_registry_table[] = CFG_LINK_SPEED_RSSI_HIGH_MAX, NULL, 0 ), - REG_DYNAMIC_VARIABLE( CFG_LINK_SPEED_RSSI_MID, WLAN_PARAM_SignedInteger, + REG_DYNAMIC_VARIABLE( CFG_LINK_SPEED_RSSI_MID, WLAN_PARAM_SignedInteger, hdd_config_t, linkSpeedRssiMid, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_LINK_SPEED_RSSI_MID_DEFAULT, @@ -1923,7 +1909,7 @@ REG_TABLE_ENTRY g_registry_table[] = CFG_LINK_SPEED_RSSI_MID_MAX, NULL, 0 ), - REG_DYNAMIC_VARIABLE( CFG_LINK_SPEED_RSSI_LOW, WLAN_PARAM_SignedInteger, + REG_DYNAMIC_VARIABLE( CFG_LINK_SPEED_RSSI_LOW, WLAN_PARAM_SignedInteger, hdd_config_t, linkSpeedRssiLow, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_LINK_SPEED_RSSI_LOW_DEFAULT, @@ -1932,7 +1918,7 @@ REG_TABLE_ENTRY g_registry_table[] = NULL, 0 ), #if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR) - REG_DYNAMIC_VARIABLE( CFG_ROAM_PREFER_5GHZ, WLAN_PARAM_Integer, + REG_DYNAMIC_VARIABLE( CFG_ROAM_PREFER_5GHZ, WLAN_PARAM_Integer, hdd_config_t, nRoamPrefer5GHz, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_ROAM_PREFER_5GHZ_DEFAULT, @@ -1940,7 +1926,7 @@ REG_TABLE_ENTRY g_registry_table[] = CFG_ROAM_PREFER_5GHZ_MAX, cbNotifySetRoamPrefer5GHz, 0 ), - REG_DYNAMIC_VARIABLE( CFG_ROAM_INTRA_BAND, WLAN_PARAM_Integer, + REG_DYNAMIC_VARIABLE( CFG_ROAM_INTRA_BAND, WLAN_PARAM_Integer, hdd_config_t, nRoamIntraBand, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_ROAM_INTRA_BAND_DEFAULT, @@ -1966,42 +1952,50 @@ REG_TABLE_ENTRY g_registry_table[] = #endif - REG_VARIABLE( CFG_P2P_DEVICE_ADDRESS_ADMINISTRATED_NAME, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_P2P_DEVICE_ADDRESS_ADMINISTRATED_NAME, WLAN_PARAM_Integer, hdd_config_t, isP2pDeviceAddrAdministrated, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_P2P_DEVICE_ADDRESS_ADMINISTRATED_DEFAULT, CFG_P2P_DEVICE_ADDRESS_ADMINISTRATED_MIN, CFG_P2P_DEVICE_ADDRESS_ADMINISTRATED_MAX ), - REG_VARIABLE( CFG_ENABLE_MCC_ENABLED_NAME, WLAN_PARAM_Integer, +REG_VARIABLE( CFG_ENABLE_MCC_ENABLED_NAME, WLAN_PARAM_Integer, hdd_config_t, enableMCC, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_ENABLE_MCC_ENABLED_DEFAULT, CFG_ENABLE_MCC_ENABLED_MIN, CFG_ENABLE_MCC_ENABLED_MAX ), - REG_VARIABLE( CFG_ALLOW_MCC_GO_DIFF_BI_NAME, WLAN_PARAM_Integer, +REG_VARIABLE( CFG_ALLOW_MCC_GO_DIFF_BI_NAME, WLAN_PARAM_Integer, hdd_config_t, allowMCCGODiffBI, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_ALLOW_MCC_GO_DIFF_BI_DEFAULT, CFG_ALLOW_MCC_GO_DIFF_BI_MIN, CFG_ALLOW_MCC_GO_DIFF_BI_MAX ), - REG_VARIABLE( CFG_THERMAL_MIGRATION_ENABLE_NAME, WLAN_PARAM_Integer, +REG_VARIABLE( CFG_THERMAL_MIGRATION_ENABLE_NAME, WLAN_PARAM_Integer, hdd_config_t, thermalMitigationEnable, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_THERMAL_MIGRATION_ENABLE_DEFAULT, CFG_THERMAL_MIGRATION_ENABLE_MIN, CFG_THERMAL_MIGRATION_ENABLE_MAX ), +#ifdef WLAN_FEATURE_PACKET_FILTERING + REG_VARIABLE( CFG_MC_ADDR_LIST_FILTER_NAME, WLAN_PARAM_Integer, + hdd_config_t, isMcAddrListFilter, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_MC_ADDR_LIST_FILTER_DEFAULT, + CFG_MC_ADDR_LIST_FILTER_MIN, + CFG_MC_ADDR_LIST_FILTER_MAX ), +#endif - REG_VARIABLE( CFG_ENABLE_MODULATED_DTIM_NAME, WLAN_PARAM_Integer, +REG_VARIABLE( CFG_ENABLE_MODULATED_DTIM_NAME, WLAN_PARAM_Integer, hdd_config_t, enableModulatedDTIM, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_ENABLE_MODULATED_DTIM_DEFAULT, CFG_ENABLE_MODULATED_DTIM_MIN, CFG_ENABLE_MODULATED_DTIM_MAX ), - REG_VARIABLE( CFG_MC_ADDR_LIST_ENABLE_NAME, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_MC_ADDR_LIST_ENABLE_NAME, WLAN_PARAM_Integer, hdd_config_t, fEnableMCAddrList, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_MC_ADDR_LIST_ENABLE_DEFAULT, @@ -2009,21 +2003,21 @@ REG_TABLE_ENTRY g_registry_table[] = CFG_MC_ADDR_LIST_ENABLE_MAX ), #ifdef WLAN_FEATURE_11AC - REG_VARIABLE( CFG_VHT_CHANNEL_WIDTH, WLAN_PARAM_Integer, +REG_VARIABLE( CFG_VHT_CHANNEL_WIDTH, WLAN_PARAM_Integer, hdd_config_t, vhtChannelWidth, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK, CFG_VHT_CHANNEL_WIDTH_DEFAULT, CFG_VHT_CHANNEL_WIDTH_MIN, CFG_VHT_CHANNEL_WIDTH_MAX), - REG_VARIABLE( CFG_VHT_ENABLE_RX_MCS_8_9, WLAN_PARAM_Integer, +REG_VARIABLE( CFG_VHT_ENABLE_RX_MCS_8_9, WLAN_PARAM_Integer, hdd_config_t, vhtRxMCS, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK, CFG_VHT_ENABLE_RX_MCS_8_9_DEFAULT, CFG_VHT_ENABLE_RX_MCS_8_9_MIN, CFG_VHT_ENABLE_RX_MCS_8_9_MAX), - REG_VARIABLE( CFG_VHT_ENABLE_TX_MCS_8_9, WLAN_PARAM_Integer, +REG_VARIABLE( CFG_VHT_ENABLE_TX_MCS_8_9, WLAN_PARAM_Integer, hdd_config_t, vhtTxMCS, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK, CFG_VHT_ENABLE_TX_MCS_8_9_DEFAULT, @@ -2031,141 +2025,134 @@ REG_TABLE_ENTRY g_registry_table[] = CFG_VHT_ENABLE_TX_MCS_8_9_MAX), #endif - REG_VARIABLE( CFG_ENABLE_FIRST_SCAN_2G_ONLY_NAME, WLAN_PARAM_Integer, +REG_VARIABLE( CFG_ENABLE_FIRST_SCAN_2G_ONLY_NAME, WLAN_PARAM_Integer, hdd_config_t, enableFirstScan2GOnly, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_ENABLE_FIRST_SCAN_2G_ONLY_DEFAULT, CFG_ENABLE_FIRST_SCAN_2G_ONLY_MIN, CFG_ENABLE_FIRST_SCAN_2G_ONLY_MAX ), - REG_VARIABLE( CFG_ENABLE_SKIP_DFS_IN_P2P_SEARCH_NAME, WLAN_PARAM_Integer, +REG_VARIABLE( CFG_ENABLE_SKIP_DFS_IN_P2P_SEARCH_NAME, WLAN_PARAM_Integer, hdd_config_t, skipDfsChnlInP2pSearch, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_ENABLE_SKIP_DFS_IN_P2P_SEARCH_DEFAULT, CFG_ENABLE_SKIP_DFS_IN_P2P_SEARCH_MIN, CFG_ENABLE_SKIP_DFS_IN_P2P_SEARCH_MAX ), - REG_VARIABLE( CFG_IGNORE_DYNAMIC_DTIM_IN_P2P_MODE_NAME, WLAN_PARAM_Integer, +REG_VARIABLE( CFG_IGNORE_DYNAMIC_DTIM_IN_P2P_MODE_NAME, WLAN_PARAM_Integer, hdd_config_t, ignoreDynamicDtimInP2pMode, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_IGNORE_DYNAMIC_DTIM_IN_P2P_MODE_DEFAULT, CFG_IGNORE_DYNAMIC_DTIM_IN_P2P_MODE_MIN, CFG_IGNORE_DYNAMIC_DTIM_IN_P2P_MODE_MAX ), - REG_VARIABLE( CFG_NUM_BUFF_ADVERT_NAME, WLAN_PARAM_Integer, +REG_VARIABLE( CFG_NUM_BUFF_ADVERT_NAME, WLAN_PARAM_Integer, hdd_config_t,numBuffAdvert , VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK, CFG_NUM_BUFF_ADVERT_DEFAULT, CFG_NUM_BUFF_ADVERT_MIN, CFG_NUM_BUFF_ADVERT_MAX ), - REG_VARIABLE( CFG_MCC_CONFIG_PARAM_NAME, WLAN_PARAM_Integer, +REG_VARIABLE( CFG_MCC_CONFIG_PARAM_NAME, WLAN_PARAM_Integer, hdd_config_t, configMccParam, VAR_FLAGS_OPTIONAL, CFG_MCC_CONFIG_PARAM_DEFAULT, CFG_MCC_CONFIG_PARAM_MIN, CFG_MCC_CONFIG_PARAM_MAX ), - REG_VARIABLE( CFG_ENABLE_RX_STBC, WLAN_PARAM_Integer, +REG_VARIABLE( CFG_ENABLE_RX_STBC, WLAN_PARAM_Integer, hdd_config_t, enableRxSTBC, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_ENABLE_RX_STBC_DEFAULT, CFG_ENABLE_RX_STBC_MIN, CFG_ENABLE_RX_STBC_MAX ), #ifdef FEATURE_WLAN_TDLS - REG_VARIABLE( CFG_TDLS_SUPPORT_ENABLE, WLAN_PARAM_Integer, +REG_VARIABLE( CFG_TDLS_SUPPORT_ENABLE, WLAN_PARAM_Integer, hdd_config_t, fEnableTDLSSupport, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_TDLS_SUPPORT_ENABLE_DEFAULT, CFG_TDLS_SUPPORT_ENABLE_MIN, CFG_TDLS_SUPPORT_ENABLE_MAX ), - REG_VARIABLE( CFG_TDLS_IMPLICIT_TRIGGER, WLAN_PARAM_Integer, +REG_VARIABLE( CFG_TDLS_IMPLICIT_TRIGGER, WLAN_PARAM_Integer, hdd_config_t, fEnableTDLSImplicitTrigger, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_TDLS_IMPLICIT_TRIGGER_DEFAULT, CFG_TDLS_IMPLICIT_TRIGGER_MIN, CFG_TDLS_IMPLICIT_TRIGGER_MAX ), - REG_VARIABLE( CFG_TDLS_TX_STATS_PERIOD, WLAN_PARAM_Integer, +REG_VARIABLE( CFG_TDLS_TX_STATS_PERIOD, WLAN_PARAM_Integer, hdd_config_t, fTDLSTxStatsPeriod, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_TDLS_TX_STATS_PERIOD_DEFAULT, CFG_TDLS_TX_STATS_PERIOD_MIN, CFG_TDLS_TX_STATS_PERIOD_MAX ), - REG_VARIABLE( CFG_TDLS_TX_PACKET_THRESHOLD, WLAN_PARAM_Integer, +REG_VARIABLE( CFG_TDLS_TX_PACKET_THRESHOLD, WLAN_PARAM_Integer, hdd_config_t, fTDLSTxPacketThreshold, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_TDLS_TX_PACKET_THRESHOLD_DEFAULT, CFG_TDLS_TX_PACKET_THRESHOLD_MIN, CFG_TDLS_TX_PACKET_THRESHOLD_MAX ), - REG_VARIABLE( CFG_TDLS_DISCOVERY_PERIOD, WLAN_PARAM_Integer, +REG_VARIABLE( CFG_TDLS_DISCOVERY_PERIOD, WLAN_PARAM_Integer, hdd_config_t, fTDLSDiscoveryPeriod, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_TDLS_DISCOVERY_PERIOD_DEFAULT, CFG_TDLS_DISCOVERY_PERIOD_MIN, CFG_TDLS_DISCOVERY_PERIOD_MAX ), - REG_VARIABLE( CFG_TDLS_MAX_DISCOVERY_ATTEMPT, WLAN_PARAM_Integer, +REG_VARIABLE( CFG_TDLS_MAX_DISCOVERY_ATTEMPT, WLAN_PARAM_Integer, hdd_config_t, fTDLSMaxDiscoveryAttempt, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_TDLS_MAX_DISCOVERY_ATTEMPT_DEFAULT, CFG_TDLS_MAX_DISCOVERY_ATTEMPT_MIN, CFG_TDLS_MAX_DISCOVERY_ATTEMPT_MAX ), - REG_VARIABLE( CFG_TDLS_IDLE_TIMEOUT, WLAN_PARAM_Integer, +REG_VARIABLE( CFG_TDLS_IDLE_TIMEOUT, WLAN_PARAM_Integer, hdd_config_t, fTDLSIdleTimeout, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_TDLS_IDLE_TIMEOUT_DEFAULT, CFG_TDLS_IDLE_TIMEOUT_MIN, CFG_TDLS_IDLE_TIMEOUT_MAX ), - REG_VARIABLE( CFG_TDLS_IDLE_PACKET_THRESHOLD, WLAN_PARAM_Integer, +REG_VARIABLE( CFG_TDLS_IDLE_PACKET_THRESHOLD, WLAN_PARAM_Integer, hdd_config_t, fTDLSIdlePacketThreshold, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_TDLS_IDLE_PACKET_THRESHOLD_DEFAULT, CFG_TDLS_IDLE_PACKET_THRESHOLD_MIN, CFG_TDLS_IDLE_PACKET_THRESHOLD_MAX ), - REG_VARIABLE( CFG_TDLS_RSSI_HYSTERESIS, WLAN_PARAM_Integer, +REG_VARIABLE( CFG_TDLS_RSSI_HYSTERESIS, WLAN_PARAM_Integer, hdd_config_t, fTDLSRSSIHysteresis, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_TDLS_RSSI_HYSTERESIS_DEFAULT, CFG_TDLS_RSSI_HYSTERESIS_MIN, CFG_TDLS_RSSI_HYSTERESIS_MAX ), - REG_VARIABLE( CFG_TDLS_RSSI_TRIGGER_THRESHOLD, WLAN_PARAM_SignedInteger, +REG_VARIABLE( CFG_TDLS_RSSI_TRIGGER_THRESHOLD, WLAN_PARAM_SignedInteger, hdd_config_t, fTDLSRSSITriggerThreshold, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_TDLS_RSSI_TRIGGER_THRESHOLD_DEFAULT, CFG_TDLS_RSSI_TRIGGER_THRESHOLD_MIN, CFG_TDLS_RSSI_TRIGGER_THRESHOLD_MAX ), - REG_VARIABLE( CFG_TDLS_RSSI_TEARDOWN_THRESHOLD, WLAN_PARAM_SignedInteger, +REG_VARIABLE( CFG_TDLS_RSSI_TEARDOWN_THRESHOLD, WLAN_PARAM_SignedInteger, hdd_config_t, fTDLSRSSITeardownThreshold, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_TDLS_RSSI_TEARDOWN_THRESHOLD_DEFAULT, CFG_TDLS_RSSI_TEARDOWN_THRESHOLD_MIN, CFG_TDLS_RSSI_TEARDOWN_THRESHOLD_MAX ), - -REG_VARIABLE( CFG_TDLS_EXTERNAL_CONTROL, WLAN_PARAM_Integer, - hdd_config_t, fTDLSExternalControl, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_TDLS_EXTERNAL_CONTROL_DEFAULT, - CFG_TDLS_EXTERNAL_CONTROL_MIN, - CFG_TDLS_EXTERNAL_CONTROL_MAX ), #endif #ifdef WLAN_SOFTAP_VSTA_FEATURE - REG_VARIABLE( CFG_VSTA_SUPPORT_ENABLE, WLAN_PARAM_Integer, +REG_VARIABLE( CFG_VSTA_SUPPORT_ENABLE, WLAN_PARAM_Integer, hdd_config_t, fEnableVSTASupport, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_VSTA_SUPPORT_ENABLE_DEFAULT, CFG_VSTA_SUPPORT_ENABLE_MIN, CFG_VSTA_SUPPORT_ENABLE_MAX ), #endif - REG_VARIABLE( CFG_ENABLE_LPWR_IMG_TRANSITION_NAME, WLAN_PARAM_Integer, +REG_VARIABLE( CFG_ENABLE_LPWR_IMG_TRANSITION_NAME, WLAN_PARAM_Integer, hdd_config_t, enableLpwrImgTransition, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_ENABLE_LPWR_IMG_TRANSITION_DEFAULT, @@ -2173,14 +2160,14 @@ REG_VARIABLE( CFG_TDLS_EXTERNAL_CONTROL, WLAN_PARAM_Integer, CFG_ENABLE_LPWR_IMG_TRANSITION_MAX ), #ifdef WLAN_ACTIVEMODE_OFFLOAD_FEATURE - REG_VARIABLE( CFG_ACTIVEMODE_OFFLOAD_ENABLE, WLAN_PARAM_Integer, +REG_VARIABLE( CFG_ACTIVEMODE_OFFLOAD_ENABLE, WLAN_PARAM_Integer, hdd_config_t, fEnableActiveModeOffload, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_ACTIVEMODE_OFFLOAD_ENABLE_DEFAULT, CFG_ACTIVEMODE_OFFLOAD_ENABLE_MIN, CFG_ACTIVEMODE_OFFLOAD_ENABLE_MAX ), #endif - REG_VARIABLE( CFG_ENABLE_LPWR_IMG_TRANSITION_NAME, WLAN_PARAM_Integer, +REG_VARIABLE( CFG_ENABLE_LPWR_IMG_TRANSITION_NAME, WLAN_PARAM_Integer, hdd_config_t, enableLpwrImgTransition, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_ENABLE_LPWR_IMG_TRANSITION_DEFAULT, @@ -2188,28 +2175,28 @@ REG_VARIABLE( CFG_TDLS_EXTERNAL_CONTROL, WLAN_PARAM_Integer, CFG_ENABLE_LPWR_IMG_TRANSITION_MAX ), - REG_VARIABLE( CFG_SCAN_AGING_PARAM_NAME, WLAN_PARAM_Integer, +REG_VARIABLE( CFG_SCAN_AGING_PARAM_NAME, WLAN_PARAM_Integer, hdd_config_t, scanAgingTimeout, VAR_FLAGS_OPTIONAL, CFG_SCAN_AGING_PARAM_DEFAULT, CFG_SCAN_AGING_PARAM_MIN, CFG_SCAN_AGING_PARAM_MAX ), - REG_VARIABLE( CFG_TX_LDPC_ENABLE_FEATURE, WLAN_PARAM_Integer, +REG_VARIABLE( CFG_TX_LDPC_ENABLE_FEATURE, WLAN_PARAM_Integer, hdd_config_t, enableTxLdpc, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_TX_LDPC_ENABLE_FEATURE_DEFAULT, CFG_TX_LDPC_ENABLE_FEATURE_MIN, CFG_TX_LDPC_ENABLE_FEATURE_MAX ), - REG_VARIABLE( CFG_ENABLE_MCC_ADATIVE_SCHEDULER_ENABLED_NAME, WLAN_PARAM_Integer, +REG_VARIABLE( CFG_ENABLE_MCC_ADATIVE_SCHEDULER_ENABLED_NAME, WLAN_PARAM_Integer, hdd_config_t, enableMCCAdaptiveScheduler, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_ENABLE_MCC_ADATIVE_SCHEDULER_ENABLED_DEFAULT, CFG_ENABLE_MCC_ADATIVE_SCHEDULER_ENABLED_MIN, CFG_ENABLE_MCC_ADATIVE_SCHEDULER_ENABLED_MAX ), - REG_VARIABLE( CFG_ANDRIOD_POWER_SAVE_NAME, WLAN_PARAM_Integer, +REG_VARIABLE( CFG_ANDRIOD_POWER_SAVE_NAME, WLAN_PARAM_Integer, hdd_config_t, isAndroidPsEn, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_ANDRIOD_POWER_SAVE_DEFAULT, @@ -2217,14 +2204,14 @@ REG_VARIABLE( CFG_TDLS_EXTERNAL_CONTROL, WLAN_PARAM_Integer, CFG_ANDRIOD_POWER_SAVE_MAX), #ifdef WLAN_FEATURE_11AC - REG_VARIABLE( CFG_VHT_SU_BEAMFORMEE_CAP_FEATURE, WLAN_PARAM_Integer, +REG_VARIABLE( CFG_VHT_SU_BEAMFORMEE_CAP_FEATURE, WLAN_PARAM_Integer, hdd_config_t, enableTxBF, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_VHT_SU_BEAMFORMEE_CAP_FEATURE_DEFAULT, CFG_VHT_SU_BEAMFORMEE_CAP_FEATURE_MIN, CFG_VHT_SU_BEAMFORMEE_CAP_FEATURE_MAX ), - REG_VARIABLE( CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED, WLAN_PARAM_Integer, +REG_VARIABLE( CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED, WLAN_PARAM_Integer, hdd_config_t, txBFCsnValue, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED_DEFAULT, @@ -2233,15 +2220,14 @@ REG_VARIABLE( CFG_TDLS_EXTERNAL_CONTROL, WLAN_PARAM_Integer, #endif - REG_VARIABLE( CFG_SAP_ALLOW_ALL_CHANNEL_PARAM_NAME, WLAN_PARAM_Integer, +REG_VARIABLE( CFG_SAP_ALLOW_ALL_CHANNEL_PARAM_NAME, WLAN_PARAM_Integer, hdd_config_t, sapAllowAllChannel, VAR_FLAGS_OPTIONAL, CFG_SAP_ALLOW_ALL_CHANNEL_PARAM_DEFAULT, CFG_SAP_ALLOW_ALL_CHANNEL_PARAM_MIN, CFG_SAP_ALLOW_ALL_CHANNEL_PARAM_MAX ), - #ifdef WLAN_FEATURE_11AC - REG_VARIABLE( CFG_DISABLE_LDPC_WITH_TXBF_AP, WLAN_PARAM_Integer, +REG_VARIABLE( CFG_DISABLE_LDPC_WITH_TXBF_AP, WLAN_PARAM_Integer, hdd_config_t, disableLDPCWithTxbfAP, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_DISABLE_LDPC_WITH_TXBF_AP_DEFAULT, @@ -2249,35 +2235,7 @@ REG_VARIABLE( CFG_TDLS_EXTERNAL_CONTROL, WLAN_PARAM_Integer, CFG_DISABLE_LDPC_WITH_TXBF_AP_MAX ), #endif -REG_VARIABLE(CFG_BTC_ACTIVE_WLAN_LEN_NAME, WLAN_PARAM_Integer, - hdd_config_t, cfgBtcActiveWlanLen, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_BTC_ACTIVE_WLAN_LEN_DEFAULT, - CFG_BTC_ACTIVE_WLAN_LEN_MIN, - CFG_BTC_ACTIVE_WLAN_LEN_MAX ), - -REG_VARIABLE(CFG_BTC_ACTIVE_BT_LEN_NAME, WLAN_PARAM_Integer, - hdd_config_t, cfgBtcActiveBtLen, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_BTC_ACTIVE_BT_LEN_DEFAULT, - CFG_BTC_ACTIVE_BT_LEN_MIN, - CFG_BTC_ACTIVE_BT_LEN_MAX ), - -REG_VARIABLE(CFG_BTC_SAP_ACTIVE_WLAN_LEN_NAME, WLAN_PARAM_Integer, - hdd_config_t, cfgBtcSapActiveWlanLen, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_BTC_SAP_ACTIVE_WLAN_LEN_DEFAULT, - CFG_BTC_SAP_ACTIVE_WLAN_LEN_MIN, - CFG_BTC_SAP_ACTIVE_WLAN_LEN_MAX ), - -REG_VARIABLE(CFG_BTC_SAP_ACTIVE_BT_LEN_NAME, WLAN_PARAM_Integer, - hdd_config_t, cfgBtcSapActiveBtLen, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_BTC_SAP_ACTIVE_BT_LEN_DEFAULT, - CFG_BTC_SAP_ACTIVE_BT_LEN_MIN, - CFG_BTC_SAP_ACTIVE_BT_LEN_MAX ), - - REG_VARIABLE_STRING( CFG_LIST_OF_NON_DFS_COUNTRY_CODE, WLAN_PARAM_String, +REG_VARIABLE_STRING( CFG_LIST_OF_NON_DFS_COUNTRY_CODE, WLAN_PARAM_String, hdd_config_t, listOfNonDfsCountryCode, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, (void *)CFG_LIST_OF_NON_DFS_COUNTRY_CODE_DEFAULT), @@ -2290,12 +2248,12 @@ REG_VARIABLE(CFG_BTC_SAP_ACTIVE_BT_LEN_NAME, WLAN_PARAM_Integer, CFG_ENABLE_SSR_MAX, cbNotifySetEnableSSR, 0 ), - REG_VARIABLE_STRING( CFG_LIST_OF_NON_11AC_COUNTRY_CODE, WLAN_PARAM_String, +REG_VARIABLE_STRING( CFG_LIST_OF_NON_11AC_COUNTRY_CODE, WLAN_PARAM_String, hdd_config_t, listOfNon11acCountryCode, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, (void *)CFG_LIST_OF_NON_11AC_COUNTRY_CODE_DEFAULT), - REG_VARIABLE(CFG_MAX_MEDIUM_TIME, WLAN_PARAM_Integer, +REG_VARIABLE(CFG_MAX_MEDIUM_TIME, WLAN_PARAM_Integer, hdd_config_t, cfgMaxMediumTime, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_MAX_MEDIUM_TIME_STADEFAULT, @@ -2316,79 +2274,12 @@ REG_VARIABLE(CFG_BTC_SAP_ACTIVE_BT_LEN_NAME, WLAN_PARAM_Integer, CFG_TRAFFIC_IDLE_TIMEOUT_MIN, CFG_TRAFFIC_IDLE_TIMEOUT_MAX), -#ifdef FEATURE_WLAN_SCAN_PNO - REG_VARIABLE( CFG_PNO_SCAN_SUPPORT, WLAN_PARAM_Integer, - hdd_config_t, configPNOScanSupport, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_PNO_SCAN_SUPPORT_DEFAULT, - CFG_PNO_SCAN_SUPPORT_DISABLE, - CFG_PNO_SCAN_SUPPORT_ENABLE), - - REG_VARIABLE( CFG_PNO_SCAN_TIMER_REPEAT_VALUE, WLAN_PARAM_Integer, - hdd_config_t, configPNOScanTimerRepeatValue, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_PNO_SCAN_TIMER_REPEAT_VALUE_DEFAULT, - CFG_PNO_SCAN_TIMER_REPEAT_VALUE_MIN, - CFG_PNO_SCAN_TIMER_REPEAT_VALUE_MAX), -#endif - -#ifdef WLAN_FEATURE_11AC - REG_VARIABLE( CFG_ENABLE_VHT_FOR_24GHZ_NAME, WLAN_PARAM_Integer, - hdd_config_t, enableVhtFor24GHzBand, - VAR_FLAGS_OPTIONAL, - CFG_ENABLE_VHT_FOR_24GHZ_DEFAULT, - CFG_ENABLE_VHT_FOR_24GHZ_MIN, - CFG_ENABLE_VHT_FOR_24GHZ_MAX), -#endif - REG_VARIABLE( CFG_DYNAMIC_SPLIT_SCAN_NAME, WLAN_PARAM_Integer, - hdd_config_t, dynSplitscan, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_DYNAMIC_SPLIT_SCAN_DEFAULT, - CFG_DYNAMIC_SPLIT_SCAN_MIN, - CFG_DYNAMIC_SPLIT_SCAN_MAX ), - - REG_VARIABLE( CFG_SPLIT_SCAN_TRAFFIC_MONITOR_THRSHLD_NAME, WLAN_PARAM_Integer, - hdd_config_t, txRxThresholdForSplitScan, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_SPLIT_SCAN_TRAFFIC_MONITOR_THRSHLD_DEFAULT, - CFG_SPLIT_SCAN_TRAFFIC_MONITOR_THRSHLD_MIN, - CFG_SPLIT_SCAN_TRAFFIC_MONITOR_THRSHLD_MAX ), - - REG_VARIABLE( CFG_SPLIT_SCAN_TRAFFIC_MONITOR_TIMER_NAME, WLAN_PARAM_Integer, - hdd_config_t, trafficMntrTmrForSplitScan, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_SPLIT_SCAN_TRAFFIC_MONITOR_TIMER_DEFAULT, - CFG_SPLIT_SCAN_TRAFFIC_MONITOR_TIMER_MIN, - CFG_SPLIT_SCAN_TRAFFIC_MONITOR_TIMER_MAX ), - - REG_VARIABLE( CFG_DEBUG_P2P_REMAIN_ON_CHANNEL_NAME, WLAN_PARAM_Integer, - hdd_config_t, debugP2pRemainOnChannel, - VAR_FLAGS_OPTIONAL, - CFG_DEBUG_P2P_REMAIN_ON_CHANNEL_DEFAULT, - CFG_DEBUG_P2P_REMAIN_ON_CHANNEL_MIN, - CFG_DEBUG_P2P_REMAIN_ON_CHANNEL_MAX ), - REG_VARIABLE( CFG_AMSDU_SUPPORT_IN_AMPDU_NAME , WLAN_PARAM_Integer, hdd_config_t, isAmsduSupportInAMPDU, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_AMSDU_SUPPORT_IN_AMPDU_DEFAULT, CFG_AMSDU_SUPPORT_IN_AMPDU_MIN, CFG_AMSDU_SUPPORT_IN_AMPDU_MAX ), - - REG_VARIABLE( CFG_ROAMING_DFS_CHANNEL_NAME , WLAN_PARAM_Integer, - hdd_config_t, allowDFSChannelRoam, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_ROAMING_DFS_CHANNEL_DEFAULT, - CFG_ROAMING_DFS_CHANNEL_MIN, - CFG_ROAMING_DFS_CHANNEL_MAX ), - - REG_VARIABLE( CFG_ENABLE_STRICT_REGULATORY_FOR_FCC_NAME, WLAN_PARAM_Integer, - hdd_config_t, gEnableStrictRegulatoryForFCC, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_ENABLE_STRICT_REGULATORY_FOR_FCC_DEFAULT, - CFG_ENABLE_STRICT_REGULATORY_FOR_FCC_MIN, - CFG_ENABLE_STRICT_REGULATORY_FOR_FCC_MAX ), - }; /* @@ -2769,12 +2660,10 @@ static void print_hdd_cfg(hdd_context_t *pHddCtx) VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [enableRxSTBC] Value = [%u] ",pHddCtx->cfg_ini->enableRxSTBC); VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gEnableLpwrImgTransition] Value = [%u] ",pHddCtx->cfg_ini->enableLpwrImgTransition); VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gEnableSSR] Value = [%u] ",pHddCtx->cfg_ini->enableSSR); - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gEnableVhtFor24GHzBand] Value = [%u] ",pHddCtx->cfg_ini->enableVhtFor24GHzBand); VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gEnableTrafficMonitor] Value = [%u] ", pHddCtx->cfg_ini->enableTrafficMonitor); VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gTrafficIdleTimeout] Value = [%u] ", pHddCtx->cfg_ini->trafficIdleTimeout); VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gAmsduSupportInAMPDU] Value = [%lu] ",pHddCtx->cfg_ini->isAmsduSupportInAMPDU); - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gRoamtoDFSChannel] Value = [%u] ",pHddCtx->cfg_ini->allowDFSChannelRoam); } @@ -3313,9 +3202,8 @@ v_BOOL_t hdd_update_config_dat( hdd_context_t *pHddCtx ) #endif hdd_config_t *pConfig = pHddCtx->cfg_ini; - tSirMacHTCapabilityInfo *htCapInfo; - tANI_U32 temp32; - tANI_U16 temp16; + tSirMacHTCapabilityInfo htCapInfo; + if (ccmCfgSetInt(pHddCtx->hHal, WNI_CFG_SHORT_GI_20MHZ, pConfig->ShortGI20MhzEnable, NULL, eANI_BOOLEAN_FALSE)==eHAL_STATUS_FAILURE) @@ -3448,24 +3336,6 @@ v_BOOL_t hdd_update_config_dat( hdd_context_t *pHddCtx ) } } - if (ccmCfgSetInt(pHddCtx->hHal, WNI_CFG_PASSIVE_MINIMUM_CHANNEL_TIME, - pConfig->nPassiveMinChnTime, NULL, - eANI_BOOLEAN_FALSE)==eHAL_STATUS_FAILURE) - { - fStatus = FALSE; - hddLog(LOGE, "Could not pass on WNI_CFG_PASSIVE_MINIMUM_CHANNEL_TIME" - " to CCM\n"); - } - - if (ccmCfgSetInt(pHddCtx->hHal, WNI_CFG_PASSIVE_MAXIMUM_CHANNEL_TIME, - pConfig->nPassiveMaxChnTime, NULL, - eANI_BOOLEAN_FALSE)==eHAL_STATUS_FAILURE) - { - fStatus = FALSE; - hddLog(LOGE, "Could not pass on WNI_CFG_PASSIVE_MAXIMUM_CHANNEL_TIME" - " to CCM\n"); - } - if (ccmCfgSetInt(pHddCtx->hHal, WNI_CFG_BEACON_INTERVAL, pConfig->nBeaconInterval, NULL, eANI_BOOLEAN_FALSE)==eHAL_STATUS_FAILURE) { @@ -3816,14 +3686,11 @@ v_BOOL_t hdd_update_config_dat( hdd_context_t *pHddCtx ) hddLog(LOGE, "Could not pass on WNI_CFG_HT_RX_STBC to CCM\n"); } - ccmCfgGetInt(pHddCtx->hHal, WNI_CFG_HT_CAP_INFO, &temp32); - temp16 = temp32 & 0xffff; - htCapInfo = (tSirMacHTCapabilityInfo *)&temp16; - htCapInfo->rxSTBC = pConfig->enableRxSTBC; - temp32 = temp16; + ccmCfgGetInt(pHddCtx->hHal, WNI_CFG_HT_CAP_INFO, (tANI_U32 *)&htCapInfo); + htCapInfo.rxSTBC = pConfig->enableRxSTBC; if(ccmCfgSetInt(pHddCtx->hHal, WNI_CFG_HT_CAP_INFO, - temp32, NULL, eANI_BOOLEAN_FALSE) + *(tANI_U32 *)&htCapInfo, NULL, eANI_BOOLEAN_FALSE) ==eHAL_STATUS_FAILURE) { fStatus = FALSE; @@ -3905,52 +3772,6 @@ v_BOOL_t hdd_update_config_dat( hdd_context_t *pHddCtx ) hddLog(LOGE, "Could not pass on WNI_CFG_MAX_MEDIUM_TIME to CCM"); } - if (ccmCfgSetInt(pHddCtx->hHal, - WNI_CFG_BTC_ACTIVE_WLAN_LEN, - pConfig->cfgBtcActiveWlanLen, - NULL, eANI_BOOLEAN_FALSE) == eHAL_STATUS_FAILURE) - { - fStatus = FALSE; - hddLog(LOGE, "Could not pass on WNI_BTC_ACTIVE_WLAN_LEN to CCM"); - } - - if (ccmCfgSetInt(pHddCtx->hHal, - WNI_CFG_BTC_ACTIVE_BT_LEN, - pConfig->cfgBtcActiveBtLen, - NULL, eANI_BOOLEAN_FALSE) == eHAL_STATUS_FAILURE) - { - fStatus = FALSE; - hddLog(LOGE, "Could not pass on WNI_BTC_ACTIVE_BT_LEN to CCM"); - } - - if (ccmCfgSetInt(pHddCtx->hHal, - WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN, - pConfig->cfgBtcSapActiveWlanLen, - NULL, eANI_BOOLEAN_FALSE) == eHAL_STATUS_FAILURE) - { - fStatus = FALSE; - hddLog(LOGE, "Could not pass on WNI_BTC_ACTIVE_WLAN_LEN to CCM"); - } - - if (ccmCfgSetInt(pHddCtx->hHal, - WNI_CFG_BTC_SAP_ACTIVE_BT_LEN, - pConfig->cfgBtcSapActiveBtLen, - NULL, eANI_BOOLEAN_FALSE) == eHAL_STATUS_FAILURE) - { - fStatus = FALSE; - hddLog(LOGE, "Could not pass on WNI_BTC_ACTIVE_BT_LEN to CCM"); - } - - if (ccmCfgSetInt(pHddCtx->hHal, - WNI_CFG_DEBUG_P2P_REMAIN_ON_CHANNEL, - pConfig->debugP2pRemainOnChannel, - NULL, eANI_BOOLEAN_FALSE) == eHAL_STATUS_FAILURE) - { - fStatus = FALSE; - hddLog(LOGE, - "Could not pass on WNI_CFG_DEBUG_P2P_REMAIN_ON_CHANNEL to CCM"); - } - return fStatus; } @@ -4040,7 +3861,6 @@ VOS_STATUS hdd_set_sme_config( hdd_context_t *pHddCtx ) smeConfig.csrConfig.nVhtChannelWidth = pConfig->vhtChannelWidth; smeConfig.csrConfig.enableTxBF = pConfig->enableTxBF; smeConfig.csrConfig.txBFCsnValue = pConfig->txBFCsnValue; - smeConfig.csrConfig.enableVhtFor24GHz = pConfig->enableVhtFor24GHzBand; #endif smeConfig.csrConfig.AdHocChannel5G = 44; smeConfig.csrConfig.ProprietaryRatesEnabled = 0; @@ -4132,7 +3952,7 @@ VOS_STATUS hdd_set_sme_config( hdd_context_t *pHddCtx ) #endif smeConfig.csrConfig.addTSWhenACMIsOff = pConfig->AddTSWhenACMIsOff; smeConfig.csrConfig.fValidateList = pConfig->fValidateScanList; - smeConfig.csrConfig.allowDFSChannelRoam = pConfig->allowDFSChannelRoam; + //Enable/Disable MCC smeConfig.csrConfig.fEnableMCCMode = pConfig->enableMCC; smeConfig.csrConfig.fAllowMCCGODiffBI = pConfig->allowMCCGODiffBI; diff --git a/drivers/staging/prima/CORE/HDD/src/wlan_hdd_cfg80211.c b/drivers/staging/prima/CORE/HDD/src/wlan_hdd_cfg80211.c index c84e3fbe91a..a246ec02b73 100644..100755 --- a/drivers/staging/prima/CORE/HDD/src/wlan_hdd_cfg80211.c +++ b/drivers/staging/prima/CORE/HDD/src/wlan_hdd_cfg80211.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2014, The Linux Foundation. All rights reserved. + * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -85,14 +85,12 @@ #include "wlan_hdd_tdls.h" #endif #include "wlan_nv.h" -#include "vos_sched.h" #define g_mode_rates_size (12) #define a_mode_rates_size (8) #define FREQ_BASE_80211G (2407) #define FREQ_BAND_DIFF_80211G (5) #define MAX_SCAN_SSID 9 -#define MAX_PENDING_LOG 5 #define GET_IE_LEN_IN_BSS_DESC(lenInBss) ( lenInBss + sizeof(lenInBss) - \ ((int) OFFSET_OF( tSirBssDescription, ieFields))) @@ -513,8 +511,6 @@ struct wiphy *wlan_hdd_cfg80211_wiphy_alloc(int priv_size) return NULL; } - wiphy->country_ie_pref = NL80211_COUNTRY_IE_IGNORE_CORE; - return wiphy; } @@ -636,13 +632,10 @@ int wlan_hdd_cfg80211_init(struct device *dev, | WIPHY_FLAG_TDLS_EXTERNAL_SETUP; #endif #ifdef FEATURE_WLAN_SCAN_PNO - if (pCfg->configPNOScanSupport) - { - wiphy->flags |= WIPHY_FLAG_SUPPORTS_SCHED_SCAN; - wiphy->max_sched_scan_ssids = SIR_PNO_MAX_SUPP_NETWORKS; - wiphy->max_match_sets = SIR_PNO_MAX_SUPP_NETWORKS; - wiphy->max_sched_scan_ie_len = SIR_MAC_MAX_IE_LENGTH; - } + wiphy->flags |= WIPHY_FLAG_SUPPORTS_SCHED_SCAN; + wiphy->max_sched_scan_ssids = SIR_PNO_MAX_SUPP_NETWORKS; + wiphy->max_match_sets = SIR_PNO_MAX_SUPP_NETWORKS; + wiphy->max_sched_scan_ie_len = SIR_MAC_MAX_IE_LENGTH; #endif/*FEATURE_WLAN_SCAN_PNO*/ /* even with WIPHY_FLAG_CUSTOM_REGULATORY, @@ -652,6 +645,8 @@ int wlan_hdd_cfg80211_init(struct device *dev, regulatory settings */ wiphy->reg_notifier = wlan_hdd_crda_reg_notifier; + wiphy->flags |= WIPHY_FLAG_DISABLE_11D_HINT_FROM_CORE; + wiphy->max_scan_ssids = MAX_SCAN_SSID; wiphy->max_scan_ie_len = SIR_MAC_MAX_IE_LENGTH; @@ -980,6 +975,9 @@ int wlan_hdd_cfg80211_alloc_new_beacon(hdd_adapter_t *pAdapter, if (!params->head && !old) return -EINVAL; + if (params->tail && !params->tail_len) + return -EINVAL; + #if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,38)) /* Kernel 3.0 is not updating dtim_period for set beacon */ if (!params->dtim_period) @@ -1793,15 +1791,7 @@ static int wlan_hdd_cfg80211_start_bss(hdd_adapter_t *pHostapdAdapter, { pIe = wlan_hdd_cfg80211_get_ie_ptr(pBeacon->tail, pBeacon->tail_len, WLAN_EID_COUNTRY); - if(memcmp(pHddCtx->cfg_ini->apCntryCode, CFG_AP_COUNTRY_CODE_DEFAULT, 3) != 0) - { - tANI_BOOLEAN restartNeeded; - pConfig->ieee80211d = 1; - vos_mem_copy(pConfig->countryCode, pHddCtx->cfg_ini->apCntryCode, 3); - sme_setRegInfo(hHal, pConfig->countryCode); - sme_ResetCountryCodeInformation(hHal, &restartNeeded); - } - else if(pIe) + if(pIe) { tANI_BOOLEAN restartNeeded; pConfig->ieee80211d = 1; @@ -2047,25 +2037,16 @@ static int wlan_hdd_cfg80211_start_bss(hdd_adapter_t *pHostapdAdapter, #ifdef WLAN_FEATURE_11AC /* Overwrite the hostapd setting for HW mode only for 11ac. - * This is valid only if mode is set to 11n in hostapd, either AUTO or - * 11ac in .ini and 11ac is supported by both host and firmware. - * Otherwise, leave whatever is set in hostapd (a OR b OR g OR n mode) - */ + * This is valid only if mode is set to 11n in hostapd and either AUTO or 11ac in .ini . + * Otherwise, leave whatever is set in hostapd (a OR b OR g OR n mode) */ if( ((pConfig->SapHw_mode == eSAP_DOT11_MODE_11n) || (pConfig->SapHw_mode == eSAP_DOT11_MODE_11n_ONLY)) && (((WLAN_HDD_GET_CTX(pHostapdAdapter))->cfg_ini->dot11Mode == eHDD_DOT11_MODE_AUTO) || ((WLAN_HDD_GET_CTX(pHostapdAdapter))->cfg_ini->dot11Mode == eHDD_DOT11_MODE_11ac) || ((WLAN_HDD_GET_CTX(pHostapdAdapter))->cfg_ini->dot11Mode == eHDD_DOT11_MODE_11ac_ONLY)) && - (sme_IsFeatureSupportedByDriver(DOT11AC)) && (sme_IsFeatureSupportedByFW(DOT11AC)) ) + (sme_isHostFeatSupported(DOT11AC)) && (sme_isFwFeatSupported(DOT11AC)) ) { pConfig->SapHw_mode = eSAP_DOT11_MODE_11ac; - - /* Disable VHT support in 2.4 GHz band */ - if (pConfig->channel <= 14 && - (WLAN_HDD_GET_CTX(pHostapdAdapter))->cfg_ini->enableVhtFor24GHzBand == FALSE) - { - pConfig->SapHw_mode = eSAP_DOT11_MODE_11n; - } } #endif @@ -2129,7 +2110,6 @@ static int wlan_hdd_cfg80211_start_bss(hdd_adapter_t *pHostapdAdapter, { VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, ("ERROR: HDD vos wait for single_event failed!!\n")); - smeGetCommandQStatus(hHal); VOS_ASSERT(0); } @@ -2278,7 +2258,6 @@ static int wlan_hdd_cfg80211_stop_ap (struct wiphy *wiphy, hdd_scaninfo_t *pScanInfo = NULL; hdd_adapter_t *staAdapter = NULL; VOS_STATUS status; - long ret; ENTER(); @@ -2313,30 +2292,31 @@ static int wlan_hdd_cfg80211_stop_ap (struct wiphy *wiphy, pScanInfo = &pHddCtx->scan_info; + if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:LOGP in Progress. Ignore!!!",__func__); + return -EAGAIN; + } hddLog(VOS_TRACE_LEVEL_INFO, "%s: device_mode = %d\n", __func__,pAdapter->device_mode); - ret = wlan_hdd_scan_abort(pAdapter); - - if (ret <= 0) + if ((pScanInfo != NULL) && pScanInfo->mScanPending) { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - FL("Timeout occurred while waiting for abortscan %ld"), ret); - - if (pHddCtx->isLogpInProgress) + INIT_COMPLETION(pScanInfo->abortscan_event_var); + hdd_abort_mac_scan(staAdapter->pHddCtx); + status = wait_for_completion_interruptible_timeout( + &pScanInfo->abortscan_event_var, + msecs_to_jiffies(WLAN_WAIT_TIME_ABORTSCAN)); + if (!status) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: LOGP in Progress. Ignore!!!", __func__); - + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s: Timeout occurred while waiting for abortscan" , + __func__); VOS_ASSERT(pScanInfo->mScanPending); - return -EAGAIN; + return 0; } - VOS_ASSERT(pScanInfo->mScanPending); - return 0; } - hdd_hostapd_stop(dev); - if ((pAdapter->device_mode == WLAN_HDD_SOFTAP) || (pAdapter->device_mode == WLAN_HDD_P2P_GO) ) @@ -2572,21 +2552,11 @@ static int wlan_hdd_cfg80211_change_bss (struct wiphy *wiphy, return 0; } -/* FUNCTION: wlan_hdd_change_country_code_cd -* to wait for contry code completion -*/ -void* wlan_hdd_change_country_code_cb(void *pAdapter) -{ - hdd_adapter_t *call_back_pAdapter = pAdapter; - complete(&call_back_pAdapter->change_country_code); - return NULL; -} - /* - * FUNCTION: __wlan_hdd_cfg80211_change_iface + * FUNCTION: wlan_hdd_cfg80211_change_iface * This function is used to set the interface type (INFRASTRUCTURE/ADHOC) */ -static int __wlan_hdd_cfg80211_change_iface( struct wiphy *wiphy, +int wlan_hdd_cfg80211_change_iface( struct wiphy *wiphy, struct net_device *ndev, enum nl80211_iftype type, u32 *flags, @@ -2595,7 +2565,7 @@ static int __wlan_hdd_cfg80211_change_iface( struct wiphy *wiphy, { struct wireless_dev *wdev; hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR( ndev ); - hdd_context_t *pHddCtx; + hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX( pAdapter ); hdd_adapter_t *pP2pAdapter = NULL; tCsrRoamProfile *pRoamProfile = NULL; eCsrRoamBssType LastBSSType; @@ -2605,21 +2575,6 @@ static int __wlan_hdd_cfg80211_change_iface( struct wiphy *wiphy, ENTER(); - if (!pAdapter) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: Adapter context is null", __func__); - return VOS_STATUS_E_FAILURE; - } - - pHddCtx = WLAN_HDD_GET_CTX(pAdapter); - if (!pHddCtx) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: HDD context is null", __func__); - return VOS_STATUS_E_FAILURE; - } - status = wlan_hdd_validate_context(pHddCtx); if (0 != status) @@ -2662,12 +2617,6 @@ static int __wlan_hdd_cfg80211_change_iface( struct wiphy *wiphy, ) { hdd_wext_state_t *pWextState = WLAN_HDD_GET_WEXT_STATE_PTR(pAdapter); - if (!pWextState) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: pWextState is null", __func__); - return VOS_STATUS_E_FAILURE; - } pRoamProfile = &pWextState->roamProfile; LastBSSType = pRoamProfile->BSSType; @@ -2756,23 +2705,13 @@ static int __wlan_hdd_cfg80211_change_iface( struct wiphy *wiphy, hdd_close_adapter(pHddCtx, pP2pAdapter, VOS_TRUE); } } -#ifdef FEATURE_WLAN_TDLS - /* A Mutex Lock is introduced while changing the mode to - * protect the concurrent access for the Adapters by TDLS - * module. - */ - mutex_lock(&pHddCtx->tdls_lock); -#endif //De-init the adapter. hdd_stop_adapter( pHddCtx, pAdapter ); hdd_deinit_adapter( pHddCtx, pAdapter ); memset(&pAdapter->sessionCtx, 0, sizeof(pAdapter->sessionCtx)); pAdapter->device_mode = (type == NL80211_IFTYPE_AP) ? WLAN_HDD_SOFTAP : WLAN_HDD_P2P_GO; -#ifdef FEATURE_WLAN_TDLS - mutex_unlock(&pHddCtx->tdls_lock); -#endif //Disable BMPS and IMPS if enabled //before starting Go @@ -2809,49 +2748,12 @@ static int __wlan_hdd_cfg80211_change_iface( struct wiphy *wiphy, } hdd_set_ap_ops( pAdapter->dev ); - /* This is for only SAP mode where users can - * control country through ini. - * P2P GO follows station country code - * acquired during the STA scanning. */ - if((NL80211_IFTYPE_AP == type) && - (memcmp(pConfig->apCntryCode, CFG_AP_COUNTRY_CODE_DEFAULT, 3) != 0)) + + /* set country code for SAP not for P2P GO */ + if (NL80211_IFTYPE_AP == type) { - int status = 0; - VOS_TRACE(VOS_MODULE_ID_HDD,VOS_TRACE_LEVEL_INFO, - "%s: setting country code from INI ", __func__); - init_completion(&pAdapter->change_country_code); - status = (int)sme_ChangeCountryCode(pHddCtx->hHal, - (void *)(tSmeChangeCountryCallback) - wlan_hdd_change_country_code_cb, - pConfig->apCntryCode, pAdapter, - pHddCtx->pvosContext, - eSIR_TRUE); - if (eHAL_STATUS_SUCCESS == status) - { - /* Wait for completion */ - status = wait_for_completion_interruptible_timeout( - &pAdapter->change_country_code, - msecs_to_jiffies(WLAN_WAIT_TIME_COUNTRY)); - if (status <= 0) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: SME Timed out while setting country code ", - __func__); - - if (pHddCtx->isLogpInProgress) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: LOGP in Progress. Ignore!!!", __func__); - return -EAGAIN; - } - } - } - else - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: SME Change Country code failed \n",__func__); - return -EINVAL; - } + sme_ChangeCountryCode(pHddCtx->hHal, NULL, + pConfig->apCntryCode, pAdapter, pHddCtx->pvosContext); } status = hdd_init_ap_mode(pAdapter); @@ -2893,14 +2795,6 @@ static int __wlan_hdd_cfg80211_change_iface( struct wiphy *wiphy, case NL80211_IFTYPE_STATION: case NL80211_IFTYPE_P2P_CLIENT: case NL80211_IFTYPE_ADHOC: -#ifdef FEATURE_WLAN_TDLS - - /* A Mutex Lock is introduced while changing the mode to - * protect the concurrent access for the Adapters by TDLS - * module. - */ - mutex_lock(&pHddCtx->tdls_lock); -#endif hdd_stop_adapter( pHddCtx, pAdapter ); hdd_deinit_adapter( pHddCtx, pAdapter ); wdev->iftype = type; @@ -2919,9 +2813,6 @@ static int __wlan_hdd_cfg80211_change_iface( struct wiphy *wiphy, pHddCtx->change_iface = type; memset(&pAdapter->sessionCtx, 0, sizeof(pAdapter->sessionCtx)); hdd_set_station_ops( pAdapter->dev ); -#ifdef FEATURE_WLAN_TDLS - mutex_unlock(&pHddCtx->tdls_lock); -#endif status = hdd_init_station_mode( pAdapter ); if( VOS_STATUS_SUCCESS != status ) return -EOPNOTSUPP; @@ -2997,26 +2888,6 @@ done: return 0; } -/* - * FUNCTION: wlan_hdd_cfg80211_change_iface - * wrapper function to protect the actual implementation from SSR. - */ -int wlan_hdd_cfg80211_change_iface( struct wiphy *wiphy, - struct net_device *ndev, - enum nl80211_iftype type, - u32 *flags, - struct vif_params *params - ) -{ - int ret; - - vos_ssr_protect(__func__); - ret = __wlan_hdd_cfg80211_change_iface(wiphy, ndev, type, flags, params); - vos_ssr_unprotect(__func__); - - return ret; -} - #ifdef FEATURE_WLAN_TDLS static int wlan_hdd_tdls_add_station(struct wiphy *wiphy, struct net_device *dev, u8 *mac, bool update, tCsrStaParams *StaParams) @@ -3025,7 +2896,6 @@ static int wlan_hdd_tdls_add_station(struct wiphy *wiphy, hdd_context_t *pHddCtx = wiphy_priv(wiphy); VOS_STATUS status; hddTdlsPeer_t *pTdlsPeer; - tANI_U16 numCurrTdlsPeers; ENTER(); @@ -3054,7 +2924,7 @@ static int wlan_hdd_tdls_add_station(struct wiphy *wiphy, return -EBUSY; } - pTdlsPeer = wlan_hdd_tdls_find_peer(pAdapter, mac, TRUE); + pTdlsPeer = wlan_hdd_tdls_find_peer(pAdapter, mac); if ( NULL == pTdlsPeer ) { VOS_TRACE( VOS_MODULE_ID_HDD, TDLS_LOG_LEVEL, @@ -3088,7 +2958,7 @@ static int wlan_hdd_tdls_add_station(struct wiphy *wiphy, } /* when others are on-going, we want to change link_status to idle */ - if (NULL != wlan_hdd_tdls_is_progress(pHddCtx, mac, TRUE)) + if (NULL != wlan_hdd_tdls_is_progress(pHddCtx, mac, TRUE, TRUE)) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "%s: " MAC_ADDRESS_STR @@ -3100,21 +2970,18 @@ static int wlan_hdd_tdls_add_station(struct wiphy *wiphy, /* first to check if we reached to maximum supported TDLS peer. TODO: for now, return -EPERM looks working fine, but need to check if any other errno fit into this category.*/ - numCurrTdlsPeers = wlan_hdd_tdlsConnectedPeers(pAdapter); - if (HDD_MAX_NUM_TDLS_STA <= numCurrTdlsPeers) + if (HDD_MAX_NUM_TDLS_STA <= wlan_hdd_tdlsConnectedPeers(pAdapter)) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "%s: " MAC_ADDRESS_STR - " TDLS Max peer already connected. Request declined." - " Num of peers (%d), Max allowed (%d).", - __func__, MAC_ADDR_ARRAY(mac), numCurrTdlsPeers, - HDD_MAX_NUM_TDLS_STA); + " TDLS Max peer already connected. Request declined.", + __func__, MAC_ADDR_ARRAY(mac)); goto error; } else { hddTdlsPeer_t *pTdlsPeer; - pTdlsPeer = wlan_hdd_tdls_find_peer(pAdapter, mac, TRUE); + pTdlsPeer = wlan_hdd_tdls_find_peer(pAdapter, mac); if (pTdlsPeer && TDLS_IS_CONNECTED(pTdlsPeer)) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, @@ -3537,8 +3404,12 @@ static int wlan_hdd_cfg80211_add_key( struct wiphy *wiphy, vos_mem_copy(&pAPCtx->groupKey, &setKey, sizeof(tCsrRoamSetKey)); } } - else if ( (pAdapter->device_mode == WLAN_HDD_INFRA_STATION) || - (pAdapter->device_mode == WLAN_HDD_P2P_CLIENT) ) + else if ( (pAdapter->device_mode == WLAN_HDD_INFRA_STATION) +#ifdef WLAN_FEATURE_P2P + || (pAdapter->device_mode == WLAN_HDD_P2P_CLIENT) + || (pAdapter->device_mode == WLAN_HDD_P2P_DEVICE) +#endif + ) { hdd_wext_state_t *pWextState = WLAN_HDD_GET_WEXT_STATE_PTR(pAdapter); hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); @@ -4095,7 +3966,8 @@ wlan_hdd_cfg80211_inform_bss_frame( hdd_adapter_t *pAdapter, ((ie_length != 0) ? (const char *)&bss_desc->ieFields: NULL); unsigned int freq; struct ieee80211_channel *chan; - struct ieee80211_mgmt *mgmt = NULL; + struct ieee80211_mgmt *mgmt = + kzalloc((sizeof (struct ieee80211_mgmt) + ie_length), GFP_KERNEL); struct cfg80211_bss *bss_status = NULL; size_t frame_len = sizeof (struct ieee80211_mgmt) + ie_length; int rssi = 0; @@ -4107,32 +3979,8 @@ wlan_hdd_cfg80211_inform_bss_frame( hdd_adapter_t *pAdapter, ENTER(); - pHddCtx = WLAN_HDD_GET_CTX(pAdapter); - status = wlan_hdd_validate_context(pHddCtx); - - /*bss_update is not allowed during wlan driver loading or unloading*/ - if (pHddCtx->isLoadUnloadInProgress) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s:Loading_unloading in Progress. Ignore!!!",__func__); - return NULL; - } - - - if (0 != status) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: HDD context is not valid", __func__); - return NULL; - } - - mgmt = kzalloc((sizeof (struct ieee80211_mgmt) + ie_length), GFP_KERNEL); if (!mgmt) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: memory allocation failed ", __func__); return NULL; - } pHddCtx = WLAN_HDD_GET_CTX(pAdapter); status = wlan_hdd_validate_context(pHddCtx); @@ -4301,29 +4149,15 @@ static int wlan_hdd_cfg80211_update_bss( struct wiphy *wiphy, eHalStatus status = 0; tScanResultHandle pResult; struct cfg80211_bss *bss_status = NULL; - hdd_context_t *pHddCtx; ENTER(); - pHddCtx = WLAN_HDD_GET_CTX(pAdapter); - - if (pHddCtx->isLogpInProgress) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:LOGP in Progress. Ignore!!!",__func__); - return -EAGAIN; - } - - - /*bss_update is not allowed during wlan driver loading or unloading*/ - if (pHddCtx->isLoadUnloadInProgress) + if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s:Loading_unloading in Progress. Ignore!!!",__func__); - return VOS_STATUS_E_PERM; + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:LOGP in Progress. Ignore!!!",__func__); + return -EAGAIN; } - /* * start getting scan results and populate cgf80211 BSS database */ @@ -4445,121 +4279,85 @@ int wlan_hdd_cfg80211_pmksa_candidate_notify( } #endif //FEATURE_WLAN_LFR +//Begin fjdw67 Motorola, IKJB42MAIN-6385 - LFR roaming instrumentation #ifdef FEATURE_WLAN_LFR_METRICS -/* - * FUNCTION: wlan_hdd_cfg80211_roam_metrics_preauth - * 802.11r/LFR metrics reporting function to report preauth initiation - * - */ +/* FUNCTION: wlan_hdd_cfg80211_roam_metrics_preauth + * 802.11r/LFR metrics reporting function to report preauth initiation*/ #define MAX_LFR_METRICS_EVENT_LENGTH 100 -VOS_STATUS wlan_hdd_cfg80211_roam_metrics_preauth(hdd_adapter_t *pAdapter, - tCsrRoamInfo *pRoamInfo) +eHalStatus wlan_hdd_cfg80211_roam_metrics_preauth(hdd_adapter_t * pAdapter,tCsrRoamInfo *pRoamInfo) { unsigned char metrics_notification[MAX_LFR_METRICS_EVENT_LENGTH + 1]; union iwreq_data wrqu; - ENTER(); - - if (NULL == pAdapter) - { - hddLog(LOGE, "%s: pAdapter is NULL!", __func__); - return VOS_STATUS_E_FAILURE; + if (NULL == pAdapter) { + hddLog(LOGE, "hdd_tx_per_hit_cb: pAdapter is NULL\n"); + return eHAL_STATUS_SUCCESS; } - - /* create the event */ + // create the event memset(&wrqu, 0, sizeof(wrqu)); memset(metrics_notification, 0, sizeof(metrics_notification)); - + memcpy(metrics_notification, "QCOM: LFR_PREAUTH_INIT \0", 24); + memcpy(metrics_notification+24, pRoamInfo->bssid, sizeof(tCsrBssid)); + //memcpy(metrics_notification+23+ sizeof(tCsrBssid), '\0', 1); wrqu.data.pointer = metrics_notification; - wrqu.data.length = scnprintf(metrics_notification, - sizeof(metrics_notification), "QCOM: LFR_PREAUTH_INIT " - MAC_ADDRESS_STR, MAC_ADDR_ARRAY(pRoamInfo->bssid)); - + wrqu.data.length = 24 + sizeof(tCsrBssid); wireless_send_event(pAdapter->dev, IWEVCUSTOM, &wrqu, metrics_notification); - + vos_mem_free(pRoamInfo); EXIT(); - - return VOS_STATUS_SUCCESS; + return eHAL_STATUS_SUCCESS; } - -/* - * FUNCTION: wlan_hdd_cfg80211_roam_metrics_preauth_status - * 802.11r/LFR metrics reporting function to report preauth completion - * or failure - */ -VOS_STATUS wlan_hdd_cfg80211_roam_metrics_preauth_status( - hdd_adapter_t *pAdapter, tCsrRoamInfo *pRoamInfo, bool preauth_status) +/* FUNCTION: wlan_hdd_cfg80211_roam_metrics_preauth_status + * 802.11r/LFR metrics reporting function to report preauth completion or failure */ +eHalStatus wlan_hdd_cfg80211_roam_metrics_preauth_status(hdd_adapter_t * pAdapter,tCsrRoamInfo *pRoamInfo,bool preauth_status) { unsigned char metrics_notification[MAX_LFR_METRICS_EVENT_LENGTH + 1]; union iwreq_data wrqu; - ENTER(); - - if (NULL == pAdapter) - { - hddLog(LOGE, "%s: pAdapter is NULL!", __func__); - return VOS_STATUS_E_FAILURE; + if (NULL == pAdapter) { + hddLog(LOGE, "hdd_tx_per_hit_cb: pAdapter is NULL\n"); + return eHAL_STATUS_SUCCESS; } - - /* create the event */ + // create the event memset(&wrqu, 0, sizeof(wrqu)); memset(metrics_notification, 0, sizeof(metrics_notification)); - - scnprintf(metrics_notification, sizeof(metrics_notification), - "QCOM: LFR_PREAUTH_STATUS "MAC_ADDRESS_STR, - MAC_ADDR_ARRAY(pRoamInfo->bssid)); - - if (1 == preauth_status) - strncat(metrics_notification, " TRUE", 5); + memcpy(metrics_notification, "QCOM: LFR_PREAUTH_STATUS \0", 26); + memcpy(metrics_notification+26, pRoamInfo->bssid, sizeof(tCsrBssid)); + if(1 == preauth_status) + memcpy(metrics_notification+26+ sizeof(tCsrBssid), " TRUE", 5); else - strncat(metrics_notification, " FALSE", 6); - + memcpy(metrics_notification+26+ sizeof(tCsrBssid), " FALSE", 6); wrqu.data.pointer = metrics_notification; - wrqu.data.length = strlen(metrics_notification); - + wrqu.data.length = 32 + sizeof(tCsrBssid); wireless_send_event(pAdapter->dev, IWEVCUSTOM, &wrqu, metrics_notification); - + vos_mem_free(pRoamInfo); EXIT(); - - return VOS_STATUS_SUCCESS; + return eHAL_STATUS_SUCCESS; } - -/* - * FUNCTION: wlan_hdd_cfg80211_roam_metrics_handover - * 802.11r/LFR metrics reporting function to report handover initiation - * - */ -VOS_STATUS wlan_hdd_cfg80211_roam_metrics_handover(hdd_adapter_t * pAdapter, - tCsrRoamInfo *pRoamInfo) +/* FUNCTION: wlan_hdd_cfg80211_roam_metrics_handover + * 802.11r/LFR metrics reporting function to report handover initiation */ +eHalStatus wlan_hdd_cfg80211_roam_metrics_handover(hdd_adapter_t * pAdapter,tCsrRoamInfo *pRoamInfo) { unsigned char metrics_notification[MAX_LFR_METRICS_EVENT_LENGTH + 1]; union iwreq_data wrqu; - ENTER(); - - if (NULL == pAdapter) - { - hddLog(LOGE, "%s: pAdapter is NULL!", __func__); - return VOS_STATUS_E_FAILURE; + if (NULL == pAdapter) { + hddLog(LOGE, "hdd_tx_per_hit_cb: pAdapter is NULL\n"); + return eHAL_STATUS_SUCCESS; } - - /* create the event */ + // create the event memset(&wrqu, 0, sizeof(wrqu)); memset(metrics_notification, 0, sizeof(metrics_notification)); - + memcpy(metrics_notification, "QCOM: LFR_PREAUTH_HANDOVER \0", 28); + memcpy(metrics_notification+28, pRoamInfo->bssid, sizeof(tCsrBssid)); wrqu.data.pointer = metrics_notification; - wrqu.data.length = scnprintf(metrics_notification, - sizeof(metrics_notification), "QCOM: LFR_PREAUTH_HANDOVER " - MAC_ADDRESS_STR, MAC_ADDR_ARRAY(pRoamInfo->bssid)); - + wrqu.data.length = 28 + sizeof(tCsrBssid); wireless_send_event(pAdapter->dev, IWEVCUSTOM, &wrqu, metrics_notification); - + vos_mem_free(pRoamInfo); EXIT(); - - return VOS_STATUS_SUCCESS; + return eHAL_STATUS_SUCCESS; } #endif - +//End fjdw67 Motorola, IKJB42MAIN-6385 /* * FUNCTION: hdd_cfg80211_scan_done_callback * scanning callback function, called after finishing scan @@ -4583,8 +4381,6 @@ static eHalStatus hdd_cfg80211_scan_done_callback(tHalHandle halHandle, "scanID = %d, returned status = %d\n", __func__, halHandle, pContext, (int) scanId, (int) status); - pScanInfo->mScanPendingCounter = 0; - //Block on scan req completion variable. Can't wait forever though. ret = wait_for_completion_interruptible_timeout( &pScanInfo->scan_req_completion_event, @@ -4595,7 +4391,7 @@ static eHalStatus hdd_cfg80211_scan_done_callback(tHalHandle halHandle, goto allow_suspend; } - if (pScanInfo->mScanPending != VOS_TRUE) + if(pScanInfo->mScanPending != VOS_TRUE) { VOS_ASSERT(pScanInfo->mScanPending); goto allow_suspend; @@ -4668,6 +4464,11 @@ static eHalStatus hdd_cfg80211_scan_done_callback(tHalHandle halHandle, * cfg80211_scan_done informing NL80211 about completion * of scanning */ + //Begin Mot IKHSS7-28961 : Dont allow sleep so that supplicant + // can fetch scan results before kerenel ages it out if slept immediately + // and sleep duration is more than the ageout time. + hdd_prevent_suspend_after_scan(HZ/4); + //END IKHSS7-28961 cfg80211_scan_done(req, false); complete(&pScanInfo->abortscan_event_var); @@ -4679,7 +4480,7 @@ allow_suspend: * immediatly after the driver gets connect request(i.e after scan) * from supplicant, this result in app's is suspending and not able * to process the connect request to AP */ - hdd_prevent_suspend_timeout(1000); + hdd_allow_suspend_timeout(1000); #ifdef FEATURE_WLAN_TDLS wlan_hdd_tdls_scan_done_callback(pAdapter); @@ -4703,13 +4504,6 @@ v_BOOL_t hdd_isScanAllowed( hdd_context_t *pHddCtx ) v_U8_t staId = 0; v_U8_t *staMac = NULL; - if (TRUE == pHddCtx->btCoexModeSet) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - FL("BTCoex Mode operation in progress, Do not allow scan")); - return VOS_FALSE; - } - status = hdd_get_front_adapter ( pHddCtx, &pAdapterNode ); while ( NULL != pAdapterNode && VOS_STATUS_SUCCESS == status ) @@ -4838,10 +4632,7 @@ int wlan_hdd_cfg80211_scan( struct wiphy *wiphy, if (TRUE == pScanInfo->mScanPending) { - if ( MAX_PENDING_LOG > pScanInfo->mScanPendingCounter++ ) - { - hddLog(VOS_TRACE_LEVEL_ERROR, "%s: mScanPending is TRUE", __func__); - } + hddLog(VOS_TRACE_LEVEL_INFO, "%s: mScanPending is TRUE", __func__); return -EBUSY; } @@ -4851,7 +4642,7 @@ int wlan_hdd_cfg80211_scan( struct wiphy *wiphy, //If no action frame pending if (0 != wlan_hdd_check_remain_on_channel(pAdapter)) { - hddLog(VOS_TRACE_LEVEL_ERROR, "%s: Remain On Channel Pending", __func__); + hddLog(VOS_TRACE_LEVEL_INFO, "%s: Remain On Channel Pending", __func__); return -EBUSY; } #ifdef FEATURE_WLAN_TDLS @@ -4906,12 +4697,21 @@ int wlan_hdd_cfg80211_scan( struct wiphy *wiphy, * Becasue of this, driver is assuming that this is not wildcard scan and so * is not aging out the scan results. */ - if (request->ssids && '\0' == request->ssids->ssid[0]) - { + /* Motorola - support passive scan for autonomous mode - START */ + if (NULL == request->ssids) { + request->n_ssids = -1; + /* Motorola - support passive scan for autonomous mode - END */ + } else if ('\0' == request->ssids->ssid[0]) { request->n_ssids = 0; } - - if ((request->ssids) && (0 < request->n_ssids)) + /* Motorola - support passive scan for autonomous mode - START */ + if (-1 == request->n_ssids) { + scanRequest.scanType = eSIR_PASSIVE_SCAN; + scanRequest.minChnTime = cfg_param->nPassiveMinChnTime; + scanRequest.maxChnTime = cfg_param->nPassiveMaxChnTime; + hddLog(VOS_TRACE_LEVEL_INFO, "requesting PASSIVE SCAN"); + /* Motorola - support passive scan for autonomous mode - END */ + } else if (0 < request->n_ssids) { tCsrSSIDInfo *SsidInfo; int j; @@ -4941,19 +4741,23 @@ int wlan_hdd_cfg80211_scan( struct wiphy *wiphy, } /* set the scan type to active */ scanRequest.scanType = eSIR_ACTIVE_SCAN; + scanRequest.minChnTime = cfg_param->nActiveMinChnTime; + scanRequest.maxChnTime = cfg_param->nActiveMaxChnTime; } else if(WLAN_HDD_P2P_GO == pAdapter->device_mode) { /* set the scan type to active */ scanRequest.scanType = eSIR_ACTIVE_SCAN; + scanRequest.minChnTime = cfg_param->nActiveMinChnTime; + scanRequest.maxChnTime = cfg_param->nActiveMaxChnTime; } else { /*Set the scan type to default type, in this case it is ACTIVE*/ scanRequest.scanType = pScanInfo->scan_mode; + scanRequest.minChnTime = cfg_param->nActiveMinChnTime; + scanRequest.maxChnTime = cfg_param->nActiveMaxChnTime; } - scanRequest.minChnTime = cfg_param->nActiveMinChnTime; - scanRequest.maxChnTime = cfg_param->nActiveMaxChnTime; } else { @@ -5014,31 +4818,19 @@ int wlan_hdd_cfg80211_scan( struct wiphy *wiphy, if( request->ie_len ) { /* save this for future association (join requires this) */ - /*TODO: Array needs to be converted to dynamic allocation, - * as multiple ie.s can be sent in cfg80211_scan_request structure - * CR 597966 - */ memset( &pScanInfo->scanAddIE, 0, sizeof(pScanInfo->scanAddIE) ); memcpy( pScanInfo->scanAddIE.addIEdata, request->ie, request->ie_len); pScanInfo->scanAddIE.length = request->ie_len; - if ((WLAN_HDD_INFRA_STATION == pAdapter->device_mode) || + if((WLAN_HDD_INFRA_STATION == pAdapter->device_mode) || (WLAN_HDD_P2P_CLIENT == pAdapter->device_mode) || - (WLAN_HDD_P2P_DEVICE == pAdapter->device_mode)) + (WLAN_HDD_P2P_DEVICE == pAdapter->device_mode) + ) { - if ( request->ie_len <= SIR_MAC_MAX_IE_LENGTH) - { - pwextBuf->roamProfile.nAddIEScanLength = request->ie_len; - memcpy( pwextBuf->roamProfile.addIEScan, - request->ie, request->ie_len); - } - else - { - hddLog(VOS_TRACE_LEVEL_ERROR, "Scan Ie length is invalid:" - "%d", request->ie_len); - } - + pwextBuf->roamProfile.pAddIEScan = pScanInfo->scanAddIE.addIEdata; + pwextBuf->roamProfile.nAddIEScanLength = pScanInfo->scanAddIE.length; } + scanRequest.uIEFieldLen = pScanInfo->scanAddIE.length; scanRequest.pIEField = pScanInfo->scanAddIE.addIEdata; @@ -5160,22 +4952,14 @@ int wlan_hdd_cfg80211_connect_start( hdd_adapter_t *pAdapter, { int status = 0; hdd_wext_state_t *pWextState; - hdd_context_t *pHddCtx; v_U32_t roamId; tCsrRoamProfile *pRoamProfile; + eMib_dot11DesiredBssType connectedBssType; eCsrAuthType RSNAuthType; ENTER(); pWextState = WLAN_HDD_GET_WEXT_STATE_PTR(pAdapter); - pHddCtx = WLAN_HDD_GET_CTX(pAdapter); - status = wlan_hdd_validate_context(pHddCtx); - if (status) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: HDD context is not valid!", __func__); - return status; - } if (SIR_MAC_MAX_SSID_LENGTH < ssid_len) { @@ -5187,8 +4971,41 @@ int wlan_hdd_cfg80211_connect_start( hdd_adapter_t *pAdapter, if (pRoamProfile) { + int ret = 0; hdd_station_ctx_t *pHddStaCtx; pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); + hdd_connGetConnectedBssType(pHddStaCtx,&connectedBssType ); + + if((eMib_dot11DesiredBssType_independent == connectedBssType) || + (eConnectionState_Associated == pHddStaCtx->conn_info.connState) || + (eConnectionState_IbssConnected == pHddStaCtx->conn_info.connState)) + { + /* Issue disconnect to CSR */ + INIT_COMPLETION(pAdapter->disconnect_comp_var); + if( eHAL_STATUS_SUCCESS == + sme_RoamDisconnect( WLAN_HDD_GET_HAL_CTX(pAdapter), + pAdapter->sessionId, + eCSR_DISCONNECT_REASON_UNSPECIFIED ) ) + { + ret = wait_for_completion_interruptible_timeout( + &pAdapter->disconnect_comp_var, + msecs_to_jiffies(WLAN_WAIT_TIME_DISCONNECT)); + if (0 == ret) + { + VOS_ASSERT(0); + } + } + } + else if(eConnectionState_Disconnecting == pHddStaCtx->conn_info.connState) + { + ret = wait_for_completion_interruptible_timeout( + &pAdapter->disconnect_comp_var, + msecs_to_jiffies(WLAN_WAIT_TIME_DISCONNECT)); + if (0 == ret) + { + VOS_ASSERT(0); + } + } if (HDD_WMM_USER_MODE_NO_QOS == (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini->WmmMode) @@ -5591,7 +5408,9 @@ int wlan_hdd_cfg80211_set_ie( hdd_adapter_t *pAdapter, pWextState->roamProfile.nWPAReqIELength = eLen + 2;//ie_len; } else if ( (0 == memcmp(&genie[0], P2P_OUI_TYPE, - P2P_OUI_TYPE_SIZE))) + P2P_OUI_TYPE_SIZE)) + /*Consider P2P IE, only for P2P Client */ + && (WLAN_HDD_P2P_CLIENT == pAdapter->device_mode) ) { v_U16_t curAddIELen = pWextState->assocAddIE.length; hddLog (VOS_TRACE_LEVEL_INFO, "%s Set P2P IE(len %d)", @@ -5792,7 +5611,13 @@ int wlan_hdd_cfg80211_set_privacy( hdd_adapter_t *pAdapter, if (req->crypto.wpa_versions) { - if (NL80211_WPA_VERSION_1 == req->crypto.wpa_versions) + if ( (NL80211_WPA_VERSION_1 == req->crypto.wpa_versions) + && ( (req->ie_len) + && (hdd_isWPAIEPresent(req->ie, req->ie_len) ) ) ) + // Make sure that it is including a WPA IE. + /* Currently NL is putting WPA version 1 even for open, + * since p2p ie is also put in same buffer. + * */ { pWextState->wpaVersion = IW_AUTH_WPA_VERSION_WPA; } @@ -5915,57 +5740,6 @@ int wlan_hdd_cfg80211_set_privacy( hdd_adapter_t *pAdapter, } /* - * FUNCTION: wlan_hdd_try_disconnect - * This function is used to disconnect from previous - * connection - */ -static int wlan_hdd_try_disconnect( hdd_adapter_t *pAdapter ) -{ - long ret = 0; - hdd_station_ctx_t *pHddStaCtx; - eMib_dot11DesiredBssType connectedBssType; - - pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); - - hdd_connGetConnectedBssType(pHddStaCtx,&connectedBssType ); - - if((eMib_dot11DesiredBssType_independent == connectedBssType) || - (eConnectionState_Associated == pHddStaCtx->conn_info.connState) || - (eConnectionState_IbssConnected == pHddStaCtx->conn_info.connState)) - { - /* Issue disconnect to CSR */ - INIT_COMPLETION(pAdapter->disconnect_comp_var); - if( eHAL_STATUS_SUCCESS == - sme_RoamDisconnect( WLAN_HDD_GET_HAL_CTX(pAdapter), - pAdapter->sessionId, - eCSR_DISCONNECT_REASON_UNSPECIFIED ) ) - { - ret = wait_for_completion_interruptible_timeout( - &pAdapter->disconnect_comp_var, - msecs_to_jiffies(WLAN_WAIT_TIME_DISCONNECT)); - if (0 >= ret) - { - hddLog(LOGE, FL("Failed to receive disconnect event")); - return -EALREADY; - } - } - } - else if(eConnectionState_Disconnecting == pHddStaCtx->conn_info.connState) - { - ret = wait_for_completion_interruptible_timeout( - &pAdapter->disconnect_comp_var, - msecs_to_jiffies(WLAN_WAIT_TIME_DISCONNECT)); - if (0 >= ret) - { - hddLog(LOGE, FL("Failed to receive disconnect event")); - return -EALREADY; - } - } - - return 0; -} - -/* * FUNCTION: wlan_hdd_cfg80211_set_privacy * This function is used to initialize the security * parameters during connect operation. @@ -5978,28 +5752,14 @@ static int wlan_hdd_cfg80211_connect( struct wiphy *wiphy, int status; hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR( ndev ); VOS_STATUS exitbmpsStatus = VOS_STATUS_E_INVAL; - hdd_context_t *pHddCtx; + hdd_context_t *pHddCtx = NULL; ENTER(); - if (!pAdapter) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: Adapter context is null", __func__); - return VOS_STATUS_E_FAILURE; - } - hddLog(VOS_TRACE_LEVEL_INFO, "%s: device_mode = %d\n",__func__,pAdapter->device_mode); pHddCtx = WLAN_HDD_GET_CTX(pAdapter); - if (!pHddCtx) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: HDD context is null", __func__); - return VOS_STATUS_E_FAILURE; - } - status = wlan_hdd_validate_context(pHddCtx); if (0 != status) @@ -6018,24 +5778,6 @@ static int wlan_hdd_cfg80211_connect( struct wiphy *wiphy, return -ECONNREFUSED; } #endif - - //If Device Mode is Station Concurrent Sessions Exit BMps - //P2P Mode will be taken care in Open/close adapter - if((WLAN_HDD_INFRA_STATION == pAdapter->device_mode) && - (vos_concurrent_sessions_running())) - { - exitbmpsStatus = hdd_disable_bmps_imps(pHddCtx, WLAN_HDD_INFRA_STATION); - } - - /*Try disconnecting if already in connected state*/ - status = wlan_hdd_try_disconnect(pAdapter); - if ( 0 > status) - { - hddLog(VOS_TRACE_LEVEL_ERROR, FL("Failed to disconnect the existing" - " connection")); - return -EALREADY; - } - /*initialise security parameters*/ status = wlan_hdd_cfg80211_set_privacy(pAdapter, req); @@ -6046,6 +5788,14 @@ static int wlan_hdd_cfg80211_connect( struct wiphy *wiphy, return status; } + //If Device Mode is Station Concurrent Sessions Exit BMps + //P2P Mode will be taken care in Open/close adapter + if((WLAN_HDD_INFRA_STATION == pAdapter->device_mode) && + (vos_concurrent_sessions_running())) + { + exitbmpsStatus = hdd_disable_bmps_imps(pHddCtx, WLAN_HDD_INFRA_STATION); + } + if ( req->channel ) { status = wlan_hdd_cfg80211_connect_start(pAdapter, req->ssid, @@ -6120,8 +5870,7 @@ static int wlan_hdd_cfg80211_disconnect( struct wiphy *wiphy, if (NULL != pRoamProfile) { /*issue disconnect request to SME, if station is in connected state*/ - if ((pHddStaCtx->conn_info.connState == eConnectionState_Associated) || - (pHddStaCtx->conn_info.connState == eConnectionState_Connecting)) + if (pHddStaCtx->conn_info.connState == eConnectionState_Associated) { eCsrRoamDisconnectReason reasonCode = eCSR_DISCONNECT_REASON_UNSPECIFIED; @@ -6149,13 +5898,14 @@ static int wlan_hdd_cfg80211_disconnect( struct wiphy *wiphy, break; } (WLAN_HDD_GET_CTX(pAdapter))->isAmpAllowed = VOS_TRUE; + pHddStaCtx->conn_info.connState = eConnectionState_NotConnected; INIT_COMPLETION(pAdapter->disconnect_comp_var); pScanInfo = &pHddCtx->scan_info; if (pScanInfo->mScanPending) { - hddLog(VOS_TRACE_LEVEL_INFO, "Disconnect is in progress, " + hddLog(VOS_TRACE_LEVEL_INFO, "Disconnect is in progress, " "Aborting Scan"); - hdd_abort_mac_scan(pHddCtx, eCSR_SCAN_ABORT_DEFAULT); + hdd_abort_mac_scan(pHddCtx); } #ifdef FEATURE_WLAN_TDLS @@ -6198,12 +5948,6 @@ static int wlan_hdd_cfg80211_disconnect( struct wiphy *wiphy, netif_tx_disable(dev); netif_carrier_off(dev); } - else - { - hddLog(VOS_TRACE_LEVEL_ERROR, "%s: unexpected cfg disconnect API" - "called while in %d state", __func__, - pHddStaCtx->conn_info.connState); - } } else { @@ -6315,15 +6059,6 @@ static int wlan_hdd_cfg80211_join_ibss( struct wiphy *wiphy, return -EIO; } - /*Try disconnecting if already in connected state*/ - status = wlan_hdd_try_disconnect(pAdapter); - if ( 0 > status) - { - hddLog(VOS_TRACE_LEVEL_ERROR, FL("Failed to disconnect the existing" - " IBSS connection")); - return -EALREADY; - } - pRoamProfile = &pWextState->roamProfile; if ( eCSR_BSS_TYPE_START_IBSS != pRoamProfile->BSSType ) @@ -6864,11 +6599,10 @@ static int wlan_hdd_cfg80211_get_station(struct wiphy *wiphy, struct net_device /* Update MAX rate */ maxRate = (currentRate > maxRate)?currentRate:maxRate; } - /* Get MCS Rate Set -- - Only if we are always reporting max speed (or) - if we have good rssi */ - if ((0 == rssidx) || - (eHDD_LINK_SPEED_REPORT_MAX == pCfg->reportMaxLinkSpeed)) + /* Get MCS Rate Set -- but only if we are connected at MCS + rates or if we are always reporting max speed or if we have + good rssi */ + if ((0 == rssidx) && !(rate_flags & eHAL_TX_RATE_LEGACY)) { if (0 != ccmCfgGetStr(WLAN_HDD_GET_HAL_CTX(pAdapter), WNI_CFG_CURRENT_MCS_SET, MCSRates, &MCSLeng)) @@ -7140,10 +6874,7 @@ static int wlan_hdd_cfg80211_set_power_mgmt(struct wiphy *wiphy, (eConnectionState_Associated == (WLAN_HDD_GET_STATION_CTX_PTR(pAdapter))->conn_info.connState)) { - - hddLog(VOS_TRACE_LEVEL_INFO, - "offload: in cfg80211_set_power_mgmt, calling arp offload"); - vos_status = hdd_conf_arp_offload(pAdapter, TRUE); + vos_status = hdd_conf_hostarpoffload(pAdapter, TRUE); if (!VOS_IS_STATUS_SUCCESS(vos_status)) { hddLog(VOS_TRACE_LEVEL_INFO, @@ -7326,15 +7057,12 @@ static int wlan_hdd_cfg80211_add_station(struct wiphy *wiphy, #ifdef FEATURE_WLAN_LFR -#define MAX_PMKSAIDS_IN_CACHE 8 - -static tPmkidCacheInfo PMKIDCache[MAX_PMKSAIDS_IN_CACHE]; // HDD local cache -static tANI_U32 PMKIDCacheIndex; // HDD local Cache index - - static int wlan_hdd_cfg80211_set_pmksa(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_pmksa *pmksa) { +#define MAX_PMKSAIDS_IN_CACHE 8 + static tPmkidCacheInfo PMKIDCache[MAX_PMKSAIDS_IN_CACHE]; // HDD Local cache + static tANI_U32 i; // HDD Local Cache index tANI_U32 j=0; hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); tHalHandle halHandle; @@ -7365,7 +7093,7 @@ static int wlan_hdd_cfg80211_set_pmksa(struct wiphy *wiphy, struct net_device *d // Retrieve halHandle halHandle = WLAN_HDD_GET_HAL_CTX(pAdapter); - for (j = 0; j < PMKIDCacheIndex; j++) + for (j = 0; j < i; j++) { if(vos_mem_compare(PMKIDCache[j].BSSID, pmksa->bssid, WNI_CFG_BSSID_LEN)) @@ -7386,23 +7114,23 @@ static int wlan_hdd_cfg80211_set_pmksa(struct wiphy *wiphy, struct net_device *d } /* Check we compared all entries,if then take the first slot now */ - if(j == MAX_PMKSAIDS_IN_CACHE) PMKIDCacheIndex=0; + if(j == MAX_PMKSAIDS_IN_CACHE) i=0; if (!BSSIDMatched) { // Now, we DON'T have a BSSID match, so take a new entry in the cache. - vos_mem_copy(PMKIDCache[PMKIDCacheIndex].BSSID, + vos_mem_copy(PMKIDCache[i].BSSID, pmksa->bssid, ETHER_ADDR_LEN); - vos_mem_copy(PMKIDCache[PMKIDCacheIndex].PMKID, + vos_mem_copy(PMKIDCache[i].PMKID, pmksa->pmkid, CSR_RSN_PMKID_SIZE); hddLog(VOS_TRACE_LEVEL_FATAL, "%s: Adding a new cache entry %d.", - __func__, PMKIDCacheIndex ); + __func__, i ); dump_bssid(pmksa->bssid); dump_pmkid(halHandle, pmksa->pmkid); // Increment the HDD Local Cache index // The "i=0" doesn't work for the call to sme_RoamSetPMKIDCache() - LFR FIXME - if (PMKIDCacheIndex <= (MAX_PMKSAIDS_IN_CACHE-1)) PMKIDCacheIndex++; else PMKIDCacheIndex = 0; + if (i<=(MAX_PMKSAIDS_IN_CACHE-1)) i++; else i=0; } @@ -7410,177 +7138,28 @@ static int wlan_hdd_cfg80211_set_pmksa(struct wiphy *wiphy, struct net_device *d //hddLog(LOG1, FL("%s: Calling csrRoamSetPMKIDCache with %d cache entries."), // __func__, i ); hddLog(VOS_TRACE_LEVEL_FATAL, "%s: Calling csrRoamSetPMKIDCache with %d cache entries.", - __func__, PMKIDCacheIndex ); + __func__, i ); // Finally set the PMKSA ID Cache in CSR result = sme_RoamSetPMKIDCache(halHandle,pAdapter->sessionId, PMKIDCache, - PMKIDCacheIndex); + i ); return 0; } - static int wlan_hdd_cfg80211_del_pmksa(struct wiphy *wiphy, struct net_device *dev, - struct cfg80211_pmksa *pmksa) + struct cfg80211_pmksa *pmksa) { - tANI_U32 j=0; - hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); - tHalHandle halHandle; - tANI_U8 BSSIDMatched = 0; - hdd_context_t *pHddCtx; - int status = 0; - - hddLog(VOS_TRACE_LEVEL_DEBUG, "%s: deleting PMKSA with PMKSA_ID %d .", - __func__,pmksa->pmkid); - - /* Validate pAdapter */ - if (NULL == pAdapter) - { - hddLog(VOS_TRACE_LEVEL_ERROR, "%s: Invalid Adapter" ,__func__); - return -EINVAL; - } - - pHddCtx = WLAN_HDD_GET_CTX(pAdapter); - status = wlan_hdd_validate_context(pHddCtx); - - if (0 != status) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: HDD context is not valid", __func__); - return status; - } - - /*Retrieve halHandle*/ - halHandle = WLAN_HDD_GET_HAL_CTX(pAdapter); - - /*in case index is 0,no entry to delete*/ - if (0 == PMKIDCacheIndex) - { - hddLog(VOS_TRACE_LEVEL_ERROR, "%s: Invalid entry to delete" , - __func__); - return -EINVAL; - } - - /*find the matching PMKSA entry from j=0 to (index-1), - * and delete the matched one - */ - for (j = 0; j<PMKIDCacheIndex; j++) - { - if (vos_mem_compare(PMKIDCache[j].BSSID, - pmksa->bssid, - WNI_CFG_BSSID_LEN)) - { - /* BSSID matched entry */ - BSSIDMatched = 1; - - if (j<PMKIDCacheIndex-1) - { - /*replace the matching entry with the last entry in HDD local cache*/ - vos_mem_copy(PMKIDCache[j].BSSID, - PMKIDCache[PMKIDCacheIndex-1].BSSID, - WNI_CFG_BSSID_LEN); - vos_mem_copy(PMKIDCache[j].PMKID, - PMKIDCache[PMKIDCacheIndex-1].PMKID, - CSR_RSN_PMKID_SIZE); - } - - /*clear the last entry in HDD cache ---[index-1]*/ - vos_mem_zero(PMKIDCache[PMKIDCacheIndex-1].BSSID, WNI_CFG_BSSID_LEN); - vos_mem_zero(PMKIDCache[PMKIDCacheIndex-1].PMKID, CSR_RSN_PMKID_SIZE); - - /*reduce the PMKID array index*/ - PMKIDCacheIndex--; - - /*delete the last PMKID cache in CSR*/ - if (eHAL_STATUS_SUCCESS != - sme_RoamDelPMKIDfromCache(halHandle, pAdapter->sessionId, pmksa->bssid)) - { - hddLog(VOS_TRACE_LEVEL_ERROR,"%s: cannot delete PMKSA %d CONTENT.", - __func__,PMKIDCacheIndex); - status = -EINVAL; - } - - dump_bssid(pmksa->bssid); - dump_pmkid(halHandle,pmksa->pmkid); - - break; - } - } - - /* we compare all entries,but cannot find matching entry */ - if (j == MAX_PMKSAIDS_IN_CACHE && !BSSIDMatched) - { - hddLog(VOS_TRACE_LEVEL_FATAL, "%s: No such PMKSA entry existed %d.", - __func__,pmksa->bssid); - dump_bssid(pmksa->bssid); - dump_pmkid(halHandle, pmksa->pmkid); - return -EINVAL; - } - return status; + ENTER(); + // TODO: Implement this later. + return 0; } - - static int wlan_hdd_cfg80211_flush_pmksa(struct wiphy *wiphy, struct net_device *dev) { - tANI_U32 j=0; - hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); - tHalHandle halHandle; - hdd_context_t *pHddCtx; - tANI_U8 *pBSSId; - int status = 0; - - hddLog(VOS_TRACE_LEVEL_DEBUG, "%s: flushing PMKSA ",__func__); - - /* Validate pAdapter */ - if (NULL == pAdapter) - { - hddLog(VOS_TRACE_LEVEL_ERROR, - "%s: Invalid Adapter" ,__func__); - return -EINVAL; - } - - pHddCtx = WLAN_HDD_GET_CTX(pAdapter); - status = wlan_hdd_validate_context(pHddCtx); - - if (0 != status) - { - hddLog(VOS_TRACE_LEVEL_ERROR, - "%s: HDD context is not valid", __func__); - return status; - } - - /*Retrieve halHandle*/ - halHandle = WLAN_HDD_GET_HAL_CTX(pAdapter); - - /*in case index is 0,no entry to delete*/ - if (0 == PMKIDCacheIndex) - { - hddLog(VOS_TRACE_LEVEL_ERROR, "%s: Invalid entry to delete" , - __func__); - return -EINVAL; - } - - /*delete all the PMKSA one by one */ - for (j = 0; j<PMKIDCacheIndex; j++) - { - pBSSId =(tANI_U8 *)(PMKIDCache[j].BSSID); - - /*delete the PMKID in CSR*/ - if (eHAL_STATUS_SUCCESS != - sme_RoamDelPMKIDfromCache(halHandle, pAdapter->sessionId, pBSSId)) - { - hddLog(VOS_TRACE_LEVEL_ERROR ,"%s cannot flush PMKIDCache %d.", - __func__,j); - status = -EINVAL; - } - /*clear the entry in HDD cache 0--index-1 */ - vos_mem_zero(PMKIDCache[j].BSSID, WNI_CFG_BSSID_LEN); - vos_mem_zero(PMKIDCache[j].PMKID, CSR_RSN_PMKID_SIZE); - } - - PMKIDCacheIndex = 0; - return status; + ENTER(); + // TODO: Implement this later. + return 0; } #endif @@ -7666,67 +7245,6 @@ void hdd_cfg80211_sched_scan_done_callback(void *callbackContext, } /* - * FUNCTION: wlan_hdd_is_pno_allowed - * To check is there any P2P GO/SAP or P2P Client/STA - * session is active - */ -static eHalStatus wlan_hdd_is_pno_allowed(hdd_adapter_t *pAdapter) -{ - hdd_adapter_list_node_t *pAdapterNode = NULL, *pNext = NULL; - hdd_adapter_t *pTempAdapter = NULL; - hdd_station_ctx_t *pStaCtx; - hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); - int status = 0; - status = hdd_get_front_adapter(pHddCtx, &pAdapterNode); - - while ((NULL != pAdapterNode) && (VOS_STATUS_SUCCESS == status)) - { - pTempAdapter = pAdapterNode->pAdapter; - pStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pTempAdapter); - - if (((WLAN_HDD_INFRA_STATION == pTempAdapter->device_mode) - && (eConnectionState_NotConnected != pStaCtx->conn_info.connState)) - || (WLAN_HDD_P2P_CLIENT == pTempAdapter->device_mode) - || (WLAN_HDD_P2P_GO == pTempAdapter->device_mode) - || (WLAN_HDD_SOFTAP == pTempAdapter->device_mode) - ) - { - return eHAL_STATUS_FAILURE; - } - status = hdd_get_next_adapter ( pHddCtx, pAdapterNode, &pNext ); - pAdapterNode = pNext; - } - return eHAL_STATUS_SUCCESS; -} - -void hdd_cfg80211_sched_scan_start_status_cb(void *callbackContext, VOS_STATUS status) -{ - hdd_adapter_t *pAdapter = callbackContext; - hdd_context_t *pHddCtx; - - if ((NULL == pAdapter) || (WLAN_HDD_ADAPTER_MAGIC != pAdapter->magic)) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - FL("Invalid adapter or adapter has invalid magic")); - return; - } - - pHddCtx = WLAN_HDD_GET_CTX(pAdapter); - if (0 != wlan_hdd_validate_context(pHddCtx)) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - FL("HDD context is not valid")); - return; - } - - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - FL("PNO enable response status = %d"), status); - - pAdapter->pno_req_status = (status == VOS_STATUS_SUCCESS) ? 0 : -EBUSY; - complete(&pAdapter->pno_comp_var); -} - -/* * FUNCTION: wlan_hdd_cfg80211_sched_scan_start * NL interface to enable PNO */ @@ -7737,7 +7255,7 @@ static int wlan_hdd_cfg80211_sched_scan_start(struct wiphy *wiphy, tpSirPNOScanReq pPnoRequest = NULL; hdd_context_t *pHddCtx; tHalHandle hHal; - v_U32_t i, indx, num_ch, tempInterval; + v_U32_t i, indx, num_ch; u8 valid_ch[WNI_CFG_VALID_CHANNEL_LIST_LEN]; u8 channels_allowed[WNI_CFG_VALID_CHANNEL_LIST_LEN]; v_U32_t num_channels_allowed = WNI_CFG_VALID_CHANNEL_LIST_LEN; @@ -7769,26 +7287,6 @@ static int wlan_hdd_cfg80211_sched_scan_start(struct wiphy *wiphy, return -EINVAL; } - ret = wlan_hdd_scan_abort(pAdapter); - if (ret <= 0) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: aborting the existing scan is unsuccessfull", __func__); - return -EBUSY; - } - -/* The current firmware design for PNO does not consider concurrent - * active sessions.Hence , determine the concurrent active sessions - * and return a failure to the framework on a request for schedule - * scan. - */ - if (eHAL_STATUS_SUCCESS != wlan_hdd_is_pno_allowed(pAdapter)) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - FL("Cannot handle sched_scan")); - return -EBUSY; - } - pPnoRequest = (tpSirPNOScanReq) vos_mem_malloc(sizeof (tSirPNOScanReq)); if (NULL == pPnoRequest) { @@ -7885,41 +7383,15 @@ static int wlan_hdd_cfg80211_sched_scan_start(struct wiphy *wiphy, pPnoRequest->us5GProbeTemplateLen); } - /* Driver gets only one time interval which is hardcoded in - * supplicant for 10000ms. Taking power consumption into account 6 timers - * will be used, Timervalue is increased exponentially i.e 10,20,40, - * 80,160,320 secs. And number of scan cycle for each timer - * is configurable through INI param gPNOScanTimerRepeatValue. - * If it is set to 0 only one timer will be used and PNO scan cycle - * will be repeated after each interval specified by supplicant - * till PNO is disabled. - */ - if (0 == pHddCtx->cfg_ini->configPNOScanTimerRepeatValue) - pPnoRequest->scanTimers.ucScanTimersCount = HDD_PNO_SCAN_TIMERS_SET_ONE; - else - pPnoRequest->scanTimers.ucScanTimersCount = - HDD_PNO_SCAN_TIMERS_SET_MULTIPLE; - - tempInterval = (request->interval)/1000; - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "Base scan interval = %d PNOScanTimerRepeatValue = %d", - tempInterval, pHddCtx->cfg_ini->configPNOScanTimerRepeatValue); - for ( i = 0; i < pPnoRequest->scanTimers.ucScanTimersCount; i++) - { - pPnoRequest->scanTimers.aTimerValues[i].uTimerRepeat = - pHddCtx->cfg_ini->configPNOScanTimerRepeatValue; - pPnoRequest->scanTimers.aTimerValues[i].uTimerValue = tempInterval; - tempInterval *= 2; - } - //Repeat last timer until pno disabled. - pPnoRequest->scanTimers.aTimerValues[i-1].uTimerRepeat = 0; - - pPnoRequest->modePNO = SIR_PNO_MODE_IMMEDIATE; - - INIT_COMPLETION(pAdapter->pno_comp_var); - pPnoRequest->statusCallback = hdd_cfg80211_sched_scan_start_status_cb; - pPnoRequest->callbackContext = pAdapter; - pAdapter->pno_req_status = 0; + /* framework provides interval in ms */ + //BEGIN MOT a19110 IKJBMR2-1528 set PNO intervals + pPnoRequest->scanTimers.ucScanTimersCount = 2; + pPnoRequest->scanTimers.aTimerValues[0].uTimerRepeat = 7; + pPnoRequest->scanTimers.aTimerValues[0].uTimerValue = 45; + pPnoRequest->scanTimers.aTimerValues[1].uTimerRepeat = 0; + pPnoRequest->scanTimers.aTimerValues[1].uTimerValue = 480; + //END IKJBMR2-1528 + pPnoRequest->modePNO = SIR_PNO_MODE_ON_SUSPEND; status = sme_SetPreferredNetworkList(WLAN_HDD_GET_HAL_CTX(pAdapter), pPnoRequest, pAdapter->sessionId, @@ -7932,26 +7404,10 @@ static int wlan_hdd_cfg80211_sched_scan_start(struct wiphy *wiphy, goto error; } - ret = wait_for_completion_timeout( - &pAdapter->pno_comp_var, - msecs_to_jiffies(WLAN_WAIT_TIME_PNO)); - if (0 >= ret) - { - // Did not receive the response for PNO enable in time. - // Assuming the PNO enable was success. - // Returning error from here, because we timeout, results - // in side effect of Wifi (Wifi Setting) not to work. - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - FL("Timed out waiting for PNO to be Enabled")); - ret = 0; - goto error; - } - - ret = pAdapter->pno_req_status; + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "PNO scanRequest offloaded"); error: - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - FL("PNO scanRequest offloaded ret = %d"), ret); vos_mem_free(pPnoRequest); return ret; } @@ -8039,12 +7495,11 @@ static int wlan_hdd_cfg80211_sched_scan_stop(struct wiphy *wiphy, VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "Failed to disabled PNO"); ret = -EINVAL; - goto error; } -error: VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - FL("PNO scan disabled ret = %d"), ret); + "%s: PNO scan disabled", __func__); + vos_mem_free(pPnoRequest); EXIT(); @@ -8067,7 +7522,6 @@ static int wlan_hdd_cfg80211_tdls_mgmt(struct wiphy *wiphy, struct net_device *d int max_sta_failed = 0; int responder; long rc; - tANI_U16 numCurrTdlsPeers; if (NULL == pHddCtx || NULL == pHddCtx->cfg_ini) { @@ -8110,7 +7564,7 @@ static int wlan_hdd_cfg80211_tdls_mgmt(struct wiphy *wiphy, struct net_device *d if (WLAN_IS_TDLS_SETUP_ACTION(action_code)) { - if (NULL != wlan_hdd_tdls_is_progress(pHddCtx, peer, TRUE)) + if (NULL != wlan_hdd_tdls_is_progress(pHddCtx, peer, TRUE, TRUE)) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "%s: " MAC_ADDRESS_STR @@ -8123,8 +7577,7 @@ static int wlan_hdd_cfg80211_tdls_mgmt(struct wiphy *wiphy, struct net_device *d if (SIR_MAC_TDLS_SETUP_REQ == action_code || SIR_MAC_TDLS_SETUP_RSP == action_code ) { - numCurrTdlsPeers = wlan_hdd_tdlsConnectedPeers(pAdapter); - if (HDD_MAX_NUM_TDLS_STA <= numCurrTdlsPeers) + if (HDD_MAX_NUM_TDLS_STA <= wlan_hdd_tdlsConnectedPeers(pAdapter)) { /* supplicant still sends tdls_mgmt(SETUP_REQ) even after we return error code at 'add_station()'. Hence we have this @@ -8134,10 +7587,9 @@ static int wlan_hdd_cfg80211_tdls_mgmt(struct wiphy *wiphy, struct net_device *d { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "%s: " MAC_ADDRESS_STR - " TDLS Max peer already connected. action (%d) declined. Num of peers (%d), Max allowed (%d).", - __func__, MAC_ADDR_ARRAY(peer), action_code, - numCurrTdlsPeers, HDD_MAX_NUM_TDLS_STA); - return -EINVAL; + " TDLS Max peer already connected. action %d declined.", + __func__, MAC_ADDR_ARRAY(peer), action_code); + goto error; } else { @@ -8146,9 +7598,8 @@ static int wlan_hdd_cfg80211_tdls_mgmt(struct wiphy *wiphy, struct net_device *d status_code = eSIR_MAC_UNSPEC_FAILURE_STATUS; VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "%s: " MAC_ADDRESS_STR - " TDLS Max peer already connected, send response status (%d). Num of peers (%d), Max allowed (%d).", - __func__, MAC_ADDR_ARRAY(peer), status_code, - numCurrTdlsPeers, HDD_MAX_NUM_TDLS_STA); + " TDLS Max peer already connected send response status %d", + __func__, MAC_ADDR_ARRAY(peer), status_code); max_sta_failed = -EPERM; /* fall through to send setup resp with failure status code */ @@ -8157,7 +7608,7 @@ static int wlan_hdd_cfg80211_tdls_mgmt(struct wiphy *wiphy, struct net_device *d else { hddTdlsPeer_t *pTdlsPeer; - pTdlsPeer = wlan_hdd_tdls_find_peer(pAdapter, peer, TRUE); + pTdlsPeer = wlan_hdd_tdls_find_peer(pAdapter, peer); if (pTdlsPeer && TDLS_IS_CONNECTED(pTdlsPeer)) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, @@ -8182,7 +7633,7 @@ static int wlan_hdd_cfg80211_tdls_mgmt(struct wiphy *wiphy, struct net_device *d { hddTdlsPeer_t *pTdlsPeer; - pTdlsPeer = wlan_hdd_tdls_find_peer(pAdapter, peerMac, TRUE); + pTdlsPeer = wlan_hdd_tdls_find_peer(pAdapter, peerMac); if(pTdlsPeer && TDLS_IS_CONNECTED(pTdlsPeer)) responder = pTdlsPeer->is_responder; @@ -8233,7 +7684,7 @@ static int wlan_hdd_cfg80211_tdls_mgmt(struct wiphy *wiphy, struct net_device *d "%s: sme_SendTdlsMgmtFrame failed!", __func__); pAdapter->mgmtTxCompletionStatus = FALSE; wlan_hdd_tdls_check_bmps(pAdapter); - return -EINVAL; + goto error; } rc = wait_for_completion_interruptible_timeout(&pAdapter->tdls_mgmt_comp, @@ -8245,16 +7696,8 @@ static int wlan_hdd_cfg80211_tdls_mgmt(struct wiphy *wiphy, struct net_device *d "%s: Mgmt Tx Completion failed status %ld TxCompletion %lu", __func__, rc, pAdapter->mgmtTxCompletionStatus); pAdapter->mgmtTxCompletionStatus = FALSE; - - if (pHddCtx->isLogpInProgress) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: LOGP in Progress. Ignore!!!", __func__); - return -EAGAIN; - } - wlan_hdd_tdls_check_bmps(pAdapter); - return -EINVAL; + goto error; } if (max_sta_failed) @@ -8273,6 +7716,16 @@ static int wlan_hdd_cfg80211_tdls_mgmt(struct wiphy *wiphy, struct net_device *d } return 0; +error: + /* max_sta_failed ; we didn't set to CONNECTING for this case, + because we already know that this transaction will be failed, + but we weren't sure if supplicant call DISABLE_LINK or not. So, + to be safe, do not change the state mahine. + */ + if(max_sta_failed == 0 && + (WLAN_IS_TDLS_SETUP_ACTION(action_code))) + wlan_hdd_tdls_set_link_status(pAdapter, peerMac, eTDLS_LINK_IDLE); + return -EPERM; } static int wlan_hdd_cfg80211_tdls_oper(struct wiphy *wiphy, struct net_device *dev, @@ -8281,6 +7734,15 @@ static int wlan_hdd_cfg80211_tdls_oper(struct wiphy *wiphy, struct net_device *d hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); hdd_context_t *pHddCtx = wiphy_priv(wiphy); int status; +#ifdef WLAN_FEATURE_TDLS_DEBUG + const char *tdls_oper_str[]= { + "NL80211_TDLS_DISCOVERY_REQ", + "NL80211_TDLS_SETUP", + "NL80211_TDLS_TEARDOWN", + "NL80211_TDLS_ENABLE_LINK", + "NL80211_TDLS_DISABLE_LINK", + "NL80211_TDLS_UNKNOWN_OPER"}; +#endif hddTdlsPeer_t *pTdlsPeer; if ( NULL == peer ) @@ -8299,6 +7761,23 @@ static int wlan_hdd_cfg80211_tdls_oper(struct wiphy *wiphy, struct net_device *d return status; } + pTdlsPeer = wlan_hdd_tdls_find_peer(pAdapter, peer); + + if ( NULL == pTdlsPeer ) { + hddLog(VOS_TRACE_LEVEL_ERROR, "%s: " MAC_ADDRESS_STR " (oper %d) not exsting. ignored", + __func__, MAC_ADDR_ARRAY(peer), (int)oper); + return -EINVAL; + } + +#ifdef WLAN_FEATURE_TDLS_DEBUG + if((int)oper > 4) + oper = 5; + + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: " MAC_ADDRESS_STR " link_status %d (%s) ", "tdls_oper", + MAC_ADDR_ARRAY(peer), pTdlsPeer->link_status, + tdls_oper_str[(int)oper]); +#endif if( FALSE == pHddCtx->cfg_ini->fEnableTDLSSupport || FALSE == sme_IsFeatureSupportedByFW(TDLS)) @@ -8314,20 +7793,6 @@ static int wlan_hdd_cfg80211_tdls_oper(struct wiphy *wiphy, struct net_device *d { VOS_STATUS status; - pTdlsPeer = wlan_hdd_tdls_find_peer(pAdapter, peer, TRUE); - - if ( NULL == pTdlsPeer ) { - hddLog(VOS_TRACE_LEVEL_ERROR, "%s: " MAC_ADDRESS_STR - " (oper %d) not exsting. ignored", - __func__, MAC_ADDR_ARRAY(peer), (int)oper); - return -EINVAL; - } - - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: " MAC_ADDRESS_STR " link_status %d (%s) ", "tdls_oper", - MAC_ADDR_ARRAY(peer), pTdlsPeer->link_status, - "NL80211_TDLS_ENABLE_LINK"); - if (!TDLS_STA_INDEX_VALID(pTdlsPeer->staId)) { hddLog(VOS_TRACE_LEVEL_ERROR, "%s: Invalid Staion Index %u " @@ -8366,20 +7831,6 @@ static int wlan_hdd_cfg80211_tdls_oper(struct wiphy *wiphy, struct net_device *d break; case NL80211_TDLS_DISABLE_LINK: { - pTdlsPeer = wlan_hdd_tdls_find_peer(pAdapter, peer, TRUE); - - if ( NULL == pTdlsPeer ) { - hddLog(VOS_TRACE_LEVEL_ERROR, "%s: " MAC_ADDRESS_STR - " (oper %d) not exsting. ignored", - __func__, MAC_ADDR_ARRAY(peer), (int)oper); - return -EINVAL; - } - - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: " MAC_ADDRESS_STR " link_status %d (%s) ", "tdls_oper", - MAC_ADDR_ARRAY(peer), pTdlsPeer->link_status, - "NL80211_TDLS_DISABLE_LINK"); - if(TDLS_STA_INDEX_VALID(pTdlsPeer->staId)) { long status; @@ -8409,74 +7860,7 @@ static int wlan_hdd_cfg80211_tdls_oper(struct wiphy *wiphy, struct net_device *d } break; case NL80211_TDLS_TEARDOWN: - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - " %s : NL80211_TDLS_TEARDOWN for " MAC_ADDRESS_STR, - __func__, MAC_ADDR_ARRAY(peer)); - - if ( (FALSE == pHddCtx->cfg_ini->fTDLSExternalControl) || - (FALSE == pHddCtx->cfg_ini->fEnableTDLSImplicitTrigger) ) { - - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - " %s TDLS External control and Implicit Trigger not enabled ", - __func__); - return -ENOTSUPP; - } - - - pTdlsPeer = wlan_hdd_tdls_find_peer(pAdapter, peer, TRUE); - - if ( NULL == pTdlsPeer ) { - hddLog(VOS_TRACE_LEVEL_INFO, "%s: " MAC_ADDRESS_STR - " (oper %d) peer not exsting", - __func__, MAC_ADDR_ARRAY(peer)); - return -EINVAL; - } - else { - wlan_hdd_tdls_indicate_teardown(pAdapter, pTdlsPeer, - eSIR_MAC_TDLS_TEARDOWN_UNSPEC_REASON); - } - - if ( 0 != wlan_hdd_tdls_set_force_peer(pAdapter, peer, FALSE) ) - return -EINVAL; - break; - } case NL80211_TDLS_SETUP: - { - hddTdlsPeer_t *pTdlsPeer; - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - " %s : NL80211_TDLS_SETUP for " MAC_ADDRESS_STR, - __func__, MAC_ADDR_ARRAY(peer)); - - if ( (FALSE == pHddCtx->cfg_ini->fTDLSExternalControl) || - (FALSE == pHddCtx->cfg_ini->fEnableTDLSImplicitTrigger) ) { - - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - " %s TDLS External control and Implicit Trigger not enabled ", - __func__); - return -ENOTSUPP; - } - - /* To cater the requirement of establishing the TDLS link - * irrespective of the data traffic , get an entry of TDLS peer. - */ - pTdlsPeer = wlan_hdd_tdls_get_peer(pAdapter, peer); - if (pTdlsPeer == NULL) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: peer " MAC_ADDRESS_STR " not existing", - __func__, MAC_ADDR_ARRAY(peer)); - return -EINVAL; - } - - if ( 0 != wlan_hdd_tdls_set_force_peer(pAdapter, peer, TRUE) ) { - - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - " %s TDLS Add Force Peer Failed", - __func__); - return -EINVAL; - } - break; - } case NL80211_TDLS_DISCOVERY_REQ: /* We don't support in-driver setup/teardown/discovery */ return -ENOTSUPP; @@ -8800,7 +8184,6 @@ int wlan_hdd_cfg80211_resume_wlan(struct wiphy *wiphy) pHddCtx->isSchedScanUpdatePending = FALSE; spin_unlock(&pHddCtx->schedScan_lock); - status = hdd_get_front_adapter ( pHddCtx, &pAdapterNode ); while ( NULL != pAdapterNode && VOS_STATUS_SUCCESS == status ) @@ -8810,20 +8193,10 @@ int wlan_hdd_cfg80211_resume_wlan(struct wiphy *wiphy) (WLAN_HDD_INFRA_STATION == pAdapter->device_mode) ) { if (0 != wlan_hdd_cfg80211_update_bss(pHddCtx->wiphy, pAdapter)) - { VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, "%s: NO SCAN result", __func__); - } else - { - /* Acquire wakelock to handle the case where APP's tries to - * suspend immediately after updating the scan results. Whis - * results in app's is in suspended state and not able to - * process the connect request to AP - */ - hdd_prevent_suspend_timeout(2000); cfg80211_sched_scan_results(pHddCtx->wiphy); - } VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "%s : cfg80211 scan result database updated", __func__); diff --git a/drivers/staging/prima/CORE/HDD/src/wlan_hdd_dev_pwr.c b/drivers/staging/prima/CORE/HDD/src/wlan_hdd_dev_pwr.c index ae25240dbdc..f522f227e04 100644 --- a/drivers/staging/prima/CORE/HDD/src/wlan_hdd_dev_pwr.c +++ b/drivers/staging/prima/CORE/HDD/src/wlan_hdd_dev_pwr.c @@ -155,27 +155,11 @@ static int wlan_suspend(hdd_context_t* pHddCtx) if(!rc) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s: TX Thread: timeout while suspending %ld" - , __func__, rc); - /* There is a race condition here, where the TX Thread can process the - * SUSPEND_EVENT even after the wait_for_completion has timed out. - * Check the SUSPEND_EVENT_MASK, if it is already cleared by the TX - * Thread then it means it is going to suspend, so do not return failure - * from here. - */ - if (!test_and_clear_bit(TX_SUSPEND_EVENT_MASK, - &vosSchedContext->txEventFlag)) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: TX Thread: will still suspend", __func__); - goto tx_suspend; - } + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s: Not able to suspend TX thread timeout happened", __func__); + clear_bit(TX_SUSPEND_EVENT_MASK, &vosSchedContext->txEventFlag); return -ETIME; } - -tx_suspend: /* Set the Tx Thread as Suspended */ pHddCtx->isTxThreadSuspended = TRUE; @@ -191,21 +175,9 @@ tx_suspend: if(!rc) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s: RX Thread: timeout while suspending %ld", __func__, rc); - /* There is a race condition here, where the RX Thread can process the - * SUSPEND_EVENT even after the wait_for_completion has timed out. - * Check the SUSPEND_EVENT_MASK, if it is already cleared by the RX - * Thread then it means it is going to suspend, so do not return failure - * from here. - */ - if (!test_and_clear_bit(RX_SUSPEND_EVENT_MASK, - &vosSchedContext->rxEventFlag)) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: RX Thread: will still suspend", __func__); - goto rx_suspend; - } + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s: Not able to suspend Rx thread timeout happened", __func__); + + clear_bit(RX_SUSPEND_EVENT_MASK, &vosSchedContext->rxEventFlag); /* Indicate Tx Thread to Resume */ complete(&vosSchedContext->ResumeTxEvent); @@ -216,7 +188,6 @@ tx_suspend: return -ETIME; } -rx_suspend: /* Set the Rx Thread as Suspended */ pHddCtx->isRxThreadSuspended = TRUE; @@ -232,22 +203,9 @@ rx_suspend: if(!rc) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s: MC Thread: timeout while suspending %ld", - __func__, rc); - /* There is a race condition here, where the MC Thread can process the - * SUSPEND_EVENT even after the wait_for_completion has timed out. - * Check the SUSPEND_EVENT_MASK, if it is already cleared by the MC - * Thread then it means it is going to suspend, so do not return failure - * from here. - */ - if (!test_and_clear_bit(MC_SUSPEND_EVENT_MASK, - &vosSchedContext->mcEventFlag)) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: MC Thread: will still suspend", __func__); - goto mc_suspend; - } + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s: Not able to suspend MC thread timeout happened", __func__); + + clear_bit(MC_SUSPEND_EVENT_MASK, &vosSchedContext->mcEventFlag); /* Indicate Rx Thread to Resume */ complete(&vosSchedContext->ResumeRxEvent); @@ -264,7 +222,6 @@ rx_suspend: return -ETIME; } -mc_suspend: /* Set the Mc Thread as Suspended */ pHddCtx->isMcThreadSuspended = TRUE; diff --git a/drivers/staging/prima/CORE/HDD/src/wlan_hdd_early_suspend.c b/drivers/staging/prima/CORE/HDD/src/wlan_hdd_early_suspend.c index f950b225a2c..895c8467b25 100644 --- a/drivers/staging/prima/CORE/HDD/src/wlan_hdd_early_suspend.c +++ b/drivers/staging/prima/CORE/HDD/src/wlan_hdd_early_suspend.c @@ -91,7 +91,6 @@ #include <linux/inetdevice.h> #include <wlan_hdd_cfg.h> #include <wlan_hdd_cfg80211.h> -#include <net/addrconf.h> /**----------------------------------------------------------------------------- * Preprocessor definitions and constants * ----------------------------------------------------------------------------*/ @@ -106,7 +105,7 @@ #include "wlan_hdd_power.h" #include "wlan_hdd_packet_filtering.h" -#define HDD_SSR_BRING_UP_TIME 180000 +#define HDD_SSR_BRING_UP_TIME 10000 static eHalStatus g_full_pwr_status; static eHalStatus g_standby_status; @@ -447,466 +446,22 @@ err_deep_sleep: } -/* - * Function: hdd_conf_hostoffload - * Central function to configure the supported offloads, - * either enable or disable them. - */ -void hdd_conf_hostoffload(hdd_adapter_t *pAdapter, v_BOOL_t fenable) -{ - hdd_context_t *pHddCtx = NULL; - v_CONTEXT_t *pVosContext = NULL; - VOS_STATUS vstatus = VOS_STATUS_E_FAILURE; - - hddLog(VOS_TRACE_LEVEL_INFO, FL("Configuring offloads with flag: %d"), - fenable); - - pVosContext = vos_get_global_context(VOS_MODULE_ID_SYS, NULL); - - if (NULL == pVosContext) - { - hddLog(VOS_TRACE_LEVEL_ERROR, FL(" Global VOS context is Null")); - return; - } - - //Get the HDD context. - pHddCtx = (hdd_context_t *)vos_get_context(VOS_MODULE_ID_HDD, pVosContext ); - - if (NULL == pHddCtx) - { - hddLog(VOS_TRACE_LEVEL_ERROR, "%s: HDD context is Null", __func__); - return; - } - - if ((WLAN_HDD_INFRA_STATION == pAdapter->device_mode) || - (WLAN_HDD_P2P_CLIENT == pAdapter->device_mode)) - { - if (fenable) - { - if (eConnectionState_Associated == - (WLAN_HDD_GET_STATION_CTX_PTR(pAdapter))->conn_info.connState) - { - if ((pHddCtx->cfg_ini->fhostArpOffload)) - { - /* - * Configure the ARP Offload. - * Even if it fails we have to reconfigure the MC/BC - * filter flag as we want RIVA not to drop BroadCast - * Packets - */ - hddLog(VOS_TRACE_LEVEL_INFO, - FL("Calling ARP Offload with flag: %d"), fenable); - vstatus = hdd_conf_arp_offload(pAdapter, fenable); - pHddCtx->configuredMcastBcastFilter &= - ~(HDD_MCASTBCASTFILTER_FILTER_ALL_BROADCAST); - - if (!VOS_IS_STATUS_SUCCESS(vstatus)) - { - hddLog(VOS_TRACE_LEVEL_ERROR, - "Failed to enable ARPOFfloadFeature %d", - vstatus); - } - } - //Configure GTK_OFFLOAD -#ifdef WLAN_FEATURE_GTK_OFFLOAD - hdd_conf_gtk_offload(pAdapter, fenable); -#endif - -#ifdef WLAN_NS_OFFLOAD - if (pHddCtx->cfg_ini->fhostNSOffload) - { - /* - * Configure the NS Offload. - * Even if it fails we have to reconfigure the MC/BC filter flag - * as we want RIVA not to drop Multicast Packets - */ - - hddLog(VOS_TRACE_LEVEL_INFO, - FL("Calling NS Offload with flag: %d"), fenable); - hdd_conf_ns_offload(pAdapter, fenable); - pHddCtx->configuredMcastBcastFilter &= - ~(HDD_MCASTBCASTFILTER_FILTER_ALL_MULTICAST); - } -#endif - } - } - else - { - //Disable ARPOFFLOAD - if (pHddCtx->cfg_ini->fhostArpOffload) - { - vstatus = hdd_conf_arp_offload(pAdapter, fenable); - if (!VOS_IS_STATUS_SUCCESS(vstatus)) - { - hddLog(VOS_TRACE_LEVEL_ERROR, - "Failed to disable ARPOffload Feature %d", vstatus); - } - } - //Disable GTK_OFFLOAD -#ifdef WLAN_FEATURE_GTK_OFFLOAD - hdd_conf_gtk_offload(pAdapter, fenable); -#endif - -#ifdef WLAN_NS_OFFLOAD - //Disable NSOFFLOAD - if (pHddCtx->cfg_ini->fhostNSOffload) - { - hdd_conf_ns_offload(pAdapter, fenable); - } -#endif - } - } - return; -} - -#ifdef WLAN_NS_OFFLOAD -void hdd_ipv6_notifier_work_queue(struct work_struct *work) -{ - hdd_adapter_t* pAdapter = - container_of(work, hdd_adapter_t, ipv6NotifierWorkQueue); - hdd_context_t *pHddCtx; - int status; - - hddLog(LOG1, FL("Reconfiguring NS Offload")); - - pHddCtx = WLAN_HDD_GET_CTX(pAdapter); - status = wlan_hdd_validate_context(pHddCtx); - if (0 != status) - { - hddLog(LOGE, FL("HDD context is invalid")); - return; - } - - if ((eConnectionState_Associated == - (WLAN_HDD_GET_STATION_CTX_PTR(pAdapter))->conn_info.connState) - && (VOS_TRUE == pHddCtx->sus_res_mcastbcast_filter_valid)) - { - // This invocation being part of the IPv6 registration callback, - // we are passing second parameter as 2 to avoid registration - // of IPv6 notifier again. - hdd_conf_ns_offload(pAdapter, 2); - } -} - -static int wlan_hdd_ipv6_changed(struct notifier_block *nb, - unsigned long data, void *arg) -{ - struct inet6_ifaddr *ifa = (struct inet6_ifaddr *)arg; - struct net_device *ndev = ifa->idev->dev; - hdd_adapter_t *pAdapter = - container_of(nb, struct hdd_adapter_s, ipv6_notifier); - hdd_context_t *pHddCtx; - int status; - - if (pAdapter && pAdapter->dev == ndev) - { - pHddCtx = WLAN_HDD_GET_CTX(pAdapter); - status = wlan_hdd_validate_context(pHddCtx); - if (0 != status) - { - hddLog(LOGE, FL("HDD context is invalid")); - return NOTIFY_DONE; - } - - schedule_work(&pAdapter->ipv6NotifierWorkQueue); - } - - return NOTIFY_DONE; -} - -/**---------------------------------------------------------------------------- - - \brief hdd_conf_ns_offload() - Configure NS offload - - Called during SUSPEND to configure the NS offload (MC BC filter) which - reduces power consumption. - - \param - pAdapter - Adapter context for which NS offload is to be configured - \param - fenable - 0 - disable. - 1 - enable. (with IPv6 notifier registration) - 2 - enable. (without IPv6 notifier registration) - - \return - void - - ---------------------------------------------------------------------------*/ -void hdd_conf_ns_offload(hdd_adapter_t *pAdapter, int fenable) -{ - struct inet6_dev *in6_dev; - struct inet6_ifaddr *ifp; - struct list_head *p; - tANI_U8 selfIPv6Addr[SIR_MAC_NUM_TARGET_IPV6_NS_OFFLOAD_NA][SIR_MAC_IPV6_ADDR_LEN] = {{0,}}; - tANI_BOOLEAN selfIPv6AddrValid[SIR_MAC_NUM_TARGET_IPV6_NS_OFFLOAD_NA] = {0}; - tSirHostOffloadReq offLoadRequest; - hdd_context_t *pHddCtx; - - int i =0; - int ret =0; - eHalStatus returnStatus; - - ENTER(); - hddLog(LOG1, FL(" fenable = %d"), fenable); - - pHddCtx = WLAN_HDD_GET_CTX(pAdapter); - - if (fenable) - { - in6_dev = __in6_dev_get(pAdapter->dev); - if (NULL != in6_dev) - { - //read_lock_bh(&in6_dev->lock); - list_for_each(p, &in6_dev->addr_list) - { - ifp = list_entry(p, struct inet6_ifaddr, if_list); - switch(ipv6_addr_src_scope(&ifp->addr)) - { - case IPV6_ADDR_SCOPE_LINKLOCAL: - vos_mem_copy(&selfIPv6Addr[0], &ifp->addr.s6_addr, - sizeof(ifp->addr.s6_addr)); - selfIPv6AddrValid[0] = SIR_IPV6_ADDR_VALID; - hddLog (VOS_TRACE_LEVEL_INFO, - "Found IPV6_ADDR_SCOPE_LINKLOCAL Address : %pI6", - selfIPv6Addr[0]); - break; - case IPV6_ADDR_SCOPE_GLOBAL: - vos_mem_copy(&selfIPv6Addr[1], &ifp->addr.s6_addr, - sizeof(ifp->addr.s6_addr)); - selfIPv6AddrValid[1] = SIR_IPV6_ADDR_VALID; - hddLog (VOS_TRACE_LEVEL_INFO, - "Found IPV6_ADDR_SCOPE_GLOBAL Address : %pI6", - selfIPv6Addr[1]); - break; - default: - hddLog(LOGE, "The Scope %d is not supported", - ipv6_addr_src_scope(&ifp->addr)); - } - - } - //read_unlock_bh(&in6_dev->lock); - vos_mem_zero(&offLoadRequest, sizeof(offLoadRequest)); - for (i =0; i<SIR_MAC_NUM_TARGET_IPV6_NS_OFFLOAD_NA; i++) - { - if (selfIPv6AddrValid[i]) - { - //Filling up the request structure - /* Filling the selfIPv6Addr with solicited address - * A Solicited-Node multicast address is created by - * taking the last 24 bits of a unicast or anycast - * address and appending them to the prefix - * - * FF02:0000:0000:0000:0000:0001:FFXX:XX - * - * here XX is the unicast/anycast bits - */ - offLoadRequest.nsOffloadInfo.selfIPv6Addr[0] = 0xFF; - offLoadRequest.nsOffloadInfo.selfIPv6Addr[1] = 0x02; - offLoadRequest.nsOffloadInfo.selfIPv6Addr[11] = 0x01; - offLoadRequest.nsOffloadInfo.selfIPv6Addr[12] = 0xFF; - offLoadRequest.nsOffloadInfo.selfIPv6Addr[13] = selfIPv6Addr[i][13]; - offLoadRequest.nsOffloadInfo.selfIPv6Addr[14] = selfIPv6Addr[i][14]; - offLoadRequest.nsOffloadInfo.selfIPv6Addr[15] = selfIPv6Addr[i][15]; - offLoadRequest.nsOffloadInfo.slotIdx = i; - - vos_mem_copy(&offLoadRequest.nsOffloadInfo.targetIPv6Addr[0], - &selfIPv6Addr[i][0], sizeof(tANI_U8)*SIR_MAC_IPV6_ADDR_LEN); - vos_mem_copy(&offLoadRequest.nsOffloadInfo.selfMacAddr, - &pAdapter->macAddressCurrent.bytes, - sizeof(tANI_U8)*SIR_MAC_ADDR_LEN); - - offLoadRequest.nsOffloadInfo.targetIPv6AddrValid[0] = SIR_IPV6_ADDR_VALID; - offLoadRequest.offloadType = SIR_IPV6_NS_OFFLOAD; - offLoadRequest.enableOrDisable = SIR_OFFLOAD_ENABLE; - hddLog (VOS_TRACE_LEVEL_INFO, - "configuredMcastBcastFilter: %d",pHddCtx->configuredMcastBcastFilter); - - if ((VOS_TRUE == pHddCtx->sus_res_mcastbcast_filter_valid) - && ((HDD_MCASTBCASTFILTER_FILTER_ALL_MULTICAST == - pHddCtx->sus_res_mcastbcast_filter) || - (HDD_MCASTBCASTFILTER_FILTER_ALL_MULTICAST_BROADCAST == - pHddCtx->sus_res_mcastbcast_filter))) - { - hddLog (VOS_TRACE_LEVEL_INFO, - "Set offLoadRequest with SIR_OFFLOAD_NS_AND_MCAST_FILTER_ENABLE \n", __func__); - offLoadRequest.enableOrDisable = - SIR_OFFLOAD_NS_AND_MCAST_FILTER_ENABLE; - } - - vos_mem_copy(&offLoadRequest.params.hostIpv6Addr, - &offLoadRequest.nsOffloadInfo.targetIPv6Addr[0], - sizeof(tANI_U8)*SIR_MAC_IPV6_ADDR_LEN); - - hddLog (VOS_TRACE_LEVEL_INFO, - "Setting NSOffload with solicitedIp: %pI6, targetIp: %pI6", - offLoadRequest.nsOffloadInfo.selfIPv6Addr, - offLoadRequest.nsOffloadInfo.targetIPv6Addr[0]); - - //Configure the Firmware with this - returnStatus = sme_SetHostOffload(WLAN_HDD_GET_HAL_CTX(pAdapter), - pAdapter->sessionId, &offLoadRequest); - if(eHAL_STATUS_SUCCESS != returnStatus) - { - hddLog(VOS_TRACE_LEVEL_ERROR, - FL("Failed to enable HostOffload feature with status: %d"), - returnStatus); - } - vos_mem_zero(&offLoadRequest, sizeof(offLoadRequest)); - } - } - if (fenable == 1 && !pAdapter->ipv6_notifier_registered) - { - // Register IPv6 notifier to notify if any change in IP - // So that we can reconfigure the offload parameters - pAdapter->ipv6_notifier.notifier_call = - wlan_hdd_ipv6_changed; - ret = register_inet6addr_notifier(&pAdapter->ipv6_notifier); - if (ret) - { - hddLog(LOGE, FL("Failed to register IPv6 notifier")); - } - else - { - hddLog(LOG1, FL("Registered IPv6 notifier")); - pAdapter->ipv6_notifier_registered = true; - } - } - } - else - { - hddLog(VOS_TRACE_LEVEL_ERROR, - FL("IPv6 dev does not exist. Failed to request NSOffload")); - return; - } - } - else - { - //Disable NSOffload - if (pAdapter->ipv6_notifier_registered) - { - hddLog(LOG1, FL("Unregistered IPv6 notifier")); - unregister_inet6addr_notifier(&pAdapter->ipv6_notifier); - pAdapter->ipv6_notifier_registered = false; - } - vos_mem_zero((void *)&offLoadRequest, sizeof(tSirHostOffloadReq)); - offLoadRequest.enableOrDisable = SIR_OFFLOAD_DISABLE; - offLoadRequest.offloadType = SIR_IPV6_NS_OFFLOAD; - - //Disable NSOffload on all slots - for (i = 0; i<SIR_MAC_NUM_TARGET_IPV6_NS_OFFLOAD_NA; i++) - { - offLoadRequest.nsOffloadInfo.slotIdx = i; - if (eHAL_STATUS_SUCCESS != - sme_SetHostOffload(WLAN_HDD_GET_HAL_CTX(pAdapter), - pAdapter->sessionId, &offLoadRequest)) - { - hddLog(VOS_TRACE_LEVEL_ERROR, FL("Failed to disable NSOflload" - " on slot %d"), i); - } - } - } - return; -} -#endif - -void hdd_ipv4_notifier_work_queue(struct work_struct *work) -{ - hdd_adapter_t* pAdapter = - container_of(work, hdd_adapter_t, ipv4NotifierWorkQueue); - hdd_context_t *pHddCtx; - int status; - - hddLog(LOG1, FL("Reconfiguring ARP Offload")); - pHddCtx = WLAN_HDD_GET_CTX(pAdapter); - status = wlan_hdd_validate_context(pHddCtx); - if (0 != status) - { - hddLog(LOGE, FL("HDD context is invalid")); - return; - } - - if ((eConnectionState_Associated == - (WLAN_HDD_GET_STATION_CTX_PTR(pAdapter))->conn_info.connState) - && (VOS_TRUE == pHddCtx->sus_res_mcastbcast_filter_valid)) - { - // This invocation being part of the IPv4 registration callback, - // we are passing second parameter as 2 to avoid registration - // of IPv4 notifier again. - hdd_conf_arp_offload(pAdapter, 2); - } -} - -static int wlan_hdd_ipv4_changed(struct notifier_block *nb, - unsigned long data, void *arg) -{ - struct in_ifaddr *ifa = (struct in_ifaddr *)arg; - struct in_ifaddr **ifap = NULL; - struct in_device *in_dev; - - struct net_device *ndev = ifa->ifa_dev->dev; - hdd_adapter_t *pAdapter = - container_of(nb, struct hdd_adapter_s, ipv4_notifier); - hdd_context_t *pHddCtx; - int status; - if (pAdapter && pAdapter->dev == ndev) - { - pHddCtx = WLAN_HDD_GET_CTX(pAdapter); - status = wlan_hdd_validate_context(pHddCtx); - if (0 != status) - { - hddLog(LOGE, FL("HDD context is invalid")); - return NOTIFY_DONE; - } - if ((in_dev = __in_dev_get_rtnl(pAdapter->dev)) != NULL) - { - for (ifap = &in_dev->ifa_list; (ifa = *ifap) != NULL; - ifap = &ifa->ifa_next) - { - if (!strcmp(pAdapter->dev->name, ifa->ifa_label)) - { - break; /* found */ - } - } - } - if(ifa && ifa->ifa_local) - { - schedule_work(&pAdapter->ipv4NotifierWorkQueue); - } - } - - return NOTIFY_DONE; -} - -/**---------------------------------------------------------------------------- - - \brief hdd_conf_arp_offload() - Configure ARP offload - - Called during SUSPEND to configure the ARP offload (MC BC filter) which - reduces power consumption. - - \param - pAdapter -Adapter context for which ARP offload is to be configured - \param - fenable - 0 - disable. - 1 - enable. (with IPv4 notifier registration) - 2 - enable. (without IPv4 notifier registration) - - \return - - VOS_STATUS_SUCCESS - on successful operation - VOS_STATUS_E_FAILURE - on failure of operation ------------------------------------------------------------------------------*/ -VOS_STATUS hdd_conf_arp_offload(hdd_adapter_t *pAdapter, int fenable) +VOS_STATUS hdd_conf_hostarpoffload(hdd_adapter_t *pAdapter, v_BOOL_t fenable) { struct in_ifaddr **ifap = NULL; struct in_ifaddr *ifa = NULL; struct in_device *in_dev; int i = 0; - int ret = 0; tSirHostOffloadReq offLoadRequest; hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); - hddLog(VOS_TRACE_LEVEL_ERROR, FL(" fenable = %d \n"), fenable); + hddLog(VOS_TRACE_LEVEL_ERROR, "%s: \n", __func__); if(fenable) { if ((in_dev = __in_dev_get_rtnl(pAdapter->dev)) != NULL) { - for (ifap = &in_dev->ifa_list; (ifa = *ifap) != NULL; + for (ifap = &in_dev->ifa_list; (ifa = *ifap) != NULL; ifap = &ifa->ifa_next) { if (!strcmp(pAdapter->dev->name, ifa->ifa_label)) @@ -915,88 +470,70 @@ VOS_STATUS hdd_conf_arp_offload(hdd_adapter_t *pAdapter, int fenable) } } } + if(ifa && ifa->ifa_local) { offLoadRequest.offloadType = SIR_IPV4_ARP_REPLY_OFFLOAD; offLoadRequest.enableOrDisable = SIR_OFFLOAD_ENABLE; - hddLog(VOS_TRACE_LEVEL_INFO, "%s: Enabled \n", __func__); + hddLog(VOS_TRACE_LEVEL_ERROR, "%s: Enabled \n", __func__); - if (((HDD_MCASTBCASTFILTER_FILTER_ALL_BROADCAST == - pHddCtx->sus_res_mcastbcast_filter) || - (HDD_MCASTBCASTFILTER_FILTER_ALL_MULTICAST_BROADCAST == - pHddCtx->sus_res_mcastbcast_filter)) && - (VOS_TRUE == pHddCtx->sus_res_mcastbcast_filter_valid)) + if(pHddCtx->dynamic_mcbc_filter.enableCfg) { - offLoadRequest.enableOrDisable = - SIR_OFFLOAD_ARP_AND_BCAST_FILTER_ENABLE; - hddLog(VOS_TRACE_LEVEL_INFO, - "offload: inside arp offload conditional check"); + if((HDD_MCASTBCASTFILTER_FILTER_ALL_BROADCAST == + pHddCtx->dynamic_mcbc_filter.mcastBcastFilterSetting) || + (HDD_MCASTBCASTFILTER_FILTER_ALL_MULTICAST_BROADCAST == + pHddCtx->dynamic_mcbc_filter.mcastBcastFilterSetting)) + { + offLoadRequest.enableOrDisable = + SIR_OFFLOAD_ARP_AND_BCAST_FILTER_ENABLE; + } } - - hddLog(VOS_TRACE_LEVEL_INFO, "offload: arp filter programmed = %d", - offLoadRequest.enableOrDisable); - + else if((HDD_MCASTBCASTFILTER_FILTER_ALL_BROADCAST == + pHddCtx->cfg_ini->mcastBcastFilterSetting ) || + (HDD_MCASTBCASTFILTER_FILTER_ALL_MULTICAST_BROADCAST == + pHddCtx->cfg_ini->mcastBcastFilterSetting)) + { + offLoadRequest.enableOrDisable = + SIR_OFFLOAD_ARP_AND_BCAST_FILTER_ENABLE; + } + //converting u32 to IPV4 address for(i = 0 ; i < 4; i++) { - offLoadRequest.params.hostIpv4Addr[i] = + offLoadRequest.params.hostIpv4Addr[i] = (ifa->ifa_local >> (i*8) ) & 0xFF ; } - hddLog(VOS_TRACE_LEVEL_INFO, " Enable SME HostOffload: %d.%d.%d.%d", + hddLog(VOS_TRACE_LEVEL_WARN, " Enable SME HostOffload: %d.%d.%d.%d", offLoadRequest.params.hostIpv4Addr[0], offLoadRequest.params.hostIpv4Addr[1], offLoadRequest.params.hostIpv4Addr[2], offLoadRequest.params.hostIpv4Addr[3]); - if (eHAL_STATUS_SUCCESS != - sme_SetHostOffload(WLAN_HDD_GET_HAL_CTX(pAdapter), - pAdapter->sessionId, &offLoadRequest)) + if (eHAL_STATUS_SUCCESS != + sme_SetHostOffload(WLAN_HDD_GET_HAL_CTX(pAdapter), + pAdapter->sessionId, &offLoadRequest)) { hddLog(VOS_TRACE_LEVEL_ERROR, "%s: Failed to enable HostOffload " "feature\n", __func__); return VOS_STATUS_E_FAILURE; } + return VOS_STATUS_SUCCESS; } else { - hddLog(VOS_TRACE_LEVEL_INFO, FL("IP Address is not assigned\n")); - } - - if (fenable == 1 && !pAdapter->ipv4_notifier_registered) - { - // Register IPv4 notifier to notify if any change in IP - // So that we can reconfigure the offload parameters - pAdapter->ipv4_notifier.notifier_call = - wlan_hdd_ipv4_changed; - ret = register_inetaddr_notifier(&pAdapter->ipv4_notifier); - if (ret) - { - hddLog(LOGE, FL("Failed to register IPv4 notifier")); - } - else - { - hddLog(LOG1, FL("Registered IPv4 notifier")); - pAdapter->ipv4_notifier_registered = true; - } + hddLog(VOS_TRACE_LEVEL_INFO, "%s:IP Address is not assigned \n", __func__); + return VOS_STATUS_E_AGAIN; } - return VOS_STATUS_SUCCESS; } else { - if (pAdapter->ipv4_notifier_registered) - { - hddLog(LOG1, FL("Unregistered IPv4 notifier")); - unregister_inetaddr_notifier(&pAdapter->ipv4_notifier); - pAdapter->ipv4_notifier_registered = false; - } vos_mem_zero((void *)&offLoadRequest, sizeof(tSirHostOffloadReq)); offLoadRequest.enableOrDisable = SIR_OFFLOAD_DISABLE; offLoadRequest.offloadType = SIR_IPV4_ARP_REPLY_OFFLOAD; - if (eHAL_STATUS_SUCCESS != - sme_SetHostOffload(WLAN_HDD_GET_HAL_CTX(pAdapter), - pAdapter->sessionId, &offLoadRequest)) + if (eHAL_STATUS_SUCCESS != sme_SetHostOffload(WLAN_HDD_GET_HAL_CTX(pAdapter), pAdapter->sessionId, + &offLoadRequest)) { hddLog(VOS_TRACE_LEVEL_ERROR, "%s: Failure to disable host " "offload feature\n", __func__); @@ -1008,41 +545,67 @@ VOS_STATUS hdd_conf_arp_offload(hdd_adapter_t *pAdapter, int fenable) /* * This function is called before setting mcbc filters - * to modify filter value considering Different Offloads + * to modify filter value considering ARP */ -void hdd_mcbc_filter_modification(hdd_context_t* pHddCtx, +void hdd_mcbc_filter_modification(hdd_context_t* pHddCtx, v_BOOL_t arpFlag, tANI_U8 *pMcBcFilter) { - if (NULL == pHddCtx) + if (TRUE == arpFlag) { - hddLog(VOS_TRACE_LEVEL_ERROR, FL("NULL HDD context passed")); - return; - } + /*ARP offload is enabled, do not block bcast packets at RXP*/ + if (pHddCtx->dynamic_mcbc_filter.enableCfg) + { + if ((HDD_MCASTBCASTFILTER_FILTER_ALL_MULTICAST_BROADCAST == + pHddCtx->dynamic_mcbc_filter.mcastBcastFilterSetting)) + { + *pMcBcFilter = HDD_MCASTBCASTFILTER_FILTER_ALL_MULTICAST; + } + else if ((HDD_MCASTBCASTFILTER_FILTER_ALL_BROADCAST == + pHddCtx->dynamic_mcbc_filter.mcastBcastFilterSetting)) + { + *pMcBcFilter = HDD_MCASTBCASTFILTER_FILTER_NONE; + } + else + { + *pMcBcFilter = pHddCtx->dynamic_mcbc_filter.mcastBcastFilterSetting; + } - *pMcBcFilter = pHddCtx->configuredMcastBcastFilter; - if (pHddCtx->cfg_ini->fhostArpOffload) - { - /* ARP offload is enabled, do not block bcast packets at RXP - * Will be using Bitmasking to reset the filter. As we have - * disable Broadcast filtering, Anding with the negation - * of Broadcast BIT - */ - *pMcBcFilter &= ~(HDD_MCASTBCASTFILTER_FILTER_ALL_BROADCAST); - } + pHddCtx->dynamic_mcbc_filter.enableSuspend = TRUE; + pHddCtx->dynamic_mcbc_filter.mcBcFilterSuspend = *pMcBcFilter; + } + else + { + if (HDD_MCASTBCASTFILTER_FILTER_ALL_MULTICAST_BROADCAST == + pHddCtx->cfg_ini->mcastBcastFilterSetting) + { + *pMcBcFilter = HDD_MCASTBCASTFILTER_FILTER_ALL_MULTICAST; + } + else if (HDD_MCASTBCASTFILTER_FILTER_ALL_BROADCAST == + pHddCtx->cfg_ini->mcastBcastFilterSetting) + { + *pMcBcFilter = HDD_MCASTBCASTFILTER_FILTER_NONE; + } + else + { + *pMcBcFilter = pHddCtx->cfg_ini->mcastBcastFilterSetting; + } -#ifdef WLAN_NS_OFFLOAD - if (pHddCtx->cfg_ini->fhostNSOffload) + pHddCtx->dynamic_mcbc_filter.enableSuspend = FALSE; + } + } + else { - /* NS offload is enabled, do not block mcast packets at RXP - * Will be using Bitmasking to reset the filter. As we have - * disable Multicast filtering, Anding with the negation - * of Multicast BIT - */ - *pMcBcFilter &= ~(HDD_MCASTBCASTFILTER_FILTER_ALL_MULTICAST); + if (pHddCtx->dynamic_mcbc_filter.enableCfg) + { + *pMcBcFilter = pHddCtx->dynamic_mcbc_filter.mcastBcastFilterSetting; + pHddCtx->dynamic_mcbc_filter.enableSuspend = TRUE; + } + else + { + pHddCtx->dynamic_mcbc_filter.enableSuspend = FALSE; + *pMcBcFilter = pHddCtx->cfg_ini->mcastBcastFilterSetting; + } } -#endif - - pHddCtx->configuredMcastBcastFilter = *pMcBcFilter; } void hdd_conf_mcastbcast_filter(hdd_context_t* pHddCtx, v_BOOL_t setfilter) @@ -1060,15 +623,20 @@ void hdd_conf_mcastbcast_filter(hdd_context_t* pHddCtx, v_BOOL_t setfilter) "%s: Configuring Mcast/Bcast Filter Setting. setfilter %d", __func__, setfilter); if (TRUE == setfilter) { - hdd_mcbc_filter_modification(pHddCtx, + if (pHddCtx->cfg_ini->fhostArpOffload) + { + hdd_mcbc_filter_modification(pHddCtx, TRUE, &wlanRxpFilterParam->configuredMcstBcstFilterSetting); + } + else + { + hdd_mcbc_filter_modification(pHddCtx, FALSE, + &wlanRxpFilterParam->configuredMcstBcstFilterSetting); + } } else - { - /*Use the current configured value to clear*/ wlanRxpFilterParam->configuredMcstBcstFilterSetting = - pHddCtx->configuredMcastBcastFilter; - } + pHddCtx->cfg_ini->mcastBcastFilterSetting; wlanRxpFilterParam->setMcstBcstFilter = setfilter; halStatus = sme_ConfigureRxpFilter(pHddCtx->hHal, wlanRxpFilterParam); @@ -1082,20 +650,10 @@ static void hdd_conf_suspend_ind(hdd_context_t* pHddCtx, hdd_adapter_t *pAdapter) { eHalStatus halStatus = eHAL_STATUS_FAILURE; + VOS_STATUS vstatus = VOS_STATUS_E_FAILURE; tpSirWlanSuspendParam wlanSuspendParam = vos_mem_malloc(sizeof(tSirWlanSuspendParam)); - if (VOS_FALSE == pHddCtx->sus_res_mcastbcast_filter_valid) { - pHddCtx->sus_res_mcastbcast_filter = - pHddCtx->configuredMcastBcastFilter; - pHddCtx->sus_res_mcastbcast_filter_valid = VOS_TRUE; - hddLog(VOS_TRACE_LEVEL_INFO, "offload: hdd_conf_suspend_ind"); - hddLog(VOS_TRACE_LEVEL_INFO, "configuredMCastBcastFilter saved = %d", - pHddCtx->configuredMcastBcastFilter); - - } - - if(NULL == wlanSuspendParam) { hddLog(VOS_TRACE_LEVEL_FATAL, @@ -1103,21 +661,55 @@ static void hdd_conf_suspend_ind(hdd_context_t* pHddCtx, return; } - hddLog(VOS_TRACE_LEVEL_INFO, + hddLog(VOS_TRACE_LEVEL_INFO, "%s: send wlan suspend indication", __func__); if((pHddCtx->cfg_ini->nEnableSuspend == WLAN_MAP_SUSPEND_TO_MCAST_BCAST_FILTER)) { - //Configure supported OffLoads - hdd_conf_hostoffload(pAdapter, TRUE); - wlanSuspendParam->configuredMcstBcstFilterSetting = pHddCtx->configuredMcastBcastFilter; + if((pHddCtx->cfg_ini->fhostArpOffload) && + (eConnectionState_Associated == + (WLAN_HDD_GET_STATION_CTX_PTR(pAdapter))->conn_info.connState)) + { + vstatus = hdd_conf_hostarpoffload(pAdapter, TRUE); + if (!VOS_IS_STATUS_SUCCESS(vstatus)) + { + hdd_mcbc_filter_modification(pHddCtx, FALSE, + &wlanSuspendParam->configuredMcstBcstFilterSetting); + hddLog(VOS_TRACE_LEVEL_INFO, + "%s:Failed to enable ARPOFFLOAD Feature %d\n", + __func__, vstatus); + } + else + { + hdd_mcbc_filter_modification(pHddCtx, TRUE, + &wlanSuspendParam->configuredMcstBcstFilterSetting); + } + } + else + { + hdd_mcbc_filter_modification(pHddCtx, FALSE, + &wlanSuspendParam->configuredMcstBcstFilterSetting); + if(pHddCtx->dynamic_mcbc_filter.enableCfg) + { + pHddCtx->dynamic_mcbc_filter.mcBcFilterSuspend = + wlanSuspendParam->configuredMcstBcstFilterSetting; + } + } #ifdef WLAN_FEATURE_PACKET_FILTERING - /* During suspend, configure MC Addr list filter to the firmware - * function takes care of checking necessary conditions before - * configuring. - */ - wlan_hdd_set_mc_addr_list(pAdapter, TRUE); + if (pHddCtx->cfg_ini->isMcAddrListFilter) + { + /*Multicast addr list filter is enabled during suspend*/ + if (((pAdapter->device_mode == WLAN_HDD_INFRA_STATION) || + (pAdapter->device_mode == WLAN_HDD_P2P_CLIENT)) + && pAdapter->mc_addr_list.mc_cnt + && (eConnectionState_Associated == + (WLAN_HDD_GET_STATION_CTX_PTR(pAdapter))->conn_info.connState)) + { + /*set the filter*/ + wlan_hdd_set_mc_addr_list(pAdapter, TRUE); + } + } #endif } @@ -1133,51 +725,61 @@ static void hdd_conf_suspend_ind(hdd_context_t* pHddCtx, static void hdd_conf_resume_ind(hdd_adapter_t *pAdapter) { eHalStatus halStatus = eHAL_STATUS_FAILURE; + VOS_STATUS vstatus; hdd_context_t* pHddCtx = WLAN_HDD_GET_CTX(pAdapter); tpSirWlanResumeParam wlanResumeParam; hddLog(VOS_TRACE_LEVEL_INFO, "%s: send wlan resume indication", __func__); - wlanResumeParam = vos_mem_malloc(sizeof(tSirWlanResumeParam)); - - if (NULL == wlanResumeParam) + if (pHddCtx->hdd_mcastbcast_filter_set == TRUE) { - hddLog(VOS_TRACE_LEVEL_FATAL, - "%s: memory allocation failed for wlanResumeParam ", __func__); - return; - } + wlanResumeParam = vos_mem_malloc(sizeof(tSirWlanResumeParam)); - //Disable supported OffLoads - hdd_conf_hostoffload(pAdapter, FALSE); + if(NULL == wlanResumeParam) + { + hddLog(VOS_TRACE_LEVEL_FATAL, + "%s: vos_mem_alloc failed ", __func__); + return; + } - wlanResumeParam->configuredMcstBcstFilterSetting = - pHddCtx->configuredMcastBcastFilter; - halStatus = sme_ConfigureResumeReq(pHddCtx->hHal, wlanResumeParam); - if (eHAL_STATUS_SUCCESS != halStatus) - { - vos_mem_free(wlanResumeParam); + if (pHddCtx->cfg_ini->fhostArpOffload) + { + vstatus = hdd_conf_hostarpoffload(pAdapter, FALSE); + if (!VOS_IS_STATUS_SUCCESS(vstatus)) + { + hddLog(VOS_TRACE_LEVEL_INFO, "%s:Failed to disable ARPOFFLOAD " + "Feature %d\n", __func__, vstatus); + } + } + if (pHddCtx->dynamic_mcbc_filter.enableSuspend) + { + wlanResumeParam->configuredMcstBcstFilterSetting = + pHddCtx->dynamic_mcbc_filter.mcBcFilterSuspend; + } + else + { + wlanResumeParam->configuredMcstBcstFilterSetting = + pHddCtx->cfg_ini->mcastBcastFilterSetting; + } + halStatus = sme_ConfigureResumeReq(pHddCtx->hHal, wlanResumeParam); + if (eHAL_STATUS_SUCCESS != halStatus) + vos_mem_free(wlanResumeParam); + pHddCtx->hdd_mcastbcast_filter_set = FALSE; } - pHddCtx->hdd_mcastbcast_filter_set = FALSE; - if (VOS_TRUE == pHddCtx->sus_res_mcastbcast_filter_valid) { - pHddCtx->configuredMcastBcastFilter = - pHddCtx->sus_res_mcastbcast_filter; - pHddCtx->sus_res_mcastbcast_filter_valid = VOS_FALSE; +#ifdef WLAN_FEATURE_PACKET_FILTERING + if (pHddCtx->cfg_ini->isMcAddrListFilter) + { + /*Multicast addr filtering is enabled*/ + if (pAdapter->mc_addr_list.isFilterApplied) + { + /*Filter applied during suspend mode*/ + /*Clear it here*/ + wlan_hdd_set_mc_addr_list(pAdapter, FALSE); + } } - - hddLog(VOS_TRACE_LEVEL_INFO, - "offload: in hdd_conf_resume_ind, restoring configuredMcastBcastFilter"); - hddLog(VOS_TRACE_LEVEL_INFO, "configuredMcastBcastFilter = %d", - pHddCtx->configuredMcastBcastFilter); - - -#ifdef WLAN_FEATURE_PACKET_FILTERING - /* Filer was applied during suspend inditication - * clear it when we resume. - */ - wlan_hdd_set_mc_addr_list(pAdapter, FALSE); #endif } @@ -1186,11 +788,11 @@ void hdd_suspend_wlan(void) { hdd_context_t *pHddCtx = NULL; v_CONTEXT_t pVosContext = NULL; + bool hdd_enter_bmps = FALSE; - VOS_STATUS status; - hdd_adapter_t *pAdapter = NULL; + hdd_adapter_t *pAdapter = NULL; hdd_adapter_list_node_t *pAdapterNode = NULL, *pNext = NULL; - bool hdd_enter_bmps = FALSE; + VOS_STATUS status; hddLog(VOS_TRACE_LEVEL_INFO, "%s: WLAN being suspended by Android OS",__func__); @@ -1215,7 +817,9 @@ void hdd_suspend_wlan(void) return; } + /*loop through all adapters. TBD fix for Concurrency */ hdd_set_pwrparams(pHddCtx); + status = hdd_get_front_adapter ( pHddCtx, &pAdapterNode ); while ( NULL != pAdapterNode && VOS_STATUS_SUCCESS == status ) { @@ -1229,22 +833,20 @@ void hdd_suspend_wlan(void) pAdapterNode = pNext; continue; } - /* Avoid multiple enter/exit BMPS in this while loop using - * hdd_enter_bmps flag - */ - if (FALSE == hdd_enter_bmps && (BMPS == pmcGetPmcState(pHddCtx->hHal))) - { - hdd_enter_bmps = TRUE; - - /* If device was already in BMPS, and dynamic DTIM is set, - * exit(set the device to full power) and enter BMPS again - * to reflect new DTIM value */ - wlan_hdd_enter_bmps(pAdapter, DRIVER_POWER_MODE_ACTIVE); - wlan_hdd_enter_bmps(pAdapter, DRIVER_POWER_MODE_AUTO); - - pHddCtx->hdd_ignore_dtim_enabled = TRUE; - } + /* Avoid multiple enter/exit BMPS in this while loop using + * hdd_enter_bmps flag + */ + if (FALSE == hdd_enter_bmps && (BMPS == pmcGetPmcState(pHddCtx->hHal))) + { + hdd_enter_bmps = TRUE; + /* If device was already in BMPS, and dynamic DTIM is set, + * exit(set the device to full power) and enter BMPS again + * to reflect new DTIM value */ + wlan_hdd_enter_bmps(pAdapter, DRIVER_POWER_MODE_ACTIVE); + wlan_hdd_enter_bmps(pAdapter, DRIVER_POWER_MODE_AUTO); + pHddCtx->hdd_ignore_dtim_enabled = TRUE; + } #ifdef SUPPORT_EARLY_SUSPEND_STANDBY_DEEPSLEEP if (pHddCtx->cfg_ini->nEnableSuspend == WLAN_MAP_SUSPEND_TO_STANDBY) { @@ -1252,7 +854,7 @@ void hdd_suspend_wlan(void) netif_tx_disable(pAdapter->dev); netif_carrier_off(pAdapter->dev); } - else if (pHddCtx->cfg_ini->nEnableSuspend == + else if (pHddCtx->cfg_ini->nEnableSuspend == WLAN_MAP_SUSPEND_TO_DEEP_SLEEP) { //Execute deep sleep procedure @@ -1263,11 +865,11 @@ void hdd_suspend_wlan(void) /*Suspend notification sent down to driver*/ hdd_conf_suspend_ind(pHddCtx, pAdapter); - status = hdd_get_next_adapter ( pHddCtx, pAdapterNode, &pNext ); - pAdapterNode = pNext; - } + status = hdd_get_next_adapter ( pHddCtx, pAdapterNode, &pNext ); + pAdapterNode = pNext; + } + pHddCtx->hdd_wlan_suspended = TRUE; - pHddCtx->hdd_wlan_suspended = TRUE; #ifdef SUPPORT_EARLY_SUSPEND_STANDBY_DEEPSLEEP if(pHddCtx->cfg_ini->nEnableSuspend == WLAN_MAP_SUSPEND_TO_STANDBY) { @@ -1285,6 +887,7 @@ static void hdd_PowerStateChangedCB ) { hdd_context_t *pHddCtx = callbackContext; + /* if the driver was not in BMPS during early suspend, * the dynamic DTIM is now updated at Riva */ if ((newState == BMPS) && pHddCtx->hdd_wlan_suspended @@ -1294,53 +897,14 @@ static void hdd_PowerStateChangedCB pHddCtx->hdd_ignore_dtim_enabled = TRUE; } spin_lock(&pHddCtx->filter_lock); - if ((newState == BMPS) && pHddCtx->hdd_wlan_suspended) - { + if((newState == BMPS) && pHddCtx->hdd_wlan_suspended) { spin_unlock(&pHddCtx->filter_lock); - if (VOS_FALSE == pHddCtx->sus_res_mcastbcast_filter_valid) - { - pHddCtx->sus_res_mcastbcast_filter = - pHddCtx->configuredMcastBcastFilter; - pHddCtx->sus_res_mcastbcast_filter_valid = VOS_TRUE; - - hddLog(VOS_TRACE_LEVEL_INFO, "offload: callback to associated"); - hddLog(VOS_TRACE_LEVEL_INFO, "saving configuredMcastBcastFilter = %d", - pHddCtx->configuredMcastBcastFilter); - hddLog(VOS_TRACE_LEVEL_INFO, - "offload: calling hdd_conf_mcastbcast_filter"); - - } - hdd_conf_mcastbcast_filter(pHddCtx, TRUE); if(pHddCtx->hdd_mcastbcast_filter_set != TRUE) hddLog(VOS_TRACE_LEVEL_ERROR, "%s: Not able to set mcast/bcast filter ", __func__); } - else - { - /* Android framework can send resume request when the WCN chip is - * in IMPS mode. When the chip exits IMPS mode the firmware will - * restore all the registers to the state they were before the chip - * entered IMPS and so our hardware filter settings confgured by the - * resume request will be lost. So reconfigure the filters on detecting - * a change in the power state of the WCN chip. - */ + else spin_unlock(&pHddCtx->filter_lock); - if (IMPS != newState) - { - spin_lock(&pHddCtx->filter_lock); - if (FALSE == pHddCtx->hdd_wlan_suspended) - { - spin_unlock(&pHddCtx->filter_lock); - hddLog(VOS_TRACE_LEVEL_INFO, - "Not in IMPS/BMPS and suspended state"); - hdd_conf_mcastbcast_filter(pHddCtx, FALSE); - } - else - { - spin_unlock(&pHddCtx->filter_lock); - } - } - } } @@ -1396,83 +960,50 @@ void hdd_unregister_mcast_bcast_filter(hdd_context_t *pHddCtx) pmcDeregisterDeviceStateUpdateInd(smeContext, hdd_PowerStateChangedCB); } } - #ifdef WLAN_FEATURE_GTK_OFFLOAD -void hdd_conf_gtk_offload(hdd_adapter_t *pAdapter, v_BOOL_t fenable) +void wlan_hdd_update_and_dissable_gtk_offload(hdd_adapter_t *pAdapter) { eHalStatus ret; tpSirGtkOffloadParams pGtkOffloadReqParams; hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); - if(fenable) - { - if ((eConnectionState_Associated == pHddStaCtx->conn_info.connState) && - (GTK_OFFLOAD_ENABLE == pHddStaCtx->gtkOffloadReqParams.ulFlags )) - { - vos_mem_copy(&hddGtkOffloadReqParams, - &pHddStaCtx->gtkOffloadReqParams, - sizeof (tSirGtkOffloadParams)); - - ret = sme_SetGTKOffload(WLAN_HDD_GET_HAL_CTX(pAdapter), - &hddGtkOffloadReqParams, pAdapter->sessionId); - if (eHAL_STATUS_SUCCESS != ret) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: sme_SetGTKOffload failed, returned %d", - __func__, ret); - return; - } + pGtkOffloadReqParams = + &pHddStaCtx->gtkOffloadRequestParams.gtkOffloadReqParams; - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: sme_SetGTKOffload successfull", __func__); - } - } - else - { - if ((eConnectionState_Associated == pHddStaCtx->conn_info.connState) && - (0 == memcmp(&pHddStaCtx->gtkOffloadReqParams.bssId, + if ((eConnectionState_Associated == pHddStaCtx->conn_info.connState) && + (0 != memcmp(&pGtkOffloadReqParams->bssId, &pHddStaCtx->conn_info.bssId, WNI_CFG_BSSID_LEN)) && - (GTK_OFFLOAD_ENABLE == pHddStaCtx->gtkOffloadReqParams.ulFlags)) - { - - /* Host driver has previously offloaded GTK rekey */ - ret = sme_GetGTKOffload(WLAN_HDD_GET_HAL_CTX(pAdapter), + (FALSE == pHddStaCtx->gtkOffloadRequestParams.requested)) + { + /* Host driver has previously offloaded GTK rekey */ + ret = sme_GetGTKOffload(WLAN_HDD_GET_HAL_CTX(pAdapter), wlan_hdd_cfg80211_update_replayCounterCallback, pAdapter, pAdapter->sessionId); - if (eHAL_STATUS_SUCCESS != ret) + if (eHAL_STATUS_SUCCESS != ret) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: sme_GetGTKOffload failed, returned %d", + __func__, ret); + } + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: sme_GetGTKOffload successfull", __func__); - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: sme_GetGTKOffload failed, returned %d", - __func__, ret); - return; - } - else - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: sme_GetGTKOffload successful", - __func__); - - /* Sending GTK offload dissable */ - memcpy(&hddGtkOffloadReqParams, &pHddStaCtx->gtkOffloadReqParams, - sizeof (tSirGtkOffloadParams)); - hddGtkOffloadReqParams.ulFlags = GTK_OFFLOAD_DISABLE; - ret = sme_SetGTKOffload(WLAN_HDD_GET_HAL_CTX(pAdapter), - &hddGtkOffloadReqParams, pAdapter->sessionId); - if (eHAL_STATUS_SUCCESS != ret) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: failed to dissable GTK offload, returned %d", - __func__, ret); - return; - } - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: successfully dissabled GTK offload request to HAL", - __func__); - } + /* Sending GTK offload dissable */ + pGtkOffloadReqParams->ulFlags = GTK_OFFLOAD_DISABLE; + ret = sme_SetGTKOffload(WLAN_HDD_GET_HAL_CTX(pAdapter), + pGtkOffloadReqParams, pAdapter->sessionId); + + if (eHAL_STATUS_SUCCESS != ret) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: failed to dissable GTK offload, returned %d", + __func__, ret); } + pHddStaCtx->gtkOffloadRequestParams.requested = FALSE; + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: successfully dissabled GTK offload request to HAL", + __func__); } - return; } #endif /*WLAN_FEATURE_GTK_OFFLOAD*/ @@ -1523,6 +1054,13 @@ void hdd_resume_wlan(void) continue; } +#ifdef WLAN_FEATURE_GTK_OFFLOAD + if ((WLAN_HDD_INFRA_STATION == pAdapter->device_mode) || + (WLAN_HDD_P2P_CLIENT == pAdapter->device_mode)) + { + wlan_hdd_update_and_dissable_gtk_offload(pAdapter); + } +#endif #ifdef SUPPORT_EARLY_SUSPEND_STANDBY_DEEPSLEEP if(pHddCtx->hdd_ps_state == eHDD_SUSPEND_DEEP_SLEEP) @@ -1675,14 +1213,6 @@ VOS_STATUS hdd_wlan_shutdown(void) hddLog(VOS_TRACE_LEVEL_FATAL,"%s: HDD context is Null",__func__); return VOS_STATUS_E_FAILURE; } - - //Stop the traffic monitor timer - if ( VOS_TIMER_STATE_RUNNING == - vos_timer_getCurrentState(&pHddCtx->tx_rx_trafficTmr)) - { - vos_timer_stop(&pHddCtx->tx_rx_trafficTmr); - } - hdd_reset_all_adapters(pHddCtx); /* DeRegister with platform driver as client for Suspend/Resume */ vosStatus = hddDeregisterPmOps(pHddCtx); @@ -1731,21 +1261,21 @@ VOS_STATUS hdd_wlan_shutdown(void) set_bit(MC_SHUTDOWN_EVENT_MASK, &vosSchedContext->mcEventFlag); set_bit(MC_POST_EVENT_MASK, &vosSchedContext->mcEventFlag); wake_up_interruptible(&vosSchedContext->mcWaitQueue); - wait_for_completion(&vosSchedContext->McShutdown); + wait_for_completion_interruptible(&vosSchedContext->McShutdown); /* Wait for TX to exit */ hddLog(VOS_TRACE_LEVEL_FATAL, "%s: Shutting down TX thread",__func__); set_bit(TX_SHUTDOWN_EVENT_MASK, &vosSchedContext->txEventFlag); set_bit(TX_POST_EVENT_MASK, &vosSchedContext->txEventFlag); wake_up_interruptible(&vosSchedContext->txWaitQueue); - wait_for_completion(&vosSchedContext->TxShutdown); + wait_for_completion_interruptible(&vosSchedContext->TxShutdown); /* Wait for RX to exit */ hddLog(VOS_TRACE_LEVEL_FATAL, "%s: Shutting down RX thread",__func__); set_bit(RX_SHUTDOWN_EVENT_MASK, &vosSchedContext->rxEventFlag); set_bit(RX_POST_EVENT_MASK, &vosSchedContext->rxEventFlag); wake_up_interruptible(&vosSchedContext->rxWaitQueue); - wait_for_completion(&vosSchedContext->RxShutdown); + wait_for_completion_interruptible(&vosSchedContext->RxShutdown); #ifdef WLAN_BTAMP_FEATURE vosStatus = WLANBAP_Stop(pVosContext); @@ -1814,9 +1344,6 @@ VOS_STATUS hdd_wlan_re_init(void) v_CONTEXT_t pVosContext = NULL; hdd_context_t *pHddCtx = NULL; eHalStatus halStatus; -#ifdef HAVE_WCNSS_CAL_DOWNLOAD - int max_retries = 0; -#endif #ifdef WLAN_BTAMP_FEATURE hdd_config_t *pConfig = NULL; WLANBAP_ConfigType btAmpConfig; @@ -1825,19 +1352,6 @@ VOS_STATUS hdd_wlan_re_init(void) hdd_ssr_timer_del(); hdd_prevent_suspend(); -#ifdef HAVE_WCNSS_CAL_DOWNLOAD - /* wait until WCNSS driver downloads NV */ - while (!wcnss_device_ready() && 10 >= ++max_retries) { - msleep(1000); - } - if (max_retries >= 10) { - hddLog(VOS_TRACE_LEVEL_FATAL,"%s: WCNSS driver not ready", __func__); - goto err_re_init; - } -#endif - - vos_set_reinit_in_progress(VOS_MODULE_ID_VOSS, TRUE); - /* The driver should always be initialized in STA mode after SSR */ hdd_set_conparam(0); @@ -1960,7 +1474,6 @@ VOS_STATUS hdd_wlan_re_init(void) /* Restart all adapters */ hdd_start_all_adapters(pHddCtx); pHddCtx->isLogpInProgress = FALSE; - vos_set_logp_in_progress(VOS_MODULE_ID_VOSS, FALSE); pHddCtx->hdd_mcastbcast_filter_set = FALSE; hdd_register_mcast_bcast_filter(pHddCtx); @@ -1980,7 +1493,6 @@ VOS_STATUS hdd_wlan_re_init(void) __func__); goto err_unregister_pmops; } - vos_set_reinit_in_progress(VOS_MODULE_ID_VOSS, FALSE); goto success; err_unregister_pmops: @@ -2029,7 +1541,6 @@ err_vosclose: err_re_init: /* Allow the phone to go to sleep */ hdd_allow_suspend(); - vos_set_reinit_in_progress(VOS_MODULE_ID_VOSS, FALSE); VOS_BUG(0); return -EPERM; diff --git a/drivers/staging/prima/CORE/HDD/src/wlan_hdd_ftm.c b/drivers/staging/prima/CORE/HDD/src/wlan_hdd_ftm.c index e10a49aeb1b..e062fb98435 100644 --- a/drivers/staging/prima/CORE/HDD/src/wlan_hdd_ftm.c +++ b/drivers/staging/prima/CORE/HDD/src/wlan_hdd_ftm.c @@ -151,9 +151,6 @@ /* To set 4MAC addresses from given first MAC address, * Last byte value within given MAC address must less than 0xFF - 3 */ #define QWLAN_MAX_MAC_LAST_BYTE_VALUE 0xFC -#define NV_EMBEDDED_VERSION 0x80 - -#define QWLAN_TXFIR_CFG_DPD_BYPASS_MASK 0x8 typedef struct { tANI_U32 tableSize; /* Whole NV Table Size */ @@ -211,144 +208,7 @@ static rateStr2rateIndex_t rateName_rateIndex_tbl[] = { HAL_PHY_RATE_MCS_1NSS_52_MBPS, "MCS_52_MBPS"}, { HAL_PHY_RATE_MCS_1NSS_58_5_MBPS, "MCS_58_5_MBPS"}, { HAL_PHY_RATE_MCS_1NSS_65_MBPS, "MCS_65_MBPS"}, - { HAL_PHY_RATE_MCS_1NSS_MM_SG_72_2_MBPS, "MCS_72_2_MBPS"}, - -//MCS Index #8-15 (40MHz) - - { HAL_PHY_RATE_MCS_1NSS_CB_13_5_MBPS, "MCS_CB_13_B_MBPS" }, - { HAL_PHY_RATE_MCS_1NSS_CB_27_MBPS, "MCS_CB_27_MBPS" }, - { HAL_PHY_RATE_MCS_1NSS_CB_40_5_MBPS, "MCS_CB_40_5_MBPS" }, - { HAL_PHY_RATE_MCS_1NSS_CB_54_MBPS, "MCS_CB_54_MBPS"}, - { HAL_PHY_RATE_MCS_1NSS_CB_81_MBPS, "MCS_CB_81_MBPS"}, - { HAL_PHY_RATE_MCS_1NSS_CB_108_MBPS, "MCS_CB_108_MBPS"}, - { HAL_PHY_RATE_MCS_1NSS_CB_121_5_MBPS, "MCS_CB_121_5_MBPS"}, - { HAL_PHY_RATE_MCS_1NSS_CB_135_MBPS, "MCS_CB_135_MBPS"}, - { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_15_MBPS, "MCS_CB_15_MBPS"}, - { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_30_MBPS, "MCS_CB_30_MBPS"}, - { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_45_MBPS, "MCS_CB_45_MBPS"}, - { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_60_MBPS, "MCS_CB_60_MBPS"}, - { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_90_MBPS, "MCS_CB_90_MBPS"}, - { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_120_MBPS, "MCS_CB_120_MBPS"}, - { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_135_MBPS, "MCS_CB_135_MBPS"}, - { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_150_MBPS, "MCS_CB_150_MBPS"}, - -#ifdef WLAN_FEATURE_11AC - /*11AC rate 20MHZ Normal GI*/ - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_6_5_MBPS, "MCS_VHT20_NGI_6_5_MBPS"}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_13_MBPS, "MCS_VHT20_NGI_13_MBPS"}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_19_5_MBPS,"MCS_VHT20_NGI_19_5_MBPS"}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_26_MBPS, "MCS_VHT20_NGI_26_MBPS"}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_39_MBPS, "MCS_VHT20_NGI_39_MBPS"}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_52_MBPS, "MCS_VHT20_NGI_52_MBPS"}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_58_5_MBPS,"MCS_VHT20_NGI_58_5_MBPS"}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_65_MBPS, "MCS_VHT20_NGI_65_MBPS"}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_78_MBPS, "MCS_VHT20_NGI_78_MBPS"}, -#ifdef WCN_PRONTO - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_86_5_MBPS,"MCS_VHT20_NGI_86_5_MBPS"}, -#endif - - /*11AC rate 20MHZ Short GI*/ - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_7_2_MBPS, "MCS_VHT20_SGI_7_2_MBPS"}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_14_4_MBPS,"MCS_VHT20_SGI_14_4_MBPS"}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_21_6_MBPS,"MCS_VHT20_SGI_21_6_MBPS"}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_28_8_MBPS,"MCS_VHT20_SGI_28_8_MBPS"}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_43_3_MBPS,"MCS_VHT20_SGI_43_3_MBPS"}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_57_7_MBPS,"MCS_VHT20_SGI_57_7_MBPS"}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_65_MBPS, "MCS_VHT20_SGI_65_MBPS"}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_72_2_MBPS,"MCS_VHT20_SGI_72_2_MBPS"}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_86_6_MBPS,"MCS_VHT20_SGI_86_6_MBPS"}, -#ifdef WCN_PRONTO - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_96_1_MBPS,"MCS_VHT20_SGI_96_1_MBPS"}, -#endif - - /*11AC rates 40MHZ normal GI*/ - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_13_5_MBPS, - "MCS_VHT40_NGI_CB_13_5_MBPS"}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_27_MBPS, - "MCS_VHT40_NGI_CB_27_MBPS"}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_40_5_MBPS, - "MCS_VHT40_NGI_CB_40_5_MBPS"}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_54_MBPS, - "MCS_VHT40_NGI_CB_54_MBPS"}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_81_MBPS, - "MCS_VHT40_NGI_CB_81_MBPS"}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_108_MBPS, - "MCS_VHT40_NGI_CB_108_MBPS"}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_121_5_MBPS, - "MCS_VHT40_NGI_CB_121_5_MBPS"}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_135_MBPS, - "MCS_VHT40_NGI_CB_135_MBPS"}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_162_MBPS, - "MCS_VHT40_NGI_CB_162_MBPS"}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_180_MBPS, - "MCS_VHT40_NGI_CB_180_MBPS"}, - - /*11AC rates 40MHZ short GI*/ - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_15_MBPS, - "MCS_VHT40_SGI_CB_15_MBPS"}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_30_MBPS, - "MCS_VHT40_SGI_CB_30_MBPS"}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_45_MBPS, - "MCS_VHT40_SGI_CB_45_MBPS"}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_60_MBPS, - "MCS_VHT40_SGI_CB_60_MBPS"}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_90_MBPS, - "MCS_VHT40_SGI_CB_90_MBPS"}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_120_MBPS, - "MCS_VHT40_SGI_CB_120_MBPS"}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_135_MBPS, - "MCS_VHT40_SGI_CB_135_MBPS"}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_150_MBPS, - "MCS_VHT40_SGI_CB_150_MBPS"}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_180_MBPS, - "MCS_VHT40_SGI_CB_180_MBPS"}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_200_MBPS, - "MCS_VHT40_SGI_CB_200_MBPS"}, - - /*11AC rates 80 MHZ normal GI*/ - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_29_3_MBPS, - "MCS_VHT80_NGI_CB_29_3_MBPS"}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_58_5_MBPS, - "MCS_VHT80_NGI_CB_58_5_MBPS"}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_87_8_MBPS, - "MCS_VHT80_NGI_CB_87_8_MBPS"}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_117_MBPS, - "MCS_VHT80_NGI_CB_117_MBPS"}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_175_5_MBPS, - "MCS_VHT80_NGI_CB_175_5_MBPS"}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_234_MBPS, - "MCS_VHT80_NGI_CB_234_MBPS"}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_263_3_MBPS, - "MCS_VHT80_NGI_CB_263_3_MBPS"}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_292_5_MBPS, - "MCS_VHT80_NGI_CB_292_5_MBPS"}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_351_MBPS, - "MCS_VHT80_NGI_CB_351_MBPS"}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_390_MBPS, - "MCS_VHT80_NGI_CB_390_MBPS"}, - - /*11AC rates 80 MHZ short GI*/ - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_32_5_MBPS, - "MCS_VHT80_SGI_CB_32_5_MBPS"}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_65_MBPS, - "MCS_VHT80_SGI_CB_65_MBPS"}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_97_5_MBPS, - "MCS_VHT80_SGI_CB_97_5_MBPS"}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_130_MBPS, - "MCS_VHT80_SGI_CB_130_MBPS"}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_195_MBPS, - "MCS_VHT80_SGI_CB_195_MBPS"}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_260_MBPS, - "MCS_VHT80_SGI_CB_260_MBPS"}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_292_5_MBPS, - "MCS_VHT80_SGI_CB_292_5_MBPS"}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_325_MBPS, - "MCS_VHT80_SGI_CB_325_MBPS"}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_390_MBPS, - "MCS_VHT80_SGI_CB_390_MBPS"}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_433_3_MBPS, - "MCS_VHT80_SGI_CB_433_3_MBPS"}, -#endif + { HAL_PHY_RATE_MCS_1NSS_MM_SG_72_2_MBPS, "MCS_72_2_MBPS"} }; static rateIndex2Preamble_t rate_index_2_preamble_table[] = @@ -373,16 +233,6 @@ static rateIndex2Preamble_t rate_index_2_preamble_table[] = { HAL_PHY_RATE_11A_48_MBPS, PHYDBG_PREAMBLE_OFDM}, { HAL_PHY_RATE_11A_54_MBPS, PHYDBG_PREAMBLE_OFDM}, - // 11A 20MHz Rates - { HAL_PHY_RATE_11A_DUP_6_MBPS, PHYDBG_PREAMBLE_OFDM}, - { HAL_PHY_RATE_11A_DUP_9_MBPS, PHYDBG_PREAMBLE_OFDM}, - { HAL_PHY_RATE_11A_DUP_12_MBPS, PHYDBG_PREAMBLE_OFDM}, - { HAL_PHY_RATE_11A_DUP_18_MBPS, PHYDBG_PREAMBLE_OFDM}, - { HAL_PHY_RATE_11A_DUP_24_MBPS, PHYDBG_PREAMBLE_OFDM}, - { HAL_PHY_RATE_11A_DUP_36_MBPS, PHYDBG_PREAMBLE_OFDM}, - { HAL_PHY_RATE_11A_DUP_48_MBPS, PHYDBG_PREAMBLE_OFDM}, - { HAL_PHY_RATE_11A_DUP_54_MBPS, PHYDBG_PREAMBLE_OFDM}, - //MCS Index #0-15 (20MHz) { HAL_PHY_RATE_MCS_1NSS_6_5_MBPS, PHYDBG_PREAMBLE_MIXED}, { HAL_PHY_RATE_MCS_1NSS_13_MBPS, PHYDBG_PREAMBLE_MIXED}, @@ -400,120 +250,8 @@ static rateIndex2Preamble_t rate_index_2_preamble_table[] = { HAL_PHY_RATE_MCS_1NSS_MM_SG_57_8_MBPS,PHYDBG_PREAMBLE_NOT_SUPPORTED}, { HAL_PHY_RATE_MCS_1NSS_MM_SG_65_MBPS, PHYDBG_PREAMBLE_NOT_SUPPORTED}, { HAL_PHY_RATE_MCS_1NSS_MM_SG_72_2_MBPS, PHYDBG_PREAMBLE_MIXED}, - - //MCS index (40MHz) - { HAL_PHY_RATE_MCS_1NSS_CB_13_5_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_MCS_1NSS_CB_27_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_MCS_1NSS_CB_40_5_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_MCS_1NSS_CB_54_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_MCS_1NSS_CB_81_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_MCS_1NSS_CB_108_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_MCS_1NSS_CB_121_5_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_MCS_1NSS_CB_135_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_15_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_30_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_45_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_60_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_90_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_120_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_135_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_150_MBPS, PHYDBG_PREAMBLE_MIXED}, - -#ifdef WLAN_FEATURE_11AC - /*11AC rate 20MHZ Normal GI*/ - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_6_5_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_13_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_19_5_MBPS,PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_26_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_39_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_52_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_58_5_MBPS,PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_65_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_78_MBPS, PHYDBG_PREAMBLE_MIXED}, -#ifdef WCN_PRONTO - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_86_5_MBPS,PHYDBG_PREAMBLE_MIXED}, -#endif - - /*11AC rate 20MHZ Short GI*/ - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_7_2_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_14_4_MBPS,PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_21_6_MBPS,PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_28_8_MBPS,PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_43_3_MBPS,PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_57_7_MBPS,PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_65_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_72_2_MBPS,PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_86_6_MBPS,PHYDBG_PREAMBLE_MIXED}, -#ifdef WCN_PRONTO - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_96_1_MBPS,PHYDBG_PREAMBLE_MIXED}, -#endif - - /*11AC rates 40MHZ normal GI*/ - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_13_5_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_27_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_40_5_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_54_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_81_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_108_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_121_5_MBPS,PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_135_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_162_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_180_MBPS, PHYDBG_PREAMBLE_MIXED}, - - /*11AC rates 40MHZ short GI*/ - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_15_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_30_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_45_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_60_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_90_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_120_MBPS,PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_135_MBPS,PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_150_MBPS,PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_180_MBPS,PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_200_MBPS,PHYDBG_PREAMBLE_MIXED}, - - /*11AC rates 80 MHZ normal GI*/ - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_29_3_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_58_5_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_87_8_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_117_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_175_5_MBPS,PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_234_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_263_3_MBPS,PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_292_5_MBPS,PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_351_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_390_MBPS, PHYDBG_PREAMBLE_MIXED}, - - /*11AC rates 80 MHZ short GI*/ - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_32_5_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_65_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_97_5_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_130_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_195_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_260_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_292_5_MBPS,PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_325_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_390_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_433_3_MBPS,PHYDBG_PREAMBLE_MIXED}, -#endif }; -static unsigned int valid_channel[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 36, 40, 44, 48, - 52, 56, 60, 64, 100, 104, 108, - 112, 116, 120, 124, 128, 132, - 136, 140, 149, 153, 157, 161, - 165, 208, 212, 216, 240, 244, - 248, 252, 0 }; -static unsigned int valid_channel_cb40[] = { 3, 4, 5, 6, 7, 8, 9, 10, 11, 38, - 42, 46, 50, 54, 58, 62, 102, 106, - 110, 114, 118, 122, 126, 130, 134, - 138, 151, 155, 159, 163, 210, 214, - 242, 246, 250, 0 }; -static unsigned int valid_channel_cb80[] = { 7, 42, 46, 50, 54, 58, 106, 110, - 114, 118, 122, 126, 130, 134, 155, - 159, 246, 0 }; - typedef struct { tANI_BOOLEAN frameGenEnabled; @@ -522,13 +260,11 @@ typedef struct v_U16_t txpower; v_U16_t rxmode; v_U16_t chainSelect; - ePhyChanBondState cbmode; } FTM_STATUS ; static FTM_STATUS ftm_status; //tpAniSirGlobal pMac; -static tPttMsgbuffer *pMsgBuf; static void _ftm_status_init(void) { @@ -554,7 +290,6 @@ static void _ftm_status_init(void) ftm_status.txpower = 2 ; ftm_status.rxmode = RXMODE_ENABLE_ALL; /* macStart() enables all receive pkt types */ ftm_status.chainSelect = FTM_CHAIN_SEL_R0_T0_ON; - ftm_status.cbmode = 0 ; //none channel bonding return; } @@ -989,9 +724,12 @@ static VOS_STATUS wlan_ftm_priv_set_txpktlen(hdd_adapter_t *pAdapter,v_U32_t len return VOS_STATUS_SUCCESS; } +/**--------------------------------------------------------------------------- + --------------------------------------------------------------------------*/ static VOS_STATUS wlan_ftm_priv_enable_chain(hdd_adapter_t *pAdapter,v_U16_t chainSelect) { + tPttMsgbuffer *pMsgBuf; uPttMsgs *pMsgBody; VOS_STATUS status; v_U16_t chainSelect_save = chainSelect; @@ -1031,7 +769,12 @@ static VOS_STATUS wlan_ftm_priv_enable_chain(hdd_adapter_t *pAdapter,v_U16_t cha break; } - vos_mem_set(pMsgBuf, sizeof(tPttMsgbuffer), 0); + pMsgBuf = (tPttMsgbuffer *)vos_mem_malloc(sizeof(tPttMsgbuffer)); + if(pMsgBuf == NULL) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:pMsgBuf is NULL",__func__); + return VOS_STATUS_E_NOMEM; + } init_completion(&pHddCtx->ftm.ftm_comp_var); pMsgBuf->msgId = PTT_MSG_ENABLE_CHAINS; pMsgBuf->msgBodyLength = sizeof(tMsgPttEnableChains) + PTT_HEADER_LENGTH; @@ -1041,25 +784,23 @@ static VOS_STATUS wlan_ftm_priv_enable_chain(hdd_adapter_t *pAdapter,v_U16_t cha status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength); - if (status != VOS_STATUS_SUCCESS) + if(status != VOS_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:wlan_ftm_postmsg failed", __func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:wlan_ftm_postmsg failed",__func__); status = VOS_STATUS_E_FAILURE; goto done; } - wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, - msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); + wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); - if (pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) + if(pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Ptt response status failed", __func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ptt response status failed",__func__); status = VOS_STATUS_E_FAILURE; goto done; } ftm_status.chainSelect = chainSelect_save; done: + vos_mem_free((v_VOID_t * )pMsgBuf); return status; } @@ -1148,21 +889,11 @@ static VOS_STATUS wlan_ftm_priv_get_status(hdd_adapter_t *pAdapter,char *buf) void HEXDUMP(char *s0, char *s1, int len) { - int i = 0, j = 0; + int tmp; printk(KERN_EMERG "%s\n :", s0); - if (len > 8) - { - for (j = 0; j < len/8; j++) - { - printk(KERN_EMERG "%02x %02x %02x %02x %02x %02x %02x %02x", - s1[j*8], s1[j*8+1], s1[j*8+2], s1[j*8+3], s1[j*8+4], - s1[j*8+5],s1[j*8+6],s1[j*8+7] ); - } - len = len - j*8; - } - for (i = 0; i< len; i++) { - printk(KERN_EMERG "%02x ", s1[j*8+i]); + for (tmp = 0; tmp< len; tmp++) { + printk(KERN_EMERG "%02x ", *s1++); } printk("\n"); } @@ -1201,13 +932,8 @@ VOS_STATUS vos_ftm_preStart( v_CONTEXT_t vosContext ) VOS_TRACE(VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_INFO, "vos prestart"); - if (NULL == pVosContext->pWDAContext) - { - VOS_ASSERT(0); - VOS_TRACE(VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR, - "%s: WDA NULL context", __func__); - return VOS_STATUS_E_FAILURE; - } + + VOS_ASSERT( NULL != pVosContext->pWDAContext); /* call macPreStart */ vStatus = macPreStart(pVosContext->pMACContext); @@ -1307,7 +1033,7 @@ int wlan_hdd_ftm_open(hdd_context_t *pHddCtx) if ( NULL == pHddCtx->hHal ) { hddLog(VOS_TRACE_LEVEL_ERROR,"%s: HAL context is null", __func__); - goto err_ftm_vos_close; + goto err_sal_close; } pAdapter = hdd_open_adapter( pHddCtx, WLAN_HDD_FTM, "wlan%d", @@ -1315,13 +1041,13 @@ int wlan_hdd_ftm_open(hdd_context_t *pHddCtx) if( NULL == pAdapter ) { hddLog(VOS_TRACE_LEVEL_ERROR,"%s: hdd_open_adapter failed", __func__); - goto err_adapter_open_failure; + goto err_adapter_open_failure; } if( wlan_ftm_register_wext(pAdapter)!= 0 ) { hddLog(VOS_TRACE_LEVEL_ERROR,"%s: hdd_register_wext failed", __func__); - goto err_adapter_close; + goto err_sal_close; } //Initialize the nlink service @@ -1387,12 +1113,11 @@ nl_srv_exit(); err_ftm_register_wext_close: hdd_UnregisterWext(pAdapter->dev); -err_adapter_close: err_adapter_open_failure: hdd_close_all_adapters( pHddCtx ); -err_ftm_vos_close: - wlan_ftm_vos_close(pVosContext); +err_sal_close: + err_vos_status_failure: return VOS_STATUS_E_FAILURE; @@ -1413,15 +1138,6 @@ int wlan_hdd_ftm_close(hdd_context_t *pHddCtx) return VOS_STATUS_E_NOMEM; } - /*release the wlan_hdd_process_ftm_cmd(), if waiting for any response.*/ - if (pHddCtx->ftm.IsCmdPending == TRUE) - { - if (vos_event_set(&pHddCtx->ftm.ftm_vos_event)!= VOS_STATUS_SUCCESS) - { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, - "%s: vos_event_set failed", __func__); - } - } if(WLAN_FTM_STARTED == pHddCtx->ftm.ftm_state) { VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, @@ -1588,7 +1304,7 @@ static int wlan_hdd_ftm_start(hdd_context_t *pHddCtx) "%s: WDA_NVDownload_Start reporting other error \n",__func__); } VOS_ASSERT(0); - goto err_status_failure; + goto err_wda_stop; } vStatus = WDA_start(pVosContext); @@ -2268,7 +1984,7 @@ int wlan_hdd_ftm_get_nv_field case NV_COMMON_MAC_ADDR: memcpy((void *)&nvField->fieldData, &nvFieldDataBuffer.macAddr[0], - NV_FIELD_MAC_ADDR_SIZE); + NV_FIELD_MAC_ADDR_SIZE * VOS_MAX_CONCURRENCY_PERSONA); // Motorola, IKLOCSEN-984 Return all MACs break; case NV_COMMON_MFG_SERIAL_NUMBER: @@ -2327,8 +2043,10 @@ int wlan_hdd_ftm_set_nv_field v_SIZE_t nvSize; sHalNv *nvContents = NULL; v_U8_t macLoop; - v_U8_t *pNVMac; - v_U8_t lastByteMAC; + /* IKLOCSEN-715 START Support WLAN Multi MAC Programming */ + v_U8_t macOctet; + v_BOOL_t isBlankMac = VOS_FALSE; + /* IKLOCSEN-715 STOP Support WLAN Multi MAC Programming */ nvStatus = vos_nv_getNVBuffer((void **)&nvContents, &nvSize); @@ -2366,28 +2084,53 @@ int wlan_hdd_ftm_set_nv_field break; case NV_COMMON_MAC_ADDR: - /* If Last byte is larger than 252 (0xFC), return Error, - * Since 3MACs should be derived from first MAC */ - if(QWLAN_MAX_MAC_LAST_BYTE_VALUE < - nvField->fieldData.macAddr[VOS_MAC_ADDRESS_LEN - 1]) + /* IKLOCSEN-715 START Support WLAN Multi MAC Programming */ + /* IKJB42MAIN-7853 START, gvx468 */ + VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, + "MAC = %02x:%02x:%02x:%02x:%02x:%02x, MAC2 = %02x:%02x:%02x:%02x:%02x:%02x, MAC3 = %02x:%02x:%02x:%02x:%02x:%02x, MAC4 = %02x:%02x:%02x:%02x:%02x:%02x", + nvField->fieldData.macAddr.macAddr1[0], nvField->fieldData.macAddr.macAddr1[1], + nvField->fieldData.macAddr.macAddr1[2], nvField->fieldData.macAddr.macAddr1[3], + nvField->fieldData.macAddr.macAddr1[4], nvField->fieldData.macAddr.macAddr1[5], + nvField->fieldData.macAddr.macAddr2[0], nvField->fieldData.macAddr.macAddr2[1], + nvField->fieldData.macAddr.macAddr2[2], nvField->fieldData.macAddr.macAddr2[3], + nvField->fieldData.macAddr.macAddr2[4], nvField->fieldData.macAddr.macAddr2[5], + nvField->fieldData.macAddr.macAddr3[0], nvField->fieldData.macAddr.macAddr3[1], + nvField->fieldData.macAddr.macAddr3[2], nvField->fieldData.macAddr.macAddr3[3], + nvField->fieldData.macAddr.macAddr3[4], nvField->fieldData.macAddr.macAddr3[5], + nvField->fieldData.macAddr.macAddr4[0], nvField->fieldData.macAddr.macAddr4[1], + nvField->fieldData.macAddr.macAddr4[2], nvField->fieldData.macAddr.macAddr4[3], + nvField->fieldData.macAddr.macAddr4[4], nvField->fieldData.macAddr.macAddr4[5]); + /* IKJB42MAIN-7853 STOP, gvx468 */ + + for(macLoop = 0; macLoop < VOS_MAX_CONCURRENCY_PERSONA; macLoop++) { - VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, - "Last Byte of the seed MAC is too large 0x%x", - nvField->fieldData.macAddr[VOS_MAC_ADDRESS_LEN - 1]); - return -EILSEQ; - } + v_U8_t *pNVMac = + macLoop == 0 ? (v_U8_t *)nvContents->fields.macAddr : + macLoop == 1 ? (v_U8_t *)nvContents->fields.macAddr2 : + macLoop == 2 ? (v_U8_t *)nvContents->fields.macAddr3 : + (v_U8_t *)nvContents->fields.macAddr4; + v_U8_t *macPtr = + macLoop == 0 ? (v_U8_t *)nvField->fieldData.macAddr.macAddr1 : + macLoop == 1 ? (v_U8_t *)nvField->fieldData.macAddr.macAddr2 : + macLoop == 2 ? (v_U8_t *)nvField->fieldData.macAddr.macAddr3 : + (v_U8_t *)nvField->fieldData.macAddr.macAddr4; + isBlankMac = VOS_TRUE; + for(macOctet = 0; macOctet < VOS_MAC_ADDRESS_LEN ; macOctet++) { + if(macPtr[macOctet] !=0){ + isBlankMac = VOS_FALSE; + break; + } + } + if(isBlankMac == VOS_FALSE) { + // MAC to be programmed! + VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, + "Writing MAC #%x, MAC = %02x:%02x:%02x:%02x:%02x:%02x", + macLoop, macPtr[0], macPtr[1], macPtr[2], macPtr[3], macPtr[4], macPtr[5]); + vos_mem_copy(pNVMac, macPtr, NV_FIELD_MAC_ADDR_SIZE); - pNVMac = (v_U8_t *)nvContents->fields.macAddr; - lastByteMAC = nvField->fieldData.macAddr[VOS_MAC_ADDRESS_LEN - 1]; - for(macLoop = 0; macLoop < VOS_MAX_CONCURRENCY_PERSONA; macLoop++) - { - nvField->fieldData.macAddr[VOS_MAC_ADDRESS_LEN - 1] = - lastByteMAC + macLoop; - if ((macLoop * NV_FIELD_MAC_ADDR_SIZE) < (sizeof(pNVMac) / sizeof(int))) - vos_mem_copy(pNVMac + (macLoop * NV_FIELD_MAC_ADDR_SIZE), - &nvField->fieldData.macAddr[0], - NV_FIELD_MAC_ADDR_SIZE); + } } + /* IKLOCSEN-715 STOP Support WLAN Multi MAC Programming */ break; case NV_COMMON_MFG_SERIAL_NUMBER: @@ -2726,15 +2469,6 @@ void wlan_hdd_process_ftm_cmd hddLog(VOS_TRACE_LEVEL_ERROR,"%s: request buffer is null\n",__func__); return ; } - - if (vos_is_load_unload_in_progress(VOS_MODULE_ID_HDD, NULL)) - { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_WARN, - "%s: Load/Unload in Progress. Ignoring FTM Command %d" - , __func__, pRequestBuf->ftmpkt.ftm_cmd_type); - return ; - } - /*Save the received request*/ pHddCtx->ftm.pRequestBuf = pRequestBuf; @@ -2855,6 +2589,7 @@ void wlan_hdd_process_ftm_cmd //HEXDUMP("Request:",(char*)pftm_data,cmd_len); + pHddCtx->ftm.IsCmdPending = TRUE; /*Post the command to the HAL*/ if (wlan_ftm_postmsg(pftm_data, cmd_len) != VOS_STATUS_SUCCESS) { @@ -2863,31 +2598,13 @@ void wlan_hdd_process_ftm_cmd return; } - /*After successful posting of message the command should be pending*/ - pHddCtx->ftm.IsCmdPending = TRUE; - /*Wait here until you get the response from HAL*/ if (vos_wait_single_event(&pHddCtx->ftm.ftm_vos_event, FTM_VOS_EVENT_WAIT_TIME)!= VOS_STATUS_SUCCESS) { - hddLog(VOS_TRACE_LEVEL_ERROR,"%s: vos_wait_single_event failed",__func__); - pHddCtx->ftm.pResponseBuf->ftm_err_code = WLAN_FTM_FAILURE; - wlan_ftm_send_response(pHddCtx); - pHddCtx->ftm.IsCmdPending = FALSE; + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: vos_wait_single_event failed",__func__); return; } - /*This check will handle the case where the completion is sent by - wlan_hdd_process_ftm_cmd() and not by the HAL*/ - if (vos_is_load_unload_in_progress(VOS_MODULE_ID_HDD, NULL)) - { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_WARN, - "%s: Load/Unload in Progress. Ignoring FTM Command %d" - , __func__, pRequestBuf->ftmpkt.ftm_cmd_type); - - pHddCtx->ftm.pResponseBuf->ftm_err_code = WLAN_FTM_FAILURE; - wlan_ftm_send_response(pHddCtx); - pHddCtx->ftm.IsCmdPending = FALSE; - return ; - } cmd_len = be16_to_cpu(pHddCtx->ftm.wnl->wmsg.length); @@ -2937,16 +2654,6 @@ static VOS_STATUS wlan_ftm_priv_start_stop_ftm(hdd_adapter_t *pAdapter, "FTM Start Failed"); return VOS_STATUS_E_FAILURE; } - if (NULL == pMsgBuf) - { - pMsgBuf = (tPttMsgbuffer *)vos_mem_malloc(sizeof(tPttMsgbuffer)); - if (NULL == pMsgBuf) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:pMsgBuf is NULL", __func__); - return VOS_STATUS_E_FAILURE; - } - } } else { @@ -2958,78 +2665,10 @@ static VOS_STATUS wlan_ftm_priv_start_stop_ftm(hdd_adapter_t *pAdapter, "FTM Stop Failed"); return VOS_STATUS_E_FAILURE; } - pHddCtx->ftm.ftm_state = WLAN_FTM_STOPPED; - if (pMsgBuf) - { - vos_mem_free((v_VOID_t * )pMsgBuf); - pMsgBuf = NULL; - } } return VOS_STATUS_SUCCESS; } -static unsigned int get_primary_channel(unsigned int center_channel,unsigned int cb) -{ - unsigned int primary_channel = center_channel; - - if (center_channel <= 14) - return primary_channel ; - - switch (cb) - { - case PHY_DOUBLE_CHANNEL_LOW_PRIMARY: - case PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_CENTERED: - case PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_LOW: - primary_channel -= 2; - break; - - case PHY_DOUBLE_CHANNEL_HIGH_PRIMARY: - case PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_CENTERED: - case PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_HIGH: - primary_channel += 2; - break; - - case PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_LOW: - primary_channel -= 6; - break; - - case PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_HIGH: - primary_channel += 6; - break; - } - - return primary_channel; -} - -static VOS_STATUS validate_channel(unsigned int channel,unsigned int cb) -{ - unsigned int *table = NULL; - int index = 0; - - if (PHY_SINGLE_CHANNEL_CENTERED == cb) - table = valid_channel; - else if (cb >= PHY_DOUBLE_CHANNEL_LOW_PRIMARY && - cb <= PHY_DOUBLE_CHANNEL_HIGH_PRIMARY) - table = valid_channel_cb40; - else if (cb >= PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_CENTERED && - cb <= PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_HIGH) - table = valid_channel_cb80; - - if (NULL == table) - return VOS_STATUS_E_FAILURE; - - while (table[index] != 0) - { - if (table[index] == channel) - return VOS_STATUS_SUCCESS; - - index++; - } - - return VOS_STATUS_E_FAILURE; -} - - /**--------------------------------------------------------------------------- \brief wlan_ftm_priv_set_channel() - @@ -3045,176 +2684,135 @@ static VOS_STATUS validate_channel(unsigned int channel,unsigned int cb) static VOS_STATUS wlan_ftm_priv_set_channel(hdd_adapter_t *pAdapter,v_U16_t channel) { + tPttMsgbuffer *pMsgBuf; uPttMsgs *pMsgBody; VOS_STATUS status; hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx; - if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) + if(pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Ftm has not started. Please start the ftm. ", __func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ftm has not started. Please start the ftm. ",__func__); return VOS_STATUS_E_FAILURE; } - if (VOS_STATUS_SUCCESS != validate_channel(channel, ftm_status.cbmode)) + if(!(channel >= 1 && channel <= 14)) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Invalid Channel Number. ", __func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Invalid Channel Number. ",__func__); return VOS_STATUS_E_FAILURE; } - vos_mem_set(pMsgBuf, sizeof(*pMsgBuf), 0); + pMsgBuf = (tPttMsgbuffer *)vos_mem_malloc(sizeof(tPttMsgbuffer)); + if(pMsgBuf == NULL) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:pMsgBuf is NULL",__func__); + return VOS_STATUS_E_NOMEM; + } init_completion(&pHddCtx->ftm.ftm_comp_var); pMsgBuf->msgId = PTT_MSG_SET_CHANNEL; pMsgBuf->msgBodyLength = sizeof(tMsgPttSetChannel) + PTT_HEADER_LENGTH; pMsgBody = &pMsgBuf->msgBody; - pMsgBody->SetChannel.chId = get_primary_channel(channel, ftm_status.cbmode); + pMsgBody->SetChannel.chId = channel; VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Channel =%d\n",pMsgBody->SetChannel.chId); - pMsgBody->SetChannel.cbState = ftm_status.cbmode ; + pMsgBody->SetChannel.cbState = PHY_SINGLE_CHANNEL_CENTERED; status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength); - if (status != VOS_STATUS_SUCCESS) + if(status != VOS_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:wlan_ftm_postmsg failed", __func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:wlan_ftm_postmsg failed",__func__); status = VOS_STATUS_E_FAILURE; goto done; } - wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, - msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); + wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); - if (pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) + if(pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Ptt response status failed", __func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ptt response status failed",__func__); status = VOS_STATUS_E_FAILURE; goto done; } done: + vos_mem_free((v_VOID_t * )pMsgBuf); return status; } - /**--------------------------------------------------------------------------- - \brief wlan_ftm_priv_set_pwr_cntl_mode() - + \brief wlan_ftm_priv_set_txpower() - - This function is used for setting the power control mode for tx. + This function is used for setting the txpower to the halphy ptt module. \param - pAdapter - Pointer HDD Context. - - pwr_mode - power control mode 0-2. + - txpower - txpower Number 1-18. \return - 0 for success, non zero for failure --------------------------------------------------------------------------*/ -static VOS_STATUS wlan_ftm_priv_set_pwr_cntl_mode(hdd_adapter_t *pAdapter, - v_U16_t pwr_mode) +static VOS_STATUS wlan_ftm_priv_set_txpower(hdd_adapter_t *pAdapter,v_U16_t txpower) { + tPttMsgbuffer *pMsgBuf; uPttMsgs *pMsgBody; VOS_STATUS status; hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx; - if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) + if(pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Ftm has not started. Please start the ftm. ", __func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ftm has not started. Please start the ftm. ",__func__); return VOS_STATUS_E_FAILURE; } - if (pwr_mode > 2) + /* do not allow to change setting when tx pktgen is enabled, although halphy does allow changing tx power + * when tx pktgen is enabled + */ + if (ftm_status.frameGenEnabled) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:invalid control mode.valid mode is 0 , 1, 2.", __func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:cannot set txpower when pktgen is enabled.",__func__); return VOS_STATUS_E_FAILURE; } - vos_mem_set(pMsgBuf, sizeof(tPttMsgbuffer), 0); + if(!(txpower >= 9 && txpower <= 24)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Invalid tx power. ",__func__); + return VOS_STATUS_E_FAILURE; + } + pMsgBuf = (tPttMsgbuffer *)vos_mem_malloc(sizeof(tPttMsgbuffer)); + if(pMsgBuf == NULL) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:pMsgBuf is NULL",__func__); + return VOS_STATUS_E_NOMEM; + } init_completion(&pHddCtx->ftm.ftm_comp_var); - pMsgBody = &pMsgBuf->msgBody; - pMsgBuf->msgId = PTT_MSG_CLOSE_TPC_LOOP_PRIMA_V1; + pMsgBuf->msgId = PTT_MSG_CLOSE_TPC_LOOP; pMsgBuf->msgBodyLength = sizeof(tMsgPttCloseTpcLoop) + PTT_HEADER_LENGTH; - pMsgBody->CloseTpcLoop.tpcClose = pwr_mode; - status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf, pMsgBuf->msgBodyLength); + pMsgBody = &pMsgBuf->msgBody; + pMsgBody->CloseTpcLoop.tpcClose = TRUE; - if (status != VOS_STATUS_SUCCESS) + status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength); + + if(status != VOS_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:wlan_ftm_postmsg failed", __func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:wlan_ftm_postmsg failed",__func__); status = VOS_STATUS_E_FAILURE; goto done; } - wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, - msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); + wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); - if (pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) + if(pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Ptt response status failed", __func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ptt response status failed",__func__); status = VOS_STATUS_E_FAILURE; goto done; } - done: - return status; - -} - -/**--------------------------------------------------------------------------- - - \brief wlan_ftm_priv_set_txpower() - - - This function is used for setting the txpower to the halphy ptt module. - - \param - pAdapter - Pointer HDD Context. - - txpower - txpower Number 1-18. - - \return - 0 for success, non zero for failure - - --------------------------------------------------------------------------*/ - -static VOS_STATUS wlan_ftm_priv_set_txpower(hdd_adapter_t *pAdapter, - v_U16_t txpower) -{ - uPttMsgs *pMsgBody; - VOS_STATUS status; - hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx; - - if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Ftm has not started. Please start the ftm. ", __func__); - return VOS_STATUS_E_FAILURE; - } - - /* do not allow to change setting when tx pktgen is enabled, although halphy does allow changing tx power - * when tx pktgen is enabled - */ - if (ftm_status.frameGenEnabled) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:cannot set txpower when pktgen is enabled.", __func__); - return VOS_STATUS_E_FAILURE; - } - - if(!(txpower >= 9 && txpower <= 24)) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Invalid tx power. ", __func__); - return VOS_STATUS_E_FAILURE; - } - - vos_mem_set(pMsgBuf, sizeof(tPttMsgbuffer), 0); init_completion(&pHddCtx->ftm.ftm_comp_var); - pMsgBody = &pMsgBuf->msgBody; pMsgBuf->msgId = PTT_MSG_SET_TX_POWER; pMsgBuf->msgBodyLength = sizeof(tMsgPttSetTxPower) + PTT_HEADER_LENGTH; @@ -3222,66 +2820,28 @@ static VOS_STATUS wlan_ftm_priv_set_txpower(hdd_adapter_t *pAdapter, status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength); - if (status != VOS_STATUS_SUCCESS) + if(status != VOS_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:wlan_ftm_postmsg failed", __func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:wlan_ftm_postmsg failed",__func__); status = VOS_STATUS_E_FAILURE; goto done; } - wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, - msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); + wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); - if (pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) + if(pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Ptt response status failed", __func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ptt response status failed",__func__); status = VOS_STATUS_E_FAILURE; goto done; } ftm_status.txpower = txpower ; done: + vos_mem_free((v_VOID_t * )pMsgBuf); return status; } - - -static VOS_STATUS wlan_ftm_priv_enable_dpd(hdd_adapter_t *pAdapter, - v_U16_t enable) -{ - tANI_U32 value = 0; - tANI_U32 reg_addr; - hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx; - if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Ftm has not started. Please start the ftm. ", __func__); - return VOS_STATUS_E_FAILURE; - } - -#ifdef WCN_PRONTO - reg_addr = 0xfb018000; -#else - reg_addr = 0x03018000; -#endif - wpalReadRegister(reg_addr, &value); - if (enable) - { - value &= (~QWLAN_TXFIR_CFG_DPD_BYPASS_MASK); - } - else - { - value |= QWLAN_TXFIR_CFG_DPD_BYPASS_MASK; - } - - wpalWriteRegister(reg_addr, value); - - return VOS_STATUS_SUCCESS; -} - - /**--------------------------------------------------------------------------- \brief wlan_ftm_priv_set_txrate() - @@ -3345,21 +2905,20 @@ static VOS_STATUS wlan_ftm_priv_set_txrate(hdd_adapter_t *pAdapter,char *txrate) static VOS_STATUS wlan_ftm_priv_start_stop_tx_pktgen(hdd_adapter_t *pAdapter,v_U16_t startStop) { + tPttMsgbuffer *pMsgBuf; uPttMsgs *pMsgBody; VOS_STATUS status; hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx; - if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) + if(pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Ftm has not started. Please start the ftm. ", __func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ftm has not started. Please start the ftm. ",__func__); return VOS_STATUS_E_FAILURE; } - if (startStop != 1 && startStop != 0) + if(startStop != 1 && startStop != 0) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Tx value is invalid ", __func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Tx value is invalid ",__func__); return VOS_STATUS_E_FAILURE; } @@ -3368,8 +2927,13 @@ static VOS_STATUS wlan_ftm_priv_start_stop_tx_pktgen(hdd_adapter_t *pAdapter,v_U { return VOS_STATUS_SUCCESS ; } - vos_mem_set(pMsgBuf, sizeof(tPttMsgbuffer), 0); + pMsgBuf = (tPttMsgbuffer *)vos_mem_malloc(sizeof(tPttMsgbuffer)); + if(pMsgBuf == NULL) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:pMsgBuf is NULL",__func__); + return VOS_STATUS_E_NOMEM; + } if (startStop == 1) { init_completion(&pHddCtx->ftm.ftm_comp_var); @@ -3379,20 +2943,17 @@ static VOS_STATUS wlan_ftm_priv_start_stop_tx_pktgen(hdd_adapter_t *pAdapter,v_U pMsgBody->ConfigTxPacketGen.frameParams = ftm_status.frameParams ; status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength); - if (status != VOS_STATUS_SUCCESS) + if(status != VOS_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:posting PTT_MSG_CONFIG_TX_PACKET_GEN failed", __func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:posting PTT_MSG_CONFIG_TX_PACKET_GEN failed",__func__); status = VOS_STATUS_E_FAILURE; goto done; } - wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, - msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); - if (pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) + wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); + if(pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s: PTT_MSG_CONFIG_TX_PACKET_GEN failed", __func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s: PTT_MSG_CONFIG_TX_PACKET_GEN failed",__func__); status = VOS_STATUS_E_FAILURE; goto done; } @@ -3421,16 +2982,17 @@ static VOS_STATUS wlan_ftm_priv_start_stop_tx_pktgen(hdd_adapter_t *pAdapter,v_U } done: + vos_mem_free((v_VOID_t * )pMsgBuf); if (status == VOS_STATUS_SUCCESS) { if (startStop == 1) { - ftm_status.frameGenEnabled = eANI_BOOLEAN_TRUE; + ftm_status.frameGenEnabled = eANI_BOOLEAN_TRUE ; } else { - ftm_status.frameGenEnabled = eANI_BOOLEAN_FALSE; + ftm_status.frameGenEnabled = eANI_BOOLEAN_FALSE ; } } @@ -3438,31 +3000,6 @@ done: } - -static VOS_STATUS wlan_ftm_priv_set_cb(hdd_adapter_t *pAdapter, v_U16_t cbmode) -{ - - hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx; - if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Ftm has not started. Please start the ftm. ", __func__); - return VOS_STATUS_E_FAILURE; - } - - if (cbmode > PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_HIGH) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:cb mode value is invalid ", __func__); - return VOS_STATUS_E_FAILURE; - } - - ftm_status.cbmode = cbmode; - - return VOS_STATUS_SUCCESS; - -} - /**--------------------------------------------------------------------------- \brief wlan_ftm_rx_mode() - @@ -3481,25 +3018,29 @@ static VOS_STATUS wlan_ftm_priv_set_cb(hdd_adapter_t *pAdapter, v_U16_t cbmode) static VOS_STATUS wlan_ftm_priv_rx_mode(hdd_adapter_t *pAdapter,v_U16_t rxmode) { + tPttMsgbuffer *pMsgBuf; uPttMsgs *pMsgBody; VOS_STATUS status; hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx; - if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) + if(pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Ftm has not started. Please start the ftm. ", __func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ftm has not started. Please start the ftm. ",__func__); return VOS_STATUS_E_FAILURE; } - if (rxmode > 3) + if(rxmode > 3) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Rx mode value is invalid ", __func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Rx mode value is invalid ",__func__); return VOS_STATUS_E_FAILURE; } - vos_mem_set(pMsgBuf, sizeof(tPttMsgbuffer), 0); + pMsgBuf = (tPttMsgbuffer *)vos_mem_malloc(sizeof(tPttMsgbuffer)); + if(pMsgBuf == NULL) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:pMsgBuf is NULL",__func__); + return VOS_STATUS_E_NOMEM; + } init_completion(&pHddCtx->ftm.ftm_comp_var); pMsgBuf->msgId = PTT_MSG_SET_RX_DISABLE_MODE; @@ -3537,25 +3078,23 @@ static VOS_STATUS wlan_ftm_priv_rx_mode(hdd_adapter_t *pAdapter,v_U16_t rxmode) status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength); - if (status != VOS_STATUS_SUCCESS) + if(status != VOS_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:wlan_ftm_postmsg failed", __func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:wlan_ftm_postmsg failed",__func__); status = VOS_STATUS_E_FAILURE; goto done; } - wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, - msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); + wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); - if (pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) + if(pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Ptt response status failed", __func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ptt response status failed",__func__); status = VOS_STATUS_E_FAILURE; goto done; } ftm_status.rxmode = rxmode ; done: + vos_mem_free((v_VOID_t * )pMsgBuf); return status; } @@ -3575,48 +3114,54 @@ done: static VOS_STATUS wlan_ftm_priv_rx_pkt_clear(hdd_adapter_t *pAdapter,v_U16_t rx_pkt_clear) { + tPttMsgbuffer *pMsgBuf; + uPttMsgs *pMsgBody; VOS_STATUS status; hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx; - if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) + if(pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Ftm has not started. Please start the ftm. ", __func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ftm has not started. Please start the ftm. ",__func__); return VOS_STATUS_E_FAILURE; } - if (rx_pkt_clear != 1) + if(rx_pkt_clear != 1) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Invalid rx_pkt_clear value ", __func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Invalid rx_pkt_clear value ",__func__); return VOS_STATUS_E_FAILURE; } - vos_mem_set(pMsgBuf, sizeof(tPttMsgbuffer), 0); + pMsgBuf = (tPttMsgbuffer *)vos_mem_malloc(sizeof(tPttMsgbuffer)); + if(pMsgBuf == NULL) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:pMsgBuf is NULL",__func__); + return VOS_STATUS_E_NOMEM; + } init_completion(&pHddCtx->ftm.ftm_comp_var); pMsgBuf->msgId = PTT_MSG_RESET_RX_PACKET_STATISTICS; pMsgBuf->msgBodyLength = sizeof(tMsgPttResetRxPacketStatistics) + PTT_HEADER_LENGTH; + pMsgBody = &pMsgBuf->msgBody; + pMsgBody->ResetRxPacketStatistics.notUsed= rx_pkt_clear; + status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength); - if (status != VOS_STATUS_SUCCESS) + if(status != VOS_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:wlan_ftm_postmsg failed", __func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:wlan_ftm_postmsg failed",__func__); status = VOS_STATUS_E_FAILURE; goto done; } - wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, - msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); + wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); - if (pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) + if(pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Ptt response status failed", __func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ptt response status failed",__func__); status = VOS_STATUS_E_FAILURE; goto done; } done: + vos_mem_free((v_VOID_t * )pMsgBuf); return status; } @@ -3637,6 +3182,7 @@ done: static VOS_STATUS wlan_ftm_priv_get_channel(hdd_adapter_t *pAdapter,v_U16_t *pChannel) { + tPttMsgbuffer *pMsgBuf; uPttMsgs *pMsgBody; VOS_STATUS status; v_U16_t freq; @@ -3644,13 +3190,17 @@ static VOS_STATUS wlan_ftm_priv_get_channel(hdd_adapter_t *pAdapter,v_U16_t *pCh hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx; - if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) + if(pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Ftm has not started. Please start the ftm. ", __func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ftm has not started. Please start the ftm. ",__func__); return VOS_STATUS_E_FAILURE; } - vos_mem_set(pMsgBuf, sizeof(tPttMsgbuffer), 0); + pMsgBuf = (tPttMsgbuffer *)vos_mem_malloc(sizeof(tPttMsgbuffer)); + if(pMsgBuf == NULL) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:pMsgBuf is NULL",__func__); + return VOS_STATUS_E_NOMEM; + } init_completion(&pHddCtx->ftm.ftm_comp_var); pMsgBuf->msgId = PTT_MSG_DBG_READ_REGISTER; pMsgBuf->msgBodyLength = sizeof(tMsgPttDbgReadRegister) + PTT_HEADER_LENGTH; @@ -3660,21 +3210,18 @@ static VOS_STATUS wlan_ftm_priv_get_channel(hdd_adapter_t *pAdapter,v_U16_t *pCh status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength); - if (status != VOS_STATUS_SUCCESS) + if(status != VOS_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:wlan_ftm_postmsg failed", __func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:wlan_ftm_postmsg failed",__func__); status = VOS_STATUS_E_FAILURE; goto done; } - wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, - msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); + wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); - if (pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) + if(pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Ptt response status failed", __func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ptt response status failed",__func__); status = VOS_STATUS_E_FAILURE; goto done; } @@ -3694,6 +3241,7 @@ static VOS_STATUS wlan_ftm_priv_get_channel(hdd_adapter_t *pAdapter,v_U16_t *pCh VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Channel = %d freq = %d\n",*pChannel, freq); done: + vos_mem_free((v_VOID_t * )pMsgBuf); return status; } @@ -3714,17 +3262,22 @@ static VOS_STATUS wlan_ftm_priv_get_channel(hdd_adapter_t *pAdapter,v_U16_t *pCh static VOS_STATUS wlan_ftm_priv_get_txpower(hdd_adapter_t *pAdapter,v_U16_t *pTxPwr) { + tPttMsgbuffer *pMsgBuf; uPttMsgs *pMsgBody; VOS_STATUS status; hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx; - if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) + if(pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Ftm has not started. Please start the ftm. ", __func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ftm has not started. Please start the ftm. ",__func__); return VOS_STATUS_E_FAILURE; } - vos_mem_set(pMsgBuf, sizeof(tPttMsgbuffer), 0); + pMsgBuf = (tPttMsgbuffer *)vos_mem_malloc(sizeof(tPttMsgbuffer)); + if(pMsgBuf == NULL) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:pMsgBuf is NULL",__func__); + return VOS_STATUS_E_NOMEM; + } init_completion(&pHddCtx->ftm.ftm_comp_var); pMsgBuf->msgId = PTT_MSG_GET_TX_POWER_REPORT; pMsgBuf->msgBodyLength = sizeof(tMsgPttGetTxPowerReport) + PTT_HEADER_LENGTH; @@ -3733,26 +3286,24 @@ static VOS_STATUS wlan_ftm_priv_get_txpower(hdd_adapter_t *pAdapter,v_U16_t *pTx status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength); - if (status != VOS_STATUS_SUCCESS) + if(status != VOS_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:wlan_ftm_postmsg failed", __func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:wlan_ftm_postmsg failed",__func__); status = VOS_STATUS_E_FAILURE; goto done; } - wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, - msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); + wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); - if (pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) + if(pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s: PTT_MSG_GET_TX_POWER_REPORT failed", __func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s: PTT_MSG_GET_TX_POWER_REPORT failed",__func__); status = VOS_STATUS_E_FAILURE; goto done; } *pTxPwr = ((((pMsgBody->GetTxPowerReport.pwrTemplateIndex & 0x1F) + 4)*50)/100); done: + vos_mem_free((v_VOID_t * )pMsgBuf); return status; } @@ -3772,6 +3323,7 @@ static VOS_STATUS wlan_ftm_priv_get_txpower(hdd_adapter_t *pAdapter,v_U16_t *pTx VOS_STATUS wlan_ftm_priv_get_ftm_version(hdd_adapter_t *pAdapter,char *pftmVer) { + tPttMsgbuffer *pMsgBuf; uPttMsgs *pMsgBody; VOS_STATUS status; v_U32_t reg_val; @@ -3780,14 +3332,18 @@ VOS_STATUS wlan_ftm_priv_get_ftm_version(hdd_adapter_t *pAdapter,char *pftmVer) int lenRes = 0; int lenBuf = WE_FTM_MAX_STR_LEN; - if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) + if(pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Ftm has not started. Please start the ftm. ", __func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ftm has not started. Please start the ftm. ",__func__); return VOS_STATUS_E_FAILURE; } - vos_mem_set(pMsgBuf, sizeof(tPttMsgbuffer), 0); + pMsgBuf = (tPttMsgbuffer *)vos_mem_malloc(sizeof(tPttMsgbuffer)); + if(pMsgBuf == NULL) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:pMsgBuf is NULL",__func__); + return VOS_STATUS_E_NOMEM; + } init_completion(&pHddCtx->ftm.ftm_comp_var); pMsgBuf->msgId = PTT_MSG_DBG_READ_REGISTER; pMsgBuf->msgBodyLength = sizeof(tMsgPttDbgReadRegister) + PTT_HEADER_LENGTH; @@ -3797,21 +3353,18 @@ VOS_STATUS wlan_ftm_priv_get_ftm_version(hdd_adapter_t *pAdapter,char *pftmVer) status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength); - if (status != VOS_STATUS_SUCCESS) + if(status != VOS_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:wlan_ftm_postmsg failed", __func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:wlan_ftm_postmsg failed",__func__); status = VOS_STATUS_E_FAILURE; goto done; } - wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, - msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); + wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); - if (pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) + if(pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Ptt response status failed", __func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ptt response status failed",__func__); status = VOS_STATUS_E_FAILURE; goto done; } @@ -3827,15 +3380,13 @@ VOS_STATUS wlan_ftm_priv_get_ftm_version(hdd_adapter_t *pAdapter,char *pftmVer) status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength); - if (status != VOS_STATUS_SUCCESS) + if(status != VOS_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:wlan_ftm_postmsg failed", __func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:wlan_ftm_postmsg failed",__func__); status = VOS_STATUS_E_FAILURE; goto done; } - wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, - msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); + wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); lenRes = snprintf(buf, lenBuf, "%s_",WLAN_CHIP_VERSION); @@ -3871,6 +3422,7 @@ VOS_STATUS wlan_ftm_priv_get_ftm_version(hdd_adapter_t *pAdapter,char *pftmVer) done: + vos_mem_free((v_VOID_t * )pMsgBuf); return status; @@ -3892,19 +3444,24 @@ done: static VOS_STATUS wlan_ftm_priv_get_txrate(hdd_adapter_t *pAdapter,char *pTxRate) { + tPttMsgbuffer *pMsgBuf; uPttMsgs *pMsgBody; VOS_STATUS status; v_U16_t rate_index,ii; hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx; - if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) + if(pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Ftm has not started. Please start the ftm. ", __func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ftm has not started. Please start the ftm. ",__func__); return VOS_STATUS_E_FAILURE; } - vos_mem_set(pMsgBuf, sizeof(tPttMsgbuffer), 0); + pMsgBuf = (tPttMsgbuffer *)vos_mem_malloc(sizeof(tPttMsgbuffer)); + if(pMsgBuf == NULL) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:pMsgBuf is NULL",__func__); + return VOS_STATUS_E_NOMEM; + } init_completion(&pHddCtx->ftm.ftm_comp_var); pMsgBuf->msgId = PTT_MSG_GET_TX_POWER_REPORT; pMsgBuf->msgBodyLength = sizeof(tMsgPttGetTxPowerReport) + PTT_HEADER_LENGTH; @@ -3913,25 +3470,22 @@ static VOS_STATUS wlan_ftm_priv_get_txrate(hdd_adapter_t *pAdapter,char *pTxRate status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength); - if (status != VOS_STATUS_SUCCESS) + if(status != VOS_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:wlan_ftm_postmsg failed", __func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:wlan_ftm_postmsg failed",__func__); status = VOS_STATUS_E_FAILURE; goto done; } - wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, - msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); + wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); - if (pMsgBuf->msgResponse == PTT_STATUS_SUCCESS) { + if(pMsgBuf->msgResponse == PTT_STATUS_SUCCESS) { rate_index = pMsgBody->GetTxPowerReport.rate; } else { /*Return the default rate*/ //rate_index = HAL_PHY_RATE_11A_6_MBPS; - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s: PTT_MSG_GET_TX_POWER_REPORT failed", __func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s: PTT_MSG_GET_TX_POWER_REPORT failed",__func__); status = VOS_STATUS_E_FAILURE; goto done; } @@ -3948,6 +3502,7 @@ static VOS_STATUS wlan_ftm_priv_get_txrate(hdd_adapter_t *pAdapter,char *pTxRate } strlcpy(pTxRate,rateName_rateIndex_tbl[ii].rate_str, WE_FTM_MAX_STR_LEN); done: + vos_mem_free((v_VOID_t * )pMsgBuf); return status; @@ -3969,17 +3524,22 @@ done: static VOS_STATUS wlan_ftm_priv_get_rx_pkt_count(hdd_adapter_t *pAdapter,v_U16_t *pRxPktCnt) { + tPttMsgbuffer *pMsgBuf; uPttMsgs *pMsgBody; VOS_STATUS status; hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx; - if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) + if(pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Ftm has not started. Please start the ftm. ", __func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ftm has not started. Please start the ftm. ",__func__); return VOS_STATUS_E_FAILURE; } - vos_mem_set(pMsgBuf, sizeof(tPttMsgbuffer), 0); + pMsgBuf = (tPttMsgbuffer *)vos_mem_malloc(sizeof(tPttMsgbuffer)); + if(pMsgBuf == NULL) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:pMsgBuf is NULL",__func__); + return VOS_STATUS_E_NOMEM; + } init_completion(&pHddCtx->ftm.ftm_comp_var); pMsgBuf->msgId = PTT_MSG_GET_RX_PKT_COUNTS; pMsgBuf->msgBodyLength = sizeof(tMsgPttGetRxPktCounts) + PTT_HEADER_LENGTH; @@ -3988,25 +3548,23 @@ static VOS_STATUS wlan_ftm_priv_get_rx_pkt_count(hdd_adapter_t *pAdapter,v_U16_t status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength); - if (status != VOS_STATUS_SUCCESS) + if(status != VOS_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:wlan_ftm_postmsg failed", __func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:wlan_ftm_postmsg failed",__func__); status = VOS_STATUS_E_FAILURE; goto done; } - wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, - msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); + wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); - if (pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) + if(pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Ptt response status failed", __func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ptt response status failed",__func__); status = VOS_STATUS_E_FAILURE; goto done; } *pRxPktCnt = pMsgBody->GetRxPktCounts.counters.totalRxPackets; done: + vos_mem_free((v_VOID_t * )pMsgBuf); return status; } @@ -4027,18 +3585,23 @@ done: static VOS_STATUS wlan_ftm_priv_get_rx_rssi(hdd_adapter_t *pAdapter,char *buf) { + tPttMsgbuffer *pMsgBuf; uPttMsgs *pMsgBody; VOS_STATUS status; hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx; int ret; - - if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) + + if(pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Ftm has not started. Please start the ftm. ", __func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ftm has not started. Please start the ftm. ",__func__); return VOS_STATUS_E_FAILURE; } - vos_mem_set(pMsgBuf, sizeof(tPttMsgbuffer), 0); + pMsgBuf = (tPttMsgbuffer *)vos_mem_malloc(sizeof(tPttMsgbuffer)); + if(pMsgBuf == NULL) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:pMsgBuf is NULL",__func__); + return VOS_STATUS_E_NOMEM; + } init_completion(&pHddCtx->ftm.ftm_comp_var); pMsgBuf->msgId = PTT_MSG_GET_RX_RSSI; pMsgBuf->msgBodyLength = sizeof(tMsgPttGetRxRssi) + PTT_HEADER_LENGTH; @@ -4047,20 +3610,17 @@ static VOS_STATUS wlan_ftm_priv_get_rx_rssi(hdd_adapter_t *pAdapter,char *buf) status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength); - if (status != VOS_STATUS_SUCCESS) + if(status != VOS_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:wlan_ftm_postmsg failed", __func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:wlan_ftm_postmsg failed",__func__); status = VOS_STATUS_E_FAILURE; goto done; } - wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, - msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); + wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); - if (pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) + if(pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Ptt response status failed", __func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ptt response status failed",__func__); status = VOS_STATUS_E_FAILURE; goto done; } @@ -4073,8 +3633,9 @@ static VOS_STATUS wlan_ftm_priv_get_rx_rssi(hdd_adapter_t *pAdapter,char *buf) { status = VOS_STATUS_E_FAILURE; } - + done: + vos_mem_free((v_VOID_t * )pMsgBuf); return status; } @@ -4096,7 +3657,12 @@ done: static VOS_STATUS wlan_ftm_priv_get_mac_address(hdd_adapter_t *pAdapter,char *buf) { v_BOOL_t itemIsValid = VOS_FALSE; - v_U8_t macAddr[VOS_MAC_ADDRESS_LEN] = {0, 0x0a, 0xf5, 4,5, 6}; + + /* Motorola, BEGIN IKLOCSEN-984 Return all MACs */ + v_MACADDR_t macAddr[VOS_MAX_CONCURRENCY_PERSONA]; + v_U8_t macLoop; + /* Motorola, END IKLOCSEN-984 Return all MACs */ + int ret; hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx; @@ -4111,28 +3677,37 @@ static VOS_STATUS wlan_ftm_priv_get_mac_address(hdd_adapter_t *pAdapter,char *bu { if (itemIsValid == VOS_TRUE) { - vos_nv_readMacAddress(macAddr); + /* Motorola, BEGIN IKLOCSEN-984 Return all MACs */ + vos_nv_readMultiMacAddress((v_U8_t *)&macAddr[0].bytes[0], VOS_MAX_CONCURRENCY_PERSONA); - ret = snprintf(buf, WE_FTM_MAX_STR_LEN, - "%02x:%02x:%02x:%02x:%02x:%02x", - MAC_ADDR_ARRAY(macAddr)); - if( ret < 0 || ret >= WE_FTM_MAX_STR_LEN ) + for(macLoop = 0; macLoop < VOS_MAX_CONCURRENCY_PERSONA; macLoop++) { - return VOS_STATUS_E_FAILURE; + ret = snprintf(buf, WE_FTM_MAX_STR_LEN, + "%02x:%02x:%02x:%02x:%02x:%02x", + MAC_ADDR_ARRAY(&macAddr[macLoop].bytes[0])); + + if( ret < 0 || ret >= WE_FTM_MAX_STR_LEN ) + { + return VOS_STATUS_E_FAILURE; + } } - } + } } else { - /*Return Hard coded mac address*/ - ret = snprintf(buf, WE_FTM_MAX_STR_LEN, - "%02x:%02x:%02x:%02x:%02x:%02x", - MAC_ADDR_ARRAY(macAddr)); - - if( ret < 0 || ret >= WE_FTM_MAX_STR_LEN ) + /* Return Hard coded mac address */ + for(macLoop = 0; macLoop < VOS_MAX_CONCURRENCY_PERSONA; macLoop++) { - return VOS_STATUS_E_FAILURE; + ret = snprintf(buf, WE_FTM_MAX_STR_LEN, + "%02x:%02x:%02x:%02x:%02x:%02x", + MAC_ADDR_ARRAY(&macAddr[macLoop].bytes[0])); + + if( ret < 0 || ret >= WE_FTM_MAX_STR_LEN ) + { + return VOS_STATUS_E_FAILURE; + } } + /* Motorola, END IKLOCSEN-984 Return all MACs */ } return VOS_STATUS_SUCCESS; } @@ -4154,61 +3729,95 @@ static VOS_STATUS wlan_ftm_priv_get_mac_address(hdd_adapter_t *pAdapter,char *bu static VOS_STATUS wlan_ftm_priv_set_mac_address(hdd_adapter_t *pAdapter,char *buf) { + tPttMsgbuffer *pMsgBuf; uPttMsgs *pMsgBody; VOS_STATUS status; - int macAddr[VOS_MAC_ADDRESS_LEN]; + int macAddr[VOS_MAC_ADDRESS_LEN * VOS_MAX_CONCURRENCY_PERSONA]; // Motorola, IKLOCSEN-984 Set all MACs v_U8_t *pMacAddress; v_U8_t ii; + v_U8_t macLoop; // Motorola, IKLOCSEN-984 Set all MACs + hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx; - if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) + if(pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Ftm has not started. Please start the ftm. ", __func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ftm has not started. Please start the ftm. ",__func__); return VOS_STATUS_E_FAILURE; } - vos_mem_set(pMsgBuf, sizeof(tPttMsgbuffer), 0); + pMsgBuf = (tPttMsgbuffer *)vos_mem_malloc(sizeof(tPttMsgbuffer)); + if(pMsgBuf == NULL) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:pMsgBuf is NULL",__func__); + return VOS_STATUS_E_NOMEM; + } +#if 0 // Motorola, IKLOCSEN-984 Set all MACs init_completion(&pHddCtx->ftm.ftm_comp_var); +#endif // Motorola, IKLOCSEN-984 Set all MACs pMsgBuf->msgId = PTT_MSG_SET_NV_FIELD; pMsgBuf->msgBodyLength = sizeof(tMsgPttSetNvField) + PTT_HEADER_LENGTH; pMsgBody = &pMsgBuf->msgBody; pMsgBody->SetNvField.nvField = NV_COMMON_MAC_ADDR; - /*We get the mac address in string format "XX:XX:XX:XX:XX:XX" convert to hex*/ - if (6 != sscanf(buf,"%02x:%02x:%02x:%02x:%02x:%02x",&macAddr[0],(int*)&macAddr[1],(int*)&macAddr[2],(int*)&macAddr[3],(int*)&macAddr[4],(int*)&macAddr[5])) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "Invalid MacAddress Input %s", buf); - return VOS_STATUS_E_FAILURE; - } - - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "MacAddress = %02x:%02x:%02x:%02x:%02x:%02x",MAC_ADDR_ARRAY(macAddr)); - + /* Motorola, BEGIN IKLOCSEN-984 Set all MACS */ + for(macLoop = 0; macLoop < VOS_MAX_CONCURRENCY_PERSONA; macLoop++) { + /*We get the mac address in string format "XX:XX:XX:XX:XX:XX" convert to hex*/ + sscanf(buf,"%02x:%02x:%02x:%02x:%02x:%02x",\ + (int*)&macAddr[macLoop * VOS_MAX_CONCURRENCY_PERSONA + 0],\ + (int*)&macAddr[macLoop * VOS_MAX_CONCURRENCY_PERSONA + 1],\ + (int*)&macAddr[macLoop * VOS_MAX_CONCURRENCY_PERSONA + 2],\ + (int*)&macAddr[macLoop * VOS_MAX_CONCURRENCY_PERSONA + 3],\ + (int*)&macAddr[macLoop * VOS_MAX_CONCURRENCY_PERSONA + 4],\ + (int*)&macAddr[macLoop * VOS_MAX_CONCURRENCY_PERSONA + 5]); + + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH,\ + "MacAddress[%d] = %02x:%02x:%02x:%02x:%02x:%02x",\ + macLoop,\ + MAC_ADDR_ARRAY(&macAddr[macLoop * VOS_MAX_CONCURRENCY_PERSONA])); + + printk(KERN_INFO "MacAddress[%d] = %02x:%02x:%02x:%02x:%02x:%02x\n",\ + macLoop,\ + MAC_ADDR_ARRAY(&macAddr[macLoop * VOS_MAX_CONCURRENCY_PERSONA])); + + pMacAddress = &pMsgBody->SetNvField.fieldData.macAddr.macAddr1[macLoop * VOS_MAX_CONCURRENCY_PERSONA]; + + for(ii = 0; ii < VOS_MAC_ADDRESS_LEN; ii++) { + pMacAddress[macLoop * VOS_MAX_CONCURRENCY_PERSONA + ii] =\ + (v_U8_t)macAddr[macLoop * VOS_MAX_CONCURRENCY_PERSONA + ii]; + } - pMacAddress = &pMsgBody->SetNvField.fieldData.macAddr[0]; + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH,\ + "pMacAddress[%d] = %02x:%02x:%02x:%02x:%02x:%02x",\ + macLoop,\ + MAC_ADDR_ARRAY(&pMacAddress[macLoop * VOS_MAX_CONCURRENCY_PERSONA])); - for(ii = 0; ii < VOS_MAC_ADDRESS_LEN; ii++) - pMacAddress[ii] = (v_U8_t)macAddr[ii]; + printk(KERN_INFO "pMacAddress[%d] = %02x:%02x:%02x:%02x:%02x:%02x\n",\ + macLoop,\ + MAC_ADDR_ARRAY(&pMacAddress[macLoop * VOS_MAX_CONCURRENCY_PERSONA])); + } + if (wlan_hdd_process_ftm_host_cmd(pHddCtx, pMsgBuf) < 0) + { + printk(KERN_INFO "wlan_hdd_process_ftm_host_cmd PTT_MSG_SET_NV_FIELD failed\n"); + status = VOS_STATUS_E_FAILURE; + goto done; + } +#if 0 + /* Motorola, END IKLOCSEN-984 Set all MACS */ - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "pMacAddress = %02x:%02x:%02x:%02x:%02x:%02x",MAC_ADDR_ARRAY(pMacAddress)); status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength); - if (status != VOS_STATUS_SUCCESS) + if(status != VOS_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:wlan_ftm_postmsg failed!!", __func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:wlan_ftm_postmsg failed!!",__func__); status = VOS_STATUS_E_FAILURE; goto done; } - wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, - msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); + wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); - if (pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) + if(pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Ptt response status failed", __func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ptt response status failed",__func__); status = VOS_STATUS_E_FAILURE; goto done; } @@ -4216,6 +3825,7 @@ static VOS_STATUS wlan_ftm_priv_set_mac_address(hdd_adapter_t *pAdapter,char *bu VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "NV_COMMON_MAC_ADDR Success!!!\n"); init_completion(&pHddCtx->ftm.ftm_comp_var); +#endif // Motorola, IKLOCSEN-984 Set all MACs memset( pMsgBuf,0,sizeof(tPttMsgbuffer)); pMsgBuf->msgId = PTT_MSG_STORE_NV_TABLE; @@ -4225,19 +3835,30 @@ static VOS_STATUS wlan_ftm_priv_set_mac_address(hdd_adapter_t *pAdapter,char *bu pMsgBody->StoreNvTable.nvTable = NV_FIELDS_IMAGE; + /* Motorola, BEGIN IKLOCSEN-984 Set all MACs */ + if (wlan_hdd_process_ftm_host_cmd(pHddCtx, pMsgBuf) < 0) + { + printk(KERN_INFO "wlan_hdd_process_ftm_host_cmd PTT_MSG_STORE_NV_TABLE failed\n"); + status = VOS_STATUS_E_FAILURE; + goto done; + } + +#if 0 + /* Motorola, END IKLOCSEN-984 Set all MACs */ + status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength); - if (status != VOS_STATUS_SUCCESS) + if(status != VOS_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:wlan_ftm_postmsg failed!!!!", __func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:wlan_ftm_postmsg failed!!!!",__func__); status = VOS_STATUS_E_FAILURE; goto done; } - wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, - msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); + wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); +#endif // Motorola, IKLOCSEN-984 Set all MACs done: + vos_mem_free((v_VOID_t * )pMsgBuf); return VOS_STATUS_SUCCESS; } @@ -4246,57 +3867,26 @@ done: static int iw_ftm_setchar_getnone(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra) { - int ret,sub_cmd; - unsigned int length; - char *pointer,*param; + int sub_cmd = wrqu->data.flags; + int ret = 0; /* success */ VOS_STATUS status; - hdd_adapter_t *pAdapter; - - ret =0; - pointer = wrqu->data.pointer; - length = wrqu->data.length; - sub_cmd = wrqu->data.flags; - pAdapter = (hdd_adapter_t *)netdev_priv(dev); - - /* we cannot use iotctl_private_iw_point in kernel to allocate memory - * to store data from userspace as IW_SETCHAR_GETNONE is defined as - * odd number which assigns set_args to zero.we assisgn memory using - * kzalloc here to hold userspace data - */ - param = kzalloc(length + 1, GFP_KERNEL); - if (!param) - return -EINVAL; - - if (copy_from_user(param, pointer, length)) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s:Failed to get user data %s", __func__, param); - - ret = -EINVAL; - goto OUT; - } - - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: Received length %d", __func__, length); + hdd_adapter_t *pAdapter = (netdev_priv(dev)); - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: Received parameters %s", __func__,param); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "%s: Received length %d", __func__, wrqu->data.length); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "%s: Received data %s", __func__, (char*)wrqu->data.pointer); switch(sub_cmd) { case WE_SET_MAC_ADDRESS: { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "SET MAC ADDRESS\n"); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "SET MAC ADDRESS\n"); - status = wlan_ftm_priv_set_mac_address(pAdapter,param); + status = wlan_ftm_priv_set_mac_address(pAdapter,(char*)wrqu->data.pointer); if(status != VOS_STATUS_SUCCESS) { - hddLog(VOS_TRACE_LEVEL_FATAL, - "wlan_ftm_priv_set_mac_address Failed =%d\n",status); - + hddLog(VOS_TRACE_LEVEL_FATAL,"wlan_ftm_priv_set_mac_address Failed =%d\n",status); ret = -EINVAL; } @@ -4304,14 +3894,12 @@ static int iw_ftm_setchar_getnone(struct net_device *dev, struct iw_request_info break; case WE_SET_TX_RATE: { - status = wlan_ftm_priv_set_txrate(pAdapter,param); + status = wlan_ftm_priv_set_txrate(pAdapter,(char*)wrqu->data.pointer); if(status != VOS_STATUS_SUCCESS) { - hddLog(VOS_TRACE_LEVEL_FATAL, - "wlan_ftm_priv_set_txrate Failed =%d\n",status); - - ret = -EINVAL; + hddLog(VOS_TRACE_LEVEL_FATAL,"wlan_ftm_priv_set_txrate Failed =%d\n",status); + ret = -EINVAL; } break; @@ -4323,9 +3911,6 @@ static int iw_ftm_setchar_getnone(struct net_device *dev, struct iw_request_info break; } } - -OUT: - kfree(param); return ret; } @@ -4450,40 +4035,6 @@ static int iw_ftm_setint_getnone(struct net_device *dev, struct iw_request_info break; } - case WE_SET_PWR_CNTL_MODE: - { - status = wlan_ftm_priv_set_pwr_cntl_mode(pAdapter, set_value); - if (status != VOS_STATUS_SUCCESS) - { - hddLog(VOS_TRACE_LEVEL_FATAL, "set_pwr_cntl_mode failed = %d", - status); - ret = -EINVAL; - } - break; - } - - case WE_ENABLE_DPD: - { - status = wlan_ftm_priv_enable_dpd(pAdapter, set_value); - if (status != VOS_STATUS_SUCCESS) - { - hddLog(VOS_TRACE_LEVEL_FATAL, "enable_dpd failed = %d", status); - ret = -EINVAL; - } - break; - } - - case WE_SET_CB: - { - status = wlan_ftm_priv_set_cb(pAdapter, set_value); - if (status != VOS_STATUS_SUCCESS) - { - hddLog(VOS_TRACE_LEVEL_FATAL, "set_cb failed = %d", status); - ret = -EINVAL; - } - break; - } - default: { hddLog(LOGE, "Invalid IOCTL setvalue command %d value %d \n", @@ -4631,7 +4182,7 @@ static int iw_ftm_get_char_setnone(struct net_device *dev, struct iw_request_inf return 0; } -VOS_STATUS wlan_write_to_efs (v_U8_t *pData, v_U16_t data_len) +VOS_STATUS wlan_write_to_efs (v_U8_t *pData, v_U16_t data_len, v_U16_t table) { #if defined(MSM_PLATFORM) tAniHdr *wmsg = NULL; @@ -4663,6 +4214,15 @@ VOS_STATUS wlan_write_to_efs (v_U8_t *pData, v_U16_t data_len) pBuf += sizeof(v_U32_t); + if(table == 1) + { + pData[7] = 8; + } + else if(table == 2) + { + pData[7] = 9; + } + memcpy(pBuf, pData,data_len); if(pHddCtx->ftm.cmd_iwpriv == TRUE) { @@ -4714,7 +4274,7 @@ static int iw_ftm_setnone_getnone(struct net_device *dev, struct iw_request_info pTempBuf += sizeof(v_U32_t); memcpy(pTempBuf,&nvDefaults,sizeof(sHalNv)); - wlan_write_to_efs(pu8buf,size); + wlan_write_to_efs(pu8buf,size,0); vos_mem_free(pu8buf); } @@ -4797,21 +4357,6 @@ static const struct iw_priv_args we_ftm_private_args[] = { 0, "ena_chain" }, - { WE_SET_PWR_CNTL_MODE, - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, - 0, - "pwr_cntl_mode" }, - - { WE_ENABLE_DPD, - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, - 0, - "ena_dpd" }, - - { WE_SET_CB, - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, - 0, - "set_cb" }, - /* handlers for main ioctl */ { WLAN_FTM_PRIV_SET_NONE_GET_INT, 0, @@ -4945,7 +4490,6 @@ VOS_STATUS WLANFTM_McProcessMsg (v_VOID_t *message) if (pHddCtx->ftm.cmd_iwpriv == TRUE) { - memcpy((char*)pMsgBuf, (char*)message, pFtmMsgRsp->msgBodyLength); complete(&pHddCtx->ftm.ftm_comp_var); } else { diff --git a/drivers/staging/prima/CORE/HDD/src/wlan_hdd_hostapd.c b/drivers/staging/prima/CORE/HDD/src/wlan_hdd_hostapd.c index f1b56c85de5..d60b406e7a9 100644 --- a/drivers/staging/prima/CORE/HDD/src/wlan_hdd_hostapd.c +++ b/drivers/staging/prima/CORE/HDD/src/wlan_hdd_hostapd.c @@ -97,13 +97,23 @@ #define IS_UP_AUTO(_ic) \ (IS_UP((_ic)->ic_dev) && (_ic)->ic_roaming == IEEE80211_ROAMING_AUTO) #define WE_WLAN_VERSION 1 +#define STATS_CONTEXT_MAGIC 0x53544154 #define WE_GET_STA_INFO_SIZE 30 /* WEXT limition: MAX allowed buf len for any * * IW_PRIV_TYPE_CHAR is 2Kbytes * */ #define WE_SAP_MAX_STA_INFO 0x7FF -#define SAP_24GHZ_CH_COUNT (14) +struct statsContext +{ + struct completion completion; + hdd_adapter_t *pAdapter; + unsigned int magic; +}; +#define SAP_24GHZ_CH_COUNT (14) + +#define MIN_MTU_SIZE 256 // Motorola, IKHSS7-19443, A21623, Hotspot MTU changes + /*--------------------------------------------------------------------------- * Function definitions *-------------------------------------------------------------------------*/ @@ -201,6 +211,12 @@ int hdd_hostapd_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) } int hdd_hostapd_change_mtu(struct net_device *dev, int new_mtu) { +// Motorola, IKHSS7-19443, A21623, Hotspot MTU changes + if ( (new_mtu < MIN_MTU_SIZE) || (new_mtu > IEEE80211_MAX_DATA_LEN - 26) ) + return EINVAL; + + dev->mtu = new_mtu; +// End IKHSS7-19443 return 0; } @@ -231,19 +247,7 @@ int hdd_hostapd_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) goto exit; } - if (priv_data.total_len <= 0 || - priv_data.total_len > HOSTAPD_IOCTL_COMMAND_STRLEN_MAX) - { - /* below we allocate one more byte for command buffer. - * To avoid addition overflow total_len should be - * smaller than INT_MAX. */ - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s: integer out of range\n", __func__); - ret = -EFAULT; - goto exit; - } - - command = kmalloc((priv_data.total_len + 1), GFP_KERNEL); + command = kmalloc(priv_data.total_len, GFP_KERNEL); if (!command) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, @@ -258,11 +262,9 @@ int hdd_hostapd_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) goto exit; } - command[priv_data.total_len] = '\0'; - if ((SIOCDEVPRIVATE + 1) == cmd) { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "***HOSTAPD*** : Received %s cmd from Wi-Fi GUI***", command); if(strncmp(command, "P2P_SET_NOA", 11) == 0 ) @@ -680,7 +682,7 @@ VOS_STATUS hdd_hostapd_SAPEventCB( tpSap_Event pSapEvent, v_PVOID_t usrDataForCa // Lets do abort scan to ensure smooth authentication for client if ((pScanInfo != NULL) && pScanInfo->mScanPending) { - hdd_abort_mac_scan(pHddCtx, eCSR_SCAN_ABORT_DEFAULT); + hdd_abort_mac_scan(pHddCtx); } break; @@ -769,7 +771,6 @@ VOS_STATUS hdd_hostapd_SAPEventCB( tpSap_Event pSapEvent, v_PVOID_t usrDataForCa } } vos_mem_free(pSapEvent->sapevt.sapAssocStaListEvent.pAssocStas);// Release caller allocated memory here - pSapEvent->sapevt.sapAssocStaListEvent.pAssocStas = NULL; return VOS_STATUS_SUCCESS; case eSAP_INDICATE_MGMT_FRAME: hdd_indicateMgmtFrame( pHostapdAdapter, @@ -803,15 +804,14 @@ VOS_STATUS hdd_hostapd_SAPEventCB( tpSap_Event pSapEvent, v_PVOID_t usrDataForCa break; case eSAP_MAX_ASSOC_EXCEEDED: - snprintf(maxAssocExceededEvent, IW_CUSTOM_MAX, "Peer %02x:%02x:%02x:%02x:%02x:%02x denied" - " assoc due to Maximum Mobile Hotspot connections reached. Please disconnect" - " one or more devices to enable the new device connection", - pSapEvent->sapevt.sapMaxAssocExceeded.macaddr.bytes[0], - pSapEvent->sapevt.sapMaxAssocExceeded.macaddr.bytes[1], - pSapEvent->sapevt.sapMaxAssocExceeded.macaddr.bytes[2], - pSapEvent->sapevt.sapMaxAssocExceeded.macaddr.bytes[3], - pSapEvent->sapevt.sapMaxAssocExceeded.macaddr.bytes[4], - pSapEvent->sapevt.sapMaxAssocExceeded.macaddr.bytes[5]); + /* Beging Motorola IKHSS7-18970 fpx478, 30/03/2012, nottification to MHS */ + /* Redefining the Custom Message + * IW_CUSTOM_MAX will inform when STA is denied when assoc due to Maximum Mobile + * Hotspot connections reached. Please disconnect one or more devices to enable + * the new device connection, and we dont require the MAC address of the STA + */ + snprintf(maxAssocExceededEvent, IW_CUSTOM_MAX, "eSAP_MAX_ASSOC_EXCEEDED"); + /* END IKHSS7-18970 */ we_event = IWEVCUSTOM; /* Discovered a new node (AP mode). */ wrqu.data.pointer = maxAssocExceededEvent; wrqu.data.length = strlen(maxAssocExceededEvent); @@ -994,37 +994,13 @@ static iw_softap_setparam(struct net_device *dev, union iwreq_data *wrqu, char *extra) { hdd_adapter_t *pHostapdAdapter = (netdev_priv(dev)); - tHalHandle hHal; - int *value = (int *)extra; + tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pHostapdAdapter); + int *value = (int *)(wrqu->data.pointer); int sub_cmd = value[0]; int set_value = value[1]; eHalStatus status; int ret = 0; /* success */ - v_CONTEXT_t pVosContext; - - if (!pHostapdAdapter || !pHostapdAdapter->pHddCtx) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: either hostapd Adapter is null or HDD ctx is null", - __func__); - return -1; - } - - hHal = WLAN_HDD_GET_HAL_CTX(pHostapdAdapter); - if (!hHal) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: Hal ctx is null", __func__); - return -1; - } - - pVosContext = (WLAN_HDD_GET_CTX(pHostapdAdapter))->pvosContext; - if (!pVosContext) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: Vos ctx is null", __func__); - return -1; - } + v_CONTEXT_t pVosContext = (WLAN_HDD_GET_CTX(pHostapdAdapter))->pvosContext; switch(sub_cmd) { @@ -1192,7 +1168,7 @@ int iw_softap_modify_acl(struct net_device *dev, struct iw_request_info *info, { hdd_adapter_t *pHostapdAdapter = (netdev_priv(dev)); v_CONTEXT_t pVosContext = (WLAN_HDD_GET_CTX(pHostapdAdapter))->pvosContext; - v_BYTE_t *value = (v_BYTE_t*)extra; + char *value = (char *)(wrqu->data.pointer); v_U8_t pPeerStaMac[VOS_MAC_ADDR_SIZE]; int listType, cmd, i; int ret = 0; /* success */ @@ -1391,67 +1367,35 @@ static iw_softap_getassoc_stamacaddr(struct net_device *dev, union iwreq_data *wrqu, char *extra) { hdd_adapter_t *pHostapdAdapter = (netdev_priv(dev)); + unsigned char *pmaclist; hdd_station_info_t *pStaInfo = pHostapdAdapter->aStaInfo; - char *buf; - int cnt = 0; - int left; - int ret = 0; - /* maclist_index must be u32 to match userspace */ - u32 maclist_index; - - /* - * NOTE WELL: this is a "get" ioctl but it uses an even ioctl - * number, and even numbered iocts are supposed to have "set" - * semantics. Hence the wireless extensions support in the kernel - * won't correctly copy the result to userspace, so the ioctl - * handler itself must copy the data. Output format is 32-bit - * record length, followed by 0 or more 6-byte STA MAC addresses. - * - * Further note that due to the incorrect semantics, the "iwpriv" - * userspace application is unable to correctly invoke this API, - * hence it is not registered in the hostapd_private_args. This - * API can only be invoked by directly invoking the ioctl() system - * call. - */ + int cnt = 0, len; - /* make sure userspace allocated a reasonable buffer size */ - if (wrqu->data.length < sizeof(maclist_index)) { - hddLog(LOG1, "%s: invalid userspace buffer", __func__); - return -EINVAL; - } - - /* allocate local buffer to build the response */ - buf = kmalloc(wrqu->data.length, GFP_KERNEL); - if (!buf) { - hddLog(LOG1, "%s: failed to allocate response buffer", __func__); - return -ENOMEM; - } - /* start indexing beyond where the record count will be written */ - maclist_index = sizeof(maclist_index); - left = wrqu->data.length - maclist_index; + pmaclist = wrqu->data.pointer + sizeof(unsigned long int); + len = wrqu->data.length; - spin_lock_bh(&pHostapdAdapter->staInfo_lock); - while ((cnt < WLAN_MAX_STA_COUNT) && (left >= VOS_MAC_ADDR_SIZE)) { - if ((pStaInfo[cnt].isUsed) && - (!IS_BROADCAST_MAC(pStaInfo[cnt].macAddrSTA.bytes))) { - memcpy(&buf[maclist_index], &(pStaInfo[cnt].macAddrSTA), - VOS_MAC_ADDR_SIZE); - maclist_index += VOS_MAC_ADDR_SIZE; - left -= VOS_MAC_ADDR_SIZE; + spin_lock_bh( &pHostapdAdapter->staInfo_lock ); + while((cnt < WLAN_MAX_STA_COUNT) && (len > (sizeof(v_MACADDR_t)+1))) { + if (TRUE == pStaInfo[cnt].isUsed) { + + if(!IS_BROADCAST_MAC(pStaInfo[cnt].macAddrSTA.bytes)) { + memcpy((void *)pmaclist, (void *)&(pStaInfo[cnt].macAddrSTA), sizeof(v_MACADDR_t)); + pmaclist += sizeof(v_MACADDR_t); + len -= sizeof(v_MACADDR_t); + } } cnt++; - } - spin_unlock_bh(&pHostapdAdapter->staInfo_lock); + } + spin_unlock_bh( &pHostapdAdapter->staInfo_lock ); - *((u32 *)buf) = maclist_index; - wrqu->data.length = maclist_index; - if (copy_to_user(wrqu->data.pointer, buf, maclist_index)) { - hddLog(LOG1, "%s: failed to copy response to user buffer", __func__); - ret = -EFAULT; - } - kfree(buf); - return ret; + *pmaclist = '\0'; + + wrqu->data.length -= len; + + *(unsigned long int *)(wrqu->data.pointer) = wrqu->data.length; + + return 0; } /* Usage: @@ -1479,7 +1423,14 @@ static iw_softap_disassoc_sta(struct net_device *dev, /* iwpriv tool or framework calls this ioctl with * data passed in extra (less than 16 octets); */ - peerMacAddr = (v_U8_t *)(extra); +/* + if ((v_U8_t*)wrqu == (v_U8_t*)extra) + peerMacAddr = (v_U8_t *)(extra); + else + peerMacAddr = (v_U8_t *)(wrqu->data.pointer); +*/ + + peerMacAddr = (v_U8_t *)(wrqu->data.pointer); hddLog(LOG1, "data %02x:%02x:%02x:%02x:%02x:%02x", peerMacAddr[0], peerMacAddr[1], peerMacAddr[2], @@ -1500,36 +1451,20 @@ static iw_softap_ap_stats(struct net_device *dev, int len = wrqu->data.length; pstatbuf = wrqu->data.pointer; - memset(&statBuffer, 0, sizeof(statBuffer)); - WLANSAP_GetStatistics((WLAN_HDD_GET_CTX(pHostapdAdapter))->pvosContext, - &statBuffer, (v_BOOL_t)wrqu->data.flags); + WLANSAP_GetStatistics((WLAN_HDD_GET_CTX(pHostapdAdapter))->pvosContext, &statBuffer, (v_BOOL_t)wrqu->data.flags); + + len = snprintf(pstatbuf, len, + "RUF=%d RMF=%d RBF=%d " + "RUB=%d RMB=%d RBB=%d " + "TUF=%d TMF=%d TBF=%d " + "TUB=%d TMB=%d TBB=%d", + (int)statBuffer.rxUCFcnt, (int)statBuffer.rxMCFcnt, (int)statBuffer.rxBCFcnt, + (int)statBuffer.rxUCBcnt, (int)statBuffer.rxMCBcnt, (int)statBuffer.rxBCBcnt, + (int)statBuffer.txUCFcnt, (int)statBuffer.txMCFcnt, (int)statBuffer.txBCFcnt, + (int)statBuffer.txUCBcnt, (int)statBuffer.txMCBcnt, (int)statBuffer.txBCBcnt + ); - pstatbuf = kmalloc(wrqu->data.length, GFP_KERNEL); - if(NULL == pstatbuf) { - hddLog(LOG1, "unable to allocate memory"); - return -ENOMEM; - } - len = scnprintf(pstatbuf, wrqu->data.length, - "RUF=%d RMF=%d RBF=%d " - "RUB=%d RMB=%d RBB=%d " - "TUF=%d TMF=%d TBF=%d " - "TUB=%d TMB=%d TBB=%d", - (int)statBuffer.rxUCFcnt, (int)statBuffer.rxMCFcnt, - (int)statBuffer.rxBCFcnt, (int)statBuffer.rxUCBcnt, - (int)statBuffer.rxMCBcnt, (int)statBuffer.rxBCBcnt, - (int)statBuffer.txUCFcnt, (int)statBuffer.txMCFcnt, - (int)statBuffer.txBCFcnt, (int)statBuffer.txUCBcnt, - (int)statBuffer.txMCBcnt, (int)statBuffer.txBCBcnt); - - if (len > wrqu->data.length || - copy_to_user((void *)wrqu->data.pointer, (void *)pstatbuf, len)) - { - hddLog(LOG1, "%s: failed to copy data to user buffer", __func__); - kfree(pstatbuf); - return -EFAULT; - } wrqu->data.length -= len; - kfree(pstatbuf); return 0; } @@ -1803,20 +1738,23 @@ int iw_softap_get_channel_list(struct net_device *dev, tpChannelListInfo channel_list = (tpChannelListInfo) extra; eCsrBand curBand = eCSR_BAND_ALL; + hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pHostapdAdapter); + if (eHAL_STATUS_SUCCESS != sme_GetFreqBand(hHal, &curBand)) { hddLog(LOGE,FL("not able get the current frequency band\n")); - return -EIO; + //return -EIO; + curBand = eCSR_BAND_ALL; } wrqu->data.length = sizeof(tChannelListInfo); ENTER(); - if (eCSR_BAND_24 == curBand) + if (eCSR_BAND_24 == curBand || eCSR_BAND_24 == pHddCtx->cfg_ini->nBandCapability) { bandStartChannel = RF_CHAN_1; bandEndChannel = RF_CHAN_14; } - else if (eCSR_BAND_5G == curBand) + else if (eCSR_BAND_5G == curBand || eCSR_BAND_5G == pHddCtx->cfg_ini->nBandCapability) { bandStartChannel = RF_CHAN_36; bandEndChannel = RF_CHAN_165; @@ -1871,6 +1809,7 @@ int iw_softap_get_channel_list(struct net_device *dev, } channel_list->num_channels = num_channels; + EXIT(); return 0; @@ -1892,15 +1831,8 @@ int iw_get_genie(struct net_device *dev, status = WLANSap_getstationIE_information(pVosContext, &length, genIeBytes); - length = VOS_MIN((u_int16_t) length, DOT11F_IE_RSN_MAX_LEN); - if (wrqu->data.length < length || - copy_to_user(wrqu->data.pointer, - (v_VOID_t*)genIeBytes, length)) - { - hddLog(LOG1, "%s: failed to copy data to user buffer", __func__); - return -EFAULT; - } - wrqu->data.length = length; + wrqu->data.length = VOS_MIN((u_int16_t) length, DOT11F_IE_RSN_MAX_LEN); + vos_mem_copy( wrqu->data.pointer, (v_VOID_t*)genIeBytes, wrqu->data.length); hddLog(LOG1,FL(" RSN IE of %d bytes returned\n"), wrqu->data.length ); @@ -1914,30 +1846,18 @@ int iw_get_WPSPBCProbeReqIEs(struct net_device *dev, union iwreq_data *wrqu, char *extra) { hdd_adapter_t *pHostapdAdapter = (netdev_priv(dev)); - sQcSapreq_WPSPBCProbeReqIES_t WPSPBCProbeReqIEs; + sQcSapreq_WPSPBCProbeReqIES_t *pWPSPBCProbeReqIEs; hdd_ap_ctx_t *pHddApCtx = WLAN_HDD_GET_AP_CTX_PTR(pHostapdAdapter); ENTER(); - + hddLog(LOG1,FL("get_WPSPBCProbeReqIEs ioctl\n")); - memset((void*)&WPSPBCProbeReqIEs, 0, sizeof(WPSPBCProbeReqIEs)); - - WPSPBCProbeReqIEs.probeReqIELen = pHddApCtx->WPSPBCProbeReq.probeReqIELen; - vos_mem_copy(&WPSPBCProbeReqIEs.probeReqIE, - pHddApCtx->WPSPBCProbeReq.probeReqIE, - WPSPBCProbeReqIEs.probeReqIELen); - vos_mem_copy(&WPSPBCProbeReqIEs.macaddr, - pHddApCtx->WPSPBCProbeReq.peerMacAddr, - sizeof(v_MACADDR_t)); - if (copy_to_user(wrqu->data.pointer, - (void *)&WPSPBCProbeReqIEs, - sizeof(WPSPBCProbeReqIEs))) - { - hddLog(LOG1, "%s: failed to copy data to user buffer", __func__); - return -EFAULT; - } - wrqu->data.length = 12 + WPSPBCProbeReqIEs.probeReqIELen; - hddLog(LOG1, FL("Macaddress : "MAC_ADDRESS_STR"\n"), - MAC_ADDR_ARRAY(WPSPBCProbeReqIEs.macaddr)); + + pWPSPBCProbeReqIEs = (sQcSapreq_WPSPBCProbeReqIES_t *)(wrqu->data.pointer); + pWPSPBCProbeReqIEs->probeReqIELen = pHddApCtx->WPSPBCProbeReq.probeReqIELen; + vos_mem_copy(pWPSPBCProbeReqIEs->probeReqIE, pHddApCtx->WPSPBCProbeReq.probeReqIE, pWPSPBCProbeReqIEs->probeReqIELen); + vos_mem_copy(pWPSPBCProbeReqIEs->macaddr, pHddApCtx->WPSPBCProbeReq.peerMacAddr, sizeof(v_MACADDR_t)); + wrqu->data.length = 12 + pWPSPBCProbeReqIEs->probeReqIELen; + hddLog(LOG1, FL("Macaddress : "MAC_ADDRESS_STR"\n"), MAC_ADDR_ARRAY(pWPSPBCProbeReqIEs->macaddr)); up(&pHddApCtx->semWpsPBCOverlapInd); EXIT(); return 0; @@ -2302,18 +2222,6 @@ static int iw_get_ap_freq(struct net_device *dev, struct iw_request_info *info, return 0; } -static int iw_get_mode(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, - char *extra) -{ - int status = 0; - - wrqu->mode = IW_MODE_MASTER; - - return status; -} - static int iw_softap_setwpsie(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, @@ -2323,37 +2231,20 @@ static int iw_softap_setwpsie(struct net_device *dev, v_CONTEXT_t pVosContext = (WLAN_HDD_GET_CTX(pHostapdAdapter))->pvosContext; hdd_hostapd_state_t *pHostapdState; eHalStatus halStatus= eHAL_STATUS_SUCCESS; - u_int8_t *wps_genie; - u_int8_t *fwps_genie; + u_int8_t *wps_genie = wrqu->data.pointer; u_int8_t *pos; tpSap_WPSIE pSap_WPSIe; u_int8_t WPSIeType; u_int16_t length; ENTER(); - if(!wrqu->data.length || wrqu->data.length <= QCSAP_MAX_WSC_IE) + if(!wrqu->data.length) return 0; - wps_genie = kmalloc(wrqu->data.length, GFP_KERNEL); - - if(NULL == wps_genie) { - hddLog(LOG1, "unable to allocate memory"); - return -ENOMEM; - } - fwps_genie = wps_genie; - if (copy_from_user((void *)wps_genie, - wrqu->data.pointer, wrqu->data.length)) - { - hddLog(LOG1, "%s: failed to copy data to user buffer", __func__); - kfree(fwps_genie); - return -EFAULT; - } - pSap_WPSIe = vos_mem_malloc(sizeof(tSap_WPSIE)); if (NULL == pSap_WPSIe) { hddLog(LOGE, "VOS unable to allocate memory\n"); - kfree(fwps_genie); return -ENOMEM; } vos_mem_zero(pSap_WPSIe, sizeof(tSap_WPSIE)); @@ -2370,7 +2261,6 @@ static int iw_softap_setwpsie(struct net_device *dev, if (wps_genie[1] < 2 + 4) { vos_mem_free(pSap_WPSIe); - kfree(fwps_genie); return -EINVAL; } else if (memcmp(&wps_genie[2], "\x00\x50\xf2\x04", 4) == 0) @@ -2444,7 +2334,6 @@ static int iw_softap_setwpsie(struct net_device *dev, default: hddLog (LOGW, "UNKNOWN TLV in WPS IE(%x)\n", (*pos<<8 | *(pos+1))); vos_mem_free(pSap_WPSIe); - kfree(fwps_genie); return -EINVAL; } } @@ -2458,7 +2347,6 @@ static int iw_softap_setwpsie(struct net_device *dev, default: hddLog (LOGE, "%s Set UNKNOWN IE %X",__func__, wps_genie[0]); vos_mem_free(pSap_WPSIe); - kfree(fwps_genie); return 0; } } @@ -2472,7 +2360,6 @@ static int iw_softap_setwpsie(struct net_device *dev, if (wps_genie[1] < 2 + 4) { vos_mem_free(pSap_WPSIe); - kfree(fwps_genie); return -EINVAL; } else if (memcmp(&wps_genie[2], "\x00\x50\xf2\x04", 4) == 0) @@ -2637,7 +2524,6 @@ static int iw_softap_setwpsie(struct net_device *dev, } vos_mem_free(pSap_WPSIe); - kfree(fwps_genie); EXIT(); return halStatus; } @@ -2745,7 +2631,7 @@ static int iw_set_ap_genie(struct net_device *dev, hdd_adapter_t *pHostapdAdapter = (netdev_priv(dev)); v_CONTEXT_t pVosContext = (WLAN_HDD_GET_CTX(pHostapdAdapter))->pvosContext; eHalStatus halStatus= eHAL_STATUS_SUCCESS; - u_int8_t *genie = (u_int8_t *)extra; + u_int8_t *genie = wrqu->data.pointer; ENTER(); @@ -2754,7 +2640,7 @@ static int iw_set_ap_genie(struct net_device *dev, EXIT(); return 0; } - + switch (genie[0]) { case DOT11F_EID_WPA: @@ -2765,7 +2651,7 @@ static int iw_set_ap_genie(struct net_device *dev, hdd_softap_Register_BC_STA(pHostapdAdapter, 1); } (WLAN_HDD_GET_AP_CTX_PTR(pHostapdAdapter))->uPrivacy = 1; - halStatus = WLANSAP_Set_WPARSNIes(pVosContext, genie, wrqu->data.length); + halStatus = WLANSAP_Set_WPARSNIes(pVosContext, wrqu->data.pointer, wrqu->data.length); break; default: @@ -2810,29 +2696,15 @@ static VOS_STATUS wlan_hdd_get_classAstats_for_station(hdd_adapter_t *pAdapter, { lrc = wait_for_completion_interruptible_timeout(&context.completion, msecs_to_jiffies(WLAN_WAIT_TIME_STATS)); + context.magic = 0; if (lrc <= 0) { hddLog(VOS_TRACE_LEVEL_ERROR, "%s: SME %s while retrieving link speed", __func__, (0 == lrc) ? "timeout" : "interrupt"); + msleep(50); } } - - /* either we never sent a request, we sent a request and received a - response or we sent a request and timed out. if we never sent a - request or if we sent a request and got a response, we want to - clear the magic out of paranoia. if we timed out there is a - race condition such that the callback function could be - executing at the same time we are. of primary concern is if the - callback function had already verified the "magic" but had not - yet set the completion variable when a timeout occurred. we - serialize these activities by invalidating the magic while - holding a shared spinlock which will cause us to block if the - callback is currently executing */ - spin_lock(&hdd_context_lock); - context.magic = 0; - spin_unlock(&hdd_context_lock); - return VOS_STATUS_SUCCESS; } @@ -2845,7 +2717,6 @@ int iw_get_softap_linkspeed(struct net_device *dev, hdd_adapter_t *pHostapdAdapter = (netdev_priv(dev)); hdd_context_t *pHddCtx; char *pLinkSpeed = (char*)extra; - char *pmacAddress; v_U32_t link_speed; unsigned short staId; int len = sizeof(v_U32_t)+1; @@ -2864,36 +2735,17 @@ int iw_get_softap_linkspeed(struct net_device *dev, } hddLog(VOS_TRACE_LEVEL_INFO, "%s wrqu->data.length= %d\n", __func__, wrqu->data.length); - if (wrqu->data.length != MAC_ADDRESS_STR_LEN) - { - hddLog(LOG1, "Invalid length"); - return -EINVAL; - } - pmacAddress = kmalloc(MAC_ADDRESS_STR_LEN, GFP_KERNEL); - if(NULL == pmacAddress) { - hddLog(LOG1, "unable to allocate memory"); - return -ENOMEM; - } - if (copy_from_user((void *)pmacAddress, - wrqu->data.pointer, wrqu->data.length)) - { - hddLog(LOG1, "%s: failed to copy data to user buffer", __func__); - kfree(pmacAddress); - return -EFAULT; - } - - status = hdd_string_to_hex (pmacAddress, wrqu->data.length, macAddress ); - kfree(pmacAddress); + status = hdd_string_to_hex ((char *)wrqu->data.pointer, wrqu->data.length, macAddress ); if (!VOS_IS_STATUS_SUCCESS(status )) { hddLog(VOS_TRACE_LEVEL_ERROR, FL("String to Hex conversion Failed")); } - /* If no mac address is passed and/or its length is less than 17, + /* If no mac address is passed and/or its length is less than 18, * link speed for first connected client will be returned. */ - if (!VOS_IS_STATUS_SUCCESS(status ) || wrqu->data.length < 17) + if (!VOS_IS_STATUS_SUCCESS(status ) || wrqu->data.length < 18) { status = hdd_softap_GetConnectedStaId(pHostapdAdapter, (void *)(&staId)); } @@ -2956,7 +2808,7 @@ static const iw_handler hostapd_handler[] = (iw_handler) NULL, /* SIOCSIWFREQ */ (iw_handler) iw_get_ap_freq, /* SIOCGIWFREQ */ (iw_handler) NULL, /* SIOCSIWMODE */ - (iw_handler) iw_get_mode, /* SIOCGIWMODE */ + (iw_handler) NULL, /* SIOCGIWMODE */ (iw_handler) NULL, /* SIOCSIWSENS */ (iw_handler) NULL, /* SIOCGIWSENS */ (iw_handler) NULL, /* SIOCSIWRANGE */ @@ -3006,12 +2858,9 @@ static const iw_handler hostapd_handler[] = (iw_handler) NULL, /* SIOCSIWPMKSA */ }; -/* - * Note that the following ioctls were defined with semantics which - * cannot be handled by the "iwpriv" userspace application and hence - * they are not included in the hostapd_private_args array - * QCSAP_IOCTL_ASSOC_STA_MACADDR - */ +#define IW_PRIV_TYPE_OPTIE (IW_PRIV_TYPE_BYTE | QCSAP_MAX_OPT_IE) +#define IW_PRIV_TYPE_MLME \ + (IW_PRIV_TYPE_BYTE | sizeof(struct ieee80211req_mlme)) static const struct iw_priv_args hostapd_private_args[] = { { QCSAP_IOCTL_SETPARAM, @@ -3057,7 +2906,9 @@ static const struct iw_priv_args hostapd_private_args[] = { IW_PRIV_TYPE_BYTE | sizeof(sQcSapreq_WPSPBCProbeReqIES_t) | IW_PRIV_SIZE_FIXED | 1, 0, "getProbeReqIEs" }, { QCSAP_IOCTL_GET_CHANNEL, 0, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "getchannel" }, - { QCSAP_IOCTL_DISASSOC_STA, + { QCSAP_IOCTL_ASSOC_STA_MACADDR, 0, + IW_PRIV_TYPE_BYTE | /*((WLAN_MAX_STA_COUNT*6)+100)*/1 , "get_assoc_stamac" }, + { QCSAP_IOCTL_DISASSOC_STA, IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 6 , 0, "disassoc_sta" }, { QCSAP_IOCTL_AP_STATS, IW_PRIV_TYPE_BYTE | QCSAP_MAX_WSC_IE, 0, "ap_stats" }, @@ -3250,24 +3101,8 @@ VOS_STATUS hdd_init_ap_mode( hdd_adapter_t *pAdapter ) { hddLog(VOS_TRACE_LEVEL_FATAL, "%s: hdd_softap_init_tx_rx failed", __func__); } - - status = hdd_wmm_adapter_init( pAdapter ); - if (!VOS_IS_STATUS_SUCCESS(status)) - { - hddLog(VOS_TRACE_LEVEL_ERROR, - "hdd_wmm_adapter_init() failed with status code %08d [x%08lx]", - status, status ); - goto error_wmm_init; - } - - set_bit(WMM_INIT_DONE, &pAdapter->event_flags); - + wlan_hdd_set_monitor_tx_adapter( WLAN_HDD_GET_CTX(pAdapter), pAdapter ); - - return status; - -error_wmm_init: - hdd_softap_deinit_tx_rx( pAdapter ); EXIT(); return status; } @@ -3317,7 +3152,6 @@ hdd_adapter_t* hdd_wlan_create_ap_dev( hdd_context_t *pHddCtx, tSirMacAddr macAd init_completion(&pHostapdAdapter->tx_action_cnf_event); init_completion(&pHostapdAdapter->cancel_rem_on_chan_var); init_completion(&pHostapdAdapter->rem_on_chan_ready_event); - init_completion(&pHostapdAdapter->ula_complete); #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) init_completion(&pHostapdAdapter->offchannel_tx_event); #endif diff --git a/drivers/staging/prima/CORE/HDD/src/wlan_hdd_main.c b/drivers/staging/prima/CORE/HDD/src/wlan_hdd_main.c index 29c212ede7b..d36ced40abd 100644 --- a/drivers/staging/prima/CORE/HDD/src/wlan_hdd_main.c +++ b/drivers/staging/prima/CORE/HDD/src/wlan_hdd_main.c @@ -103,15 +103,12 @@ #include <linux/wireless.h> #include <net/cfg80211.h> -#include <linux/inetdevice.h> -#include <net/addrconf.h> #include "wlan_hdd_cfg80211.h" #include "wlan_hdd_p2p.h" #include <linux/rtnetlink.h> int wlan_hdd_ftm_start(hdd_context_t *pAdapter); #include "sapApi.h" #include <linux/semaphore.h> -#include <linux/ctype.h> #include <mach/subsystem_restart.h> #include <wlan_hdd_hostapd.h> #include <wlan_hdd_softap_tx_rx.h> @@ -145,6 +142,8 @@ int wlan_hdd_ftm_start(hdd_context_t *pAdapter); #define MEMORY_DEBUG_STR "" #endif +#define MAX_RESTART_DRIVER_EVENT_LENGTH 30 + /* the Android framework expects this param even though we don't use it */ #define BUF_LEN 20 static char fwpath_buffer[BUF_LEN]; @@ -157,12 +156,6 @@ static int wlan_hdd_inited; #endif /* - * spinlock for synchronizing asynchronous request/response - * (full description of use in wlan_hdd_main.h) - */ -DEFINE_SPINLOCK(hdd_context_lock); - -/* * The rate at which the driver sends RESTART event to supplicant * once the function 'vos_wlanRestart()' is called * @@ -176,19 +169,12 @@ DEFINE_SPINLOCK(hdd_context_lock); #define SIZE_OF_SETROAMMODE 11 /* size of SETROAMMODE */ #define SIZE_OF_GETROAMMODE 11 /* size of GETROAMMODE */ -#define WLAN_PRIV_DATA_MAX_LEN 4096 -/* - * Driver miracast parameters 0-Disabled - * 1-Source, 2-Sink - */ -#define WLAN_HDD_DRIVER_MIRACAST_CFG_MIN_VAL 0 -#define WLAN_HDD_DRIVER_MIRACAST_CFG_MAX_VAL 2 - #ifdef WLAN_OPEN_SOURCE static struct wake_lock wlan_wake_lock; #endif /* set when SSR is needed after unload */ static e_hdd_ssr_required isSsrRequired = HDD_SSR_NOT_REQUIRED; +static struct wake_lock wlan_wake_lock_scan; //Mot IKHSS7-28961: Incorrect empty scan results //internal function declaration static VOS_STATUS wlan_hdd_framework_restart(hdd_context_t *pHddCtx); @@ -205,6 +191,7 @@ static void hdd_set_multicast_list(struct net_device *dev); #endif void hdd_wlan_initial_scan(hdd_adapter_t *pAdapter); +int isWDresetInProgress(void); extern int hdd_setBand_helper(struct net_device *dev, tANI_U8* ptr); #if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR) @@ -229,13 +216,15 @@ static int hdd_netdev_notifier_call(struct notifier_block * nb, VOS_STATUS status; hdd_context_t *pHddCtx; #endif - long result; //Make sure that this callback corresponds to our device. if ((strncmp(dev->name, "wlan", 4)) && (strncmp(dev->name, "p2p", 3))) return NOTIFY_DONE; + if (isWDresetInProgress()) + return NOTIFY_DONE; + if (!dev->ieee80211_ptr) return NOTIFY_DONE; @@ -253,9 +242,6 @@ static int hdd_netdev_notifier_call(struct notifier_block * nb, VOS_ASSERT(0); return NOTIFY_DONE; } - if (pHddCtx->isLogpInProgress) - return NOTIFY_DONE; - hddLog(VOS_TRACE_LEVEL_INFO, "%s: %s New Net Device State = %lu", __func__, dev->name, state); @@ -279,17 +265,25 @@ static int hdd_netdev_notifier_call(struct notifier_block * nb, break; case NETDEV_GOING_DOWN: - result = wlan_hdd_scan_abort(pAdapter); - if (result <= 0) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: Timeout occurred while waiting for abortscan %ld", - __func__, result); + if( pHddCtx->scan_info.mScanPending != FALSE ) + { + int result; + INIT_COMPLETION(pHddCtx->scan_info.abortscan_event_var); + hdd_abort_mac_scan(pAdapter->pHddCtx); + result = wait_for_completion_interruptible_timeout( + &pHddCtx->scan_info.abortscan_event_var, + msecs_to_jiffies(WLAN_WAIT_TIME_ABORTSCAN)); + if(!result) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: Timeout occurred while waiting for abortscan" , + __func__); + } } else { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: Scan Abort Successful" , __func__); + "%s: Scan is not Pending from user" , __func__); } #ifdef WLAN_BTAMP_FEATURE VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO,"%s: disabling AMP", __func__); @@ -588,18 +582,7 @@ int hdd_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) goto exit; } - if (priv_data.total_len <= 0 || - priv_data.total_len > WLAN_PRIV_DATA_MAX_LEN) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, - "%s:invalid priv_data.total_len(%d)!!!", __func__, - priv_data.total_len); - ret = -EINVAL; - goto exit; - } - - /* Allocate +1 for '\0' */ - command = kmalloc(priv_data.total_len + 1, GFP_KERNEL); + command = kmalloc(priv_data.total_len, GFP_KERNEL); if (!command) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, @@ -614,9 +597,6 @@ int hdd_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) goto exit; } - /* Making sure the command is NUL-terminated */ - command[priv_data.total_len] = '\0'; - if ((SIOCDEVPRIVATE + 1) == cmd) { hdd_context_t *pHddCtx = (hdd_context_t*)pAdapter->pHddCtx; @@ -649,11 +629,6 @@ int hdd_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) /* Change band request received */ ret = hdd_setBand_helper(dev, ptr); } - else if(strncmp(command, "SETWMMPS", 8) == 0) - { - tANI_U8 *ptr = command; - ret = hdd_wmmps_helper(pAdapter, ptr); - } else if ( strncasecmp(command, "COUNTRY", 7) == 0 ) { char *country_code; @@ -663,7 +638,7 @@ int hdd_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) hdd_checkandupdate_dfssetting(pAdapter, country_code); hdd_checkandupdate_phymode(pAdapter, country_code); ret = (int)sme_ChangeCountryCode(pHddCtx->hHal, NULL, country_code, - pAdapter, pHddCtx->pvosContext, eSIR_TRUE); + pAdapter, pHddCtx->pvosContext); if( 0 != ret ) { VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, @@ -719,7 +694,7 @@ int hdd_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) hdd_checkandupdate_dfssetting(pAdapter, countryCode); hdd_checkandupdate_phymode(pAdapter, countryCode); ret = (int)sme_ChangeCountryCode(pHddCtx->hHal, NULL, countryCode, - pAdapter, pHddCtx->pvosContext, eSIR_TRUE); + pAdapter, pHddCtx->pvosContext); if (0 != ret) { VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, @@ -826,7 +801,7 @@ int hdd_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) char extra[32]; tANI_U8 len = 0; - len = scnprintf(extra, sizeof(extra), "%s %d", command, rssi); + len = snprintf(extra, sizeof(extra), "%s %d", command, rssi); if (copy_to_user(priv_data.buf, &extra, len + 1)) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, @@ -885,7 +860,7 @@ int hdd_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) char extra[32]; tANI_U8 len = 0; - len = scnprintf(extra, sizeof(extra), "%s %d", "GETROAMSCANPERIOD", (nEmptyScanRefreshPeriod/1000)); + len = snprintf(extra, sizeof(extra), "%s %d", "GETROAMSCANPERIOD", (nEmptyScanRefreshPeriod/1000)); /* Returned value is in units of seconds */ if (copy_to_user(priv_data.buf, &extra, len + 1)) { @@ -946,7 +921,7 @@ int hdd_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) char extra[32]; tANI_U8 len = 0; - len = scnprintf(extra, sizeof(extra), "%s %d", "GETROAMSCANREFRESHPERIOD", (value/1000)); + len = snprintf(extra, sizeof(extra), "%s %d", "GETROAMSCANREFRESHPERIOD", (value/1000)); /* Returned value is in units of seconds */ if (copy_to_user(priv_data.buf, &extra, len + 1)) { @@ -1023,7 +998,7 @@ int hdd_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) else roamMode = CFG_LFR_FEATURE_ENABLED_MIN; - len = scnprintf(extra, sizeof(extra), "%s %d", command, roamMode); + len = snprintf(extra, sizeof(extra), "%s %d", command, roamMode); if (copy_to_user(priv_data.buf, &extra, len + 1)) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, @@ -1080,7 +1055,7 @@ int hdd_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) char extra[32]; tANI_U8 len = 0; - len = scnprintf(extra, sizeof(extra), "%s %d", command, roamRssiDiff); + len = snprintf(extra, sizeof(extra), "%s %d", command, roamRssiDiff); if (copy_to_user(priv_data.buf, &extra, len + 1)) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, @@ -1098,7 +1073,7 @@ int hdd_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) tANI_U8 len = 0; hdd_getBand_helper(pHddCtx, &band); - len = scnprintf(extra, sizeof(extra), "%s %d", command, band); + len = snprintf(extra, sizeof(extra), "%s %d", command, band); if (copy_to_user(priv_data.buf, &extra, len + 1)) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, @@ -1128,9 +1103,9 @@ int hdd_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) sme_GetCountryRevision((tHalHandle)(pHddCtx->hHal), &revision); if (0 == strncmp(pBuf, "KR", 2)) - len = scnprintf(extra, sizeof(extra), "%s %s %u", command, pBuf, revision); + len = snprintf(extra, sizeof(extra), "%s %s %u", command, pBuf, revision); else - len = scnprintf(extra, sizeof(extra), "%s %s", command, pBuf); + len = snprintf(extra, sizeof(extra), "%s %s", command, pBuf); if (copy_to_user(priv_data.buf, &extra, len + 1)) { @@ -1192,10 +1167,10 @@ int hdd_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) /* output channel list is of the format [Number of roam scan channels][Channel1][Channel2]... */ /* copy the number of channels in the 0th index */ - len = scnprintf(extra, sizeof(extra), "%s %d", command, numChannels); + len = snprintf(extra, sizeof(extra), "%s %d", command, numChannels); for (j = 0; (j < numChannels); j++) { - len += scnprintf(extra + len, sizeof(extra) - len, " %d", ChannelList[j]); + len += snprintf(extra + len, sizeof(extra) - len, " %d", ChannelList[j]); } if (copy_to_user(priv_data.buf, &extra, len + 1)) @@ -1343,7 +1318,7 @@ int hdd_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) char extra[32]; tANI_U8 len = 0; - len = scnprintf(extra, sizeof(extra), "%s %d", "GETCCXMODE", ccxMode); + len = snprintf(extra, sizeof(extra), "%s %d", "GETCCXMODE", ccxMode); if (copy_to_user(priv_data.buf, &extra, len + 1)) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, @@ -1358,7 +1333,7 @@ int hdd_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) char extra[32]; tANI_U8 len = 0; - len = scnprintf(extra, sizeof(extra), "%s %d", "GETOKCMODE", okcMode); + len = snprintf(extra, sizeof(extra), "%s %d", "GETOKCMODE", okcMode); if (copy_to_user(priv_data.buf, &extra, len + 1)) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, @@ -1373,7 +1348,7 @@ int hdd_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) char extra[32]; tANI_U8 len = 0; - len = scnprintf(extra, sizeof(extra), "%s %d", "GETFASTROAM", lfrMode); + len = snprintf(extra, sizeof(extra), "%s %d", "GETFASTROAM", lfrMode); if (copy_to_user(priv_data.buf, &extra, len + 1)) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, @@ -1388,7 +1363,7 @@ int hdd_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) char extra[32]; tANI_U8 len = 0; - len = scnprintf(extra, sizeof(extra), "%s %d", "GETFASTTRANSITION", ft); + len = snprintf(extra, sizeof(extra), "%s %d", "GETFASTTRANSITION", ft); if (copy_to_user(priv_data.buf, &extra, len + 1)) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, @@ -1443,7 +1418,7 @@ int hdd_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) tANI_U8 len = 0; /* value is interms of msec */ - len = scnprintf(extra, sizeof(extra), "%s %d", "GETROAMSCANCHANNELMINTIME", val); + len = snprintf(extra, sizeof(extra), "%s %d", "GETROAMSCANCHANNELMINTIME", val); if (copy_to_user(priv_data.buf, &extra, len + 1)) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, @@ -1498,7 +1473,7 @@ int hdd_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) tANI_U8 len = 0; /* value is interms of msec */ - len = scnprintf(extra, sizeof(extra), "%s %d", "GETSCANCHANNELTIME", val); + len = snprintf(extra, sizeof(extra), "%s %d", "GETSCANCHANNELTIME", val); if (copy_to_user(priv_data.buf, &extra, len + 1)) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, @@ -1553,7 +1528,7 @@ int hdd_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) tANI_U8 len = 0; /* value is interms of msec */ - len = scnprintf(extra, sizeof(extra), "%s %d", "GETSCANHOMETIME", val); + len = snprintf(extra, sizeof(extra), "%s %d", "GETSCANHOMETIME", val); if (copy_to_user(priv_data.buf, &extra, len + 1)) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, @@ -1608,7 +1583,7 @@ int hdd_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) tANI_U8 len = 0; /* value is interms of msec */ - len = scnprintf(extra, sizeof(extra), "%s %d", "GETROAMINTRABAND", val); + len = snprintf(extra, sizeof(extra), "%s %d", "GETROAMINTRABAND", val); if (copy_to_user(priv_data.buf, &extra, len + 1)) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, @@ -1663,7 +1638,7 @@ int hdd_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) char extra[32]; tANI_U8 len = 0; - len = scnprintf(extra, sizeof(extra), "%s %d", command, val); + len = snprintf(extra, sizeof(extra), "%s %d", command, val); if (copy_to_user(priv_data.buf, &extra, len + 1)) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, @@ -1723,7 +1698,7 @@ int hdd_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) char extra[32]; tANI_U8 len = 0; - len = scnprintf(extra, sizeof(extra), "%s %d", command, val); + len = snprintf(extra, sizeof(extra), "%s %d", command, val); if (copy_to_user(priv_data.buf, &extra, len + 1)) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, @@ -1993,7 +1968,7 @@ int hdd_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) char extra[32]; tANI_U8 len = 0; - len = scnprintf(extra, sizeof(extra), "%s %d", command, roamScanControl); + len = snprintf(extra, sizeof(extra), "%s %d", command, roamScanControl); if (copy_to_user(priv_data.buf, &extra, len + 1)) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, @@ -2041,7 +2016,7 @@ int hdd_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) char extra[32]; tANI_U8 len = 0; - len = scnprintf(extra, sizeof(extra), "GETDWELLTIME %u\n", + len = snprintf(extra, sizeof(extra), "GETDWELLTIME %u\n", (int)pCfg->nActiveMaxChnTime); if (copy_to_user(priv_data.buf, &extra, len + 1)) { @@ -2078,56 +2053,6 @@ int hdd_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) { pHddCtx->scan_info.scan_mode = eSIR_PASSIVE_SCAN; } - else if ( strncasecmp(command, "MIRACAST", 8) == 0 ) - { - tANI_U8 filterType = 0; - tANI_U8 *value; - value = command + 9; - - /* Convert the value from ascii to integer */ - ret = kstrtou8(value, 10, &filterType); - if (ret < 0) - { - /* If the input value is greater than max value of datatype, - * then also kstrtou8 fails - */ - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: kstrtou8 failed range ", __func__); - ret = -EINVAL; - goto exit; - } - if ((filterType < WLAN_HDD_DRIVER_MIRACAST_CFG_MIN_VAL ) || - (filterType > WLAN_HDD_DRIVER_MIRACAST_CFG_MAX_VAL)) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: Accepted Values are 0 to 2. 0-Disabled, 1-Source," - " 2-Sink ", __func__); - ret = -EINVAL; - goto exit; - } - //Filtertype value should be either 0-Disabled, 1-Source, 2-sink - pHddCtx->drvr_miracast = filterType; - hdd_tx_rx_pkt_cnt_stat_timer_handler(pHddCtx); - } - else if (strncmp(command, "BTCOEXMODE", 10) == 0 ) - { - char *dhcpPhase; - dhcpPhase = command + 11; - if ('1' == *dhcpPhase) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - FL("BTCOEXMODE %d"), *dhcpPhase); - - pHddCtx->btCoexModeSet = TRUE; - } - else if ('2' == *dhcpPhase) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - FL("BTCOEXMODE %d"), *dhcpPhase); - - pHddCtx->btCoexModeSet = FALSE; - } - } else { hddLog( VOS_TRACE_LEVEL_WARN, "%s: Unsupported GUI command %s", __func__, command); @@ -2196,8 +2121,6 @@ VOS_STATUS hdd_parse_send_action_frame_data(tANI_U8 *pValue, tANI_U8 *pTargetApB int v = 0; tANI_U8 tempBuf[32]; tANI_U8 tempByte = 0; - /* 12 hexa decimal digits, 5 ':' and '\0' */ - tANI_U8 macAddress[18]; inPtr = strnchr(pValue, strlen(pValue), SPACE_ASCII_VALUE); /*no argument after the command*/ @@ -2221,20 +2144,14 @@ VOS_STATUS hdd_parse_send_action_frame_data(tANI_U8 *pValue, tANI_U8 *pTargetApB return -EINVAL; } - v = sscanf(inPtr, "%17s", macAddress); - if (!((1 == v) && hdd_is_valid_mac_address(macAddress))) + /*getting the first argument ie the target AP bssid */ + if (inPtr[2] != ':' || inPtr[5] != ':' || inPtr[8] != ':' || inPtr[11] != ':' || inPtr[14] != ':') { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "Invalid MAC address or All hex inputs are not read (%d)", v); - return -EINVAL; + return -EINVAL; } - - pTargetApBssid[0] = hdd_parse_hex(macAddress[0]) << 4 | hdd_parse_hex(macAddress[1]); - pTargetApBssid[1] = hdd_parse_hex(macAddress[3]) << 4 | hdd_parse_hex(macAddress[4]); - pTargetApBssid[2] = hdd_parse_hex(macAddress[6]) << 4 | hdd_parse_hex(macAddress[7]); - pTargetApBssid[3] = hdd_parse_hex(macAddress[9]) << 4 | hdd_parse_hex(macAddress[10]); - pTargetApBssid[4] = hdd_parse_hex(macAddress[12]) << 4 | hdd_parse_hex(macAddress[13]); - pTargetApBssid[5] = hdd_parse_hex(macAddress[15]) << 4 | hdd_parse_hex(macAddress[16]); + j = sscanf(inPtr, "%2x:%2x:%2x:%2x:%2x:%2x", (unsigned int *)&pTargetApBssid[0], (unsigned int *)&pTargetApBssid[1], + (unsigned int *)&pTargetApBssid[2], (unsigned int *)&pTargetApBssid[3], + (unsigned int *)&pTargetApBssid[4], (unsigned int *)&pTargetApBssid[5]); /* point to the next argument */ inPtr = strnchr(inPtr, strlen(inPtr), SPACE_ASCII_VALUE); @@ -2251,12 +2168,9 @@ VOS_STATUS hdd_parse_send_action_frame_data(tANI_U8 *pValue, tANI_U8 *pTargetApB } /*getting the next argument ie the channel number */ - v = sscanf(inPtr, "%31s ", tempBuf); - if (1 != v) return -EINVAL; - + j = sscanf(inPtr, "%s ", tempBuf); v = kstrtos32(tempBuf, 10, &tempInt); - if ( v < 0 || tempInt <= 0 || tempInt > WNI_CFG_CURRENT_CHANNEL_STAMAX ) - return -EINVAL; + if ( v < 0) return -EINVAL; *pChannel = tempInt; @@ -2274,11 +2188,9 @@ VOS_STATUS hdd_parse_send_action_frame_data(tANI_U8 *pValue, tANI_U8 *pTargetApB } /*getting the next argument ie the dwell time */ - v = sscanf(inPtr, "%31s ", tempBuf); - if (1 != v) return -EINVAL; - + j = sscanf(inPtr, "%s ", tempBuf); v = kstrtos32(tempBuf, 10, &tempInt); - if ( v < 0 || tempInt < 0) return -EINVAL; + if ( v < 0) return -EINVAL; *pDwellTime = tempInt; @@ -2300,8 +2212,8 @@ VOS_STATUS hdd_parse_send_action_frame_data(tANI_U8 *pValue, tANI_U8 *pTargetApB while(('\0' != *dataEnd) ) { dataEnd++; + ++(*pBufLen); } - *pBufLen = dataEnd - inPtr ; if ( *pBufLen <= 0) return -EINVAL; /* Allocate the number of bytes based on the number of input characters @@ -2325,14 +2237,7 @@ VOS_STATUS hdd_parse_send_action_frame_data(tANI_U8 *pValue, tANI_U8 *pTargetApB and f0 in 3rd location */ for (i = 0, j = 0; j < *pBufLen; j += 2) { - if( j+1 == *pBufLen) - { - tempByte = hdd_parse_hex(inPtr[j]); - } - else - { - tempByte = (hdd_parse_hex(inPtr[j]) << 4) | (hdd_parse_hex(inPtr[j + 1])); - } + tempByte = (hdd_parse_hex(inPtr[j]) << 4) | (hdd_parse_hex(inPtr[j + 1])); (*pBuf)[i++] = tempByte; } *pBufLen = i; @@ -2464,9 +2369,7 @@ VOS_STATUS hdd_parse_channellist(tANI_U8 *pValue, tANI_U8 *pChannelList, tANI_U8 } /*getting the first argument ie the number of channels*/ - v = sscanf(inPtr, "%31s ", buf); - if (1 != v) return -EINVAL; - + sscanf(inPtr, "%32s ", buf); v = kstrtos32(buf, 10, &tempInt); if ((v < 0) || (tempInt <= 0) || @@ -2515,9 +2418,7 @@ VOS_STATUS hdd_parse_channellist(tANI_U8 *pValue, tANI_U8 *pChannelList, tANI_U8 } } - v = sscanf(inPtr, "%31s ", buf); - if (1 != v) return -EINVAL; - + sscanf(inPtr, "%32s ", buf); v = kstrtos32(buf, 10, &tempInt); if ((v < 0) || (tempInt <= 0) || @@ -2543,22 +2444,19 @@ VOS_STATUS hdd_parse_channellist(tANI_U8 *pValue, tANI_U8 *pChannelList, tANI_U8 This function parses the reasoc command data passed in the format REASSOC<space><bssid><space><channel> - \param - pValue Pointer to input data (its a NUL terminated string) + \param - pValue Pointer to input country code revision \param - pTargetApBssid Pointer to target Ap bssid \param - pChannel Pointer to the Target AP channel \return - 0 for success non-zero for failure --------------------------------------------------------------------------*/ -VOS_STATUS hdd_parse_reassoc_command_data(tANI_U8 *pValue, - tANI_U8 *pTargetApBssid, tANI_U8 *pChannel) +VOS_STATUS hdd_parse_reassoc_command_data(tANI_U8 *pValue, tANI_U8 *pTargetApBssid, tANI_U8 *pChannel) { tANI_U8 *inPtr = pValue; int tempInt; int v = 0; tANI_U8 tempBuf[32]; - /* 12 hexa decimal digits, 5 ':' and '\0' */ - tANI_U8 macAddress[18]; inPtr = strnchr(pValue, strlen(pValue), SPACE_ASCII_VALUE); /*no argument after the command*/ @@ -2582,20 +2480,14 @@ VOS_STATUS hdd_parse_reassoc_command_data(tANI_U8 *pValue, return -EINVAL; } - v = sscanf(inPtr, "%17s", macAddress); - if (!((1 == v) && hdd_is_valid_mac_address(macAddress))) + /*getting the first argument ie the target AP bssid */ + if (inPtr[2] != ':' || inPtr[5] != ':' || inPtr[8] != ':' || inPtr[11] != ':' || inPtr[14] != ':') { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "Invalid MAC address or All hex inputs are not read (%d)", v); - return -EINVAL; + return -EINVAL; } - - pTargetApBssid[0] = hdd_parse_hex(macAddress[0]) << 4 | hdd_parse_hex(macAddress[1]); - pTargetApBssid[1] = hdd_parse_hex(macAddress[3]) << 4 | hdd_parse_hex(macAddress[4]); - pTargetApBssid[2] = hdd_parse_hex(macAddress[6]) << 4 | hdd_parse_hex(macAddress[7]); - pTargetApBssid[3] = hdd_parse_hex(macAddress[9]) << 4 | hdd_parse_hex(macAddress[10]); - pTargetApBssid[4] = hdd_parse_hex(macAddress[12]) << 4 | hdd_parse_hex(macAddress[13]); - pTargetApBssid[5] = hdd_parse_hex(macAddress[15]) << 4 | hdd_parse_hex(macAddress[16]); + sscanf(inPtr, "%2x:%2x:%2x:%2x:%2x:%2x", (unsigned int *)&pTargetApBssid[0], (unsigned int *)&pTargetApBssid[1], + (unsigned int *)&pTargetApBssid[2], (unsigned int *)&pTargetApBssid[3], + (unsigned int *)&pTargetApBssid[4], (unsigned int *)&pTargetApBssid[5]); /* point to the next argument */ inPtr = strnchr(inPtr, strlen(inPtr), SPACE_ASCII_VALUE); @@ -2612,16 +2504,9 @@ VOS_STATUS hdd_parse_reassoc_command_data(tANI_U8 *pValue, } /*getting the next argument ie the channel number */ - v = sscanf(inPtr, "%31s ", tempBuf); - if (1 != v) return -EINVAL; - + sscanf(inPtr, "%s ", tempBuf); v = kstrtos32(tempBuf, 10, &tempInt); - if ((v < 0) || - (tempInt <= 0) || - (tempInt > WNI_CFG_CURRENT_CHANNEL_STAMAX)) - { - return -EINVAL; - } + if ( v < 0) return -EINVAL; *pChannel = tempInt; return VOS_STATUS_SUCCESS; @@ -2631,51 +2516,6 @@ VOS_STATUS hdd_parse_reassoc_command_data(tANI_U8 *pValue, /**--------------------------------------------------------------------------- - \brief hdd_is_valid_mac_address() - Validate MAC address - - This function validates whether the given MAC address is valid or not - Expected MAC address is of the format XX:XX:XX:XX:XX:XX - where X is the hexa decimal digit character and separated by ':' - This algorithm works even if MAC address is not separated by ':' - - This code checks given input string mac contains exactly 12 hexadecimal digits. - and a separator colon : appears in the input string only after - an even number of hex digits. - - \param - pMacAddr pointer to the input MAC address - \return - 1 for valid and 0 for invalid. - - --------------------------------------------------------------------------*/ - -v_BOOL_t hdd_is_valid_mac_address(const tANI_U8 *pMacAddr) -{ - int xdigit = 0; - int separator = 0; - while (*pMacAddr) - { - if (isxdigit(*pMacAddr)) - { - xdigit++; - } - else if (':' == *pMacAddr) - { - if (0 == xdigit || ((xdigit / 2) - 1) != separator) - break; - - ++separator; - } - else - { - /* Invalid MAC found */ - return 0; - } - ++pMacAddr; - } - return (xdigit == 12 && (separator == 5 || separator == 0)); -} - -/**--------------------------------------------------------------------------- - \brief hdd_open() - HDD Open function This is called in response to ifconfig up @@ -2951,6 +2791,29 @@ VOS_STATUS hdd_release_firmware(char *pFileName,v_VOID_t *pCtx) } +#ifdef WLAN_NV_OTA_UPGRADE /* Motorola OTA changes */ +/* IKJB42MAIN-9117, qjiang1, 04/10/2013 */ + else if (!strcmp(WLAN_NV_FILE_REGULATORY,pFileName) || !strcmp(WLAN_NV_FILE_REGULATORY_M,pFileName) ) { + if(pHddCtx->nv_reg) { + release_firmware(pHddCtx->nv_reg); + pHddCtx->nv_reg = NULL; + } + else + status = VOS_STATUS_E_FAILURE; + + } +/* IKJB42MAIN-9117, qjiang1, 04/10/2013 */ + else if (!strcmp(WLAN_NV_FILE_CALIBRATION,pFileName) || !strcmp(WLAN_NV_FILE_CALIBRATION_M,pFileName) ) { + if(pHddCtx->nv_cal) { + release_firmware(pHddCtx->nv_cal); + pHddCtx->nv_cal = NULL; + } + else + status = VOS_STATUS_E_FAILURE; + + } +#endif + EXIT(); return status; } @@ -3014,6 +2877,43 @@ VOS_STATUS hdd_request_firmware(char *pfileName,v_VOID_t *pCtx,v_VOID_t **ppfw_d } } + #ifdef WLAN_NV_OTA_UPGRADE /* Motorola OTA changes */ +/* IKJB42MAIN-9117, qjiang1, 04/10/2013 */ + else if(!strcmp(WLAN_NV_FILE_REGULATORY, pfileName) || !strcmp(WLAN_NV_FILE_REGULATORY_M, pfileName) ) { + + status = request_firmware(&pHddCtx->nv_reg, pfileName, pHddCtx->parent_dev); + + if(status || !pHddCtx->nv_reg || !pHddCtx->nv_reg->data) { + hddLog(VOS_TRACE_LEVEL_FATAL, "%s: nv %s download failed", + __func__, pfileName); + retval = VOS_STATUS_E_FAILURE; + } + else { + *ppfw_data = (v_VOID_t *)pHddCtx->nv_reg->data; + *pSize = pHddCtx->nv_reg->size; + hddLog(VOS_TRACE_LEVEL_INFO, "%s: nv file size = %d", + __func__, *pSize); + } + } +/* IKJB42MAIN-9117, qjiang1, 04/10/2013 */ + else if(!strcmp(WLAN_NV_FILE_CALIBRATION, pfileName) || !strcmp(WLAN_NV_FILE_CALIBRATION_M, pfileName) ) { + + status = request_firmware(&pHddCtx->nv_cal, pfileName, pHddCtx->parent_dev); + + if(status || !pHddCtx->nv_cal || !pHddCtx->nv_cal->data) { + hddLog(VOS_TRACE_LEVEL_FATAL, "%s: nv %s download failed", + __func__, pfileName); + retval = VOS_STATUS_E_FAILURE; + } + else { + *ppfw_data = (v_VOID_t *)pHddCtx->nv_cal->data; + *pSize = pHddCtx->nv_cal->size; + hddLog(VOS_TRACE_LEVEL_INFO, "%s: nv file size = %d", + __func__, *pSize); + } + } + #endif + EXIT(); return retval; } @@ -3198,7 +3098,7 @@ tANI_U8* wlan_hdd_get_intf_addr(hdd_context_t* pHddCtx) int i; for ( i = 0; i < VOS_MAX_CONCURRENCY_PERSONA; i++) { - if( 0 == ((pHddCtx->cfg_ini->intfAddrMask) & (1 << i)) ) + if( 0 == (pHddCtx->cfg_ini->intfAddrMask >> i)) break; } @@ -3300,7 +3200,6 @@ static hdd_adapter_t* hdd_alloc_station_adapter( hdd_context_t *pHddCtx, tSirMac init_completion(&pAdapter->linkup_event_var); init_completion(&pAdapter->cancel_rem_on_chan_var); init_completion(&pAdapter->rem_on_chan_ready_event); - init_completion(&pAdapter->pno_comp_var); #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) init_completion(&pAdapter->offchannel_tx_event); #endif @@ -3391,20 +3290,11 @@ static eHalStatus hdd_smeCloseSessionCallback(void *pContext) clear_bit(SME_SESSION_OPENED, &pAdapter->event_flags); -#ifndef WLAN_OPEN_SOURCE /* need to make sure all of our scheduled work has completed. * This callback is called from MC thread context, so it is safe to * to call below flush workqueue API from here. - * - * Even though this is called from MC thread context, if there is a faulty - * work item in the system, that can hang this call forever. So flushing - * this global work queue is not safe; and now we make sure that - * individual work queues are stopped correctly. But the cancel work queue - * is a GPL only API, so the proprietary version of the driver would still - * rely on the global work queue flush. */ flush_scheduled_work(); -#endif /* We can be blocked while waiting for scheduled work to be * flushed, and the adapter structure can potentially be freed, in @@ -3596,13 +3486,6 @@ void hdd_deinit_adapter( hdd_context_t *pHddCtx, hdd_adapter_t *pAdapter ) case WLAN_HDD_SOFTAP: case WLAN_HDD_P2P_GO: { - - if (test_bit(WMM_INIT_DONE, &pAdapter->event_flags)) - { - hdd_wmm_adapter_close( pAdapter ); - clear_bit(WMM_INIT_DONE, &pAdapter->event_flags); - } - hdd_cleanup_actionframe(pHddCtx, pAdapter); hdd_unregister_hostapd(pAdapter); @@ -3674,6 +3557,28 @@ void hdd_set_pwrparams(hdd_context_t *pHddCtx) continue; } + //BEGIN MOT IKJB42MAIN-1268 DTIM enhancement + if (eConnectionState_Associated == (WLAN_HDD_GET_STATION_CTX_PTR(pAdapter))->conn_info.connState) + { + tHalHandle halHandle = WLAN_HDD_GET_HAL_CTX(pAdapter); + tpPESession sessionPtr = NULL; + sessionPtr = peFindSessionBySessionId((tpAniSirGlobal)halHandle, pAdapter->sessionId); + if(sessionPtr != NULL) + { + if(sessionPtr->lastBeaconDtimPeriod <= 3) + { + pHddCtx->cfg_ini->enableModulatedDTIM=0; + pHddCtx->cfg_ini->enableDynamicDTIM=3; + } + else + { + pHddCtx->cfg_ini->enableModulatedDTIM=1; + pHddCtx->cfg_ini->enableDynamicDTIM=0; + } + } + } + //END IKJB42MAIN-1268 + //Apply Dynamic DTIM For P2P //Only if ignoreDynamicDtimInP2pMode is not set in ini if ((pHddCtx->cfg_ini->enableDynamicDTIM || @@ -3901,21 +3806,11 @@ hdd_adapter_t* hdd_open_adapter( hdd_context_t *pHddCtx, tANI_U8 session_type, if( NULL == pAdapter ) return NULL; -#ifdef FEATURE_WLAN_TDLS - /* A Mutex Lock is introduced while changing/initializing the mode to - * protect the concurrent access for the Adapters by TDLS module. - */ - mutex_lock(&pHddCtx->tdls_lock); -#endif - pAdapter->wdev.iftype = (session_type == WLAN_HDD_P2P_CLIENT) ? NL80211_IFTYPE_P2P_CLIENT: NL80211_IFTYPE_STATION; pAdapter->device_mode = session_type; -#ifdef FEATURE_WLAN_TDLS - mutex_unlock(&pHddCtx->tdls_lock); -#endif status = hdd_init_station_mode( pAdapter ); if( VOS_STATUS_SUCCESS != status ) @@ -3927,14 +3822,6 @@ hdd_adapter_t* hdd_open_adapter( hdd_context_t *pHddCtx, tANI_U8 session_type, hdd_deinit_adapter(pHddCtx, pAdapter); goto err_free_netdev; } - - // Workqueue which gets scheduled in IPv4 notification callback. - INIT_WORK(&pAdapter->ipv4NotifierWorkQueue, hdd_ipv4_notifier_work_queue); - -#ifdef WLAN_NS_OFFLOAD - // Workqueue which gets scheduled in IPv6 notification callback. - INIT_WORK(&pAdapter->ipv6NotifierWorkQueue, hdd_ipv6_notifier_work_queue); -#endif //Stop the Interface TX queue. netif_tx_disable(pAdapter->dev); //netif_tx_disable(pWlanDev); @@ -4019,12 +3906,6 @@ hdd_adapter_t* hdd_open_adapter( hdd_context_t *pHddCtx, tANI_U8 session_type, pAdapter->wdev.iftype = NL80211_IFTYPE_STATION; pAdapter->device_mode = session_type; status = hdd_register_interface( pAdapter, rtnl_held ); - - hdd_init_tx_rx( pAdapter ); - - //Stop the Interface TX queue. - netif_tx_disable(pAdapter->dev); - netif_carrier_off(pAdapter->dev); } break; default: @@ -4034,6 +3915,7 @@ hdd_adapter_t* hdd_open_adapter( hdd_context_t *pHddCtx, tANI_U8 session_type, } } + if( VOS_STATUS_SUCCESS == status ) { //Add it to the hdd's session list. @@ -4119,22 +4001,8 @@ VOS_STATUS hdd_close_adapter( hdd_context_t *pHddCtx, hdd_adapter_t *pAdapter, { wlan_hdd_clear_concurrency_mode(pHddCtx, pAdapter->device_mode); hdd_cleanup_adapter( pHddCtx, pAdapterNode->pAdapter, rtnl_held ); - -#ifdef FEATURE_WLAN_TDLS - - /* A Mutex Lock is introduced while changing/initializing the mode to - * protect the concurrent access for the Adapters by TDLS module. - */ - mutex_lock(&pHddCtx->tdls_lock); -#endif - hdd_remove_adapter( pHddCtx, pAdapterNode ); vos_mem_free( pAdapterNode ); - pAdapterNode = NULL; - -#ifdef FEATURE_WLAN_TDLS - mutex_unlock(&pHddCtx->tdls_lock); -#endif /* If there is a single session of STA/P2P client, re-enable BMPS */ @@ -4242,28 +4110,9 @@ VOS_STATUS hdd_stop_adapter( hdd_context_t *pHddCtx, hdd_adapter_t *pAdapter ) } else { - hdd_abort_mac_scan(pHddCtx, eCSR_SCAN_ABORT_DEFAULT); + hdd_abort_mac_scan(pHddCtx); } -#ifdef WLAN_NS_OFFLOAD -#ifdef WLAN_OPEN_SOURCE - cancel_work_sync(&pAdapter->ipv6NotifierWorkQueue); -#endif - if (pAdapter->ipv6_notifier_registered) - { - hddLog(LOG1, FL("Unregistered IPv6 notifier")); - unregister_inet6addr_notifier(&pAdapter->ipv6_notifier); - pAdapter->ipv6_notifier_registered = false; - } -#endif - if (pAdapter->ipv4_notifier_registered) - { - hddLog(LOG1, FL("Unregistered IPv4 notifier")); - unregister_inetaddr_notifier(&pAdapter->ipv4_notifier); - pAdapter->ipv4_notifier_registered = false; - } -#ifdef WLAN_OPEN_SOURCE - cancel_work_sync(&pAdapter->ipv4NotifierWorkQueue); -#endif + if (test_bit(SME_SESSION_OPENED, &pAdapter->event_flags)) { INIT_COMPLETION(pAdapter->session_close_comp_var); @@ -4334,13 +4183,8 @@ VOS_STATUS hdd_stop_adapter( hdd_context_t *pHddCtx, hdd_adapter_t *pAdapter ) } mutex_unlock(&pHddCtx->sap_lock); break; - case WLAN_HDD_MONITOR: -#ifdef WLAN_OPEN_SOURCE - cancel_work_sync(&pAdapter->sessionCtx.monitor.pAdapterForTx->monTxWorkQueue); -#endif break; - default: break; } @@ -4395,11 +4239,7 @@ VOS_STATUS hdd_reset_all_adapters( hdd_context_t *pHddCtx ) pAdapter->sessionCtx.station.hdd_ReassocScenario = VOS_FALSE; hdd_deinit_tx_rx(pAdapter); - if (test_bit(WMM_INIT_DONE, &pAdapter->event_flags)) - { - hdd_wmm_adapter_close( pAdapter ); - clear_bit(WMM_INIT_DONE, &pAdapter->event_flags); - } + hdd_wmm_adapter_close(pAdapter); status = hdd_get_next_adapter ( pHddCtx, pAdapterNode, &pNext ); pAdapterNode = pNext; @@ -4412,11 +4252,11 @@ VOS_STATUS hdd_reset_all_adapters( hdd_context_t *pHddCtx ) VOS_STATUS hdd_start_all_adapters( hdd_context_t *pHddCtx ) { - hdd_adapter_list_node_t *pAdapterNode = NULL, *pNext = NULL; VOS_STATUS status; hdd_adapter_t *pAdapter; eConnectionState connState; + hdd_adapter_list_node_t *pAdapterNode = NULL, *pNext = NULL; ENTER(); status = hdd_get_front_adapter ( pHddCtx, &pAdapterNode ); @@ -4477,7 +4317,9 @@ VOS_STATUS hdd_start_all_adapters( hdd_context_t *pHddCtx ) case WLAN_HDD_P2P_GO: hddLog(VOS_TRACE_LEVEL_ERROR, "%s [SSR] send stop ap to supplicant", __func__); - cfg80211_ap_stopped(pAdapter->dev, GFP_KERNEL); + /* event supplicant about unavailable interface */ + cfg80211_send_iface_unavailable(pAdapter->dev, GFP_KERNEL); + //cfg80211_ap_stopped(pAdapter->dev, GFP_KERNEL); FIX ME break; case WLAN_HDD_MONITOR: @@ -4908,6 +4750,8 @@ static void hdd_set_multicast_list(struct net_device *dev) hddLog(VOS_TRACE_LEVEL_INFO, "%s: allow all multicast frames", __func__); pAdapter->mc_addr_list.mc_cnt = 0; + if(pAdapter->device_mode == WLAN_HDD_INFRA_STATION) + wlan_hdd_update_v6_filters(pAdapter, 1); // IKJB42MAIN-1244, Motorola, a19091 } else { @@ -4934,6 +4778,9 @@ static void hdd_set_multicast_list(struct net_device *dev) MAC_ADDR_ARRAY(pAdapter->mc_addr_list.addr[i])); i++; } + if(pAdapter->device_mode == WLAN_HDD_INFRA_STATION) + wlan_hdd_update_v6_filters(pAdapter, 0); // IKJB42MAIN-1244, Motorola, a19091 + } return; } @@ -4989,14 +4836,12 @@ void hdd_wlan_initial_scan(hdd_adapter_t *pAdapter) { hddLog(VOS_TRACE_LEVEL_ERROR, "%s kmalloc failed", __func__); vos_mem_free(channelInfo.ChannelList); - channelInfo.ChannelList = NULL; return; } vos_mem_copy(scanReq.ChannelInfo.ChannelList, channelInfo.ChannelList, channelInfo.numOfChannels); scanReq.ChannelInfo.numOfChannels = channelInfo.numOfChannels; vos_mem_free(channelInfo.ChannelList); - channelInfo.ChannelList = NULL; } scanReq.scanType = eSIR_PASSIVE_SCAN; @@ -5023,6 +4868,13 @@ void hdd_wlan_initial_scan(hdd_adapter_t *pAdapter) vos_mem_free(scanReq.ChannelInfo.ChannelList); } +struct fullPowerContext +{ + struct completion completion; + unsigned int magic; +}; +#define POWER_CONTEXT_MAGIC 0x504F5752 //POWR + /**--------------------------------------------------------------------------- \brief hdd_full_power_callback() - HDD full power callback function @@ -5038,7 +4890,7 @@ void hdd_wlan_initial_scan(hdd_adapter_t *pAdapter) --------------------------------------------------------------------------*/ static void hdd_full_power_callback(void *callbackContext, eHalStatus status) { - struct statsContext *pContext = callbackContext; + struct fullPowerContext *pContext = callbackContext; hddLog(VOS_TRACE_LEVEL_INFO, "%s: context = %p, status = %d", __func__, pContext, status); @@ -5051,32 +4903,24 @@ static void hdd_full_power_callback(void *callbackContext, eHalStatus status) return; } - /* there is a race condition that exists between this callback - function and the caller since the caller could time out either - before or while this code is executing. we use a spinlock to - serialize these actions */ - spin_lock(&hdd_context_lock); + /* there is a race condition that exists between this callback function + and the caller since the caller could time out either before or + while this code is executing. we'll assume the timeout hasn't + occurred, but we'll verify that right before we save our work */ if (POWER_CONTEXT_MAGIC != pContext->magic) { /* the caller presumably timed out so there is nothing we can do */ - spin_unlock(&hdd_context_lock); hddLog(VOS_TRACE_LEVEL_WARN, "%s: Invalid context, magic [%08x]", __func__, pContext->magic); return; } - /* context is valid so caller is still waiting */ - - /* paranoia: invalidate the magic */ - pContext->magic = 0; - - /* notify the caller */ + /* the race is on. caller could have timed out immediately after + we verified the magic, but if so, caller will wait a short time + for us to notify the caller, so the context will stay valid */ complete(&pContext->completion); - - /* serialization is complete */ - spin_unlock(&hdd_context_lock); } /**--------------------------------------------------------------------------- @@ -5097,7 +4941,7 @@ void hdd_wlan_exit(hdd_context_t *pHddCtx) VOS_STATUS vosStatus; struct wiphy *wiphy = pHddCtx->wiphy; hdd_adapter_t* pAdapter; - struct statsContext powerContext; + struct fullPowerContext powerContext; long lrc; ENTER(); @@ -5174,22 +5018,7 @@ void hdd_wlan_exit(hdd_context_t *pHddCtx) // we are about to Request Full Power, and since that is synchronized, // the expectation is that by the time Request Full Power has completed, // all scans will be cancelled. - hdd_abort_mac_scan(pHddCtx, eCSR_SCAN_ABORT_DEFAULT); - - //Stop the traffic monitor timer - if ( VOS_TIMER_STATE_RUNNING == - vos_timer_getCurrentState(&pHddCtx->tx_rx_trafficTmr)) - { - vos_timer_stop(&pHddCtx->tx_rx_trafficTmr); - } - - // Destroy the traffic monitor timer - if (!VOS_IS_STATUS_SUCCESS(vos_timer_destroy( - &pHddCtx->tx_rx_trafficTmr))) - { - hddLog(VOS_TRACE_LEVEL_ERROR, - "%s: Cannot deallocate Traffic monitor timer", __func__); - } + hdd_abort_mac_scan( pHddCtx ); //Disable IMPS/BMPS as we do not want the device to enter any power //save mode during shutdown @@ -5212,10 +5041,21 @@ void hdd_wlan_exit(hdd_context_t *pHddCtx) lrc = wait_for_completion_interruptible_timeout( &powerContext.completion, msecs_to_jiffies(WLAN_WAIT_TIME_POWER)); + /* either we have a response or we timed out + either way, first invalidate our magic */ + powerContext.magic = 0; if (lrc <= 0) { hddLog(VOS_TRACE_LEVEL_ERROR, "%s: %s while requesting full power", __func__, (0 == lrc) ? "timeout" : "interrupt"); + /* there is a race condition such that the callback + function could be executing at the same time we are. of + primary concern is if the callback function had already + verified the "magic" but hasn't yet set the completion + variable. Since the completion variable is on our + stack, we'll delay just a bit to make sure the data is + still valid if that is the case */ + msleep(50); } } else @@ -5223,25 +5063,11 @@ void hdd_wlan_exit(hdd_context_t *pHddCtx) hddLog(VOS_TRACE_LEVEL_ERROR, "%s: Request for Full Power failed, status %d", __func__, halStatus); + VOS_ASSERT(0); /* continue -- need to clean up as much as possible */ } } - /* either we never sent a request, we sent a request and received a - response or we sent a request and timed out. if we never sent a - request or if we sent a request and got a response, we want to - clear the magic out of paranoia. if we timed out there is a - race condition such that the callback function could be - executing at the same time we are. of primary concern is if the - callback function had already verified the "magic" but had not - yet set the completion variable when a timeout occurred. we - serialize these activities by invalidating the magic while - holding a shared spinlock which will cause us to block if the - callback is currently executing */ - spin_lock(&hdd_context_lock); - powerContext.magic = 0; - spin_unlock(&hdd_context_lock); - // Unregister the Net Device Notifier unregister_netdevice_notifier(&hdd_netdev_notifier); @@ -5295,16 +5121,6 @@ void hdd_wlan_exit(hdd_context_t *pHddCtx) wake_lock_destroy(&pHddCtx->sap_wake_lock); #endif -#ifdef CONFIG_ENABLE_LINUX_REG - vosStatus = vos_nv_close(); - if (!VOS_IS_STATUS_SUCCESS(vosStatus)) - { - VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, - "%s: Failed to close NV", __func__); - VOS_ASSERT( VOS_IS_STATUS_SUCCESS( vosStatus ) ); - } -#endif - //Close VOSS //This frees pMac(HAL) context. There should not be any call that requires pMac access after this. vos_close(pVosContext); @@ -5493,7 +5309,14 @@ void hdd_allow_suspend(void) #endif } -void hdd_prevent_suspend_timeout(v_U32_t timeout) +//Begin Mot IKHSS7-28961 : Incorrect emtpty scan results because of againg out +void hdd_prevent_suspend_after_scan(long hz) +{ + wake_lock_timeout(&wlan_wake_lock_scan, hz); +} +//END IKHSS7-28961 + +void hdd_allow_suspend_timeout(v_U32_t timeout) { #ifdef WLAN_OPEN_SOURCE wake_lock_timeout(&wlan_wake_lock, msecs_to_jiffies(timeout)); @@ -5663,33 +5486,6 @@ static boolean hdd_is_5g_supported(hdd_context_t * pHddCtx) /**--------------------------------------------------------------------------- - \brief hdd_11d_scan_done - callback to be executed when 11d scan is - completed to flush out the scan results - - 11d scan is done during driver load and is a passive scan on all - channels supported by the device, 11d scans may find some APs on - frequencies which are forbidden to be used in the regulatory domain - the device is operating in. If these APs are notified to the supplicant - it may try to connect to these APs, thus flush out all the scan results - which are present in SME after 11d scan is done. - - \return - eHalStatus - - --------------------------------------------------------------------------*/ -static eHalStatus hdd_11d_scan_done(tHalHandle halHandle, void *pContext, - tANI_U32 scanId, eCsrScanStatus status) -{ - ENTER(); - - sme_ScanFlushResult(halHandle, 0); - - EXIT(); - - return eHAL_STATUS_SUCCESS; -} - -/**--------------------------------------------------------------------------- - \brief hdd_wlan_startup() - HDD init function This is the driver startup code executed once a WLAN device has been detected @@ -5760,22 +5556,11 @@ int hdd_wlan_startup(struct device *dev ) init_completion(&pHddCtx->req_bmps_comp_var); init_completion(&pHddCtx->scan_info.scan_req_completion_event); init_completion(&pHddCtx->scan_info.abortscan_event_var); - init_completion(&pHddCtx->wiphy_channel_update_event); - init_completion(&pHddCtx->ssr_comp_var); spin_lock_init(&pHddCtx->schedScan_lock); hdd_list_init( &pHddCtx->hddAdapters, MAX_NUMBER_OF_ADAPTERS ); -#ifdef FEATURE_WLAN_TDLS - /* tdls_lock is initialized before an hdd_open_adapter ( which is - * invoked by other instances also) to protect the concurrent - * access for the Adapters by TDLS module. - */ - mutex_init(&pHddCtx->tdls_lock); -#endif - - pHddCtx->nEnableStrictRegulatoryForFCC = TRUE; // Load all config first as TL config is needed during vos_open pHddCtx->cfg_ini = (hdd_config_t*) kmalloc(sizeof(hdd_config_t), GFP_KERNEL); if(pHddCtx->cfg_ini == NULL) @@ -5795,6 +5580,7 @@ int hdd_wlan_startup(struct device *dev ) goto err_config; } + if (false == hdd_is_5g_supported(pHddCtx)) { //5Ghz is not supported. @@ -5805,24 +5591,14 @@ int hdd_wlan_startup(struct device *dev ) pHddCtx->cfg_ini->nBandCapability = 1; } } - - /* INI has been read, initialise the configuredMcastBcastFilter with - * INI value as this will serve as the default value - */ - pHddCtx->configuredMcastBcastFilter = pHddCtx->cfg_ini->mcastBcastFilterSetting; - hddLog(VOS_TRACE_LEVEL_INFO, "Setting configuredMcastBcastFilter: %d", - pHddCtx->cfg_ini->mcastBcastFilterSetting); /* * cfg80211: Initialization ... */ - if (VOS_FTM_MODE != hdd_get_conparam()) + if (0 < wlan_hdd_cfg80211_init(dev, wiphy, pHddCtx->cfg_ini)) { - if (0 < wlan_hdd_cfg80211_init(dev, wiphy, pHddCtx->cfg_ini)) - { - hddLog(VOS_TRACE_LEVEL_FATAL, - "%s: wlan_hdd_cfg80211_init return failure", __func__); - goto err_config; - } + hddLog(VOS_TRACE_LEVEL_FATAL, + "%s: wlan_hdd_cfg80211_init return failure", __func__); + goto err_config; } // Update VOS trace levels based upon the cfg.ini @@ -5838,8 +5614,6 @@ int hdd_wlan_startup(struct device *dev ) pHddCtx->cfg_ini->vosTraceEnableSME); hdd_vos_trace_enable(VOS_MODULE_ID_PE, pHddCtx->cfg_ini->vosTraceEnablePE); - hdd_vos_trace_enable(VOS_MODULE_ID_PMC, - pHddCtx->cfg_ini->vosTraceEnablePMC); hdd_vos_trace_enable(VOS_MODULE_ID_WDA, pHddCtx->cfg_ini->vosTraceEnableWDA); hdd_vos_trace_enable(VOS_MODULE_ID_SYS, @@ -5869,8 +5643,6 @@ int hdd_wlan_startup(struct device *dev ) goto err_free_hdd_context; } hddLog(VOS_TRACE_LEVEL_FATAL,"%s: FTM driver loaded success fully",__func__); - - vos_set_load_unload_in_progress(VOS_MODULE_ID_VOSS, FALSE); return VOS_STATUS_SUCCESS; } @@ -6152,8 +5924,6 @@ int hdd_wlan_startup(struct device *dev ) sme_UpdateChannelConfig(pHddCtx->hHal); #endif - sme_Register11dScanDoneCallback(pHddCtx->hHal, hdd_11d_scan_done); - /* Register with platform driver as client for Suspend/Resume */ status = hddRegisterPmOps(pHddCtx); if ( !VOS_IS_STATUS_SUCCESS( status ) ) @@ -6245,24 +6015,10 @@ int hdd_wlan_startup(struct device *dev ) vos_set_load_unload_in_progress(VOS_MODULE_ID_VOSS, FALSE); hdd_allow_suspend(); -#ifndef CONFIG_ENABLE_LINUX_REG - /*updating wiphy so that regulatory user hints can be processed*/ - if (wiphy) - { - regulatory_hint(wiphy, "00"); - } -#endif + // Initialize the restart logic wlan_hdd_restart_init(pHddCtx); - //Register the traffic monitor timer now - if ( pHddCtx->cfg_ini->dynSplitscan) - { - vos_timer_init(&pHddCtx->tx_rx_trafficTmr, - VOS_TIMER_TYPE_SW, - hdd_tx_rx_pkt_cnt_stat_timer_handler, - (void *)pHddCtx); - } goto success; err_nl_srv: @@ -6366,6 +6122,7 @@ static int hdd_driver_init( void) #ifdef WLAN_OPEN_SOURCE wake_lock_init(&wlan_wake_lock, WAKE_LOCK_SUSPEND, "wlan"); + wake_lock_init(&wlan_wake_lock_scan, WAKE_LOCK_SUSPEND, "wlan_scan"); //Mot IKHSS7-28961: Incorrect empty scan #endif pr_info("%s: loading driver v%s\n", WLAN_MODULE_NAME, @@ -6481,6 +6238,7 @@ static int hdd_driver_init( void) #ifdef WLAN_OPEN_SOURCE wake_lock_destroy(&wlan_wake_lock); + wake_lock_destroy(&wlan_wake_lock_scan); //Mot IKHSS7-28961: Incorrect empty scan results #endif pr_err("%s: driver load failure\n", WLAN_MODULE_NAME); } @@ -6538,7 +6296,7 @@ static void hdd_driver_exit(void) { hdd_context_t *pHddCtx = NULL; v_CONTEXT_t pVosContext = NULL; - unsigned long rc = 0; + int retry = 0; pr_info("%s: unloading driver v%s\n", WLAN_MODULE_NAME, QWLAN_VERSIONSTR); @@ -6560,21 +6318,18 @@ static void hdd_driver_exit(void) } else { - INIT_COMPLETION(pHddCtx->ssr_comp_var); - - if (pHddCtx->isLogpInProgress) - { + while(isWDresetInProgress()) { VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:SSR in Progress; block rmmod !!!", __func__); - rc = wait_for_completion_timeout(&pHddCtx->ssr_comp_var, - msecs_to_jiffies(30000)); - if(!rc) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:SSR timedout, fatal error", __func__); - VOS_BUG(0); + "%s:SSR in Progress; block rmmod for 1 second!!!", __func__); + msleep(1000); + + if (retry++ == HDD_MOD_EXIT_SSR_MAX_RETRIES) { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:SSR never completed, fatal error", __func__); + VOS_BUG(0); } - } + } + pHddCtx->isLoadUnloadInProgress = TRUE; vos_set_load_unload_in_progress(VOS_MODULE_ID_VOSS, TRUE); @@ -6599,6 +6354,7 @@ static void hdd_driver_exit(void) done: #ifdef WLAN_OPEN_SOURCE wake_lock_destroy(&wlan_wake_lock); + wake_lock_destroy(&wlan_wake_lock_scan); //Mot IKHSS7-28961: Incorrect empty scan results #endif pr_info("%s: driver unloaded\n", WLAN_MODULE_NAME); } @@ -6836,6 +6592,26 @@ tVOS_CONCURRENCY_MODE hdd_get_concurrency_mode ( void ) return VOS_STA; } +// BEGIN MOTOROLA IKJB42MAIN-274, dpn473, 01/02/2013, Add flag to disable/enable MCC mode +v_U8_t hdd_get_mcc_mode( void ) +{ + v_CONTEXT_t pVosContext = vos_get_global_context( VOS_MODULE_ID_HDD, NULL ); + hdd_context_t *pHddCtx; + + if (NULL != pVosContext) + { + pHddCtx = vos_get_context( VOS_MODULE_ID_HDD, pVosContext); + if (NULL != pHddCtx) + { + return (v_U8_t)pHddCtx->cfg_ini->enableMCC; + } + } + /* we are in an invalid state :( */ + hddLog(LOGE, "%s: Invalid context", __func__); + return (v_U8_t)0; +} +// END IKJB42MAIN-274 + /* Decide whether to allow/not the apps power collapse. * Allow apps power collapse if we are in connected state. * if not, allow only if we are in IMPS */ @@ -7013,18 +6789,8 @@ static VOS_STATUS wlan_hdd_framework_restart(hdd_context_t *pHddCtx) { VOS_STATUS status = VOS_STATUS_SUCCESS; hdd_adapter_list_node_t *pAdapterNode = NULL, *pNext = NULL; - int len = (sizeof (struct ieee80211_mgmt)); - struct ieee80211_mgmt *mgmt = NULL; - - /* Prepare the DEAUTH managment frame with reason code */ - mgmt = kzalloc(len, GFP_KERNEL); - if(mgmt == NULL) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s: memory allocation failed (%d bytes)", __func__, len); - return VOS_STATUS_E_NOMEM; - } - mgmt->u.deauth.reason_code = WLAN_REASON_DISASSOC_LOW_ACK; + unsigned char restart_notification[MAX_RESTART_DRIVER_EVENT_LENGTH + 1]; + union iwreq_data wrqu; /* Iterate over all adapters/devices */ status = hdd_get_front_adapter ( pHddCtx, &pAdapterNode ); @@ -7039,28 +6805,22 @@ static VOS_STATUS wlan_hdd_framework_restart(hdd_context_t *pHddCtx) pAdapterNode->pAdapter->dev->name, pAdapterNode->pAdapter->device_mode, pHddCtx->hdd_restart_retries + 1); - /* - * CFG80211 event to restart the driver - * - * 'cfg80211_send_unprot_deauth' sends a - * NL80211_CMD_UNPROT_DEAUTHENTICATE event to supplicant at any state - * of SME(Linux Kernel) state machine. - * - * Reason code WLAN_REASON_DISASSOC_LOW_ACK is currently used to restart - * the driver. - * - */ - - cfg80211_send_unprot_deauth(pAdapterNode->pAdapter->dev, (u_int8_t*)mgmt, len ); + + /* Notify the wpa supplicant of wcnss restart by sending the custom event */ + memset(&wrqu, 0 , sizeof(wrqu)); + memset(restart_notification, 0, sizeof(restart_notification)); + + strlcpy(restart_notification, "QCOM: RESTART_DRIVER_DXE", sizeof(restart_notification)); + + wrqu.data.pointer = restart_notification; + wrqu.data.length = strlen(restart_notification); + + wireless_send_event(pAdapterNode->pAdapter->dev, IWEVCUSTOM, &wrqu, restart_notification); } status = hdd_get_next_adapter ( pHddCtx, pAdapterNode, &pNext ); pAdapterNode = pNext; } while((NULL != pAdapterNode) && (VOS_STATUS_SUCCESS == status)); - - /* Free the allocated management frame */ - kfree(mgmt); - /* Retry until we unload or reach max count */ if(++pHddCtx->hdd_restart_retries < WLAN_HDD_RESTART_RETRY_MAX_CNT) vos_timer_start(&pHddCtx->hdd_restart_timer, WLAN_HDD_RESTART_RETRY_DELAY_MS); @@ -7132,32 +6892,6 @@ VOS_STATUS hdd_issta_p2p_clientconnected(hdd_context_t *pHddCtx) return sme_isSta_p2p_clientConnected(pHddCtx->hHal); } -int wlan_hdd_scan_abort(hdd_adapter_t *pAdapter) -{ - hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); - hdd_scaninfo_t *pScanInfo = NULL; - int status; - - pScanInfo = &pHddCtx->scan_info; - if (pScanInfo->mScanPending) - { - INIT_COMPLETION(pScanInfo->abortscan_event_var); - hdd_abort_mac_scan(pHddCtx, eCSR_SCAN_ABORT_DEFAULT); - - status = wait_for_completion_interruptible_timeout( - &pScanInfo->abortscan_event_var, - msecs_to_jiffies(5000)); - if ((!status) || (status == -ERESTARTSYS)) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: Timeout occurred while waiting for abort scan", - __func__); - return -ETIMEDOUT; - } - } - return status; -} - //Register the module init/exit functions module_init(hdd_module_init); module_exit(hdd_module_exit); diff --git a/drivers/staging/prima/CORE/HDD/src/wlan_hdd_oemdata.c b/drivers/staging/prima/CORE/HDD/src/wlan_hdd_oemdata.c index 1eb61ef9212..c796abdf3e9 100644 --- a/drivers/staging/prima/CORE/HDD/src/wlan_hdd_oemdata.c +++ b/drivers/staging/prima/CORE/HDD/src/wlan_hdd_oemdata.c @@ -226,14 +226,8 @@ int iw_set_oem_data_req( vos_mem_zero(&oemDataReqConfig, sizeof(tOemDataReqConfig)); - if (copy_from_user((&oemDataReqConfig)->oemDataReq, - pOemDataReq->oemDataReq, OEM_DATA_REQ_SIZE)) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s: copy_from_user() failed!", __func__); - return -EFAULT; - } - + vos_mem_copy((&oemDataReqConfig)->oemDataReq, pOemDataReq->oemDataReq, OEM_DATA_REQ_SIZE); + status = sme_OemDataReq(WLAN_HDD_GET_HAL_CTX(pAdapter), pAdapter->sessionId, &oemDataReqConfig, diff --git a/drivers/staging/prima/CORE/HDD/src/wlan_hdd_p2p.c b/drivers/staging/prima/CORE/HDD/src/wlan_hdd_p2p.c index e89c717acc3..4a902851539 100644 --- a/drivers/staging/prima/CORE/HDD/src/wlan_hdd_p2p.c +++ b/drivers/staging/prima/CORE/HDD/src/wlan_hdd_p2p.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2014, The Linux Foundation. All rights reserved. + * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -182,7 +182,6 @@ eHalStatus wlan_hdd_remain_on_channel_callback( tHalHandle hHal, void* pCtx, } vos_mem_free( pRemainChanCtx ); - pRemainChanCtx = NULL; complete(&pAdapter->cancel_rem_on_chan_var); return eHAL_STATUS_SUCCESS; } @@ -488,13 +487,6 @@ int wlan_hdd_cfg80211_cancel_remain_on_channel( struct wiphy *wiphy, hddLog( LOGE, "%s: timeout waiting for remain on channel ready indication", __func__); - - if (pHddCtx->isLogpInProgress) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: LOGP in Progress. Ignore!!!", __func__); - return -EAGAIN; - } } INIT_COMPLETION(pAdapter->cancel_rem_on_chan_var); /* Issue abort remain on chan request to sme. @@ -728,11 +720,7 @@ int wlan_hdd_action( struct wiphy *wiphy, struct net_device *dev, } goto err_rem_channel; } - /* This will extend timer in LIM when sending Any action frame - * It will cover remain on channel timer till next action frame - * in rx direction. - */ - extendedWait = (tANI_U16)wait; + /* Wait for driver to be ready on the requested channel */ status = wait_for_completion_interruptible_timeout( &pAdapter->offchannel_tx_event, @@ -953,21 +941,12 @@ int hdd_setP2pNoa( struct net_device *dev, tANI_U8 *command ) tP2pPsConfig NoA; int count, duration, start_time; char *param; - tANI_U8 ret = 0; param = strnchr(command, strlen(command), ' '); if (param == NULL) return -EINVAL; param++; - ret = sscanf(param, "%d %d %d", &count, &start_time, &duration); - if (ret < 3) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: P2P_SET GO NoA: fail to read param " - "count=%d duration=%d interval=%d \n", - __func__, count, start_time, duration); - return -EINVAL; - } + sscanf(param, "%d %d %d", &count, &start_time, &duration); VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "%s: P2P_SET GO NoA: count=%d duration=%d interval=%d \n", __func__, count, start_time, duration); @@ -1035,21 +1014,12 @@ int hdd_setP2pOpps( struct net_device *dev, tANI_U8 *command ) tP2pPsConfig NoA; char *param; int legacy_ps, opp_ps, ctwindow; - tANI_U8 ret = 0; param = strnchr(command, strlen(command), ' '); if (param == NULL) return -EINVAL; param++; - ret = sscanf(param, "%d %d %d", &legacy_ps, &opp_ps, &ctwindow); - if (ret < 3) - { - VOS_TRACE (VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: P2P_SET GO PS: fail to read param " - " legacy_ps=%d opp_ps=%d ctwindow=%d \n", - __func__, legacy_ps, opp_ps, ctwindow); - return -EINVAL; - } + sscanf(param, "%d %d %d", &legacy_ps, &opp_ps, &ctwindow); VOS_TRACE (VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "%s: P2P_SET GO PS: legacy_ps=%d opp_ps=%d ctwindow=%d \n", __func__, legacy_ps, opp_ps, ctwindow); @@ -1371,7 +1341,7 @@ void hdd_sendMgmtFrameOverMonitorIface( hdd_adapter_t *pMonAdapter, hddLog( LOG1, FL("Success")); } else - hddLog( LOGE, FL("Failed %d"), rxstat); + hddLog( LOGE, FL("Failed %d"), rxstat); return ; } @@ -1388,8 +1358,6 @@ void hdd_indicateMgmtFrame( hdd_adapter_t *pAdapter, tANI_U8 subType = 0; tActionFrmType actionFrmType; hdd_cfg80211_state_t *cfgState = NULL; - hdd_context_t *pHddCtx = NULL; - hdd_scaninfo_t *pScanInfo = NULL; hddLog(VOS_TRACE_LEVEL_INFO, "%s: Frame Type = %d Frame Length = %d\n", __func__, frameType, nFrameLength); @@ -1448,13 +1416,6 @@ void hdd_indicateMgmtFrame( hdd_adapter_t *pAdapter, return; } - pHddCtx = WLAN_HDD_GET_CTX(pAdapter); - if (NULL == pHddCtx) - { - hddLog(VOS_TRACE_LEVEL_FATAL,"%s: HDD Context Null Pointer", __func__); - return; - } - if ((WLAN_HDD_SOFTAP == pAdapter->device_mode) || (WLAN_HDD_P2P_GO == pAdapter->device_mode )) { @@ -1530,18 +1491,7 @@ void hdd_indicateMgmtFrame( hdd_adapter_t *pAdapter, } } #endif - if( (actionFrmType == WLAN_HDD_PROV_DIS_REQ) || - (actionFrmType == WLAN_HDD_GO_NEG_REQ) ) - { - pScanInfo = &pHddCtx->scan_info; - if((pScanInfo != NULL) && (pHddCtx->scan_info.mScanPending)) - { - hddLog(LOGE,"Action frame received when Scanning is in" - " progress. Abort Scan."); - hdd_abort_mac_scan(pAdapter->pHddCtx, - eCSR_SCAN_ABORT_DEFAULT); - } - } + if (((actionFrmType == WLAN_HDD_PROV_DIS_RESP) && (cfgState->actionFrmState == HDD_PD_REQ_ACK_PENDING)) || ((actionFrmType == WLAN_HDD_GO_NEG_RESP) && diff --git a/drivers/staging/prima/CORE/HDD/src/wlan_hdd_scan.c b/drivers/staging/prima/CORE/HDD/src/wlan_hdd_scan.c index e986fa41548..7ca4896279b 100644 --- a/drivers/staging/prima/CORE/HDD/src/wlan_hdd_scan.c +++ b/drivers/staging/prima/CORE/HDD/src/wlan_hdd_scan.c @@ -740,20 +740,10 @@ int iw_set_scan(struct net_device *dev, struct iw_request_info *info, memcpy( pHddCtx->scan_info.scanAddIE.addIEdata, pwextBuf->genIE.addIEdata, pwextBuf->genIE.length ); pHddCtx->scan_info.scanAddIE.length = pwextBuf->genIE.length; - /* Maximum length of each IE is SIR_MAC_MAX_IE_LENGTH */ - if (SIR_MAC_MAX_IE_LENGTH >= pwextBuf->genIE.length) - { - memcpy( pwextBuf->roamProfile.addIEScan, - pHddCtx->scan_info.scanAddIE.addIEdata, - pHddCtx->scan_info.scanAddIE.length); - pwextBuf->roamProfile.nAddIEScanLength = - pHddCtx->scan_info.scanAddIE.length; - } - else - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "Invalid ScanIE, Length is %d", pwextBuf->genIE.length); - } + + pwextBuf->roamProfile.pAddIEScan = pHddCtx->scan_info.scanAddIE.addIEdata; + pwextBuf->roamProfile.nAddIEScanLength = pHddCtx->scan_info.scanAddIE.length; + /* clear previous genIE after use it */ memset( &pwextBuf->genIE, 0, sizeof(pwextBuf->genIE) ); } @@ -959,7 +949,8 @@ int iw_set_cscan(struct net_device *dev, struct iw_request_info *info, int i, j, ssid_start; hdd_scan_pending_option_e scanPendingOption = WEXT_SCAN_PENDING_GIVEUP; - str_ptr = extra; + /* save the original buffer */ + str_ptr = wrqu->data.pointer; i = WEXT_CSCAN_HEADER_SIZE; @@ -1130,20 +1121,10 @@ int iw_set_cscan(struct net_device *dev, struct iw_request_info *info, memcpy( pHddCtx->scan_info.scanAddIE.addIEdata, pwextBuf->genIE.addIEdata, pwextBuf->genIE.length ); pHddCtx->scan_info.scanAddIE.length = pwextBuf->genIE.length; - if (SIR_MAC_MAX_IE_LENGTH >= pwextBuf->genIE.length) - { - memcpy( pwextBuf->roamProfile.addIEScan, - pHddCtx->scan_info.scanAddIE.addIEdata, - pHddCtx->scan_info.scanAddIE.length); - pwextBuf->roamProfile.nAddIEScanLength = - pHddCtx->scan_info.scanAddIE.length; - } - else - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "Invalid ScanIE, Length is %d", - pwextBuf->genIE.length); - } + + pwextBuf->roamProfile.pAddIEScan = pHddCtx->scan_info.scanAddIE.addIEdata; + pwextBuf->roamProfile.nAddIEScanLength = pHddCtx->scan_info.scanAddIE.length; + /* clear previous genIE after use it */ memset( &pwextBuf->genIE, 0, sizeof(pwextBuf->genIE) ); } @@ -1192,8 +1173,8 @@ exit_point: } /* Abort any MAC scan if in progress */ -void hdd_abort_mac_scan(hdd_context_t* pHddCtx, eCsrAbortReason reason) +void hdd_abort_mac_scan(hdd_context_t* pHddCtx) { - sme_AbortMacScan(pHddCtx->hHal, reason); + sme_AbortMacScan(pHddCtx->hHal); } diff --git a/drivers/staging/prima/CORE/HDD/src/wlan_hdd_softap_tx_rx.c b/drivers/staging/prima/CORE/HDD/src/wlan_hdd_softap_tx_rx.c index e571c48cbd7..30236e522a0 100644 --- a/drivers/staging/prima/CORE/HDD/src/wlan_hdd_softap_tx_rx.c +++ b/drivers/staging/prima/CORE/HDD/src/wlan_hdd_softap_tx_rx.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2014, The Linux Foundation. All rights reserved. + * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -187,7 +187,7 @@ VOS_STATUS hdd_stop_trafficMonitor( hdd_adapter_t *pAdapter ) status = wlan_hdd_validate_context(pHddCtx); - if (-ENODEV == status) + if (0 != status) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "%s: HDD context is not valid", __func__); @@ -209,7 +209,7 @@ VOS_STATUS hdd_stop_trafficMonitor( hdd_adapter_t *pAdapter ) vos_lock_destroy(&pHddCtx->traffic_monitor.trafficLock); pHddCtx->traffic_monitor.isInitialized = 0; } - return VOS_STATUS_SUCCESS; + return status; } /**============================================================================ @@ -261,7 +261,6 @@ static VOS_STATUS hdd_softap_flush_tx_queues( hdd_adapter_t *pAdapter ) pAdapter->aStaInfo[STAId].txSuspended[i] = VOS_FALSE; spin_unlock_bh(&pAdapter->aStaInfo[STAId].wmm_tx_queue[i].lock); } - pAdapter->aStaInfo[STAId].vosLowResource = VOS_FALSE; } spin_unlock_bh( &pAdapter->staInfo_lock ); @@ -385,22 +384,6 @@ int hdd_softap_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) netif_stop_subqueue(dev, skb_get_queue_mapping(skb)); txSuspended = VOS_TRUE; } - - /* If 3/4th of the max queue size is used then enable the flag. - * This flag indicates to place the DHCP packets in VOICE AC queue.*/ - if (WLANTL_AC_BE == ac) - { - if (pAdapter->aStaInfo[STAId].wmm_tx_queue[ac].count >= HDD_TX_QUEUE_LOW_WATER_MARK) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, - "%s: TX queue for Best Effort AC is 3/4th full", __func__); - pAdapter->aStaInfo[STAId].vosLowResource = VOS_TRUE; - } - else - { - pAdapter->aStaInfo[STAId].vosLowResource = VOS_FALSE; - } - } spin_unlock(&pAdapter->aStaInfo[STAId].wmm_tx_queue[ac].lock); if (VOS_TRUE == txSuspended) @@ -439,7 +422,6 @@ int hdd_softap_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) ++pAdapter->hdd_stats.hddTxRxStats.txXmitQueued; ++pAdapter->hdd_stats.hddTxRxStats.txXmitQueuedAC[ac]; - ++pAdapter->hdd_stats.hddTxRxStats.pkt_tx_count; if (1 == pktListSize) { @@ -653,9 +635,7 @@ VOS_STATUS hdd_softap_init_tx_rx( hdd_adapter_t *pAdapter ) HDD_SOFTAP_VI_WEIGHT_DEFAULT, HDD_SOFTAP_VO_WEIGHT_DEFAULT }; - pAdapter->isVosOutOfResource = VOS_FALSE; - pAdapter->isVosLowResource = VOS_FALSE; vos_mem_zero(&pAdapter->stats, sizeof(struct net_device_stats)); @@ -911,7 +891,7 @@ VOS_STATUS hdd_softap_tx_complete_cbk( v_VOID_t *vosContext, //Return the skb to the OS status = vos_pkt_get_os_packet( pVosPacket, &pOsPkt, VOS_TRUE ); - if ((!VOS_IS_STATUS_SUCCESS(status)) || (!pOsPkt)) + if(!VOS_IS_STATUS_SUCCESS( status )) { //This is bad but still try to free the VOSS resources if we can VOS_TRACE( VOS_MODULE_ID_HDD_SOFTAP, VOS_TRACE_LEVEL_ERROR,"%s: Failure extracting skb from vos pkt", __func__); @@ -993,28 +973,12 @@ VOS_STATUS hdd_softap_tx_fetch_packet_cbk( v_VOID_t *vosContext, return VOS_STATUS_E_FAILURE; } - STAId = *pStaId; - if (STAId >= WLAN_MAX_STA_COUNT) - { - VOS_TRACE( VOS_MODULE_ID_HDD_SOFTAP, VOS_TRACE_LEVEL_ERROR, - "%s: Invalid STAId %d passed by TL", __func__, STAId); - return VOS_STATUS_E_FAILURE; - } - - pAdapter = pHddCtx->sta_to_adapter[STAId]; - if ((NULL == pAdapter) || (WLAN_HDD_ADAPTER_MAGIC != pAdapter->magic)) + pAdapter = pHddCtx->sta_to_adapter[*pStaId]; + if( NULL == pAdapter ) { VOS_ASSERT(0); return VOS_STATUS_E_FAILURE; } - - if (FALSE == pAdapter->aStaInfo[STAId].isUsed ) - { - VOS_TRACE( VOS_MODULE_ID_HDD_SOFTAP, VOS_TRACE_LEVEL_ERROR, - "%s: Unregistered STAId %d passed by TL", __func__, STAId); - return VOS_STATUS_E_FAILURE; - } - /* Monitor traffic */ if ( pHddCtx->cfg_ini->enableTrafficMonitor ) { @@ -1037,6 +1001,21 @@ VOS_STATUS hdd_softap_tx_fetch_packet_cbk( v_VOID_t *vosContext, ++pAdapter->hdd_stats.hddTxRxStats.txFetched; + STAId = *pStaId; + if (STAId >= WLAN_MAX_STA_COUNT) + { + VOS_TRACE( VOS_MODULE_ID_HDD_SOFTAP, VOS_TRACE_LEVEL_ERROR, + "%s: Invalid STAId %d passed by TL", __func__, STAId); + return VOS_STATUS_E_FAILURE; + } + + if (FALSE == pAdapter->aStaInfo[STAId].isUsed ) + { + VOS_TRACE( VOS_MODULE_ID_HDD_SOFTAP, VOS_TRACE_LEVEL_ERROR, + "%s: Unregistered STAId %d passed by TL", __func__, STAId); + return VOS_STATUS_E_FAILURE; + } + *ppVosPacket = NULL; //Make sure the AC being asked for is sane @@ -1065,7 +1044,7 @@ VOS_STATUS hdd_softap_tx_fetch_packet_cbk( v_VOID_t *vosContext, //Remember VOS is in a low resource situation pAdapter->isVosOutOfResource = VOS_TRUE; ++pAdapter->hdd_stats.hddTxRxStats.txFetchLowResources; - VOS_TRACE( VOS_MODULE_ID_HDD_SOFTAP, VOS_TRACE_LEVEL_WARN, + VOS_TRACE( VOS_MODULE_ID_HDD_SOFTAP, VOS_TRACE_LEVEL_ERROR, "%s: VOSS in Low Resource scenario", __func__); //TL needs to handle this case. VOS_STATUS_E_EMPTY is returned when the queue is empty. return VOS_STATUS_E_FAILURE; @@ -1315,7 +1294,6 @@ VOS_STATUS hdd_softap_rx_packet_cbk( v_VOID_t *vosContext, VOS_ASSERT(0); return VOS_STATUS_E_FAILURE; } - /* Monitor traffic */ if ( pHddCtx->cfg_ini->enableTrafficMonitor ) { @@ -1419,7 +1397,6 @@ VOS_STATUS hdd_softap_rx_packet_cbk( v_VOID_t *vosContext, if (NET_RX_SUCCESS == rxstat) { ++pAdapter->hdd_stats.hddTxRxStats.rxDelivered; - ++pAdapter->hdd_stats.hddTxRxStats.pkt_rx_count; } else { @@ -1604,15 +1581,6 @@ VOS_STATUS hdd_softap_RegisterSTA( hdd_adapter_t *pAdapter, return vosStatus; } - //Timer value should be in milliseconds - if ( pHddCtx->cfg_ini->dynSplitscan && - ( VOS_TIMER_STATE_RUNNING != - vos_timer_getCurrentState(&pHddCtx->tx_rx_trafficTmr))) - { - vos_timer_start(&pHddCtx->tx_rx_trafficTmr, - pHddCtx->cfg_ini->trafficMntrTmrForSplitScan); - } - // if ( WPA ), tell TL to go to 'connected' and after keys come to the driver, // then go to 'authenticated'. For all other authentication types (those that do // not require upper layer authentication) we can put TL directly into 'authenticated' @@ -1684,18 +1652,8 @@ VOS_STATUS hdd_softap_Deregister_BC_STA( hdd_adapter_t *pAdapter) VOS_STATUS hdd_softap_stop_bss( hdd_adapter_t *pAdapter) { - hdd_context_t *pHddCtx; VOS_STATUS vosStatus = VOS_STATUS_E_FAILURE; v_U8_t staId = 0; - pHddCtx = WLAN_HDD_GET_CTX(pAdapter); - - /*bss deregister is not allowed during wlan driver loading or unloading*/ - if (pHddCtx->isLoadUnloadInProgress) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s:Loading_unloading in Progress. Ignore!!!",__func__); - return VOS_STATUS_E_PERM; - } vosStatus = hdd_softap_Deregister_BC_STA( pAdapter); @@ -1782,8 +1740,7 @@ VOS_STATUS hdd_softap_GetConnectedStaId(hdd_adapter_t *pAdapter, v_U8_t *staId) for (i = 0; i < WLAN_MAX_STA_COUNT; i++) { - if (pAdapter->aStaInfo[i].isUsed && - (!vos_is_macaddr_broadcast(&pAdapter->aStaInfo[i].macAddrSTA))) + if (pAdapter->aStaInfo[i].isUsed) { *staId = i; return VOS_STATUS_SUCCESS; diff --git a/drivers/staging/prima/CORE/HDD/src/wlan_hdd_tdls.c b/drivers/staging/prima/CORE/HDD/src/wlan_hdd_tdls.c index d1fe16b9b83..8c219204c9f 100644 --- a/drivers/staging/prima/CORE/HDD/src/wlan_hdd_tdls.c +++ b/drivers/staging/prima/CORE/HDD/src/wlan_hdd_tdls.c @@ -41,11 +41,11 @@ #include "wlan_hdd_cfg80211.h" +static struct mutex tdls_lock; static tANI_S32 wlan_hdd_get_tdls_discovery_peer_cnt(tdlsCtx_t *pHddTdlsCtx); static tANI_S32 wlan_hdd_tdls_peer_reset_discovery_processed(tdlsCtx_t *pHddTdlsCtx); static void wlan_hdd_tdls_timers_destroy(tdlsCtx_t *pHddTdlsCtx); static void wlan_hdd_tdls_peer_timers_destroy(tdlsCtx_t *pHddTdlsCtx); -int wpa_tdls_is_allowed_force_peer(tdlsCtx_t *pHddTdlsCtx, u8 *mac); #ifdef CONFIG_TDLS_IMPLICIT static void wlan_hdd_tdls_pre_setup(struct work_struct *work); #endif @@ -76,6 +76,7 @@ static void wlan_hdd_tdls_pre_setup_init_work(tdlsCtx_t * pHddTdlsCtx, pHddTdlsCtx->curr_candidate = curr_candidate; pHddTdlsCtx->magic = TDLS_CTX_MAGIC; + INIT_WORK(&pHddTdlsCtx->implicit_setup, wlan_hdd_tdls_pre_setup); schedule_work(&pHddTdlsCtx->implicit_setup); } } @@ -86,22 +87,28 @@ static v_VOID_t wlan_hdd_tdls_start_peer_discover_timer(tdlsCtx_t *pHddTdlsCtx, v_U32_t discoveryExpiry) { hdd_station_ctx_t *pHddStaCtx; - hdd_context_t *pHddCtx; - - if ((NULL == pHddTdlsCtx)) - return; - if ((NULL == pHddTdlsCtx->pAdapter) ) - return; - - pHddCtx = WLAN_HDD_GET_CTX( pHddTdlsCtx->pAdapter ); - - if (NULL == pHddCtx) + if ( mutexLock ) + { + if (mutex_lock_interruptible(&tdls_lock)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: unable to lock list: %d", __func__, __LINE__); + return; + } + } + if (NULL == pHddTdlsCtx) + { + if ( mutexLock ) + mutex_unlock(&tdls_lock); return; + } - if ( mutexLock ) + if (NULL == pHddTdlsCtx->pAdapter) { - mutex_lock(&pHddCtx->tdls_lock); + if ( mutexLock ) + mutex_unlock(&tdls_lock); + return; } pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pHddTdlsCtx->pAdapter); @@ -114,7 +121,7 @@ static v_VOID_t wlan_hdd_tdls_start_peer_discover_timer(tdlsCtx_t *pHddTdlsCtx, pHddTdlsCtx->ap_rssi); if ( mutexLock ) - mutex_unlock(&pHddCtx->tdls_lock); + mutex_unlock(&tdls_lock); return; } @@ -127,25 +134,29 @@ static v_VOID_t wlan_hdd_tdls_discover_peer_cb( v_PVOID_t userData ) struct list_head *pos; hddTdlsPeer_t *curr_peer; hdd_station_ctx_t *pHddStaCtx; - hdd_context_t *pHddCtx; tdlsCtx_t *pHddTdlsCtx = (tdlsCtx_t *)userData; int discover_req_sent = 0; v_U32_t discover_expiry = TDLS_SUB_DISCOVERY_PERIOD; tANI_BOOLEAN doMutexLock = eANI_BOOLEAN_TRUE; - if ((NULL == pHddTdlsCtx)) - return; + if (mutex_lock_interruptible(&tdls_lock)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: unable to lock list : %d", __func__, __LINE__); + return; + } - if (NULL == pHddTdlsCtx->pAdapter) + if (NULL == pHddTdlsCtx) + { + mutex_unlock(&tdls_lock); return; + } - pHddCtx = WLAN_HDD_GET_CTX( pHddTdlsCtx->pAdapter ); - - if (NULL == pHddCtx) + if (NULL == pHddTdlsCtx->pAdapter) + { + mutex_unlock(&tdls_lock); return; - - - mutex_lock(&pHddCtx->tdls_lock); + } pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pHddTdlsCtx->pAdapter); @@ -219,7 +230,7 @@ exit_loop: wlan_hdd_tdls_peer_reset_discovery_processed(pHddTdlsCtx); - mutex_unlock(&pHddCtx->tdls_lock); + mutex_unlock(&tdls_lock); /* Commenting out the following function as it was introducing * a race condition when pHddTdlsCtx is deleted. Also , this @@ -235,7 +246,7 @@ done: wlan_hdd_tdls_start_peer_discover_timer(pHddTdlsCtx, doMutexLock, discover_expiry); if ( !doMutexLock ) - mutex_unlock(&pHddCtx->tdls_lock); + mutex_unlock(&tdls_lock); return; } #endif @@ -246,21 +257,26 @@ static v_VOID_t wlan_hdd_tdls_update_peer_cb( v_PVOID_t userData ) struct list_head *head; struct list_head *pos; hddTdlsPeer_t *curr_peer; - tdlsCtx_t *pHddTdlsCtx = (tdlsCtx_t *)userData; - hdd_context_t *pHddCtx; + tdlsCtx_t *pHddTdlsCtx; - if ((NULL == pHddTdlsCtx)) + if (mutex_lock_interruptible(&tdls_lock)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: unable to lock list", __func__); + return; + } + pHddTdlsCtx = (tdlsCtx_t *)userData; + if (NULL == pHddTdlsCtx) + { + mutex_unlock(&tdls_lock); return; + } if (NULL == pHddTdlsCtx->pAdapter) + { + mutex_unlock(&tdls_lock); return; - - pHddCtx = WLAN_HDD_GET_CTX( pHddTdlsCtx->pAdapter ); - - if (NULL == pHddCtx) - return; - - mutex_lock(&pHddCtx->tdls_lock); + } for (i = 0; i < 256; i++) { head = &pHddTdlsCtx->peer_list[i]; @@ -286,12 +302,6 @@ static v_VOID_t wlan_hdd_tdls_update_peer_cb( v_PVOID_t userData ) if ((eTDLS_LINK_IDLE == curr_peer->link_status) || (eTDLS_LINK_DISCOVERING == curr_peer->link_status)){ - - if (pHddCtx->cfg_ini->fTDLSExternalControl && - (FALSE == curr_peer->isForcedPeer)) { - continue; - } - if (curr_peer->tx_pkt >= pHddTdlsCtx->threshold_config.tx_packet_n) { @@ -328,15 +338,10 @@ static v_VOID_t wlan_hdd_tdls_update_peer_cb( v_PVOID_t userData ) goto next_peer; } - /* Only teardown based on non zero idle packet threshold, to address a use - * case where this threshold does not get consider for TEAR DOWN. - */ - - if (( 0 != pHddTdlsCtx->threshold_config.idle_packet_n ) && - ((curr_peer->tx_pkt < + if ((curr_peer->tx_pkt < pHddTdlsCtx->threshold_config.idle_packet_n) && (curr_peer->rx_pkt < - pHddTdlsCtx->threshold_config.idle_packet_n))) { + pHddTdlsCtx->threshold_config.idle_packet_n)) { if (VOS_TIMER_STATE_RUNNING != vos_timer_getCurrentState(&curr_peer->peerIdleTimer)) { VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, @@ -369,11 +374,6 @@ static v_VOID_t wlan_hdd_tdls_update_peer_cb( v_PVOID_t userData ) // } } } else if (eTDLS_CAP_UNKNOWN == curr_peer->tdls_support) { - - if (pHddCtx->cfg_ini->fTDLSExternalControl && - (FALSE == curr_peer->isForcedPeer)) { - continue; - } if (!TDLS_IS_CONNECTED(curr_peer)) { if (curr_peer->tx_pkt >= pHddTdlsCtx->threshold_config.tx_packet_n) { @@ -403,15 +403,13 @@ next_peer: wlan_hdd_tdls_timer_restart(pHddTdlsCtx->pAdapter, &pHddTdlsCtx->peerUpdateTimer, pHddTdlsCtx->threshold_config.tx_period_t); - mutex_unlock(&pHddCtx->tdls_lock); + mutex_unlock(&tdls_lock); } static v_VOID_t wlan_hdd_tdls_idle_cb( v_PVOID_t userData ) { #ifdef CONFIG_TDLS_IMPLICIT hddTdlsPeer_t *curr_peer = (hddTdlsPeer_t *)userData; - tdlsCtx_t *pHddTdlsCtx; - hdd_context_t *pHddCtx; if (NULL == curr_peer) { @@ -419,16 +417,6 @@ static v_VOID_t wlan_hdd_tdls_idle_cb( v_PVOID_t userData ) "%s: Invalid tdls idle timer expired", __func__); return; } - pHddTdlsCtx = curr_peer->pHddTdlsCtx; - - if ((NULL == pHddTdlsCtx) || (NULL == pHddTdlsCtx->pAdapter) ) - return; - - pHddCtx = WLAN_HDD_GET_CTX( pHddTdlsCtx->pAdapter ); - - if (NULL == pHddCtx) - return; - VOS_TRACE(VOS_MODULE_ID_HDD, TDLS_LOG_LEVEL, "%s: Tx/Rx Idle " MAC_ADDRESS_STR " tx_pkt: %d, rx_pkt: %d, idle_packet_n: %d\n", @@ -437,7 +425,12 @@ static v_VOID_t wlan_hdd_tdls_idle_cb( v_PVOID_t userData ) curr_peer->rx_pkt, curr_peer->pHddTdlsCtx->threshold_config.idle_packet_n); - mutex_lock(&pHddCtx->tdls_lock); + if (mutex_lock_interruptible(&tdls_lock)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: unable to lock list", __func__); + return; + } /* Check tx/rx statistics on this tdls link for recent activities and * then decide whether to tear down the link or keep it. @@ -460,7 +453,7 @@ static v_VOID_t wlan_hdd_tdls_idle_cb( v_PVOID_t userData ) curr_peer, eSIR_MAC_TDLS_TEARDOWN_UNSPEC_REASON); } - mutex_unlock(&pHddCtx->tdls_lock); + mutex_unlock(&tdls_lock); #endif } @@ -471,19 +464,20 @@ static v_VOID_t wlan_hdd_tdls_discovery_timeout_peer_cb(v_PVOID_t userData) hddTdlsPeer_t *tmp; struct list_head *pos, *q; tdlsCtx_t *pHddTdlsCtx; - hdd_context_t *pHddCtx; + if (mutex_lock_interruptible(&tdls_lock)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: unable to lock list", __func__); + return ; + } pHddTdlsCtx = (tdlsCtx_t *)userData; - if ((NULL == pHddTdlsCtx) || (NULL == pHddTdlsCtx->pAdapter) ) - return; - - pHddCtx = WLAN_HDD_GET_CTX( pHddTdlsCtx->pAdapter ); - - if (NULL == pHddCtx) - return; - - mutex_lock(&pHddCtx->tdls_lock); + if ( NULL == pHddTdlsCtx ) + { + mutex_unlock(&tdls_lock); + return ; + } for (i = 0; i < 256; i++) { head = &pHddTdlsCtx->peer_list[i]; @@ -502,7 +496,7 @@ static v_VOID_t wlan_hdd_tdls_discovery_timeout_peer_cb(v_PVOID_t userData) pHddTdlsCtx->discovery_sent_cnt = 0; wlan_hdd_tdls_check_power_save_prohibited(pHddTdlsCtx->pAdapter); - mutex_unlock(&pHddCtx->tdls_lock); + mutex_unlock(&tdls_lock); wlan_hdd_tdls_check_bmps(pHddTdlsCtx->pAdapter); @@ -542,32 +536,10 @@ static void wlan_hdd_tdls_free_list(tdlsCtx_t *pHddTdlsCtx) tmp = list_entry(pos, hddTdlsPeer_t, node); list_del(pos); vos_mem_free(tmp); - tmp = NULL; } } } -static void wlan_hdd_tdls_schedule_scan(struct work_struct *work) -{ - tdls_scan_context_t *scan_ctx = - container_of(work, tdls_scan_context_t, tdls_scan_work.work); - - if (NULL == scan_ctx) - return; - - if (unlikely(TDLS_CTX_MAGIC != scan_ctx->magic)) - return; - - scan_ctx->attempt++; - - wlan_hdd_cfg80211_scan(scan_ctx->wiphy, -#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,6,0)) - scan_ctx->dev, -#endif - scan_ctx->scan_request); -} - - int wlan_hdd_tdls_init(hdd_adapter_t *pAdapter) { hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX( pAdapter ); @@ -575,10 +547,7 @@ int wlan_hdd_tdls_init(hdd_adapter_t *pAdapter) int i; v_U8_t staIdx; - if (NULL == pHddCtx) - return -1; - - mutex_lock(&pHddCtx->tdls_lock); + mutex_init(&tdls_lock); if ((FALSE == pHddCtx->cfg_ini->fEnableTDLSSupport) || (FALSE == sme_IsFeatureSupportedByFW(TDLS))) @@ -588,7 +557,6 @@ int wlan_hdd_tdls_init(hdd_adapter_t *pAdapter) hddLog(VOS_TRACE_LEVEL_ERROR, "%s TDLS not enabled (%d) or FW doesn't support (%d)!", __func__, pHddCtx->cfg_ini->fEnableTDLSSupport, sme_IsFeatureSupportedByFW(TDLS)); - mutex_unlock(&pHddCtx->tdls_lock); return 0; } /* TDLS is supported only in STA / P2P Client modes, @@ -603,7 +571,6 @@ int wlan_hdd_tdls_init(hdd_adapter_t *pAdapter) */ if (0 == WLAN_HDD_IS_TDLS_SUPPORTED_ADAPTER(pAdapter)) { - mutex_unlock(&pHddCtx->tdls_lock); return 0; } /* Check for the valid pHddTdlsCtx. If valid do not further @@ -619,7 +586,6 @@ int wlan_hdd_tdls_init(hdd_adapter_t *pAdapter) if (NULL == pHddTdlsCtx) { hddLog(VOS_TRACE_LEVEL_ERROR, "%s malloc failed!", __func__); pAdapter->sessionCtx.station.pHddTdlsCtx = NULL; - mutex_unlock(&pHddCtx->tdls_lock); return -1; } /* initialize TDLS pAdater context */ @@ -692,9 +658,6 @@ int wlan_hdd_tdls_init(hdd_adapter_t *pAdapter) { pHddCtx->tdls_mode = eTDLS_SUPPORT_ENABLED; } - INIT_WORK(&pHddTdlsCtx->implicit_setup, wlan_hdd_tdls_pre_setup); - INIT_DELAYED_WORK(&pHddCtx->tdls_scan_ctxt.tdls_scan_work, wlan_hdd_tdls_schedule_scan); - mutex_unlock(&pHddCtx->tdls_lock); return 0; } @@ -704,27 +667,27 @@ void wlan_hdd_tdls_exit(hdd_adapter_t *pAdapter) tdlsCtx_t *pHddTdlsCtx; hdd_context_t *pHddCtx; - /* - * NOTE: The Callers of this function should ensure to acquire the - * tdls_lock to avoid any concurrent access to the Adapter. - */ + if (mutex_lock_interruptible(&tdls_lock)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: unable to lock list", __func__); + return; + } pHddCtx = WLAN_HDD_GET_CTX( pAdapter ); if (NULL == pHddCtx) { + mutex_unlock(&tdls_lock); return; } pHddTdlsCtx = WLAN_HDD_GET_TDLS_CTX_PTR(pAdapter); if (NULL == pHddTdlsCtx) { + mutex_unlock(&tdls_lock); hddLog(VOS_TRACE_LEVEL_WARN, "%s TDLS not enabled, exiting!", __func__); return; } -#ifdef WLAN_OPEN_SOURCE - cancel_work_sync(&pHddTdlsCtx->implicit_setup); - cancel_delayed_work_sync(&pHddCtx->tdls_scan_ctxt.tdls_scan_work); -#endif /* must stop timer here before freeing peer list, because peerIdleTimer is part of peer list structure. */ @@ -734,8 +697,8 @@ void wlan_hdd_tdls_exit(hdd_adapter_t *pAdapter) wlan_hdd_tdls_free_scan_request(&pHddCtx->tdls_scan_ctxt); vos_mem_free(pHddTdlsCtx); - pAdapter->sessionCtx.station.pHddTdlsCtx = NULL; pHddTdlsCtx = NULL; + mutex_unlock(&tdls_lock); } /* stop all monitoring timers per Adapter */ @@ -832,12 +795,9 @@ hddTdlsPeer_t *wlan_hdd_tdls_get_peer(hdd_adapter_t *pAdapter, u8 *mac) hddTdlsPeer_t *peer; u8 key; tdlsCtx_t *pHddTdlsCtx; - hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); - - if ((NULL == pHddCtx)) return NULL; /* if already there, just update */ - peer = wlan_hdd_tdls_find_peer(pAdapter, mac, TRUE); + peer = wlan_hdd_tdls_find_peer(pAdapter, mac); if (peer != NULL) { return peer; @@ -850,13 +810,19 @@ hddTdlsPeer_t *wlan_hdd_tdls_get_peer(hdd_adapter_t *pAdapter, u8 *mac) return NULL; } - mutex_lock(&pHddCtx->tdls_lock); + if (mutex_lock_interruptible(&tdls_lock)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: unable to lock list", __func__); + vos_mem_free(peer); + return NULL; + } pHddTdlsCtx = WLAN_HDD_GET_TDLS_CTX_PTR(pAdapter); if (NULL == pHddTdlsCtx) { vos_mem_free(peer); - mutex_unlock(&pHddCtx->tdls_lock); + mutex_unlock(&tdls_lock); return NULL; } @@ -878,7 +844,7 @@ hddTdlsPeer_t *wlan_hdd_tdls_get_peer(hdd_adapter_t *pAdapter, u8 *mac) peer); list_add_tail(&peer->node, head); - mutex_unlock(&pHddCtx->tdls_lock); + mutex_unlock(&tdls_lock); return peer; } @@ -916,7 +882,7 @@ void wlan_hdd_tdls_set_link_status(hdd_adapter_t *pAdapter, { hddTdlsPeer_t *curr_peer; - curr_peer = wlan_hdd_tdls_find_peer(pAdapter, mac, TRUE); + curr_peer = wlan_hdd_tdls_find_peer(pAdapter, mac); if (curr_peer == NULL) return; @@ -929,15 +895,6 @@ int wlan_hdd_tdls_recv_discovery_resp(hdd_adapter_t *pAdapter, u8 *mac) { hddTdlsPeer_t *curr_peer; tdlsCtx_t *pHddTdlsCtx = WLAN_HDD_GET_TDLS_CTX_PTR(pAdapter); - hdd_context_t *pHddCtx; - - if ( NULL == pHddTdlsCtx ) - return -1; - - pHddCtx = WLAN_HDD_GET_CTX(pHddTdlsCtx->pAdapter); - - if (NULL == pHddCtx) - return -1; curr_peer = wlan_hdd_tdls_get_peer(pAdapter, mac); @@ -947,11 +904,7 @@ int wlan_hdd_tdls_recv_discovery_resp(hdd_adapter_t *pAdapter, u8 *mac) if (pHddTdlsCtx->discovery_sent_cnt) pHddTdlsCtx->discovery_sent_cnt--; - mutex_lock(&pHddCtx->tdls_lock); - wlan_hdd_tdls_check_power_save_prohibited(pAdapter); - - mutex_unlock(&pHddCtx->tdls_lock); if (0 == pHddTdlsCtx->discovery_sent_cnt) { vos_timer_stop(&pHddTdlsCtx->peerDiscoveryTimeoutTimer); @@ -997,7 +950,7 @@ int wlan_hdd_tdls_set_rssi(hdd_adapter_t *pAdapter, u8 *mac, tANI_S8 rxRssi) { hddTdlsPeer_t *curr_peer; - curr_peer = wlan_hdd_tdls_find_peer(pAdapter, mac, TRUE); + curr_peer = wlan_hdd_tdls_find_peer(pAdapter, mac); if (curr_peer == NULL) return -1; @@ -1023,7 +976,7 @@ int wlan_hdd_tdls_get_responder(hdd_adapter_t *pAdapter, u8 *mac) { hddTdlsPeer_t *curr_peer; - curr_peer = wlan_hdd_tdls_find_peer(pAdapter, mac, TRUE); + curr_peer = wlan_hdd_tdls_find_peer(pAdapter, mac); if (curr_peer == NULL) return -1; @@ -1210,49 +1163,28 @@ int wlan_hdd_tdls_set_sta_id(hdd_adapter_t *pAdapter, u8 *mac, u8 staId) return 0; } -int wlan_hdd_tdls_set_force_peer(hdd_adapter_t *pAdapter, u8 *mac, - tANI_BOOLEAN forcePeer) -{ - hddTdlsPeer_t *curr_peer; - hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); - - if ((NULL == pHddCtx)) return -1; - - mutex_lock(&pHddCtx->tdls_lock); - - curr_peer = wlan_hdd_tdls_find_peer(pAdapter, mac, FALSE); - if (curr_peer == NULL) - goto error; - curr_peer->isForcedPeer = forcePeer; -error: - mutex_unlock(&pHddCtx->tdls_lock); - return -1; -} - /* if peerMac is found, then it returns pointer to hddTdlsPeer_t otherwise, it returns NULL */ -hddTdlsPeer_t *wlan_hdd_tdls_find_peer(hdd_adapter_t *pAdapter, u8 *mac, - tANI_BOOLEAN mutexLock) +hddTdlsPeer_t *wlan_hdd_tdls_find_peer(hdd_adapter_t *pAdapter, u8 *mac) { u8 key; struct list_head *pos; struct list_head *head; hddTdlsPeer_t *curr_peer; tdlsCtx_t *pHddTdlsCtx; - hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); - if ((NULL == pHddCtx)) return NULL; - if ( mutexLock ) + if (mutex_lock_interruptible(&tdls_lock)) { - mutex_lock(&pHddCtx->tdls_lock); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: unable to lock list", __func__); + return NULL; } pHddTdlsCtx = WLAN_HDD_GET_TDLS_CTX_PTR(pAdapter); if (NULL == pHddTdlsCtx) { - if ( mutexLock ) - mutex_unlock(&pHddCtx->tdls_lock); + mutex_unlock(&tdls_lock); return NULL; } @@ -1265,13 +1197,12 @@ hddTdlsPeer_t *wlan_hdd_tdls_find_peer(hdd_adapter_t *pAdapter, u8 *mac, if (!memcmp(mac, curr_peer->peerMac, 6)) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "findTdlsPeer: found staId %d", curr_peer->staId); - if ( mutexLock ) - mutex_unlock(&pHddCtx->tdls_lock); + mutex_unlock(&tdls_lock); return curr_peer; } } - if ( mutexLock ) - mutex_unlock(&pHddCtx->tdls_lock); + + mutex_unlock(&tdls_lock); return NULL; } @@ -1283,7 +1214,6 @@ hddTdlsPeer_t *wlan_hdd_tdls_find_all_peer(hdd_context_t *pHddCtx, u8 *mac) hddTdlsPeer_t *curr_peer= NULL; VOS_STATUS status = 0; - mutex_lock(&pHddCtx->tdls_lock); status = hdd_get_front_adapter ( pHddCtx, &pAdapterNode ); while ( NULL != pAdapterNode && VOS_STATUS_SUCCESS == status ) { @@ -1292,17 +1222,13 @@ hddTdlsPeer_t *wlan_hdd_tdls_find_all_peer(hdd_context_t *pHddCtx, u8 *mac) pHddTdlsCtx = WLAN_HDD_GET_TDLS_CTX_PTR(pAdapter); if (NULL != pHddTdlsCtx) { - curr_peer = wlan_hdd_tdls_find_peer(pAdapter, mac, FALSE); + curr_peer = wlan_hdd_tdls_find_peer(pAdapter, mac); if (curr_peer) - { - mutex_unlock(&pHddCtx->tdls_lock); return curr_peer; - } } status = hdd_get_next_adapter ( pHddCtx, pAdapterNode, &pNext ); pAdapterNode = pNext; } - mutex_unlock(&pHddCtx->tdls_lock); return curr_peer; } @@ -1411,12 +1337,6 @@ int wlan_hdd_tdls_get_all_peers(hdd_adapter_t *pAdapter, char *buf, int buflen) struct list_head *pos; hddTdlsPeer_t *curr_peer; tdlsCtx_t *pHddTdlsCtx; - hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); - - if ((NULL == pHddCtx)) { - len = snprintf(buf, buflen, "NULL HddCtx\n"); - return len; - } init_len = buflen; @@ -1429,10 +1349,15 @@ int wlan_hdd_tdls_get_all_peers(hdd_adapter_t *pAdapter, char *buf, int buflen) buf += len; buflen -= len; - mutex_lock(&pHddCtx->tdls_lock); + if (mutex_lock_interruptible(&tdls_lock)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: unable to lock list", __func__); + return init_len-buflen; + } pHddTdlsCtx = WLAN_HDD_GET_TDLS_CTX_PTR(pAdapter); if (NULL == pHddTdlsCtx) { - mutex_unlock(&pHddCtx->tdls_lock); + mutex_unlock(&tdls_lock); len = snprintf(buf, buflen, "TDLS not enabled\n"); return len; } @@ -1455,18 +1380,27 @@ int wlan_hdd_tdls_get_all_peers(hdd_adapter_t *pAdapter, char *buf, int buflen) buflen -= len; } } - mutex_unlock(&pHddCtx->tdls_lock); + mutex_unlock(&tdls_lock); return init_len-buflen; } void wlan_hdd_tdls_connection_callback(hdd_adapter_t *pAdapter) { + hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX( pAdapter ); tdlsCtx_t *pHddTdlsCtx = WLAN_HDD_GET_TDLS_CTX_PTR(pAdapter); - hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); - if ((NULL == pHddCtx) || (NULL == pHddTdlsCtx)) return; + if (mutex_lock_interruptible(&tdls_lock)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: unable to lock list", __func__); + return; + } - mutex_lock(&pHddCtx->tdls_lock); + if (NULL == pHddCtx || NULL == pHddTdlsCtx) + { + mutex_unlock(&tdls_lock); + return; + } VOS_TRACE( VOS_MODULE_ID_HDD, TDLS_LOG_LEVEL, "%s, update %d discover %d", __func__, @@ -1488,23 +1422,25 @@ void wlan_hdd_tdls_connection_callback(hdd_adapter_t *pAdapter) &pHddTdlsCtx->peerUpdateTimer, pHddTdlsCtx->threshold_config.tx_period_t); } - mutex_unlock(&pHddCtx->tdls_lock); + mutex_unlock(&tdls_lock); } void wlan_hdd_tdls_disconnection_callback(hdd_adapter_t *pAdapter) { tdlsCtx_t *pHddTdlsCtx = WLAN_HDD_GET_TDLS_CTX_PTR(pAdapter); - hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); - - if ((NULL == pHddCtx) || (NULL == pHddTdlsCtx)) return; VOS_TRACE( VOS_MODULE_ID_HDD, TDLS_LOG_LEVEL,"%s", __func__); - mutex_lock(&pHddCtx->tdls_lock); + if (mutex_lock_interruptible(&tdls_lock)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: unable to lock list", __func__); + return; + } if (NULL == pHddTdlsCtx) { - mutex_unlock(&pHddCtx->tdls_lock); + mutex_unlock(&tdls_lock); return; } pHddTdlsCtx->discovery_sent_cnt = 0; @@ -1514,7 +1450,7 @@ void wlan_hdd_tdls_disconnection_callback(hdd_adapter_t *pAdapter) wlan_hdd_tdls_peer_timers_destroy(pHddTdlsCtx); wlan_hdd_tdls_free_list(pHddTdlsCtx); - mutex_unlock(&pHddCtx->tdls_lock); + mutex_unlock(&tdls_lock); } void wlan_hdd_tdls_mgmt_completion_callback(hdd_adapter_t *pAdapter, tANI_U32 statusCode) @@ -1531,15 +1467,11 @@ void wlan_hdd_tdls_increment_peer_count(hdd_adapter_t *pAdapter) if (NULL == pHddCtx) return; - mutex_lock(&pHddCtx->tdls_lock); - pHddCtx->connected_peer_count++; wlan_hdd_tdls_check_power_save_prohibited(pAdapter); VOS_TRACE( VOS_MODULE_ID_HDD, TDLS_LOG_LEVEL, "%s: %d", __func__, pHddCtx->connected_peer_count); - - mutex_unlock(&pHddCtx->tdls_lock); } void wlan_hdd_tdls_decrement_peer_count(hdd_adapter_t *pAdapter) @@ -1548,8 +1480,6 @@ void wlan_hdd_tdls_decrement_peer_count(hdd_adapter_t *pAdapter) if (NULL == pHddCtx) return; - mutex_lock(&pHddCtx->tdls_lock); - if (pHddCtx->connected_peer_count) pHddCtx->connected_peer_count--; wlan_hdd_tdls_check_power_save_prohibited(pAdapter); @@ -1557,8 +1487,6 @@ void wlan_hdd_tdls_decrement_peer_count(hdd_adapter_t *pAdapter) VOS_TRACE( VOS_MODULE_ID_HDD, TDLS_LOG_LEVEL, "%s: %d", __func__, pHddCtx->connected_peer_count); - mutex_unlock(&pHddCtx->tdls_lock); - } void wlan_hdd_tdls_check_bmps(hdd_adapter_t *pAdapter) @@ -1569,7 +1497,7 @@ void wlan_hdd_tdls_check_bmps(hdd_adapter_t *pAdapter) if ((NULL == pHddCtx) || (NULL == pHddTdlsCtx)) return; - curr_peer = wlan_hdd_tdls_is_progress(pHddCtx, NULL, 0); + curr_peer = wlan_hdd_tdls_is_progress(pHddCtx, NULL, 0, TRUE); if (NULL != curr_peer) { VOS_TRACE(VOS_MODULE_ID_HDD, TDLS_LOG_LEVEL, @@ -1606,7 +1534,7 @@ u8 wlan_hdd_tdls_is_peer_progress(hdd_adapter_t *pAdapter, u8 *mac) { hddTdlsPeer_t *curr_peer; - curr_peer = wlan_hdd_tdls_find_peer(pAdapter, mac, TRUE); + curr_peer = wlan_hdd_tdls_find_peer(pAdapter, mac); if (curr_peer == NULL) return 0; @@ -1618,16 +1546,30 @@ u8 wlan_hdd_tdls_is_peer_progress(hdd_adapter_t *pAdapter, u8 *mac) * skip_self - if TRUE, skip this mac. otherwise, check all the peer list. if mac is NULL, this argument is ignored, and check for all the peer list. */ -static hddTdlsPeer_t *wlan_hdd_tdls_find_progress_peer(hdd_adapter_t *pAdapter, u8 *mac, u8 skip_self) +static hddTdlsPeer_t *wlan_hdd_tdls_find_progress_peer(hdd_adapter_t *pAdapter, u8 *mac, u8 skip_self, tANI_BOOLEAN mutexLock) { int i; struct list_head *head; hddTdlsPeer_t *curr_peer; struct list_head *pos; - tdlsCtx_t *pHddTdlsCtx = WLAN_HDD_GET_TDLS_CTX_PTR(pAdapter);; + tdlsCtx_t *pHddTdlsCtx; + if (mutexLock) + { + if (mutex_lock_interruptible(&tdls_lock)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: unable to lock list", __func__); + return NULL; + } + } + pHddTdlsCtx = WLAN_HDD_GET_TDLS_CTX_PTR(pAdapter); if (NULL == pHddTdlsCtx) + { + if (mutexLock) + mutex_unlock(&tdls_lock); return NULL; + } for (i = 0; i < 256; i++) { head = &pHddTdlsCtx->peer_list[i]; @@ -1643,15 +1585,20 @@ static hddTdlsPeer_t *wlan_hdd_tdls_find_progress_peer(hdd_adapter_t *pAdapter, VOS_TRACE(VOS_MODULE_ID_HDD, TDLS_LOG_LEVEL, "%s:" MAC_ADDRESS_STR " eTDLS_LINK_CONNECTING", __func__, MAC_ADDR_ARRAY(curr_peer->peerMac)); + if (mutexLock) + mutex_unlock(&tdls_lock); return curr_peer; } } } } + + if (mutexLock) + mutex_unlock(&tdls_lock); return NULL; } -hddTdlsPeer_t *wlan_hdd_tdls_is_progress(hdd_context_t *pHddCtx, u8 *mac, u8 skip_self) +hddTdlsPeer_t *wlan_hdd_tdls_is_progress(hdd_context_t *pHddCtx, u8 *mac, u8 skip_self, tANI_BOOLEAN mutexLock) { hdd_adapter_list_node_t *pAdapterNode = NULL, *pNext = NULL; hdd_adapter_t *pAdapter = NULL; @@ -1659,8 +1606,6 @@ hddTdlsPeer_t *wlan_hdd_tdls_is_progress(hdd_context_t *pHddCtx, u8 *mac, u8 ski hddTdlsPeer_t *curr_peer= NULL; VOS_STATUS status = 0; - mutex_lock(&pHddCtx->tdls_lock); - status = hdd_get_front_adapter ( pHddCtx, &pAdapterNode ); while ( NULL != pAdapterNode && VOS_STATUS_SUCCESS == status ) { @@ -1669,17 +1614,13 @@ hddTdlsPeer_t *wlan_hdd_tdls_is_progress(hdd_context_t *pHddCtx, u8 *mac, u8 ski pHddTdlsCtx = WLAN_HDD_GET_TDLS_CTX_PTR(pAdapter); if (NULL != pHddTdlsCtx) { - curr_peer = wlan_hdd_tdls_find_progress_peer(pAdapter, mac, skip_self); + curr_peer = wlan_hdd_tdls_find_progress_peer(pAdapter, mac, skip_self, mutexLock); if (curr_peer) - { - mutex_unlock(&pHddCtx->tdls_lock); return curr_peer; - } } status = hdd_get_next_adapter ( pHddCtx, pAdapterNode, &pNext ); pAdapterNode = pNext; } - mutex_unlock(&pHddCtx->tdls_lock); return NULL; } @@ -1716,16 +1657,24 @@ void wlan_hdd_tdls_set_mode(hdd_context_t *pHddCtx, tdlsCtx_t *pHddTdlsCtx; VOS_TRACE( VOS_MODULE_ID_HDD, TDLS_LOG_LEVEL,"%s mode %d", __func__, (int)tdls_mode); - if (NULL == pHddCtx) - return; - mutex_lock(&pHddCtx->tdls_lock); + if (mutex_lock_interruptible(&tdls_lock)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: unable to lock list", __func__); + return; + } + if (NULL == pHddCtx) + { + mutex_unlock(&tdls_lock); + return; + } if (pHddCtx->tdls_mode == tdls_mode) { hddLog(TDLS_LOG_LEVEL, "%s already in mode %d", __func__, (int)tdls_mode); - mutex_unlock(&pHddCtx->tdls_lock); + mutex_unlock(&tdls_lock); return; } @@ -1756,7 +1705,7 @@ void wlan_hdd_tdls_set_mode(hdd_context_t *pHddCtx, } pHddCtx->tdls_mode = tdls_mode; - mutex_unlock(&pHddCtx->tdls_lock); + mutex_unlock(&tdls_lock); } static void wlan_hdd_tdls_pre_setup(struct work_struct *work) @@ -1790,7 +1739,7 @@ static void wlan_hdd_tdls_pre_setup(struct work_struct *work) hdd_disable_bmps_imps(pHddCtx, WLAN_HDD_INFRA_STATION); } - temp_peer = wlan_hdd_tdls_is_progress(pHddCtx, NULL, 0); + temp_peer = wlan_hdd_tdls_is_progress(pHddCtx, NULL, 0, FALSE); if (NULL != temp_peer) { VOS_TRACE( VOS_MODULE_ID_HDD, TDLS_LOG_LEVEL, "%s: " MAC_ADDRESS_STR " ongoing. pre_setup ignored\n", @@ -1815,12 +1764,7 @@ static void wlan_hdd_tdls_pre_setup(struct work_struct *work) } pHddTdlsCtx->discovery_sent_cnt++; - - mutex_lock(&pHddCtx->tdls_lock); - wlan_hdd_tdls_check_power_save_prohibited(pHddTdlsCtx->pAdapter); - - mutex_unlock(&pHddCtx->tdls_lock); VOS_TRACE( VOS_MODULE_ID_HDD, TDLS_LOG_LEVEL, "%s: discovery count %lu timeout %lu msec", __func__, pHddTdlsCtx->discovery_sent_cnt, pHddTdlsCtx->threshold_config.tx_period_t - TDLS_DISCOVERY_TIMEOUT_BEFORE_UPDATE); @@ -1912,6 +1856,26 @@ int wlan_hdd_tdls_copy_scan_context(hdd_context_t *pHddCtx, return 0; } +static void wlan_hdd_tdls_schedule_scan(struct work_struct *work) +{ + tdls_scan_context_t *scan_ctx = + container_of(work, tdls_scan_context_t, tdls_scan_work.work); + + if (NULL == scan_ctx) + return; + + if (unlikely(TDLS_CTX_MAGIC != scan_ctx->magic)) + return; + + scan_ctx->attempt++; + + wlan_hdd_cfg80211_scan(scan_ctx->wiphy, +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,6,0)) + scan_ctx->dev, +#endif + scan_ctx->scan_request); +} + static void wlan_hdd_tdls_scan_init_work(hdd_context_t *pHddCtx, struct wiphy *wiphy, #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,6,0)) @@ -1930,6 +1894,8 @@ static void wlan_hdd_tdls_scan_init_work(hdd_context_t *pHddCtx, pHddCtx->tdls_scan_ctxt.attempt = 0; pHddCtx->tdls_scan_ctxt.magic = TDLS_CTX_MAGIC; } + INIT_DELAYED_WORK(&pHddCtx->tdls_scan_ctxt.tdls_scan_work, wlan_hdd_tdls_schedule_scan); + schedule_delayed_work(&pHddCtx->tdls_scan_ctxt.tdls_scan_work, delay); } @@ -1959,7 +1925,7 @@ int wlan_hdd_tdls_scan_callback (hdd_adapter_t *pAdapter, if (eTDLS_SUPPORT_NOT_ENABLED == pHddCtx->tdls_mode) return 1; - curr_peer = wlan_hdd_tdls_is_progress(pHddCtx, NULL, 0); + curr_peer = wlan_hdd_tdls_is_progress(pHddCtx, NULL, 0, TRUE); if (NULL != curr_peer) { if (pHddCtx->tdls_scan_ctxt.reject++ >= TDLS_MAX_SCAN_REJECT) diff --git a/drivers/staging/prima/CORE/HDD/src/wlan_hdd_tx_rx.c b/drivers/staging/prima/CORE/HDD/src/wlan_hdd_tx_rx.c index 3d7a7f32073..33d9f32cf6c 100644 --- a/drivers/staging/prima/CORE/HDD/src/wlan_hdd_tx_rx.c +++ b/drivers/staging/prima/CORE/HDD/src/wlan_hdd_tx_rx.c @@ -181,8 +181,6 @@ static VOS_STATUS hdd_flush_tx_queues( hdd_adapter_t *pAdapter ) skb_list_node_t *pktNode = NULL; struct sk_buff *skb = NULL; - pAdapter->isVosLowResource = VOS_FALSE; - while (++i != NUM_TX_QUEUES) { //Free up any packets in the Tx queue @@ -549,7 +547,7 @@ int hdd_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) ++pAdapter->hdd_stats.hddTxRxStats.txXmitCalled; if (unlikely(netif_queue_stopped(dev))) { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "%s is called when netif TX is disabled", __func__); return NETDEV_TX_BUSY; } @@ -591,20 +589,6 @@ int hdd_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) txSuspended = VOS_TRUE; } - /* If 3/4th of the max queue size is used then enable the flag. - * This flag indicates to place the DHCP packets in VOICE AC queue.*/ - if (WLANTL_AC_BE == ac) - { - if (pAdapter->wmm_tx_queue[ac].count >= HDD_TX_QUEUE_LOW_WATER_MARK) - { - pAdapter->isVosLowResource = VOS_TRUE; - } - else - { - pAdapter->isVosLowResource = VOS_FALSE; - } - } - spin_unlock(&pAdapter->wmm_tx_queue[ac].lock); if (VOS_TRUE == txSuspended) { @@ -643,27 +627,16 @@ int hdd_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) ++pAdapter->hdd_stats.hddTxRxStats.txXmitQueued; ++pAdapter->hdd_stats.hddTxRxStats.txXmitQueuedAC[ac]; - ++pAdapter->hdd_stats.hddTxRxStats.pkt_tx_count; - - if (HDD_PSB_CHANGED == pAdapter->psbChanged) - { - /* Function which will determine acquire admittance for a - * WMM AC is required or not based on psb configuration done - * in the framework - */ - hdd_wmm_acquire_access_required(pAdapter, ac); - } //Make sure we have access to this access category - if (((pAdapter->psbChanged & (1 << ac)) && likely(pAdapter->hddWmmStatus.wmmAcStatus[ac].wmmAcAccessAllowed)) || - (pHddStaCtx->conn_info.uIsAuthenticated == VOS_FALSE)) + if (likely(pAdapter->hddWmmStatus.wmmAcStatus[ac].wmmAcAccessAllowed) || + ( pHddStaCtx->conn_info.uIsAuthenticated == VOS_FALSE)) { granted = VOS_TRUE; } else { status = hdd_wmm_acquire_access( pAdapter, ac, &granted ); - pAdapter->psbChanged |= (1 << ac); } if ( granted && ( pktListSize == 1 )) @@ -743,7 +716,6 @@ VOS_STATUS hdd_init_tx_rx( hdd_adapter_t *pAdapter ) v_SINT_t i = -1; pAdapter->isVosOutOfResource = VOS_FALSE; - pAdapter->isVosLowResource = VOS_FALSE; //vos_mem_zero(&pAdapter->stats, sizeof(struct net_device_stats)); //Will be zeroed out during alloc @@ -971,7 +943,7 @@ VOS_STATUS hdd_tx_fetch_packet_cbk( v_VOID_t *vosContext, } pAdapter = pHddCtx->sta_to_adapter[*pStaId]; - if ((NULL == pAdapter) || (WLAN_HDD_ADAPTER_MAGIC != pAdapter->magic)) + if( NULL == pAdapter ) { VOS_ASSERT(0); return VOS_STATUS_E_FAILURE; @@ -1430,7 +1402,7 @@ VOS_STATUS hdd_rx_packet_cbk( v_VOID_t *vosContext, VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_MED, "rx extract mac:" MAC_ADDRESS_STR, MAC_ADDR_ARRAY(mac) ); - curr_peer = wlan_hdd_tdls_find_peer(pAdapter, mac, TRUE); + curr_peer = wlan_hdd_tdls_find_peer(pAdapter, mac); if ((NULL != curr_peer) && (eTDLS_LINK_CONNECTED == curr_peer->link_status) && (TRUE == pRxMetaInfo->isStaTdls)) { @@ -1460,7 +1432,6 @@ VOS_STATUS hdd_rx_packet_cbk( v_VOID_t *vosContext, if (NET_RX_SUCCESS == rxstat) { ++pAdapter->hdd_stats.hddTxRxStats.rxDelivered; - ++pAdapter->hdd_stats.hddTxRxStats.pkt_rx_count; } else { @@ -1482,120 +1453,4 @@ VOS_STATUS hdd_rx_packet_cbk( v_VOID_t *vosContext, return status; } -/**============================================================================ - @brief hdd_tx_rx_pkt_cnt_stat_timer_handler() - - Enable/Disable split scan based on TX and RX traffic. - @param HddContext : [in] pointer to Hdd context - @return : None - ===========================================================================*/ -void hdd_tx_rx_pkt_cnt_stat_timer_handler( void *phddctx) -{ - hdd_adapter_list_node_t *pAdapterNode = NULL, *pNext = NULL; - hdd_adapter_t *pAdapter = NULL; - hdd_station_ctx_t *pHddStaCtx = NULL; - hdd_context_t *pHddCtx = (hdd_context_t *)phddctx; - hdd_config_t *cfg_param = pHddCtx->cfg_ini; - VOS_STATUS status; - v_U8_t staId = 0; - v_U8_t fconnected = 0; - - if (!cfg_param->dynSplitscan) - { - hddLog(VOS_TRACE_LEVEL_INFO, - "%s: Error : Dynamic split scan is not Enabled : %d", - __func__, pHddCtx->cfg_ini->dynSplitscan); - return; - } - - status = hdd_get_front_adapter ( pHddCtx, &pAdapterNode ); - while ( NULL != pAdapterNode && VOS_STATUS_SUCCESS == status ) - { - pAdapter = pAdapterNode->pAdapter; - - if ( pAdapter ) - { - hddLog(VOS_TRACE_LEVEL_INFO, - "%s: Adapter with device mode %d exists", - __func__, pAdapter->device_mode); - - if ((WLAN_HDD_INFRA_STATION == pAdapter->device_mode) || - (WLAN_HDD_P2P_CLIENT == pAdapter->device_mode)) - { - pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); - if ((eConnectionState_Associated == - pHddStaCtx->conn_info.connState) && - (VOS_TRUE == pHddStaCtx->conn_info.uIsAuthenticated)) - { - fconnected = TRUE; - } - } - else if ((WLAN_HDD_SOFTAP == pAdapter->device_mode) || - (WLAN_HDD_P2P_GO == pAdapter->device_mode)) - { - for (staId = 0; staId < WLAN_MAX_STA_COUNT; staId++) - { - if ((pAdapter->aStaInfo[staId].isUsed) && - (WLANTL_STA_AUTHENTICATED == - pAdapter->aStaInfo[staId].tlSTAState)) - { - fconnected = TRUE; - } - } - } - if ( fconnected ) - { - hddLog(VOS_TRACE_LEVEL_INFO, - "%s: One of the interface is connected check for scan", - __func__); - hddLog(VOS_TRACE_LEVEL_INFO, - "%s: pkt_tx_count: %d, pkt_rx_count: %d", __func__, - pAdapter->hdd_stats.hddTxRxStats.pkt_tx_count, - pAdapter->hdd_stats.hddTxRxStats.pkt_rx_count); - - vos_timer_start(&pHddCtx->tx_rx_trafficTmr, - cfg_param->trafficMntrTmrForSplitScan); - //Check for the previous statistics count - if ((pAdapter->hdd_stats.hddTxRxStats.pkt_tx_count > - cfg_param->txRxThresholdForSplitScan) || - (pAdapter->hdd_stats.hddTxRxStats.pkt_rx_count > - cfg_param->txRxThresholdForSplitScan) || - pHddCtx->drvr_miracast) - { - pAdapter->hdd_stats.hddTxRxStats.pkt_tx_count = 0; - pAdapter->hdd_stats.hddTxRxStats.pkt_rx_count = 0; - - if (!pHddCtx->issplitscan_enabled) - { - pHddCtx->issplitscan_enabled = TRUE; - sme_enable_disable_split_scan( - WLAN_HDD_GET_HAL_CTX(pAdapter), - cfg_param->nNumStaChanCombinedConc, - cfg_param->nNumP2PChanCombinedConc); - } - return; - } - else - { - pAdapter->hdd_stats.hddTxRxStats.pkt_tx_count = 0; - pAdapter->hdd_stats.hddTxRxStats.pkt_rx_count = 0; - } - fconnected = FALSE; - } - } - status = hdd_get_next_adapter( pHddCtx, pAdapterNode, &pNext); - pAdapterNode = pNext; - } - - if (pHddCtx->issplitscan_enabled) - { - hddLog(VOS_TRACE_LEVEL_ERROR, - "%s: Disable split scan", __func__); - pHddCtx->issplitscan_enabled = FALSE; - sme_enable_disable_split_scan( - pHddCtx->hHal, - SME_DISABLE_SPLIT_SCAN, - SME_DISABLE_SPLIT_SCAN); - } - return; -} diff --git a/drivers/staging/prima/CORE/HDD/src/wlan_hdd_wext.c b/drivers/staging/prima/CORE/HDD/src/wlan_hdd_wext.c index f82a18f1c7e..bdc626c7755 100644..100755 --- a/drivers/staging/prima/CORE/HDD/src/wlan_hdd_wext.c +++ b/drivers/staging/prima/CORE/HDD/src/wlan_hdd_wext.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2014, The Linux Foundation. All rights reserved. + * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -112,7 +112,6 @@ #include "wlan_hdd_dev_pwr.h" #include "qc_sap_ioctl.h" #include "sme_Api.h" -#include "vos_trace.h" #ifdef CONFIG_HAS_EARLYSUSPEND extern void hdd_suspend_wlan(struct early_suspend *wlan_suspend); @@ -125,13 +124,23 @@ extern void hdd_resume_wlan(struct early_suspend *wlan_suspend); #define HDD_FINISH_ULA_TIME_OUT 800 - extern int wlan_hdd_cfg80211_update_band(struct wiphy *wiphy, eCsrBand eBand); int hdd_setBand_helper(struct net_device *dev, tANI_U8* ptr); static int ioctl_debug; module_param(ioctl_debug, int, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); +struct statsContext +{ + struct completion completion; + hdd_adapter_t *pAdapter; + unsigned int magic; +}; + +#define STATS_CONTEXT_MAGIC 0x53544154 //STAT +#define RSSI_CONTEXT_MAGIC 0x52535349 //RSSI +#define POWER_CONTEXT_MAGIC 0x504F5752 // POWR + /* To Validate Channel against the Frequency and Vice-Versa */ static const hdd_freq_chan_map_t freq_chan_map[] = { {2412, 1}, {2417, 2}, {2422, 3}, {2427, 4}, {2432, 5}, {2437, 6}, {2442, 7}, {2447, 8}, @@ -156,7 +165,8 @@ static const hdd_freq_chan_map_t freq_chan_map[] = { {2412, 1}, {2417, 2}, #define WE_SET_MAX_TX_POWER 7 #define WE_SET_HIGHER_DTIM_TRANSITION 8 #define WE_SET_TM_LEVEL 9 -#define WE_ENABLE_STRICT_FCC_REG 10 +#define WE_SET_CHANNEL_RANGE 10 // Motorola, IKJBREL1-4181 +#define WE_SET_IPV6_FILTER_STATE 11 // IKJB42MAIN-1244, Motorola, a19091 /* Private ioctls and their sub-ioctls */ #define WLAN_PRIV_SET_NONE_GET_INT (SIOCIWFIRSTPRIV + 1) @@ -169,6 +179,7 @@ static const hdd_freq_chan_map_t freq_chan_map[] = { {2412, 1}, {2417, 2}, #define WE_GET_WDI_DBG 7 #define WE_GET_SAP_AUTO_CHANNEL_SELECTION 8 #define WE_GET_CONCURRENCY_MODE 9 +#define WE_GET_MCC_MODE 10 /* MOTOROLA IKJB42MAIN-274 */ /* Private ioctls and their sub-ioctls */ #define WLAN_PRIV_SET_INT_GET_INT (SIOCIWFIRSTPRIV + 2) @@ -187,6 +198,9 @@ static const hdd_freq_chan_map_t freq_chan_map[] = { {2412, 1}, {2417, 2}, #define WE_SET_WLAN_DBG 1 #define WE_SET_WDI_DBG 2 #define WE_SET_SAP_CHANNELS 3 +//Begin Motorola dcw476 4/17/13 IKJBXLINE-5577:changing wlan driver log level dynamically +#define WE_SET_WLAN_DBG_TILL_LEVEL 4 +//END IKJBXLINE-5577 /* Private ioctls and their sub-ioctls */ #define WLAN_PRIV_GET_CHAR_SET_NONE (SIOCIWFIRSTPRIV + 5) @@ -213,6 +227,7 @@ static const hdd_freq_chan_map_t freq_chan_map[] = { {2412, 1}, {2417, 2}, #define WE_ENABLE_DXE_STALL_DETECT 6 #define WE_DISPLAY_DXE_SNAP_SHOT 7 #define WE_DISPLAY_DATAPATH_SNAP_SHOT 9 +#define WE_SET_REASSOC_TRIGGER 8 /* Private ioctls and their sub-ioctls */ #define WLAN_PRIV_SET_VAR_INT_GET_NONE (SIOCIWFIRSTPRIV + 7) @@ -227,9 +242,6 @@ static const hdd_freq_chan_map_t freq_chan_map[] = { {2412, 1}, {2417, 2}, #define WE_TDLS_CONFIG_PARAMS 5 #endif -#define WE_MTRACE_DUMP_CMD 8 -#define WE_MTRACE_SELECTIVE_MODULE_LOG_ENABLE_CMD 9 - #ifdef FEATURE_WLAN_TDLS #undef MAX_VAR_ARGS #define MAX_VAR_ARGS 10 @@ -362,56 +374,6 @@ int wlan_hdd_set_filter(hdd_context_t *pHddCtx, tpPacketFilterCfg pRequest, /**--------------------------------------------------------------------------- - \brief mem_alloc_copy_from_user_helper - - - Helper function to allocate buffer and copy user data. - - \param - wrqu - Pointer to IOCTL Data. - len - size - - \return - On Success pointer to buffer, On failure NULL - - --------------------------------------------------------------------------*/ -static void *mem_alloc_copy_from_user_helper(const void *wrqu_data, size_t len) -{ - u8 *ptr = NULL; - - /* in order to protect the code, an extra byte is post appended to the buffer - * and the null termination is added. However, when allocating (len+1) byte - * of memory, we need to make sure that there is no uint overflow when doing - * addition. In theory check len < UINT_MAX protects the uint overflow. For - * wlan private ioctl, the buffer size is much less than UINT_MAX, as a good - * guess, now, it is assumed that the private command buffer size is no - * greater than 4K (4096 bytes). So we use 4096 as the upper boundary for now. - */ - if (len > MAX_USER_COMMAND_SIZE) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "Invalid length"); - return NULL; - } - - ptr = kmalloc(len + 1, GFP_KERNEL); - if (NULL == ptr) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "unable to allocate memory"); - return NULL; - } - - if (copy_from_user(ptr, wrqu_data, len)) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: failed to copy data to user buffer", __func__); - kfree(ptr); - return NULL; - } - ptr[len] = '\0'; - return ptr; -} - -/**--------------------------------------------------------------------------- - \brief hdd_wlan_get_version() - This function use to get Wlan Driver, Firmware, & Hardware Version. @@ -616,19 +578,16 @@ static void hdd_GetRssiCB( v_S7_t rssi, tANI_U32 staId, void *pContext ) return; } + /* there is a race condition that exists between this callback function + and the caller since the caller could time out either before or + while this code is executing. we'll assume the timeout hasn't + occurred, but we'll verify that right before we save our work */ + pStatsContext = pContext; pAdapter = pStatsContext->pAdapter; - - /* there is a race condition that exists between this callback - function and the caller since the caller could time out either - before or while this code is executing. we use a spinlock to - serialize these actions */ - spin_lock(&hdd_context_lock); - if ((NULL == pAdapter) || (RSSI_CONTEXT_MAGIC != pStatsContext->magic)) { /* the caller presumably timed out so there is nothing we can do */ - spin_unlock(&hdd_context_lock); hddLog(VOS_TRACE_LEVEL_WARN, "%s: Invalid context, pAdapter [%p] magic [%08x]", __func__, pAdapter, pStatsContext->magic); @@ -640,19 +599,13 @@ static void hdd_GetRssiCB( v_S7_t rssi, tANI_U32 staId, void *pContext ) return; } - /* context is valid so caller is still waiting */ - - /* paranoia: invalidate the magic */ - pStatsContext->magic = 0; - - /* copy over the rssi */ + /* the race is on. caller could have timed out immediately after + we verified the magic, but if so, caller will wait a short time + for us to copy over the rssi */ pAdapter->rssi = rssi; - /* notify the caller */ + /* and notify the caller */ complete(&pStatsContext->completion); - - /* serialization is complete */ - spin_unlock(&hdd_context_lock); } VOS_STATUS wlan_hdd_get_rssi(hdd_adapter_t *pAdapter, v_S7_t *rssi_value) @@ -699,29 +652,24 @@ VOS_STATUS wlan_hdd_get_rssi(hdd_adapter_t *pAdapter, v_S7_t *rssi_value) /* request was sent -- wait for the response */ lrc = wait_for_completion_interruptible_timeout(&context.completion, msecs_to_jiffies(WLAN_WAIT_TIME_STATS)); + /* either we have a response or we timed out + either way, first invalidate our magic */ + context.magic = 0; if (lrc <= 0) { - hddLog(VOS_TRACE_LEVEL_ERROR, "%s: SME %s while retrieving RSSI", + hddLog(VOS_TRACE_LEVEL_ERROR,"%s: SME %s while retrieving RSSI ", __func__, (0 == lrc) ? "timeout" : "interrupt"); + /* there is a race condition such that the callback + function could be executing at the same time we are. of + primary concern is if the callback function had already + verified the "magic" but hasn't yet set the completion + variable. Since the completion variable is on our + stack, we'll delay just a bit to make sure the data is + still valid if that is the case */ + msleep(50); /* we'll now returned a cached value below */ } } - - /* either we never sent a request, we sent a request and received a - response or we sent a request and timed out. if we never sent a - request or if we sent a request and got a response, we want to - clear the magic out of paranoia. if we timed out there is a - race condition such that the callback function could be - executing at the same time we are. of primary concern is if the - callback function had already verified the "magic" but had not - yet set the completion variable when a timeout occurred. we - serialize these activities by invalidating the magic while - holding a shared spinlock which will cause us to block if the - callback is currently executing */ - spin_lock(&hdd_context_lock); - context.magic = 0; - spin_unlock(&hdd_context_lock); - *rssi_value = pAdapter->rssi; return VOS_STATUS_SUCCESS; @@ -747,19 +695,16 @@ static void hdd_GetRoamRssiCB( v_S7_t rssi, tANI_U32 staId, void *pContext ) return; } + /* there is a race condition that exists between this callback function + and the caller since the caller could time out either before or + while this code is executing. we'll assume the timeout hasn't + occurred, but we'll verify that right before we save our work */ + pStatsContext = pContext; pAdapter = pStatsContext->pAdapter; - - /* there is a race condition that exists between this callback - function and the caller since the caller could time out either - before or while this code is executing. we use a spinlock to - serialize these actions */ - spin_lock(&hdd_context_lock); - if ((NULL == pAdapter) || (RSSI_CONTEXT_MAGIC != pStatsContext->magic)) { /* the caller presumably timed out so there is nothing we can do */ - spin_unlock(&hdd_context_lock); hddLog(VOS_TRACE_LEVEL_WARN, "%s: Invalid context, pAdapter [%p] magic [%08x]", __func__, pAdapter, pStatsContext->magic); @@ -771,19 +716,13 @@ static void hdd_GetRoamRssiCB( v_S7_t rssi, tANI_U32 staId, void *pContext ) return; } - /* context is valid so caller is still waiting */ - - /* paranoia: invalidate the magic */ - pStatsContext->magic = 0; - - /* copy over the rssi */ + /* the race is on. caller could have timed out immediately after + we verified the magic, but if so, caller will wait a short time + for us to copy over the rssi */ pAdapter->rssi = rssi; - /* notify the caller */ + /* and notify the caller */ complete(&pStatsContext->completion); - - /* serialization is complete */ - spin_unlock(&hdd_context_lock); } @@ -839,29 +778,24 @@ VOS_STATUS wlan_hdd_get_roam_rssi(hdd_adapter_t *pAdapter, v_S7_t *rssi_value) /* request was sent -- wait for the response */ lrc = wait_for_completion_interruptible_timeout(&context.completion, msecs_to_jiffies(WLAN_WAIT_TIME_STATS)); + /* either we have a response or we timed out + either way, first invalidate our magic */ + context.magic = 0; if (lrc <= 0) { - hddLog(VOS_TRACE_LEVEL_ERROR,"%s: SME %s while retrieving RSSI", + hddLog(VOS_TRACE_LEVEL_ERROR,"%s: SME %s while retrieving RSSI ", __func__, (0 == lrc) ? "timeout" : "interrupt"); + /* there is a race condition such that the callback + function could be executing at the same time we are. of + primary concern is if the callback function had already + verified the "magic" but hasn't yet set the completion + variable. Since the completion variable is on our + stack, we'll delay just a bit to make sure the data is + still valid if that is the case */ + msleep(50); /* we'll now returned a cached value below */ } } - - /* either we never sent a request, we sent a request and received a - response or we sent a request and timed out. if we never sent a - request or if we sent a request and got a response, we want to - clear the magic out of paranoia. if we timed out there is a - race condition such that the callback function could be - executing at the same time we are. of primary concern is if the - callback function had already verified the "magic" but had not - yet set the completion variable when a timeout occurred. we - serialize these activities by invalidating the magic while - holding a shared spinlock which will cause us to block if the - callback is currently executing */ - spin_lock(&hdd_context_lock); - context.magic = 0; - spin_unlock(&hdd_context_lock); - *rssi_value = pAdapter->rssi; return VOS_STATUS_SUCCESS; @@ -980,8 +914,8 @@ void hdd_clearRoamProfileIe( hdd_adapter_t *pAdapter) pWextState->roamProfile.pRSNReqIE = (tANI_U8 *)NULL; pWextState->roamProfile.bWPSAssociation = VOS_FALSE; + pWextState->roamProfile.pAddIEScan = (tANI_U8 *)NULL; pWextState->roamProfile.nAddIEScanLength = 0; - memset(pWextState->roamProfile.addIEScan, 0 , SIR_MAC_MAX_IE_LENGTH+2); pWextState->roamProfile.pAddIEAssoc = (tANI_U8 *)NULL; pWextState->roamProfile.nAddIEAssocLength = 0; @@ -1143,15 +1077,14 @@ static int iw_set_mode(struct net_device *dev, } if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:LOGP in Progress. Ignore!!!", __func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:LOGP in Progress. Ignore!!!",__func__); return 0; } pWextState = WLAN_HDD_GET_WEXT_STATE_PTR(pAdapter); if (pWextState == NULL) { - hddLog(LOGE, "%s ERROR: Data Storage Corruption", __func__); + hddLog (LOGE, "%s ERROR: Data Storage Corruption", __func__); return -EINVAL; } @@ -1159,12 +1092,12 @@ static int iw_set_mode(struct net_device *dev, pRoamProfile = &pWextState->roamProfile; LastBSSType = pRoamProfile->BSSType; - hddLog(LOG1, "%s Old Bss type = %d", __func__, LastBSSType); + hddLog( LOG1,"%s Old Bss type = %d", __func__, LastBSSType); switch (wrqu->mode) { case IW_MODE_ADHOC: - hddLog(LOG1, "%s Setting AP Mode as IW_MODE_ADHOC", __func__); + hddLog( LOG1,"%s Setting AP Mode as IW_MODE_ADHOC", __func__); pRoamProfile->BSSType = eCSR_BSS_TYPE_START_IBSS; // Set the phymode correctly for IBSS. pConfig = (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini; @@ -1172,16 +1105,16 @@ static int iw_set_mode(struct net_device *dev, wdev->iftype = NL80211_IFTYPE_ADHOC; break; case IW_MODE_INFRA: - hddLog(LOG1, "%s Setting AP Mode as IW_MODE_INFRA", __func__); + hddLog( LOG1, "%s Setting AP Mode as IW_MODE_INFRA", __func__); pRoamProfile->BSSType = eCSR_BSS_TYPE_INFRASTRUCTURE; wdev->iftype = NL80211_IFTYPE_STATION; break; case IW_MODE_AUTO: - hddLog(LOG1, "%s Setting AP Mode as IW_MODE_AUTO", __func__); + hddLog(LOG1,"%s Setting AP Mode as IW_MODE_AUTO", __func__); pRoamProfile->BSSType = eCSR_BSS_TYPE_ANY; break; default: - hddLog(LOG1, "%s Unknown AP Mode value", __func__); + hddLog(LOG1,"%s Unknown AP Mode value", __func__); return -EOPNOTSUPP; } @@ -1204,6 +1137,8 @@ static int iw_set_mode(struct net_device *dev, } } + + EXIT(); return 0; } @@ -1211,14 +1146,13 @@ static int iw_set_mode(struct net_device *dev, static int iw_get_mode(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, - char *extra) + v_U32_t *uwrq, char *extra) { hdd_wext_state_t *pWextState; hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); - hddLog(LOG1, "In %s", __func__); + hddLog (LOG1, "In %s",__func__); if (NULL == pAdapter) { @@ -1228,15 +1162,14 @@ static int iw_get_mode(struct net_device *dev, } if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:LOGP in Progress. Ignore!!!", __func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:LOGP in Progress. Ignore!!!",__func__); return 0; } pWextState = WLAN_HDD_GET_WEXT_STATE_PTR(pAdapter); if (pWextState == NULL) { - hddLog(LOGE, "%s ERROR: Data Storage Corruption", __func__); + hddLog (LOGE, "%s ERROR: Data Storage Corruption", __func__); return -EINVAL; } @@ -1244,22 +1177,21 @@ static int iw_get_mode(struct net_device *dev, { case eCSR_BSS_TYPE_INFRASTRUCTURE: hddLog(LOG1, "%s returns IW_MODE_INFRA\n", __func__); - wrqu->mode = IW_MODE_INFRA; + *uwrq = IW_MODE_INFRA ; break; case eCSR_BSS_TYPE_IBSS: case eCSR_BSS_TYPE_START_IBSS: - hddLog(LOG1, "%s returns IW_MODE_ADHOC\n", __func__); - wrqu->mode = IW_MODE_ADHOC; + hddLog( LOG1,"%s returns IW_MODE_ADHOC\n", __func__); + *uwrq= IW_MODE_ADHOC; break; case eCSR_BSS_TYPE_ANY: - hddLog(LOG1, "%s returns IW_MODE_AUTO\n", __func__); - wrqu->mode = IW_MODE_AUTO; + hddLog( LOG1,"%s returns IW_MODE_AUTO\n", __func__); + *uwrq= IW_MODE_AUTO; break; default: - hddLog(LOG1, "%s returns APMODE_UNKNOWN\n", __func__); + hddLog( LOG1,"%s returns APMODE_UNKNOWN\n", __func__); break; } - return 0; } @@ -1606,35 +1538,22 @@ static int iw_set_genie(struct net_device *dev, { hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); hdd_wext_state_t *pWextState = WLAN_HDD_GET_WEXT_STATE_PTR(pAdapter); - u_int8_t *genie = NULL; - u_int8_t *base_genie = NULL; + u_int8_t *genie; v_U16_t remLen; ENTER(); + if(!wrqu->data.length) { + hdd_clearRoamProfileIe(pAdapter); + EXIT(); + return 0; + } if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:LOGP in Progress. Ignore!!!", __func__); - return 0; - } - - if (!wrqu->data.length) { - hdd_clearRoamProfileIe(pAdapter); - EXIT(); - return 0; - } - - base_genie = mem_alloc_copy_from_user_helper(wrqu->data.pointer, - wrqu->data.length); - if (NULL == base_genie) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "mem_alloc_copy_from_user_helper fail"); - return -ENOMEM; - } - - genie = base_genie; + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:LOGP in Progress. Ignore!!!",__func__); + return 0; + } + genie = wrqu->data.pointer; remLen = wrqu->data.length; hddLog(LOG1,"iw_set_genie ioctl IE[0x%X], LEN[%d]\n", genie[0], genie[1]); @@ -1657,10 +1576,7 @@ static int iw_set_genie(struct net_device *dev, { case IE_EID_VENDOR: if ((IE_LEN_SIZE+IE_EID_SIZE+IE_VENDOR_OUI_SIZE) > eLen) /* should have at least OUI */ - { - kfree(base_genie); - return -EINVAL; - } + return -EINVAL; if (0 == memcmp(&genie[0], "\x00\x50\xf2\x04", 4)) { @@ -1673,7 +1589,6 @@ static int iw_set_genie(struct net_device *dev, hddLog(VOS_TRACE_LEVEL_FATAL, "Cannot accommodate genIE. " "Need bigger buffer space\n"); VOS_ASSERT(0); - kfree(base_genie); return -ENOMEM; } // save to Additional IE ; it should be accumulated to handle WPS IE + other IE @@ -1699,7 +1614,6 @@ static int iw_set_genie(struct net_device *dev, hddLog(VOS_TRACE_LEVEL_FATAL, "Cannot accommodate genIE. " "Need bigger buffer space\n"); VOS_ASSERT(0); - kfree(base_genie); return -ENOMEM; } // save to Additional IE ; it should be accumulated to handle WPS IE + other IE @@ -1717,14 +1631,12 @@ static int iw_set_genie(struct net_device *dev, default: hddLog (LOGE, "%s Set UNKNOWN IE %X",__func__, elementId); - kfree(base_genie); return 0; } genie += eLen; remLen -= eLen; } EXIT(); - kfree(base_genie); return 0; } @@ -1769,14 +1681,9 @@ static int iw_get_genie(struct net_device *dev, pAdapter->sessionId, &length, genIeBytes); - length = VOS_MIN((u_int16_t) length, DOT11F_IE_RSN_MAX_LEN); - if (wrqu->data.length < length) - { - hddLog(LOG1, "%s: failed to copy data to user buffer", __func__); - return -EFAULT; - } - vos_mem_copy( extra, (v_VOID_t*)genIeBytes, length); - wrqu->data.length = length; + wrqu->data.length = VOS_MIN((u_int16_t) length, DOT11F_IE_RSN_MAX_LEN); + + vos_mem_copy( wrqu->data.pointer, (v_VOID_t*)genIeBytes, wrqu->data.length); hddLog(LOG1,"%s: RSN IE of %d bytes returned\n", __func__, wrqu->data.length ); @@ -2116,6 +2023,7 @@ static int iw_get_range(struct net_device *dev, struct iw_request_info *info, static void iw_power_callback_fn (void *pContext, eHalStatus status) { struct statsContext *pStatsContext; + hdd_adapter_t *pAdapter; if (NULL == pContext) { @@ -2125,40 +2033,31 @@ static void iw_power_callback_fn (void *pContext, eHalStatus status) return; } - pStatsContext = (struct statsContext *)pContext; + /* there is a race condition that exists between this callback function + and the caller since the caller could time out either before or + while this code is executing. we'll assume the timeout hasn't + occurred, but we'll verify that right before we save our work */ - /* there is a race condition that exists between this callback - function and the caller since the caller could time out either - before or while this code is executing. we use a spinlock to - serialize these actions */ - spin_lock(&hdd_context_lock); + pStatsContext = (struct statsContext *)pContext; + pAdapter = pStatsContext->pAdapter; - if (POWER_CONTEXT_MAGIC != pStatsContext->magic) + if ((NULL == pAdapter) || (POWER_CONTEXT_MAGIC != pStatsContext->magic)) { /* the caller presumably timed out so there is nothing we can do */ - spin_unlock(&hdd_context_lock); hddLog(VOS_TRACE_LEVEL_WARN, - "%s: Invalid context, magic [%08x]", - __func__, pStatsContext->magic); + "%s: Invalid context, pAdapter [%p] magic [%08x]", + __func__, pAdapter, pStatsContext->magic); if (ioctl_debug) { - pr_info("%s: Invalid context, magic [%08x]\n", - __func__, pStatsContext->magic); + pr_info("%s: Invalid context, pAdapter [%p] magic [%08x]\n", + __func__, pAdapter, pStatsContext->magic); } return; } - /* context is valid so caller is still waiting */ - - /* paranoia: invalidate the magic */ - pStatsContext->magic = 0; - - /* notify the caller */ + /* and notify the caller */ complete(&pStatsContext->completion); - - /* serialization is complete */ - spin_unlock(&hdd_context_lock); } /* Callback function for tx per hit */ @@ -2198,20 +2097,17 @@ void hdd_GetClassA_statisticsCB(void *pStats, void *pContext) return; } + /* there is a race condition that exists between this callback function + and the caller since the caller could time out either before or + while this code is executing. we'll assume the timeout hasn't + occurred, but we'll verify that right before we save our work */ + pClassAStats = pStats; pStatsContext = pContext; pAdapter = pStatsContext->pAdapter; - - /* there is a race condition that exists between this callback - function and the caller since the caller could time out either - before or while this code is executing. we use a spinlock to - serialize these actions */ - spin_lock(&hdd_context_lock); - if ((NULL == pAdapter) || (STATS_CONTEXT_MAGIC != pStatsContext->magic)) { /* the caller presumably timed out so there is nothing we can do */ - spin_unlock(&hdd_context_lock); hddLog(VOS_TRACE_LEVEL_WARN, "%s: Invalid context, pAdapter [%p] magic [%08x]", __func__, pAdapter, pStatsContext->magic); @@ -2223,19 +2119,13 @@ void hdd_GetClassA_statisticsCB(void *pStats, void *pContext) return; } - /* context is valid so caller is still waiting */ - - /* paranoia: invalidate the magic */ - pStatsContext->magic = 0; - - /* copy over the stats. do so as a struct copy */ + /* the race is on. caller could have timed out immediately after + we verified the magic, but if so, caller will wait a short time + for us to copy over the stats. do so as a struct copy */ pAdapter->hdd_stats.ClassA_stat = *pClassAStats; - /* notify the caller */ + /* and notify the caller */ complete(&pStatsContext->completion); - - /* serialization is complete */ - spin_unlock(&hdd_context_lock); } VOS_STATUS wlan_hdd_get_classAstats(hdd_adapter_t *pAdapter) @@ -2273,7 +2163,7 @@ VOS_STATUS wlan_hdd_get_classAstats(hdd_adapter_t *pAdapter) if (eHAL_STATUS_SUCCESS != hstatus) { hddLog(VOS_TRACE_LEVEL_ERROR, - "%s: Unable to retrieve Class A statistics", + "%s: Unable to retrieve Class A statistics ", __func__); /* we'll returned a cached value below */ } @@ -2282,30 +2172,24 @@ VOS_STATUS wlan_hdd_get_classAstats(hdd_adapter_t *pAdapter) /* request was sent -- wait for the response */ lrc = wait_for_completion_interruptible_timeout(&context.completion, msecs_to_jiffies(WLAN_WAIT_TIME_STATS)); + /* either we have a response or we timed out + either way, first invalidate our magic */ + context.magic = 0; if (lrc <= 0) { hddLog(VOS_TRACE_LEVEL_ERROR, "%s: SME %s while retrieving Class A statistics", __func__, (0 == lrc) ? "timeout" : "interrupt"); + /* there is a race condition such that the callback + function could be executing at the same time we are. of + primary concern is if the callback function had already + verified the "magic" but hasn't yet set the completion + variable. Since the completion variable is on our + stack, we'll delay just a bit to make sure the data is + still valid if that is the case */ + msleep(50); } } - - /* either we never sent a request, we sent a request and received a - response or we sent a request and timed out. if we never sent a - request or if we sent a request and got a response, we want to - clear the magic out of paranoia. if we timed out there is a - race condition such that the callback function could be - executing at the same time we are. of primary concern is if the - callback function had already verified the "magic" but had not - yet set the completion variable when a timeout occurred. we - serialize these activities by invalidating the magic while - holding a shared spinlock which will cause us to block if the - callback is currently executing */ - spin_lock(&hdd_context_lock); - context.magic = 0; - spin_unlock(&hdd_context_lock); - - /* either callback updated pAdapter stats or it has cached data */ return VOS_STATUS_SUCCESS; } @@ -2330,11 +2214,10 @@ static void hdd_get_station_statisticsCB(void *pStats, void *pContext) return; } - /* there is a race condition that exists between this callback - function and the caller since the caller could time out either - before or while this code is executing. we use a spinlock to - serialize these actions */ - spin_lock(&hdd_context_lock); + /* there is a race condition that exists between this callback function + and the caller since the caller could time out either before or + while this code is executing. we'll assume the timeout hasn't + occurred, but we'll verify that right before we save our work */ pSummaryStats = (tCsrSummaryStatsInfo *)pStats; pClassAStats = (tCsrGlobalClassAStatsInfo *)( pSummaryStats + 1 ); @@ -2343,7 +2226,6 @@ static void hdd_get_station_statisticsCB(void *pStats, void *pContext) if ((NULL == pAdapter) || (STATS_CONTEXT_MAGIC != pStatsContext->magic)) { /* the caller presumably timed out so there is nothing we can do */ - spin_unlock(&hdd_context_lock); hddLog(VOS_TRACE_LEVEL_WARN, "%s: Invalid context, pAdapter [%p] magic [%08x]", __func__, pAdapter, pStatsContext->magic); @@ -2355,20 +2237,14 @@ static void hdd_get_station_statisticsCB(void *pStats, void *pContext) return; } - /* context is valid so caller is still waiting */ - - /* paranoia: invalidate the magic */ - pStatsContext->magic = 0; - - /* copy over the stats. do so as a struct copy */ + /* the race is on. caller could have timed out immediately after + we verified the magic, but if so, caller will wait a short time + for us to copy over the stats. do so as a struct copy */ pAdapter->hdd_stats.summary_stat = *pSummaryStats; pAdapter->hdd_stats.ClassA_stat = *pClassAStats; - /* notify the caller */ + /* and notify the caller */ complete(&pStatsContext->completion); - - /* serialization is complete */ - spin_unlock(&hdd_context_lock); } VOS_STATUS wlan_hdd_get_station_stats(hdd_adapter_t *pAdapter) @@ -2412,31 +2288,24 @@ VOS_STATUS wlan_hdd_get_station_stats(hdd_adapter_t *pAdapter) /* request was sent -- wait for the response */ lrc = wait_for_completion_interruptible_timeout(&context.completion, msecs_to_jiffies(WLAN_WAIT_TIME_STATS)); - + /* either we have a response or we timed out + either way, first invalidate our magic */ + context.magic = 0; if (lrc <= 0) { hddLog(VOS_TRACE_LEVEL_ERROR, "%s: SME %s while retrieving statistics", __func__, (0 == lrc) ? "timeout" : "interrupt"); + /* there is a race condition such that the callback + function could be executing at the same time we are. of + primary concern is if the callback function had already + verified the "magic" but hasn't yet set the completion + variable. Since the completion variable is on our + stack, we'll delay just a bit to make sure the data is + still valid if that is the case */ + msleep(50); } } - - /* either we never sent a request, we sent a request and received a - response or we sent a request and timed out. if we never sent a - request or if we sent a request and got a response, we want to - clear the magic out of paranoia. if we timed out there is a - race condition such that the callback function could be - executing at the same time we are. of primary concern is if the - callback function had already verified the "magic" but had not - yet set the completion variable when a timeout occurred. we - serialize these activities by invalidating the magic while - holding a shared spinlock which will cause us to block if the - callback is currently executing */ - spin_lock(&hdd_context_lock); - context.magic = 0; - spin_unlock(&hdd_context_lock); - - /* either callback updated pAdapter stats or it has cached data */ return VOS_STATUS_SUCCESS; } @@ -2514,7 +2383,7 @@ static int iw_get_linkspeed(struct net_device *dev, } /* a value is being successfully returned */ - return rc; + return 0; } @@ -2530,7 +2399,7 @@ static int iw_get_rssi(struct net_device *dev, union iwreq_data *wrqu, char *extra) { hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); - char *cmd = extra; + char *cmd = (char*)wrqu->data.pointer; int len = wrqu->data.length; v_S7_t s7Rssi = 0; hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); @@ -2577,7 +2446,7 @@ static int iw_get_rssi(struct net_device *dev, } /* a value is being successfully returned */ - return rc; + return 0; } /* @@ -2618,12 +2487,6 @@ VOS_STATUS wlan_hdd_enter_bmps(hdd_adapter_t *pAdapter, int mode) hddLog(VOS_TRACE_LEVEL_INFO_HIGH, "power mode=%d", mode); pHddCtx = WLAN_HDD_GET_CTX(pAdapter); - if (pHddCtx->isLogpInProgress) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s:LOGP in Progress. Ignore!!!", __func__); - return VOS_STATUS_E_FAILURE; - } - init_completion(&context.completion); context.pAdapter = pAdapter; @@ -2641,15 +2504,23 @@ VOS_STATUS wlan_hdd_enter_bmps(hdd_adapter_t *pAdapter, int mode) sme_SetDHCPTillPowerActiveFlag(pHddCtx->hHal, TRUE); if (eHAL_STATUS_PMC_PENDING == status) { - /* request was sent -- wait for the response */ int lrc = wait_for_completion_interruptible_timeout( &context.completion, msecs_to_jiffies(WLAN_WAIT_TIME_POWER)); - + context.magic = 0; if (lrc <= 0) { hddLog(VOS_TRACE_LEVEL_ERROR,"%s: SME %s while requesting fullpower ", __func__, (0 == lrc) ? "timeout" : "interrupt"); + /* there is a race condition such that the callback + function could be executing at the same time we are. of + primary concern is if the callback function had already + verified the "magic" but hasn't yet set the completion + variable. Since the completion variable is on our + stack, we'll delay just a bit to make sure the data is + still valid if that is the case */ + msleep(50); + /* we'll now returned a cached value below */ } } } @@ -2667,15 +2538,23 @@ VOS_STATUS wlan_hdd_enter_bmps(hdd_adapter_t *pAdapter, int mode) iw_power_callback_fn, &context); if (eHAL_STATUS_PMC_PENDING == status) { - /* request was sent -- wait for the response */ int lrc = wait_for_completion_interruptible_timeout( &context.completion, msecs_to_jiffies(WLAN_WAIT_TIME_POWER)); + context.magic = 0; if (lrc <= 0) { - hddLog(VOS_TRACE_LEVEL_ERROR, - "%s: SME %s while requesting BMPS", - __func__, (0 == lrc) ? "timeout" : "interrupt"); + hddLog(VOS_TRACE_LEVEL_ERROR,"%s: SME %s while requesting BMPS ", + __func__, (0 == lrc) ? "timeout" : "interrupt"); + /* there is a race condition such that the callback + function could be executing at the same time we are. of + primary concern is if the callback function had already + verified the "magic" but hasn't yet set the completion + variable. Since the completion variable is on our + stack, we'll delay just a bit to make sure the data is + still valid if that is the case */ + msleep(50); + /* we'll now returned a cached value below */ } } } @@ -2685,22 +2564,6 @@ VOS_STATUS wlan_hdd_enter_bmps(hdd_adapter_t *pAdapter, int mode) "enabled in the cfg"); } } - - /* either we never sent a request, we sent a request and received a - response or we sent a request and timed out. if we never sent a - request or if we sent a request and got a response, we want to - clear the magic out of paranoia. if we timed out there is a - race condition such that the callback function could be - executing at the same time we are. of primary concern is if the - callback function had already verified the "magic" but had not - yet set the completion variable when a timeout occurred. we - serialize these activities by invalidating the magic while - holding a shared spinlock which will cause us to block if the - callback is currently executing */ - spin_lock(&hdd_context_lock); - context.magic = 0; - spin_unlock(&hdd_context_lock); - return VOS_STATUS_SUCCESS; } @@ -2793,23 +2656,29 @@ static int iw_set_priv(struct net_device *dev, union iwreq_data *wrqu, char *extra) { hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); - char *cmd = NULL; int cmd_len = wrqu->data.length; + char* cmd = (char *)kmalloc(cmd_len+1, GFP_KERNEL); //IKHSS7-35965, a19091, Motorola int ret = 0; - int rc = 0; - VOS_STATUS vos_status = VOS_STATUS_SUCCESS; - + int status = 0; hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); ENTER(); - cmd = mem_alloc_copy_from_user_helper(wrqu->data.pointer, - wrqu->data.length); - if (NULL == cmd) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "mem_alloc_copy_from_user_helper fail"); - return -ENOMEM; + + //IKHSS7-35965, a19091, Motorola changes -- BEGIN + if(cmd == NULL){ + hddLog(VOS_TRACE_LEVEL_FATAL, "%s Malloc failed for buff of size %d - ignoring ioctl!", + __FUNCTION__, cmd_len); + status = -ENOMEM; + goto cleanup_and_return; + } + + if(copy_from_user(cmd, (char*)(wrqu->data.pointer), cmd_len)) { + hddLog(VOS_TRACE_LEVEL_FATAL, "%s -- copy_from_user --data pointer failed! bailing", + __FUNCTION__); + status = -EFAULT; + goto cleanup_and_return; } + //IKHSS7-35965, a19091, Motorola changes -- END if (ioctl_debug) { @@ -2820,32 +2689,27 @@ static int iw_set_priv(struct net_device *dev, "%s: ***Received %s cmd from Wi-Fi GUI***", __func__, cmd); if (pHddCtx->isLogpInProgress) { - if (ioctl_debug) - { - pr_info("%s: RESTART in progress\n", __func__); - } + if (ioctl_debug) + { + pr_info("%s: RESTART in progress\n", __func__); + } - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:LOGP in Progress. Ignore!!!",__func__); - kfree(cmd); - return -EBUSY; + goto cleanup_and_return; //IKHSS7-35965, a19091, Motorola } - if (strncmp(cmd, "CSCAN", 5) == 0 ) + if(strncmp(cmd, "CSCAN",5) == 0 ) { - if (eHAL_STATUS_SUCCESS != iw_set_cscan(dev, info, wrqu, cmd)) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: Error in iw_set_scan!", __func__); - rc = -EINVAL; - } + status = iw_set_cscan(dev, info, wrqu, extra); } else if( strcasecmp(cmd, "start") == 0 ) { hddLog(VOS_TRACE_LEVEL_INFO_HIGH, "Start command\n"); /*Exit from Deep sleep or standby if we get the driver START cmd from android GUI*/ + status = wlan_hdd_exit_lowpower(pHddCtx, pAdapter); - vos_status = wlan_hdd_exit_lowpower(pHddCtx, pAdapter); - if (vos_status == VOS_STATUS_SUCCESS) + if(status == VOS_STATUS_SUCCESS) { union iwreq_data wrqu; char buf[10]; @@ -2856,10 +2720,9 @@ static int iw_set_priv(struct net_device *dev, } else { - hddLog(VOS_TRACE_LEVEL_ERROR, "%s: START CMD Status %d", __func__, vos_status); - rc = -EIO; + hddLog(VOS_TRACE_LEVEL_FATAL, "%s: START CMD Status %d", __func__, status); } - goto done; + goto done; //IKHSS7-35965, a19091, Motorola } else if( strcasecmp(cmd, "stop") == 0 ) { @@ -2872,7 +2735,8 @@ static int iw_set_priv(struct net_device *dev, memset(&wrqu, 0, sizeof(wrqu)); wrqu.data.length = strlcpy(buf, "STOP", sizeof(buf)); wireless_send_event(pAdapter->dev, IWEVCUSTOM, &wrqu, buf); - goto done; + status = VOS_STATUS_SUCCESS; + goto done; //IKHSS7-35965, a19091, Motorola } else if (strcasecmp(cmd, "macaddr") == 0) { @@ -2895,23 +2759,21 @@ static int iw_set_priv(struct net_device *dev, } else if( strcasecmp(cmd, "linkspeed") == 0 ) { - ret = iw_get_linkspeed(dev, info, wrqu, cmd); + status = iw_get_linkspeed(dev, info, wrqu, extra); } else if( strncasecmp(cmd, "COUNTRY", 7) == 0 ) { char *country_code; long lrc; - eHalStatus eHal_status; country_code = cmd + 8; init_completion(&pAdapter->change_country_code); - eHal_status = sme_ChangeCountryCode(pHddCtx->hHal, + status = (int)sme_ChangeCountryCode(pHddCtx->hHal, (void *)(tSmeChangeCountryCallback)wlan_hdd_change_country_code_callback, country_code, pAdapter, - pHddCtx->pvosContext, - eSIR_TRUE); + pHddCtx->pvosContext); /* Wait for completion */ lrc = wait_for_completion_interruptible_timeout(&pAdapter->change_country_code, @@ -2920,45 +2782,30 @@ static int iw_set_priv(struct net_device *dev, if (lrc <= 0) { hddLog(VOS_TRACE_LEVEL_ERROR,"%s: SME %s while setting country code ", - __func__, "Timed out"); + __func__, "Timed out"); } - if (eHAL_STATUS_SUCCESS != eHal_status) + if( 0 != status ) { VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, - "%s: SME Change Country code fail", __func__); - kfree(cmd); - return -EINVAL; + "%s: SME Change Country code fail \n",__func__); + //IKHSS7-35965, a19091, Motorola changes -- BEGIN + status = VOS_STATUS_E_FAILURE; + goto cleanup_and_return; + //IKHSS7-35965, a19091, Motorola changes -- END } } else if( strncasecmp(cmd, "rssi", 4) == 0 ) { - ret = iw_get_rssi(dev, info, wrqu, cmd); + status = iw_get_rssi(dev, info, wrqu, extra); } else if( strncasecmp(cmd, "powermode", 9) == 0 ) { int mode; - char *ptr; - - if (9 < cmd_len) - { - ptr = (char*)(cmd + 9); - - }else{ - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "CMD LENGTH %d is not correct",cmd_len); - kfree(cmd); - return -EINVAL; - } - - if (1 != sscanf(ptr,"%d",&mode)) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "powermode input %s is not correct",ptr); - kfree(cmd); - return -EIO; - } + char *ptr = (char*)(cmd + 9); + sscanf(ptr,"%d",&mode); wlan_hdd_enter_bmps(pAdapter, mode); + goto done; //IKHSS7-35965, a19091, Motorola /*TODO:Set the power mode*/ } else if (strncasecmp(cmd, "getpower", 8) == 0 ) { @@ -2976,102 +2823,91 @@ static int iw_set_priv(struct net_device *dev, } else if( strncasecmp(cmd, "btcoexmode", 10) == 0 ) { hddLog( VOS_TRACE_LEVEL_INFO, "btcoexmode\n"); + goto done; //IKHSS7-35965, a19091, Motorola /*TODO: set the btcoexmode*/ } else if( strcasecmp(cmd, "btcoexstat") == 0 ) { hddLog(VOS_TRACE_LEVEL_INFO, "BtCoex Status\n"); + goto done; //IKHSS7-35965, a19091, Motorola /*TODO: Return the btcoex status*/ } else if( strcasecmp(cmd, "rxfilter-start") == 0 ) { hddLog(VOS_TRACE_LEVEL_INFO, "Rx Data Filter Start command\n"); + goto done; //IKHSS7-35965, a19091, Motorola /*TODO: Enable Rx data Filter*/ } else if( strcasecmp(cmd, "rxfilter-stop") == 0 ) { hddLog(VOS_TRACE_LEVEL_INFO, "Rx Data Filter Stop command\n"); - + goto done; //IKHSS7-35965, a19091, Motorola + /*TODO: Disable Rx data Filter*/ } else if( strcasecmp(cmd, "rxfilter-statistics") == 0 ) { hddLog( VOS_TRACE_LEVEL_INFO, "Rx Data Filter Statistics command\n"); + goto done; //IKHSS7-35965, a19091, Motorola /*TODO: rxfilter-statistics*/ } else if( strncasecmp(cmd, "rxfilter-add", 12) == 0 ) { hddLog( VOS_TRACE_LEVEL_INFO, "rxfilter-add\n"); + goto done; //IKHSS7-35965, a19091, Motorola /*TODO: rxfilter-add*/ } else if( strncasecmp(cmd, "rxfilter-remove",15) == 0 ) { hddLog( VOS_TRACE_LEVEL_INFO, "rxfilter-remove\n"); + goto done; //IKHSS7-35965, a19091, Motorola /*TODO: rxfilter-remove*/ } #ifdef FEATURE_WLAN_SCAN_PNO else if( strncasecmp(cmd, "pnosetup", 8) == 0 ) { hddLog( VOS_TRACE_LEVEL_INFO, "pnosetup"); + goto cleanup_and_return; //IKHSS7-35965, a19091, Motorola /*TODO: support pnosetup*/ } else if( strncasecmp(cmd, "pnoforce", 8) == 0 ) { hddLog( VOS_TRACE_LEVEL_INFO, "pnoforce"); + goto cleanup_and_return; //IKHSS7-35965, a19091, Motorola /*TODO: support pnoforce*/ } else if( strncasecmp(cmd, "pno",3) == 0 ) { - hddLog( VOS_TRACE_LEVEL_INFO, "pno"); - vos_status = iw_set_pno(dev, info, wrqu, cmd, 3); - kfree(cmd); - return (vos_status == VOS_STATUS_SUCCESS) ? 0 : -EINVAL; + hddLog( VOS_TRACE_LEVEL_INFO, "pno\n"); + status = iw_set_pno(dev, info, wrqu, extra, 3); + goto cleanup_and_return; //IKHSS7-35965, a19091, Motorola } else if( strncasecmp(cmd, "rssifilter",10) == 0 ) { - hddLog( VOS_TRACE_LEVEL_INFO, "rssifilter"); - vos_status = iw_set_rssi_filter(dev, info, wrqu, cmd, 10); - kfree(cmd); - return (vos_status == VOS_STATUS_SUCCESS) ? 0 : -EINVAL; + + hddLog( VOS_TRACE_LEVEL_INFO, "rssifilter\n"); + status = iw_set_rssi_filter(dev, info, wrqu, extra, 10); + goto cleanup_and_return; //IKHSS7-35965, a19091, Motorola } #endif /*FEATURE_WLAN_SCAN_PNO*/ else if( strncasecmp(cmd, "powerparams",11) == 0 ) { - hddLog( VOS_TRACE_LEVEL_INFO, "powerparams"); - vos_status = iw_set_power_params(dev, info, wrqu, cmd, 11); - kfree(cmd); - return (vos_status == VOS_STATUS_SUCCESS) ? 0 : -EINVAL; + hddLog( VOS_TRACE_LEVEL_INFO, "powerparams\n"); + status = iw_set_power_params(dev, info, wrqu, extra, 11); + goto cleanup_and_return; //IKHSS7-35965, a19091, Motorola } else if( 0 == strncasecmp(cmd, "CONFIG-TX-TRACKING", 18) ) { tSirTxPerTrackingParam tTxPerTrackingParam; - char *ptr; - - if (18 < cmd_len) - { - ptr = (char*)(cmd + 18); - }else{ - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "CMD LENGTH %d is not correct",cmd_len); - kfree(cmd); - return -EINVAL; - } - - if (4 != sscanf(ptr,"%hhu %hhu %hhu %lu", - &(tTxPerTrackingParam.ucTxPerTrackingEnable), - &(tTxPerTrackingParam.ucTxPerTrackingPeriod), - &(tTxPerTrackingParam.ucTxPerTrackingRatio), - &(tTxPerTrackingParam.uTxPerTrackingWatermark))) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "CONFIG-TX-TRACKING %s input is not correct",ptr); - kfree(cmd); - return -EIO; - } + char *ptr = (char*)(cmd + 18); + sscanf(ptr,"%hhu %hhu %hhu %lu",&(tTxPerTrackingParam.ucTxPerTrackingEnable), &(tTxPerTrackingParam.ucTxPerTrackingPeriod), + &(tTxPerTrackingParam.ucTxPerTrackingRatio), &(tTxPerTrackingParam.uTxPerTrackingWatermark)); // parameters checking // period has to be larger than 0 if (0 == tTxPerTrackingParam.ucTxPerTrackingPeriod) { VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, "Period input is not correct"); - kfree(cmd); - return -EIO; + //IKHSS7-35965, a19091, Motorola changes -- BEGIN + status = VOS_STATUS_E_FAILURE; + goto cleanup_and_return; + //IKHSS7-35965, a19091, Motorola changes -- END } // use default value 5 is the input is not reasonable. in unit of 10% @@ -3088,18 +2924,20 @@ static int iw_set_priv(struct net_device *dev, tTxPerTrackingParam.uTxPerTrackingWatermark = TX_PER_TRACKING_DEFAULT_WATERMARK; } - if (eHAL_STATUS_SUCCESS != - sme_SetTxPerTracking(pHddCtx->hHal, - hdd_tx_per_hit_cb, - (void*)pAdapter, &tTxPerTrackingParam)) { + status = sme_SetTxPerTracking(pHddCtx->hHal, hdd_tx_per_hit_cb, (void*)pAdapter, &tTxPerTrackingParam); + if(status != eHAL_STATUS_SUCCESS){ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, "Set Tx PER Tracking Failed!"); - rc = -EIO; } } else { hddLog( VOS_TRACE_LEVEL_WARN, "%s: Unsupported GUI command %s", __func__, cmd); } + //IKHSS7-35965, a19091, Motorola changes -- BEGIN + if(copy_to_user((char*)(wrqu->data.pointer), cmd, cmd_len)) { + hddLog( VOS_TRACE_LEVEL_FATAL, "%s: COPY to user failed ... ignoring",__FUNCTION__); + } + //IKHSS7-35965, a19091, Motorola changes -- END done: /* many of the commands write information back into the command string using snprintf(). check the return value here in one @@ -3107,27 +2945,22 @@ done: if ((ret < 0) || (ret >= cmd_len)) { /* there was an encoding error or overflow */ - rc = -EINVAL; - } - else if (ret > 0) - { - if (copy_to_user(wrqu->data.pointer, cmd, ret)) - { - hddLog(VOS_TRACE_LEVEL_ERROR, - "%s: failed to copy data to user buffer", __func__); - kfree(cmd); - return -EFAULT; - } - wrqu->data.length = ret; + status = -EIO; } if (ioctl_debug) { pr_info("%s: rsp [%s] len [%d] status %d\n", - __func__, cmd, wrqu->data.length, rc); + __func__, cmd, wrqu->data.length, status); + } + //IKHSS7-35965, a19091, Motorola changes -- BEGIN +cleanup_and_return: + if(cmd != NULL) { + kfree(cmd); } - kfree(cmd); - return rc; + //IKHSS7-35965, a19091, Motorola changes -- END + return status; + } static int iw_set_nick(struct net_device *dev, @@ -3759,9 +3592,10 @@ static int iw_setint_getnone(struct net_device *dev, struct iw_request_info *inf hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pAdapter); hdd_wext_state_t *pWextState = WLAN_HDD_GET_WEXT_STATE_PTR(pAdapter); - int *value = (int *)extra; - int sub_cmd = value[0]; - int set_value = value[1]; + int cmd_len = wrqu->data.length; + int *value = (int *) kmalloc(cmd_len+1, GFP_KERNEL); // Motorola, IKHSS7-39028 + int sub_cmd; + int set_value; int ret = 0; /* success */ int enable_pbm, enable_mp; #ifdef CONFIG_HAS_EARLYSUSPEND @@ -3776,6 +3610,20 @@ static int iw_setint_getnone(struct net_device *dev, struct iw_request_info *inf return -EBUSY; } + if(value == NULL) + return -ENOMEM; + + if(copy_from_user((char *) value, (char*)(wrqu->data.pointer), cmd_len)) { + hddLog(VOS_TRACE_LEVEL_FATAL, "%s -- copy_from_user --data pointer failed! bailing", + __FUNCTION__); + kfree(value); + return -EFAULT; + } + + sub_cmd = value[0]; + set_value = value[1]; + kfree(value); + switch(sub_cmd) { case WE_SET_11D_STATE: @@ -3837,33 +3685,29 @@ static int iw_setint_getnone(struct net_device *dev, struct iw_request_info *inf status = sme_RequestFullPower(WLAN_HDD_GET_HAL_CTX(pAdapter), iw_power_callback_fn, &context, eSME_FULL_PWR_NEEDED_BY_HDD); - if (eHAL_STATUS_PMC_PENDING == status) + if(eHAL_STATUS_PMC_PENDING == status) { int lrc = wait_for_completion_interruptible_timeout( &context.completion, msecs_to_jiffies(WLAN_WAIT_TIME_POWER)); - + context.magic = 0; if (lrc <= 0) { - hddLog(VOS_TRACE_LEVEL_ERROR, - "%s: SME %s while requesting fullpower", - __func__, (0 == lrc) ? - "timeout" : "interrupt"); + hddLog(VOS_TRACE_LEVEL_ERROR,"%s: SME %s while " + "requesting fullpower ", + __func__, (0 == lrc) ? + "timeout" : "interrupt"); + /* there is a race condition such that the callback + function could be executing at the same time we are. of + primary concern is if the callback function had already + verified the "magic" but hasn't yet set the completion + variable. Since the completion variable is on our + stack, we'll delay just a bit to make sure the data is + still valid if that is the case */ + msleep(50); + /* we'll now returned a cached value below */ } } - /* either we have a response or we timed out. if we timed - out there is a race condition such that the callback - function could be executing at the same time we are. of - primary concern is if the callback function had already - verified the "magic" but had not yet set the completion - variable when a timeout occurred. we serialize these - activities by invalidating the magic while holding a - shared spinlock which will cause us to block if the - callback is currently executing */ - spin_lock(&hdd_context_lock); - context.magic = 0; - spin_unlock(&hdd_context_lock); - hddLog(LOGE, "iwpriv Full Power completed\n"); break; } @@ -3885,33 +3729,29 @@ static int iw_setint_getnone(struct net_device *dev, struct iw_request_info *inf status = sme_RequestBmps(WLAN_HDD_GET_HAL_CTX(pAdapter), iw_power_callback_fn, &context); - if (eHAL_STATUS_PMC_PENDING == status) + if(eHAL_STATUS_PMC_PENDING == status) { int lrc = wait_for_completion_interruptible_timeout( &context.completion, msecs_to_jiffies(WLAN_WAIT_TIME_POWER)); + context.magic = 0; if (lrc <= 0) { - hddLog(VOS_TRACE_LEVEL_ERROR, - "%s: SME %s while requesting BMPS", - __func__, (0 == lrc) ? "timeout" : - "interrupt"); + hddLog(VOS_TRACE_LEVEL_ERROR,"%s: SME %s while " + "requesting BMPS", + __func__, (0 == lrc) ? "timeout" : + "interrupt"); + /* there is a race condition such that the callback + function could be executing at the same time we are. of + primary concern is if the callback function had already + verified the "magic" but hasn't yet set the completion + variable. Since the completion variable is on our + stack, we'll delay just a bit to make sure the data is + still valid if that is the case */ + msleep(50); + /* we'll now returned a cached value below */ } } - /* either we have a response or we timed out. if we - timed out there is a race condition such that the - callback function could be executing at the same - time we are. of primary concern is if the callback - function had already verified the "magic" but had - not yet set the completion variable when a timeout - occurred. we serialize these activities by - invalidating the magic while holding a shared - spinlock which will cause us to block if the - callback is currently executing */ - spin_lock(&hdd_context_lock); - context.magic = 0; - spin_unlock(&hdd_context_lock); - hddLog(LOGE, "iwpriv Request BMPS completed\n"); break; } @@ -4063,46 +3903,40 @@ static int iw_setint_getnone(struct net_device *dev, struct iw_request_info *inf break; } - - case WE_ENABLE_STRICT_FCC_REG: + // Motorola, IKJBREL1-4181 + case WE_SET_CHANNEL_RANGE: { - hdd_context_t *hddCtxt = WLAN_HDD_GET_CTX(pAdapter); - struct wiphy *wiphy = NULL; - long lrc; - int status; - - wiphy = hddCtxt->wiphy; - if(wiphy == NULL) - { - hddLog(VOS_TRACE_LEVEL_ERROR,"%s: wiphy is NULL ", __func__); - break; - } - - init_completion(&hddCtxt->wiphy_channel_update_event); - hddCtxt->nEnableStrictRegulatoryForFCC = set_value; - status = regulatory_hint(wiphy, "00"); - if(status < 0) - { - hddLog(VOS_TRACE_LEVEL_ERROR,"%s: Failure in setting regulatory rule ", - __func__); - break; - } + int startChannel, endChannel; + if (set_value == 3) { + startChannel = 153; + endChannel = 165; + } else if (set_value == 2) { + startChannel = 104; + endChannel = 140; + } else if (set_value == 1) { + startChannel = 40; + endChannel = 64; + } else { + set_value = 0; + startChannel = 1; + //BEGIN MOT a19110 IKJBXLINE-2149 MHS frequency band support + endChannel = 14; + //END IKJBXLINE-2149 + } - /* Wait for completion */ - lrc = wait_for_completion_interruptible_timeout(&hddCtxt->wiphy_channel_update_event, - msecs_to_jiffies(WLAN_WAIT_TIME_CHANNEL_UPDATE)); - if (lrc <= 0) - { - hddLog(VOS_TRACE_LEVEL_ERROR,"%s: SME %s while setting strict FCC regulatory rule ", - __func__, (0 == lrc) ? "Timeout" : "Interrupt"); - return (0 == lrc) ? -ETIMEDOUT : -EINTR; - } - hddLog(VOS_TRACE_LEVEL_INFO,"%s: SUCCESS in setting strict FCC regulatory rule", - __func__); + ret = iw_softap_set_channel_range( dev, startChannel, endChannel, set_value); - break; + break; } - + // End IKJBREL1-4181 + // IKJB42MAIN-1244, Motorola, a19091 -- BEGIN + case WE_SET_IPV6_FILTER_STATE: + { + hddLog(LOGE, "Revieeved ioctl WE_SET_IPV6_FILTER_STATE"); + ret = wlan_hdd_set_v6_filter(pAdapter, set_value, TRUE); + break; + } + // IKJB42MAIN-1244, Motorola, a19091 -- END default: { hddLog(LOGE, "Invalid IOCTL setvalue command %d value %d \n", @@ -4121,13 +3955,15 @@ static int iw_setchar_getnone(struct net_device *dev, struct iw_request_info *in VOS_STATUS vstatus; int sub_cmd = wrqu->data.flags; int ret = 0; /* success */ - char *pBuffer = NULL; hdd_adapter_t *pAdapter = (netdev_priv(dev)); hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); #ifdef WLAN_FEATURE_VOWIFI hdd_config_t *pConfig = pHddCtx->cfg_ini; #endif /* WLAN_FEATURE_VOWIFI */ + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "%s: Received length %d", __func__, wrqu->data.length); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "%s: Received data %s", __func__, (char*)wrqu->data.pointer); + if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) { VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, @@ -4135,30 +3971,15 @@ static int iw_setchar_getnone(struct net_device *dev, struct iw_request_info *in return -EBUSY; } - /* ODD number is used for set, copy data using copy_from_user */ - pBuffer = mem_alloc_copy_from_user_helper(wrqu->data.pointer, - wrqu->data.length); - if (NULL == pBuffer) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "mem_alloc_copy_from_user_helper fail"); - return -ENOMEM; - } - - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: Received length %d", __func__, wrqu->data.length); - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: Received data %s", __func__, pBuffer); - switch(sub_cmd) { case WE_WOWL_ADD_PTRN: VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "ADD_PTRN\n"); - hdd_add_wowl_ptrn(pAdapter, pBuffer); + hdd_add_wowl_ptrn(pAdapter, (char*)wrqu->data.pointer); break; case WE_WOWL_DEL_PTRN: VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "DEL_PTRN\n"); - hdd_del_wowl_ptrn(pAdapter, pBuffer); + hdd_del_wowl_ptrn(pAdapter, (char*)wrqu->data.pointer); break; #if defined WLAN_FEATURE_VOWIFI case WE_NEIGHBOR_REPORT_REQUEST: @@ -4173,7 +3994,7 @@ static int iw_setchar_getnone(struct net_device *dev, struct iw_request_info *in if( !neighborReq.no_ssid ) { neighborReq.ssid.length = (wrqu->data.length - 1) > 32 ? 32 : (wrqu->data.length - 1) ; - vos_mem_copy( neighborReq.ssid.ssId, pBuffer, neighborReq.ssid.length ); + vos_mem_copy( neighborReq.ssid.ssId, wrqu->data.pointer, neighborReq.ssid.length ); } callbackInfo.neighborRspCallback = NULL; @@ -4191,10 +4012,10 @@ static int iw_setchar_getnone(struct net_device *dev, struct iw_request_info *in #endif case WE_SET_AP_WPS_IE: hddLog( LOGE, "Received WE_SET_AP_WPS_IE" ); - sme_updateP2pIe( WLAN_HDD_GET_HAL_CTX(pAdapter), pBuffer, wrqu->data.length ); + sme_updateP2pIe( WLAN_HDD_GET_HAL_CTX(pAdapter), wrqu->data.pointer, wrqu->data.length ); break; case WE_SET_CONFIG: - vstatus = hdd_execute_config_command(pHddCtx, pBuffer); + vstatus = hdd_execute_config_command(pHddCtx, wrqu->data.pointer); if (VOS_STATUS_SUCCESS != vstatus) { ret = -EINVAL; @@ -4207,7 +4028,6 @@ static int iw_setchar_getnone(struct net_device *dev, struct iw_request_info *in break; } } - kfree(pBuffer); return ret; } @@ -4299,6 +4119,13 @@ static int iw_setnone_getint(struct net_device *dev, struct iw_request_info *inf VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, ("concurrency mode=%d \n"),*value); break; } + // BEGIN MOTOROLA IKJB42MAIN-274, dpn473, 01/02/2013, Add flag to disable/enable MCC mode + case WE_GET_MCC_MODE: + { + *value = (int)hdd_get_mcc_mode(); + break; + } + // IKJB42MAIN-274 default: { @@ -4330,6 +4157,7 @@ int iw_set_three_ints_getnone(struct net_device *dev, struct iw_request_info *in { case WE_SET_WLAN_DBG: { + vos_trace_setValue( value[1], value[2], value[3]); break; } @@ -4343,6 +4171,13 @@ int iw_set_three_ints_getnone(struct net_device *dev, struct iw_request_info *in ret = iw_softap_set_channel_range( dev, value[1], value[2], value[3]); break; } + //Begin Motorola dcw476 4/17/13 IKJBXLINE-5577:changing wlan driver log level dynamically + case WE_SET_WLAN_DBG_TILL_LEVEL: + { + vos_trace_setValue_till_level(value[1], value[2], value[3]); + } + break; + //END IKJBXLINE-5577 default: { @@ -4533,7 +4368,6 @@ static int iw_get_char_setnone(struct net_device *dev, struct iw_request_info *i char* buf ; tChannelListInfo channel_list; - status = iw_softap_get_channel_list(dev, info, wrqu, (char *)&channel_list); if ( !VOS_IS_STATUS_SUCCESS( status ) ) { @@ -4608,21 +4442,6 @@ static int iw_setnone_getnone(struct net_device *dev, struct iw_request_info *in } case WE_INIT_AP: { - /*FIX ME: Need to be revisited if multiple SAPs to be supported */ - - /* As Soft AP mode might been changed to STA already with - * killing of Hostapd, need to find the adpater by name - * rather than mode */ - hdd_adapter_t* pAdapter_to_stop = - hdd_get_adapter_by_name(WLAN_HDD_GET_CTX(pAdapter), "softap.0"); - if( pAdapter_to_stop ) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "Adapter with name softap.0 already " - "exist, ignoring the request.\nRemove the " - "adapter and try again\n"); - break; - } pr_info("Init AP trigger\n"); hdd_open_adapter( WLAN_HDD_GET_CTX(pAdapter), WLAN_HDD_SOFTAP, "softap.%d", wlan_hdd_get_intf_addr( WLAN_HDD_GET_CTX(pAdapter) ),TRUE); @@ -4723,6 +4542,17 @@ static int iw_setnone_getnone(struct net_device *dev, struct iw_request_info *in WLANTL_TLDebugMessage(VOS_TRUE); break; } + case WE_SET_REASSOC_TRIGGER: + { + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + tpAniSirGlobal pMac = WLAN_HDD_GET_HAL_CTX(pAdapter); + v_U32_t roamId = 0; + tCsrRoamModifyProfileFields modProfileFields; + sme_GetModifyProfileFields(pMac, pAdapter->sessionId, &modProfileFields); + sme_RoamReassoc(pMac, pAdapter->sessionId, NULL, modProfileFields, &roamId, 1); + return 0; + } + default: { @@ -4776,6 +4606,7 @@ int iw_set_var_ints_getnone(struct net_device *dev, struct iw_request_info *info hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pAdapter); int sub_cmd = wrqu->data.flags; + int *value = (int*)wrqu->data.pointer; int apps_args[MAX_VAR_ARGS] = {0}; int num_args = wrqu->data.length; hdd_station_ctx_t *pStaCtx = NULL ; @@ -4796,14 +4627,7 @@ int iw_set_var_ints_getnone(struct net_device *dev, struct iw_request_info *info { num_args = MAX_VAR_ARGS; } - - /* ODD number is used for set, copy data using copy_from_user */ - if (copy_from_user(apps_args, wrqu->data.pointer, (sizeof(int)) * num_args)) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: failed to copy data to user buffer", __func__); - return -EFAULT; - } + vos_mem_copy(apps_args, value, (sizeof(int)) * num_args); if(( sub_cmd == WE_MCC_CONFIG_CREDENTIAL ) || (sub_cmd == WE_MCC_CONFIG_PARAMS )) @@ -4831,14 +4655,12 @@ int iw_set_var_ints_getnone(struct net_device *dev, struct iw_request_info *info { case WE_LOG_DUMP_CMD: { - vos_ssr_protect(__func__); hddLog(LOG1, "%s: LOG_DUMP %d arg1 %d arg2 %d arg3 %d arg4 %d", __func__, apps_args[0], apps_args[1], apps_args[2], apps_args[3], apps_args[4]); logPrintf(hHal, apps_args[0], apps_args[1], apps_args[2], apps_args[3], apps_args[4]); - vos_ssr_unprotect(__func__); } break; @@ -4865,26 +4687,6 @@ int iw_set_var_ints_getnone(struct net_device *dev, struct iw_request_info *info } break; - case WE_MTRACE_SELECTIVE_MODULE_LOG_ENABLE_CMD: - { - hddLog(LOG1, "%s: SELECTIVE_MODULE_LOG %d arg1 %d arg2", - __func__, apps_args[0], apps_args[1]); - vosTraceEnable(apps_args[0], apps_args[1]); - } - break; - - case WE_MTRACE_DUMP_CMD: - { - hddLog(LOG1, "%s: MTRACE_DUMP code %d session %d count %d " - "bitmask_of_module %d ", - __func__, apps_args[0], apps_args[1], apps_args[2], - apps_args[3]); - vosTraceDumpAll((void*)hHal , apps_args[0], apps_args[1], - apps_args[2], apps_args[3]); - - } - break; - case WE_MCC_CONFIG_CREDENTIAL : { cmd = 287; //Command should be updated if there is any change @@ -5025,8 +4827,6 @@ static int iw_add_tspec(struct net_device *dev, struct iw_request_info *info, return 0; } - tSpec.ts_info.psb = params[HDD_WLAN_WMM_PARAM_APSD]; - // validate the user priority if (params[HDD_WLAN_WMM_PARAM_USER_PRIORITY] >= SME_QOS_WMM_UP_MAX) { @@ -5035,15 +4835,6 @@ static int iw_add_tspec(struct net_device *dev, struct iw_request_info *info, return 0; } tSpec.ts_info.up = params[HDD_WLAN_WMM_PARAM_USER_PRIORITY]; - if(0 > tSpec.ts_info.up || SME_QOS_WMM_UP_MAX < tSpec.ts_info.up) - { - hddLog(VOS_TRACE_LEVEL_ERROR,"***ts_info.up out of bounds***"); - return 0; - } - - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, - "%s:TS_INFO PSB %d UP %d !!!", __func__, - tSpec.ts_info.psb, tSpec.ts_info.up); tSpec.nominal_msdu_size = params[HDD_WLAN_WMM_PARAM_NOMINAL_MSDU_SIZE]; tSpec.maximum_msdu_size = params[HDD_WLAN_WMM_PARAM_MAXIMUM_MSDU_SIZE]; @@ -5166,10 +4957,10 @@ static int iw_qcom_set_wapi_mode(struct net_device *dev, struct iw_request_info hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); tCsrRoamProfile *pRoamProfile = &pWextState->roamProfile; - WAPI_FUNCTION_MODE *pWapiMode = (WAPI_FUNCTION_MODE *)extra; + WAPI_FUNCTION_MODE *pWapiMode = (WAPI_FUNCTION_MODE *)wrqu->data.pointer; hddLog(LOG1, "The function iw_qcom_set_wapi_mode called"); - hddLog(LOG1, "%s: Received data %s", __func__, extra); + hddLog(LOG1, "%s: Received data %s", __func__, (char*)wrqu->data.pointer); hddLog(LOG1, "%s: Received length %d", __func__, wrqu->data.length); hddLog(LOG1, "%s: Input Data (wreq) WAPI Mode:%02d", __func__, pWapiMode->wapiMode); @@ -5232,6 +5023,7 @@ static int iw_qcom_set_wapi_assoc_info(struct net_device *dev, struct iw_request int i = 0, j = 0; hddLog(LOG1, "The function iw_qcom_set_wapi_assoc_info called"); hddLog(LOG1, "%s: Received length %d", __func__, wrqu->data.length); + hddLog(LOG1, "%s: Received data %s", __func__, (char*)wrqu->data.pointer); hddLog(LOG1, "%s: Received data %s", __func__, (char*)extra); if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) @@ -5240,14 +5032,7 @@ static int iw_qcom_set_wapi_assoc_info(struct net_device *dev, struct iw_request "%s:LOGP in Progress. Ignore!!!", __func__); return -EBUSY; } - - if (NULL == pWapiAssocInfo) - { - VOS_TRACE(VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR, - "%s: WDA NULL context", __func__); - VOS_ASSERT(0); - return VOS_STATUS_E_FAILURE; - } + VOS_ASSERT(pWapiAssocInfo); hddLog(LOG1, "%s: INPUT DATA:\nElement ID:0x%02x Length:0x%02x Version:0x%04x\n",__func__,pWapiAssocInfo->elementID,pWapiAssocInfo->length,pWapiAssocInfo->version); hddLog(LOG1,"%s: akm Suite Cnt:0x%04x",__func__,pWapiAssocInfo->akmSuiteCount); @@ -5304,6 +5089,7 @@ static int iw_qcom_set_wapi_key(struct net_device *dev, struct iw_request_info * hddLog(LOG1, "The function iw_qcom_set_wapi_key called "); hddLog(LOG1, "%s: Received length %d", __func__, wrqu->data.length); + hddLog(LOG1, "%s: Received data %s", __func__, (char*)wrqu->data.pointer); hddLog(LOG1, "%s: Received data %s", __func__, (char*)extra); hddLog(LOG1,":%s: INPUT DATA:\nKey Type:0x%02x Key Direction:0x%02x KEY ID:0x%02x\n", __func__, pWapiKey->keyType, pWapiKey->keyDirection, pWapiKey->keyId); @@ -5404,11 +5190,12 @@ static int iw_qcom_set_wapi_bkid(struct net_device *dev, struct iw_request_info hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); #ifdef WLAN_DEBUG int i = 0; - WLAN_BKID_LIST *pBkid = ( WLAN_BKID_LIST *) extra; + WLAN_BKID_LIST *pBkid = ( WLAN_BKID_LIST *) (wrqu->data.pointer); #endif hddLog(LOG1, "The function iw_qcom_set_wapi_bkid called"); hddLog(LOG1, "%s: Received length %d", __func__, wrqu->data.length); + hddLog(LOG1, "%s: Received data %s", __func__, (char*)wrqu->data.pointer); hddLog(LOG1, "%s: Received data %s", __func__, (char*)extra); hddLog(LOG1,"%s: INPUT DATA:\n BKID Length:0x%08lx\n", __func__,pBkid->length); @@ -5485,7 +5272,7 @@ static int iw_set_fties(struct net_device *dev, struct iw_request_info *info, #endif // Pass the received FT IEs to SME - sme_SetFTIEs( WLAN_HDD_GET_HAL_CTX(pAdapter), pAdapter->sessionId, extra, + sme_SetFTIEs( WLAN_HDD_GET_HAL_CTX(pAdapter), pAdapter->sessionId, wrqu->data.pointer, wrqu->data.length); return 0; @@ -5497,13 +5284,15 @@ static int iw_set_dynamic_mcbc_filter(struct net_device *dev, union iwreq_data *wrqu, char *extra) { hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); - tpRcvFltMcAddrList pRequest = (tpRcvFltMcAddrList)extra; + tpRcvFltMcAddrList pRequest = (tpRcvFltMcAddrList)wrqu->data.pointer; hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); tpSirWlanSetRxpFilters wlanRxpFilterParam; tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pAdapter); + VOS_STATUS vstatus = VOS_STATUS_E_FAILURE; tpSirRcvFltMcAddrList mc_addr_list_ptr; int idx; eHalStatus ret_val; + tANI_U8 mcastBcastFilterSetting; if (pHddCtx->isLogpInProgress) { @@ -5512,9 +5301,7 @@ static int iw_set_dynamic_mcbc_filter(struct net_device *dev, return -EBUSY; } - if (HDD_MULTICAST_FILTER_LIST == pRequest->mcastBcastFilterSetting) - { -#ifdef WLAN_FEATURE_PACKET_FILTERING + if (HDD_MULTICAST_FILTER_LIST == pRequest->mcastBcastFilterSetting) { mc_addr_list_ptr = vos_mem_malloc(sizeof(tSirRcvFltMcAddrList)); if (NULL == mc_addr_list_ptr) @@ -5549,24 +5336,23 @@ static int iw_set_dynamic_mcbc_filter(struct net_device *dev, __func__); return -EINVAL; } -#endif //WLAN_FEATURE_PACKET_FILTERING - } - else - { + } else { hddLog(VOS_TRACE_LEVEL_INFO_HIGH, "%s: Set MC BC Filter Config request: %d suspend %d", __func__, pRequest->mcastBcastFilterSetting, pHddCtx->hdd_wlan_suspended); - pHddCtx->configuredMcastBcastFilter = pRequest->mcastBcastFilterSetting; + pHddCtx->dynamic_mcbc_filter.mcastBcastFilterSetting = + pRequest->mcastBcastFilterSetting; + pHddCtx->dynamic_mcbc_filter.enableCfg = TRUE; if (pHddCtx->hdd_wlan_suspended) { wlanRxpFilterParam = vos_mem_malloc(sizeof(tSirWlanSetRxpFilters)); if (NULL == wlanRxpFilterParam) { - hddLog(VOS_TRACE_LEVEL_ERROR, + hddLog(VOS_TRACE_LEVEL_FATAL, "%s: vos_mem_alloc failed", __func__); return -EINVAL; } @@ -5575,19 +5361,44 @@ static int iw_set_dynamic_mcbc_filter(struct net_device *dev, pRequest->mcastBcastFilterSetting; wlanRxpFilterParam->setMcstBcstFilter = TRUE; - hdd_conf_hostoffload(pAdapter, TRUE); - wlanRxpFilterParam->configuredMcstBcstFilterSetting = - pHddCtx->configuredMcastBcastFilter; + if ((pHddCtx->cfg_ini->fhostArpOffload) && + (eConnectionState_Associated == + (WLAN_HDD_GET_STATION_CTX_PTR(pAdapter))->conn_info.connState)) + { + vstatus = hdd_conf_hostarpoffload(pAdapter, TRUE); + if (!VOS_IS_STATUS_SUCCESS(vstatus)) + { + hddLog(VOS_TRACE_LEVEL_INFO, + "%s:Failed to enable ARPOFFLOAD Feature %d", + __func__, vstatus); + } + else + { + if (HDD_MCASTBCASTFILTER_FILTER_ALL_MULTICAST_BROADCAST == + pHddCtx->dynamic_mcbc_filter.mcastBcastFilterSetting) + { + wlanRxpFilterParam->configuredMcstBcstFilterSetting = + HDD_MCASTBCASTFILTER_FILTER_ALL_MULTICAST; + } + else if (HDD_MCASTBCASTFILTER_FILTER_ALL_BROADCAST == + pHddCtx->dynamic_mcbc_filter.mcastBcastFilterSetting) + { + wlanRxpFilterParam->configuredMcstBcstFilterSetting = + HDD_MCASTBCASTFILTER_FILTER_NONE; + } + } + } hddLog(VOS_TRACE_LEVEL_INFO, "%s:MC/BC changed Req %d Set %d En %d", __func__, - pHddCtx->configuredMcastBcastFilter, + pHddCtx->dynamic_mcbc_filter.mcastBcastFilterSetting, wlanRxpFilterParam->configuredMcstBcstFilterSetting, wlanRxpFilterParam->setMcstBcstFilter); - if (eHAL_STATUS_SUCCESS != - sme_ConfigureRxpFilter(WLAN_HDD_GET_HAL_CTX(pAdapter), - wlanRxpFilterParam)) + mcastBcastFilterSetting = wlanRxpFilterParam->configuredMcstBcstFilterSetting; + + if (eHAL_STATUS_SUCCESS != sme_ConfigureRxpFilter(WLAN_HDD_GET_HAL_CTX(pAdapter), + wlanRxpFilterParam)) { hddLog(VOS_TRACE_LEVEL_ERROR, "%s: Failure to execute set HW MC/BC Filter request", @@ -5596,6 +5407,8 @@ static int iw_set_dynamic_mcbc_filter(struct net_device *dev, return -EINVAL; } + pHddCtx->dynamic_mcbc_filter.mcBcFilterSuspend = + mcastBcastFilterSetting; } } @@ -5608,42 +5421,11 @@ static int iw_clear_dynamic_mcbc_filter(struct net_device *dev, { hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); - tpSirWlanSetRxpFilters wlanRxpFilterParam; - hddLog(VOS_TRACE_LEVEL_INFO_HIGH, "%s: ", __func__); - //Reset the filter to INI value as we have to clear the dynamic filter - pHddCtx->configuredMcastBcastFilter = pHddCtx->cfg_ini->mcastBcastFilterSetting; - - //Configure FW with new setting - if (pHddCtx->hdd_wlan_suspended) - { - wlanRxpFilterParam = vos_mem_malloc(sizeof(tSirWlanSetRxpFilters)); - if (NULL == wlanRxpFilterParam) - { - hddLog(VOS_TRACE_LEVEL_ERROR, - "%s: vos_mem_alloc failed", __func__); - return -EINVAL; - } - - wlanRxpFilterParam->configuredMcstBcstFilterSetting = - pHddCtx->configuredMcastBcastFilter; - wlanRxpFilterParam->setMcstBcstFilter = TRUE; + hddLog(VOS_TRACE_LEVEL_INFO_HIGH, "%s: ", __func__); - hdd_conf_hostoffload(pAdapter, TRUE); - wlanRxpFilterParam->configuredMcstBcstFilterSetting = - pHddCtx->configuredMcastBcastFilter; + pHddCtx->dynamic_mcbc_filter.enableCfg = FALSE; - if (eHAL_STATUS_SUCCESS != - sme_ConfigureRxpFilter(WLAN_HDD_GET_HAL_CTX(pAdapter), - wlanRxpFilterParam)) - { - hddLog(VOS_TRACE_LEVEL_ERROR, - "%s: Failure to execute set HW MC/BC Filter request", - __func__); - vos_mem_free(wlanRxpFilterParam); - return -EINVAL; - } - } return 0; } @@ -5651,7 +5433,7 @@ static int iw_set_host_offload(struct net_device *dev, struct iw_request_info *i union iwreq_data *wrqu, char *extra) { hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); - tpHostOffloadRequest pRequest = (tpHostOffloadRequest) extra; + tpHostOffloadRequest pRequest = (tpHostOffloadRequest)wrqu->data.pointer; tSirHostOffloadReq offloadRequest; if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) @@ -5660,6 +5442,7 @@ static int iw_set_host_offload(struct net_device *dev, struct iw_request_info *i "%s:LOGP in Progress. Ignore!!!", __func__); return -EBUSY; } + /* Debug display of request components. */ switch (pRequest->offloadType) { @@ -5722,7 +5505,7 @@ static int iw_set_keepalive_params(struct net_device *dev, struct iw_request_inf union iwreq_data *wrqu, char *extra) { hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); - tpKeepAliveRequest pRequest = (tpKeepAliveRequest) extra; + tpKeepAliveRequest pRequest = (tpKeepAliveRequest)wrqu->data.pointer; tSirKeepAliveReq keepaliveRequest; if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) @@ -5788,13 +5571,16 @@ int wlan_hdd_set_filter(hdd_context_t *pHddCtx, tpPacketFilterCfg pRequest, { tSirRcvPktFilterCfgType packetFilterSetReq = {0}; tSirRcvFltPktClearParam packetFilterClrReq = {0}; + //IKHSS7-35965, a19091, Motorola changes -- BEGIN + int retVal=0; + //IKHSS7-35965, a19091, Motorola changes -- END int i=0; if (pHddCtx->cfg_ini->disablePacketFilter) { hddLog(VOS_TRACE_LEVEL_FATAL, "%s: Packet Filtering Disabled. Returning ", __func__ ); - return 0; + return retVal; } if (pHddCtx->isLogpInProgress) { @@ -5817,7 +5603,10 @@ int wlan_hdd_set_filter(hdd_context_t *pHddCtx, tpPacketFilterCfg pRequest, { hddLog(VOS_TRACE_LEVEL_ERROR, "%s: Number of Params exceed Max limit %d\n", __func__, pRequest->numParams); - return -EINVAL; + //IKHSS7-35965, a19091, Motorola changes -- BEGIN + retVal = -EINVAL; + break; + //IKHSS7-35965, a19091, Motorola changes -- END } packetFilterSetReq.numFieldParams = pRequest->numParams; packetFilterSetReq.coalesceTime = 0; @@ -5857,7 +5646,7 @@ int wlan_hdd_set_filter(hdd_context_t *pHddCtx, tpPacketFilterCfg pRequest, { hddLog(VOS_TRACE_LEVEL_ERROR, "%s: Failure to execute Set Filter\n", __func__); - return -EINVAL; + retVal = -EINVAL; //IKHSS7-35965, a19091, Motorola } break; @@ -5871,16 +5660,16 @@ int wlan_hdd_set_filter(hdd_context_t *pHddCtx, tpPacketFilterCfg pRequest, { hddLog(VOS_TRACE_LEVEL_ERROR, "%s: Failure to execute Clear Filter\n", __func__); - return -EINVAL; + retVal = -EINVAL; //IKHSS7-35965, a19091, Motorola } break; default : hddLog(VOS_TRACE_LEVEL_INFO_HIGH, "%s: Packet Filter Request: Invalid %d\n", __func__, pRequest->filterAction); - return -EINVAL; + retVal = -EINVAL; //IKHSS7-35965, a19091, Motorola } - return 0; + return retVal; } int wlan_hdd_setIPv6Filter(hdd_context_t *pHddCtx, tANI_U8 filterType, @@ -6065,108 +5854,320 @@ int wlan_hdd_setIPv6Filter(hdd_context_t *pHddCtx, tANI_U8 filterType, } return 0; } +// IKJB42MAIN-1244, Motorola, a19091 - BEGIN +#define SET_FILTER_BMAP(filter_map, set, index) { if(set){(filter_map)|=(1<<(index));}\ + else {(filter_map)&=(~(1<<(index)));}} + +#define IS_FILTER_INDEX_FREE(filter_map, index) (((filter_map)&(1<<(index)))==0) + +#define IPV6_CONFIG_ALLOW_ALL 1 +#define IPV6_CONFIG_MANDATORY 0 + +void wlan_hdd_set_mc_v6(hdd_adapter_t *pAdapter, v_U8_t set) { + tPacketFilterCfg request = {0}; + v_SCHAR_t mcFilterIndex = WLAN_HDD_MAX_MC_ADDR_LIST; + int ret; + hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + + if(set) { + if(pAdapter->filter_v6_index != -1) { + hddLog(VOS_TRACE_LEVEL_INFO, "IPV6 pass through already set, skipping"); + return; + } + /* Add v6 pass through rule */ + if(pAdapter->mc_addr_list.isFilterApplied) + wlan_hdd_set_mc_addr_list(pAdapter, FALSE); + /* Find a suitable slot and stick in filter */ + while(--mcFilterIndex >=0 ) { + if(IS_FILTER_INDEX_FREE(pAdapter->user_filter_config, mcFilterIndex)) { + request.filterAction = HDD_RCV_FILTER_SET; + request.filterId = mcFilterIndex; + request.numParams = 1; + request.paramsData[0].protocolLayer = HDD_FILTER_PROTO_TYPE_MAC; + request.paramsData[0].dataOffset = WLAN_HDD_80211_FRM_DA_OFFSET; + request.paramsData[0].dataLength = 2; + request.paramsData[0].compareData[0]=0x33; + request.paramsData[0].compareData[1]=0x33; + ret = wlan_hdd_set_filter(pHddCtx, &request, pAdapter->sessionId); + if(ret == 0) { + pAdapter->filter_v6_index = mcFilterIndex; + SET_FILTER_BMAP(pAdapter->driver_filter_config, set, request.filterId); + hddLog(VOS_TRACE_LEVEL_INFO, "Programmed IPV6 pass through at index %d", + mcFilterIndex); + break; + } else { + hddLog(VOS_TRACE_LEVEL_ERROR, + "Failed programming IPV6 pass through at index %d - TRY NEXT", + mcFilterIndex); + } + } + } + if(mcFilterIndex<0) + hddLog(VOS_TRACE_LEVEL_ERROR, "IPV6 pass through rule prog failed!!"); + } else if(pAdapter->filter_v6_index != -1) { + /* Remove pass through rule */ + request.filterAction = HDD_RCV_FILTER_CLEAR; + request.filterId = pAdapter->filter_v6_index; + request.numParams = 1; + ret = wlan_hdd_set_filter(pHddCtx, &request, pAdapter->sessionId); + if(ret == 0) { + pAdapter->filter_v6_index = -1; + SET_FILTER_BMAP(pAdapter->driver_filter_config, set, request.filterId); + hddLog(VOS_TRACE_LEVEL_INFO, "Cleared IPV6 pass through at index %d", + request.filterId); + } else { + hddLog(VOS_TRACE_LEVEL_ERROR, "IPV6 pass through rule CLEAR failed!!"); + } + } else { + hddLog(VOS_TRACE_LEVEL_INFO, "Clear IPV6 passthrough when not set - ignore"); + } +} +// IKJB42MAIN-1244, Motorola, a19091 -- END void wlan_hdd_set_mc_addr_list(hdd_adapter_t *pAdapter, v_U8_t set) { + v_U8_t filterAction; + tPacketFilterCfg request; v_U8_t i; - tpSirRcvFltMcAddrList pMulticastAddrs = NULL; - tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pAdapter); - hdd_context_t* pHddCtx = (hdd_context_t*)pAdapter->pHddCtx; + hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + // IKJB42MAIN-1244, Motorola, a19091 - BEGIN + int ret; + v_SCHAR_t mcFilterIndex = WLAN_HDD_MAX_MC_ADDR_LIST; + // IKJB42MAIN-1244, Motorola, a19091 - END - if (NULL == hHal) - { - hddLog(VOS_TRACE_LEVEL_ERROR, FL("HAL Handle is NULL")); - return; - } - if (NULL == pHddCtx) - { - hddLog(VOS_TRACE_LEVEL_ERROR, FL("HDD CTX is NULL")); - return; + filterAction = set ? HDD_RCV_FILTER_SET : HDD_RCV_FILTER_CLEAR; + + // IKJB42MAIN-1244, Motorola, a19091 - BEGIN + hddLog(VOS_TRACE_LEVEL_INFO, "%s: Entered for %s", + __func__, set?"SET":"CLEAR"); + + if(pAdapter->filter_v6_index != -1) { + hddLog(VOS_TRACE_LEVEL_INFO, "%s: First calling CLEAR V6 ALLOW_ALL!", + __func__); + wlan_hdd_set_mc_v6(pAdapter, FALSE); } + // IKJB42MAIN-1244, Motorola, a19091 - END - /* Check if INI is enabled or not, other wise just return - */ - if (pHddCtx->cfg_ini->fEnableMCAddrList) + /*set mulitcast addr list*/ + for (i = 0; i < pAdapter->mc_addr_list.mc_cnt; i++) { - pMulticastAddrs = vos_mem_malloc(sizeof(tSirRcvFltMcAddrList)); - if (NULL == pMulticastAddrs) - { - hddLog(VOS_TRACE_LEVEL_ERROR, FL("Could not allocate Memory")); - return; - } - + memset(&request, 0, sizeof (tPacketFilterCfg)); + request.filterAction = filterAction; if (set) { - /* Following pre-conditions should be satisfied before wei - * configure the MC address list. - */ - if (((pAdapter->device_mode == WLAN_HDD_INFRA_STATION) || - (pAdapter->device_mode == WLAN_HDD_P2P_CLIENT)) - && pAdapter->mc_addr_list.mc_cnt - && (eConnectionState_Associated == - (WLAN_HDD_GET_STATION_CTX_PTR(pAdapter))->conn_info.connState)) - { - pMulticastAddrs->ulMulticastAddrCnt = - pAdapter->mc_addr_list.mc_cnt; - for (i = 0; i < pAdapter->mc_addr_list.mc_cnt; i++) - { - memcpy(&(pMulticastAddrs->multicastAddr[i][0]), - &(pAdapter->mc_addr_list.addr[i][0]), - sizeof(pAdapter->mc_addr_list.addr[i])); + // IKJB42MAIN-1244, Motorola, a19091 - BEGIN + while(--mcFilterIndex >=0 ) { + if(IS_FILTER_INDEX_FREE(pAdapter->user_filter_config, mcFilterIndex)) { + /* Non user filter index! */ + if(!IS_FILTER_INDEX_FREE(pAdapter->driver_filter_config, mcFilterIndex)) { + hddLog(VOS_TRACE_LEVEL_INFO, "Clearing Filter index %d, before reprog", + mcFilterIndex); + request.filterAction = HDD_RCV_FILTER_CLEAR; + request.filterId = mcFilterIndex; + ret = wlan_hdd_set_filter(pHddCtx, &request, pAdapter->sessionId); + if(ret == 0) { + SET_FILTER_BMAP(pAdapter->driver_filter_config, FALSE, request.filterId); + } else { + hddLog(VOS_TRACE_LEVEL_ERROR,"failed to clear filter index %d",mcFilterIndex); + } + } + if(!IS_FILTER_INDEX_FREE(pAdapter->driver_filter_config, mcFilterIndex)) { + hddLog(VOS_TRACE_LEVEL_ERROR, "Failed to clear filter %d - try next", + mcFilterIndex); + continue; + } + request.filterAction = HDD_RCV_FILTER_SET; + request.filterId = mcFilterIndex; + request.numParams = 1; + request.paramsData[0].protocolLayer = HDD_FILTER_PROTO_TYPE_MAC; + request.paramsData[0].cmpFlag = HDD_FILTER_CMP_TYPE_EQUAL; + request.paramsData[0].dataOffset = WLAN_HDD_80211_FRM_DA_OFFSET; + request.paramsData[0].dataLength = ETH_ALEN; + memcpy(&(request.paramsData[0].compareData[0]), + &(pAdapter->mc_addr_list.addr[i][0]), ETH_ALEN); + /*set mulitcast filters*/ hddLog(VOS_TRACE_LEVEL_INFO, - "%s: %s multicast filter: addr =" - MAC_ADDRESS_STR, - __func__, set ? "setting" : "clearing", - MAC_ADDR_ARRAY(pMulticastAddrs->multicastAddr[i])); + "%s: %s multicast filter: addr =" + "%02x:%02x:%02x:%02x:%02x:%02x", + __func__, set ? "setting" : "clearing", + request.paramsData[0].compareData[0], + request.paramsData[0].compareData[1], + request.paramsData[0].compareData[2], + request.paramsData[0].compareData[3], + request.paramsData[0].compareData[4], + request.paramsData[0].compareData[5]); + pAdapter->mc_addr_list.filter_index[i] = request.filterId; + break; + } else { + /*user filter index - try next*/ + hddLog(VOS_TRACE_LEVEL_ERROR, + "Index %d used by user filter - try next", mcFilterIndex); } - /* Set multicast filter */ - sme_8023MulticastList(hHal, pAdapter->sessionId, - pMulticastAddrs); } - } - else - { - /* Need to clear only if it was previously configured - */ - if (pAdapter->mc_addr_list.isFilterApplied) - { - pMulticastAddrs->ulMulticastAddrCnt = 0; - sme_8023MulticastList(hHal, pAdapter->sessionId, - pMulticastAddrs); + if(mcFilterIndex < 0 ) { + /*No Free index in driver config available*/ + hddLog(VOS_TRACE_LEVEL_FATAL, + "No available slots to allow mcast filter - Too many user filters"); + return; + } + } else { /* !set */ + if(pAdapter->mc_addr_list.isFilterApplied == FALSE) { + hddLog(VOS_TRACE_LEVEL_INFO, "No previous filter ... skipping"); + continue; } + hddLog(VOS_TRACE_LEVEL_INFO, "Gonna clear index %d", + pAdapter->mc_addr_list.filter_index[i]); + request.filterId = pAdapter->mc_addr_list.filter_index[i]; + request.numParams = 1; + } + ret = wlan_hdd_set_filter(pHddCtx, &request, pAdapter->sessionId); + if(ret == 0) { + SET_FILTER_BMAP(pAdapter->driver_filter_config, set, request.filterId); + } + } + if(set) { + // Clear out any extraneous driver filters + request.filterAction = HDD_RCV_FILTER_CLEAR; + while(--mcFilterIndex>=0) { + request.filterId = mcFilterIndex; + if(!IS_FILTER_INDEX_FREE(pAdapter->driver_filter_config, mcFilterIndex) && + IS_FILTER_INDEX_FREE(pAdapter->user_filter_config, mcFilterIndex)) { + hddLog(VOS_TRACE_LEVEL_INFO, "Clearing Filter index %d,", mcFilterIndex); + ret = wlan_hdd_set_filter(pHddCtx, &request, pAdapter->sessionId); + if(ret == 0) { + SET_FILTER_BMAP(pAdapter->driver_filter_config, FALSE, request.filterId); + } else { + hddLog(VOS_TRACE_LEVEL_ERROR,"failed to clear filter index %d",mcFilterIndex); + } + } } - pAdapter->mc_addr_list.isFilterApplied = set ? TRUE : FALSE; + // IKJB42MAIN-1244, Motorola, a19091 - END + } + pAdapter->mc_addr_list.isFilterApplied = set ? TRUE : FALSE; +} + +// IKJB42MAIN-1244, Motorola, a19091 - BEGIN +int wlan_hdd_update_v6_filters(hdd_adapter_t *pAdapter, v_U8_t set){ + tSirInvokeV6Filter filterConfig; + hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); + + if(!hdd_connIsConnected(pHddStaCtx)) + { + hddLog(VOS_TRACE_LEVEL_WARN, + "Not associated - ignoring wlan_hdd_update_v6_filters"); + return 0; } + filterConfig.configureFilterFn = wlan_hdd_set_v6_filter; + filterConfig.pHddAdapter = pAdapter; + filterConfig.set = set; + + if (eHAL_STATUS_SUCCESS != sme_ReceiveSetMcFilter(&filterConfig)) + { + hddLog(VOS_TRACE_LEVEL_ERROR, "%s: Failure to execute Set Filter\n", + __func__); + return -1; + } + return 0; +} + +int wlan_hdd_set_v6_filter(void *pAdapter, v_U8_t set, v_U8_t userSet) { + hdd_adapter_t* pTAdapter = (hdd_adapter_t*)pAdapter; + hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pTAdapter); + int ret = 0; + + if(userSet) + pTAdapter->ipv6_user_set_map = (set)?IPV6_CONFIG_ALLOW_ALL:IPV6_CONFIG_MANDATORY; else + pTAdapter->ipv6_code_set_map = (set)?IPV6_CONFIG_ALLOW_ALL:IPV6_CONFIG_MANDATORY; + + hddLog(VOS_TRACE_LEVEL_INFO, "wlan_hdd_set_v6_filter - %s - set map is now - code = %s, user = %s", + userSet?"USER-SET":"CODE-SET", + (pTAdapter->ipv6_code_set_map == IPV6_CONFIG_MANDATORY) ? "MANDATORY":"ALLOW_ALL", + (pTAdapter->ipv6_user_set_map == IPV6_CONFIG_MANDATORY) ? "MANDATORY":"ALLOW_ALL"); + + if(!hdd_connIsConnected(pHddStaCtx)) { - hddLog(VOS_TRACE_LEVEL_INFO, - FL("gMCAddrListEnable is not enabled in INI")); + hddLog(VOS_TRACE_LEVEL_WARN, + "Not associated - ignoring wlan_hdd_set_v6_filter"); + return ret; + } + if(pTAdapter->ipv6_code_set_map == pTAdapter->ipv6_user_set_map && + pTAdapter->ipv6_code_set_map == IPV6_CONFIG_MANDATORY ) { + hddLog(VOS_TRACE_LEVEL_INFO, "Set IPV6 filter to MANDATORY"); + wlan_hdd_set_mc_v6(pAdapter, FALSE); + wlan_hdd_set_mc_addr_list(pTAdapter, TRUE); + } else { + hddLog(VOS_TRACE_LEVEL_INFO, "Set IPV6 filter to ALLOW_ALL"); + if(pTAdapter->filter_v6_index == -1) { + hddLog(VOS_TRACE_LEVEL_INFO, "Program V6!"); + wlan_hdd_set_mc_addr_list(pTAdapter, FALSE); + wlan_hdd_set_mc_v6(pTAdapter, TRUE); + } else { + hddLog(VOS_TRACE_LEVEL_INFO, "Skip program V6 - already set!"); + } } - return; + return ret; } +// IKJB42MAIN-1244, Motorola, a19091 - END static int iw_set_packet_filter_params(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra) -{ +{ hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); - tpPacketFilterCfg pRequest = NULL; - int ret; + // IKJB42MAIN-1244, Motorola, a19091 - BEGIN + hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + int retVal; + v_U8_t mcFilterReset = FALSE; + // IKJB42MAIN-1244, Motorola, a19091 - END - /* ODD number is used for set, copy data using copy_from_user */ - pRequest = mem_alloc_copy_from_user_helper(wrqu->data.pointer, - wrqu->data.length); - if (NULL == pRequest) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "mem_alloc_copy_from_user_helper fail"); + //IKHSS7-35965, a19091, Motorola changes -- BEGIN + tpPacketFilterCfg pRequest = (tpPacketFilterCfg)kmalloc(sizeof(tPacketFilterCfg), GFP_KERNEL); + + if(pRequest == NULL) { + hddLog(VOS_TRACE_LEVEL_FATAL, "%s: Out of memory - cant alloc %d bytes", + sizeof(tpPacketFilterCfg),__FUNCTION__); return -ENOMEM; } - ret = wlan_hdd_set_filter(WLAN_HDD_GET_CTX(pAdapter), pRequest, pAdapter->sessionId); - kfree(pRequest); + if(copy_from_user(pRequest, wrqu->data.pointer, sizeof(tPacketFilterCfg))) { + hddLog(VOS_TRACE_LEVEL_FATAL, "%s -- copy_from_user -- data pointer failed! bailing", + __FUNCTION__); + kfree(pRequest); + return -EFAULT; + } + //IKHSS7-35965, a19091, Motorola changes -- END - return ret; + // IKJB42MAIN-1244, Motorola, a19091 - BEGIN + if(!IS_FILTER_INDEX_FREE(pAdapter->driver_filter_config, pRequest->filterId) && + IS_FILTER_INDEX_FREE(pAdapter->user_filter_config, pRequest->filterId)) { + // Need to re-adjust MC filter - disable and re-enable + hddLog(VOS_TRACE_LEVEL_INFO, "%s, Filter ID %d already in use - disable and re-enable mc filters!!", + __FUNCTION__, pRequest->filterId); + wlan_hdd_set_mc_addr_list(pAdapter, FALSE); + mcFilterReset = TRUE; + } + // IKJB42MAIN-1244, Motorola, a19091 - END + + retVal = wlan_hdd_set_filter(pHddCtx, pRequest, pAdapter->sessionId); + + // IKJB42MAIN-1244, Motorola, a19091 - BEGIN + if(retVal == 0) { + SET_FILTER_BMAP(pAdapter->driver_filter_config, (pRequest->filterAction), pRequest->filterId); + SET_FILTER_BMAP(pAdapter->user_filter_config, (pRequest->filterAction), pRequest->filterId); + } + + if(mcFilterReset) { + hddLog(VOS_TRACE_LEVEL_INFO, "%s, Re -enabling MC filters", + __FUNCTION__); + wlan_hdd_set_mc_addr_list(pAdapter, TRUE); + } + + if(pRequest!= NULL) + kfree(pRequest); + + return retVal; + // IKJB42MAIN-1244, Motorola, a19091 - END } #endif static int iw_get_statistics(struct net_device *dev, @@ -6358,7 +6359,8 @@ void found_pref_network_cb (void *callbackContext, hdd_adapter_t* pAdapter = (hdd_adapter_t*)callbackContext; union iwreq_data wrqu; char buf[MAX_PNO_NOTIFY_LEN+1]; - + int bp = 0; + hddLog(VOS_TRACE_LEVEL_WARN, "A preferred network was found: %s with rssi: -%d", pPrefNetworkFoundInd->ssId.ssId, pPrefNetworkFoundInd->rssi); @@ -6366,7 +6368,18 @@ void found_pref_network_cb (void *callbackContext, memset(&wrqu, 0, sizeof(wrqu)); memset(buf, 0, sizeof(buf)); - snprintf(buf, MAX_PNO_NOTIFY_LEN, "QCOM: Found preferred network: %s with RSSI of -%u", + // stop PNO + bp = strlcpy(buf, "0 ", sizeof(buf)); + buf[bp++] = '\0'; + wrqu.data.pointer = buf; + wrqu.data.length = strlen(buf); + iw_set_pno(pAdapter->dev, NULL, &wrqu, NULL, 0); + //printk("PNO Callback: Stopping PNO \n"); + + // send event to supplicant + memset(&wrqu, 0, sizeof(wrqu)); + memset(buf, 0, sizeof(buf)); + snprintf(buf, MAX_PNO_NOTIFY_LEN, "PNOFOUND : Found preferred network: %s with RSSI of -%u", pPrefNetworkFoundInd->ssId.ssId, (unsigned int)pPrefNetworkFoundInd->rssi); @@ -6397,7 +6410,7 @@ VOS_STATUS iw_set_pno(struct net_device *dev, struct iw_request_info *info, VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "PNO data len %d data %s", wrqu->data.length, - extra); + (char *)wrqu->data.pointer); if (wrqu->data.length <= nOffset ) { @@ -6435,14 +6448,9 @@ VOS_STATUS iw_set_pno(struct net_device *dev, struct iw_request_info *info, scan every 5 seconds 2 times, scan every 300 seconds until stopped -----------------------------------------------------------------------*/ - ptr = extra + nOffset; + ptr = (char*)(wrqu->data.pointer + nOffset); - if (1 != sscanf(ptr,"%hhu%n", &(pnoRequest.enable), &nOffset)) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "PNO enable input is not valid %s",ptr); - return VOS_STATUS_E_FAILURE; - } + sscanf(ptr,"%hhu%n", &(pnoRequest.enable), &nOffset); if ( 0 == pnoRequest.enable ) { @@ -6455,14 +6463,7 @@ VOS_STATUS iw_set_pno(struct net_device *dev, struct iw_request_info *info, } ptr += nOffset; - - if (1 != sscanf(ptr,"%hhu %n", &(pnoRequest.ucNetworksCount), &nOffset)) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "PNO count input not valid %s",ptr); - return VOS_STATUS_E_FAILURE; - - } + sscanf(ptr,"%hhu %n", &(pnoRequest.ucNetworksCount), &nOffset); VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "PNO enable %d networks count %d offset %d", @@ -6486,15 +6487,8 @@ VOS_STATUS iw_set_pno(struct net_device *dev, struct iw_request_info *info, pnoRequest.aNetworks[i].ssId.length = 0; - ucParams = sscanf(ptr,"%hhu %n", - &(pnoRequest.aNetworks[i].ssId.length),&nOffset); - - if (1 != ucParams) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "PNO ssid length input is not valid %s",ptr); - return VOS_STATUS_E_FAILURE; - } + sscanf(ptr,"%hhu %n", + &(pnoRequest.aNetworks[i].ssId.length), &nOffset); if (( 0 == pnoRequest.aNetworks[i].ssId.length ) || ( pnoRequest.aNetworks[i].ssId.length > 32 ) ) @@ -6518,13 +6512,6 @@ VOS_STATUS iw_set_pno(struct net_device *dev, struct iw_request_info *info, &(pnoRequest.aNetworks[i].ucChannelCount), &nOffset); - if ( 3 != ucParams ) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, - "Incorrect cmd %s",ptr); - return VOS_STATUS_E_FAILURE; - } - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "PNO len %d ssid 0x%08lx%08lx%08lx%08lx%08lx%08lx%08lx%08lx" "auth %d encry %d channel count %d offset %d", @@ -6542,10 +6529,17 @@ VOS_STATUS iw_set_pno(struct net_device *dev, struct iw_request_info *info, pnoRequest.aNetworks[i].ucChannelCount, nOffset ); + if ( 3 != ucParams ) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, + "Incorrect cmd"); + return VOS_STATUS_E_FAILURE; + } + /*Advance to channel list*/ ptr += nOffset; - if (SIR_PNO_MAX_NETW_CHANNELS < pnoRequest.aNetworks[i].ucChannelCount) + if ( SIR_PNO_MAX_NETW_CHANNELS < pnoRequest.aNetworks[i].ucChannelCount ) { VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, "Incorrect number of channels"); @@ -6556,26 +6550,15 @@ VOS_STATUS iw_set_pno(struct net_device *dev, struct iw_request_info *info, { for ( j = 0; j < pnoRequest.aNetworks[i].ucChannelCount; j++) { - if (1 != sscanf(ptr,"%hhu %n", - &(pnoRequest.aNetworks[i].aChannels[j]), - &nOffset)) - { VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "PNO network channel input is not valid %s",ptr); - return VOS_STATUS_E_FAILURE; - } - /*Advance to next channel number*/ - ptr += nOffset; + sscanf(ptr,"%hhu %n", + &(pnoRequest.aNetworks[i].aChannels[j]), &nOffset); + /*Advance to next channel number*/ + ptr += nOffset; } } - if (1 != sscanf(ptr,"%lu %n", - &(pnoRequest.aNetworks[i].bcastNetwType), - &nOffset)) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "PNO broadcast network type input is not valid %s",ptr); - return VOS_STATUS_E_FAILURE; - } + sscanf(ptr,"%lu %n", + &(pnoRequest.aNetworks[i].bcastNetwType), &nOffset); VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "PNO bcastNetwType %d offset %d", @@ -6585,14 +6568,8 @@ VOS_STATUS iw_set_pno(struct net_device *dev, struct iw_request_info *info, /*Advance to rssi Threshold*/ ptr += nOffset; - if (1 != sscanf(ptr,"%hhu %n", - &(pnoRequest.aNetworks[i].rssiThreshold), - &nOffset)) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "PNO rssi threshold input is not valid %s",ptr); - return VOS_STATUS_E_FAILURE; - } + sscanf(ptr,"%hhu %n", + &(pnoRequest.aNetworks[i].rssiThreshold), &nOffset); VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "PNO rssi %d offset %d", @@ -6603,8 +6580,7 @@ VOS_STATUS iw_set_pno(struct net_device *dev, struct iw_request_info *info, }/*For ucNetworkCount*/ ucParams = sscanf(ptr,"%hhu %n", - &(pnoRequest.scanTimers.ucScanTimersCount), - &nOffset); + &(pnoRequest.scanTimers.ucScanTimersCount), &nOffset); /*Read the scan timers*/ if (( 1 == ucParams ) && ( pnoRequest.scanTimers.ucScanTimersCount > 0 )) @@ -6630,19 +6606,19 @@ VOS_STATUS iw_set_pno(struct net_device *dev, struct iw_request_info *info, &( pnoRequest.scanTimers.aTimerValues[i].uTimerRepeat), &nOffset); - if (2 != ucParams) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "Incorrect cmd - diff params then expected %d", ucParams); - return VOS_STATUS_E_FAILURE; - } - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "PNO Timer value %d Timer repeat %d offset %d", pnoRequest.scanTimers.aTimerValues[i].uTimerValue, pnoRequest.scanTimers.aTimerValues[i].uTimerRepeat, nOffset ); + if ( 2 != ucParams ) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "Incorrect cmd - diff params then expected %d", ucParams); + return VOS_STATUS_E_FAILURE; + } + ptr += nOffset; } @@ -6659,7 +6635,8 @@ VOS_STATUS iw_set_pno(struct net_device *dev, struct iw_request_info *info, pnoRequest.scanTimers.aTimerValues[0].uTimerRepeat = 0; } - ucParams = sscanf(ptr,"%hhu %n",&(ucMode), &nOffset); + ucParams = sscanf(ptr,"%hhu %n", + &(ucMode), &nOffset); pnoRequest.modePNO = ucMode; /*for LA we just expose suspend option*/ @@ -6668,6 +6645,30 @@ VOS_STATUS iw_set_pno(struct net_device *dev, struct iw_request_info *info, pnoRequest.modePNO = SIR_PNO_MODE_ON_SUSPEND; } + // IKHSS7-5797: set PNO intervals + /* A set value represents the amount of time that PNO will wait between + two consecutive scan procedures. + If the desired is for a uniform timer that fires always at the exact same + interval - one single value is to be set + + If there is a desire for a more complex - telescopic like timer multiple + values can be set - once PNO reaches the end of the array it will + continue scanning at intervals presented by the last value + + uTimerRepeat + How many times it should repeat that wait value + 0 - keep using this timer until PNO is disabled/ + e.g: 2 3 + 4 0 + - it will wait 2s between consecutive scans for 3 times + - after that it will wait 4s between consecutive scans until disabled + */ + pnoRequest.scanTimers.ucScanTimersCount = 2; + pnoRequest.scanTimers.aTimerValues[0].uTimerRepeat = 7; + pnoRequest.scanTimers.aTimerValues[0].uTimerValue = 45; + pnoRequest.scanTimers.aTimerValues[1].uTimerRepeat = 0; + pnoRequest.scanTimers.aTimerValues[1].uTimerValue = 480; + sme_SetPreferredNetworkList(WLAN_HDD_GET_HAL_CTX(pAdapter), &pnoRequest, pAdapter->sessionId, found_pref_network_cb, pAdapter); @@ -6682,7 +6683,7 @@ VOS_STATUS iw_set_rssi_filter(struct net_device *dev, struct iw_request_info *in v_U8_t rssiThreshold = 0; v_U8_t nRead; - nRead = sscanf(extra + nOffset,"%hhu", + nRead = sscanf(wrqu->data.pointer + nOffset,"%hhu", &rssiThreshold); if ( 1 != nRead ) @@ -6757,7 +6758,7 @@ int hdd_setBand_helper(struct net_device *dev, tANI_U8* ptr) (band == eCSR_BAND_5G && pHddCtx->cfg_ini->nBandCapability==1) || (band == eCSR_BAND_ALL && pHddCtx->cfg_ini->nBandCapability!=0)) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s: band value %u violate INI settings %u", __func__, band, pHddCtx->cfg_ini->nBandCapability); return -EIO; @@ -6781,23 +6782,7 @@ int hdd_setBand_helper(struct net_device *dev, tANI_U8* ptr) "%s: Current band value = %u, new setting %u ", __func__, currBand, band); - /* We need to change the band and flush the scan results here itself - * as we may get timeout for disconnection in which we will return - * with out doing any of these - */ - if (eHAL_STATUS_SUCCESS != sme_SetFreqBand(hHal, (eCsrBand)band)) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s: failed to set the band value to %u ", - __func__, band); - return -EINVAL; - } - wlan_hdd_cfg80211_update_band(pHddCtx->wiphy, (eCsrBand)band); - hdd_abort_mac_scan(pHddCtx, eCSR_SCAN_ABORT_DUE_TO_BAND_CHANGE); - sme_FilterScanResults(hHal, pAdapter->sessionId); - - if (band != eCSR_BAND_ALL && - hdd_connIsConnected(WLAN_HDD_GET_STATION_CTX_PTR(pAdapter))) + if (hdd_connIsConnected(WLAN_HDD_GET_STATION_CTX_PTR(pAdapter))) { hdd_station_ctx_t *pHddStaCtx = &(pAdapter)->sessionCtx.station; eHalStatus status = eHAL_STATUS_SUCCESS; @@ -6836,6 +6821,20 @@ int hdd_setBand_helper(struct net_device *dev, tANI_U8* ptr) return (0 == lrc) ? -ETIMEDOUT : -EINTR; } } + + hdd_abort_mac_scan(pHddCtx); + sme_ScanFlushResult(hHal, pAdapter->sessionId); +#if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR) + sme_UpdateBgScanConfigIniChannelList(hHal, (eCsrBand) band); +#endif + if (eHAL_STATUS_SUCCESS != sme_SetFreqBand(hHal, (eCsrBand)band)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s: failed to set the band value to %u ", + __func__, band); + return -EINVAL; + } + wlan_hdd_cfg80211_update_band(pHddCtx->wiphy, (eCsrBand)band); } return 0; } @@ -6845,10 +6844,10 @@ static int iw_set_band_config(struct net_device *dev, union iwreq_data *wrqu, char *extra) { hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); - tANI_U8 *ptr = NULL; + tANI_U8 *ptr = (tANI_U8*)wrqu->data.pointer; int ret = 0; - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "%s: ", __func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,"%s: ", __func__); if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) { @@ -6857,47 +6856,23 @@ static int iw_set_band_config(struct net_device *dev, return -EBUSY; } - /* ODD number is used for set, copy data using copy_from_user */ - ptr = mem_alloc_copy_from_user_helper(wrqu->data.pointer, - wrqu->data.length); - if (NULL == ptr) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "mem_alloc_copy_from_user_helper fail"); - return -ENOMEM; - } - if (memcmp(ptr, "SETBAND ", 8) == 0) { /* Change band request received */ ret = hdd_setBand_helper(dev, ptr); - } - kfree(ptr); + return ret; - return ret; + } + return 0; } static int iw_set_power_params_priv(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra) { - int ret; - char *ptr; VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "Set power params Private"); - /* ODD number is used for set, copy data using copy_from_user */ - ptr = mem_alloc_copy_from_user_helper(wrqu->data.pointer, - wrqu->data.length); - if (NULL == ptr) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "mem_alloc_copy_from_user_helper fail"); - return -ENOMEM; - } - - ret = iw_set_power_params(dev, info, wrqu, ptr, 0); - kfree(ptr); - return ret; + return iw_set_power_params(dev,info,wrqu,extra,0); } @@ -6916,7 +6891,7 @@ VOS_STATUS iw_set_power_params(struct net_device *dev, struct iw_request_info *i VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "Power Params data len %d data %s", wrqu->data.length, - extra); + (char *)wrqu->data.pointer); if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) { @@ -6958,16 +6933,11 @@ VOS_STATUS iw_set_power_params(struct net_device *dev, struct iw_request_info *i powerRequest.uEnableBET = SIR_NOCHANGE_POWER_VALUE; powerRequest.uBETInterval = SIR_NOCHANGE_POWER_VALUE; - ptr = extra + nOffset; + ptr = (char*)(wrqu->data.pointer + nOffset); while ( uTotalSize ) { - if (1 != sscanf(ptr,"%hhu %n", &(ucType), &nOffset)) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "Invalid input parameter type %s",ptr); - return VOS_STATUS_E_FAILURE; - } + sscanf(ptr,"%hhu %n", &(ucType), &nOffset); uTotalSize -= nOffset; @@ -6980,13 +6950,7 @@ VOS_STATUS iw_set_power_params(struct net_device *dev, struct iw_request_info *i } ptr += nOffset; - - if (1 != sscanf(ptr,"%lu %n", &(uValue), &nOffset)) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "Invalid input parameter value %s",ptr); - return VOS_STATUS_E_FAILURE; - } + sscanf(ptr,"%lu %n", &(uValue), &nOffset); VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "Power request parameter %d value %d offset %d", @@ -7209,10 +7173,17 @@ static const struct iw_priv_args we_private_args[] = { 0, "setTmLevel" }, - { WE_ENABLE_STRICT_FCC_REG, + { WE_SET_CHANNEL_RANGE, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, - "setStrictFCCreg" }, + "setChannelRange" }, + + // IKJB42MAIN-1244, Motorola, a19091 - BEGIN + { WE_SET_IPV6_FILTER_STATE, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "setIPV6FilState" }, + // IKJB42MAIN-1244, Motorola, a19091 - END /* handlers for main ioctl */ { WLAN_PRIV_SET_NONE_GET_INT, @@ -7266,6 +7237,12 @@ static const struct iw_priv_args we_private_args[] = { IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "getconcurrency" }, + /* MOTOROLA IKJB42MAIN-274 */ + { WE_GET_MCC_MODE, + 0, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + "getMccMode" }, + /* handlers for main ioctl */ { WLAN_PRIV_SET_CHAR_GET_NONE, IW_PRIV_TYPE_CHAR| 512, @@ -7322,6 +7299,13 @@ static const struct iw_priv_args we_private_args[] = { 0, "setsapchannels" }, + //Begin Motorola dcw476 4/17/13 IKJBXLINE-5577:changing wlan driver log level dynamically + { WE_SET_WLAN_DBG_TILL_LEVEL, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 3, + 0, + "setwlanloglevel" }, + //END IKJBXLINE-5577 + /* handlers for main ioctl */ { WLAN_PRIV_GET_CHAR_SET_NONE, 0, @@ -7388,6 +7372,7 @@ static const struct iw_priv_args we_private_args[] = { 0, 0, "exitAP" }, +#ifdef WLAN_BTAMP_FEATURE { WE_ENABLE_AMP, 0, 0, @@ -7396,6 +7381,7 @@ static const struct iw_priv_args we_private_args[] = { 0, 0, "disableAMP" }, +#endif { WE_ENABLE_DXE_STALL_DETECT, 0, 0, @@ -7408,6 +7394,11 @@ static const struct iw_priv_args we_private_args[] = { 0, 0, "dataSnapshot"}, + { + WE_SET_REASSOC_TRIGGER, + 0, + 0, + "reassoc" }, /* handlers for main ioctl */ { WLAN_PRIV_SET_VAR_INT_GET_NONE, @@ -7421,17 +7412,6 @@ static const struct iw_priv_args we_private_args[] = { 0, "dump" }, - /* handlers for sub-ioctl */ - { WE_MTRACE_SELECTIVE_MODULE_LOG_ENABLE_CMD, - IW_PRIV_TYPE_INT | MAX_VAR_ARGS, - 0, - "setdumplog" }, - - { WE_MTRACE_DUMP_CMD, - IW_PRIV_TYPE_INT | MAX_VAR_ARGS, - 0, - "dumplog" }, - /* handlers for sub ioctl */ { WE_MCC_CONFIG_CREDENTIAL, diff --git a/drivers/staging/prima/CORE/HDD/src/wlan_hdd_wmm.c b/drivers/staging/prima/CORE/HDD/src/wlan_hdd_wmm.c index cb29ae7db12..5992c6ead7c 100644 --- a/drivers/staging/prima/CORE/HDD/src/wlan_hdd_wmm.c +++ b/drivers/staging/prima/CORE/HDD/src/wlan_hdd_wmm.c @@ -81,7 +81,6 @@ #include <linux/semaphore.h> #include <wlan_hdd_hostapd.h> #include <wlan_hdd_softap_tx_rx.h> -#include <vos_sched.h> // change logging behavior based upon debug flag #ifdef HDD_WMM_DEBUG @@ -110,10 +109,6 @@ #define WLAN_HDD_MAX_DSCP 0x3f -// DHCP Port number -#define DHCP_SOURCE_PORT 0x4400 -#define DHCP_DESTINATION_PORT 0x4300 - static sme_QosWmmUpType hddWmmDscpToUpMap[WLAN_HDD_MAX_DSCP+1]; const v_U8_t hddWmmUpToAcMap[] = { @@ -1240,36 +1235,6 @@ static eHalStatus hdd_wmm_sme_callback (tHalHandle hHal, } #endif -/**======================================================================== - @brief hdd_wmmps_helper() - Function to set uapsd psb dynamically - - @param pAdapter : [in] pointer to adapter structure - - @param ptr : [in] pointer to command buffer - - @return : Zero on success, appropriate error on failure. - =======================================================================*/ -int hdd_wmmps_helper(hdd_adapter_t *pAdapter, tANI_U8 *ptr) -{ - if (NULL == pAdapter) - { - VOS_TRACE(VOS_MODULE_ID_HDD, WMM_TRACE_LEVEL_ERROR, - "%s: pAdapter is NULL", __func__); - return -EINVAL; - } - if (NULL == ptr) - { - VOS_TRACE(VOS_MODULE_ID_HDD, WMM_TRACE_LEVEL_ERROR, - "%s: ptr is NULL", __func__); - return -EINVAL; - } - /* convert ASCII to integer */ - pAdapter->configuredPsb = ptr[9] - '0'; - pAdapter->psbChanged = HDD_PSB_CHANGED; - - return 0; -} - /**============================================================================ @brief hdd_wmm_do_implicit_qos() - Function which will attempt to setup QoS for any AC requiring it @@ -1326,17 +1291,11 @@ static void hdd_wmm_do_implicit_qos(struct work_struct *work) memset(&qosInfo, 0, sizeof(qosInfo)); - qosInfo.ts_info.psb = pAdapter->configuredPsb; - switch (acType) { case WLANTL_AC_VO: qosInfo.ts_info.up = SME_QOS_WMM_UP_VO; - /* Check if there is any valid configuration from framework */ - if (HDD_PSB_CFG_INVALID == pAdapter->configuredPsb) - { - qosInfo.ts_info.psb = (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini->UapsdMask & 0x01; - } + qosInfo.ts_info.psb = (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini->UapsdMask & 0x01; qosInfo.ts_info.direction = (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini->InfraDirAcVo; qosInfo.ts_info.tid = 255; qosInfo.mean_data_rate = (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini->InfraMeanDataRateAcVo; @@ -1348,11 +1307,7 @@ static void hdd_wmm_do_implicit_qos(struct work_struct *work) break; case WLANTL_AC_VI: qosInfo.ts_info.up = SME_QOS_WMM_UP_VI; - /* Check if there is any valid configuration from framework */ - if (HDD_PSB_CFG_INVALID == pAdapter->configuredPsb) - { - qosInfo.ts_info.psb = (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini->UapsdMask & 0x02; - } + qosInfo.ts_info.psb = (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini->UapsdMask & 0x02; qosInfo.ts_info.direction = (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini->InfraDirAcVi; qosInfo.ts_info.tid = 255; qosInfo.mean_data_rate = (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini->InfraMeanDataRateAcVi; @@ -1365,11 +1320,7 @@ static void hdd_wmm_do_implicit_qos(struct work_struct *work) default: case WLANTL_AC_BE: qosInfo.ts_info.up = SME_QOS_WMM_UP_BE; - /* Check if there is any valid configuration from framework */ - if (HDD_PSB_CFG_INVALID == pAdapter->configuredPsb) - { - qosInfo.ts_info.psb = (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini->UapsdMask & 0x08; - } + qosInfo.ts_info.psb = (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini->UapsdMask & 0x08; qosInfo.ts_info.direction = (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini->InfraDirAcBe; qosInfo.ts_info.tid = 255; qosInfo.mean_data_rate = (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini->InfraMeanDataRateAcBe; @@ -1381,11 +1332,7 @@ static void hdd_wmm_do_implicit_qos(struct work_struct *work) break; case WLANTL_AC_BK: qosInfo.ts_info.up = SME_QOS_WMM_UP_BK; - /* Check if there is any valid configuration from framework */ - if (HDD_PSB_CFG_INVALID == pAdapter->configuredPsb) - { - qosInfo.ts_info.psb = (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini->UapsdMask & 0x04; - } + qosInfo.ts_info.psb = (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini->UapsdMask & 0x04; qosInfo.ts_info.direction = (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini->InfraDirAcBk; qosInfo.ts_info.tid = 255; qosInfo.mean_data_rate = (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini->InfraMeanDataRateAcBk; @@ -1533,6 +1480,7 @@ VOS_STATUS hdd_wmm_init ( hdd_context_t* pHddCtx ) hddWmmDscpToUpMap[40] = SME_QOS_WMM_UP_VI; hddWmmDscpToUpMap[48] = SME_QOS_WMM_UP_VO; hddWmmDscpToUpMap[56] = SME_QOS_WMM_UP_NC; + return VOS_STATUS_SUCCESS; } @@ -1571,43 +1519,9 @@ VOS_STATUS hdd_wmm_adapter_init( hdd_adapter_t *pAdapter ) pAcStatus->wmmAcTspecValid = VOS_FALSE; pAcStatus->wmmAcUapsdInfoValid = VOS_FALSE; } - // Invalid value(0xff) to indicate psb not configured through framework initially. - pAdapter->configuredPsb = HDD_PSB_CFG_INVALID; return VOS_STATUS_SUCCESS; } - -/**============================================================================ - @brief hdd_wmm_adapter_clear() - Function which will clear the WMM status - for all the ACs - - @param pAdapter : [in] pointer to Adapter context - - @return : VOS_STATUS_SUCCESS if succssful - : other values if failure - - ===========================================================================*/ -VOS_STATUS hdd_wmm_adapter_clear( hdd_adapter_t *pAdapter ) -{ - hdd_wmm_ac_status_t *pAcStatus; - WLANTL_ACEnumType acType; - VOS_TRACE(VOS_MODULE_ID_HDD, WMM_TRACE_LEVEL_INFO_LOW, - "%s: Entered", __func__); - for (acType = 0; acType < WLANTL_MAX_AC; acType++) - { - pAcStatus = &pAdapter->hddWmmStatus.wmmAcStatus[acType]; - pAcStatus->wmmAcAccessRequired = VOS_FALSE; - pAcStatus->wmmAcAccessNeeded = VOS_FALSE; - pAcStatus->wmmAcAccessPending = VOS_FALSE; - pAcStatus->wmmAcAccessFailed = VOS_FALSE; - pAcStatus->wmmAcAccessGranted = VOS_FALSE; - pAcStatus->wmmAcAccessAllowed = VOS_FALSE; - pAcStatus->wmmAcTspecValid = VOS_FALSE; - pAcStatus->wmmAcUapsdInfoValid = VOS_FALSE; - } - return VOS_STATUS_SUCCESS; -} - /**============================================================================ @brief hdd_wmm_close() - Function which will perform any necessary work to to clean up the WMM functionality prior to the kernel module unload @@ -1633,9 +1547,6 @@ VOS_STATUS hdd_wmm_adapter_close ( hdd_adapter_t* pAdapter ) #ifdef FEATURE_WLAN_CCX hdd_wmm_disable_inactivity_timer(pQosContext); #endif -#ifdef WLAN_OPEN_SOURCE - cancel_work_sync(&pQosContext->wmmAcSetupImplicitQos); -#endif hdd_wmm_free_context(pQosContext); } @@ -1643,23 +1554,6 @@ VOS_STATUS hdd_wmm_adapter_close ( hdd_adapter_t* pAdapter ) } /**============================================================================ - @brief is_dhcp_packet() - Function which will check OS packet for - DHCP packet - - @param skb : [in] pointer to OS packet (sk_buff) - @return : VOS_TRUE if the OS packet is DHCP packet - : otherwise VOS_FALSE - ===========================================================================*/ -v_BOOL_t is_dhcp_packet(struct sk_buff *skb) -{ - if (*((u16*)((u8*)skb->data+34)) == DHCP_SOURCE_PORT || - *((u16*)((u8*)skb->data+34)) == DHCP_DESTINATION_PORT) - return VOS_TRUE; - - return VOS_FALSE; -} - -/**============================================================================ @brief hdd_wmm_classify_pkt() - Function which will classify an OS packet into a WMM AC based on either 802.1Q or DSCP @@ -1879,7 +1773,7 @@ v_U16_t hdd_hostapd_select_queue(struct net_device * dev, struct sk_buff *skb) spin_lock_bh( &pAdapter->staInfo_lock ); if (FALSE == vos_is_macaddr_equal(&pAdapter->aStaInfo[STAId].macAddrSTA, pDestMacAddress)) { - VOS_TRACE( VOS_MODULE_ID_HDD_SOFTAP, VOS_TRACE_LEVEL_INFO, + VOS_TRACE( VOS_MODULE_ID_HDD_SOFTAP, VOS_TRACE_LEVEL_ERROR, "%s: Station MAC address does not matching", __func__); *pSTAId = HDD_WLAN_INVALID_STA_ID; @@ -1889,14 +1783,6 @@ v_U16_t hdd_hostapd_select_queue(struct net_device * dev, struct sk_buff *skb) { /* Get the user priority from IP header & corresponding AC */ hdd_wmm_classify_pkt (pAdapter, skb, &ac, &up); - //If 3/4th of Tx queue is used then place the DHCP packet in VOICE AC queue - if (pAdapter->aStaInfo[STAId].vosLowResource && is_dhcp_packet(skb)) - { - VOS_TRACE(VOS_MODULE_ID_HDD, WMM_TRACE_LEVEL_WARN, - "%s: Making priority of DHCP packet as VOICE", __func__); - up = SME_QOS_WMM_UP_VO; - ac = hddWmmUpToAcMap[up]; - } } *pSTAId = STAId; @@ -1927,27 +1813,11 @@ v_U16_t hdd_wmm_select_queue(struct net_device * dev, struct sk_buff *skb) hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); - if (isWDresetInProgress()) { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, - FL("called during WDReset")); - skb->priority = SME_QOS_WMM_UP_BE; - return HDD_LINUX_AC_BE; - } - // if we don't want QoS or the AP doesn't support Qos // All traffic will get equal opportuniy to transmit data frames. if( hdd_wmm_is_active(pAdapter) ) { /* Get the user priority from IP header & corresponding AC */ hdd_wmm_classify_pkt (pAdapter, skb, &ac, &up); - //If 3/4th of BE AC Tx queue is full, then place the DHCP packet in VOICE AC queue - if (pAdapter->isVosLowResource && is_dhcp_packet(skb)) - { - VOS_TRACE(VOS_MODULE_ID_HDD, WMM_TRACE_LEVEL_WARN, - "%s: BestEffort Tx Queue is 3/4th full" - " Make DHCP packet's pri as VO", __func__); - up = SME_QOS_WMM_UP_VO; - ac = hddWmmUpToAcMap[up]; - } } skb->priority = up; @@ -1956,45 +1826,6 @@ v_U16_t hdd_wmm_select_queue(struct net_device * dev, struct sk_buff *skb) return queueIndex; } -/**========================================================================== - @brief hdd_wmm_acquire_access_required() - Function which will determine - acquire admittance for a WMM AC is required or not based on psb configuration - done in framework - - @param pAdapter : [in] pointer to adapter structure - - @param acType : [in] WMM AC type of OS packet - - @return : void - ===========================================================================*/ -void hdd_wmm_acquire_access_required(hdd_adapter_t *pAdapter, - WLANTL_ACEnumType acType) -{ -/* Each bit in the LSB nibble indicates 1 AC. - * Clearing the particular bit in LSB nibble to indicate - * access required - */ - switch(acType) - { - case WLANTL_AC_BK: - pAdapter->psbChanged &= ~SME_QOS_UAPSD_CFG_BK_CHANGED_MASK; /* clear first bit */ - break; - case WLANTL_AC_BE: - pAdapter->psbChanged &= ~SME_QOS_UAPSD_CFG_BE_CHANGED_MASK; /* clear second bit */ - break; - case WLANTL_AC_VI: - pAdapter->psbChanged &= ~SME_QOS_UAPSD_CFG_VI_CHANGED_MASK; /* clear third bit */ - break; - case WLANTL_AC_VO: - pAdapter->psbChanged &= ~SME_QOS_UAPSD_CFG_VO_CHANGED_MASK; /* clear fourth bit */ - break; - default: - VOS_TRACE(VOS_MODULE_ID_HDD, WMM_TRACE_LEVEL_ERROR, - "%s: Invalid AC Type", __func__); - break; - } -} - /**============================================================================ @brief hdd_wmm_acquire_access() - Function which will attempt to acquire admittance for a WMM AC diff --git a/drivers/staging/prima/CORE/MAC/inc/aniGlobal.h b/drivers/staging/prima/CORE/MAC/inc/aniGlobal.h index 8b4b9e8e072..e55dca65e5b 100644 --- a/drivers/staging/prima/CORE/MAC/inc/aniGlobal.h +++ b/drivers/staging/prima/CORE/MAC/inc/aniGlobal.h @@ -917,14 +917,6 @@ tLimMlmOemDataRsp *gpLimMlmOemDataRsp; tLimDisassocDeauthCnfReq limDisassocDeauthCnfReq; tANI_U8 deferredMsgCnt; tSirDFSChannelList dfschannelList; - - // Flag to debug remain on channel - tANI_BOOLEAN gDebugP2pRemainOnChannel; - /* Sequence number to keep track of - * start and end of remain on channel - * debug marker frame. - */ - tANI_U32 remOnChnSeqNum; } tAniSirLim, *tpAniSirLim; typedef struct sLimMgmtFrameRegistration diff --git a/drivers/staging/prima/CORE/MAC/inc/macTrace.h b/drivers/staging/prima/CORE/MAC/inc/macTrace.h index 01c5a90e13b..2b1d30d9c6a 100644 --- a/drivers/staging/prima/CORE/MAC/inc/macTrace.h +++ b/drivers/staging/prima/CORE/MAC/inc/macTrace.h @@ -70,12 +70,51 @@ #define MAC_TRACE_GET_MSG_ID(data) (data & 0xffff) +typedef struct sTraceRecord +{ + tANI_U32 time; + tANI_U8 module; + tANI_U8 code; + tANI_U8 session; + tANI_U32 data; +}tTraceRecord, *tpTraceRecord; + #define eLOG_NODROP_MISSED_BEACON_SCENARIO 0 #define eLOG_PROC_DEAUTH_FRAME_SCENARIO 1 +#define MAX_TRACE_RECORDS 2000 +#define INVALID_TRACE_ADDR 0xffffffff +#define DEFAULT_TRACE_DUMP_COUNT 0 + + + +typedef void (*tpTraceCb)(tpAniSirGlobal, tpTraceRecord, tANI_U16); + + + + +typedef struct sTraceData +{ + tANI_U32 head; + tANI_U32 tail; + tANI_U32 num; + tANI_U16 numSinceLastDump; + + //Config for controlling the trace + tANI_U8 enable; + tANI_U16 dumpCount; //will dump after number of records reach this number. + +}tTraceData; + + + +void macTraceInit(tpAniSirGlobal pMac); void macTraceReset(tpAniSirGlobal pMac); void macTrace(tpAniSirGlobal pMac, tANI_U8 code, tANI_U8 session, tANI_U32 data); void macTraceNew(tpAniSirGlobal pMac, tANI_U8 module, tANI_U8 code, tANI_U8 session, tANI_U32 data); +void macTraceDumpAll(tpAniSirGlobal pMac, tANI_U8 code, tANI_U8 session, tANI_U32 count); +void macTraceCfg(tpAniSirGlobal pMac, tANI_U32 enable, tANI_U32 dumpWhenFull, tANI_U32 code, tANI_U32 session); +void macTraceRegister( tpAniSirGlobal pMac, VOS_MODULE_ID moduleId, tpTraceCb traceCb); tANI_U8* macTraceGetCfgMsgString( tANI_U16 cfgMsg ); tANI_U8* macTraceGetLimMsgString( tANI_U16 limMsg ); tANI_U8* macTraceGetWdaMsgString( tANI_U16 wdaMsg ); diff --git a/drivers/staging/prima/CORE/MAC/inc/qwlan_version.h b/drivers/staging/prima/CORE/MAC/inc/qwlan_version.h index a5d83a158fa..3698fa95219 100644..100755 --- a/drivers/staging/prima/CORE/MAC/inc/qwlan_version.h +++ b/drivers/staging/prima/CORE/MAC/inc/qwlan_version.h @@ -58,11 +58,11 @@ BRIEF DESCRIPTION: #define QWLAN_VERSION_MAJOR 3 #define QWLAN_VERSION_MINOR 2 -#define QWLAN_VERSION_PATCH 7 +#define QWLAN_VERSION_PATCH 6 #define QWLAN_VERSION_EXTRA "" -#define QWLAN_VERSION_BUILD 47 +#define QWLAN_VERSION_BUILD 114 -#define QWLAN_VERSIONSTR "3.2.7.47" +#define QWLAN_VERSIONSTR "3.2.6.114.1220.3" #endif /* QWLAN_VERSION_H */ diff --git a/drivers/staging/prima/CORE/MAC/inc/sirApi.h b/drivers/staging/prima/CORE/MAC/inc/sirApi.h index ceaf3a628a6..e3c0e26983b 100644 --- a/drivers/staging/prima/CORE/MAC/inc/sirApi.h +++ b/drivers/staging/prima/CORE/MAC/inc/sirApi.h @@ -344,7 +344,6 @@ typedef enum eSirResultCodes #ifdef WLAN_FEATURE_GTK_OFFLOAD eSIR_SME_GTK_OFFLOAD_GETINFO_REQ_FAILED, #endif // WLAN_FEATURE_GTK_OFFLOAD - eSIR_SME_DEAUTH_STATUS, eSIR_DONOT_USE_RESULT_CODE = SIR_MAX_ENUM_SIZE } tSirResultCodes; @@ -456,15 +455,6 @@ typedef struct sSirRemainOnChnReq tANI_U8 probeRspIe[1]; }tSirRemainOnChnReq, *tpSirRemainOnChnReq; -/* Structure for vendor specific IE of debug marker frame - to debug remain on channel issues */ -typedef struct publicVendorSpecific -{ - tANI_U8 category; - tANI_U8 elementid; - tANI_U8 length; -} publicVendorSpecific; - typedef struct sSirRegisterMgmtFrame { tANI_U16 messageType; @@ -1051,8 +1041,6 @@ typedef struct sSirSmeJoinReq tANI_U8 txBFIniFeatureEnabled; tANI_U8 txBFCsnValue; #endif - tAniBool isWMEenabled; - tAniBool isQosEnabled; tANI_U8 isAmsduSupportInAMPDU; tAniTitanCBNeighborInfo cbNeighbors; @@ -2127,7 +2115,6 @@ typedef struct sAniChangeCountryCodeReq tANI_U16 msgType; // message type is same as the request type tANI_U16 msgLen; // length of the entire request tANI_U8 countryCode[WNI_CFG_COUNTRY_CODE_LEN]; //3 char country code - tAniBool sendRegHint; //TRUE if we want to send hint to NL80211 void *changeCCCallback; void *pDevContext; //device context void *pVosContext; //voss context @@ -3263,9 +3250,7 @@ typedef struct sSirUpdateAPWPARSNIEsReq #define SIR_OFFLOAD_DISABLE 0 #define SIR_OFFLOAD_ENABLE 1 #define SIR_OFFLOAD_BCAST_FILTER_ENABLE 0x2 -#define SIR_OFFLOAD_MCAST_FILTER_ENABLE 0x4 #define SIR_OFFLOAD_ARP_AND_BCAST_FILTER_ENABLE (SIR_OFFLOAD_ENABLE|SIR_OFFLOAD_BCAST_FILTER_ENABLE) -#define SIR_OFFLOAD_NS_AND_MCAST_FILTER_ENABLE (SIR_OFFLOAD_ENABLE|SIR_OFFLOAD_MCAST_FILTER_ENABLE) #ifdef WLAN_NS_OFFLOAD typedef struct sSirNsOffloadReq @@ -3277,7 +3262,6 @@ typedef struct sSirNsOffloadReq tANI_U8 selfMacAddr[6]; tANI_U8 srcIPv6AddrValid; tANI_U8 targetIPv6AddrValid[SIR_MAC_NUM_TARGET_IPV6_NS_OFFLOAD_NA]; - tANI_U8 slotIdx; } tSirNsOffloadReq, *tpSirNsOffloadReq; #endif //WLAN_NS_OFFLOAD @@ -3473,15 +3457,9 @@ typedef struct tSirScanTimer aTimerValues[SIR_PNO_MAX_SCAN_TIMERS]; } tSirScanTimersType; -/*Pref Net Req status */ -typedef void(*PNOReqStatusCb)(void *callbackContext, VOS_STATUS status); - - typedef struct sSirPNOScanReq { tANI_U8 enable; - PNOReqStatusCb statusCallback; - void *callbackContext; eSirPNOMode modePNO; tANI_U8 ucNetworksCount; tSirNetworkType aNetworks[SIR_PNO_MAX_SUPP_NETWORKS]; @@ -3700,6 +3678,14 @@ typedef struct sSirRcvPktFilterCfg tSirRcvPktFilterFieldParams paramsData[SIR_MAX_NUM_TESTS_PER_FILTER]; }tSirRcvPktFilterCfgType, *tpSirRcvPktFilterCfgType; +// IKJB42MAIN-1244, Motorola, a19091 - BEGIN +typedef struct sSirInvokeV6Filter +{ + int (*configureFilterFn)(void *pAdapter, v_U8_t set, v_U8_t userSet); + void *pHddAdapter; + v_U8_t set; +}tSirInvokeV6Filter; +// IKJB42MAIN-1244, Motorola, a19091 - END // // Filter Packet Match Count Parameters // diff --git a/drivers/staging/prima/CORE/MAC/inc/sirMacProtDef.h b/drivers/staging/prima/CORE/MAC/inc/sirMacProtDef.h index 2891223b719..a1876ede92b 100644 --- a/drivers/staging/prima/CORE/MAC/inc/sirMacProtDef.h +++ b/drivers/staging/prima/CORE/MAC/inc/sirMacProtDef.h @@ -455,9 +455,6 @@ #define SIR_MAX_NOA_DESCR 2 #define SIR_P2P_IE_HEADER_LEN 6 -#define SIR_MAC_CISCO_OUI "\x00\x40\x96" -#define SIR_MAC_CISCO_OUI_SIZE 3 - // min size of wme oui header: oui(3) + type + subtype + version #define SIR_MAC_OUI_WME_HDR_MIN 6 @@ -501,10 +498,8 @@ #define SIR_MAC_OUI_WSM_SCHEDULE_MAX 20 #ifdef WLAN_NS_OFFLOAD -#define SIR_MAC_NS_OFFLOAD_SIZE 1 //support only one IPv6 offload +#define SIR_MAC_NS_OFFLOAD_SIZE 1 //support only one IPv6 offload #define SIR_MAC_NUM_TARGET_IPV6_NS_OFFLOAD_NA 2 //Number of target IP in NA frames. It must be at least 2 -#define SIR_MAC_IPV6_ADDR_LEN 16 -#define SIR_IPV6_ADDR_VALID 1 #endif //WLAN_NS_OFFLOAD #define SIR_MAC_ARP_OFFLOAD_SIZE 1 diff --git a/drivers/staging/prima/CORE/MAC/inc/wniApi.h b/drivers/staging/prima/CORE/MAC/inc/wniApi.h index 1388052e7b4..96ca32e68c0 100644 --- a/drivers/staging/prima/CORE/MAC/inc/wniApi.h +++ b/drivers/staging/prima/CORE/MAC/inc/wniApi.h @@ -370,6 +370,7 @@ enum eWniMsgTypes eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP, #endif // WLAN_FEATURE_GTK_OFFLOAD eWNI_SME_CANDIDATE_FOUND_IND, //ROAM candidate indication from FW + eWNI_SME_SET_V6_MC_FILTER, // IKJB42MAIN-1244, Motorola, a19091 eWNI_SME_MSG_TYPES_END }; diff --git a/drivers/staging/prima/CORE/MAC/inc/wniCfgAp.h b/drivers/staging/prima/CORE/MAC/inc/wniCfgAp.h index 4c44f17a8bf..91d0d1f3b1c 100644 --- a/drivers/staging/prima/CORE/MAC/inc/wniCfgAp.h +++ b/drivers/staging/prima/CORE/MAC/inc/wniCfgAp.h @@ -360,11 +360,6 @@ #define WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED 295 #define WNI_CFG_DISABLE_LDPC_WITH_TXBF_AP 296 #define WNI_CFG_AP_LINK_MONITOR_TIMEOUT 297 -#define WNI_CFG_BTC_ACTIVE_WLAN_LEN 298 -#define WNI_CFG_BTC_ACTIVE_BT_LEN 299 -#define WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN 300 -#define WNI_CFG_BTC_SAP_ACTIVE_BT_LEN 301 -#define WNI_CFG_DEBUG_P2P_REMAIN_ON_CHANNEL 302 /* * String parameter lengths @@ -2504,50 +2499,10 @@ #define WNI_CFG_AP_LINK_MONITOR_TIMEOUT_APMAX 255 #define WNI_CFG_AP_LINK_MONITOR_TIMEOUT_APDEF 3 -#define WNI_CFG_BTC_ACTIVE_WLAN_LEN_STAMIN 0 -#define WNI_CFG_BTC_ACTIVE_WLAN_LEN_STAMAX 250000 -#define WNI_CFG_BTC_ACTIVE_WLAN_LEN_STADEF 60000 - -#define WNI_CFG_BTC_ACTIVE_WLAN_LEN_APMIN 0 -#define WNI_CFG_BTC_ACTIVE_WLAN_LEN_APMAX 250000 -#define WNI_CFG_BTC_ACTIVE_WLAN_LEN_APDEF 60000 - -#define WNI_CFG_BTC_ACTIVE_BT_LEN_STAMIN 0 -#define WNI_CFG_BTC_ACTIVE_BT_LEN_STAMAX 250000 -#define WNI_CFG_BTC_ACTIVE_BT_LEN_STADEF 90000 - -#define WNI_CFG_BTC_ACTIVE_BT_LEN_APMIN 0 -#define WNI_CFG_BTC_ACTIVE_BT_LEN_APMAX 250000 -#define WNI_CFG_BTC_ACTIVE_BT_LEN_APDEF 90000 - -#define WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN_STAMIN 0 -#define WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN_STAMAX 250000 -#define WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN_STADEF 60000 - -#define WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN_APMIN 0 -#define WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN_APMAX 250000 -#define WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN_APDEF 60000 - -#define WNI_CFG_BTC_SAP_ACTIVE_BT_LEN_STAMIN 0 -#define WNI_CFG_BTC_SAP_ACTIVE_BT_LEN_STAMAX 250000 -#define WNI_CFG_BTC_SAP_ACTIVE_BT_LEN_STADEF 90000 - -#define WNI_CFG_BTC_SAP_ACTIVE_BT_LEN_APMIN 0 -#define WNI_CFG_BTC_SAP_ACTIVE_BT_LEN_APMAX 250000 -#define WNI_CFG_BTC_SAP_ACTIVE_BT_LEN_APDEF 90000 - -#define WNI_CFG_DEBUG_P2P_REMAIN_ON_CHANNEL_STAMIN 0 -#define WNI_CFG_DEBUG_P2P_REMAIN_ON_CHANNEL_STAMAX 1 -#define WNI_CFG_DEBUG_P2P_REMAIN_ON_CHANNEL_STADEF 0 - -#define WNI_CFG_DEBUG_P2P_REMAIN_ON_CHANNEL_APMIN 0 -#define WNI_CFG_DEBUG_P2P_REMAIN_ON_CHANNEL_APMAX 1 -#define WNI_CFG_DEBUG_P2P_REMAIN_ON_CHANNEL_APDEF 0 - -#define CFG_PARAM_MAX_NUM 303 -#define CFG_AP_IBUF_MAX_SIZE 242 +#define CFG_PARAM_MAX_NUM 298 +#define CFG_AP_IBUF_MAX_SIZE 237 #define CFG_AP_SBUF_MAX_SIZE 3422 -#define CFG_STA_IBUF_MAX_SIZE 237 +#define CFG_STA_IBUF_MAX_SIZE 232 #define CFG_STA_SBUF_MAX_SIZE 3388 #define CFG_SEM_MAX_NUM 19 diff --git a/drivers/staging/prima/CORE/MAC/inc/wniCfgSta.h b/drivers/staging/prima/CORE/MAC/inc/wniCfgSta.h index 438e6fe8184..d9a412bb42e 100644 --- a/drivers/staging/prima/CORE/MAC/inc/wniCfgSta.h +++ b/drivers/staging/prima/CORE/MAC/inc/wniCfgSta.h @@ -354,11 +354,6 @@ #define WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED 295 #define WNI_CFG_DISABLE_LDPC_WITH_TXBF_AP 296 #define WNI_CFG_AP_LINK_MONITOR_TIMEOUT 297 -#define WNI_CFG_BTC_ACTIVE_WLAN_LEN 298 -#define WNI_CFG_BTC_ACTIVE_BT_LEN 299 -#define WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN 300 -#define WNI_CFG_BTC_SAP_ACTIVE_BT_LEN 301 -#define WNI_CFG_DEBUG_P2P_REMAIN_ON_CHANNEL 302 /* * String parameter lengths @@ -1633,28 +1628,8 @@ #define WNI_CFG_AP_LINK_MONITOR_TIMEOUT_STAMAX 255 #define WNI_CFG_AP_LINK_MONITOR_TIMEOUT_STADEF 3 -#define WNI_CFG_BTC_ACTIVE_WLAN_LEN_STAMIN 0 -#define WNI_CFG_BTC_ACTIVE_WLAN_LEN_STAMAX 250000 -#define WNI_CFG_BTC_ACTIVE_WLAN_LEN_STADEF 60000 - -#define WNI_CFG_BTC_ACTIVE_BT_LEN_STAMIN 0 -#define WNI_CFG_BTC_ACTIVE_BT_LEN_STAMAX 250000 -#define WNI_CFG_BTC_ACTIVE_BT_LEN_STADEF 90000 - -#define WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN_STAMIN 0 -#define WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN_STAMAX 250000 -#define WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN_STADEF 60000 - -#define WNI_CFG_BTC_SAP_ACTIVE_BT_LEN_STAMIN 0 -#define WNI_CFG_BTC_SAP_ACTIVE_BT_LEN_STAMAX 250000 -#define WNI_CFG_BTC_SAP_ACTIVE_BT_LEN_STADEF 90000 - -#define WNI_CFG_DEBUG_P2P_REMAIN_ON_CHANNEL_STAMIN 0 -#define WNI_CFG_DEBUG_P2P_REMAIN_ON_CHANNEL_STAMAX 1 -#define WNI_CFG_DEBUG_P2P_REMAIN_ON_CHANNEL_STADEF 0 - -#define CFG_PARAM_MAX_NUM 303 -#define CFG_STA_IBUF_MAX_SIZE 237 +#define CFG_PARAM_MAX_NUM 298 +#define CFG_STA_IBUF_MAX_SIZE 232 #define CFG_STA_SBUF_MAX_SIZE 3388 #define CFG_SEM_MAX_NUM 19 diff --git a/drivers/staging/prima/CORE/MAC/src/cfg/cfgParamName.c b/drivers/staging/prima/CORE/MAC/src/cfg/cfgParamName.c index 4abb37bf624..c0db1a067af 100644 --- a/drivers/staging/prima/CORE/MAC/src/cfg/cfgParamName.c +++ b/drivers/staging/prima/CORE/MAC/src/cfg/cfgParamName.c @@ -350,11 +350,6 @@ unsigned char *gCfgParamName[] = { (unsigned char *)"ENABLE_MCC_ADAPTIVE_SCHED", (unsigned char *)"DISABLE_LDPC_WITH_TXBF_AP", (unsigned char *)"AP_LINK_MONITOR_TIMEOUT", - (unsigned char *)"BTC_ACTIVE_WLAN_LEN", - (unsigned char *)"BTC_ACTIVE_BT_LEN", - (unsigned char *)"BTC_SAP_ACTIVE_WLAN_LEN", - (unsigned char *)"BTC_SAP_ACTIVE_BT_LEN", - (unsigned char *)"DEBUG_P2P_REMAIN_ON_CHANNEL", }; diff --git a/drivers/staging/prima/CORE/MAC/src/cfg/cfgUtil/cfg.txt b/drivers/staging/prima/CORE/MAC/src/cfg/cfgUtil/cfg.txt index 7a91314564f..cf40317317c 100644 --- a/drivers/staging/prima/CORE/MAC/src/cfg/cfgUtil/cfg.txt +++ b/drivers/staging/prima/CORE/MAC/src/cfg/cfgUtil/cfg.txt @@ -1,4 +1,4 @@ - * +/* * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. @@ -17,7 +17,7 @@ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. - * + */ * Copyright (c) 2012, The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. @@ -4511,57 +4511,3 @@ HAL V RW NP HAL 1 255 3 - -* -* BTC Active WLAN Len -* -WNI_CFG_BTC_ACTIVE_WLAN_LEN I 4 7 -V RW NP -HAL -0 250000 60000 -V RW NP -HAL -0 250000 60000 - -* -* BTC Active BT Len -* -WNI_CFG_BTC_ACTIVE_BT_LEN I 4 7 -V RW NP -HAL -0 250000 90000 -V RW NP -HAL -0 250000 90000 - -* -* BTC SAP Active WLAN Len -* -WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN I 4 7 -V RW NP -HAL -0 250000 60000 -V RW NP -HAL -0 250000 60000 - -* -* BTC SAP Active BT Len -* -WNI_CFG_BTC_SAP_ACTIVE_BT_LEN I 4 7 -V RW NP -HAL -0 250000 90000 -V RW NP -HAL -0 250000 90000 - -* Debug p2p remain on channel -* -WNI_CFG_DEBUG_P2P_REMAIN_ON_CHANNEL I 4 7 -V RW NP -NONE -0 1 0 -V RW NP -NONE -0 1 0 diff --git a/drivers/staging/prima/CORE/MAC/src/include/sirParams.h b/drivers/staging/prima/CORE/MAC/src/include/sirParams.h index f539fb274f5..b0afe98d90b 100644 --- a/drivers/staging/prima/CORE/MAC/src/include/sirParams.h +++ b/drivers/staging/prima/CORE/MAC/src/include/sirParams.h @@ -564,6 +564,8 @@ typedef struct sSirMbMsgP2p #define SIR_HAL_TRAFFIC_STATS_IND (SIR_HAL_ITC_MSG_TYPES_BEGIN + 195) +#define SIR_HAL_RECEIVE_FILTER_SET_FILTER_MC_REQ (SIR_HAL_ITC_MSG_TYPES_BEGIN + 200) // IKJB42MAIN-1244, Motorola, a19091 + #define SIR_HAL_MSG_TYPES_END (SIR_HAL_ITC_MSG_TYPES_BEGIN + 0xFF) // CFG message types #define SIR_CFG_MSG_TYPES_BEGIN (SIR_CFG_MODULE_ID << 8) diff --git a/drivers/staging/prima/CORE/MAC/src/include/utilsApi.h b/drivers/staging/prima/CORE/MAC/src/include/utilsApi.h index 4806ef83752..8dbc12499c9 100644 --- a/drivers/staging/prima/CORE/MAC/src/include/utilsApi.h +++ b/drivers/staging/prima/CORE/MAC/src/include/utilsApi.h @@ -69,8 +69,6 @@ extern void logDbg(tpAniSirGlobal pMac, tANI_U8 modId, tANI_U32 debugLevel, cons extern tANI_U32 gPktAllocCnt, gPktFreeCnt; -extern VOS_TRACE_LEVEL getVosDebugLevel(tANI_U32 debugLevel); - /// Debug dumps extern void logPrintf(tpAniSirGlobal, tANI_U32, tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3, tANI_U32 arg4); diff --git a/drivers/staging/prima/CORE/MAC/src/pe/include/limFTDefs.h b/drivers/staging/prima/CORE/MAC/src/pe/include/limFTDefs.h index adbcce5825f..4912087f328 100644 --- a/drivers/staging/prima/CORE/MAC/src/pe/include/limFTDefs.h +++ b/drivers/staging/prima/CORE/MAC/src/pe/include/limFTDefs.h @@ -61,7 +61,7 @@ ------------------------------------------------------------------------*/ #define SIR_MDIE_SIZE 3 // MD ID(2 bytes), Capability(1 byte) #define MAX_TIDS 8 -#define MAX_FTIE_SIZE 384 // Max size limited to 384, on acct. of IW custom events +#define MAX_FTIE_SIZE 256 // Max size limited to 256, on acct. of IW custom events /*-------------------------------------------------------------------------- diff --git a/drivers/staging/prima/CORE/MAC/src/pe/include/limGlobal.h b/drivers/staging/prima/CORE/MAC/src/pe/include/limGlobal.h index e6ba67f3d54..7c2b6d9d455 100644 --- a/drivers/staging/prima/CORE/MAC/src/pe/include/limGlobal.h +++ b/drivers/staging/prima/CORE/MAC/src/pe/include/limGlobal.h @@ -661,7 +661,7 @@ typedef struct sLimWscIeInfo } tLimWscIeInfo, *tpLimWscIeInfo; // maximum number of tspec's supported -#define LIM_NUM_TSPEC_MAX 15 +#define LIM_NUM_TSPEC_MAX 4 //structure to hold all 11h specific data diff --git a/drivers/staging/prima/CORE/MAC/src/pe/include/limSession.h b/drivers/staging/prima/CORE/MAC/src/pe/include/limSession.h index 619af9338c1..96a4785535d 100644 --- a/drivers/staging/prima/CORE/MAC/src/pe/include/limSession.h +++ b/drivers/staging/prima/CORE/MAC/src/pe/include/limSession.h @@ -351,8 +351,6 @@ typedef struct sPESession // Added to Support BT-AMP #endif tANI_BOOLEAN fWaitForProbeRsp; tANI_BOOLEAN fIgnoreCapsChange; - tANI_BOOLEAN fDeauthReceived; - tANI_BOOLEAN isCiscoVendorAP; tANI_U8 isAmsduSupportInAMPDU; }tPESession, *tpPESession; diff --git a/drivers/staging/prima/CORE/MAC/src/pe/include/limTrace.h b/drivers/staging/prima/CORE/MAC/src/pe/include/limTrace.h index 291457fdc95..0313d1e310f 100644 --- a/drivers/staging/prima/CORE/MAC/src/pe/include/limTrace.h +++ b/drivers/staging/prima/CORE/MAC/src/pe/include/limTrace.h @@ -62,7 +62,6 @@ #include "limGlobal.h" #include "macTrace.h" -#include "vos_trace.h" #ifdef LIM_TRACE_RECORD @@ -117,13 +116,24 @@ void limTraceUpdateMgmtStat(tpAniSirGlobal pMac, tANI_U8 subtype); void limTraceDumpMgmtStat(tpAniSirGlobal pMac, tANI_U8 subtype); tANI_U8* limTraceGetMlmStateString( tANI_U32 mlmState ); tANI_U8* limTraceGetSmeStateString( tANI_U32 smeState ); -void limTraceDump(tpAniSirGlobal pMac, tpvosTraceRecord pRecord, tANI_U16 recIndex); +void limTraceDump(tpAniSirGlobal pMac, tpTraceRecord pRecord, tANI_U16 recIndex); void macTraceMsgTx(tpAniSirGlobal pMac, tANI_U8 session, tANI_U32 data); void macTraceMsgRx(tpAniSirGlobal pMac, tANI_U8 session, tANI_U32 data); void macTraceMsgRxNew(tpAniSirGlobal pMac, tANI_U8 module, tANI_U8 session, tANI_U32 data); void macTraceMsgTxNew(tpAniSirGlobal pMac, tANI_U8 module, tANI_U8 session, tANI_U32 data); -#endif //endof LIM_TRACE_RECORD MACRO + + + + + +#define MTRACE(p) p +#define NO_SESSION 0xFF + +#else +#define MTRACE(p) { } + +#endif #endif diff --git a/drivers/staging/prima/CORE/MAC/src/pe/include/rrmGlobal.h b/drivers/staging/prima/CORE/MAC/src/pe/include/rrmGlobal.h index 74af86d8e2e..8899ebd18ed 100644 --- a/drivers/staging/prima/CORE/MAC/src/pe/include/rrmGlobal.h +++ b/drivers/staging/prima/CORE/MAC/src/pe/include/rrmGlobal.h @@ -57,8 +57,7 @@ ========================================================================*/ -#define SIR_BCN_REPORT_MAX_BSS_DESC_PER_ACTION_FRAME 3 -#define SIR_BCN_REPORT_MAX_BSS_PER_CHANNEL 15 +#define SIR_BCN_REPORT_MAX_BSS_DESC 4 typedef enum eRrmRetStatus { @@ -100,7 +99,7 @@ typedef struct sSirBeaconReportXmitInd tANI_U16 duration; tANI_U8 regClass; tANI_U8 numBssDesc; - tpSirBssDescription pBssDescription[SIR_BCN_REPORT_MAX_BSS_DESC_PER_ACTION_FRAME]; + tpSirBssDescription pBssDescription[SIR_BCN_REPORT_MAX_BSS_DESC]; } tSirBeaconReportXmitInd, * tpSirBeaconReportXmitInd; typedef struct sSirNeighborReportReqInd diff --git a/drivers/staging/prima/CORE/MAC/src/pe/lim/limApi.c b/drivers/staging/prima/CORE/MAC/src/pe/lim/limApi.c index 42f350f1d03..e458129b581 100644 --- a/drivers/staging/prima/CORE/MAC/src/pe/lim/limApi.c +++ b/drivers/staging/prima/CORE/MAC/src/pe/lim/limApi.c @@ -758,6 +758,7 @@ limInitialize(tpAniSirGlobal pMac) vos_trace_setLevel(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR); #endif + MTRACE(limTraceInit(pMac)); //Initialize the configurations needed by PE if( eSIR_FAILURE == __limInitConfig(pMac)) @@ -1024,15 +1025,6 @@ tSirRetStatus peOpen(tpAniSirGlobal pMac, tMacOpenParameters *pMacOpenParam) PELOGE(limLog(pMac, LOGE, FL("pe lock init failed!"));) return eSIR_FAILURE; } - - /* - * peOpen is successful by now, so it is right time to initialize - * MTRACE for PE module. if LIM_TRACE_RECORD is not defined in build file - * then nothing will be logged for PE module. - */ -#ifdef LIM_TRACE_RECORD - MTRACE(limTraceInit(pMac)); -#endif return eSIR_SUCCESS; } @@ -1726,45 +1718,69 @@ limDetectChangeInApCapabilities(tpAniSirGlobal pMac, apNewCaps.capabilityInfo = limGetU16((tANI_U8 *) &pBeacon->capabilityInfo); newChannel = (tANI_U8) pBeacon->channelNumber; - if ( ( false == psessionEntry->limSentCapsChangeNtf ) && - ( ( ( limIsNullSsid(&pBeacon->ssId) ) || - ( ( !limIsNullSsid(&pBeacon->ssId) ) && - ( false == limCmpSSid(pMac, &pBeacon->ssId, psessionEntry) ) ) ) || - ( (SIR_MAC_GET_ESS(apNewCaps.capabilityInfo) != - SIR_MAC_GET_ESS(psessionEntry->limCurrentBssCaps) ) || - ( SIR_MAC_GET_PRIVACY(apNewCaps.capabilityInfo) != - SIR_MAC_GET_PRIVACY(psessionEntry->limCurrentBssCaps) ) || - ( SIR_MAC_GET_SHORT_PREAMBLE(apNewCaps.capabilityInfo) != - SIR_MAC_GET_SHORT_PREAMBLE(psessionEntry->limCurrentBssCaps) ) || - ( SIR_MAC_GET_QOS(apNewCaps.capabilityInfo) != - SIR_MAC_GET_QOS(psessionEntry->limCurrentBssCaps) ) || - ( newChannel != psessionEntry->currentOperChannel ) - ) ) ) + /* Some APs are not setting privacy bit when hidden ssid enabled. + * So LIM was keep on sending eSIR_SME_AP_CAPS_CHANGED event to SME */ + if (limIsNullSsid(&pBeacon->ssId) && + (SIR_MAC_GET_PRIVACY(apNewCaps.capabilityInfo) != + SIR_MAC_GET_PRIVACY(psessionEntry->limCurrentBssCaps)) + ) { - if( false == psessionEntry->fWaitForProbeRsp ) + /* If Hidden SSID and privacy bit is not matching with the current capability, + * then send unicast probe request to AP and take decision after + * receiving probe response */ + if (psessionEntry->fIgnoreCapsChange == true) { - /* If Beacon capabilities is not matching with the current capability, - * then send unicast probe request to AP and take decision after - * receiving probe response */ - if ( true == psessionEntry->fIgnoreCapsChange ) - { - limLog(pMac, LOGW, FL("Ignoring the Capability change as it is false alarm")); - return; - } - psessionEntry->fWaitForProbeRsp = true; - limLog(pMac, LOGW, FL("AP capabilities are not matching," - "sending directed probe request.. ")); - status = limSendProbeReqMgmtFrame(pMac, &psessionEntry->ssId, psessionEntry->bssId, - psessionEntry->currentOperChannel,psessionEntry->selfMacAddr, - psessionEntry->dot11mode, 0, NULL); - - if ( eSIR_SUCCESS != status ) + limLog(pMac, LOGW, FL("Ignoring the Capability change as it is false alarm")); + return; + } + psessionEntry->fWaitForProbeRsp = true; + limLog(pMac, LOGW, FL("Hidden SSID and privacy bit is not matching," + "sending directed probe request.. ")); + status = limSendProbeReqMgmtFrame(pMac, &psessionEntry->ssId, psessionEntry->bssId, + psessionEntry->currentOperChannel,psessionEntry->selfMacAddr, + psessionEntry->dot11mode, 0, NULL); + + if ( status != eSIR_SUCCESS) + { + limLog(pMac, LOGE, FL("send ProbeReq failed")); + } + + return; + } + else + { + /* The control will come here if the frame is beacon with broadcast ssid + * or probe response frame */ + if (psessionEntry->fWaitForProbeRsp == true) + { + if (((!limIsNullSsid(&pBeacon->ssId)) && + (limCmpSSid(pMac, &pBeacon->ssId, psessionEntry) == true)) && + (SIR_MAC_GET_PRIVACY(apNewCaps.capabilityInfo) == + SIR_MAC_GET_PRIVACY(psessionEntry->limCurrentBssCaps))) { - limLog(pMac, LOGE, FL("send ProbeReq failed")); - psessionEntry->fWaitForProbeRsp = false; + /* Only for probe response frames the control will come here */ + /* If beacon with broadcast ssid then fWaitForProbeRsp will be false, + the control wll not come here*/ + limLog(pMac, LOGW, FL("Privacy bit in probe response is" + "matching with the current setting," + "Ignoring subsequent privacy bit capability" + "mismatch")); + psessionEntry->fIgnoreCapsChange = true; + psessionEntry->fWaitForProbeRsp = false; } - return; } + } + + if ((psessionEntry->limSentCapsChangeNtf == false) && + (((!limIsNullSsid(&pBeacon->ssId)) && (limCmpSSid(pMac, &pBeacon->ssId, psessionEntry) == false)) || + ((SIR_MAC_GET_ESS(apNewCaps.capabilityInfo) != SIR_MAC_GET_ESS(psessionEntry->limCurrentBssCaps)) || + (SIR_MAC_GET_PRIVACY(apNewCaps.capabilityInfo) != SIR_MAC_GET_PRIVACY(psessionEntry->limCurrentBssCaps)) || + (SIR_MAC_GET_SHORT_PREAMBLE(apNewCaps.capabilityInfo) != SIR_MAC_GET_SHORT_PREAMBLE(psessionEntry->limCurrentBssCaps)) || + (SIR_MAC_GET_QOS(apNewCaps.capabilityInfo) != SIR_MAC_GET_QOS(psessionEntry->limCurrentBssCaps)) || + (newChannel != psessionEntry->currentOperChannel) + ))) + { + /** * BSS capabilities have changed. * Inform Roaming. @@ -1815,20 +1831,6 @@ limDetectChangeInApCapabilities(tpAniSirGlobal pMac, (tANI_U32 *) &apNewCaps, len, psessionEntry->smeSessionId); } - else if ( true == psessionEntry->fWaitForProbeRsp ) - { - /* Only for probe response frames and matching capabilities the control - * will come here. If beacon is with broadcast ssid then fWaitForProbeRsp - * will be false, the control will not come here*/ - - limLog(pMac, LOG1, FL("capabilities in probe response are" - "matching with the current setting," - "Ignoring subsequent capability" - "mismatch")); - psessionEntry->fIgnoreCapsChange = true; - psessionEntry->fWaitForProbeRsp = false; - } - } /*** limDetectChangeInApCapabilities() ***/ diff --git a/drivers/staging/prima/CORE/MAC/src/pe/lim/limAssocUtils.c b/drivers/staging/prima/CORE/MAC/src/pe/lim/limAssocUtils.c index f042c8de1a7..df82324e2a7 100644 --- a/drivers/staging/prima/CORE/MAC/src/pe/lim/limAssocUtils.c +++ b/drivers/staging/prima/CORE/MAC/src/pe/lim/limAssocUtils.c @@ -622,7 +622,7 @@ limCleanupRxPath(tpAniSirGlobal pMac, tpDphHashNode pStaDs,tpPESession psessionE PELOG2(limLog( pMac, LOG2, FL("**Initiate cleanup"));) limAbortBackgroundScan( pMac ); - psessionEntry->isCiscoVendorAP = FALSE; + if (pMac->lim.gLimAddtsSent) { MTRACE(macTrace(pMac, TRACE_CODE_TIMER_DEACTIVATE, psessionEntry->peSessionId, eLIM_ADDTS_RSP_TIMER)); @@ -1806,9 +1806,7 @@ limPopulatePeerRateSet(tpAniSirGlobal pMac, limLog(pMac, LOGE, FL("more than SIR_MAC_RATESET_EID_MAX rates\n")); goto error; } - if ( (psessionEntry->dot11mode == WNI_CFG_DOT11_MODE_11G) || - (psessionEntry->dot11mode == WNI_CFG_DOT11_MODE_11A) || - (psessionEntry->dot11mode == WNI_CFG_DOT11_MODE_11N) ) + if (psessionEntry->dot11mode == WNI_CFG_PHY_MODE_11G) { if (psessionEntry->extRateSet.numRates < SIR_MAC_RATESET_EID_MAX) @@ -2946,7 +2944,6 @@ limDeleteDphHashEntry(tpAniSirGlobal pMac, tSirMacAddr staAddr, tANI_U16 staId,t tUpdateBeaconParams beaconParams; tLimSystemRole systemRole; - vos_mem_zero(&beaconParams, sizeof(tUpdateBeaconParams)); beaconParams.paramChangeBitmap = 0; limDeactivateAndChangePerStaIdTimer(pMac, eLIM_CNF_WAIT_TIMER, staId); if (NULL == psessionEntry) @@ -3889,20 +3886,22 @@ limPrepareAndSendDelStaCnf(tpAniSirGlobal pMac, tpDphHashNode pStaDs, tSirResult sizeof(tSirMacAddr)); mlmStaContext = pStaDs->mlmStaContext; - if ((psessionEntry->limSystemRole == eLIM_AP_ROLE) || - (psessionEntry->limSystemRole == eLIM_BT_AMP_AP_ROLE)) + if(eSIR_SME_SUCCESS == statusCode) { - limReleasePeerIdx(pMac, pStaDs->assocId, psessionEntry); - } - limDeleteDphHashEntry(pMac, pStaDs->staAddr, pStaDs->assocId, psessionEntry); + if ((psessionEntry->limSystemRole == eLIM_AP_ROLE) || + (psessionEntry->limSystemRole == eLIM_BT_AMP_AP_ROLE)) + { + limReleasePeerIdx(pMac, pStaDs->assocId, psessionEntry); + } - if ( (psessionEntry->limSystemRole == eLIM_STA_ROLE)|| - (psessionEntry->limSystemRole == eLIM_BT_AMP_STA_ROLE)) + limDeleteDphHashEntry(pMac, pStaDs->staAddr, pStaDs->assocId,psessionEntry); + } + if ( (psessionEntry->limSystemRole == eLIM_STA_ROLE)||(psessionEntry->limSystemRole == eLIM_BT_AMP_STA_ROLE)) { psessionEntry->limMlmState = eLIM_MLM_IDLE_STATE; - MTRACE(macTrace(pMac, TRACE_CODE_MLM_STATE, - psessionEntry->peSessionId, psessionEntry->limMlmState)); + MTRACE(macTrace(pMac, TRACE_CODE_MLM_STATE, psessionEntry->peSessionId, psessionEntry->limMlmState)); } + limSendDelStaCnf(pMac, staDsAddr, staDsAssocId, mlmStaContext, statusCode,psessionEntry); } diff --git a/drivers/staging/prima/CORE/MAC/src/pe/lim/limFT.c b/drivers/staging/prima/CORE/MAC/src/pe/lim/limFT.c index 6bb7b5539d4..23645a7b801 100644 --- a/drivers/staging/prima/CORE/MAC/src/pe/lim/limFT.c +++ b/drivers/staging/prima/CORE/MAC/src/pe/lim/limFT.c @@ -1,30 +1,23 @@ /* - * Copyright (c) 2012-2014 The Linux Foundation. All rights reserved. - * - * Previously licensed under the ISC license by Qualcomm Atheros, Inc. - * - * - * Permission to use, copy, modify, and/or distribute this software for - * any purpose with or without fee is hereby granted, provided that the - * above copyright notice and this permission notice appear in all - * copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL - * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE - * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL - * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -/* - * This file was originally distributed by Qualcomm Atheros, Inc. - * under proprietary terms before Copyright ownership was assigned - * to the Linux Foundation. - */ - + * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved. + * + * Previously licensed under the ISC license by Qualcomm Atheros, Inc. + * + * + * Permission to use, copy, modify, and/or distribute this software for + * any purpose with or without fee is hereby granted, provided that the + * above copyright notice and this permission notice appear in all + * copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE + * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. +*/ #ifdef WLAN_FEATURE_VOWIFI_11R /**========================================================================= @@ -549,7 +542,7 @@ tSirRetStatus limFTPrepareAddBssReq( tpAniSirGlobal pMac, else { pAddBssParams->staContext.txChannelWidthSet = WNI_CFG_CHANNEL_BONDING_MODE_DISABLE; - } + } #ifdef WLAN_FEATURE_11AC if (pftSessionEntry->vhtCapability && pBeaconStruct->VHTCaps.present) { @@ -867,9 +860,6 @@ void limFTProcessPreAuthResult(tpAniSirGlobal pMac, eHalStatus status, tANI_U32 { tpPESession psessionEntry; - if (!pMac->ft.ftPEContext.pFTPreAuthReq) - return; - psessionEntry = (tpPESession)data; if (pMac->ft.ftPEContext.ftPreAuthStatus == eSIR_SUCCESS) diff --git a/drivers/staging/prima/CORE/MAC/src/pe/lim/limLogDump.c b/drivers/staging/prima/CORE/MAC/src/pe/lim/limLogDump.c index aa01b44dcdc..6dcda170fd7 100644 --- a/drivers/staging/prima/CORE/MAC/src/pe/lim/limLogDump.c +++ b/drivers/staging/prima/CORE/MAC/src/pe/lim/limLogDump.c @@ -1751,6 +1751,19 @@ dump_sch_beacon_trigger( tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, tANI return p; } + +static char* dump_lim_trace_cfg(tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3, tANI_U32 arg4, char *p) +{ + MTRACE(macTraceCfg(pMac, arg1, arg2, arg3, arg4);) + return p; +} + +static char* dump_lim_trace_dump(tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3, tANI_U32 arg4, char *p) +{ + MTRACE(macTraceDumpAll(pMac, (tANI_U8)arg1, (tANI_U8)arg2, arg3);) + return p; +} + static char* dump_lim_set_scan_in_powersave( tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3, tANI_U32 arg4, char *p) { p += log_sprintf( pMac,p, "logDump set scan in powersave to %d \n", arg1); @@ -2397,6 +2410,8 @@ static tDumpFuncEntry limMenuDumpTable[] = { * be moved to logDump.c */ {321, "PE:LIM: Set Log Level <VOS Module> <VOS Log Level>", dump_lim_update_log_level}, + {322, "PE.LIM: Enable/Disable PE Tracing", dump_lim_trace_cfg}, + {323, "PE.LIM: Trace Dump if enabled", dump_lim_trace_dump}, {331, "PE.LIM: Send finish scan to LIM", dump_lim_finishscan_send}, {332, "PE.LIM: force probe rsp send from LIM", dump_lim_prb_rsp_send}, {333, "PE.SCH: Trigger to generate a beacon", dump_sch_beacon_trigger}, diff --git a/drivers/staging/prima/CORE/MAC/src/pe/lim/limP2P.c b/drivers/staging/prima/CORE/MAC/src/pe/lim/limP2P.c index 1e60f538949..2cb75fea795 100644 --- a/drivers/staging/prima/CORE/MAC/src/pe/lim/limP2P.c +++ b/drivers/staging/prima/CORE/MAC/src/pe/lim/limP2P.c @@ -83,11 +83,7 @@ received Beacon/Prpbe Resp. */ #define MAX_TIME_TO_BE_ACTIVE_CHANNEL 9000 -#define REMAIN_ON_CHANNEL_UNKNOWN_ACTION_CATEGORY 0x20 -#define VENDOR_SPECIFIC_ELEMENT_ID 221 -#define REMAIN_ON_CHANNEL_MSG_SIZE 55 -#define REMAIN_ON_CHANNEL_FIRST_MARKER_FRAME 1 -#define REMAIN_ON_CHANNEL_SECOND_MARKER_FRAME 2 + void limRemainOnChnlSuspendLinkHdlr(tpAniSirGlobal pMac, eHalStatus status, tANI_U32 *data); @@ -103,179 +99,6 @@ extern tSirRetStatus limSetLinkState( static tSirRetStatus limCreateSessionForRemainOnChn(tpAniSirGlobal pMac, tPESession **ppP2pSession); eHalStatus limP2PActionCnf(tpAniSirGlobal pMac, tANI_U32 txCompleteSuccess); - -/*---------------------------------------------------------------------------- - * - * The function limSendRemainOnChannelDebugMarkerFrame, prepares Marker frame - * for Start and End of remain on channel with RemainOnChannelMsg as Vendor - * Specific information element of the frame. - * - *----------------------------------------------------------------------------*/ -tSirRetStatus limSendRemainOnChannelDebugMarkerFrame(tpAniSirGlobal pMac, - tANI_U8 *remainOnChannelMsg) -{ - tSirMacAddr magicMacAddr= {0x11, 0x22, 0x33, 0x44, 0x55, 0x66}; - tANI_U32 nBytes, nPayload; - tSirRetStatus nSirStatus; - tANI_U8 *pFrame; - void *pPacket; - eHalStatus halstatus; - tANI_U8 txFlag = 0; - publicVendorSpecific *pPublicVendorSpecific; - - pPublicVendorSpecific = vos_mem_malloc(sizeof(publicVendorSpecific)); - if( pPublicVendorSpecific == NULL ) - { - limLog( pMac, LOGE, - FL( "Unable to allocate memory for Vendor specific information" - " element" ) ); - return eSIR_MEM_ALLOC_FAILED; - } - // Assigning Action category code as unknown as this is debug marker frame - pPublicVendorSpecific->category = REMAIN_ON_CHANNEL_UNKNOWN_ACTION_CATEGORY; - pPublicVendorSpecific->elementid = VENDOR_SPECIFIC_ELEMENT_ID; - pPublicVendorSpecific->length = strlen(remainOnChannelMsg); - - nPayload = sizeof(publicVendorSpecific) + pPublicVendorSpecific->length; - - nBytes = nPayload + sizeof( tSirMacMgmtHdr ); - - halstatus = palPktAlloc( pMac->hHdd, HAL_TXRX_FRM_802_11_MGMT, - ( tANI_U16 )nBytes, ( void** ) &pFrame, - ( void** ) &pPacket ); - if ( ! HAL_STATUS_SUCCESS ( halstatus ) ) - { - limLog( pMac, LOGE, FL("Failed to allocate %d bytes for a Remain" - " on channel action frame."), nBytes ); - nSirStatus = eSIR_MEM_ALLOC_FAILED; - goto end; - } - vos_mem_zero( pFrame, nBytes ); - - // Populate frame with MAC header - nSirStatus = limPopulateMacHeader( pMac, pFrame, SIR_MAC_MGMT_FRAME, - SIR_MAC_MGMT_ACTION, magicMacAddr, - pMac->lim.gSelfMacAddr); - if ( eSIR_SUCCESS != nSirStatus ) - { - limLog( pMac, LOGE, FL("Failed to populate the buffer descriptor for a" - " Action frame for remain on channel.") ); - palPktFree( pMac->hHdd, HAL_TXRX_FRM_802_11_MGMT, - ( void* ) pFrame, ( void* ) pPacket ); - goto end; - } - - // Copy Public Vendor specific fields to frame's information element - vos_mem_copy( (pFrame + (sizeof( tSirMacMgmtHdr ))), - pPublicVendorSpecific, sizeof(publicVendorSpecific) ); - // Copy Remain On channel message to Vendor Specific information field - vos_mem_copy( (pFrame + (nBytes - pPublicVendorSpecific->length)), - remainOnChannelMsg, pPublicVendorSpecific->length ); - - halstatus = halTxFrame( pMac, pPacket, - ( tANI_U16 ) sizeof(tSirMacMgmtHdr) + nPayload, - HAL_TXRX_FRM_802_11_MGMT, - ANI_TXDIR_TODS, - 7,//SMAC_SWBD_TX_TID_MGMT_HIGH, - limTxComplete, pFrame, txFlag ); - if ( ! HAL_STATUS_SUCCESS ( halstatus ) ) - { - limLog( pMac, LOGE, FL("could not send marker frame for" - " remain on channel!" )); - //Pkt will be freed up by the callback - nSirStatus = eSIR_FAILURE; - goto end; - } - - nSirStatus = eSIR_SUCCESS; - -end: - vos_mem_free( pPublicVendorSpecific ); - return nSirStatus; -} - -/*------------------------------------------------------------------------- - * - * This function forms message for start of remain on channel with channel - * number, duration and sequence number. This message is added as data of - * vendor specific information element of Debug Marker Frame. Message will - * be in form "START-REMAIN-ON-CHANNEL<first/second-frame>-CHN=<channel>" - * "-FOR-DUR=<duraion>-SEQ=<sequence-num>" - * - *-------------------------------------------------------------------------*/ -eHalStatus limPrepareAndSendStartRemainOnChannelMsg(tpAniSirGlobal pMac, - tSirRemainOnChnReq *MsgRemainonChannel, tANI_U8 id) -{ - tANI_U8 *startRemainOnChannelMsg; - eHalStatus status = eHAL_STATUS_SUCCESS; - - startRemainOnChannelMsg = vos_mem_malloc( REMAIN_ON_CHANNEL_MSG_SIZE ); - if( NULL == startRemainOnChannelMsg ) - { - limLog(pMac, LOGE, - FL("Unable to allocate memory for remain on channel message")); - return eHAL_STATUS_FAILURE; - } - - snprintf(startRemainOnChannelMsg, REMAIN_ON_CHANNEL_MSG_SIZE, - "START-REMAIN-ON-CHANNEL%d-CHN=%d-FOR-DUR=%ld-SEQ=%ld", - id, MsgRemainonChannel->chnNum, MsgRemainonChannel->duration, - pMac->lim.remOnChnSeqNum); - - if( eSIR_FAILURE == limSendRemainOnChannelDebugMarkerFrame(pMac, - startRemainOnChannelMsg) ) - { - limLog( pMac, LOGE, - "%s: Could not send %d debug marker frame at start" - " of remain on channel", __func__, id); - status = eHAL_STATUS_FAILURE; - } - vos_mem_free( startRemainOnChannelMsg ); - - return status; - -} - -/*---------------------------------------------------------------------------- - * - * This function forms message for cancel of remain on channel. This message - * is added as data of Vendor Specific information element of debug marker - * frame.Message will be in form "CANCEL-REMAIN-ON-CHANNEL<first/second-frame>" - * "-SEQ=<sequence-num>" - * - *----------------------------------------------------------------------------*/ -eHalStatus limPrepareAndSendCancelRemainOnChannelMsg(tpAniSirGlobal pMac, - tANI_U8 id) -{ - tANI_U8 *cancelRemainOnChannelMsg; - eHalStatus status = eHAL_STATUS_SUCCESS; - - cancelRemainOnChannelMsg = vos_mem_malloc( REMAIN_ON_CHANNEL_MSG_SIZE ); - if( NULL == cancelRemainOnChannelMsg ) - { - limLog( pMac, LOGE, - FL( "Unable to allocate memory for end of" - " remain on channel message" )); - return eHAL_STATUS_FAILURE; - } - - snprintf(cancelRemainOnChannelMsg, REMAIN_ON_CHANNEL_MSG_SIZE, - "CANCEL-REMAIN-ON-CHANNEL%d-SEQ=%ld", - id, pMac->lim.remOnChnSeqNum); - if( eSIR_FAILURE == limSendRemainOnChannelDebugMarkerFrame(pMac, - cancelRemainOnChannelMsg) ) - { - limLog( pMac, LOGE, - "%s: Could not send %d marker frame to debug cancel" - " remain on channel", __func__, id); - status = eHAL_STATUS_FAILURE; - } - vos_mem_free( cancelRemainOnChannelMsg ); - - return status; - -} - /*------------------------------------------------------------------ * * Below function is callback function, it is called when @@ -285,26 +108,11 @@ eHalStatus limPrepareAndSendCancelRemainOnChannelMsg(tpAniSirGlobal pMac, *------------------------------------------------------------------*/ void limSetLinkStateP2PCallback(tpAniSirGlobal pMac, void *callbackArg) { - tSirRemainOnChnReq *MsgRemainonChannel = pMac->lim.gpLimRemainOnChanReq; - //Send Ready on channel indication to SME if(pMac->lim.gpLimRemainOnChanReq) { limSendSmeRsp(pMac, eWNI_SME_REMAIN_ON_CHN_RDY_IND, eHAL_STATUS_SUCCESS, pMac->lim.gpLimRemainOnChanReq->sessionId, 0); - if(pMac->lim.gDebugP2pRemainOnChannel) - { - if( eHAL_STATUS_SUCCESS == limPrepareAndSendStartRemainOnChannelMsg( - pMac, - MsgRemainonChannel, - REMAIN_ON_CHANNEL_SECOND_MARKER_FRAME) ) - { - limLog( pMac, LOG1, - "%s: Successfully sent 2nd Marker frame " - "seq num = %ld on start ROC", __func__, - pMac->lim.remOnChnSeqNum); - } - } } else { @@ -569,29 +377,8 @@ void limRemainOnChnlSetLinkStat(tpAniSirGlobal pMac, eHalStatus status, goto error; } - if (eSIR_SUCCESS != - wlan_cfgGetInt(pMac, WNI_CFG_DEBUG_P2P_REMAIN_ON_CHANNEL, - (tANI_U32 *)&pMac->lim.gDebugP2pRemainOnChannel)) - { - limLog( pMac, LOGE, - "%s: Couldn't get WNI_CFG_DEBUG_P2P_REMAIN_ON_CHANNEL value", - __func__); - pMac->lim.gDebugP2pRemainOnChannel = 0; - } - if (pMac->lim.gDebugP2pRemainOnChannel) - { - pMac->lim.remOnChnSeqNum++; - if( eHAL_STATUS_SUCCESS == limPrepareAndSendStartRemainOnChannelMsg( - pMac, MsgRemainonChannel, - REMAIN_ON_CHANNEL_FIRST_MARKER_FRAME) ) - { - limLog( pMac, LOG1, - "%s: Successfully sent 1st marker frame with seq num = %ld" - " on start ROC", __func__, pMac->lim.remOnChnSeqNum); - } - } if ((limSetLinkState(pMac, eSIR_LINK_LISTEN_STATE,nullBssid, - pMac->lim.gSelfMacAddr, limSetLinkStateP2PCallback, + pMac->lim.gSelfMacAddr, limSetLinkStateP2PCallback, NULL)) != eSIR_SUCCESS) { limLog( pMac, LOGE, "Unable to change link state"); @@ -677,29 +464,6 @@ void limConvertActiveChannelToPassiveChannel(tpAniSirGlobal pMac ) /*------------------------------------------------------------------ * - * limSetLinkState callback function. - * - *------------------------------------------------------------------*/ -void limSetlinkStateCallback(tpAniSirGlobal pMac, void *callbackArg) -{ - if(pMac->lim.gDebugP2pRemainOnChannel) - { - if (eHAL_STATUS_SUCCESS == limPrepareAndSendCancelRemainOnChannelMsg( - pMac, - REMAIN_ON_CHANNEL_SECOND_MARKER_FRAME)) - { - limLog( pMac, LOG1, - "%s: Successfully sent 2nd marker frame with seq num=%ld" - " on cancel ROC", __func__, pMac->lim.remOnChnSeqNum); - } - } - - return; - -} - -/*------------------------------------------------------------------ - * * limchannelchange callback, on success channel change, set the * link_state to LISTEN * @@ -727,21 +491,9 @@ void limProcessRemainOnChnTimeout(tpAniSirGlobal pMac) return; } - if(pMac->lim.gDebugP2pRemainOnChannel) - { - if (eHAL_STATUS_SUCCESS == limPrepareAndSendCancelRemainOnChannelMsg( - pMac, - REMAIN_ON_CHANNEL_FIRST_MARKER_FRAME)) - { - limLog( pMac, LOG1, - "%s: Successfully sent 1st marker frame with seqnum = %ld" - " on cancel ROC", __func__, pMac->lim.remOnChnSeqNum); - } - } - /* get the previous valid LINK state */ if (limSetLinkState(pMac, eSIR_LINK_IDLE_STATE, nullBssid, - pMac->lim.gSelfMacAddr, limSetlinkStateCallback, NULL) != eSIR_SUCCESS) + pMac->lim.gSelfMacAddr, NULL, NULL) != eSIR_SUCCESS) { limLog( pMac, LOGE, "Unable to change link state"); return; @@ -959,11 +711,6 @@ void limSendSmeMgmtFrameInd( limLog( pMac, LOGE, FL("Unable to active the gLimRemainOnChannelTimer")); } } - else - { - if(frameType == SIR_MAC_MGMT_ACTION) - limLog( pMac, LOGE, FL("Rx: NO REMAIN ON CHANNEL and recd action frame ")); - } limSysProcessMmhMsgApi(pMac, &mmhMsg, ePROT); return; diff --git a/drivers/staging/prima/CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c b/drivers/staging/prima/CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c index b6528778bf8..36998e360df 100644 --- a/drivers/staging/prima/CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c +++ b/drivers/staging/prima/CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c @@ -651,8 +651,8 @@ limProcessAssocReqFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, && psessionEntry->pLimStartBssReq->rsnIE.length) { limLog(pMac, LOGE, - FL("RSN enabled auth, Re/Assoc req from STA: "MAC_ADDRESS_STR), - MAC_ADDR_ARRAY(pHdr->sa)); + FL("AP supports RSN enabled authentication")); + if(pAssocReq->rsnPresent) { if(pAssocReq->rsn.length) @@ -859,46 +859,35 @@ limProcessAssocReqFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, goto error; } // if (pStaDs->mlmStaContext.mlmState != eLIM_MLM_LINK_ESTABLISHED_STATE) - /* STA sent association Request frame while already in - * 'associated' state and no change in the capability - * so drop the frame */ - if ((VOS_TRUE == vos_mem_compare(&pStaDs->mlmStaContext.capabilityInfo, - &pAssocReq->capabilityInfo, - sizeof(tSirMacCapabilityInfo)))&& - (subType == LIM_ASSOC)) - { - limLog(pMac, LOGE, FL(" Received Assoc req in state %X STAid=%d"), - pStaDs->mlmStaContext.mlmState,peerIdx); - goto error; - } - else - { - /** - * STA sent Re/association Request frame while already in + /** + * STA sent Re/Association Request frame while already in * 'associated' state. Update STA capabilities and * send Association response frame with same AID */ - pStaDs->mlmStaContext.capabilityInfo = pAssocReq->capabilityInfo; - if (pStaPreAuthContext && - (pStaPreAuthContext->mlmState == - eLIM_MLM_AUTHENTICATED_STATE)) - { - /// STA has triggered pre-auth again - authType = pStaPreAuthContext->authType; - limDeletePreAuthNode(pMac, pHdr->sa); - } - else - authType = pStaDs->mlmStaContext.authType; - updateContext = true; - if (dphInitStaState(pMac, pHdr->sa, peerIdx, true, &psessionEntry->dph.dphHashTable) - == NULL) - { - limLog(pMac, LOGE, FL("could not Init STAid=%d"), peerIdx); - goto error; - } + pStaDs->mlmStaContext.capabilityInfo = pAssocReq->capabilityInfo; + + if (pStaPreAuthContext && + (pStaPreAuthContext->mlmState == + eLIM_MLM_AUTHENTICATED_STATE)) + { + /// STA has triggered pre-auth again + authType = pStaPreAuthContext->authType; + limDeletePreAuthNode(pMac, pHdr->sa); } - goto sendIndToSme; + else + authType = pStaDs->mlmStaContext.authType; + + updateContext = true; + + if (dphInitStaState(pMac, pHdr->sa, peerIdx, true, &psessionEntry->dph.dphHashTable) == NULL) + { + limLog(pMac, LOGE, FL("could not Init STAid=%d"), peerIdx); + goto error; + } + + + goto sendIndToSme; } // end if (lookup for STA in perStaDs fails) diff --git a/drivers/staging/prima/CORE/MAC/src/pe/lim/limProcessBeaconFrame.c b/drivers/staging/prima/CORE/MAC/src/pe/lim/limProcessBeaconFrame.c index 230ddcc70ca..bebfa11b842 100644 --- a/drivers/staging/prima/CORE/MAC/src/pe/lim/limProcessBeaconFrame.c +++ b/drivers/staging/prima/CORE/MAC/src/pe/lim/limProcessBeaconFrame.c @@ -164,12 +164,7 @@ limProcessBeaconFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo,tpPESession ps limCheckAndAddBssDescription(pMac, pBeacon, pRxPacketInfo, ((pMac->lim.gLimHalScanState == eLIM_HAL_SCANNING_STATE) ? eANI_BOOLEAN_TRUE : eANI_BOOLEAN_FALSE), eANI_BOOLEAN_FALSE); - } - /* Calling dfsChannelList which will convert DFS channel - * to Active channel for x secs if this channel is DFS channel */ - limSetDFSChannelList(pMac, pBeacon->channelNumber, - &pMac->lim.dfschannelList); } else if (pMac->lim.gLimMlmState == eLIM_MLM_LEARN_STATE) { @@ -292,10 +287,6 @@ limProcessBeaconFrameNoSession(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo) { limCheckAndAddBssDescription(pMac, pBeacon, pRxPacketInfo, eANI_BOOLEAN_TRUE, eANI_BOOLEAN_FALSE); } - /* Calling dfsChannelList which will convert DFS channel - * to Active channel for x secs if this channel is DFS channel */ - limSetDFSChannelList(pMac, pBeacon->channelNumber, - &pMac->lim.dfschannelList); } else if (pMac->lim.gLimMlmState == eLIM_MLM_LEARN_STATE) { diff --git a/drivers/staging/prima/CORE/MAC/src/pe/lim/limProcessCfgUpdates.c b/drivers/staging/prima/CORE/MAC/src/pe/lim/limProcessCfgUpdates.c index b1c969367b0..6ae8ee53b82 100644 --- a/drivers/staging/prima/CORE/MAC/src/pe/lim/limProcessCfgUpdates.c +++ b/drivers/staging/prima/CORE/MAC/src/pe/lim/limProcessCfgUpdates.c @@ -741,13 +741,9 @@ limUpdateConfig(tpAniSirGlobal pMac,tpPESession psessionEntry) limLog(pMac, LOGP, FL("cfg get short preamble failed")); psessionEntry->beaconParams.fShortPreamble = (val) ? 1 : 0; - /* In STA case this parameter is filled during the join request */ - if (psessionEntry->limSystemRole == eLIM_AP_ROLE) - { - if (wlan_cfgGetInt(pMac, WNI_CFG_WME_ENABLED, &val) != eSIR_SUCCESS) - limLog(pMac, LOGP, FL("cfg get wme enabled failed")); - psessionEntry->limWmeEnabled = (val) ? 1 : 0; - } + if (wlan_cfgGetInt(pMac, WNI_CFG_WME_ENABLED, &val) != eSIR_SUCCESS) + limLog(pMac, LOGP, FL("cfg get wme enabled failed")); + psessionEntry->limWmeEnabled = (val) ? 1 : 0; if (wlan_cfgGetInt(pMac, WNI_CFG_WSM_ENABLED, &val) != eSIR_SUCCESS) limLog(pMac, LOGP, FL("cfg get wsm enabled failed")); @@ -758,13 +754,11 @@ limUpdateConfig(tpAniSirGlobal pMac,tpPESession psessionEntry) PELOGE(limLog(pMac, LOGE, FL("Can't enable WSM without WME"));) psessionEntry->limWsmEnabled = 0; } - /* In STA , this parameter is filled during the join request */ - if (psessionEntry->limSystemRole== eLIM_AP_ROLE) - { - if (wlan_cfgGetInt(pMac, WNI_CFG_QOS_ENABLED, &val) != eSIR_SUCCESS) - limLog(pMac, LOGP, FL("cfg get qos enabled failed")); - psessionEntry->limQosEnabled = (val) ? 1 : 0; - } + + if (wlan_cfgGetInt(pMac, WNI_CFG_QOS_ENABLED, &val) != eSIR_SUCCESS) + limLog(pMac, LOGP, FL("cfg get qos enabled failed")); + psessionEntry->limQosEnabled = (val) ? 1 : 0; + if (wlan_cfgGetInt(pMac, WNI_CFG_HCF_ENABLED, &val) != eSIR_SUCCESS) limLog(pMac, LOGP, FL("cfg get hcf enabled failed")); psessionEntry->limHcfEnabled = (val) ? 1 : 0; diff --git a/drivers/staging/prima/CORE/MAC/src/pe/lim/limProcessDeauthFrame.c b/drivers/staging/prima/CORE/MAC/src/pe/lim/limProcessDeauthFrame.c index 6ea38e9fe68..776b36ee831 100644 --- a/drivers/staging/prima/CORE/MAC/src/pe/lim/limProcessDeauthFrame.c +++ b/drivers/staging/prima/CORE/MAC/src/pe/lim/limProcessDeauthFrame.c @@ -340,14 +340,6 @@ limProcessDeauthFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tpPESession p return; - case eLIM_MLM_WT_ADD_STA_RSP_STATE: - psessionEntry->fDeauthReceived = true; - PELOGW(limLog(pMac, LOGW, - FL("Received Deauth frame with Reason Code %d from Peer"), - reasonCode); - limPrintMacAddr(pMac, pHdr->sa, LOGW);) - return ; - case eLIM_MLM_IDLE_STATE: case eLIM_MLM_LINK_ESTABLISHED_STATE: #ifdef FEATURE_WLAN_TDLS diff --git a/drivers/staging/prima/CORE/MAC/src/pe/lim/limProcessMessageQueue.c b/drivers/staging/prima/CORE/MAC/src/pe/lim/limProcessMessageQueue.c index d3eed5d0407..050cf8c7def 100644 --- a/drivers/staging/prima/CORE/MAC/src/pe/lim/limProcessMessageQueue.c +++ b/drivers/staging/prima/CORE/MAC/src/pe/lim/limProcessMessageQueue.c @@ -90,9 +90,6 @@ #include "vos_packet.h" #include "vos_memory.h" -/* This value corresponds to 500 ms */ -#define MAX_PROBEREQ_TIME 5000 - void limLogSessionStates(tpAniSirGlobal pMac); /** ------------------------------------------------------------- @@ -549,14 +546,9 @@ limHandle80211Frames(tpAniSirGlobal pMac, tpSirMsgQ limMsg, tANI_U8 *pDeferMsg) fcOffset = (v_U8_t)WDA_GET_RX_MPDU_HEADER_OFFSET(pRxPacketInfo); fc = pHdr->fc; -#ifdef WLAN_DUMP_MGMTFRAMES - limLog( pMac, LOGE, FL("ProtVersion %d, Type %d, Subtype %d rateIndex=%d"), - fc.protVer, fc.type, fc.subType, - WDA_GET_RX_MAC_RATE_IDX(pRxPacketInfo)); - VOS_TRACE_HEX_DUMP(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, pHdr, - WDA_GET_RX_MPDU_HEADER_LEN(pRxPacketInfo)); -#endif - + limLog( pMac, LOG4, FL("ProtVersion %d, Type %d, Subtype %d rateIndex=%d"), + fc.protVer, fc.type, fc.subType, WDA_GET_RX_MAC_RATE_IDX(pRxPacketInfo)); + #ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD if ( WDA_GET_ROAMCANDIDATEIND(pRxPacketInfo)) { @@ -999,33 +991,6 @@ void limProcessOemDataRsp(tpAniSirGlobal pMac, tANI_U32* body) #endif -static tANI_BOOLEAN limAgeOutProbeReq( tpAniSirGlobal pMac, tpSirMsgQ limMsg, - vos_pkt_t *pVosPkt ) -{ - tANI_U8 *pRxPacketInfo = NULL; - tSirMacFrameCtl fc; - tpSirMacMgmtHdr pHdr=NULL; - tANI_BOOLEAN match = VOS_FALSE; - - limGetBDfromRxPacket(pMac, limMsg->bodyptr, (tANI_U32 **)&pRxPacketInfo); - pHdr = WDA_GET_RX_MAC_HEADER(pRxPacketInfo); - fc = pHdr->fc; - if ( fc.subType == SIR_MAC_MGMT_PROBE_REQ ) - { - if( vos_timer_get_system_ticks() - pVosPkt->timestamp >= MAX_PROBEREQ_TIME ) - { - // drop packet - limLog(pMac, LOGE, - FL("Dropping Aged Out probe requests. Peer MAC is "MAC_ADDRESS_STR), - MAC_ADDR_ARRAY(pHdr->sa)); - - vos_pkt_return_packet(pVosPkt); - match = VOS_TRUE; - } - } - return match; -} - /** * limProcessMessages @@ -1112,33 +1077,27 @@ limProcessMessages(tpAniSirGlobal pMac, tpSirMsgQ limMsg) case WDA_INIT_SCAN_RSP: limProcessInitScanRsp(pMac, limMsg->bodyptr); - limMsg->bodyptr = NULL; break; case WDA_START_SCAN_RSP: limProcessStartScanRsp(pMac, limMsg->bodyptr); - limMsg->bodyptr = NULL; break; case WDA_END_SCAN_RSP: limProcessEndScanRsp(pMac, limMsg->bodyptr); - limMsg->bodyptr = NULL; break; case WDA_FINISH_SCAN_RSP: limProcessFinishScanRsp(pMac, limMsg->bodyptr); - limMsg->bodyptr = NULL; break; #ifdef FEATURE_OEM_DATA_SUPPORT case WDA_START_OEM_DATA_RSP: limProcessOemDataRsp(pMac, limMsg->bodyptr); - limMsg->bodyptr = NULL; break; #endif case WDA_SWITCH_CHANNEL_RSP: limProcessSwitchChannelRsp(pMac, limMsg->bodyptr); - limMsg->bodyptr = NULL; break; #ifdef ANI_SIR_IBSS_PEER_CACHING @@ -1179,18 +1138,6 @@ limProcessMessages(tpAniSirGlobal pMac, tpSirMsgQ limMsg) break; } - - /* - * putting a check for age out probe request frames - * such that any probe req more than 0.5 sec old can directly - * be dropped. With this, there won't be blocking of MC thread. - */ - - if( limAgeOutProbeReq ( pMac, &limMsgNew, pVosPkt )) - { - break; - } - #ifdef FEATURE_WLAN_TDLS_INTERNAL /* * TDLS frames comes as translated frames as well as @@ -1209,7 +1156,6 @@ limProcessMessages(tpAniSirGlobal pMac, tpSirMsgQ limMsg) } else #endif - limHandle80211Frames(pMac, &limMsgNew, &deferMsg); if ( deferMsg == true ) @@ -1865,7 +1811,6 @@ limProcessMessages(tpAniSirGlobal pMac, tpSirMsgQ limMsg) /*Free message body pointer*/ vos_mem_free((v_VOID_t *)(limMsg->bodyptr)); - limMsg->bodyptr = NULL; break; } @@ -1891,7 +1836,6 @@ limProcessMessages(tpAniSirGlobal pMac, tpSirMsgQ limMsg) linkStateParams->callback( pMac, linkStateParams->callbackArg ); } vos_mem_free((v_VOID_t *)(limMsg->bodyptr)); - limMsg->bodyptr = NULL; break; #ifdef WLAN_FEATURE_PACKET_FILTERING @@ -2051,7 +1995,6 @@ void limProcessNormalHddMsg(tpAniSirGlobal pMac, tSirMsgQ *pLimMsg, tANI_U8 fRsp limPrintMsgName(pMac, LOGE, pLimMsg->type); // Release body palFreeMemory( pMac->hHdd, (tANI_U8 *) pLimMsg->bodyptr); - pLimMsg->bodyptr = NULL; } } else @@ -2072,7 +2015,6 @@ void limProcessNormalHddMsg(tpAniSirGlobal pMac, tSirMsgQ *pLimMsg, tANI_U8 fRsp // Release body // limProcessSmeReqMessage consumed the buffer. We can free it. palFreeMemory( pMac->hHdd, (tANI_U8 *) pLimMsg->bodyptr); - pLimMsg->bodyptr = NULL; } } } diff --git a/drivers/staging/prima/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c b/drivers/staging/prima/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c index d09add19ff5..f015dd271a0 100644 --- a/drivers/staging/prima/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c +++ b/drivers/staging/prima/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2014, The Linux Foundation. All rights reserved. + * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -331,24 +331,7 @@ limResumeLink(tpAniSirGlobal pMac, SUSPEND_RESUME_LINK_CALLBACK callback, tANI_U pMac->lim.gpLimResumeCallback = callback; pMac->lim.gpLimResumeData = data; - - /* eLIM_HAL_IDLE_SCAN_STATE state indicate limSendHalInitScanReq failed. - * In case limSendHalInitScanReq is success, Scanstate would be - * eLIM_HAL_SUSPEND_LINK_STATE - */ - if( eLIM_HAL_IDLE_SCAN_STATE != pMac->lim.gLimHalScanState ) - { - limSendHalFinishScanReq(pMac, eLIM_HAL_RESUME_LINK_WAIT_STATE ); - } - else - { - limLog(pMac, LOGW, FL("Init Scan failed, we will not call finish scan." - " calling the callback with failure status")); - pMac->lim.gpLimResumeCallback( pMac, eSIR_FAILURE, pMac->lim.gpLimResumeData); - pMac->lim.gpLimResumeCallback = NULL; - pMac->lim.gpLimResumeData = NULL; - pMac->lim.gLimSystemInScanLearnMode = 0; - } + limSendHalFinishScanReq(pMac, eLIM_HAL_RESUME_LINK_WAIT_STATE ); if(limIsInMCC(pMac)) { @@ -2885,27 +2868,10 @@ limProcessMlmDisassocReqNtf(tpAniSirGlobal pMac, eHalStatus suspendStatus, tANI_ */ pStaDs->mlmStaContext.mlmState = eLIM_MLM_WT_DEL_STA_RSP_STATE; - /* If the reason for disassociation is inactivity of STA, then - dont wait for acknowledgement */ - if ((pMlmDisassocReq->reasonCode == eSIR_MAC_DISASSOC_DUE_TO_INACTIVITY_REASON) && - (psessionEntry->limSystemRole == eLIM_AP_ROLE)) - { - - limSendDisassocMgmtFrame(pMac, - pMlmDisassocReq->reasonCode, - pMlmDisassocReq->peerMacAddr, - psessionEntry, FALSE); - - /* Send Disassoc CNF and receive path cleanup */ - limSendDisassocCnf(pMac); - } - else - { - limSendDisassocMgmtFrame(pMac, + limSendDisassocMgmtFrame(pMac, pMlmDisassocReq->reasonCode, pMlmDisassocReq->peerMacAddr, psessionEntry, TRUE); - } } else { @@ -3273,16 +3239,6 @@ limProcessMlmDeauthReqNtf(tpAniSirGlobal pMac, eHalStatus suspendStatus, tANI_U3 pStaDs->mlmStaContext.cleanupTrigger = pMlmDeauthReq->deauthTrigger; pMac->lim.limDisassocDeauthCnfReq.pMlmDeauthReq = pMlmDeauthReq; - - /* Set state to mlm State to eLIM_MLM_WT_DEL_STA_RSP_STATE - * This is to address the issue of race condition between - * disconnect request from the HDD and disassoc from - * inactivity timer. This will make sure that we will not - * process disassoc if deauth is in progress for the station - * and thus mlmStaContext.cleanupTrigger will not be overwritten. - */ - pStaDs->mlmStaContext.mlmState = eLIM_MLM_WT_DEL_STA_RSP_STATE; - /// Send Deauthentication frame to peer entity limSendDeauthMgmtFrame(pMac, pMlmDeauthReq->reasonCode, pMlmDeauthReq->peerMacAddr, @@ -3733,10 +3689,8 @@ limProcessMinChannelTimeout(tpAniSirGlobal pMac) } #endif - /*do not process if we are in finish scan wait state i.e. - scan is aborted or finished*/ - if (pMac->lim.gLimMlmState == eLIM_MLM_WT_PROBE_RESP_STATE && - pMac->lim.gLimHalScanState != eLIM_HAL_FINISH_SCAN_WAIT_STATE) + + if (pMac->lim.gLimMlmState == eLIM_MLM_WT_PROBE_RESP_STATE) { PELOG1(limLog(pMac, LOG1, FL("Scanning : min channel timeout occurred"));) @@ -3773,8 +3727,8 @@ limProcessMinChannelTimeout(tpAniSirGlobal pMac) * Log error. */ limLog(pMac, LOGW, - FL("received unexpected MIN channel timeout in mlme state %X and hal scan State %X"), - pMac->lim.gLimMlmState,pMac->lim.gLimHalScanState); + FL("received unexpected MIN channel timeout in state %X"), + pMac->lim.gLimMlmState); limPrintMlmState(pMac, LOGE, pMac->lim.gLimMlmState); } } /*** limProcessMinChannelTimeout() ***/ @@ -3803,11 +3757,9 @@ limProcessMaxChannelTimeout(tpAniSirGlobal pMac) { tANI_U8 channelNum; - /*do not process if we are in finish scan wait state i.e. - scan is aborted or finished*/ - if ((pMac->lim.gLimMlmState == eLIM_MLM_WT_PROBE_RESP_STATE || - pMac->lim.gLimMlmState == eLIM_MLM_PASSIVE_SCAN_STATE) && - pMac->lim.gLimHalScanState != eLIM_HAL_FINISH_SCAN_WAIT_STATE) + + if (pMac->lim.gLimMlmState == eLIM_MLM_WT_PROBE_RESP_STATE || + pMac->lim.gLimMlmState == eLIM_MLM_PASSIVE_SCAN_STATE) { PELOG1(limLog(pMac, LOG1, FL("Scanning : Max channel timed out"));) /** @@ -3843,8 +3795,8 @@ limProcessMaxChannelTimeout(tpAniSirGlobal pMac) * Log error. */ limLog(pMac, LOGW, - FL("received unexpected MAX channel timeout in mlme state %X and hal scan state %X"), - pMac->lim.gLimMlmState, pMac->lim.gLimHalScanState); + FL("received unexpected MAX channel timeout in state %X"), + pMac->lim.gLimMlmState); limPrintMlmState(pMac, LOGW, pMac->lim.gLimMlmState); } } /*** limProcessMaxChannelTimeout() ***/ @@ -3994,10 +3946,7 @@ limProcessJoinFailureTimeout(tpAniSirGlobal pMac) /** * Issue MLM join confirm with timeout reason code */ - PELOGE(limLog(pMac, LOGE, FL(" In state eLIM_MLM_WT_JOIN_BEACON_STATE."));) - PELOGE(limLog(pMac, LOGE, FL(" Join Failure Timeout occurred for session %d with BSS "), - psessionEntry->peSessionId); - limPrintMacAddr(pMac, psessionEntry->bssId, LOGE);) + PELOGE(limLog(pMac, LOGE, FL(" Join Failure Timeout occurred."));) mlmJoinCnf.resultCode = eSIR_SME_JOIN_TIMEOUT_RESULT_CODE; mlmJoinCnf.protStatusCode = eSIR_MAC_UNSPEC_FAILURE_STATUS; @@ -4062,8 +4011,7 @@ static void limProcessPeriodicJoinProbeReqTimer(tpAniSirGlobal pMac) if((psessionEntry = peFindSessionBySessionId(pMac, pMac->lim.limTimers.gLimPeriodicJoinProbeReqTimer.sessionId))== NULL) { - limLog(pMac, LOGE,FL("session does not exist for given SessionId : %d"), - pMac->lim.limTimers.gLimPeriodicJoinProbeReqTimer.sessionId); + limLog(pMac, LOGE,FL("session does not exist for given SessionId")); return; } diff --git a/drivers/staging/prima/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c b/drivers/staging/prima/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c index d24a7b83969..d885f02e626 100644 --- a/drivers/staging/prima/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c +++ b/drivers/staging/prima/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2014, The Linux Foundation. All rights reserved. + * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -139,7 +139,6 @@ limProcessMlmRspMessages(tpAniSirGlobal pMac, tANI_U32 msgType, tANI_U32 *pMsgBu #ifdef FEATURE_OEM_DATA_SUPPORT case LIM_MLM_OEM_DATA_CNF: limProcessMlmOemDataReqCnf(pMac, pMsgBuf); - pMsgBuf = NULL; break; #endif @@ -192,11 +191,9 @@ limProcessMlmRspMessages(tpAniSirGlobal pMac, tANI_U32 msgType, tANI_U32 *pMsgBu break; case LIM_MLM_ADDBA_CNF: limProcessMlmAddBACnf( pMac, pMsgBuf ); - pMsgBuf = NULL; break; case LIM_MLM_DELBA_CNF: limProcessMlmDelBACnf( pMac, pMsgBuf ); - pMsgBuf = NULL; break; default: break; @@ -905,7 +902,7 @@ limProcessMlmReassocCnf(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) psessionEntry->pLimReAssocReq = NULL; } - PELOGE(limLog(pMac, LOG1, FL("Rcv MLM_REASSOC_CNF with result code %d"), pLimMlmReassocCnf->resultCode);) + PELOGE(limLog(pMac, LOGE, FL("Rcv MLM_REASSOC_CNF with result code %d"), pLimMlmReassocCnf->resultCode);) if (pLimMlmReassocCnf->resultCode == eSIR_SME_SUCCESS) { // Successful Reassociation PELOG1(limLog(pMac, LOG1, FL("*** Reassociated with new BSS ***"));) @@ -1861,16 +1858,9 @@ void limProcessStaMlmAddStaRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ ,tpPESess limLog( pMac, LOGE, FL( "Encountered NULL Pointer" )); return; } - if (true == psessionEntry->fDeauthReceived) + if( eHAL_STATUS_SUCCESS == pAddStaParams->status ) { - PELOGE(limLog(pMac, LOGE, - FL("Received Deauth frame in ADD_STA_RESP state"));) - pAddStaParams->status = eHAL_STATUS_FAILURE; - } - - if ( eHAL_STATUS_SUCCESS == pAddStaParams->status ) - { - if ( eLIM_MLM_WT_ADD_STA_RSP_STATE != psessionEntry->limMlmState) + if( eLIM_MLM_WT_ADD_STA_RSP_STATE != psessionEntry->limMlmState) { //TODO: any response to be sent out here ? limLog( pMac, LOGE, @@ -1940,10 +1930,6 @@ end: /* Updating PE session Id*/ mlmAssocCnf.sessionId = psessionEntry->peSessionId; limPostSmeMessage( pMac, mesgType, (tANI_U32 *) &mlmAssocCnf ); - if (true == psessionEntry->fDeauthReceived) - { - psessionEntry->fDeauthReceived = false; - } return; } void limProcessMlmDelBssRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ,tpPESession psessionEntry) @@ -2020,14 +2006,12 @@ void limProcessStaMlmDelBssRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ,tpPESessi { limLog( pMac, LOGE, FL( "DEL BSS failed!" ) ); palFreeMemory( pMac->hHdd, (void *) pDelBssParams ); - limMsgQ->bodyptr = NULL; return; } end: if( 0 != limMsgQ->bodyptr ) { palFreeMemory( pMac->hHdd, (void *) pDelBssParams ); - limMsgQ->bodyptr = NULL; } if(pStaDs == NULL) return; @@ -2058,10 +2042,7 @@ void limProcessBtAmpApMlmDelBssRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ,tpPES { limLog(pMac, LOGE,FL("Session entry passed is NULL")); if(pDelBss != NULL) - { palFreeMemory( pMac->hHdd, (void *) pDelBss ); - limMsgQ->bodyptr = NULL; - } return; } @@ -2116,10 +2097,7 @@ void limProcessBtAmpApMlmDelBssRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ,tpPES peDeleteSession(pMac, psessionEntry); if(pDelBss != NULL) - { palFreeMemory( pMac->hHdd, (void *) pDelBss ); - limMsgQ->bodyptr = NULL; - } } void limProcessMlmDelStaRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ ) @@ -2138,10 +2116,7 @@ void limProcessMlmDelStaRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ ) { limLog(pMac, LOGP,FL("Session Does not exist or invalid body pointer in message")); if(pDeleteStaParams != NULL) - { palFreeMemory( pMac->hHdd, (void *) pDeleteStaParams ); - limMsgQ->bodyptr = NULL; - } return; } @@ -2172,7 +2147,6 @@ void limProcessBtAmpApMlmDelStaRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ,tpPES FL( "DPH Entry for STA %X missing."), pDelStaParams->assocId); statusCode = eSIR_SME_REFUSED; palFreeMemory( pMac->hHdd, (void *) pDelStaParams ); - limMsgQ->bodyptr = NULL; return; } @@ -2198,7 +2172,6 @@ void limProcessBtAmpApMlmDelStaRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ,tpPES if(eLIM_MLM_WT_ASSOC_DEL_STA_RSP_STATE == pStaDs->mlmStaContext.mlmState) { palFreeMemory( pMac->hHdd, (void *) pDelStaParams ); - limMsgQ->bodyptr = NULL; if (limAddSta(pMac, pStaDs, false, psessionEntry) != eSIR_SUCCESS) { PELOGE(limLog(pMac, LOGE, @@ -2235,7 +2208,6 @@ void limProcessBtAmpApMlmDelStaRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ,tpPES } end: palFreeMemory( pMac->hHdd, (void *) pDelStaParams ); - limMsgQ->bodyptr = NULL; if(eLIM_MLM_WT_ASSOC_DEL_STA_RSP_STATE != pStaDs->mlmStaContext.mlmState) { limPrepareAndSendDelStaCnf(pMac, pStaDs, statusCode,psessionEntry); @@ -2279,7 +2251,6 @@ void limProcessStaMlmDelStaRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ,tpPESessi if( 0 != limMsgQ->bodyptr ) { palFreeMemory( pMac->hHdd, (void *) pDelStaParams ); - limMsgQ->bodyptr = NULL; } statusCode = (tSirResultCodes) limDelBss(pMac, pStaDs, 0,psessionEntry); return; @@ -2293,7 +2264,6 @@ end: if( 0 != limMsgQ->bodyptr ) { palFreeMemory( pMac->hHdd, (void *) pDelStaParams ); - limMsgQ->bodyptr = NULL; } return; } @@ -2362,7 +2332,6 @@ end: if( 0 != limMsgQ->bodyptr ) { palFreeMemory( pMac->hHdd, (void *) pAddStaParams ); - limMsgQ->bodyptr = NULL; } return; } @@ -2418,10 +2387,7 @@ limProcessApMlmAddBssRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ) { PELOGE(limLog(pMac, LOGE,FL("session does not exist for given sessionId"));) if( NULL != pAddBssParams ) - { palFreeMemory( pMac->hHdd, (void *) pAddBssParams ); - limMsgQ->bodyptr = NULL; - } return; } /* Update PE session Id*/ @@ -2487,10 +2453,7 @@ limProcessApMlmAddBssRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ) limPostSmeMessage( pMac, LIM_MLM_START_CNF, (tANI_U32 *) &mlmStartCnf ); end: if( 0 != limMsgQ->bodyptr ) - { palFreeMemory( pMac->hHdd, (void *) pAddBssParams ); - limMsgQ->bodyptr = NULL; - } } @@ -2599,10 +2562,7 @@ limProcessIbssMlmAddBssRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ ,tpPESession limPostSmeMessage( pMac, LIM_MLM_START_CNF, (tANI_U32 *) &mlmStartCnf ); end: if( 0 != limMsgQ->bodyptr ) - { palFreeMemory( pMac->hHdd, (void *) pAddBssParams ); - limMsgQ->bodyptr = NULL; - } } static void @@ -3197,10 +3157,7 @@ void limProcessMlmAddBssRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ ) { limLog( pMac, LOGE, FL( "Session Does not exist for given sessionId" )); if( NULL != pAddBssParams ) - { palFreeMemory( pMac->hHdd, (void *) pAddBssParams ); - limMsgQ->bodyptr = NULL; - } return; } /* update PE session Id*/ @@ -3219,10 +3176,7 @@ void limProcessMlmAddBssRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ ) psessionEntry->limMlmState ); mlmStartCnf.resultCode = eSIR_SME_BSS_ALREADY_STARTED_OR_JOINED; if( 0 != limMsgQ->bodyptr ) - { palFreeMemory( pMac->hHdd, (void *) pAddBssParams ); - limMsgQ->bodyptr = NULL; - } limPostSmeMessage( pMac, LIM_MLM_START_CNF, (tANI_U32 *) &mlmStartCnf ); } else if ((psessionEntry->bssType == eSIR_BTAMP_AP_MODE)||(psessionEntry->bssType == eSIR_BTAMP_STA_MODE)) @@ -3296,7 +3250,6 @@ void limProcessMlmSetStaKeyRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ ) { PELOGE(limLog(pMac, LOGE,FL("session does not exist for given sessionId"));) palFreeMemory( pMac->hHdd, (void *) limMsgQ->bodyptr ); - limMsgQ->bodyptr = NULL; return; } if( eLIM_MLM_WT_SET_STA_KEY_STATE != psessionEntry->limMlmState ) @@ -3310,7 +3263,6 @@ void limProcessMlmSetStaKeyRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ ) mlmSetKeysCnf.resultCode = (tANI_U16) (((tpSetStaKeyParams) limMsgQ->bodyptr)->status); palFreeMemory( pMac->hHdd, (void *) limMsgQ->bodyptr ); - limMsgQ->bodyptr = NULL; // Restore MLME state psessionEntry->limMlmState = psessionEntry->limPrevMlmState; MTRACE(macTrace(pMac, TRACE_CODE_MLM_STATE, psessionEntry->peSessionId, psessionEntry->limMlmState)); @@ -3349,7 +3301,6 @@ void limProcessMlmSetBssKeyRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ ) { PELOGE(limLog(pMac, LOGE,FL("session does not exist for given sessionId"));) palFreeMemory( pMac->hHdd, (void *) limMsgQ->bodyptr ); - limMsgQ->bodyptr = NULL; return; } if( eLIM_MLM_WT_SET_BSS_KEY_STATE == psessionEntry->limMlmState ) @@ -3377,7 +3328,6 @@ void limProcessMlmSetBssKeyRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ ) mlmSetKeysCnf.resultCode = resultCode; palFreeMemory( pMac->hHdd, (void *) limMsgQ->bodyptr ); - limMsgQ->bodyptr = NULL; // Restore MLME state psessionEntry->limMlmState = psessionEntry->limPrevMlmState; @@ -3466,7 +3416,6 @@ void limProcessMlmRemoveKeyRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ ) // palFreeMemory( pMac->hHdd, (void *) limMsgQ->bodyptr ); - limMsgQ->bodyptr = NULL; // Restore MLME state psessionEntry->limMlmState = psessionEntry->limPrevMlmState; @@ -3513,26 +3462,14 @@ void limProcessInitScanRsp(tpAniSirGlobal pMac, void *body) if( pMac->lim.abortScan && (eLIM_HAL_INIT_SCAN_WAIT_STATE == pMac->lim.gLimHalScanState) ) { - limLog( pMac, LOGW, FL(" abort scan") ); + limLog( pMac, LOGW, FL(" finish scan") ); pMac->lim.abortScan = 0; limDeactivateAndChangeTimer(pMac, eLIM_MIN_CHANNEL_TIMER); limDeactivateAndChangeTimer(pMac, eLIM_MAX_CHANNEL_TIMER); //Set the resume channel to Any valid channel (invalid). //This will instruct HAL to set it to any previous valid channel. peSetResumeChannel(pMac, 0, 0); - if (status != eHAL_STATUS_SUCCESS) - { - PELOGW(limLog(pMac, LOGW, FL("InitScnRsp failed status=%d"),status);) - pMac->lim.gLimHalScanState = eLIM_HAL_IDLE_SCAN_STATE; - pMac->lim.gLimNumOfConsecutiveBkgndScanFailure += 1; - limCompleteMlmScan(pMac, eSIR_SME_HAL_SCAN_INIT_FAILED); - return; - } - else - { - limSendHalFinishScanReq(pMac, eLIM_HAL_FINISH_SCAN_WAIT_STATE); - } - + limSendHalFinishScanReq(pMac, eLIM_HAL_FINISH_SCAN_WAIT_STATE); } switch(pMac->lim.gLimHalScanState) { @@ -3566,15 +3503,10 @@ void limProcessInitScanRsp(tpAniSirGlobal pMac, void *body) case eLIM_HAL_SUSPEND_LINK_WAIT_STATE: if( pMac->lim.gpLimSuspendCallback ) { - if( eHAL_STATUS_SUCCESS == status ) - { + if( status == eHAL_STATUS_SUCCESS ) pMac->lim.gLimHalScanState = eLIM_HAL_SUSPEND_LINK_STATE; - } else - { pMac->lim.gLimHalScanState = eLIM_HAL_IDLE_SCAN_STATE; - pMac->lim.gLimSystemInScanLearnMode = 0; - } pMac->lim.gpLimSuspendCallback( pMac, status, pMac->lim.gpLimSuspendData ); pMac->lim.gpLimSuspendCallback = NULL; @@ -3657,7 +3589,6 @@ end: /* Update PE session Id*/ mlmReassocCnf.sessionId = pMlmReassocReq->sessionId; palFreeMemory( pMac->hHdd, (tANI_U8 *) pMlmReassocReq); - psessionEntry->pLimMlmReassocReq = NULL; } else { @@ -3888,7 +3819,6 @@ void limProcessStartScanRsp(tpAniSirGlobal pMac, void *body) rrmUpdateStartTSF( pMac, pStartScanParam->startTSF ); #endif palFreeMemory( pMac->hHdd, (tANI_U8 *)body); - body = NULL; if( pMac->lim.abortScan ) { limLog( pMac, LOGW, FL(" finish scan") ); @@ -3938,7 +3868,6 @@ void limProcessEndScanRsp(tpAniSirGlobal pMac, void *body) pEndScanParam = (tpEndScanParams) body; status = pEndScanParam->status; palFreeMemory( pMac->hHdd, (char *)body); - body = NULL; switch(pMac->lim.gLimHalScanState) { case eLIM_HAL_END_SCAN_WAIT_STATE: @@ -4029,8 +3958,6 @@ void limProcessFinishScanRsp(tpAniSirGlobal pMac, void *body) pFinishScanParam = (tpFinishScanParams) body; status = pFinishScanParam->status; palFreeMemory( pMac->hHdd, (char *)body); - body = NULL; - switch(pMac->lim.gLimHalScanState) { case eLIM_HAL_FINISH_SCAN_WAIT_STATE: @@ -4114,7 +4041,6 @@ void limProcessMlmHalAddBARsp( tpAniSirGlobal pMac, { PELOGE(limLog(pMac, LOGE,FL("session does not exist for given sessionID: %d"),pAddBAParams->sessionId );) palFreeMemory(pMac->hHdd, (void*)limMsgQ->bodyptr); - limMsgQ->bodyptr = NULL; return; } #ifdef FEATURE_WLAN_DIAG_SUPPORT_LIM //FEATURE_WLAN_DIAG_SUPPORT @@ -4126,7 +4052,6 @@ void limProcessMlmHalAddBARsp( tpAniSirGlobal pMac, (void **) &pMlmAddBACnf, sizeof( tLimMlmAddBACnf ))) { limLog( pMac, LOGP, FL(" palAllocateMemory failed with error code %d")); palFreeMemory(pMac->hHdd, (void*)limMsgQ->bodyptr); - limMsgQ->bodyptr = NULL; return; } palZeroMemory( pMac->hHdd, (void *) pMlmAddBACnf, sizeof( tLimMlmAddBACnf )); @@ -4146,7 +4071,6 @@ void limProcessMlmHalAddBARsp( tpAniSirGlobal pMac, else pMlmAddBACnf->addBAResultCode = eSIR_MAC_UNSPEC_FAILURE_STATUS; palFreeMemory(pMac->hHdd, (void*)limMsgQ->bodyptr); - limMsgQ->bodyptr = NULL; // Send ADDBA CNF to LIM limPostSmeMessage( pMac, LIM_MLM_ADDBA_CNF, (tANI_U32 *) pMlmAddBACnf ); } @@ -4240,7 +4164,6 @@ pMlmAddBACnf = (tpLimMlmAddBACnf) pMsgBuf; } // Free the memory allocated for LIM_MLM_ADDBA_CNF palFreeMemory( pMac->hHdd, (void *) pMsgBuf ); - pMsgBuf = NULL; } /** * \brief Process LIM_MLM_DELBA_CNF @@ -4333,7 +4256,6 @@ void limProcessMlmHalBADeleteInd( tpAniSirGlobal pMac, { PELOGE(limLog(pMac, LOGE,FL("session does not exist for given BSSId"));) palFreeMemory( pMac->hHdd, (void *) limMsgQ->bodyptr ); - limMsgQ->bodyptr = NULL; return; } // First, extract the DPH entry @@ -4397,7 +4319,6 @@ void limProcessMlmHalBADeleteInd( tpAniSirGlobal pMac, returnAfterCleanup: // Free the memory allocated for SIR_LIM_DEL_BA_IND palFreeMemory( pMac->hHdd, (void *) limMsgQ->bodyptr ); - limMsgQ->bodyptr = NULL; } /** * @function : limProcessSetMimoRsp() @@ -4636,10 +4557,7 @@ limProcessBtampAddBssRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ ,tpPESession ps limPostSmeMessage( pMac, LIM_MLM_START_CNF, (tANI_U32 *) &mlmStartCnf ); end: if( 0 != limMsgQ->bodyptr ) - { palFreeMemory( pMac->hHdd, (void *) pAddBssParams ); - limMsgQ->bodyptr = NULL; - } } /** diff --git a/drivers/staging/prima/CORE/MAC/src/pe/lim/limProcessProbeReqFrame.c b/drivers/staging/prima/CORE/MAC/src/pe/lim/limProcessProbeReqFrame.c index 3c022c4a462..4f9c623a00b 100644 --- a/drivers/staging/prima/CORE/MAC/src/pe/lim/limProcessProbeReqFrame.c +++ b/drivers/staging/prima/CORE/MAC/src/pe/lim/limProcessProbeReqFrame.c @@ -443,8 +443,7 @@ limProcessProbeReqFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo,tpPESession || (pMac->lim.gLimHalScanState != eLIM_HAL_IDLE_SCAN_STATE))) { limLog(pMac, LOG3, - FL("While GO is scanning, don't send probe response" - " on diff channel")); + FL("While GO is scanning, don't send probe response on diff channel")); break; } @@ -467,9 +466,8 @@ limProcessProbeReqFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo,tpPESession // Parse Probe Request frame if (sirConvertProbeReqFrame2Struct(pMac, pBody, frameLen, &probeReq)==eSIR_FAILURE) { - PELOGW(limLog(pMac, LOGE, FL("Parse error ProbeRequest," - " length=%d, SA is:" MAC_ADDRESS_STR), - frameLen,MAC_ADDR_ARRAY(pHdr->sa));) + PELOGW(limLog(pMac, LOGW, FL("Parse error ProbeRequest, length=%d, SA is:"), frameLen);) + limPrintMacAddr(pMac, pHdr->sa, LOGW); pMac->sys.probeError++; break; } diff --git a/drivers/staging/prima/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c b/drivers/staging/prima/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c index 0bb2d3b02db..3c6433eedb4 100644 --- a/drivers/staging/prima/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c +++ b/drivers/staging/prima/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c @@ -87,8 +87,8 @@ #ifdef FEATURE_WLAN_CCX /* These are the min/max tx power (non virtual rates) range supported by prima hardware */ -#define MIN_TX_PWR_CAP 8 -#define MAX_TX_PWR_CAP 22 +#define MIN_TX_PWR_CAP 12 +#define MAX_TX_PWR_CAP 19 #endif @@ -1479,8 +1479,6 @@ __limProcessSmeJoinReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) tANI_U8 smesessionId; tANI_U16 smetransactionId; tPowerdBm localPowerConstraint = 0, regMax = 0; - tANI_U16 ieLen; - v_U8_t *vendorIE; #ifdef FEATURE_WLAN_DIAG_SUPPORT_LIM //FEATURE_WLAN_DIAG_SUPPORT //Not sending any session, since it is not created yet. The response whould have correct state. @@ -1556,8 +1554,7 @@ __limProcessSmeJoinReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) // Log the event and send success PELOGW(limLog(pMac, LOGW, FL("Received SME_JOIN_REQ for currently joined BSS"));) /// Send Join success response to host - retCode = eSIR_SME_ALREADY_JOINED_A_BSS; - psessionEntry = NULL; + retCode = eSIR_SME_SUCCESS; goto end; } else @@ -1602,28 +1599,6 @@ __limProcessSmeJoinReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) psessionEntry->bssType = pSmeJoinReq->bsstype; psessionEntry->statypeForBss = STA_ENTRY_PEER; - psessionEntry->limWmeEnabled = pSmeJoinReq->isWMEenabled; - psessionEntry->limQosEnabled = pSmeJoinReq->isQosEnabled; - - /* Store vendor specfic IE for CISCO AP */ - ieLen = (pSmeJoinReq->bssDescription.length + - sizeof( pSmeJoinReq->bssDescription.length ) - - GET_FIELD_OFFSET( tSirBssDescription, ieFields )); - - vendorIE = limGetVendorIEOuiPtr(pMac, SIR_MAC_CISCO_OUI, - SIR_MAC_CISCO_OUI_SIZE, - ((tANI_U8 *)&pSmeJoinReq->bssDescription.ieFields) , ieLen); - - if ( NULL != vendorIE ) - { - limLog(pMac, LOGE, - FL("DUT is trying to connect to Cisco AP")); - psessionEntry->isCiscoVendorAP = TRUE; - } - else - { - psessionEntry->isCiscoVendorAP = FALSE; - } /* Copy the dot 11 mode in to the session table */ @@ -2641,20 +2616,6 @@ __limProcessSmeDeauthReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) retCode = eSIR_SME_STA_NOT_AUTHENTICATED; deauthTrigger = eLIM_HOST_DEAUTH; - /** - *here we received deauth request from AP so sme state is - eLIM_SME_WT_DEAUTH_STATE.if we have ISSUED delSta then - mlm state should be eLIM_MLM_WT_DEL_STA_RSP_STATE and if - we got delBSS rsp then mlm state should be eLIM_MLM_IDLE_STATE - so the below condition captures the state where delSta - not done and firmware still in connected state. - */ - if (psessionEntry->limSmeState == eLIM_SME_WT_DEAUTH_STATE && - psessionEntry->limMlmState != eLIM_MLM_IDLE_STATE && - psessionEntry->limMlmState != eLIM_MLM_WT_DEL_STA_RSP_STATE) - { - retCode = eSIR_SME_DEAUTH_STATUS; - } goto sendDeauth; } @@ -3946,7 +3907,6 @@ __limProcessSmeStatsRequest(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) { limLog(pMac, LOGE, FL("session does not exist for given bssId")); palFreeMemory( pMac, pMsgBuf ); - pMsgBuf = NULL; return; } @@ -3972,7 +3932,6 @@ __limProcessSmeStatsRequest(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) default: //Unknown request. PELOGE(limLog(pMac, LOGE, "Unknown Statistics request");) palFreeMemory( pMac, pMsgBuf ); - pMsgBuf = NULL; return; } @@ -4000,7 +3959,6 @@ __limProcessSmeStatsRequest(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) if( eSIR_SUCCESS != (wdaPostCtrlMsg( pMac, &msgQ ))){ limLog(pMac, LOGP, "Unable to forward request"); palFreeMemory( pMac, pMsgBuf ); - pMsgBuf = NULL; return; } @@ -4049,7 +4007,6 @@ __limProcessSmeGetStatisticsRequest(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) if( eSIR_SUCCESS != (wdaPostCtrlMsg( pMac, &msgQ ))){ palFreeMemory( pMac, pMsgBuf ); - pMsgBuf = NULL; limLog(pMac, LOGP, "Unable to forward request"); return; } @@ -4097,7 +4054,6 @@ __limProcessSmeGetRoamRssiRequest(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) if( eSIR_SUCCESS != (wdaPostCtrlMsg( pMac, &msgQ ))){ palFreeMemory( pMac, pMsgBuf ); - pMsgBuf = NULL; limLog(pMac, LOGP, "Unable to forward request"); return; } @@ -4251,7 +4207,6 @@ __limProcessSmeChangeBI(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) return; } - vos_mem_zero(&beaconParams, sizeof(tUpdateBeaconParams)); pChangeBIParams = (tpSirChangeBIParams)pMsgBuf; if((psessionEntry = peFindSessionByBssid(pMac, pChangeBIParams->bssId, &sessionId)) == NULL) diff --git a/drivers/staging/prima/CORE/MAC/src/pe/lim/limProcessTdls.c b/drivers/staging/prima/CORE/MAC/src/pe/lim/limProcessTdls.c index 7566f41e999..ba906e233b0 100644 --- a/drivers/staging/prima/CORE/MAC/src/pe/lim/limProcessTdls.c +++ b/drivers/staging/prima/CORE/MAC/src/pe/lim/limProcessTdls.c @@ -942,61 +942,6 @@ eHalStatus limTdlsTeardownTxComplete(tpAniSirGlobal pMac, #endif /* - * This static function is consistent with any kind of TDLS management - * frames we are sending. Currently it is being used by limSendTdlsDisRspFrame, - * limSendTdlsLinkSetupReqFrame and limSendTdlsSetupRspFrame - */ -static void PopulateDot11fTdlsHtVhtCap(tpAniSirGlobal pMac, uint32 selfDot11Mode, - tDot11fIEHTCaps *htCap, tDot11fIEVHTCaps *vhtCap, - tpPESession psessionEntry) -{ - if (IS_DOT11_MODE_HT(selfDot11Mode)) - { - /* Include HT Capability IE */ - PopulateDot11fHTCaps( pMac, NULL, htCap ); - htCap->present = 1; - if (psessionEntry->currentOperChannel <= SIR_11B_CHANNEL_END) - { - /* hardcode NO channel bonding in 2.4Ghz */ - htCap->supportedChannelWidthSet = 0; - } - else - { - //Placeholder to support different channel bonding mode of TDLS than AP. - //wlan_cfgGetInt(pMac,WNI_CFG_TDLS_CHANNEL_BONDING_MODE,&tdlsChannelBondingMode); - //htCap->supportedChannelWidthSet = tdlsChannelBondingMode ? 1 : 0; - htCap->supportedChannelWidthSet = 1; // hardcode it to max - } - } - else - { - htCap->present = 0; - } -#ifdef WLAN_FEATURE_11AC - if (((psessionEntry->currentOperChannel <= SIR_11B_CHANNEL_END) && - pMac->roam.configParam.enableVhtFor24GHz) || - (psessionEntry->currentOperChannel >= SIR_11B_CHANNEL_END)) - { - if (IS_DOT11_MODE_VHT(selfDot11Mode) && - IS_FEATURE_SUPPORTED_BY_FW(DOT11AC)) - { - /* Include VHT Capability IE */ - PopulateDot11fVHTCaps( pMac, vhtCap ); - } - else - { - vhtCap->present = 0; - } - } - else - { - /* Vht Disable from ini in 2.4 GHz */ - vhtCap->present = 0; - } -#endif -} - -/* * Send TDLS discovery response frame on direct link. */ @@ -1060,9 +1005,55 @@ static tSirRetStatus limSendTdlsDisRspFrame(tpAniSirGlobal pMac, wlan_cfgGetInt(pMac,WNI_CFG_DOT11_MODE,&selfDot11Mode); - /* Populate HT/VHT Capabilities */ - PopulateDot11fTdlsHtVhtCap( pMac, selfDot11Mode, &tdlsDisRsp.HTCaps, - &tdlsDisRsp.VHTCaps, psessionEntry ); + if (psessionEntry->currentOperChannel <= SIR_11B_CHANNEL_END) + { + if (IS_DOT11_MODE_HT(selfDot11Mode)) + { + /* Include HT Capability IE */ + PopulateDot11fHTCaps( pMac, NULL, &tdlsDisRsp.HTCaps ); + tdlsDisRsp.HTCaps.present = 1; + /* hardcode NO channel bonding in 2.4Ghz */ + tdlsDisRsp.HTCaps.supportedChannelWidthSet = 0; + } + else + { + tdlsDisRsp.HTCaps.present = 0; + } +#ifdef WLAN_FEATURE_11AC + /* in 2.4Ghz, hardcode NO 11ac */ + tdlsDisRsp.VHTCaps.present = 0; +#endif + } + else + { + if (IS_DOT11_MODE_HT(selfDot11Mode)) + { + /* Include HT Capability IE */ + PopulateDot11fHTCaps( pMac, NULL, &tdlsDisRsp.HTCaps ); + + tdlsDisRsp.HTCaps.present = 1; + //Placeholder to support different channel bonding mode of TDLS than AP. + //wlan_cfgGetInt(pMac,WNI_CFG_TDLS_CHANNEL_BONDING_MODE,&tdlsChannelBondingMode); + //tdlsDisRsp.HTCaps.supportedChannelWidthSet = tdlsChannelBondingMode ? 1 : 0; + tdlsDisRsp.HTCaps.supportedChannelWidthSet = 1; // hardcode it to max + } + else + { + tdlsDisRsp.HTCaps.present = 0; + } +#ifdef WLAN_FEATURE_11AC + if (IS_DOT11_MODE_VHT(selfDot11Mode) && + IS_FEATURE_SUPPORTED_BY_FW(DOT11AC)) + { + /* Include VHT Capability IE */ + PopulateDot11fVHTCaps( pMac, &tdlsDisRsp.VHTCaps ); + } + else + { + tdlsDisRsp.VHTCaps.present = 0; + } +#endif + } /* * now we pack it. First, how much space are we going to need? @@ -1206,46 +1197,6 @@ static tSirRetStatus limSendTdlsDisRspFrame(tpAniSirGlobal pMac, } /* - * This static function is currently used by limSendTdlsLinkSetupReqFrame and - * limSendTdlsSetupRspFrame to populate the AID if device is 11ac capable. - */ -static void PopulateDotfTdlsVhtAID(tpAniSirGlobal pMac, uint32 selfDot11Mode, - tSirMacAddr peerMac, tDot11fIEAID *Aid, - tpPESession psessionEntry) -{ - if (((psessionEntry->currentOperChannel <= SIR_11B_CHANNEL_END) && - pMac->roam.configParam.enableVhtFor24GHz) || - (psessionEntry->currentOperChannel >= SIR_11B_CHANNEL_END)) - { - if (IS_DOT11_MODE_VHT(selfDot11Mode) && - IS_FEATURE_SUPPORTED_BY_FW(DOT11AC)) - { - - tANI_U16 aid; - tpDphHashNode pStaDs; - - pStaDs = dphLookupHashEntry(pMac, peerMac, &aid, &psessionEntry->dph.dphHashTable); - if (NULL != pStaDs) - { - Aid->present = 1; - Aid->assocId = aid | LIM_AID_MASK; // set bit 14 and 15 1's - } - else - { - Aid->present = 0; - limLog( pMac, LOGE, FL("pStaDs is NULL for " MAC_ADDRESS_STR ), - MAC_ADDR_ARRAY(peerMac)); - } - } - } - else - { - Aid->present = 0; - limLog( pMac, LOGW, FL("Vht not enable from ini for 2.4GHz.")); - } -} - -/* * TDLS setup Request frame on AP link */ @@ -1332,14 +1283,66 @@ tSirRetStatus limSendTdlsLinkSetupReqFrame(tpAniSirGlobal pMac, wlan_cfgGetInt(pMac,WNI_CFG_DOT11_MODE,&selfDot11Mode); - /* Populate HT/VHT Capabilities */ - PopulateDot11fTdlsHtVhtCap( pMac, selfDot11Mode, &tdlsSetupReq.HTCaps, - &tdlsSetupReq.VHTCaps, psessionEntry ); + if (psessionEntry->currentOperChannel <= SIR_11B_CHANNEL_END) + { + if (IS_DOT11_MODE_HT(selfDot11Mode)) + { + /* Include HT Capability IE */ + PopulateDot11fHTCaps( pMac, NULL, &tdlsSetupReq.HTCaps ); - /* Populate AID */ - PopulateDotfTdlsVhtAID( pMac, selfDot11Mode, peerMac, - &tdlsSetupReq.AID, psessionEntry ); + tdlsSetupReq.HTCaps.present = 1; + /* hardcode NO channel bonding in 2.4Ghz */ + tdlsSetupReq.HTCaps.supportedChannelWidthSet = 0; + } + else + { + tdlsSetupReq.HTCaps.present = 0; + } +#ifdef WLAN_FEATURE_11AC + /* in 2.4Ghz, hardcode NO 11ac */ + tdlsSetupReq.VHTCaps.present = 0; +#endif + } + else + { + if (IS_DOT11_MODE_HT(selfDot11Mode)) + { + /* Include HT Capability IE */ + PopulateDot11fHTCaps( pMac, NULL, &tdlsSetupReq.HTCaps ); + tdlsSetupReq.HTCaps.present = 1; + //Placeholder to support different channel bonding mode of TDLS than AP. + //wlan_cfgGetInt(pMac,WNI_CFG_TDLS_CHANNEL_BONDING_MODE,&tdlsChannelBondingMode); + //tdlsSetupReq.HTCaps.supportedChannelWidthSet = tdlsChannelBondingMode ? 1 : 0; + tdlsSetupReq.HTCaps.supportedChannelWidthSet = 1; // hardcode it to max + } + else + { + tdlsSetupReq.HTCaps.present = 0; + } +#ifdef WLAN_FEATURE_11AC + if (IS_DOT11_MODE_VHT(selfDot11Mode) && + IS_FEATURE_SUPPORTED_BY_FW(DOT11AC)) + { + tANI_U16 aid; + tpDphHashNode pStaDs; + + pStaDs = dphLookupHashEntry(pMac, peerMac, &aid , &psessionEntry->dph.dphHashTable); + if (NULL != pStaDs) + { + tdlsSetupReq.AID.present = 1; + tdlsSetupReq.AID.assocId = aid | LIM_AID_MASK; // set bit 14 and 15 1's + } + + /* Include VHT Capability IE */ + PopulateDot11fVHTCaps( pMac, &tdlsSetupReq.VHTCaps ); + } + else + { + tdlsSetupReq.VHTCaps.present = 0; + } +#endif + } /* * now we pack it. First, how much space are we going to need? */ @@ -1745,13 +1748,66 @@ static tSirRetStatus limSendTdlsSetupRspFrame(tpAniSirGlobal pMac, wlan_cfgGetInt(pMac,WNI_CFG_DOT11_MODE,&selfDot11Mode); - /* Populate HT/VHT Capabilities */ - PopulateDot11fTdlsHtVhtCap( pMac, selfDot11Mode, &tdlsSetupRsp.HTCaps, - &tdlsSetupRsp.VHTCaps, psessionEntry ); + if (psessionEntry->currentOperChannel <= SIR_11B_CHANNEL_END) + { + if (IS_DOT11_MODE_HT(selfDot11Mode)) + { + /* Include HT Capability IE */ + PopulateDot11fHTCaps( pMac, NULL, &tdlsSetupRsp.HTCaps ); - /* Populate AID */ - PopulateDotfTdlsVhtAID( pMac, selfDot11Mode, peerMac, - &tdlsSetupRsp.AID, psessionEntry ); + tdlsSetupRsp.HTCaps.present = 1; + /* hardcode NO channel bonding in 2.4Ghz */ + tdlsSetupRsp.HTCaps.supportedChannelWidthSet = 0; + } + else + { + tdlsSetupRsp.HTCaps.present = 0; + } +#ifdef WLAN_FEATURE_11AC + /* in 2.4Ghz, hardcode NO 11ac */ + tdlsSetupRsp.VHTCaps.present = 0; +#endif + } + else + { + if (IS_DOT11_MODE_HT(selfDot11Mode)) + { + /* Include HT Capability IE */ + PopulateDot11fHTCaps( pMac, NULL, &tdlsSetupRsp.HTCaps ); + + tdlsSetupRsp.HTCaps.present = 1; + //Placeholder to support different channel bonding mode of TDLS than AP. + //wlan_cfgGetInt(pMac,WNI_CFG_TDLS_CHANNEL_BONDING_MODE,&tdlsChannelBondingMode); + //tdlsSetupRsp.HTCaps.supportedChannelWidthSet = tdlsChannelBondingMode ? 1 : 0; + tdlsSetupRsp.HTCaps.supportedChannelWidthSet = 1; // hardcode it to max + } + else + { + tdlsSetupRsp.HTCaps.present = 0; + } +#ifdef WLAN_FEATURE_11AC + if (IS_DOT11_MODE_VHT(selfDot11Mode) && + IS_FEATURE_SUPPORTED_BY_FW(DOT11AC)) + { + tANI_U16 aid; + tpDphHashNode pStaDs; + + pStaDs = dphLookupHashEntry(pMac, peerMac, &aid , &psessionEntry->dph.dphHashTable); + if (NULL != pStaDs) + { + tdlsSetupRsp.AID.present = 1; + tdlsSetupRsp.AID.assocId = aid | LIM_AID_MASK; // set bit 14 and 15 1's + } + + /* Include VHT Capability IE */ + PopulateDot11fVHTCaps( pMac, &tdlsSetupRsp.VHTCaps ); + } + else + { + tdlsSetupRsp.VHTCaps.present = 0; + } +#endif + } tdlsSetupRsp.Status.status = setupStatus ; @@ -2705,9 +2761,8 @@ static void limTdlsUpdateHashNodeInfo(tpAniSirGlobal pMac, tDphHashNode *pStaDs, { //tDot11fIEHTCaps *htCaps = &setupPeerInfo->tdlsPeerHTCaps ; tDot11fIEHTCaps htCap, *htCaps; - tDot11fIEVHTCaps *pVhtCaps = NULL; #ifdef WLAN_FEATURE_11AC - tDot11fIEVHTCaps vhtCap; + tDot11fIEVHTCaps vhtCap, *pVhtCaps; tANI_U8 cbMode; #endif tpDphHashNode pSessStaDs = NULL; @@ -2751,19 +2806,8 @@ static void limTdlsUpdateHashNodeInfo(tpAniSirGlobal pMac, tDphHashNode *pStaDs, if (pVhtCaps->present) { pStaDs->mlmStaContext.vhtCapability = 1 ; - - if ((psessionEntry->currentOperChannel <= SIR_11B_CHANNEL_END) && - pMac->roam.configParam.enableVhtFor24GHz) - { - pStaDs->vhtSupportedChannelWidthSet = WNI_CFG_VHT_CHANNEL_WIDTH_20_40MHZ; - pStaDs->htSupportedChannelWidthSet = eHT_CHANNEL_WIDTH_20MHZ; - } - else - { - pStaDs->vhtSupportedChannelWidthSet = WNI_CFG_VHT_CHANNEL_WIDTH_80MHZ; - pStaDs->htSupportedChannelWidthSet = eHT_CHANNEL_WIDTH_40MHZ ; - } - + pStaDs->vhtSupportedChannelWidthSet = WNI_CFG_VHT_CHANNEL_WIDTH_80MHZ; + pStaDs->htSupportedChannelWidthSet = eHT_CHANNEL_WIDTH_40MHZ ; pStaDs->vhtLdpcCapable = pVhtCaps->ldpcCodingCap; pStaDs->vhtBeamFormerCapable= pVhtCaps->suBeamFormerCap; // TODO , is it necessary , Sunil??? @@ -2806,7 +2850,7 @@ static void limTdlsUpdateHashNodeInfo(tpAniSirGlobal pMac, tDphHashNode *pStaDs, pTdlsAddStaReq->supported_rates_length, (tANI_U8 *)pTdlsAddStaReq->htCap.suppMcsSet, &pStaDs->mlmStaContext.propRateSet, - psessionEntry, pVhtCaps); + psessionEntry, (tDot11fIEVHTCaps *)&pTdlsAddStaReq->vhtCap); /* TDLS Dummy AddSTA does not have right capability , is it OK ?? */ diff --git a/drivers/staging/prima/CORE/MAC/src/pe/lim/limScanResultUtils.c b/drivers/staging/prima/CORE/MAC/src/pe/lim/limScanResultUtils.c index b1696da91a8..abd96363fb0 100644 --- a/drivers/staging/prima/CORE/MAC/src/pe/lim/limScanResultUtils.c +++ b/drivers/staging/prima/CORE/MAC/src/pe/lim/limScanResultUtils.c @@ -503,6 +503,10 @@ limCheckAndAddBssDescription(tpAniSirGlobal pMac, limCollectBssDescription(pMac, &pBssDescr->bssDescription, pBPR, pRxPacketInfo); #endif + /* Calling dfsChannelList which will convert DFS channel + * to Active channel for x secs if this channel is DFS channel */ + limSetDFSChannelList(pMac, pBssDescr->bssDescription.channelIdSelf, + &pMac->lim.dfschannelList); pBssDescr->bssDescription.fProbeRsp = fProbeRsp; pBssDescr->next = NULL; diff --git a/drivers/staging/prima/CORE/MAC/src/pe/lim/limSendManagementFrames.c b/drivers/staging/prima/CORE/MAC/src/pe/lim/limSendManagementFrames.c index 5c8804ca8aa..a7028d0c553 100644 --- a/drivers/staging/prima/CORE/MAC/src/pe/lim/limSendManagementFrames.c +++ b/drivers/staging/prima/CORE/MAC/src/pe/lim/limSendManagementFrames.c @@ -868,18 +868,7 @@ limSendProbeRspMgmtFrame(tpAniSirGlobal pMac, &noaIe[0], total_noaLen) != eHAL_STATUS_SUCCESS) { limLog(pMac, LOGE, - FL("Not able to insert NoA because of length constraint." - "Total Length is :%d"),total_noaLen); - vos_mem_free(addIE); - vos_mem_free(pFrm); - palPktFree( pMac->hHdd, HAL_TXRX_FRM_802_11_MGMT, - ( void* ) pFrame, ( void* ) pPacket ); - return; - } - else - { - vos_mem_copy( &pFrame[nBytes - (total_noaLen)], - &noaIe[0], total_noaLen); + FL("Not able to insert NoA because of length constraint")); } } @@ -2306,7 +2295,6 @@ limSendAssocReqMgmtFrame(tpAniSirGlobal pMac, // Free up buffer allocated for mlmAssocReq palFreeMemory( pMac->hHdd, ( tANI_U8* ) pMlmAssocReq ); - pMlmAssocReq = NULL; palFreeMemory(pMac->hHdd, pFrm); return; } // End limSendAssocReqMgmtFrame @@ -5025,17 +5013,17 @@ tSirRetStatus limSendAddBARsp( tpAniSirGlobal pMac, frmAddBARsp.AddBAParameterSet.tid = pMlmAddBARsp->baTID; frmAddBARsp.AddBAParameterSet.policy = pMlmAddBARsp->baPolicy; frmAddBARsp.AddBAParameterSet.bufferSize = pMlmAddBARsp->baBufferSize; + frmAddBARsp.AddBAParameterSet.amsduSupported = psessionEntry->amsduSupportedInBA; if(psessionEntry->isAmsduSupportInAMPDU) { - frmAddBARsp.AddBAParameterSet.amsduSupported = - psessionEntry->amsduSupportedInBA; + frmAddBARsp.AddBAParameterSet.amsduSupported = + psessionEntry->amsduSupportedInBA; } else { - frmAddBARsp.AddBAParameterSet.amsduSupported = 0; + frmAddBARsp.AddBAParameterSet.amsduSupported = 0; } - // BA timeout // 0 - indicates no BA timeout frmAddBARsp.BATimeout.timeout = pMlmAddBARsp->baTimeout; diff --git a/drivers/staging/prima/CORE/MAC/src/pe/lim/limSerDesUtils.c b/drivers/staging/prima/CORE/MAC/src/pe/lim/limSerDesUtils.c index d15d3b29cbe..3977e62d835 100644 --- a/drivers/staging/prima/CORE/MAC/src/pe/lim/limSerDesUtils.c +++ b/drivers/staging/prima/CORE/MAC/src/pe/lim/limSerDesUtils.c @@ -1155,19 +1155,7 @@ limJoinReqSerDes(tpAniSirGlobal pMac, tpSirSmeJoinReq pJoinReq, tANI_U8 *pBuf) if (limCheckRemainingLength(pMac, len) == eSIR_FAILURE) return eSIR_FAILURE; - pJoinReq->isWMEenabled = (tAniBool)limGetU32(pBuf); - pBuf += sizeof(tAniBool); - len -= sizeof(tAniBool); - if (limCheckRemainingLength(pMac, len) == eSIR_FAILURE) - return eSIR_FAILURE; - - pJoinReq->isQosEnabled = (tAniBool)limGetU32(pBuf); - pBuf += sizeof(tAniBool); - len -= sizeof(tAniBool); - if (limCheckRemainingLength(pMac, len) == eSIR_FAILURE) - return eSIR_FAILURE; - - pJoinReq->isAmsduSupportInAMPDU = *pBuf++; + pJoinReq->isAmsduSupportInAMPDU= *pBuf++; len--; if (limCheckRemainingLength(pMac, len) == eSIR_FAILURE) return eSIR_FAILURE; diff --git a/drivers/staging/prima/CORE/MAC/src/pe/lim/limSession.c b/drivers/staging/prima/CORE/MAC/src/pe/lim/limSession.c index 386145c099f..805856c3949 100644 --- a/drivers/staging/prima/CORE/MAC/src/pe/lim/limSession.c +++ b/drivers/staging/prima/CORE/MAC/src/pe/lim/limSession.c @@ -138,7 +138,6 @@ tpPESession peCreateSession(tpAniSirGlobal pMac, tANI_U8 *bssid , tANI_U8* sessi { limLog(pMac, LOGE, FL("memory allocate failed!")); palFreeMemory(pMac->hHdd,pMac->lim.gpSession[i].dph.dphHashTable.pHashTable); - pMac->lim.gpSession[i].dph.dphHashTable.pHashTable = NULL; return NULL; } pMac->lim.gpSession[i].dph.dphHashTable.size = numSta; @@ -153,8 +152,6 @@ tpPESession peCreateSession(tpAniSirGlobal pMac, tANI_U8 *bssid , tANI_U8* sessi PELOGE(limLog(pMac, LOGE, FL("memory allocate failed!"));) palFreeMemory(pMac->hHdd,pMac->lim.gpSession[i].dph.dphHashTable.pHashTable); palFreeMemory(pMac->hHdd,pMac->lim.gpSession[i].dph.dphHashTable.pDphNodeArray); - pMac->lim.gpSession[i].dph.dphHashTable.pHashTable = NULL; - pMac->lim.gpSession[i].dph.dphHashTable.pDphNodeArray = NULL; return NULL; } palZeroMemory(pMac->hHdd, pMac->lim.gpSession[i].gpLimPeerIdxpool, diff --git a/drivers/staging/prima/CORE/MAC/src/pe/lim/limTimerUtils.c b/drivers/staging/prima/CORE/MAC/src/pe/lim/limTimerUtils.c index fa7ad9ed01b..21d1ca6b2d4 100644 --- a/drivers/staging/prima/CORE/MAC/src/pe/lim/limTimerUtils.c +++ b/drivers/staging/prima/CORE/MAC/src/pe/lim/limTimerUtils.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2014, The Linux Foundation. All rights reserved. + * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -791,10 +791,7 @@ limCreateTimers(tpAniSirGlobal pMac) tx_timer_delete(&pMac->lim.limTimers.gLimActiveToPassiveChannelTimer); if(NULL != pMac->lim.gLimPreAuthTimerTable.pTable) - { palFreeMemory(pMac->hHdd, pMac->lim.gLimPreAuthTimerTable.pTable); - pMac->lim.gLimPreAuthTimerTable.pTable = NULL; - } return TX_TIMER_ERROR; @@ -953,8 +950,7 @@ limAssocFailureTimerHandler(void *pMacGlobal, tANI_U32 param) #if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR) if((LIM_REASSOC == param) && - (NULL != pMac->lim.pSessionEntry) && - (pMac->lim.pSessionEntry->limMlmState == eLIM_MLM_WT_FT_REASSOC_RSP_STATE)) + (NULL != pMac->lim.pSessionEntry)) { limLog(pMac, LOGE, FL("Reassoc timeout happened")); if(pMac->lim.reAssocRetryAttempt < LIM_MAX_REASSOC_RETRY_LIMIT) @@ -1439,7 +1435,7 @@ limDeactivateAndChangeTimer(tpAniSirGlobal pMac, tANI_U32 timerId) } else { - limLog(pMac, LOG1, FL("Deactivated probe after hb timer")); + limLog(pMac, LOGE, FL("Deactivated probe after hb timer")); } if (wlan_cfgGetInt(pMac, WNI_CFG_PROBE_AFTER_HB_FAIL_TIMEOUT, diff --git a/drivers/staging/prima/CORE/MAC/src/pe/lim/limTrace.c b/drivers/staging/prima/CORE/MAC/src/pe/lim/limTrace.c index b1e2200de0f..95744c8cfcf 100644 --- a/drivers/staging/prima/CORE/MAC/src/pe/lim/limTrace.c +++ b/drivers/staging/prima/CORE/MAC/src/pe/lim/limTrace.c @@ -64,7 +64,6 @@ #include "limTrace.h" #include "limTimerUtils.h" -#include "vos_trace.h" #ifdef LIM_TRACE_RECORD @@ -140,13 +139,13 @@ static tANI_U8* __limTraceGetMgmtDropReasonString( tANI_U16 dropReason ) void limTraceInit(tpAniSirGlobal pMac) { - vosTraceRegister(VOS_MODULE_ID_PE, (tpvosTraceCb)&limTraceDump); + macTraceRegister(pMac, VOS_MODULE_ID_PE, limTraceDump); } -void limTraceDump(tpAniSirGlobal pMac, tpvosTraceRecord pRecord, tANI_U16 recIndex) +void limTraceDump(tpAniSirGlobal pMac, tpTraceRecord pRecord, tANI_U16 recIndex) { static char *frameSubtypeStr[LIM_TRACE_MAX_SUBTYPES] = diff --git a/drivers/staging/prima/CORE/MAC/src/pe/lim/limUtils.c b/drivers/staging/prima/CORE/MAC/src/pe/lim/limUtils.c index 3c52ff0d5a0..2a2721836e1 100644 --- a/drivers/staging/prima/CORE/MAC/src/pe/lim/limUtils.c +++ b/drivers/staging/prima/CORE/MAC/src/pe/lim/limUtils.c @@ -88,7 +88,6 @@ static const tANI_U8 aUnsortedChannelList[]= {52,56,60,64,100,104,108,112,116, //#define LIM_MAX_ACTIVE_SESSIONS 3 //defined temporarily for BT-AMP SUPPORT #define SUCCESS 1 //defined temporarily for BT-AMP -#define MAX_BA_WINDOW_SIZE_FOR_CISCO 25 /** ------------------------------------------------------------- \fn limAssignDialogueToken \brief Assigns dialogue token. @@ -157,7 +156,6 @@ limSearchAndDeleteDialogueToken(tpAniSirGlobal pMac, tANI_U8 token, tANI_U16 ass if(NULL == pMac->lim.pDialogueTokenHead) pMac->lim.pDialogueTokenTail = NULL; palFreeMemory(pMac->hHdd, (void *) pCurrNode); - pMac->lim.pDialogueTokenHead = NULL; return eSIR_SUCCESS; } @@ -183,7 +181,6 @@ limSearchAndDeleteDialogueToken(tpAniSirGlobal pMac, tANI_U8 token, tANI_U16 ass if(NULL == pCurrNode->next) pMac->lim.pDialogueTokenTail = pPrevNode; palFreeMemory(pMac->hHdd, (void *) pCurrNode); - pMac->lim.pDialogueTokenHead = NULL; return eSIR_SUCCESS; } @@ -5545,7 +5542,6 @@ limProcessAddBaInd(tpAniSirGlobal pMac, tpSirMsgQ limMsg) { limLog(pMac, LOGE,FL("session does not exist for given BSSId")); palFreeMemory(pMac->hHdd, limMsg->bodyptr); - limMsg->bodyptr = NULL; return; } @@ -5557,7 +5553,6 @@ limProcessAddBaInd(tpAniSirGlobal pMac, tpSirMsgQ limMsg) #endif { palFreeMemory(pMac->hHdd, limMsg->bodyptr); - limMsg->bodyptr = NULL; return; } @@ -5583,7 +5578,6 @@ limProcessAddBaInd(tpAniSirGlobal pMac, tpSirMsgQ limMsg) if (!htCapable) { palFreeMemory(pMac->hHdd, limMsg->bodyptr); - limMsg->bodyptr = NULL; return; } #endif @@ -5610,7 +5604,6 @@ limProcessAddBaInd(tpAniSirGlobal pMac, tpSirMsgQ limMsg) } } palFreeMemory(pMac->hHdd, limMsg->bodyptr); - limMsg->bodyptr = NULL; return; } @@ -5769,7 +5762,6 @@ if((psessionEntry = peFindSessionByBssid(pMac,pDelTsParam->bssId,&sessionId))== { limLog(pMac, LOGE,FL("session does not exist for given BssId")); palFreeMemory(pMac->hHdd, (void *)(limMsg->bodyptr)); - limMsg->bodyptr = NULL; return; } @@ -5836,7 +5828,6 @@ error2: palFreeMemory(pMac->hHdd, (void *) pDelTsReq); error1: palFreeMemory(pMac->hHdd, (void *)(limMsg->bodyptr)); - limMsg->bodyptr = NULL; return; } @@ -5900,17 +5891,7 @@ tSirRetStatus limPostMlmAddBAReq( tpAniSirGlobal pMac, // Requesting the ADDBA recipient to populate the size. // If ADDBA is accepted, a non-zero buffer size should // be returned in the ADDBA Rsp - if ((TRUE == psessionEntry->isCiscoVendorAP) && - (eHT_CHANNEL_WIDTH_80MHZ != pStaDs->htSupportedChannelWidthSet)) - { - /* Cisco AP has issues in receiving more than 25 "mpdu in ampdu" - causing very low throughput in HT40 case */ - limLog( pMac, LOGW, - FL( "Requesting ADDBA with Cisco 1225 AP, window size 25")); - pMlmAddBAReq->baBufferSize = MAX_BA_WINDOW_SIZE_FOR_CISCO; - } - else - pMlmAddBAReq->baBufferSize = 0; + pMlmAddBAReq->baBufferSize = 0; limLog( pMac, LOGW, FL( "Requesting an ADDBA to setup a %s BA session with STA %d for TID %d" ), @@ -7297,10 +7278,8 @@ void limHandleDeferMsgError(tpAniSirGlobal pMac, tpSirMsgQ pLimMsg) vos_pkt_return_packet((vos_pkt_t*)pLimMsg->bodyptr); } else if(pLimMsg->bodyptr != NULL) - { palFreeMemory( pMac->hHdd, (tANI_U8 *) pLimMsg->bodyptr); - pLimMsg->bodyptr = NULL; - } + } @@ -7360,7 +7339,6 @@ void limProcessAddStaSelfRsp(tpAniSirGlobal pMac,tpSirMsgQ limMsgQ) /// Buffer not available. Log error limLog(pMac, LOGP, FL("call to palAllocateMemory failed for Add Sta self RSP")); palFreeMemory( pMac->hHdd, (tANI_U8 *)pAddStaSelfParams); - limMsgQ->bodyptr = NULL; return; } @@ -7373,7 +7351,6 @@ void limProcessAddStaSelfRsp(tpAniSirGlobal pMac,tpSirMsgQ limMsgQ) palCopyMemory( pMac->hHdd, pRsp->selfMacAddr, pAddStaSelfParams->selfMacAddr, sizeof(tSirMacAddr) ); palFreeMemory( pMac->hHdd, (tANI_U8 *)pAddStaSelfParams); - limMsgQ->bodyptr = NULL; mmhMsg.type = eWNI_SME_ADD_STA_SELF_RSP; mmhMsg.bodyptr = pRsp; @@ -7398,7 +7375,6 @@ void limProcessDelStaSelfRsp(tpAniSirGlobal pMac,tpSirMsgQ limMsgQ) /// Buffer not available. Log error limLog(pMac, LOGP, FL("call to palAllocateMemory failed for Add Sta self RSP")); palFreeMemory( pMac->hHdd, (tANI_U8 *)pDelStaSelfParams); - limMsgQ->bodyptr = NULL; return; } @@ -7411,7 +7387,6 @@ void limProcessDelStaSelfRsp(tpAniSirGlobal pMac,tpSirMsgQ limMsgQ) palCopyMemory( pMac->hHdd, pRsp->selfMacAddr, pDelStaSelfParams->selfMacAddr, sizeof(tSirMacAddr) ); palFreeMemory( pMac->hHdd, (tANI_U8 *)pDelStaSelfParams); - limMsgQ->bodyptr = NULL; mmhMsg.type = eWNI_SME_DEL_STA_SELF_RSP; mmhMsg.bodyptr = pRsp; diff --git a/drivers/staging/prima/CORE/MAC/src/pe/pmm/pmmApi.c b/drivers/staging/prima/CORE/MAC/src/pe/pmm/pmmApi.c index 7d94b57facd..d280b6336f2 100644 --- a/drivers/staging/prima/CORE/MAC/src/pe/pmm/pmmApi.c +++ b/drivers/staging/prima/CORE/MAC/src/pe/pmm/pmmApi.c @@ -883,7 +883,7 @@ void pmmExitBmpsResponseHandler(tpAniSirGlobal pMac, tpSirMsgQ limMsg) if((psessionEntry = peFindSessionBySessionId(pMac,PowersavesessionId))==NULL) { - pmmLog(pMac, LOGP,FL("Session Does not exist for given sessionID")); + limLog(pMac, LOGP,FL("Session Does not exist for given sessionID")); return; } @@ -994,7 +994,7 @@ void pmmMissedBeaconHandler(tpAniSirGlobal pMac) if((psessionEntry = peFindSessionBySessionId(pMac,pwrSaveSessionId))==NULL) { - pmmLog(pMac, LOGE,FL("Session Does not exist for given sessionID")); + limLog(pMac, LOGE,FL("Session Does not exist for given sessionID")); return; } @@ -1089,8 +1089,7 @@ void pmmExitBmpsIndicationHandler(tpAniSirGlobal pMac, tANI_U8 mode, eHalStatus if(psessionEntry == NULL) { - PELOGE(pmmLog(pMac, LOGE, - FL("Session does Not exist with given sessionId :%d "),powersavesessionId);) + PELOGE(limLog(pMac, LOGE,FL("Session does Not exist with given sessionId :%d "),powersavesessionId);) return; } @@ -1855,7 +1854,7 @@ void pmmEnterUapsdResponseHandler(tpAniSirGlobal pMac, tpSirMsgQ limMsg) if((psessionEntry = peFindSessionBySessionId(pMac,PowersavesessionId))==NULL) { - pmmLog(pMac, LOGP,FL("Session Does not exist for given sessionID")); + limLog(pMac, LOGP,FL("Session Does not exist for given sessionID")); return; } @@ -1995,7 +1994,7 @@ void pmmExitUapsdResponseHandler(tpAniSirGlobal pMac, tpSirMsgQ limMsg) PowersavesessionId = pMac->pmm.sessionId; if((psessionEntry = peFindSessionBySessionId(pMac,PowersavesessionId))==NULL) { - pmmLog(pMac, LOGP,FL("Session Does not exist for given sessionID")); + limLog(pMac, LOGP,FL("Session Does not exist for given sessionID")); return; } @@ -2154,7 +2153,7 @@ void pmmEnterWowlRequestHandler(tpAniSirGlobal pMac, tpSirMsgQ pMsg) pSmeWowlParams = (tpSirSmeWowlEnterParams)(pMbMsg->data); if (NULL == pSmeWowlParams) { - pmmLog(pMac, LOGE, + limLog(pMac, LOGE, FL("NULL message received")); return; } @@ -2163,7 +2162,7 @@ void pmmEnterWowlRequestHandler(tpAniSirGlobal pMac, tpSirMsgQ pMsg) &peSessionId); if (NULL == pSessionEntry) { - pmmLog(pMac, LOGE, + limLog(pMac, LOGE, FL("session does not exist for given BSSId")); goto end; } @@ -2211,42 +2210,42 @@ void pmmEnterWowlRequestHandler(tpAniSirGlobal pMac, tpSirMsgQ pMsg) if(wlan_cfgGetInt(pMac, WNI_CFG_WOWLAN_UCAST_PATTERN_FILTER_ENABLE, &cfgValue) != eSIR_SUCCESS) { - pmmLog(pMac, LOGP, FL("cfgGet failed for WNI_CFG_WOWLAN_UCAST_PATTERN_FILTER_ENABLE")); + limLog(pMac, LOGP, FL("cfgGet failed for WNI_CFG_WOWLAN_UCAST_PATTERN_FILTER_ENABLE")); goto end; } pHalWowlParams->ucUcastPatternFilteringEnable = (tANI_U8)cfgValue; if(wlan_cfgGetInt(pMac, WNI_CFG_WOWLAN_CHANNEL_SWITCH_ENABLE, &cfgValue) != eSIR_SUCCESS) { - pmmLog(pMac, LOGP, FL("cfgGet failed for WNI_CFG_WOWLAN_CHANNEL_SWITCH_ENABLE")); + limLog(pMac, LOGP, FL("cfgGet failed for WNI_CFG_WOWLAN_CHANNEL_SWITCH_ENABLE")); goto end; } pHalWowlParams->ucWowChnlSwitchRcv = (tANI_U8)cfgValue; if(wlan_cfgGetInt(pMac, WNI_CFG_WOWLAN_DEAUTH_ENABLE, &cfgValue) != eSIR_SUCCESS) { - pmmLog(pMac, LOGP, FL("cfgGet failed for WNI_CFG_WOWLAN_DEAUTH_ENABLE ")); + limLog(pMac, LOGP, FL("cfgGet failed for WNI_CFG_WOWLAN_DEAUTH_ENABLE ")); goto end; } pHalWowlParams->ucWowDeauthRcv = (tANI_U8)cfgValue; if(wlan_cfgGetInt(pMac, WNI_CFG_WOWLAN_DISASSOC_ENABLE, &cfgValue) != eSIR_SUCCESS) { - pmmLog(pMac, LOGP, FL("cfgGet failed for WNI_CFG_WOWLAN_DEAUTH_ENABLE ")); + limLog(pMac, LOGP, FL("cfgGet failed for WNI_CFG_WOWLAN_DEAUTH_ENABLE ")); goto end; } pHalWowlParams->ucWowDisassocRcv = (tANI_U8)cfgValue; if(wlan_cfgGetInt(pMac, WNI_CFG_WOWLAN_MAX_MISSED_BEACON, &cfgValue) != eSIR_SUCCESS) { - pmmLog(pMac, LOGP, FL("cfgGet failed for WNI_CFG_WOWLAN_MAX_MISSED_BEACON ")); + limLog(pMac, LOGP, FL("cfgGet failed for WNI_CFG_WOWLAN_MAX_MISSED_BEACON ")); goto end; } pHalWowlParams->ucWowMaxMissedBeacons = (tANI_U8)cfgValue; if(wlan_cfgGetInt(pMac, WNI_CFG_WOWLAN_MAX_SLEEP_PERIOD, &cfgValue) != eSIR_SUCCESS) { - pmmLog(pMac, LOGP, FL("cfgGet failed for WNI_CFG_WOWLAN_MAX_SLEEP_PERIOD ")); + limLog(pMac, LOGP, FL("cfgGet failed for WNI_CFG_WOWLAN_MAX_SLEEP_PERIOD ")); goto end; } pHalWowlParams->ucWowMaxSleepUsec = (tANI_U8)cfgValue; diff --git a/drivers/staging/prima/CORE/MAC/src/pe/pmm/pmmDebug.c b/drivers/staging/prima/CORE/MAC/src/pe/pmm/pmmDebug.c index d176c3aba5b..32f50088034 100644 --- a/drivers/staging/prima/CORE/MAC/src/pe/pmm/pmmDebug.c +++ b/drivers/staging/prima/CORE/MAC/src/pe/pmm/pmmDebug.c @@ -53,23 +53,23 @@ ========================================================================*/ -#include "vos_trace.h" #include "pmmDebug.h" -#define LOG_SIZE 256 -void pmmLog(tpAniSirGlobal pMac, tANI_U32 loglevel, const char *pString, ...) - { - VOS_TRACE_LEVEL vosDebugLevel; - char logBuffer[LOG_SIZE]; - va_list marker; +void pmmLog(tpAniSirGlobal pMac, tANI_U32 loglevel, const char *pString,...) +{ +#ifdef WLAN_DEBUG + // Verify against current log level + if ( loglevel > pMac->utils.gLogDbgLevel[LOG_INDEX_FOR_MODULE( SIR_PMM_MODULE_ID )] ) + return; + else + { + va_list marker; - /* getting proper Debug level */ - vosDebugLevel = getVosDebugLevel(loglevel); + va_start( marker, pString ); /* Initialize variable arguments. */ - /* extracting arguments from pstring */ - va_start( marker, pString ); - vsnprintf(logBuffer, LOG_SIZE, pString, marker); - - VOS_TRACE(VOS_MODULE_ID_PMC, vosDebugLevel, "%s", logBuffer); - va_end( marker ); - } + logDebug(pMac, SIR_PMM_MODULE_ID, loglevel, pString, marker); + + va_end( marker ); /* Reset variable arguments. */ + } +#endif +} diff --git a/drivers/staging/prima/CORE/MAC/src/pe/rrm/rrmApi.c b/drivers/staging/prima/CORE/MAC/src/pe/rrm/rrmApi.c index 13713873b95..29987c52ec1 100644 --- a/drivers/staging/prima/CORE/MAC/src/pe/rrm/rrmApi.c +++ b/drivers/staging/prima/CORE/MAC/src/pe/rrm/rrmApi.c @@ -43,16 +43,13 @@ /**========================================================================= - - \file rrmApi.c - - \brief implementation for PE RRM APIs - - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - -========================================================================*/ + + \file rrmApi.c + + \brief implementation for PE RRM APIs + + + ========================================================================*/ /* $Header$ */ @@ -275,7 +272,7 @@ rrmSetMaxTxPowerRsp ( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ ) * @return None */ tSirRetStatus -rrmProcessLinkMeasurementRequest( tpAniSirGlobal pMac, +rrmProcessLinkMeasurementRequest( tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tDot11fLinkMeasurementRequest *pLinkReq, tpPESession pSessionEntry ) @@ -285,7 +282,7 @@ rrmProcessLinkMeasurementRequest( tpAniSirGlobal pMac, v_S7_t currentRSSI = 0; #if defined WLAN_VOWIFI_DEBUG - PELOG1(limLog( pMac, LOG1, "Received Link measurement request");) + PELOGE(limLog( pMac, LOGE, "Received Link measurement request");) #endif if( pRxPacketInfo == NULL || pLinkReq == NULL || pSessionEntry == NULL ) { @@ -293,67 +290,22 @@ rrmProcessLinkMeasurementRequest( tpAniSirGlobal pMac, return eSIR_FAILURE; } pHdr = WDA_GET_RX_MAC_HEADER( pRxPacketInfo ); - - if( (uint8)(pSessionEntry->maxTxPower) != pLinkReq->MaxTxPower.maxTxPower ) - { - PELOGW(limLog( pMac, - LOGW, - FL(" maxTx power in link request is not same as local... " - " Local = %d LinkReq = %d"), - pSessionEntry->maxTxPower, - pLinkReq->MaxTxPower.maxTxPower );) - if( (MIN_STA_PWR_CAP_DBM <= pLinkReq->MaxTxPower.maxTxPower) && - (MAX_STA_PWR_CAP_DBM >= pLinkReq->MaxTxPower.maxTxPower) ) - { - LinkReport.txPower = pLinkReq->MaxTxPower.maxTxPower; - } - else if( MIN_STA_PWR_CAP_DBM > pLinkReq->MaxTxPower.maxTxPower ) - { - LinkReport.txPower = MIN_STA_PWR_CAP_DBM; - } - else if( MAX_STA_PWR_CAP_DBM < pLinkReq->MaxTxPower.maxTxPower ) - { - LinkReport.txPower = MAX_STA_PWR_CAP_DBM; - } - - if( (LinkReport.txPower != (uint8)(pSessionEntry->maxTxPower)) && - (eSIR_SUCCESS == rrmSendSetMaxTxPowerReq ( pMac, - (tPowerdBm)(LinkReport.txPower), - pSessionEntry)) ) - { - pSessionEntry->maxTxPower = (tPowerdBm)(LinkReport.txPower); - } - } - else +#if defined WLAN_VOWIFI_DEBUG + if( pSessionEntry->maxTxPower != (tPowerdBm) pLinkReq->MaxTxPower.maxTxPower ) { - if( (MIN_STA_PWR_CAP_DBM <= (uint8)(pSessionEntry->maxTxPower)) && - (MAX_STA_PWR_CAP_DBM >= (uint8)(pSessionEntry->maxTxPower)) ) - { - LinkReport.txPower = (uint8)(pSessionEntry->maxTxPower); - } - else if( MIN_STA_PWR_CAP_DBM > (uint8)(pSessionEntry->maxTxPower) ) - { - LinkReport.txPower = MIN_STA_PWR_CAP_DBM; - } - else if( MAX_STA_PWR_CAP_DBM < (uint8)(pSessionEntry->maxTxPower) ) - { - LinkReport.txPower = MAX_STA_PWR_CAP_DBM; - } + PELOGE(limLog( pMac, LOGE, FL(" maxTx power in link request is not same as local...Local = %d LinkReq = %d"), + pSessionEntry->maxTxPower, pLinkReq->MaxTxPower.maxTxPower );) } - PELOGW(limLog( pMac, - LOGW, - FL(" maxTx power in link request is not same as local... " - " Local = %d Link Report TxPower = %d"), - pSessionEntry->maxTxPower, - LinkReport.txPower );) +#endif LinkReport.dialogToken = pLinkReq->DialogToken.token; + LinkReport.txPower = pSessionEntry->txMgmtPower; LinkReport.rxAntenna = 0; LinkReport.txAntenna = 0; currentRSSI = WDA_GET_RX_RSSI_DB(pRxPacketInfo); #if defined WLAN_VOWIFI_DEBUG - PELOG1(limLog( pMac, LOG1, "Received Link report frame with %d", currentRSSI);) + PELOGE(limLog( pMac, LOGE, "Received Link report frame with %d", currentRSSI);) #endif // 2008 11k spec reference: 18.4.8.5 RCPI Measurement @@ -367,7 +319,7 @@ rrmProcessLinkMeasurementRequest( tpAniSirGlobal pMac, LinkReport.rsni = WDA_GET_RX_SNR(pRxPacketInfo); #if defined WLAN_VOWIFI_DEBUG - PELOG1(limLog( pMac, LOG1, "Sending Link report frame");) + PELOGE(limLog( pMac, LOGE, "Sending Link report frame");) #endif return limSendLinkReportActionFrame( pMac, &LinkReport, pHdr->sa, pSessionEntry ); @@ -802,149 +754,107 @@ rrmProcessBeaconReportXmit( tpAniSirGlobal pMac, tpSirBeaconReportXmitInd pBcnReport) { tSirRetStatus status = eSIR_SUCCESS; - tSirMacRadioMeasureReport *pReport; + tSirMacRadioMeasureReport report, *pReport; tpRRMReq pCurrentReq = pMac->rrm.rrmPEContext.pCurrentReq; tpPESession pSessionEntry ; tANI_U8 sessionId; - v_U8_t flagBSSPresent = FALSE, bssDescCnt = 0; + v_U8_t flagBSSPresent = FALSE; #if defined WLAN_VOWIFI_DEBUG PELOGE(limLog( pMac, LOGE, "Received beacon report xmit indication");) #endif - - - if (NULL == pBcnReport) - { - PELOGE(limLog( pMac, LOGE, - "Received pBcnReport is NULL in PE");) + if(NULL == pBcnReport) return eSIR_FAILURE; - } - if (NULL == pCurrentReq) + if ( pCurrentReq == NULL ) { - PELOGE(limLog( pMac, LOGE, - "Received report xmit while there is no request pending in PE");) + PELOGE(limLog( pMac, LOGE, "Received report xmit while there is no request pending in PE");) return eSIR_FAILURE; } - - if (NULL == (pSessionEntry = peFindSessionByBssid(pMac, - pBcnReport->bssId, - &sessionId))) + if ((pSessionEntry = peFindSessionByBssid(pMac,pBcnReport->bssId,&sessionId))==NULL) { PELOGE(limLog(pMac, LOGE,FL("session does not exist for given bssId"));) return eSIR_FAILURE; } - pReport = vos_mem_malloc(pBcnReport->numBssDesc * - sizeof(tSirMacRadioMeasureReport)); + pReport = &report; + palZeroMemory( pMac->hHdd, pReport, sizeof(tSirMacRadioMeasureReport) ); + //Prepare the beacon report and send it to the peer. + pReport->token = pBcnReport->uDialogToken; + pReport->refused = 0; + pReport->incapable = 0; + pReport->type = SIR_MAC_RRM_BEACON_TYPE; - if (NULL == pReport) + //If the scan result is NULL then send report request with option subelement as NULL.. + if ( NULL != pBcnReport->pBssDescription[0] ) { - PELOGE(limLog(pMac, LOGE,FL("RRM Report is NULL, allocation failed"));) - return eSIR_FAILURE; + flagBSSPresent = TRUE; } - vos_mem_zero( pReport, - pBcnReport->numBssDesc * sizeof(tSirMacRadioMeasureReport) ); - - for (bssDescCnt = 0; bssDescCnt < pBcnReport->numBssDesc; bssDescCnt++) + //Valid response is included if the size of beacon xmit is == size of beacon xmit ind + ies + if ( pBcnReport->length >= sizeof( tSirBeaconReportXmitInd ) ) { - //Prepare the beacon report and send it to the peer. - pReport[bssDescCnt].token = pBcnReport->uDialogToken; - pReport[bssDescCnt].refused = 0; - pReport[bssDescCnt].incapable = 0; - pReport[bssDescCnt].type = SIR_MAC_RRM_BEACON_TYPE; - - //If the scan result is NULL then send report request with - //option subelement as NULL.. - if ( NULL != pBcnReport->pBssDescription[bssDescCnt] ) - { - flagBSSPresent = TRUE; - } - - //Valid response is included if the size of beacon xmit - //is == size of beacon xmit ind + ies - if ( pBcnReport->length >= sizeof( tSirBeaconReportXmitInd ) ) - { - pReport[bssDescCnt].report.beaconReport.regClass = pBcnReport->regClass; - if ( flagBSSPresent ) - { - pReport[bssDescCnt].report.beaconReport.channel = - pBcnReport->pBssDescription[bssDescCnt]->channelId; - vos_mem_copy( pReport[bssDescCnt].report.beaconReport.measStartTime, - pBcnReport->pBssDescription[bssDescCnt]->startTSF, - sizeof( pBcnReport->pBssDescription[bssDescCnt]->startTSF) ); - pReport[bssDescCnt].report.beaconReport.measDuration = - SYS_MS_TO_TU(pBcnReport->duration); - pReport[bssDescCnt].report.beaconReport.phyType = - pBcnReport->pBssDescription[bssDescCnt]->nwType; - pReport[bssDescCnt].report.beaconReport.bcnProbeRsp = 1; - pReport[bssDescCnt].report.beaconReport.rsni = - pBcnReport->pBssDescription[bssDescCnt]->sinr; - pReport[bssDescCnt].report.beaconReport.rcpi = - pBcnReport->pBssDescription[bssDescCnt]->rssi; - - pReport[bssDescCnt].report.beaconReport.antennaId = 0; - pReport[bssDescCnt].report.beaconReport.parentTSF = - pBcnReport->pBssDescription[bssDescCnt]->parentTSF; - vos_mem_copy( pReport[bssDescCnt].report.beaconReport.bssid, - pBcnReport->pBssDescription[bssDescCnt]->bssId, - sizeof(tSirMacAddr)); - } - - switch ( pCurrentReq->request.Beacon.reportingDetail ) - { - case BEACON_REPORTING_DETAIL_NO_FF_IE: - //0 No need to include any elements. + pReport->report.beaconReport.regClass = pBcnReport->regClass; + if ( flagBSSPresent ) + { + pReport->report.beaconReport.channel = pBcnReport->pBssDescription[0]->channelId; + palCopyMemory( pMac->hHdd, pReport->report.beaconReport.measStartTime, + pBcnReport->pBssDescription[0]->startTSF, + sizeof( pBcnReport->pBssDescription[0]->startTSF) ); + pReport->report.beaconReport.measDuration = SYS_MS_TO_TU(pBcnReport->duration); + pReport->report.beaconReport.phyType = pBcnReport->pBssDescription[0]->nwType; + pReport->report.beaconReport.bcnProbeRsp = 1; + pReport->report.beaconReport.rsni = pBcnReport->pBssDescription[0]->sinr; + pReport->report.beaconReport.rcpi = pBcnReport->pBssDescription[0]->rssi; + + pReport->report.beaconReport.antennaId = 0; + pReport->report.beaconReport.parentTSF = pBcnReport->pBssDescription[0]->parentTSF; + palCopyMemory(pMac->hHdd, pReport->report.beaconReport.bssid, + pBcnReport->pBssDescription[0]->bssId, sizeof(tSirMacAddr)); + } + + switch ( pCurrentReq->request.Beacon.reportingDetail ) + { + case BEACON_REPORTING_DETAIL_NO_FF_IE: //0 No need to include any elements. #if defined WLAN_VOWIFI_DEBUG - PELOGE(limLog(pMac, LOGE, "No reporting detail requested");) + PELOGE(limLog(pMac, LOGE, "No reporting detail requested");) #endif - break; - case BEACON_REPORTING_DETAIL_ALL_FF_REQ_IE: - //1: Include all FFs and Requested Ies. + break; + case BEACON_REPORTING_DETAIL_ALL_FF_REQ_IE: //1: Include all FFs and Requested Ies. #if defined WLAN_VOWIFI_DEBUG - PELOGE(limLog(pMac, LOGE, - "Only requested IEs in reporting detail requested");) + PELOGE(limLog(pMac, LOGE, "Only requested IEs in reporting detail requested");) #endif - if ( flagBSSPresent ) - { - rrmFillBeaconIes( pMac, - (tANI_U8*) &pReport[bssDescCnt].report.beaconReport.Ies[0], - (tANI_U8*) &pReport[bssDescCnt].report.beaconReport.numIes, - BEACON_REPORT_MAX_IES, - pCurrentReq->request.Beacon.reqIes.pElementIds, - pCurrentReq->request.Beacon.reqIes.num, - pBcnReport->pBssDescription[bssDescCnt] ); - } + if ( flagBSSPresent ) + { + rrmFillBeaconIes( pMac, (tANI_U8*) &pReport->report.beaconReport.Ies[0], + (tANI_U8*) &pReport->report.beaconReport.numIes, BEACON_REPORT_MAX_IES, + pCurrentReq->request.Beacon.reqIes.pElementIds, pCurrentReq->request.Beacon.reqIes.num, + pBcnReport->pBssDescription[0] ); + } - break; - case BEACON_REPORTING_DETAIL_ALL_FF_IE: - //2 / default - Include all FFs and all Ies. - default: + break; + case BEACON_REPORTING_DETAIL_ALL_FF_IE: //2 / default - Include all FFs and all Ies. + default: #if defined WLAN_VOWIFI_DEBUG - PELOGE(limLog(pMac, LOGE, "Default all IEs and FFs");) + PELOGE(limLog(pMac, LOGE, "Default all IEs and FFs");) #endif - if ( flagBSSPresent ) - { - rrmFillBeaconIes( pMac, - (tANI_U8*) &pReport[bssDescCnt].report.beaconReport.Ies[0], - (tANI_U8*) &pReport[bssDescCnt].report.beaconReport.numIes, - BEACON_REPORT_MAX_IES, + if ( flagBSSPresent ) + { + rrmFillBeaconIes( pMac, (tANI_U8*) &pReport->report.beaconReport.Ies[0], + (tANI_U8*) &pReport->report.beaconReport.numIes, BEACON_REPORT_MAX_IES, NULL, 0, - pBcnReport->pBssDescription[bssDescCnt] ); - } - break; - } - } - } + pBcnReport->pBssDescription[0] ); + } + break; + } #if defined WLAN_VOWIFI_DEBUG - PELOGE(limLog( pMac, LOGE, "Sending Action frame ");) + PELOGE(limLog( pMac, LOGE, "Sending Action frame ");) #endif - limSendRadioMeasureReportActionFrame( pMac, pCurrentReq->dialog_token, bssDescCnt, + limSendRadioMeasureReportActionFrame( pMac, pCurrentReq->dialog_token, 1, pReport, pBcnReport->bssId, pSessionEntry ); - + } if( pBcnReport->fMeasureDone ) { @@ -952,9 +862,6 @@ rrmProcessBeaconReportXmit( tpAniSirGlobal pMac, rrmCleanup(pMac); } - - vos_mem_free(pReport); - return status; } diff --git a/drivers/staging/prima/CORE/MAC/src/pe/sch/schBeaconGen.c b/drivers/staging/prima/CORE/MAC/src/pe/sch/schBeaconGen.c index 61962eca41c..a846bc002b9 100644 --- a/drivers/staging/prima/CORE/MAC/src/pe/sch/schBeaconGen.c +++ b/drivers/staging/prima/CORE/MAC/src/pe/sch/schBeaconGen.c @@ -118,7 +118,7 @@ tSirRetStatus schAppendAddnIE(tpAniSirGlobal pMac, tpPESession psessionEntry, if((status = wlan_cfgGetInt(pMac, WNI_CFG_PROBE_RSP_BCN_ADDNIE_FLAG, &present)) != eSIR_SUCCESS) { - schLog(pMac, LOGP, FL("Unable to get WNI_CFG_PROBE_RSP_BCN_ADDNIE_FLAG")); + limLog(pMac, LOGP, FL("Unable to get WNI_CFG_PROBE_RSP_BCN_ADDNIE_FLAG")); return status; } @@ -127,7 +127,7 @@ tSirRetStatus schAppendAddnIE(tpAniSirGlobal pMac, tpPESession psessionEntry, if((status = wlan_cfgGetStrLen(pMac, WNI_CFG_PROBE_RSP_BCN_ADDNIE_DATA, &len)) != eSIR_SUCCESS) { - schLog(pMac, LOGP, + limLog(pMac, LOGP, FL("Unable to get WNI_CFG_PROBE_RSP_BCN_ADDNIE_DATA length")); return status; } @@ -157,7 +157,7 @@ tSirRetStatus schAppendAddnIE(tpAniSirGlobal pMac, tpPESession psessionEntry, } else { - schLog(pMac, LOGE, + limLog(pMac, LOGE, FL("Not able to insert NoA because of length constraint")); } } @@ -348,7 +348,7 @@ tSirRetStatus schSetFixedBeaconFields(tpAniSirGlobal pMac,tpPESession psessionEn #ifdef WLAN_FEATURE_11AC if(psessionEntry->vhtCapability) { - schLog( pMac, LOGW, FL("Populate VHT IEs in Beacon")); + limLog( pMac, LOGW, FL("Populate VHT IEs in Beacon")); PopulateDot11fVHTCaps( pMac, &pBcn2->VHTCaps ); PopulateDot11fVHTOperation( pMac, &pBcn2->VHTOperation); // we do not support multi users yet @@ -384,7 +384,7 @@ tSirRetStatus schSetFixedBeaconFields(tpAniSirGlobal pMac,tpPESession psessionEn else { if (wlan_cfgGetInt(pMac, (tANI_U16) WNI_CFG_WPS_ENABLE, &tmp) != eSIR_SUCCESS) - schLog(pMac, LOGP,"Failed to cfg get id %d", WNI_CFG_WPS_ENABLE ); + limLog(pMac, LOGP,"Failed to cfg get id %d", WNI_CFG_WPS_ENABLE ); wpsApEnable = tmp & WNI_CFG_WPS_ENABLE_AP; diff --git a/drivers/staging/prima/CORE/MAC/src/pe/sch/schBeaconProcess.c b/drivers/staging/prima/CORE/MAC/src/pe/sch/schBeaconProcess.c index 054326ca220..4a49d7490d2 100644 --- a/drivers/staging/prima/CORE/MAC/src/pe/sch/schBeaconProcess.c +++ b/drivers/staging/prima/CORE/MAC/src/pe/sch/schBeaconProcess.c @@ -357,7 +357,6 @@ static void __schBeaconProcessForSession( tpAniSirGlobal pMac, tPowerdBm regMax = 0,maxTxPower = 0; #endif - vos_mem_zero(&beaconParams, sizeof(tUpdateBeaconParams)); beaconParams.paramChangeBitmap = 0; if(eLIM_STA_IN_IBSS_ROLE == psessionEntry->limSystemRole ) @@ -381,7 +380,7 @@ static void __schBeaconProcessForSession( tpAniSirGlobal pMac, */ if((tANI_U8) pBeacon->channelNumber != psessionEntry->currentOperChannel) { - PELOGE(schLog(pMac, LOGE, FL("Channel Change from %d --> %d - " + PELOGE(limLog(pMac, LOGE, FL("Channel Change from %d --> %d - " "Ignoring beacon!"), psessionEntry->currentOperChannel, pBeacon->channelNumber);) goto fail; @@ -457,7 +456,7 @@ static void __schBeaconProcessForSession( tpAniSirGlobal pMac, limSendEdcaParams(pMac, psessionEntry->gLimEdcaParamsActive, pStaDs->bssId, eANI_BOOLEAN_FALSE); } else - PELOGE(schLog(pMac, LOGE, FL("Self Entry missing in Hash Table"));) + PELOGE(limLog(pMac, LOGE, FL("Self Entry missing in Hash Table"));) } } else if( (pBeacon->qosCapabilityPresent && psessionEntry->limQosEnabled) && @@ -495,17 +494,17 @@ static void __schBeaconProcessForSession( tpAniSirGlobal pMac, operMode = pStaDs->vhtSupportedChannelWidthSet ? eHT_CHANNEL_WIDTH_80MHZ : pStaDs->htSupportedChannelWidthSet ? eHT_CHANNEL_WIDTH_40MHZ: eHT_CHANNEL_WIDTH_20MHZ; if( operMode != pBeacon->OperatingMode.chanWidth) { - PELOG1(schLog(pMac, LOG1, FL(" received Chanwidth %d, staIdx = %d"), + PELOG1(limLog(pMac, LOG1, FL(" received Chanwidth %d, staIdx = %d"), pBeacon->OperatingMode.chanWidth, pStaDs->staIndex);) - PELOG1(schLog(pMac, LOG1, FL(" MAC - %0x:%0x:%0x:%0x:%0x:%0x"), + PELOG1(limLog(pMac, LOG1, FL(" MAC - %0x:%0x:%0x:%0x:%0x:%0x"), pMh->sa[0], pMh->sa[1], pMh->sa[2], pMh->sa[3], pMh->sa[4], pMh->sa[5]);) - + if(pBeacon->OperatingMode.chanWidth == eHT_CHANNEL_WIDTH_80MHZ) { pStaDs->vhtSupportedChannelWidthSet = WNI_CFG_VHT_CHANNEL_WIDTH_80MHZ; @@ -558,7 +557,7 @@ static void __schBeaconProcessForSession( tpAniSirGlobal pMac, localCCXConstraint = pBeacon->ccxTxPwr.power_limit; maxTxPower = limGetMaxTxPower(maxTxPower, localCCXConstraint, pMac->roam.configParam.nTxPowerCap); } - schLog( pMac, LOG1, "RegMax = %d, localCcxCons = %d, MaxTx = %d", regMax, localCCXConstraint, maxTxPower ); + limLog( pMac, LOG1, "RegMax = %d, localCcxCons = %d, MaxTx = %d", regMax, localCCXConstraint, maxTxPower ); } #endif @@ -567,7 +566,7 @@ static void __schBeaconProcessForSession( tpAniSirGlobal pMac, //If maxTxPower is increased or decreased if( maxTxPower != psessionEntry->maxTxPower ) { - schLog( pMac, LOG1, "Local power constraint change..updating new maxTx power %d to HAL",maxTxPower); + limLog( pMac, LOG1, "Local power constraint change..updating new maxTx power %d to HAL",maxTxPower); if( limSendSetMaxTxPowerReq ( pMac, maxTxPower, psessionEntry ) == eSIR_SUCCESS ) psessionEntry->maxTxPower = maxTxPower; } @@ -622,7 +621,6 @@ void schBeaconProcess(tpAniSirGlobal pMac, tANI_U8* pRxPacketInfo, tpPESession p static tSchBeaconStruct beaconStruct; tUpdateBeaconParams beaconParams; tpPESession pAPSession = NULL; - vos_mem_zero(&beaconParams, sizeof(tUpdateBeaconParams)); beaconParams.paramChangeBitmap = 0; pMac->sch.gSchBcnRcvCnt++; diff --git a/drivers/staging/prima/CORE/MAC/src/pe/sch/schDebug.c b/drivers/staging/prima/CORE/MAC/src/pe/sch/schDebug.c index 058256005d1..5156b60aad7 100644 --- a/drivers/staging/prima/CORE/MAC/src/pe/sch/schDebug.c +++ b/drivers/staging/prima/CORE/MAC/src/pe/sch/schDebug.c @@ -53,27 +53,26 @@ */ -#include "vos_trace.h" #include "schDebug.h" -#define LOG_SIZE 256 -void schLog(tpAniSirGlobal pMac, tANI_U32 loglevel, const char *pString, ...) +void schLog(tpAniSirGlobal pMac, tANI_U32 loglevel, const char *pString,...) { +#ifdef WLAN_DEBUG + // Verify against current log level + if ( loglevel > pMac->utils.gLogDbgLevel[LOG_INDEX_FOR_MODULE( SIR_SCH_MODULE_ID )] ) + return; + else + { + va_list marker; - VOS_TRACE_LEVEL vosDebugLevel; - char logBuffer[LOG_SIZE]; - va_list marker; + va_start( marker, pString ); /* Initialize variable arguments. */ - /* getting proper Debug level*/ - vosDebugLevel = getVosDebugLevel(loglevel); - - /* extracting arguments from pstring */ - va_start( marker, pString ); - vsnprintf(logBuffer, LOG_SIZE, pString, marker); - VOS_TRACE(VOS_MODULE_ID_PE, vosDebugLevel, "%s", logBuffer); - va_end( marker ); - } + logDebug(pMac, SIR_SCH_MODULE_ID, loglevel, pString, marker); + va_end( marker ); /* Reset variable arguments. */ + } +#endif +} // -------------------------------------------------------------------- diff --git a/drivers/staging/prima/CORE/SAP/src/sapChSelect.c b/drivers/staging/prima/CORE/SAP/src/sapChSelect.c index 0fdd6da1bc6..c91ff5a7dae 100644 --- a/drivers/staging/prima/CORE/SAP/src/sapChSelect.c +++ b/drivers/staging/prima/CORE/SAP/src/sapChSelect.c @@ -217,23 +217,11 @@ int sapSetPreferredChannel(tANI_U8* ptr) } /*getting the first argument ie the number of channels*/ - if (sscanf(param, "%d ", &tempInt) != 1) - { - VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR, - "Cannot get number of channels from input", __func__); - return -EINVAL; - } + sscanf(param, "%d ", &tempInt); VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "Number of channel added are: %d", tempInt); - if (tempInt <= 0 || tempInt > 255) - { - VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR, - "Invalid Number of channel received", __func__); - return -EINVAL; - } - /*allocating space for the desired number of channels*/ pSapCtx->SapChnlList.channelList = (v_U8_t *)vos_mem_malloc(tempInt); @@ -269,21 +257,7 @@ int sapSetPreferredChannel(tANI_U8* ptr) return -EINVAL; } - if (sscanf(param, "%d ", &tempInt) != 1) - { - VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR, - "Cannot read channel number", __func__); - sapCleanupChannelList(); - return -EINVAL; - } - if (tempInt < 0 || tempInt > 255) - { - VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR, - "Invalid channel number received", __func__); - sapCleanupChannelList(); - return -EINVAL; - } - + sscanf(param, "%d ", &tempInt); pSapCtx->SapChnlList.channelList[j] = tempInt; VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, diff --git a/drivers/staging/prima/CORE/SME/inc/csrApi.h b/drivers/staging/prima/CORE/SME/inc/csrApi.h index 18d8c6791f2..84bea35733a 100644..100755 --- a/drivers/staging/prima/CORE/SME/inc/csrApi.h +++ b/drivers/staging/prima/CORE/SME/inc/csrApi.h @@ -199,16 +199,6 @@ typedef enum eCSR_SCAN_FOUND_PEER, }eCsrScanStatus; -/* Reason to abort the scan - * The reason can used later to decide whether to update the scan results - * to upper layer or not - */ -typedef enum -{ - eCSR_SCAN_ABORT_DEFAULT, - eCSR_SCAN_ABORT_DUE_TO_BAND_CHANGE, //Scan aborted due to band change -}eCsrAbortReason; - #define CSR_SCAN_TIME_DEFAULT 0 #define CSR_VALUE_IGNORED 0xFFFFFFFF #define CSR_RSN_PMKID_SIZE 16 @@ -297,7 +287,6 @@ typedef struct tagCsrScanRequest eCsrRequestType requestType; //11d scan or full scan tANI_BOOLEAN p2pSearch; tANI_BOOLEAN skipDfsChnlInP2pSearch; - tANI_BOOLEAN bcnRptReqScan; //is Scan issued by Beacon Report Request }tCsrScanRequest; typedef struct tagCsrBGScanRequest @@ -466,12 +455,14 @@ typedef enum #ifdef FEATURE_WLAN_LFR eCSR_ROAM_PMK_NOTIFY, #endif +//Begin fjdw67 Motorola, IKJB42MAIN-6385 - LFR roaming instrumentation #ifdef FEATURE_WLAN_LFR_METRICS eCSR_ROAM_PREAUTH_INIT_NOTIFY, eCSR_ROAM_PREAUTH_STATUS_SUCCESS, eCSR_ROAM_PREAUTH_STATUS_FAILURE, eCSR_ROAM_HANDOVER_SUCCESS, #endif +//End fjdw67 Motorola #ifdef FEATURE_WLAN_TDLS eCSR_ROAM_TDLS_STATUS_UPDATE, eCSR_ROAM_RESULT_MGMT_TX_COMPLETE_IND, @@ -863,13 +854,8 @@ typedef struct tagCsrRoamProfile tANI_U8 *pWAPIReqIE; //If not null, it has the IE byte stream for WAPI #endif /* FEATURE_WLAN_WAPI */ - //The byte count in the pAddIE for scan (at the time of join) - tANI_U32 nAddIEScanLength; - /* Additional IE information. - * It has the IE byte stream for additional IE, - * which can be WSC IE and/or P2P IE - */ - tANI_U8 addIEScan[SIR_MAC_MAX_IE_LENGTH+2]; //Additional IE information. + tANI_U32 nAddIEScanLength; //The byte count in the pAddIE for scan (at the time of join) + tANI_U8 *pAddIEScan; //If not null, it has the IE byte stream for additional IE, which can be WSC IE and/or P2P IE tANI_U32 nAddIEAssocLength; //The byte count in the pAddIE for assoc tANI_U8 *pAddIEAssoc; //If not null, it has the IE byte stream for additional IE, which can be WSC IE and/or P2P IE @@ -1090,10 +1076,9 @@ typedef struct tagCsrConfigParam //To enable/disable scanning 2.4Ghz channels twice on a single scan request from HDD tANI_BOOLEAN fScanTwice; #ifdef WLAN_FEATURE_11AC - tANI_U32 nVhtChannelWidth; - tANI_U8 enableTxBF; - tANI_U8 txBFCsnValue; - tANI_BOOLEAN enableVhtFor24GHz; + tANI_U32 nVhtChannelWidth; + tANI_U8 enableTxBF; + tANI_U8 txBFCsnValue; #endif /* @@ -1117,8 +1102,6 @@ typedef struct tagCsrConfigParam tANI_U8 enableTxLdpc; tANI_U8 isAmsduSupportInAMPDU; - tANI_U8 allowDFSChannelRoam; - }tCsrConfigParam; //Tush diff --git a/drivers/staging/prima/CORE/SME/inc/csrInternal.h b/drivers/staging/prima/CORE/SME/inc/csrInternal.h index fe999084df8..d2beb255ffb 100644 --- a/drivers/staging/prima/CORE/SME/inc/csrInternal.h +++ b/drivers/staging/prima/CORE/SME/inc/csrInternal.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2014, The Linux Foundation. All rights reserved. + * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -400,8 +400,6 @@ typedef struct tagScanCmd tCsrScanRequest scanRequest; tCsrBGScanRequest bgScanRequest; }u; - //This flag will be set while aborting the scan due to band change - tANI_BOOLEAN abortScanDueToBandChange; }tScanCmd; typedef struct tagRoamCmd @@ -646,12 +644,9 @@ typedef struct tagCsrConfig tANI_U32 nVhtChannelWidth; tANI_U8 txBFEnable; tANI_U8 txBFCsnValue; - tANI_BOOLEAN enableVhtFor24GHz; #endif tANI_U8 txLdpcEnable; - tANI_U8 isAmsduSupportInAMPDU; - tANI_U8 allowDFSChannelRoam; }tCsrConfig; typedef struct tagCsrChannelPowerInfo @@ -721,7 +716,6 @@ typedef struct tagCsrScanStruct v_REGDOMAIN_t domainIdDefault; //default regulatory domain v_REGDOMAIN_t domainIdCurrent; //current regulatory domain tCsrBssid currentCountryBssid; // Bssid for current country code - tANI_S8 currentCountryRSSI; // RSSI for current country code tANI_BOOLEAN f11dInfoApplied; tANI_BOOLEAN fCancelIdleScan; #ifdef FEATURE_WLAN_WAPI @@ -763,9 +757,6 @@ typedef struct tagCsrScanStruct tDblLinkList scanCmdPendingList; #endif tCsrChannel occupiedChannels; //This includes all channels on which candidate APs are found - tANI_S8 inScanResultBestAPRssi; - - csrScanCompleteCallback callback11dScanDone; }tCsrScanStruct; #ifdef FEATURE_WLAN_TDLS_INTERNAL @@ -892,11 +883,8 @@ typedef struct tagCsrRoamSession tANI_U32 nWapiRspIeLength; //the byte count for pWapiRspIE tANI_U8 *pWapiRspIE; //this contain the WAPI IE in beacon/probe rsp #endif /* FEATURE_WLAN_WAPI */ - tANI_U32 nAddIEScanLength; //length of addIeScan - /* This contains the additional IE in (unicast) - * probe request at the time of join - */ - tANI_U8 addIEScan[SIR_MAC_MAX_IE_LENGTH+2]; + tANI_U32 nAddIEScanLength; //the byte count of pAddIeScanIE; + tANI_U8 *pAddIEScan; //this contains the additional IE in (unicast) probe request at the time of join tANI_U32 nAddIEAssocLength; //the byte count for pAddIeAssocIE tANI_U8 *pAddIEAssoc; //this contains the additional IE in (re) assoc request @@ -919,8 +907,6 @@ typedef struct tagCsrRoamSession tBkidCandidateInfo BkidCandidateInfo[CSR_MAX_BKID_ALLOWED]; #endif tANI_BOOLEAN fWMMConnection; - tANI_BOOLEAN fQOSConnection; - #ifdef FEATURE_WLAN_BTAMP_UT_RF //To retry a join later when it fails if so desired tPalTimerHandle hTimerJoinRetry; @@ -995,7 +981,6 @@ typedef struct tagCsrRoamStruct tANI_U8 RoamRssiDiff; tANI_BOOLEAN isWESModeEnabled; #endif - tANI_U32 deauthRspStatus; }tCsrRoamStruct; @@ -1124,7 +1109,6 @@ void csrScanSuspendIMPS( tpAniSirGlobal pMac ); void csrScanResumeIMPS( tpAniSirGlobal pMac ); eHalStatus csrInitGetChannels(tpAniSirGlobal pMac); -eHalStatus csrScanFilterResults(tpAniSirGlobal pMac); eHalStatus csrSetModifyProfileFields(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamModifyProfileFields *pModifyProfileFields); diff --git a/drivers/staging/prima/CORE/SME/inc/sme_Api.h b/drivers/staging/prima/CORE/SME/inc/sme_Api.h index 6abf1367823..85ec534afd2 100644 --- a/drivers/staging/prima/CORE/SME/inc/sme_Api.h +++ b/drivers/staging/prima/CORE/SME/inc/sme_Api.h @@ -92,8 +92,6 @@ #define SME_INVALID_COUNTRY_CODE "XX" -//Macro to disable split scan -#define SME_DISABLE_SPLIT_SCAN 255 /*-------------------------------------------------------------------------- Type declarations ------------------------------------------------------------------------*/ @@ -441,17 +439,6 @@ eHalStatus sme_ScanGetResult(tHalHandle hHal, tANI_U8 sessionId, tCsrScanResultF \return eHalStatus ---------------------------------------------------------------------------*/ eHalStatus sme_ScanFlushResult(tHalHandle hHal, tANI_U8 sessionId); - -/* - * --------------------------------------------------------------------------- - * \fn sme_FilterScanResults - * \brief a wrapper function to request CSR to filter the scan results based - * on valid chennel list. - * \return eHalStatus - *--------------------------------------------------------------------------- - */ -eHalStatus sme_FilterScanResults(tHalHandle hHal, tANI_U8 sessionId); - eHalStatus sme_ScanFlushP2PResult(tHalHandle hHal, tANI_U8 sessionId); /* --------------------------------------------------------------------------- @@ -826,6 +813,25 @@ eHalStatus sme_CfgSetStr(tHalHandle hHal, tANI_U32 cfgId, tANI_U8 *pStr, tANI_U32 length, tCcmCfgSetCallback callback, eAniBoolean toBeSaved) ; + +/* --------------------------------------------------------------------------- + \fn sme_GetModifyProfileFields + \brief HDD or SME - QOS calls this function to get the current values of + connected profile fields, changing which can cause reassoc. + This function must be called after CFG is downloaded and STA is in connected + state. Also, make sure to call this function to get the current profile + fields before calling the reassoc. So that pModifyProfileFields will have + all the latest values plus the one(s) has been updated as part of reassoc + request. + \param pModifyProfileFields - pointer to the connected profile fields + changing which can cause reassoc + + \return eHalStatus + -------------------------------------------------------------------------------*/ +eHalStatus sme_GetModifyProfileFields(tHalHandle hHal, tANI_U8 sessionId, + tCsrRoamModifyProfileFields * pModifyProfileFields); + + /*-------------------------------------------------------------------------- \fn sme_SetConfigPowerSave \brief Wrapper fn to change power save configuration in SME (PMC) module. @@ -1079,18 +1085,6 @@ extern eHalStatus sme_RegisterPowerSaveCheck ( tANI_BOOLEAN (*checkRoutine) (void *checkContext), void *checkContext); /* --------------------------------------------------------------------------- - \fn sme_Register11dScanDoneCallback - \brief Register a routine of type csrScanCompleteCallback which is - called whenever an 11d scan is done - \param hHal - The handle returned by macOpen. - \param callback - 11d scan complete routine to be registered - \return eHalStatus - ---------------------------------------------------------------------------*/ -extern eHalStatus sme_Register11dScanDoneCallback ( - tHalHandle hHal, - csrScanCompleteCallback); - -/* --------------------------------------------------------------------------- \fn sme_DeregisterPowerSaveCheck \brief Deregister a power save check routine \param hHal - The handle returned by macOpen. @@ -1405,8 +1399,6 @@ typedef void ( *tSmeChangeCountryCallback)(void *pContext); \param pCountry New Country Code String - \param sendRegHint If we want to send reg hint to nl80211 - \return eHalStatus SUCCESS. FAILURE or RESOURCES The API finished and failed. @@ -1416,8 +1408,7 @@ eHalStatus sme_ChangeCountryCode( tHalHandle hHal, tSmeChangeCountryCallback callback, tANI_U8 *pCountry, void *pContext, - void* pVosContext, - tAniBool sendRegHint); + void* pVosContext ); /* --------------------------------------------------------------------------- @@ -1710,7 +1701,7 @@ eHalStatus sme_SetKeepAlive (tHalHandle hHal, tANI_U8 sessionId, VOS_STATUS_E_FAILURE - failure VOS_STATUS_SUCCESS success ---------------------------------------------------------------------------*/ -eHalStatus sme_AbortMacScan(tHalHandle hHal, eCsrAbortReason reason); +eHalStatus sme_AbortMacScan(tHalHandle hHal); /* ---------------------------------------------------------------------------- \fn sme_GetOperationChannel @@ -1896,7 +1887,7 @@ tANI_U8 sme_GetConcurrentOperationChannel( tHalHandle hHal ); VOS_STATUS_E_FAILURE - failure VOS_STATUS_SUCCESS success ---------------------------------------------------------------------------*/ -eHalStatus sme_AbortMacScan(tHalHandle hHal, eCsrAbortReason reason); +eHalStatus sme_AbortMacScan(tHalHandle hHal); /* --------------------------------------------------------------------------- \fn sme_GetCfgValidChannels @@ -1990,6 +1981,16 @@ eHalStatus sme_8023MulticastList(tHalHandle hHal, tANI_U8 sessionId, tpSirRcvFlt eHalStatus sme_ReceiveFilterSetFilter(tHalHandle hHal, tpSirRcvPktFilterCfgType pRcvPktFilterCfg, tANI_U8 sessionId); +// IKJB42MAIN-1244, Motorola, a19091 -- BEGIN +/* --------------------------------------------------------------------------- + \fn sme_ReceiveSetMcFilter + \brief API to set Receive Packet Filter from ISR context + \param tSirInvokeV6Filter - Receive Packet Filter callback param + \return eHalStatus + ---------------------------------------------------------------------------*/ +eHalStatus sme_ReceiveSetMcFilter(tSirInvokeV6Filter *filterConfig); +// IKJB42MAIN-1244, Motorola, a19091 -- END + /* --------------------------------------------------------------------------- \fn sme_GetFilterMatchCount \brief API to get D0 PC Filter Match Count @@ -2506,6 +2507,19 @@ v_U16_t sme_getEmptyScanRefreshPeriod(tHalHandle hHal); -------------------------------------------------------------------------*/ eHalStatus sme_UpdateEmptyScanRefreshPeriod(tHalHandle hHal, v_U16_t nEmptyScanRefreshPeriod); + +/* --------------------------------------------------------------------------- + \fn sme_UpdateEmptyScanMaxPeriod + \brief Update nEmptyScanMaxPeriod + This function is called through dynamic setConfig callback function + to configure nEmptyScanMaxPeriod + Usage: adb shell iwpriv wlan0 setConfig nEmptyScanMaxPeriod=[300 .. 1200] + \param hHal - HAL handle for device + \param nEmptyScanMaxPeriod - emptyScan duration. + \- return Success or failure + -------------------------------------------------------------------------*/ +eHalStatus sme_UpdateEmptyScanMaxPeriod(tHalHandle hHal, v_U32_t nEmptyScanMaxPeriod); + /* --------------------------------------------------------------------------- \fn sme_UpdateEmptyScanMaxPeriod \brief Update nEmptyScanMaxPeriod @@ -2716,26 +2730,14 @@ eHalStatus sme_UpdateRoamScanOffloadEnabled(tHalHandle hHal, v_BOOL_t nRoamScanO /* --------------------------------------------------------------------------- \fn sme_IsFeatureSupportedByFW - \brief Check if a feature is enabled by FW - - \param featEnumValue - Enumeration value of the feature to be checked. + \brief Check if an feature is enabled by FW + + \param feattEnumValue - Enumeration value of the feature to be checked. A value from enum placeHolderInCapBitmap \- return 1/0 (TRUE/FALSE) -------------------------------------------------------------------------*/ tANI_U8 sme_IsFeatureSupportedByFW(tANI_U8 featEnumValue); - -/* --------------------------------------------------------------------------- - \fn sme_IsFeatureSupportedByDriver - \brief Check if a feature is enabled by driver - - \param featEnumValue - Enumeration value of the feature to be checked. - A value from enum placeHolderInCapBitmap - - \- return 1/0 (TRUE/FALSE) - -------------------------------------------------------------------------*/ -tANI_U8 sme_IsFeatureSupportedByDriver(tANI_U8 featEnumValue); - #ifdef FEATURE_WLAN_TDLS /* --------------------------------------------------------------------------- \fn sme_SendTdlsMgmtFrame @@ -2842,29 +2844,32 @@ eHalStatus sme_SetPhyMode(tHalHandle hHal, eCsrPhyMode phyMode); -------------------------------------------------------------------------------*/ eCsrPhyMode sme_GetPhyMode(tHalHandle hHal); -/*-------------------------------------------------------------------------- - \brief sme_isSta_p2p_clientConnected() - a wrapper function to check if there - is any connected session . - This is a synchronous call - \param hHal - The handle returned by macOpen - \return VOS_STATUS - SME passed the request to CSR successfully. - Other status means SME is failed to send the request. - \sa - --------------------------------------------------------------------------*/ +/* + * sme API to find if any infra station or P2P-Client is connected + * return status +*/ VOS_STATUS sme_isSta_p2p_clientConnected(tHalHandle hHal); -/*-------------------------------------------------------------------------- - \brief sme_enable_disable_split_scan() - a wrapper function to set the split - scan parameter. - This is a synchronous call - \param hHal - The handle returned by macOpen - \return None. - \sa - --------------------------------------------------------------------------*/ -void sme_enable_disable_split_scan (tHalHandle hHal, tANI_U8 nNumStaChan, - tANI_U8 nNumP2PChan); +/*---------------------------------------------------------------------------- + + \brief sme_isHostFeatSupported() - SME interface to determine the given feature + is supported by HOST or not. + + \param featCap - Feature support -void smeGetCommandQStatus( tHalHandle hHal ); + \return 1 on feature supported, 0 on feature not supported. +-----------------------------------------------------------------------------*/ +tANI_U8 sme_isHostFeatSupported(tANI_U8 featCap); + +/*---------------------------------------------------------------------------- + + \brief sme_isFwFeatureSupported() - SME interface to determine the given feature + is supported by HOST or not. + + \param featCap - Feature support + + \return 1 on feature supported, 0 on feature not supported. +-----------------------------------------------------------------------------*/ +tANI_U8 sme_isFwFeatSupported(tANI_U8 featCap); -eHalStatus sme_RoamDelPMKIDfromCache( tHalHandle hHal, tANI_U8 sessionId, tANI_U8 *pBSSId ); #endif //#if !defined( __SME_API_H ) diff --git a/drivers/staging/prima/CORE/SME/inc/sme_Trace.h b/drivers/staging/prima/CORE/SME/inc/sme_Trace.h deleted file mode 100644 index ed2787f84b3..00000000000 --- a/drivers/staging/prima/CORE/SME/inc/sme_Trace.h +++ /dev/null @@ -1,131 +0,0 @@ -/* - * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved. - * - * Previously licensed under the ISC license by Qualcomm Atheros, Inc. - * - * - * Permission to use, copy, modify, and/or distribute this software for - * any purpose with or without fee is hereby granted, provided that the - * above copyright notice and this permission notice appear in all - * copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL - * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE - * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL - * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -/*********************************************************************** - sme_Trace.h - - \brief definition for trace related APIs - - \author Kiran Kumar Reddy CH L V - - Copyright (c) 2013 Qualcomm Atheros, Inc. - - All Rights Reserved. - - Qualcomm Atheros Confidential and Proprietary. - - ========================================================================*/ - -#ifndef __SME_TRACE_H__ -#define __SME_TRACE_H__ - - -#include "macTrace.h" - -#define NO_SESSION 0xFF -#define TRACE_CODE_SME_COMMAND 0xFF -enum { - TRACE_CODE_SME_RX_HDD_MSG_SCAN_REQ, - TRACE_CODE_SME_RX_HDD_MSG_SCAN_GET_RESULTS, - TRACE_CODE_SME_RX_HDD_MSG_CONNECT, - TRACE_CODE_SME_RX_HDD_MSG_SET_11DINFO, - TRACE_CODE_SME_RX_HDD_MSG_GET_SOFTAP_DOMAIN, - TRACE_CODE_SME_RX_HDD_MSG_SET_REGINFO, - TRACE_CODE_SME_RX_HDD_MSG_UPDATE_CHANNEL_CONFIG, - TRACE_CODE_SME_RX_HDD_MSG_UPDATE_CONFIG, - TRACE_CODE_SME_RX_HDD_MSG_HDDREADYIND, - TRACE_CODE_SME_RX_HDD_MSG_SCAN_FLUSH_RESULTS, - TRACE_CODE_SME_RX_HDD_MSG_SCAN_FLUSH_P2PRESULTS, - TRACE_CODE_SME_RX_HDD_MSG_SCAN_RESULT_GETFIRST, - TRACE_CODE_SME_RX_HDD_MSG_SCAN_RESULT_GETNEXT, - TRACE_CODE_SME_RX_HDD_MSG_SCAN_RESULT_PURGE, - TRACE_CODE_SME_RX_HDD_ROAM_REASSOC, - TRACE_CODE_SME_RX_HDD_ROAM_DISCONNECT, - TRACE_CODE_SME_RX_HDD_ROAM_GET_CONNECTPROFILE, - TRACE_CODE_SME_RX_HDD_ROAM_FREE_CONNECTPROFILE, - TRACE_CODE_SME_RX_HDD_ROAM_SET_PMKIDCACHE, - TRACE_CODE_SME_RX_HDD_GET_CONFIGPARAM, - TRACE_CODE_SME_RX_HDD_GET_MODPROFFIELDS, - TRACE_CODE_SME_RX_HDD_SET_CONFIG_PWRSAVE, - TRACE_CODE_SME_RX_HDD_GET_CONFIG_PWRSAVE, - TRACE_CODE_SME_RX_HDD_ENABLE_PWRSAVE, - TRACE_CODE_SME_RX_HDD_DISABLE_PWRSAVE, - TRACE_CODE_SME_RX_HDD_START_AUTO_BMPSTIMER, - TRACE_CODE_SME_RX_HDD_STOP_AUTO_BMPSTIMER, - TRACE_CODE_SME_RX_HDD_IS_PWRSAVE_ENABLED, - TRACE_CODE_SME_RX_HDD_REQUEST_FULLPOWER, - TRACE_CODE_SME_RX_HDD_REQUEST_BMPS, - TRACE_CODE_SME_RX_HDD_SET_DHCP_FLAG, - TRACE_CODE_SME_RX_HDD_REQUEST_STANDBY, - TRACE_CODE_SME_RX_HDD_WOWL_ADDBCAST_PATTERN, - TRACE_CODE_SME_RX_HDD_WOWL_DELBCAST_PATTERN, - TRACE_CODE_SME_RX_HDD_ENTER_WOWL, - TRACE_CODE_SME_RX_HDD_EXIT_WOWL, - TRACE_CODE_SME_RX_HDD_SET_KEY, - TRACE_CODE_SME_RX_HDD_REMOVE_KEY, - TRACE_CODE_SME_RX_HDD_GET_STATS, - TRACE_CODE_SME_RX_HDD_GET_CNTRYCODE, - TRACE_CODE_SME_RX_HDD_SET_CNTRYCODE, - TRACE_CODE_SME_RX_HDD_CHANGE_CNTRYCODE, - TRACE_CODE_SME_RX_HDD_BTC_SIGNALEVENT, - TRACE_CODE_SME_RX_HDD_BTC_SETCONFIG, - TRACE_CODE_SME_RX_HDD_BTC_GETCONFIG, - TRACE_CODE_SME_RX_HDD_SET_CFGPRIVACY, - TRACE_CODE_SME_RX_HDD_NEIGHBOR_REPORTREQ, - TRACE_CODE_SME_RX_HDD_DBG_READREG, - TRACE_CODE_SME_RX_HDD_DBG_WRITEREG, - TRACE_CODE_SME_RX_HDD_DBG_READMEM, - TRACE_CODE_SME_RX_HDD_DBG_WRITEMEM, - TRACE_CODE_SME_RX_HDD_OPEN_SESSION, - TRACE_CODE_SME_RX_HDD_CLOSE_SESSION, - TRACE_CODE_SME_RX_HDD_SET_HOSTOFFLOAD, - TRACE_CODE_SME_RX_HDD_SET_GTKOFFLOAD, - TRACE_CODE_SME_RX_HDD_GET_GTKOFFLOAD, - TRACE_CODE_SME_RX_HDD_SET_POWERPARAMS, - TRACE_CODE_SME_RX_HDD_ABORT_MACSCAN, - TRACE_CODE_SME_RX_HDD_REGISTER_MGMTFR, - TRACE_CODE_SME_RX_HDD_DEREGISTER_MGMTFR, - TRACE_CODE_SME_RX_HDD_REMAIN_ONCHAN, - TRACE_CODE_SME_RX_HDD_SEND_ACTION, - TRACE_CODE_SME_RX_HDD_CANCEL_REMAIN_ONCHAN, - TRACE_CODE_SME_RX_HDD_CONFIG_RXPFIL, - TRACE_CODE_SME_RX_HDD_CONFIG_SUSPENDIND, - TRACE_CODE_SME_RX_HDD_CONFIG_RESUMEREQ, - TRACE_CODE_SME_RX_HDD_SET_MAXTXPOW, - TRACE_CODE_SME_RX_HDD_SET_TXPOW, - TRACE_CODE_SME_RX_HDD_SET_TMLEVEL, - TRACE_CODE_SME_RX_HDD_CAPS_EXCH, - TRACE_CODE_SME_RX_HDD_DISABLE_CAP, - TRACE_CODE_SME_RX_HDD_GET_DEFCCNV, - TRACE_CODE_SME_RX_HDD_GET_CURCC, - TRACE_CODE_SME_RX_HDD_RESET_PW5G, - TRACE_CODE_SME_RX_HDD_UPDATE_RP5G, - TRACE_CODE_SME_RX_HDD_SET_ROAMIBAND, - TRACE_CODE_SME_RX_HDD_GET_ROAMIBAND, - TRACE_CODE_SME_RX_HDD_UPDATE_RSSIDIFF, - TRACE_CODE_SME_RX_HDD_UPDATE_IMMRSSIDIFF, - TRACE_CODE_SME_RX_HDD_UPDATE_FTENABLED, - TRACE_CODE_SME_RX_HDD_UPDATE_WESMODE, - TRACE_CODE_SME_RX_HDD_SET_SCANCTRL, -}; - -void smeTraceInit(tpAniSirGlobal pMac); -#endif //__SME_TRACE_H__ diff --git a/drivers/staging/prima/CORE/SME/inc/smsDebug.h b/drivers/staging/prima/CORE/SME/inc/smsDebug.h index ac6f4e3e2c3..6dd1ba1189c 100644 --- a/drivers/staging/prima/CORE/SME/inc/smsDebug.h +++ b/drivers/staging/prima/CORE/SME/inc/smsDebug.h @@ -61,6 +61,5 @@ #include "sirDebug.h" void smsLog(tpAniSirGlobal pMac, tANI_U32 loglevel, const char *pString,...); -void pmcLog(tpAniSirGlobal pMac, tANI_U32 loglevel, const char *pString,...); #endif // __HAL_DEBUG_H__ diff --git a/drivers/staging/prima/CORE/SME/src/QoS/sme_Qos.c b/drivers/staging/prima/CORE/SME/src/QoS/sme_Qos.c index f1db5eb8806..21bb864f43e 100644 --- a/drivers/staging/prima/CORE/SME/src/QoS/sme_Qos.c +++ b/drivers/staging/prima/CORE/SME/src/QoS/sme_Qos.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2014, The Linux Foundation. All rights reserved. + * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -39,13 +39,15 @@ * PERFORMANCE OF THIS SOFTWARE. */ - /**========================================================================= \file sme_Qos.c \brief implementation for SME QoS APIs + Copyright 2008 (c) Qualcomm, Incorporated. All Rights Reserved. + + Qualcomm Confidential and Proprietary. ========================================================================*/ /* $Header$ */ @@ -2980,7 +2982,6 @@ eHalStatus sme_QosProcessSetKeySuccessInd(tpAniSirGlobal pMac, v_U8_t sessionId, { VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_WARN, "########### Set Key Complete #############"); - (void)sme_QosProcessBufferedCmd(sessionId); return eHAL_STATUS_SUCCESS; } #endif @@ -5441,7 +5442,6 @@ eHalStatus sme_QosAggregateParams( } vos_mem_copy(&TspecInfo, pCurrent_Tspec_Info, sizeof(sme_QosWmmTspecInfo)); - TspecInfo.ts_info.psb = pInput_Tspec_Info->ts_info.psb; /*------------------------------------------------------------------------- APSD preference is only meaningful if service interval was set by app -------------------------------------------------------------------------*/ @@ -5997,7 +5997,7 @@ static eHalStatus sme_QosBufferExistingFlows(tpAniSirGlobal pMac, pEntry = csrLLPeekHead( &sme_QosCb.flow_list, VOS_FALSE ); if(!pEntry) { - VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO_HIGH, + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "%s: %d: Flow List empty, nothing to buffer", __func__, __LINE__); return eHAL_STATUS_FAILURE; diff --git a/drivers/staging/prima/CORE/SME/src/csr/csrApiRoam.c b/drivers/staging/prima/CORE/SME/src/csr/csrApiRoam.c index de4875f2801..ef11bbff354 100644 --- a/drivers/staging/prima/CORE/SME/src/csr/csrApiRoam.c +++ b/drivers/staging/prima/CORE/SME/src/csr/csrApiRoam.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2014, The Linux Foundation. All rights reserved. + * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -346,7 +346,7 @@ eHalStatus csrOpen(tpAniSirGlobal pMac) } smsLog( pMac, LOG1, FL(" country Code from nvRam %.2s"), pMac->scan.countryCodeDefault ); csrGetRegulatoryDomainForCountry(pMac, pMac->scan.countryCodeDefault, ®Id); - WDA_SetRegDomain(pMac, regId, eSIR_TRUE); + WDA_SetRegDomain(pMac, regId); pMac->scan.domainIdDefault = regId; pMac->scan.domainIdCurrent = pMac->scan.domainIdDefault; status = palCopyMemory(pMac->hHdd, pMac->scan.countryCodeCurrent, @@ -388,7 +388,7 @@ eHalStatus csrSetRegInfo(tHalHandle hHal, tANI_U8 *apCntryCode) smsLog( pMac, LOGE, FL(" fail to get regId for country Code %.2s"), apCntryCode ); return status; } - status = WDA_SetRegDomain(hHal, regId, eSIR_TRUE); + status = WDA_SetRegDomain(hHal, regId); if (status != eHAL_STATUS_SUCCESS) { smsLog( pMac, LOGE, FL(" fail to get regId for country Code %.2s"), apCntryCode ); @@ -971,6 +971,7 @@ static void initConfigParam(tpAniSirGlobal pMac) pMac->roam.configParam.neighborRoamConfig.neighborScanChanList.channelList[2] = 11; pMac->roam.configParam.neighborRoamConfig.nNeighborResultsRefreshPeriod = 20000; //20 seconds pMac->roam.configParam.neighborRoamConfig.nEmptyScanRefreshPeriod = 0; + pMac->roam.configParam.neighborRoamConfig.nEmptyScanMaxPeriod = 0; #endif #ifdef WLAN_FEATURE_11AC pMac->roam.configParam.nVhtChannelWidth = WNI_CFG_VHT_CHANNEL_WIDTH_80MHZ + 1; @@ -1598,12 +1599,9 @@ eHalStatus csrChangeDefaultConfigParam(tpAniSirGlobal pMac, tCsrConfigParam *pPa pMac->roam.configParam.nVhtChannelWidth = pParam->nVhtChannelWidth; pMac->roam.configParam.txBFEnable= pParam->enableTxBF; pMac->roam.configParam.txBFCsnValue = pParam->txBFCsnValue; - pMac->roam.configParam.enableVhtFor24GHz = pParam->enableVhtFor24GHz; #endif pMac->roam.configParam.txLdpcEnable = pParam->enableTxLdpc; - pMac->roam.configParam.isAmsduSupportInAMPDU = pParam->isAmsduSupportInAMPDU; - pMac->roam.configParam.allowDFSChannelRoam = pParam->allowDFSChannelRoam; } return status; @@ -1689,11 +1687,7 @@ eHalStatus csrGetConfigParam(tpAniSirGlobal pMac, tCsrConfigParam *pParam) pParam->txBFCsnValue = pMac->roam.configParam.txBFCsnValue; #endif pParam->enableTxLdpc = pMac->roam.configParam.txLdpcEnable; - - pParam->isAmsduSupportInAMPDU = - pMac->roam.configParam.isAmsduSupportInAMPDU; - pParam->allowDFSChannelRoam = - pMac->roam.configParam.allowDFSChannelRoam; + pParam->isAmsduSupportInAMPDU = pMac->roam.configParam.isAmsduSupportInAMPDU; csrSetChannels(pMac, pParam); status = eHAL_STATUS_SUCCESS; @@ -1989,8 +1983,6 @@ static eHalStatus CsrInit11dInfo(tpAniSirGlobal pMac, tCsr11dinfo *ps11dinfo) tSirMacChanInfo *pChanInfoStart; tANI_BOOLEAN applyConfig = TRUE; - pMac->scan.currentCountryRSSI = -128; - if(!ps11dinfo) { return (status); @@ -2867,9 +2859,10 @@ static eHalStatus csrRoamGetQosInfoFromBss(tpAniSirGlobal pMac, tSirBssDescripti } } while (0); + if (NULL != pIes) { - vos_mem_free(pIes); + palFreeMemory(pMac->hHdd, pIes); } return status; @@ -3106,7 +3099,8 @@ eHalStatus csrSetQosToCfg( tpAniSirGlobal pMac, tANI_U32 sessionId, eCsrMediaAcc } //save the WMM setting for later use pMac->roam.roamSession[sessionId].fWMMConnection = (tANI_BOOLEAN)WmeEnabled; - pMac->roam.roamSession[sessionId].fQOSConnection = (tANI_BOOLEAN)QoSEnabled; + status = ccmCfgSetInt(pMac, WNI_CFG_QOS_ENABLED, QoSEnabled, NULL, eANI_BOOLEAN_FALSE); + status = ccmCfgSetInt(pMac, WNI_CFG_WME_ENABLED, WmeEnabled, NULL, eANI_BOOLEAN_FALSE); return (status); } static eHalStatus csrGetRateSet( tpAniSirGlobal pMac, tCsrRoamProfile *pProfile, eCsrPhyMode phyMode, tSirBssDescription *pBssDesc, @@ -3507,11 +3501,6 @@ eHalStatus csrRoamSetBssConfigCfg(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrR //Make sure the 11d info from this BSSDesc can be applied pMac->scan.fAmbiguous11dInfoFound = eANI_BOOLEAN_FALSE; csrApplyCountryInformation( pMac, TRUE ); - - //Let's also update the below to make sure we don't update CC while - //connected to an AP which is advertising some CC - palCopyMemory(pMac->hHdd, pMac->scan.currentCountryBssid, - pBssDesc->bssId, sizeof(tSirMacAddr)); } if ((csrIs11dSupported (pMac)) && pIes) { @@ -5044,13 +5033,6 @@ static tANI_BOOLEAN csrRoamProcessResults( tpAniSirGlobal pMac, tSmeCmd *pComman roamInfo.pbFrames = pSession->connectedInfo.pbFrames; } } - /* Update the staId from the previous connected profile info - as the reassociation is triggred at SME/HDD */ - if( (eCsrHddIssuedReassocToSameAP == pCommand->u.roamCmd.roamReason) || - (eCsrSmeIssuedReassocToSameAP == pCommand->u.roamCmd.roamReason) ) - { - roamInfo.staId = pSession->connectedInfo.staId; - } #ifndef WLAN_MDM_CODE_REDUCTION_OPT // Indicate SME-QOS with reassoc success event, only after // copying the frames @@ -5520,15 +5502,6 @@ static tANI_BOOLEAN csrRoamProcessResults( tpAniSirGlobal pMac, tSmeCmd *pComman sme_QosCsrEventInd(pMac, (tANI_U8)sessionId, SME_QOS_CSR_DISCONNECT_IND, NULL); #endif csrRoamLinkDown(pMac, sessionId); - /* - *DelSta not done FW still in conneced state so dont - *issue IMPS req - */ - if (pMac->roam.deauthRspStatus == eSIR_SME_DEAUTH_STATUS) - { - smsLog(pMac, LOGW, FL("FW still in connected state ")); - break; - } csrScanStartIdleScan(pMac); break; case eCsrForcedIbssLeave: @@ -5666,19 +5639,15 @@ eHalStatus csrRoamCopyProfile(tpAniSirGlobal pMac, tCsrRoamProfile *pDstProfile, #endif /* FEATURE_WLAN_WAPI */ if(pSrcProfile->nAddIEScanLength) { - memset(pDstProfile->addIEScan, 0 , SIR_MAC_MAX_IE_LENGTH); - if ( SIR_MAC_MAX_IE_LENGTH >= pSrcProfile->nAddIEScanLength) - { - vos_mem_copy(pDstProfile->addIEScan, pSrcProfile->addIEScan, - pSrcProfile->nAddIEScanLength); - pDstProfile->nAddIEScanLength = pSrcProfile->nAddIEScanLength; - } - else + status = palAllocateMemory(pMac->hHdd, + (void **)&pDstProfile->pAddIEScan, pSrcProfile->nAddIEScanLength); + if(!HAL_STATUS_SUCCESS(status)) { - VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, - FL(" AddIEScanLength is not valid %u"), - pSrcProfile->nAddIEScanLength); + break; } + pDstProfile->nAddIEScanLength = pSrcProfile->nAddIEScanLength; + palCopyMemory(pMac->hHdd, pDstProfile->pAddIEScan, pSrcProfile->pAddIEScan, + pSrcProfile->nAddIEScanLength); } if(pSrcProfile->nAddIEAssocLength) { @@ -5767,11 +5736,6 @@ eHalStatus csrRoamCopyConnectedProfile(tpAniSirGlobal pMac, tANI_U32 sessionId, status = palAllocateMemory(pMac->hHdd, (void **)&pDstProfile->BSSIDs.bssid, sizeof(tCsrBssid)); if(!HAL_STATUS_SUCCESS(status)) { - smsLog( pMac, LOGE, - FL("failed to allocate memory for BSSID" - "%02x:%02x:%02x:%02x:%02x:%02x"), - pSrcProfile->bssid[0], pSrcProfile->bssid[1], pSrcProfile->bssid[2], - pSrcProfile->bssid[3], pSrcProfile->bssid[4], pSrcProfile->bssid[5]); break; } pDstProfile->BSSIDs.numOfBSSIDs = 1; @@ -5782,11 +5746,6 @@ eHalStatus csrRoamCopyConnectedProfile(tpAniSirGlobal pMac, tANI_U32 sessionId, status = palAllocateMemory(pMac->hHdd, (void **)&pDstProfile->SSIDs.SSIDList, sizeof(tCsrSSIDInfo)); if(!HAL_STATUS_SUCCESS(status)) { - smsLog( pMac, LOGE, - FL("failed to allocate memory for SSIDList" - "%02x:%02x:%02x:%02x:%02x:%02x"), - pSrcProfile->bssid[0], pSrcProfile->bssid[1], pSrcProfile->bssid[2], - pSrcProfile->bssid[3], pSrcProfile->bssid[4], pSrcProfile->bssid[5]); break; } pDstProfile->SSIDs.numOfSSIDs = 1; @@ -6082,7 +6041,7 @@ eHalStatus csrRoamConnect(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamProfi csrScanRemoveFreshScanCommand(pMac, sessionId); csrScanCancelIdleScan(pMac); //Only abort the scan if it is not used for other roam/connect purpose - csrScanAbortMacScan(pMac, eCSR_SCAN_ABORT_DEFAULT); + csrScanAbortMacScan(pMac); if (!vos_concurrent_sessions_running() && (VOS_STA_SAP_MODE == pProfile->csrPersona))//In case of AP mode we do not want idle mode scan { csrScanDisable(pMac); @@ -6860,8 +6819,7 @@ static eHalStatus csrRoamIssueReassociate( tpAniSirGlobal pMac, tANI_U32 session // Set the roaming substate to 'join attempt'... csrRoamSubstateChange( pMac, eCSR_ROAM_SUBSTATE_REASSOC_REQ, sessionId ); - VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, - FL(" calling csrSendJoinReqMsg (eWNI_SME_REASSOC_REQ)")); + smsLog(pMac, LOGE, FL(" calling csrSendJoinReqMsg (eWNI_SME_REASSOC_REQ)")); // attempt to Join this BSS... return csrSendJoinReqMsg( pMac, sessionId, pSirBssDesc, pProfile, pIes, eWNI_SME_REASSOC_REQ); @@ -6889,15 +6847,7 @@ void csrRoamReissueRoamCommand(tpAniSirGlobal pMac) smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); return; } - /* While switching between two AP, csr will reissue roam command again - to the nextbss if it was interrupted by the dissconnect req for the - previous bss.During this csr is incrementing bRefAssocStartCnt twice. - so reset the bRefAssocStartCnt. - */ - if(pSession->bRefAssocStartCnt > 0) - { - pSession->bRefAssocStartCnt--; - } + if( pCommand->u.roamCmd.fStopWds ) { palZeroMemory(pMac->hHdd, &roamInfo, sizeof(tCsrRoamInfo)); @@ -7450,8 +7400,7 @@ void csrRoamRoamingStateDisassocRspProcessor( tpAniSirGlobal pMac, tSirSmeDisass } else if ( CSR_IS_ROAM_SUBSTATE_DISASSOC_HO( pMac, sessionId ) ) { - VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO_HIGH, - "CSR SmeDisassocReq due to HO on session %d", sessionId ); + smsLog( pMac, LOGE, "CSR SmeDisassocReq due to HO on session %d", sessionId ); #if defined (WLAN_FEATURE_NEIGHBOR_ROAMING) /* * First ensure if the roam profile is in the scan cache. @@ -7633,7 +7582,6 @@ static void csrRoamRoamingStateDeauthRspProcessor( tpAniSirGlobal pMac, tSirSmeD //No one is sending eWNI_SME_DEAUTH_REQ to PE. smsLog(pMac, LOGW, FL("is no-op")); statusCode = csrGetDeAuthRspStatusCode( pSmeRsp ); - pMac->roam.deauthRspStatus = statusCode; if ( CSR_IS_ROAM_SUBSTATE_DEAUTH_REQ( pMac, pSmeRsp->sessionId) ) { csrRoamComplete( pMac, eCsrNothingToJoin, NULL ); @@ -7798,18 +7746,19 @@ void csrRoamJoinedStateMsgProcessor( tpAniSirGlobal pMac, void *pMsgBuf ) break; case eWNI_SME_UPPER_LAYER_ASSOC_CNF: { - tCsrRoamSession *pSession; + tCsrRoamSession *pSession = NULL; tSirSmeAssocIndToUpperLayerCnf *pUpperLayerAssocCnf; tCsrRoamInfo roamInfo; tCsrRoamInfo *pRoamInfo = NULL; - tANI_U32 sessionId = 0; + tANI_U32 sessionId; eHalStatus status; smsLog( pMac, LOG1, FL("ASSOCIATION confirmation can be given to upper layer ")); palZeroMemory(pMac->hHdd, &roamInfo, sizeof(tCsrRoamInfo)); pRoamInfo = &roamInfo; pUpperLayerAssocCnf = (tSirSmeAssocIndToUpperLayerCnf *)pMsgBuf; status = csrRoamGetSessionIdFromBSSID( pMac, (tCsrBssid *)pUpperLayerAssocCnf->bssId, &sessionId ); - pSession = CSR_GET_SESSION(pMac, sessionId); + if (HAL_STATUS_SUCCESS(status)) + pSession = CSR_GET_SESSION(pMac, sessionId); if(!pSession) { @@ -8096,13 +8045,7 @@ eHalStatus csrRoamProcessSetKeyCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand ) #ifdef FEATURE_WLAN_DIAG_SUPPORT_CSR tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, sessionId ); WLAN_VOS_DIAG_EVENT_DEF(setKeyEvent, vos_event_wlan_security_payload_type); - - if(NULL == pSession){ - smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); - return eHAL_STATUS_FAILURE; - } - - if(eSIR_ED_NONE != edType) + if(eCSR_ENCRYPT_TYPE_NONE != edType) { palZeroMemory(pMac->hHdd, &setKeyEvent, sizeof(vos_event_wlan_security_payload_type)); if( *(( tANI_U8 *)&pCommand->u.setKeyCmd.peerMac) & 0x01 ) @@ -8183,10 +8126,6 @@ eHalStatus csrRoamProcessRemoveKeyCommand( tpAniSirGlobal pMac, tSmeCmd *pComman #ifdef FEATURE_WLAN_DIAG_SUPPORT_CSR tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, sessionId ); WLAN_VOS_DIAG_EVENT_DEF(removeKeyEvent, vos_event_wlan_security_payload_type); - if(NULL == pSession){ - smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); - return eHAL_STATUS_FAILURE; - } palZeroMemory(pMac->hHdd, &removeKeyEvent, sizeof(vos_event_wlan_security_payload_type)); removeKeyEvent.eventId = WLAN_SECURITY_EVENT_REMOVE_KEY_REQ; removeKeyEvent.encryptionModeMulticast = (v_U8_t)diagEncTypeFromCSRType(pSession->connectedProfile.mcEncryptionType); @@ -8500,7 +8439,6 @@ void csrRoamRssiRspProcessor(tpAniSirGlobal pMac, void* pMsg) ((tCsrRssiCallback)(reqBkp->rssiCallback))(rssi, pRoamRssiRsp->staId, reqBkp->pDevContext); reqBkp->rssiCallback = NULL; vos_mem_free(reqBkp); - pRoamRssiRsp->rssiReq = NULL; } else { @@ -8508,7 +8446,6 @@ void csrRoamRssiRspProcessor(tpAniSirGlobal pMac, void* pMsg) if (NULL != reqBkp) { vos_mem_free(reqBkp); - pRoamRssiRsp->rssiReq = NULL; } } } @@ -8588,6 +8525,7 @@ void csrRoamCheckForLinkStatusChange( tpAniSirGlobal pMac, tSirSmeRsp *pSirMsg ) tCsrRoamSession *pSession = NULL; tpSirSmeSwitchChannelInd pSwitchChnInd; tSmeMaxAssocInd *pSmeMaxAssocInd; + tSmeCmd pCommand; pSirMsg->messageType = (pSirMsg->messageType); pSirMsg->length = (pSirMsg->length); pSirMsg->statusCode = (pSirMsg->statusCode); @@ -8669,105 +8607,77 @@ void csrRoamCheckForLinkStatusChange( tpAniSirGlobal pMac, tSirSmeRsp *pSirMsg ) } break; case eWNI_SME_DISASSOC_IND: + smsLog( pMac, LOGE, FL("DISASSOCIATION Indication from MAC")); + // Check if AP dis-associated us because of MIC failure. If so, + // then we need to take action immediately and not wait till the + // the WmStatusChange requests is pushed and processed + pDisassocInd = (tSirSmeDisassocInd *)pSirMsg; + status = csrRoamGetSessionIdFromBSSID( pMac, (tCsrBssid *)pDisassocInd->bssId, &sessionId ); + if( HAL_STATUS_SUCCESS( status ) ) { - // Check if AP dis-associated us because of MIC failure. If so, - // then we need to take action immediately and not wait till the - // the WmStatusChange requests is pushed and processed - tSmeCmd *pCommand; - - pDisassocInd = (tSirSmeDisassocInd *)pSirMsg; - status = csrRoamGetSessionIdFromBSSID( pMac, - (tCsrBssid *)pDisassocInd->bssId, &sessionId ); - if( HAL_STATUS_SUCCESS( status ) ) - { - smsLog( pMac, LOGE, FL("DISASSOCIATION Indication from MAC" - " for session %d "), sessionId); - smsLog( pMac, LOGE, FL("DISASSOCIATION from peer =" - MAC_ADDRESS_STR " " - " reason = %d status = %d "), - MAC_ADDR_ARRAY(pDisassocInd->peerMacAddr), - pDisassocInd->reasonCode, - pDisassocInd->statusCode); - // If we are in neighbor preauth done state then on receiving - // disassoc or deauth we dont roam instead we just disassoc - // from current ap and then go to disconnected state - // This happens for CCX and 11r FT connections ONLY. + // If we are in neighbor preauth done state then on receiving + // disassoc or deauth we dont roam instead we just disassoc + // from current ap and then go to disconnected state + // This happens for CCX and 11r FT connections ONLY. #ifdef WLAN_FEATURE_VOWIFI_11R - if (csrRoamIs11rAssoc(pMac) && (csrNeighborRoamStatePreauthDone(pMac))) - { - csrNeighborRoamTranistionPreauthDoneToDisconnected(pMac); - } + if (csrRoamIs11rAssoc(pMac) && (csrNeighborRoamStatePreauthDone(pMac))) + { + csrNeighborRoamTranistionPreauthDoneToDisconnected(pMac); + } #endif #ifdef FEATURE_WLAN_CCX - if (csrRoamIsCCXAssoc(pMac) && (csrNeighborRoamStatePreauthDone(pMac))) - { - csrNeighborRoamTranistionPreauthDoneToDisconnected(pMac); - } + if (csrRoamIsCCXAssoc(pMac) && (csrNeighborRoamStatePreauthDone(pMac))) + { + csrNeighborRoamTranistionPreauthDoneToDisconnected(pMac); + } #endif #ifdef FEATURE_WLAN_LFR - if (csrRoamIsFastRoamEnabled(pMac, sessionId) && (csrNeighborRoamStatePreauthDone(pMac))) - { - csrNeighborRoamTranistionPreauthDoneToDisconnected(pMac); - } + if (csrRoamIsFastRoamEnabled(pMac, sessionId) && (csrNeighborRoamStatePreauthDone(pMac))) + { + csrNeighborRoamTranistionPreauthDoneToDisconnected(pMac); + } #endif - pSession = CSR_GET_SESSION( pMac, sessionId ); + pSession = CSR_GET_SESSION( pMac, sessionId ); - if (!pSession) - { - smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); - return; - } + if(!pSession) + { + smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); + return; + } - if ( csrIsConnStateInfra( pMac, sessionId ) ) - { - pSession->connectState = eCSR_ASSOC_STATE_TYPE_NOT_CONNECTED; - } + if ( csrIsConnStateInfra( pMac, sessionId ) ) + { + pSession->connectState = eCSR_ASSOC_STATE_TYPE_NOT_CONNECTED; + } #ifndef WLAN_MDM_CODE_REDUCTION_OPT - sme_QosCsrEventInd(pMac, (v_U8_t)sessionId, SME_QOS_CSR_DISCONNECT_IND, NULL); + sme_QosCsrEventInd(pMac, (v_U8_t)sessionId, SME_QOS_CSR_DISCONNECT_IND, NULL); #endif - csrRoamLinkDown(pMac, sessionId); - csrRoamIssueWmStatusChange( pMac, sessionId, eCsrDisassociated, pSirMsg ); - if (CSR_IS_INFRA_AP(&pSession->connectedProfile)) - { + csrRoamLinkDown(pMac, sessionId); + csrRoamIssueWmStatusChange( pMac, sessionId, eCsrDisassociated, pSirMsg ); + if(CSR_IS_INFRA_AP(&pSession->connectedProfile)) + { - pCommand = csrGetCommandBuffer(pMac); - if (NULL == pCommand) - { - smsLog( pMac, LOGE, FL(" fail to get command buffer") ); - status = eHAL_STATUS_RESOURCES; - } - pRoamInfo = &roamInfo; - pRoamInfo->statusCode = pDisassocInd->statusCode; - pRoamInfo->u.pConnectedProfile = &pSession->connectedProfile; - pRoamInfo->staId = (tANI_U8)pDisassocInd->staId; + pRoamInfo = &roamInfo; - vos_mem_copy(pRoamInfo->peerMac, pDisassocInd->peerMacAddr, - sizeof(tSirMacAddr)); - vos_mem_copy(&pRoamInfo->bssid, pDisassocInd->bssId, - sizeof(tCsrBssid)); + pRoamInfo->statusCode = pDisassocInd->statusCode; + pRoamInfo->u.pConnectedProfile = &pSession->connectedProfile; - status = csrRoamCallCallback(pMac, sessionId, pRoamInfo, 0, - eCSR_ROAM_INFRA_IND, eCSR_ROAM_RESULT_DISASSOC_IND); + pRoamInfo->staId = (tANI_U8)pDisassocInd->staId; - /* - * STA/P2P client got disassociated so remove any pending deauth - * commands in sme pending list - */ - pCommand->command = eSmeCommandRoam; - pCommand->sessionId = (tANI_U8)sessionId; - pCommand->u.roamCmd.roamReason = eCsrForcedDeauthSta; - vos_mem_copy(pCommand->u.roamCmd.peerMac, - pDisassocInd->peerMacAddr, - sizeof(tSirMacAddr)); - csrRoamRemoveDuplicateCommand(pMac, sessionId, pCommand, eCsrForcedDeauthSta); - csrReleaseCommand( pMac, pCommand ); + palCopyMemory(pMac->hHdd, pRoamInfo->peerMac, pDisassocInd->peerMacAddr, sizeof(tSirMacAddr)); + palCopyMemory(pMac->hHdd, &pRoamInfo->bssid, pDisassocInd->bssId, sizeof(tCsrBssid)); - } - } - else - { - smsLog(pMac, LOGE, FL(" Session Id not found for BSSID " MAC_ADDRESS_STR), - MAC_ADDR_ARRAY(pDisassocInd->bssId)); + status = csrRoamCallCallback(pMac, sessionId, pRoamInfo, 0, eCSR_ROAM_INFRA_IND, eCSR_ROAM_RESULT_DISASSOC_IND); + + /* + * STA/P2P client got disassociated so remove any pending deauth + * commands in sme pending list + */ + pCommand.command = eSmeCommandRoam; + pCommand.sessionId = (tANI_U8)sessionId; + pCommand.u.roamCmd.roamReason = eCsrForcedDeauthSta; + vos_mem_copy(pCommand.u.roamCmd.peerMac, pDisassocInd->peerMacAddr, sizeof(tSirMacAddr)); + csrRoamRemoveDuplicateCommand(pMac, sessionId, &pCommand, eCsrForcedDeauthSta); } } break; @@ -9239,15 +9149,10 @@ void csrRoamCheckForLinkStatusChange( tpAniSirGlobal pMac, tSirSmeRsp *pSirMsg ) } #endif //FEATURE_WLAN_DIAG_SUPPORT_CSR smsLog(pMac, LOGW, "CSR: Peer departed notification from LIM"); - if(pIbssPeerInd) - { - roamInfo.staId = (tANI_U8)pIbssPeerInd->staId; - roamInfo.ucastSig = (tANI_U8)pIbssPeerInd->ucastSig; - roamInfo.bcastSig = (tANI_U8)pIbssPeerInd->bcastSig; - palCopyMemory(pMac->hHdd, &roamInfo.peerMac, pIbssPeerInd->peerAddr, sizeof(tCsrBssid)); - }else - smsLog(pMac, LOGE, "CSR: departed peer info is NULL"); - + roamInfo.staId = (tANI_U8)pIbssPeerInd->staId; + roamInfo.ucastSig = (tANI_U8)pIbssPeerInd->ucastSig; + roamInfo.bcastSig = (tANI_U8)pIbssPeerInd->bcastSig; + palCopyMemory(pMac->hHdd, &roamInfo.peerMac, pIbssPeerInd->peerAddr, sizeof(tCsrBssid)); csrRoamCallCallback(pMac, sessionId, &roamInfo, 0, eCSR_ROAM_CONNECT_STATUS_UPDATE, eCSR_ROAM_RESULT_IBSS_PEER_DEPARTED); } @@ -9620,7 +9525,7 @@ void csrRoamCancelRoaming(tpAniSirGlobal pMac, tANI_U32 sessionId) //Roaming is stopped after here csrRoamCompleteRoaming(pMac, sessionId, eANI_BOOLEAN_TRUE, roamResult); //Since CSR may be in lostlink roaming situation, abort all roaming related activities - csrScanAbortMacScan(pMac, eCSR_SCAN_ABORT_DEFAULT); + csrScanAbortMacScan(pMac); csrRoamStopRoamingTimer(pMac, sessionId); } } @@ -9677,7 +9582,6 @@ void csrRoamWaitForKeyTimeOutHandler(void *pv) tCsrTimerInfo *pInfo = (tCsrTimerInfo *)pv; tpAniSirGlobal pMac = pInfo->pMac; tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, pInfo->sessionId ); - eHalStatus status = eHAL_STATUS_FAILURE; smsLog(pMac, LOGW, "WaitForKey timer expired in state=%d sub-state=%d", pMac->roam.neighborRoamInfo.neighborRoamState, @@ -9709,21 +9613,6 @@ void csrRoamWaitForKeyTimeOutHandler(void *pv) { csrRoamLinkUp(pMac, pSession->connectedProfile.bssid); smeProcessPendingQueue(pMac); - if( (pSession->connectedProfile.AuthType == - eCSR_AUTH_TYPE_SHARED_KEY) && - ( (pSession->connectedProfile.EncryptionType == - eCSR_ENCRYPT_TYPE_WEP40) || - (pSession->connectedProfile.EncryptionType == - eCSR_ENCRYPT_TYPE_WEP104) )) - { - status = sme_AcquireGlobalLock( &pMac->sme ); - if ( HAL_STATUS_SUCCESS( status ) ) - { - csrRoamDisconnect( pMac, pInfo->sessionId, - eCSR_DISCONNECT_REASON_UNSPECIFIED ); - sme_ReleaseGlobalLock( &pMac->sme ); - } - } } else { @@ -10615,9 +10504,9 @@ tANI_U8 csrRoamGetIbssStartChannelNumber50( tpAniSirGlobal pMac ) { for ( idxValidChannels = 0; idxValidChannels < len ; idxValidChannels++ ) { - if ( CSR_IS_CHANNEL_5GHZ(pMac->roam.validChannelList[ idxValidChannels ]) ) // the max channel# in 11g is 14 + if ( CSR_IS_CHANNEL_5GHZ(pMac->roam.validChannelList[ idx ]) ) // the max channel# in 11g is 14 { - channel = csrStartIbssChannels50[ idxValidChannels ]; + channel = csrStartIbssChannels50[ idx ]; break; } } @@ -11324,39 +11213,6 @@ eHalStatus csrRoamSetPMKIDCache( tpAniSirGlobal pMac, tANI_U32 sessionId, return (status); } -eHalStatus csrRoamDelPMKIDfromCache( tpAniSirGlobal pMac, tANI_U32 sessionId, - tANI_U8 *pBSSId ) -{ - eHalStatus status = eHAL_STATUS_FAILURE; - tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, sessionId ); - tANI_BOOLEAN fMatchFound = FALSE; - tANI_U32 Index; - if(!pSession) - { - smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); - return eHAL_STATUS_FAILURE; - } - do - { - for( Index=0; Index < pSession->NumPmkidCache; Index++ ) - { - smsLog(pMac, LOGW, "Delete PMKID for %02X-%02X-%02X-%02X-%02X-%02X ", - pBSSId[0], pBSSId[1], pBSSId[2], pBSSId[3], pBSSId[4], pBSSId[5]); - if( palEqualMemory( pMac->hHdd, pBSSId, pSession->PmkidCacheInfo[Index].BSSID, sizeof(tCsrBssid) ) ) - { - fMatchFound = TRUE; - break; - } - } - if( !fMatchFound ) break; - palZeroMemory( pMac->hHdd, pSession->PmkidCacheInfo[Index].BSSID, sizeof(tCsrBssid)); - status = eHAL_STATUS_SUCCESS; - } - while( 0 ); - smsLog(pMac, LOGW, "csrDelPMKID called return match = %d Status = %d", - fMatchFound, status); - return status; -} tANI_U32 csrRoamGetNumPMKIDCache(tpAniSirGlobal pMac, tANI_U32 sessionId) { return (pMac->roam.roamSession[sessionId].NumPmkidCache); @@ -11794,7 +11650,6 @@ eHalStatus csrSendJoinReqMsg( tpAniSirGlobal pMac, tANI_U32 sessionId, tSirBssDe tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, sessionId ); tANI_U32 dwTmp; tANI_U8 wpaRsnIE[DOT11F_IE_RSN_MAX_LEN]; //RSN MAX is bigger than WPA MAX - tANI_U32 ucDot11Mode = 0; if(!pSession) { @@ -11859,15 +11714,7 @@ eHalStatus csrSendJoinReqMsg( tpAniSirGlobal pMac, tANI_U32 sessionId, tSirBssDe palCopyMemory( pMac->hHdd, pBuf, &dwTmp, sizeof(tSirBssType) ); pBuf += sizeof(tSirBssType); // dot11mode - ucDot11Mode = csrTranslateToWNICfgDot11Mode( pMac, pSession->bssParams.uCfgDot11Mode ); - if (pBssDescription->channelId <= 14 && - FALSE == pMac->roam.configParam.enableVhtFor24GHz && - WNI_CFG_DOT11_MODE_11AC == ucDot11Mode) - { - //Need to disable VHT operation in 2.4 GHz band - ucDot11Mode = WNI_CFG_DOT11_MODE_11N; - } - *pBuf = (tANI_U8)ucDot11Mode; + *pBuf = (tANI_U8)csrTranslateToWNICfgDot11Mode( pMac, pSession->bssParams.uCfgDot11Mode ); pBuf++; //Persona *pBuf = (tANI_U8)pProfile->csrPersona; @@ -12052,22 +11899,36 @@ eHalStatus csrSendJoinReqMsg( tpAniSirGlobal pMac, tANI_U32 sessionId, tSirBssDe } #endif /* FEATURE_WLAN_CCX */ // addIEScan - if (pProfile->nAddIEScanLength) + if(pProfile->nAddIEScanLength && pProfile->pAddIEScan) { ieLen = pProfile->nAddIEScanLength; - memset(pSession->addIEScan, 0 , pSession->nAddIEScanLength); + if(ieLen > pSession->nAddIEScanLength) + { + if(pSession->pAddIEScan && pSession->nAddIEScanLength) + { + palFreeMemory(pMac->hHdd, pSession->pAddIEScan); + } + status = palAllocateMemory(pMac->hHdd, + (void **)&pSession->pAddIEScan, ieLen); + if(!HAL_STATUS_SUCCESS(status)) break; + } pSession->nAddIEScanLength = ieLen; - vos_mem_copy(pSession->addIEScan, pProfile->addIEScan, ieLen); + palCopyMemory(pMac->hHdd, pSession->pAddIEScan, + pProfile->pAddIEScan, ieLen); wTmp = pal_cpu_to_be16( ieLen ); palCopyMemory( pMac->hHdd, pBuf, &wTmp, sizeof(tANI_U16) ); pBuf += sizeof(tANI_U16); - vos_mem_copy(pBuf, pProfile->addIEScan, ieLen); + palCopyMemory( pMac->hHdd, pBuf, pProfile->pAddIEScan, ieLen ); pBuf += ieLen; } else { - memset(pSession->addIEScan, 0, pSession->nAddIEScanLength); pSession->nAddIEScanLength = 0; + if(pSession->pAddIEScan) + { + palFreeMemory(pMac->hHdd, pSession->pAddIEScan); + pSession->pAddIEScan = NULL; + } *pBuf = 0; *(pBuf + 1) = 0; pBuf += 2; @@ -12300,42 +12161,11 @@ eHalStatus csrSendJoinReqMsg( tpAniSirGlobal pMac, tANI_U32 sessionId, tSirBssDe *pBuf = (tANI_U8)pMac->roam.configParam.txBFCsnValue; pBuf++; #endif - // WME - if(pMac->roam.roamSession[sessionId].fWMMConnection) - { - //WME enabled - dwTmp = pal_cpu_to_be32(TRUE); - vos_mem_copy(pBuf, &dwTmp, sizeof(tAniBool)); - pBuf += sizeof(tAniBool); - } - else - { - dwTmp = pal_cpu_to_be32(FALSE); - vos_mem_copy(pBuf, &dwTmp, sizeof(tAniBool)); - pBuf += sizeof(tAniBool); - } - - // QOS - if(pMac->roam.roamSession[sessionId].fQOSConnection) - { - //QOS enabled - dwTmp = pal_cpu_to_be32(TRUE); - vos_mem_copy(pBuf, &dwTmp, sizeof(tAniBool)); - pBuf += sizeof(tAniBool); - } - else - { - dwTmp = pal_cpu_to_be32(FALSE); - vos_mem_copy(pBuf, &dwTmp, sizeof(tAniBool)); - pBuf += sizeof(tAniBool); - } *pBuf = (tANI_U8)pMac->roam.configParam.isAmsduSupportInAMPDU; pBuf++; - //BssDesc csrPrepareJoinReassocReqBuffer( pMac, pBssDescription, pBuf, (tANI_U8)pProfile->uapsd_mask); - status = palSendMBMessage(pMac->hHdd, pMsg ); if(!HAL_STATUS_SUCCESS(status)) { @@ -13612,9 +13442,10 @@ static void csrInitSession( tpAniSirGlobal pMac, tANI_U32 sessionId ) } pSession->nWapiRspIeLength = 0; #endif /* FEATURE_WLAN_WAPI */ - if (pSession->nAddIEScanLength) + if(pSession->pAddIEScan) { - memset(pSession->addIEScan, 0 , SIR_MAC_MAX_IE_LENGTH); + palFreeMemory(pMac->hHdd, pSession->pAddIEScan); + pSession->pAddIEScan = NULL; } pSession->nAddIEScanLength = 0; if(pSession->pAddIEAssoc) @@ -14386,13 +14217,6 @@ eHalStatus csrGetStatistics(tpAniSirGlobal pMac, eCsrStatsRequesterType requeste //smsLog(pMac, LOGW, "csrGetStatistics: wrong state curState(%d) not connected", pMac->roam.curState); return eHAL_STATUS_FAILURE; } - - if (csrNeighborMiddleOfRoaming((tHalHandle)pMac)) - { - smsLog(pMac, LOG1, FL("in the middle of roaming states")); - return eHAL_STATUS_FAILURE; - } - if((!statsMask) && (!callback)) { //msg @@ -14771,13 +14595,12 @@ eHalStatus csrRoamOffloadScan(tpAniSirGlobal pMac, tANI_U8 command, tANI_U8 reas tSirRoamOffloadScanReq *pRequestBuf; tpCsrNeighborRoamControlInfo pNeighborRoamInfo = &pMac->roam.neighborRoamInfo; tCsrRoamSession *pSession; - tANI_U8 i,j,num_channels = 0, ucDot11Mode; + tANI_U8 i,num_channels = 0, ucDot11Mode; tANI_U8 *ChannelList = NULL; tANI_U8 MaxDwellPeriod; tANI_U32 sessionId; eHalStatus status = eHAL_STATUS_SUCCESS; tpCsrChannelInfo currChannelListInfo; - tANI_U8 ChannelCacheStr[128] = {0}; currChannelListInfo = &pNeighborRoamInfo->roamChannelInfo.currentChannelListInfo; if (0 == pMac->roam.configParam.isRoamOffloadScanEnabled) @@ -14817,7 +14640,6 @@ eHalStatus csrRoamOffloadScan(tpAniSirGlobal pMac, tANI_U8 command, tANI_U8 reas vos_mem_zero(pRequestBuf,sizeof(tSirRoamOffloadScanReq)); /* If command is STOP, then pass down ScanOffloadEnabled as Zero.This will handle the case of * host driver reloads, but Riva still up and running*/ - pRequestBuf->Command = command; if(command == ROAM_SCAN_OFFLOAD_STOP) pRequestBuf->RoamScanOffloadEnabled = 0; else @@ -14839,6 +14661,7 @@ eHalStatus csrRoamOffloadScan(tpAniSirGlobal pMac, tANI_U8 command, tANI_U8 reas (v_S7_t)pNeighborRoamInfo->cfgParams.neighborLookupThreshold * (-1); pRequestBuf->RoamRssiDiff = pMac->roam.configParam.RoamRssiDiff; + pRequestBuf->Command = command; pRequestBuf->StartScanReason = reason; pRequestBuf->NeighborScanTimerPeriod = pNeighborRoamInfo->cfgParams.neighborScanPeriod; @@ -14883,8 +14706,7 @@ eHalStatus csrRoamOffloadScan(tpAniSirGlobal pMac, tANI_U8 command, tANI_U8 reas ChannelList = pMac->scan.occupiedChannels.channelList; for(i=0; i<pMac->scan.occupiedChannels.numChannels; i++) { - if((pMac->roam.configParam.allowDFSChannelRoam) || - (!CSR_IS_CHANNEL_DFS(*ChannelList) && *ChannelList)) + if(!CSR_IS_CHANNEL_DFS(*ChannelList) && *ChannelList) { pRequestBuf->ConnectedNetwork.ChannelCache[num_channels++] = *ChannelList; } @@ -14910,33 +14732,22 @@ eHalStatus csrRoamOffloadScan(tpAniSirGlobal pMac, tANI_U8 command, tANI_U8 reas /* If CCX is enabled, and a neighbor Report is received,then * Ignore the INI Channels or the Occupied Channel List. Consider * the channels in the neighbor list sent by the CCX AP.*/ - if (currChannelListInfo->numOfChannels != 0) - { - ChannelList = currChannelListInfo->ChannelList; - for (i=0;i<currChannelListInfo->numOfChannels;i++) + if (currChannelListInfo->numOfChannels != 0) + { + ChannelList = currChannelListInfo->ChannelList; + for (i=0;i<currChannelListInfo->numOfChannels;i++) + { + if(!CSR_IS_CHANNEL_DFS(*ChannelList) && *ChannelList) { - if(((pMac->roam.configParam.allowDFSChannelRoam) || - (!CSR_IS_CHANNEL_DFS(*ChannelList))) && *ChannelList) - { - pRequestBuf->ConnectedNetwork.ChannelCache[num_channels++] = *ChannelList; - } - ChannelList++; + pRequestBuf->ConnectedNetwork.ChannelCache[num_channels++] = *ChannelList; } - pRequestBuf->ConnectedNetwork.ChannelCount = num_channels; - pRequestBuf->ChannelCacheType = CHANNEL_LIST_DYNAMIC_UPDATE; - } - } -#endif - for (i = 0, j = 0; i < pRequestBuf->ConnectedNetwork.ChannelCount; i++) - { - j += snprintf(ChannelCacheStr + j, sizeof(ChannelCacheStr) - j," %d", - pRequestBuf->ConnectedNetwork.ChannelCache[i]); + ChannelList++; + } + pRequestBuf->ConnectedNetwork.ChannelCount = num_channels; + pRequestBuf->ChannelCacheType = CHANNEL_LIST_STATIC; + } } - VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_DEBUG, - "ChnlCacheType:%d, No of Chnls:%d,Channels: %s", - pRequestBuf->ChannelCacheType, - pRequestBuf->ConnectedNetwork.ChannelCount, - ChannelCacheStr); +#endif num_channels = 0; ChannelList = NULL; @@ -14946,8 +14757,7 @@ eHalStatus csrRoamOffloadScan(tpAniSirGlobal pMac, tANI_U8 command, tANI_U8 reas ChannelList = pNeighborRoamInfo->cfgParams.countryChannelInfo.countryValidChannelList.ChannelList; for(i=0; i<pNeighborRoamInfo->cfgParams.countryChannelInfo.countryValidChannelList.numOfChannels; i++) { - if((pMac->roam.configParam.allowDFSChannelRoam) || - (!CSR_IS_CHANNEL_DFS(*ChannelList) && *ChannelList)) + if(!CSR_IS_CHANNEL_DFS(*ChannelList) && *ChannelList) { pRequestBuf->ValidChannelList[num_channels++] = *ChannelList; } @@ -14958,8 +14768,7 @@ eHalStatus csrRoamOffloadScan(tpAniSirGlobal pMac, tANI_U8 command, tANI_U8 reas ChannelList = pMac->roam.validChannelList; for(i=0; i<pMac->roam.numValidChannels; i++) { - if((pMac->roam.configParam.allowDFSChannelRoam) || - (!CSR_IS_CHANNEL_DFS(*ChannelList) && *ChannelList)) + if(!CSR_IS_CHANNEL_DFS(*ChannelList) && *ChannelList) { pRequestBuf->ValidChannelList[num_channels++] = *ChannelList; } @@ -15833,11 +15642,7 @@ void csrRoamFTPreAuthRspProcessor( tHalHandle hHal, tpSirFTPreAuthRsp pFTPreAuth pMac->ft.ftSmeContext.FTState = eFT_AUTH_COMPLETE; // Indicate SME QoS module the completion of Preauth success. This will trigger the creation of RIC IEs pMac->ft.ftSmeContext.psavedFTPreAuthRsp = pFTPreAuthRsp; - /* No need to notify qos module if this is a non 11r roam*/ - if (csrRoamIs11rAssoc(pMac)) - { - sme_QosCsrEventInd(pMac, pMac->ft.ftSmeContext.smeSessionId, SME_QOS_CSR_PREAUTH_SUCCESS_IND, NULL); - } + sme_QosCsrEventInd(pMac, pMac->ft.ftSmeContext.smeSessionId, SME_QOS_CSR_PREAUTH_SUCCESS_IND, NULL); /* Start the pre-auth reassoc interval timer with a period of 400ms. When this expires, * actual transition from the current to handoff AP is triggered */ status = palTimerStart(pMac->hHdd, pMac->ft.ftSmeContext.preAuthReassocIntvlTimer, diff --git a/drivers/staging/prima/CORE/SME/src/csr/csrApiScan.c b/drivers/staging/prima/CORE/SME/src/csr/csrApiScan.c index fdcd76a9315..8cffbfbe553 100644 --- a/drivers/staging/prima/CORE/SME/src/csr/csrApiScan.c +++ b/drivers/staging/prima/CORE/SME/src/csr/csrApiScan.c @@ -67,9 +67,6 @@ #include "wlan_qct_wda.h" #define CSR_VALIDATE_LIST //This portion of code need to be removed once the issue is resolved. -#define MIN_CHN_TIME_TO_FIND_GO 100 -#define MAX_CHN_TIME_TO_FIND_GO 100 -#define DIRECT_SSID_LEN 7 #ifdef CSR_VALIDATE_LIST tDblLinkList *g_pchannelPowerInfoList24 = NULL, * g_pchannelPowerInfoList5 = NULL; @@ -120,12 +117,10 @@ RSSI *cannot* be more than 0xFF or less than 0 for meaningful WLAN operation /* Maximum number of channels per country can be ignored */ #define MAX_CHANNELS_IGNORE 10 -#define MAX_COUNTRY_IGNORE 5 +#define MAX_COUNTRY_IGNORE 3 #define THIRTY_PERCENT(x) (x*30/100); -#define MANDATORY_BG_CHANNEL 11 - /*struct to hold the ignored channel list based on country */ typedef struct sCsrIgnoreChannels { @@ -137,9 +132,7 @@ typedef struct sCsrIgnoreChannels static tCsrIgnoreChannels countryIgnoreList[MAX_COUNTRY_IGNORE] = { { {'U','A'}, { 136, 140}, 2}, { {'T','W'}, { 36, 40, 44, 48, 52}, 5}, - { {'I','D'}, { 165}, 1 }, - { {'A','U'}, { 120, 124, 128}, 3 }, - { {'A','R'}, { 120, 124, 128}, 3 } + { {'I','D'}, { 165}, 1 } }; //*** This is temporary work around. It need to call CCM api to get to CFG later @@ -579,8 +572,7 @@ eHalStatus csrQueueScanRequest( tpAniSirGlobal pMac, tSmeCmd *pScanCmd ) scanReq.BSSType = eCSR_BSS_TYPE_ANY; //Modify callers parameters in case of concurrency - if (!pScanCmd->u.scanCmd.u.scanRequest.bcnRptReqScan) - scanReq.scanType = eSIR_ACTIVE_SCAN; + scanReq.scanType = eSIR_ACTIVE_SCAN; //Use concurrency values for min/maxChnTime. //We know csrIsAnySessionConnected(pMac) returns TRUE here csrSetDefaultScanTiming(pMac, scanReq.scanType, &scanReq); @@ -612,8 +604,7 @@ eHalStatus csrQueueScanRequest( tpAniSirGlobal pMac, tSmeCmd *pScanCmd ) pSendScanCmd = pScanCmd; pSendScanCmd->u.scanCmd.u.scanRequest.ChannelInfo.numOfChannels = nNumChanCombinedConc; pSendScanCmd->u.scanCmd.u.scanRequest.BSSType = eCSR_BSS_TYPE_ANY; - if (!pSendScanCmd->u.scanCmd.u.scanRequest.bcnRptReqScan) - pSendScanCmd->u.scanCmd.u.scanRequest.scanType = eSIR_ACTIVE_SCAN; + pSendScanCmd->u.scanCmd.u.scanRequest.scanType = eSIR_ACTIVE_SCAN; //Use concurrency values for min/maxChnTime. //We know csrIsAnySessionConnected(pMac) returns TRUE here csrSetDefaultScanTiming(pMac, pSendScanCmd->u.scanCmd.u.scanRequest.scanType, &pSendScanCmd->u.scanCmd.u.scanRequest); @@ -621,8 +612,7 @@ eHalStatus csrQueueScanRequest( tpAniSirGlobal pMac, tSmeCmd *pScanCmd ) } else { pSendScanCmd = pScanCmd; pSendScanCmd->u.scanCmd.u.scanRequest.BSSType = eCSR_BSS_TYPE_ANY; - if (!pSendScanCmd->u.scanCmd.u.scanRequest.bcnRptReqScan) - pSendScanCmd->u.scanCmd.u.scanRequest.scanType = eSIR_ACTIVE_SCAN; + pSendScanCmd->u.scanCmd.u.scanRequest.scanType = eSIR_ACTIVE_SCAN; //Use concurrency values for min/maxChnTime. //We know csrIsAnySessionConnected(pMac) returns TRUE here csrSetDefaultScanTiming(pMac, pSendScanCmd->u.scanCmd.u.scanRequest.scanType, &pSendScanCmd->u.scanCmd.u.scanRequest); @@ -728,26 +718,6 @@ eHalStatus csrScanRequest(tpAniSirGlobal pMac, tANI_U16 sessionId, VOS_ASSERT(0); } - /* During group formation, the P2P client scans for GO with the specific SSID. - * There will be chances of GO switching to other channels because of scan or - * to STA channel in case of STA+GO MCC scenario. So to increase the possibility - * of client to find the GO, the dwell time of scan is increased to 100ms. - */ - if(pScanRequest->p2pSearch) - { - if(pScanRequest->SSIDs.numOfSSIDs) - { - //If the scan request is for specific SSId the length of SSID will be - //greater than 7 as SSID for p2p search contains "DIRECT-") - if(pScanRequest->SSIDs.SSIDList->SSID.length > DIRECT_SSID_LEN) - { - smsLog( pMac, LOG1, FL(" Increase the Dwell time to 100ms.")); - pScanRequest->maxChnTime = MAX_CHN_TIME_TO_FIND_GO; - pScanRequest->minChnTime = MIN_CHN_TIME_TO_FIND_GO; - } - } - } - do { if(pMac->scan.fScanEnable) @@ -868,20 +838,14 @@ eHalStatus csrScanRequest(tpAniSirGlobal pMac, tANI_U16 sessionId, } pChnInfo->numOfChannels = (tANI_U8)numChn; p11dScanCmd->command = eSmeCommandScan; - p11dScanCmd->u.scanCmd.callback = pMac->scan.callback11dScanDone; + p11dScanCmd->u.scanCmd.callback = NULL; p11dScanCmd->u.scanCmd.pContext = NULL; p11dScanCmd->u.scanCmd.scanID = pMac->scan.nextScanID++; scanReq.BSSType = eCSR_BSS_TYPE_ANY; if ( csrIs11dSupported(pMac) ) { - scanReq.bcnRptReqScan = pScanRequest->bcnRptReqScan; - if (pScanRequest->bcnRptReqScan) - scanReq.scanType = pScanRequest->scanType ? - eSIR_PASSIVE_SCAN : - pScanRequest->scanType; - else - scanReq.scanType = eSIR_PASSIVE_SCAN; + scanReq.scanType = eSIR_PASSIVE_SCAN; scanReq.requestType = eCSR_SCAN_REQUEST_11D_SCAN; p11dScanCmd->u.scanCmd.reason = eCsrScan11d1; scanReq.maxChnTime = pMac->roam.configParam.nPassiveMaxChnTime; @@ -889,18 +853,14 @@ eHalStatus csrScanRequest(tpAniSirGlobal pMac, tANI_U16 sessionId, } else { - scanReq.bcnRptReqScan = pScanRequest->bcnRptReqScan; - if (pScanRequest->bcnRptReqScan) - scanReq.scanType = pScanRequest->scanType; - else - scanReq.scanType = eSIR_ACTIVE_SCAN; + scanReq.scanType = eSIR_ACTIVE_SCAN; scanReq.requestType = eCSR_SCAN_IDLE_MODE_SCAN; p11dScanCmd->u.scanCmd.reason = eCsrScanIdleScan; scanReq.maxChnTime = pMac->roam.configParam.nActiveMaxChnTime; scanReq.minChnTime = pMac->roam.configParam.nActiveMinChnTime; - scanReq.maxChnTimeBtc = pMac->roam.configParam.nActiveMaxChnTimeBtc; - scanReq.minChnTimeBtc = pMac->roam.configParam.nActiveMinChnTimeBtc; + scanReq.maxChnTimeBtc = pMac->roam.configParam.nActiveMaxChnTimeBtc; + scanReq.minChnTimeBtc = pMac->roam.configParam.nActiveMinChnTimeBtc; } status = csrScanCopyRequest(pMac, &p11dScanCmd->u.scanCmd.u.scanRequest, &scanReq); @@ -910,8 +870,6 @@ eHalStatus csrScanRequest(tpAniSirGlobal pMac, tANI_U16 sessionId, if (HAL_STATUS_SUCCESS(status)) { - pMac->scan.scanProfile.numOfChannels = - p11dScanCmd->u.scanCmd.u.scanRequest.ChannelInfo.numOfChannels; //Start process the command #ifdef WLAN_AP_STA_CONCURRENCY status = csrQueueScanRequest(pMac, p11dScanCmd); @@ -948,9 +906,6 @@ eHalStatus csrScanRequest(tpAniSirGlobal pMac, tANI_U16 sessionId, status = csrScanCopyRequest(pMac, &pScanCmd->u.scanCmd.u.scanRequest, pScanRequest); if(HAL_STATUS_SUCCESS(status)) { - pMac->scan.scanProfile.numOfChannels = - pScanCmd->u.scanCmd.u.scanRequest.ChannelInfo.numOfChannels; - //Start process the command #ifdef WLAN_AP_STA_CONCURRENCY status = csrQueueScanRequest(pMac,pScanCmd); @@ -2257,15 +2212,12 @@ tANI_U8 csrScanFlushDenied(tpAniSirGlobal pMac) eHalStatus csrScanFlushResult(tpAniSirGlobal pMac) { tANI_U8 isFlushDenied = csrScanFlushDenied(pMac); - eHalStatus status = eHAL_STATUS_SUCCESS; if (isFlushDenied) { smsLog(pMac, LOGW, "%s: scan flush denied in roam state %d", __func__, isFlushDenied); return eHAL_STATUS_FAILURE; } - csrLLScanPurgeResult( pMac, &pMac->scan.tempScanResults ); - csrLLScanPurgeResult( pMac, &pMac->scan.scanResultList ); - return( status ); + return ( csrLLScanPurgeResult(pMac, &pMac->scan.scanResultList) ); } eHalStatus csrScanFlushSelectiveResult(tpAniSirGlobal pMac, v_BOOL_t flushP2P) @@ -2302,7 +2254,7 @@ eHalStatus csrScanFlushSelectiveResult(tpAniSirGlobal pMac, v_BOOL_t flushP2P) * csrCheck11dChannel * *FUNCTION: - * This function is called from csrScanFilterResults function and + * This function is called from csrScanFilter11dResult function and * compare channel number with given channel list. * *LOGIC: @@ -2337,7 +2289,7 @@ eHalStatus csrCheck11dChannel(tANI_U8 channelId, tANI_U8 *pChannelList, tANI_U32 } /** - * csrScanFilterResults + * csrScanFilter11dResult * *FUNCTION: * This function is called from csrApplyCountryInformation function and @@ -2358,7 +2310,7 @@ eHalStatus csrCheck11dChannel(tANI_U8 channelId, tANI_U8 *pChannelList, tANI_U32 * @return Status */ -eHalStatus csrScanFilterResults(tpAniSirGlobal pMac) +eHalStatus csrScanFilter11dResult(tpAniSirGlobal pMac) { eHalStatus status = eHAL_STATUS_SUCCESS; tListElem *pEntry,*pTempEntry; @@ -2376,10 +2328,10 @@ eHalStatus csrScanFilterResults(tpAniSirGlobal pMac) while( pEntry ) { pBssDesc = GET_BASE_ADDR( pEntry, tCsrScanResult, Link ); - pTempEntry = csrLLNext( &pMac->scan.scanResultList, pEntry, + pTempEntry = csrLLNext( &pMac->scan.scanResultList, pEntry, LL_ACCESS_LOCK ); if(csrCheck11dChannel(pBssDesc->Result.BssDescriptor.channelId, - pMac->roam.validChannelList, len)) + pMac->roam.validChannelList, len)) { /* Remove Scan result which does not have 11d channel */ if( csrLLRemoveEntry( &pMac->scan.scanResultList, pEntry, @@ -2388,35 +2340,6 @@ eHalStatus csrScanFilterResults(tpAniSirGlobal pMac) csrFreeScanResultEntry( pMac, pBssDesc ); } } - else - { - smsLog( pMac, LOG1, FL("%d is a Valid channel"), - pBssDesc->Result.BssDescriptor.channelId); - } - pEntry = pTempEntry; - } - - pEntry = csrLLPeekHead( &pMac->scan.tempScanResults, LL_ACCESS_LOCK ); - while( pEntry ) - { - pBssDesc = GET_BASE_ADDR( pEntry, tCsrScanResult, Link ); - pTempEntry = csrLLNext( &pMac->scan.tempScanResults, pEntry, - LL_ACCESS_LOCK ); - if(csrCheck11dChannel(pBssDesc->Result.BssDescriptor.channelId, - pMac->roam.validChannelList, len)) - { - /* Remove Scan result which does not have 11d channel */ - if( csrLLRemoveEntry( &pMac->scan.tempScanResults, pEntry, - LL_ACCESS_LOCK )) - { - csrFreeScanResultEntry( pMac, pBssDesc ); - } - } - else - { - smsLog( pMac, LOG1, FL("%d is a Valid channel"), - pBssDesc->Result.BssDescriptor.channelId); - } pEntry = pTempEntry; } return status; @@ -2901,7 +2824,7 @@ static void csrMoveTempScanResultsToMainList( tpAniSirGlobal pMac, tANI_U8 reaso tmpSsid.length = 0; cand_Bss_rssi = -128; // RSSI coming from PE is -ve - rssi_of_current_country = pMac->scan.currentCountryRSSI; + rssi_of_current_country = -128; // remove the BSS descriptions from temporary list while( ( pEntry = csrLLRemoveTail( &pMac->scan.tempScanResults, LL_ACCESS_LOCK ) ) != NULL) @@ -3008,7 +2931,6 @@ static void csrMoveTempScanResultsToMainList( tpAniSirGlobal pMac, tANI_U8 reaso pBssDescription->Result.BssDescriptor.rssi * (-1), pIesLocal->Country.country[0],pIesLocal->Country.country[1] ); rssi_of_current_country = pBssDescription->Result.BssDescriptor.rssi ; - pMac->scan.currentCountryRSSI = rssi_of_current_country; } @@ -3020,31 +2942,6 @@ static void csrMoveTempScanResultsToMainList( tpAniSirGlobal pMac, tANI_U8 reaso } } - //we don't need to update CC while connected to an AP which is advertising CC already - if (csrIs11dSupported(pMac)) - { - tANI_U32 i; - tCsrRoamSession *pSession; - - for (i = 0; i < CSR_ROAM_SESSION_MAX; i++ ) - { - if (CSR_IS_SESSION_VALID( pMac, i ) ) - { - pSession = CSR_GET_SESSION( pMac, i ); - if (csrIsConnStateConnected(pMac, i)) - { - if (csrIsBssidMatch(pMac, (tCsrBssid *)&pMac->scan.currentCountryBssid, - &pSession->connectedProfile.bssid)) - { - smsLog(pMac, LOGW, FL("No need for updating CC, we will" - "continue with current AP's CC")); - goto end; - } - } - } - } - } - // Calculating 30% of current rssi is an idea for not to change // country code so freq. if (rssi_of_current_country != -128) @@ -3053,10 +2950,7 @@ static void csrMoveTempScanResultsToMainList( tpAniSirGlobal pMac, tANI_U8 reaso - THIRTY_PERCENT(rssi_of_current_country); } - if ((rssi_of_current_country <= cand_Bss_rssi && - rssi_of_current_country != -128) || - (rssi_of_current_country == -128 && - pMac->scan.scanProfile.numOfChannels >= MANDATORY_BG_CHANNEL)) + if ((rssi_of_current_country <= cand_Bss_rssi ) || rssi_of_current_country == -128) { csrLLLock(&pMac->scan.scanResultList); pEntryTemp = csrLLPeekHead(&pMac->scan.scanResultList, LL_ACCESS_NOLOCK); @@ -3074,7 +2968,7 @@ static void csrMoveTempScanResultsToMainList( tpAniSirGlobal pMac, tANI_U8 reaso bssid_temp, sizeof(tSirMacAddr)); // Best AP should be passed to update reg domain. csrLearnCountryInformation( pMac, &pBssDescription->Result.BssDescriptor, - pIesLocal, eANI_BOOLEAN_TRUE ); + pIesLocal, eANI_BOOLEAN_FALSE ); break; } pEntryTemp = pNext; @@ -3083,8 +2977,7 @@ static void csrMoveTempScanResultsToMainList( tpAniSirGlobal pMac, tANI_U8 reaso } -end: - //If we can find the current 11d info in any of the scan results, or + //Tush: If we can find the current 11d info in any of the scan results, or // a good enough AP with the 11d info from the scan results then no need to // get into ambiguous state if(pMac->scan.fAmbiguous11dInfoFound) @@ -3642,15 +3535,14 @@ void csrApplyCountryInformation( tpAniSirGlobal pMac, tANI_BOOLEAN fForce ) { smsLog(pMac, LOGW, FL("Domain Changed Old %d, new %d"), pMac->scan.domainIdCurrent, domainId); - status = WDA_SetRegDomain(pMac, domainId, eSIR_TRUE); + status = WDA_SetRegDomain(pMac, domainId); } if (status != eHAL_STATUS_SUCCESS) { smsLog( pMac, LOGE, FL(" fail to set regId %d"), domainId ); } pMac->scan.domainIdCurrent = domainId; - csrApplyChannelPowerCountryInfo( pMac, &pMac->scan.base20MHzChannels, - pMac->scan.countryCodeCurrent, eANI_BOOLEAN_TRUE ); + csrApplyChannelPowerCountryInfo( pMac, &pMac->scan.channels11d, pMac->scan.countryCode11d, eANI_BOOLEAN_TRUE ); // switch to active scans using this new channel list pMac->scan.curScanType = eSIR_ACTIVE_SCAN; pMac->scan.f11dInfoApplied = eANI_BOOLEAN_TRUE; @@ -4032,7 +3924,7 @@ tANI_BOOLEAN csrLearnCountryInformation( tpAniSirGlobal pMac, tSirBssDescription pMac->scan.countryCodeCurrent, WNI_CFG_COUNTRY_CODE_LEN); /* Set Current RegDomain */ - status = WDA_SetRegDomain(pMac, domainId, eSIR_TRUE); + status = WDA_SetRegDomain(pMac, domainId); if ( status != eHAL_STATUS_SUCCESS ) { smsLog( pMac, LOGE, FL(" fail to Set regId %d"), domainId ); @@ -4082,6 +3974,13 @@ static void csrSaveScanResults( tpAniSirGlobal pMac, tANI_U8 reason ) pMac->scan.fCurrent11dInfoMatch = eANI_BOOLEAN_FALSE; // move the scan results from interim list to the main scan list csrMoveTempScanResultsToMainList( pMac, reason ); + + // Now check if we gathered any domain/country specific information + // If so, we should update channel list and apply Tx power settings + if( csrIs11dSupported(pMac) ) + { + csrApplyCountryInformation( pMac, FALSE ); + } } @@ -4291,27 +4190,6 @@ tANI_BOOLEAN csrScanComplete( tpAniSirGlobal pMac, tSirSmeScanRsp *pScanRsp ) //This check only valid here because csrSaveScanresults is not yet called fSuccess = (!csrLLIsListEmpty(&pMac->scan.tempScanResults, LL_ACCESS_LOCK)); } - if (pCommand->u.scanCmd.abortScanDueToBandChange) - { - /* - * Scan aborted due to band change - * The scan results need to be flushed - */ - if (pCommand->u.scanCmd.callback - != pMac->scan.callback11dScanDone) - { - smsLog(pMac, LOG1, FL("Filtering the scan results as the " - "results may belong to wrong band")); - csrScanFilterResults(pMac); - } - else - { - smsLog(pMac, LOG1, FL("11d_scan_done will flush the scan" - " results")); - } - pCommand->u.scanCmd.abortScanDueToBandChange - = eANI_BOOLEAN_FALSE; - } csrSaveScanResults(pMac, pCommand->u.scanCmd.reason); #ifdef FEATURE_WLAN_DIAG_SUPPORT_CSR @@ -5151,15 +5029,6 @@ tANI_BOOLEAN csrScanAgeOutBss(tpAniSirGlobal pMac, tCsrScanResult *pResult) //No need to hold the spin lock because caller should hold the lock for pMac->scan.scanResultList if( csrLLRemoveEntry(&pMac->scan.scanResultList, &pResult->Link, LL_ACCESS_NOLOCK) ) { - if (csrIsMacAddressEqual(pMac, - (tCsrBssid *) pResult->Result.BssDescriptor.bssId, - (tCsrBssid *) pMac->scan.currentCountryBssid)) - { - smsLog(pMac, LOGW, "Aging out 11d BSS "MAC_ADDRESS_STR, - MAC_ADDR_ARRAY(pResult->Result.BssDescriptor.bssId)); - pMac->scan.currentCountryRSSI = -128; - } - csrFreeScanResultEntry(pMac, pResult); fRet = eANI_BOOLEAN_TRUE; } @@ -6920,7 +6789,7 @@ eHalStatus csrScanForSSID(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamProfi { pScanCmd->u.scanCmd.u.scanRequest.p2pSearch = 1; } - if(pProfile->nAddIEScanLength) + if(pProfile->pAddIEScan) { status = palAllocateMemory(pMac->hHdd, (void **)&pScanCmd->u.scanCmd.u.scanRequest.pIEField, @@ -6928,7 +6797,7 @@ eHalStatus csrScanForSSID(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamProfi palZeroMemory(pMac->hHdd, pScanCmd->u.scanCmd.u.scanRequest.pIEField, pProfile->nAddIEScanLength); if(HAL_STATUS_SUCCESS(status)) { - palCopyMemory(pMac->hHdd, pScanCmd->u.scanCmd.u.scanRequest.pIEField, pProfile->addIEScan, pProfile->nAddIEScanLength); + palCopyMemory(pMac->hHdd, pScanCmd->u.scanCmd.u.scanRequest.pIEField, pProfile->pAddIEScan, pProfile->nAddIEScanLength); pScanCmd->u.scanCmd.u.scanRequest.uIEFieldLen = pProfile->nAddIEScanLength; } else @@ -7449,7 +7318,7 @@ eHalStatus csrProcessSetBGScanParam(tpAniSirGlobal pMac, tSmeCmd *pCommand) } -eHalStatus csrScanAbortMacScan(tpAniSirGlobal pMac, eCsrAbortReason reason) +eHalStatus csrScanAbortMacScan(tpAniSirGlobal pMac) { eHalStatus status = eHAL_STATUS_SUCCESS; tSirMbMsg *pMsg; @@ -7484,11 +7353,6 @@ eHalStatus csrScanAbortMacScan(tpAniSirGlobal pMac, eCsrAbortReason reason) if(HAL_STATUS_SUCCESS(status)) { palZeroMemory(pMac->hHdd, (void *)pMsg, msgLen); - if(reason == eCSR_SCAN_ABORT_DUE_TO_BAND_CHANGE) - { - pCommand->u.scanCmd.abortScanDueToBandChange - = eANI_BOOLEAN_TRUE; - } pMsg->type = pal_cpu_to_be16((tANI_U16)eWNI_SME_SCAN_ABORT_IND); pMsg->msgLen = pal_cpu_to_be16(msgLen); status = palSendMBMessage(pMac->hHdd, pMsg); @@ -7557,7 +7421,7 @@ eHalStatus csrScanAbortMacScanNotForConnect(tpAniSirGlobal pMac) if( !csrIsScanForRoamCommandActive( pMac ) ) { //Only abort the scan if it is not used for other roam/connect purpose - status = csrScanAbortMacScan(pMac, eCSR_SCAN_ABORT_DEFAULT); + status = csrScanAbortMacScan(pMac); } return (status); @@ -7768,7 +7632,7 @@ eHalStatus csrScanSavePreferredNetworkFound(tpAniSirGlobal pMac, if( (pScanResult->Result.pvIes == NULL) && pIesLocal ) { - vos_mem_free(pIesLocal); + palFreeMemory(pMac->hHdd, pIesLocal); } vos_mem_free(pParsedFrame); diff --git a/drivers/staging/prima/CORE/SME/src/csr/csrInsideApi.h b/drivers/staging/prima/CORE/SME/src/csr/csrInsideApi.h index d8028b049ac..1a8d5cf8550 100644 --- a/drivers/staging/prima/CORE/SME/src/csr/csrInsideApi.h +++ b/drivers/staging/prima/CORE/SME/src/csr/csrInsideApi.h @@ -281,7 +281,7 @@ void csrScanStopTimers(tpAniSirGlobal pMac); tANI_BOOLEAN csrScanRemoveNotRoamingScanCommand(tpAniSirGlobal pMac); //To remove fresh scan commands from the pending queue tANI_BOOLEAN csrScanRemoveFreshScanCommand(tpAniSirGlobal pMac, tANI_U8 sessionId); -eHalStatus csrScanAbortMacScan(tpAniSirGlobal pMac, eCsrAbortReason reason); +eHalStatus csrScanAbortMacScan(tpAniSirGlobal pMac); void csrRemoveCmdFromPendingList(tpAniSirGlobal pMac, tDblLinkList *pList, eSmeCommandType commandType ); eHalStatus csrScanAbortMacScanNotForConnect(tpAniSirGlobal pMac); @@ -475,14 +475,6 @@ eHalStatus csrScanGetResult(tpAniSirGlobal, tCsrScanResultFilter *pFilter, tScan \return eHalStatus -------------------------------------------------------------------------------*/ eHalStatus csrScanFlushResult(tpAniSirGlobal); -/* --------------------------------------------------------------------------- - * \fn csrScanFilterResults - * \brief Filter scan results based on valid channel list. - * \return eHalStatus - *------------------------------------------------------------------------------- - */ -eHalStatus csrScanFilterResults(tpAniSirGlobal pMac); - eHalStatus csrScanFlushSelectiveResult(tpAniSirGlobal, v_BOOL_t flushP2P); /* --------------------------------------------------------------------------- \fn csrScanBGScanGetParam @@ -976,8 +968,5 @@ tANI_BOOLEAN csrNeighborRoamConnectedProfileMatch(tpAniSirGlobal pMac, tCsrScanR tDot11fBeaconIEs *pIes); #endif eHalStatus csrSetTxPower(tpAniSirGlobal pMac, v_U8_t sessionId, v_U8_t mW); - -eHalStatus csrRoamDelPMKIDfromCache( tpAniSirGlobal pMac, tANI_U32 sessionId, - tANI_U8 *pBSSId ); #endif diff --git a/drivers/staging/prima/CORE/SME/src/csr/csrNeighborRoam.c b/drivers/staging/prima/CORE/SME/src/csr/csrNeighborRoam.c index bccb7a1fb49..cdc8c5017e8 100644..100755 --- a/drivers/staging/prima/CORE/SME/src/csr/csrNeighborRoam.c +++ b/drivers/staging/prima/CORE/SME/src/csr/csrNeighborRoam.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2014, The Linux Foundation. All rights reserved. + * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -604,7 +604,7 @@ static void csrNeighborRoamResetCfgListChanScanControlInfo(tpAniSirGlobal pMac) /* Abort any ongoing scan */ if (eANI_BOOLEAN_TRUE == pNeighborRoamInfo->scanRspPending) { - csrScanAbortMacScan(pMac, eCSR_SCAN_ABORT_DEFAULT); + csrScanAbortMacScan(pMac); } pNeighborRoamInfo->scanRspPending = eANI_BOOLEAN_FALSE; @@ -948,10 +948,13 @@ static eHalStatus csrNeighborRoamIssuePreauthReq(tpAniSirGlobal pMac) tpCsrNeighborRoamControlInfo pNeighborRoamInfo = &pMac->roam.neighborRoamInfo; eHalStatus status = eHAL_STATUS_SUCCESS; tpCsrNeighborRoamBSSInfo pNeighborBssNode; - +//Begin fjdw67 Motorola, IKJB42MAIN-6385 - LFR roaming instrumentation #ifdef FEATURE_WLAN_LFR_METRICS tCsrRoamInfo *roamInfo; + roamInfo = vos_mem_malloc(sizeof(tCsrRoamInfo)); #endif +//End fjdw67 Motorola, IKJB42MAIN-6385 + /* This must not be true here */ VOS_ASSERT(pNeighborRoamInfo->FTRoamInfo.preauthRspPending == eANI_BOOLEAN_FALSE); @@ -969,25 +972,15 @@ static eHalStatus csrNeighborRoamIssuePreauthReq(tpAniSirGlobal pMac) } else { +//Begin fjdw67 Motorola, IKJB42MAIN-6385 - LFR roaming instrumentation #ifdef FEATURE_WLAN_LFR_METRICS - /* LFR metrics - pre-auth initiation metric. - Send the event to supplicant that pre-auth was initiated */ - roamInfo = vos_mem_malloc(sizeof(tCsrRoamInfo)); - if (NULL == roamInfo) - { - smsLog(pMac, LOG1, FL("Memory allocation failed!")); - } - else - { - vos_mem_copy((void *)roamInfo->bssid, - (void *)pNeighborBssNode->pBssDescription->bssId, - sizeof(tCsrBssid)); - csrRoamCallCallback(pMac, pNeighborRoamInfo->csrSessionId, - roamInfo, 0, eCSR_ROAM_PREAUTH_INIT_NOTIFY, 0); - vos_mem_free(pRoamInfo); - } + /* LFR metrics - pre-auth initiation metric. send the event to supplicant that pre-auth was initiated */ + //vos_mem_zero(&roamInfo, sizeof(tCsrRoamInfo)); + printk("Sending preauth init notify event \n"); + vos_mem_copy((void *)roamInfo->bssid, (void *)pNeighborBssNode->pBssDescription->bssId, sizeof( tCsrBssid )); + csrRoamCallCallback(pMac, pNeighborRoamInfo->csrSessionId, roamInfo, 0, eCSR_ROAM_PREAUTH_INIT_NOTIFY, 0); #endif - +//End fjdw67 Motorola, IKJB42MAIN-6385 status = csrRoamEnqueuePreauth(pMac, pNeighborRoamInfo->csrSessionId, pNeighborBssNode->pBssDescription, eCsrPerformPreauth, eANI_BOOLEAN_TRUE); @@ -1044,11 +1037,11 @@ eHalStatus csrNeighborRoamPreauthRspHandler(tpAniSirGlobal pMac, tSirRetStatus l VOS_STATUS vosStatus = VOS_STATUS_SUCCESS; eHalStatus preauthProcessed = eHAL_STATUS_SUCCESS; tpCsrNeighborRoamBSSInfo pPreauthRspNode = NULL; - +//Begin fjdw67 Motorola, IKJB42MAIN-6385 - LFR roaming instrumentation #ifdef FEATURE_WLAN_LFR_METRICS tCsrRoamInfo *roamInfo; #endif - +//End fjdw67 Motorola, IKJB42MAIN-6385 if (eANI_BOOLEAN_FALSE == pNeighborRoamInfo->FTRoamInfo.preauthRspPending) { @@ -1092,25 +1085,15 @@ eHalStatus csrNeighborRoamPreauthRspHandler(tpAniSirGlobal pMac, tSirRetStatus l pPreauthRspNode->pBssDescription->bssId[4], pPreauthRspNode->pBssDescription->bssId[5], (int)pPreauthRspNode->pBssDescription->channelId); - +//Begin fjdw67 Motorola, IKJB42MAIN-6385 - LFR roaming instrumentation #ifdef FEATURE_WLAN_LFR_METRICS - /* LFR metrics - pre-auth completion metric. - Send the event to supplicant that pre-auth successfully completed */ + /* LFR metrics - pre-auth completion metric. send the event to supplicant that pre-auth successfully completed */ + //printk("Preauth successfully completed send event notification \n"); roamInfo = vos_mem_malloc(sizeof(tCsrRoamInfo)); - if (NULL == roamInfo) - { - smsLog(pMac, LOG1, FL("Memory allocation failed!")); - } - else - { - vos_mem_copy((void *)roamInfo->bssid, - (void *)pPreauthRspNode->pBssDescription->bssId, - sizeof(tCsrBssid)); - csrRoamCallCallback(pMac, pNeighborRoamInfo->csrSessionId, - roamInfo, 0, eCSR_ROAM_PREAUTH_STATUS_SUCCESS, 0); - vos_mem_free(pRoamInfo); - } + vos_mem_copy((void *)roamInfo->bssid, (void *)pPreauthRspNode->pBssDescription->bssId, sizeof( tCsrBssid )); + csrRoamCallCallback(pMac, pNeighborRoamInfo->csrSessionId, roamInfo, 0, eCSR_ROAM_PREAUTH_STATUS_SUCCESS, 0); #endif +//End fjdw67 Motorola, IKJB42MAIN-6385 /* Preauth competer successfully. Insert the preauthenticated node to tail of preAuthDoneList */ csrNeighborRoamRemoveRoamableAPListEntry(pMac, &pNeighborRoamInfo->roamableAPList, pPreauthRspNode); @@ -1146,26 +1129,16 @@ eHalStatus csrNeighborRoamPreauthRspHandler(tpAniSirGlobal pMac, tSirRetStatus l pNeighborBssNode = GET_BASE_ADDR(pEntry, tCsrNeighborRoamBSSInfo, List); /* Add the BSSID to pre-auth fail list */ status = csrNeighborRoamAddBssIdToPreauthFailList(pMac, pNeighborBssNode->pBssDescription->bssId); - +//Begin fjdw67 Motorola, IKJB42MAIN-6385 - LFR roaming instrumentation #ifdef FEATURE_WLAN_LFR_METRICS - /* LFR metrics - pre-auth completion metric. Send the event - to supplicant that pre-auth successfully completed */ - roamInfo = vos_mem_malloc(sizeof(tCsrRoamInfo)); - if (NULL == roamInfo) - { - smsLog(pMac, LOG1, FL("Memory allocation failed!")); - } - else - { - vos_mem_copy((void *)roamInfo->bssid, - (void *)pNeighborBssNode->pBssDescription->bssId, - sizeof(tCsrBssid)); - csrRoamCallCallback(pMac, pNeighborRoamInfo->csrSessionId, - roamInfo, 0, eCSR_ROAM_PREAUTH_STATUS_FAILURE, 0); - vos_mem_free(pRoamInfo); - } + /* LFR metrics - pre-auth completion metric. send the event to supplicant that pre-auth successfully completed */ + // vos_mem_zero(&roamInfo, sizeof(tCsrRoamInfo)); + //printk("preauth failed. send event to wpa supplicant \n"); + roamInfo = vos_mem_malloc(sizeof(tCsrRoamInfo)); + vos_mem_copy((void *)roamInfo->bssid, (void *)pNeighborBssNode->pBssDescription->bssId, sizeof( tCsrBssid )); + csrRoamCallCallback(pMac, pNeighborRoamInfo->csrSessionId, roamInfo, 0, eCSR_ROAM_PREAUTH_STATUS_FAILURE, 0); #endif - +//End fjdw67 Motorola, IKJB42MAIN-6385 /* Now we can free this node */ csrNeighborRoamFreeNeighborRoamBSSNode(pMac, pNeighborBssNode); } @@ -1773,8 +1746,8 @@ static VOS_STATUS csrNeighborRoamHandleEmptyScanResult(tpAniSirGlobal pMac) * Set uEmptyScanCount to MAX so that we always enter this * condition on subsequent empty scan results */ - pNeighborRoamInfo->uEmptyScanCount = eMaxEmptyScan; scanPeriodCount = pNeighborRoamInfo->uEmptyScanRefreshTimerCount; + pNeighborRoamInfo->uEmptyScanCount = eMaxEmptyScan; pNeighborRoamInfo->emptyScanTotalTime = pNeighborRoamInfo->cfgParams.emptyScanRefreshPeriod*scanPeriodCount; /* From here on, ONLY scan on channels in the occupied list */ @@ -2399,8 +2372,7 @@ eHalStatus csrNeighborRoamPerformBgScan(tpAniSirGlobal pMac, tANI_U32 sessionId) tCsrBGScanRequest bgScanParams; tANI_U8 channel = 0; - if ( pNeighborRoamInfo->roamChannelInfo.currentChannelListInfo.ChannelList && - pNeighborRoamInfo->roamChannelInfo.currentChannelListInfo.numOfChannels ) + if (pNeighborRoamInfo->roamChannelInfo.currentChannelListInfo.ChannelList) { NEIGHBOR_ROAM_DEBUG(pMac, LOG1, FL("Channel List Address = %08x"), &pNeighborRoamInfo->roamChannelInfo.currentChannelListInfo.ChannelList[0]); } @@ -2432,17 +2404,9 @@ eHalStatus csrNeighborRoamPerformBgScan(tpAniSirGlobal pMac, tANI_U32 sessionId) channel = pNeighborRoamInfo->roamChannelInfo.currentChannelListInfo.ChannelList[pNeighborRoamInfo->roamChannelInfo.currentChanIndex]; bgScanParams.ChannelInfo.numOfChannels = 1; bgScanParams.ChannelInfo.ChannelList = &channel; - + csrNeighborRoamFillNonChannelBgScanParams(pMac, &bgScanParams); - /* Update the passive scan time for DFS channel */ - if ((TRUE == CSR_IS_CHANNEL_DFS(channel)) && - (TRUE == pMac->roam.configParam.allowDFSChannelRoam)) - { - bgScanParams.minChnTime = pMac->roam.configParam.nPassiveMinChnTime; - bgScanParams.maxChnTime = pMac->roam.configParam.nPassiveMaxChnTime; - } - status = csrNeighborRoamIssueBgScanRequest(pMac, &bgScanParams, sessionId, csrNeighborRoamScanRequestCallback); if (eHAL_STATUS_SUCCESS != status) @@ -2891,7 +2855,6 @@ VOS_STATUS csrNeighborRoamCreateChanListFromNeighborReport(tpAniSirGlobal pMac) tpCsrNeighborRoamControlInfo pNeighborRoamInfo = &pMac->roam.neighborRoamInfo; tANI_U8 numChannels = 0, i = 0; tANI_U8 channelList[MAX_BSS_IN_NEIGHBOR_RPT]; - int mergedOutputNumOfChannels = 0; #if 0 eHalStatus status = eHAL_STATUS_SUCCESS; #endif @@ -2986,26 +2949,6 @@ VOS_STATUS csrNeighborRoamCreateChanListFromNeighborReport(tpAniSirGlobal pMac) vos_mem_copy(pNeighborRoamInfo->roamChannelInfo.currentChannelListInfo.ChannelList, channelList, (numChannels) * sizeof(tANI_U8)); pNeighborRoamInfo->roamChannelInfo.currentChannelListInfo.numOfChannels = numChannels; - /* - * Create a Union of occupied channel list learnt by the DUT along with the Neighbor - * report Channels. This increases the chances of the DUT to get a candidate AP while - * roaming even if the Neighbor Report is not able to provide sufficient information. - * */ - if (pMac->scan.occupiedChannels.numChannels) - { - csrNeighborRoamMergeChannelLists(pMac, - &pMac->scan.occupiedChannels.channelList[0], - pMac->scan.occupiedChannels.numChannels, - &pNeighborRoamInfo->roamChannelInfo.currentChannelListInfo.ChannelList[0], - pNeighborRoamInfo->roamChannelInfo.currentChannelListInfo.numOfChannels, - &mergedOutputNumOfChannels); - pNeighborRoamInfo->roamChannelInfo.currentChannelListInfo.numOfChannels = - mergedOutputNumOfChannels; - - } - /*Indicate the firmware about the update only if any new channels are added. - * Otherwise, the firmware would already be knowing the non-IAPPneighborlist - * channels. There is no need to update.*/ if (numChannels) { smsLog(pMac, LOG1, FL("IAPP Neighbor list callback received as expected in state %d."), @@ -3290,19 +3233,7 @@ VOS_STATUS csrNeighborRoamPrepareNonOccupiedChannelList( if (!csrIsChannelPresentInList(pOccupiedChannelList, numOccupiedChannels, pInputChannelList[i])) { - /* DFS channel will be added in the list only when the - DFS Roaming scan flag is enabled*/ - if (CSR_IS_CHANNEL_DFS(pInputChannelList[i])) - { - if (pMac->roam.configParam.allowDFSChannelRoam == TRUE) - { - pOutputChannelList[outputNumOfChannels++] = pInputChannelList[i]; - } - } - else - { - pOutputChannelList[outputNumOfChannels++] = pInputChannelList[i]; - } + pOutputChannelList[outputNumOfChannels++] = pInputChannelList[i]; } } @@ -3865,10 +3796,8 @@ eHalStatus csrNeighborRoamIndicateDisconnect(tpAniSirGlobal pMac, tANI_U8 sessio #endif tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, sessionId); - VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, - FL("Disconnect indication on session %d in state %d from BSSID : " - MAC_ADDRESS_STR), sessionId, pNeighborRoamInfo->neighborRoamState, - MAC_ADDR_ARRAY(pSession->connectedProfile.bssid)); + smsLog(pMac, LOGE, FL("Disconnect indication on session %d in state %d"), + sessionId, pNeighborRoamInfo->neighborRoamState); #ifdef FEATURE_WLAN_LFR /*Free the current previous profile and move the current profile to prev profile.*/ @@ -3926,7 +3855,6 @@ eHalStatus csrNeighborRoamIndicateDisconnect(tpAniSirGlobal pMac, tANI_U8 sessio * in-turn block scans (see csrIsScanAllowed). */ CSR_NEIGHBOR_ROAM_STATE_TRANSITION(eCSR_NEIGHBOR_ROAM_STATE_INIT); - pNeighborRoamInfo->roamChannelInfo.IAPPNeighborListReceived = eANI_BOOLEAN_FALSE; } break; @@ -3944,7 +3872,6 @@ eHalStatus csrNeighborRoamIndicateDisconnect(tpAniSirGlobal pMac, tANI_U8 sessio case eCSR_NEIGHBOR_ROAM_STATE_CONNECTED: CSR_NEIGHBOR_ROAM_STATE_TRANSITION(eCSR_NEIGHBOR_ROAM_STATE_INIT) - pNeighborRoamInfo->roamChannelInfo.IAPPNeighborListReceived = eANI_BOOLEAN_FALSE; csrNeighborRoamResetConnectedStateControlInfo(pMac); #ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD if(!pMac->roam.configParam.isRoamOffloadScanEnabled) @@ -3958,7 +3885,6 @@ eHalStatus csrNeighborRoamIndicateDisconnect(tpAniSirGlobal pMac, tANI_U8 sessio case eCSR_NEIGHBOR_ROAM_STATE_CFG_CHAN_LIST_SCAN: CSR_NEIGHBOR_ROAM_STATE_TRANSITION(eCSR_NEIGHBOR_ROAM_STATE_INIT); - pNeighborRoamInfo->roamChannelInfo.IAPPNeighborListReceived = eANI_BOOLEAN_FALSE; csrNeighborRoamResetCfgListChanScanControlInfo(pMac); #ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD if (!pMac->roam.configParam.isRoamOffloadScanEnabled) @@ -3976,7 +3902,6 @@ eHalStatus csrNeighborRoamIndicateDisconnect(tpAniSirGlobal pMac, tANI_U8 sessio case eCSR_NEIGHBOR_ROAM_STATE_REPORT_SCAN: case eCSR_NEIGHBOR_ROAM_STATE_PREAUTHENTICATING: CSR_NEIGHBOR_ROAM_STATE_TRANSITION(eCSR_NEIGHBOR_ROAM_STATE_INIT) - pNeighborRoamInfo->roamChannelInfo.IAPPNeighborListReceived = eANI_BOOLEAN_FALSE; csrNeighborRoamResetPreauthControlInfo(pMac); csrNeighborRoamResetReportScanStateControlInfo(pMac); #ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD @@ -3993,7 +3918,6 @@ eHalStatus csrNeighborRoamIndicateDisconnect(tpAniSirGlobal pMac, tANI_U8 sessio NEIGHBOR_ROAM_DEBUG(pMac, LOGW, FL("Received disconnect event in state %d"), pNeighborRoamInfo->neighborRoamState); NEIGHBOR_ROAM_DEBUG(pMac, LOGW, FL("Transitioning to INIT state")); CSR_NEIGHBOR_ROAM_STATE_TRANSITION(eCSR_NEIGHBOR_ROAM_STATE_INIT) - pNeighborRoamInfo->roamChannelInfo.IAPPNeighborListReceived = eANI_BOOLEAN_FALSE; break; } #ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD @@ -4029,9 +3953,7 @@ eHalStatus csrNeighborRoamIndicateConnect(tpAniSirGlobal pMac, tANI_U8 sessionId int init_ft_flag = FALSE; #endif - // if session id invalid then we need return failure - if (NULL == pNeighborRoamInfo || !CSR_IS_SESSION_VALID(pMac, sessionId) || - (NULL == pMac->roam.roamSession[sessionId].pCurRoamProfile)) + if (NULL == pNeighborRoamInfo) { return eHAL_STATUS_FAILURE; } @@ -4056,7 +3978,6 @@ eHalStatus csrNeighborRoamIndicateConnect(tpAniSirGlobal pMac, tANI_U8 sessionId { /* Just transition the state to INIT state. Rest of the clean up happens when we get next connect indication */ CSR_NEIGHBOR_ROAM_STATE_TRANSITION(eCSR_NEIGHBOR_ROAM_STATE_INIT) - pNeighborRoamInfo->roamChannelInfo.IAPPNeighborListReceived = eANI_BOOLEAN_FALSE; break; } /* Fall through if the status is SUCCESS */ @@ -4388,7 +4309,7 @@ eHalStatus csrNeighborRoamInit(tpAniSirGlobal pMac) pNeighborRoamInfo->scanRequestTimeStamp = (tANI_TIMESTAMP)palGetTickCount(pMac->hHdd); CSR_NEIGHBOR_ROAM_STATE_TRANSITION(eCSR_NEIGHBOR_ROAM_STATE_INIT) - pNeighborRoamInfo->roamChannelInfo.IAPPNeighborListReceived = eANI_BOOLEAN_FALSE; + return eHAL_STATUS_SUCCESS; } @@ -4481,12 +4402,12 @@ void csrNeighborRoamRequestHandoff(tpAniSirGlobal pMac) tCsrNeighborRoamBSSInfo handoffNode; extern void csrRoamRoamingStateDisassocRspProcessor( tpAniSirGlobal pMac, tSirSmeDisassocRsp *pSmeDisassocRsp ); tANI_U32 roamId = 0; - eHalStatus status; - +//Begin fjdw67 Motorola, IKJB42MAIN-6385 - LFR roaming instrumentation #ifdef FEATURE_WLAN_LFR_METRICS tCsrRoamInfo *roamInfoMetrics; + roamInfoMetrics = vos_mem_malloc(sizeof(tCsrRoamInfo)); #endif - +//End fjdw67 Motorola, IKJB42MAIN-6385 if (pMac->roam.neighborRoamInfo.neighborRoamState != eCSR_NEIGHBOR_ROAM_STATE_PREAUTH_DONE) { smsLog(pMac, LOGE, FL("Roam requested when Neighbor roam is in %d state"), @@ -4510,39 +4431,19 @@ void csrNeighborRoamRequestHandoff(tpAniSirGlobal pMac) handoffNode.pBssDescription->bssId[3], handoffNode.pBssDescription->bssId[4], handoffNode.pBssDescription->bssId[5]); - -#ifdef FEATURE_WLAN_LFR_METRICS - /* LFR metrics - pre-auth completion metric. - Send the event to supplicant that pre-auth successfully completed */ - roamInfoMetrics = vos_mem_malloc(sizeof(tCsrRoamInfo)); - if (NULL == roamInfoMetrics) - { - smsLog(pMac, LOG1, FL("Memory allocation failed!")); - } - else - { - vos_mem_copy((void *)roamInfoMetrics->bssid, - (void *)&handoffNode.pBssDescription->bssId, sizeof(tCsrBssid)); - csrRoamCallCallback(pMac, pNeighborRoamInfo->csrSessionId, - roamInfoMetrics, 0, eCSR_ROAM_HANDOVER_SUCCESS, 0); - vos_mem_free(pRoamInfo); - } -#endif - + //Begin fjdw67 Motorola, IKJB42MAIN-6385 - LFR roaming instrumentation + #ifdef FEATURE_WLAN_LFR_METRICS + /* LFR metrics - pre-auth completion metric. send the event to supplicant that pre-auth successfully completed */ + //printk("Handoff candidate is initiated. send event to wpa supplicant \n"); + vos_mem_copy((void *)roamInfoMetrics->bssid, (void *)handoffNode.pBssDescription->bssId, sizeof( tCsrBssid )); + csrRoamCallCallback(pMac, pNeighborRoamInfo->csrSessionId, roamInfoMetrics, 0, eCSR_ROAM_HANDOVER_SUCCESS, 0); + #endif + //End fjdw67 Motorola, IKJB42MAIN-6385 /* Free the profile.. Just to make sure we dont leak memory here */ csrReleaseProfile(pMac, &pNeighborRoamInfo->csrNeighborRoamProfile); /* Create the Handoff AP profile. Copy the currently connected profile and update only the BSSID and channel number This should happen before issuing disconnect */ - status = csrRoamCopyConnectedProfile(pMac, - pNeighborRoamInfo->csrSessionId, - &pNeighborRoamInfo->csrNeighborRoamProfile); - if(eHAL_STATUS_SUCCESS != status) - { - VOS_TRACE (VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, - FL("csrRoamCopyConnectedProfile returned failed %d"), status); - return; - } - + csrRoamCopyConnectedProfile(pMac, pNeighborRoamInfo->csrSessionId, &pNeighborRoamInfo->csrNeighborRoamProfile); vos_mem_copy(pNeighborRoamInfo->csrNeighborRoamProfile.BSSIDs.bssid, handoffNode.pBssDescription->bssId, sizeof(tSirMacAddr)); pNeighborRoamInfo->csrNeighborRoamProfile.ChannelInfo.ChannelList[0] = handoffNode.pBssDescription->channelId; @@ -4693,7 +4594,6 @@ tANI_BOOLEAN csrNeighborRoamStatePreauthDone(tpAniSirGlobal pMac) ---------------------------------------------------------------------------*/ void csrNeighborRoamTranistionPreauthDoneToDisconnected(tpAniSirGlobal pMac) { - tpCsrNeighborRoamControlInfo pNeighborRoamInfo = &pMac->roam.neighborRoamInfo; if (pMac->roam.neighborRoamInfo.neighborRoamState != eCSR_NEIGHBOR_ROAM_STATE_PREAUTH_DONE) return; @@ -4702,7 +4602,6 @@ void csrNeighborRoamTranistionPreauthDoneToDisconnected(tpAniSirGlobal pMac) // Transition to init state CSR_NEIGHBOR_ROAM_STATE_TRANSITION(eCSR_NEIGHBOR_ROAM_STATE_INIT) - pNeighborRoamInfo->roamChannelInfo.IAPPNeighborListReceived = eANI_BOOLEAN_FALSE; } /* --------------------------------------------------------------------------- diff --git a/drivers/staging/prima/CORE/SME/src/csr/csrTdlsProcess.c b/drivers/staging/prima/CORE/SME/src/csr/csrTdlsProcess.c index 1947babda18..697ae1f585e 100644 --- a/drivers/staging/prima/CORE/SME/src/csr/csrTdlsProcess.c +++ b/drivers/staging/prima/CORE/SME/src/csr/csrTdlsProcess.c @@ -500,7 +500,6 @@ eHalStatus csrTdlsProcessSendMgmt( tpAniSirGlobal pMac, tSmeCmd *cmd ) { //Done with the buf. Free it. palFreeMemory( pMac->hHdd, tdlsSendMgmtCmdInfo->buf ); - tdlsSendMgmtCmdInfo->buf = NULL; tdlsSendMgmtCmdInfo->len = 0; } diff --git a/drivers/staging/prima/CORE/SME/src/csr/csrUtil.c b/drivers/staging/prima/CORE/SME/src/csr/csrUtil.c index 95413b2728f..f082ad920d7 100644 --- a/drivers/staging/prima/CORE/SME/src/csr/csrUtil.c +++ b/drivers/staging/prima/CORE/SME/src/csr/csrUtil.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2014, The Linux Foundation. All rights reserved. + * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -1540,7 +1540,6 @@ tANI_BOOLEAN csrIsP2pSessionConnected( tpAniSirGlobal pMac ) tCsrRoamSession *pSession = NULL; tANI_U32 countP2pCli = 0; tANI_U32 countP2pGo = 0; - tANI_U32 countSAP = 0; for( i = 0; i < CSR_ROAM_SESSION_MAX; i++ ) { @@ -1557,10 +1556,6 @@ tANI_BOOLEAN csrIsP2pSessionConnected( tpAniSirGlobal pMac ) if (pSession->pCurRoamProfile->csrPersona == VOS_P2P_GO_MODE) { countP2pGo++; } - - if (pSession->pCurRoamProfile->csrPersona == VOS_STA_SAP_MODE) { - countSAP++; - } } } } @@ -1569,7 +1564,7 @@ tANI_BOOLEAN csrIsP2pSessionConnected( tpAniSirGlobal pMac ) * - at least one P2P CLI session is connected * - at least one P2P GO session is connected */ - if ( (countP2pCli > 0) || (countP2pGo > 0 ) || (countSAP > 0 ) ) { + if ( (countP2pCli > 0) || (countP2pGo > 0 ) ) { fRc = eANI_BOOLEAN_TRUE; } @@ -5771,10 +5766,11 @@ void csrReleaseProfile(tpAniSirGlobal pMac, tCsrRoamProfile *pProfile) pProfile->pWAPIReqIE = NULL; } #endif /* FEATURE_WLAN_WAPI */ - if (pProfile->nAddIEScanLength) + + if(pProfile->pAddIEScan) { - memset(pProfile->addIEScan, 0 , SIR_MAC_MAX_IE_LENGTH+2); - pProfile->nAddIEScanLength = 0; + palFreeMemory(pMac->hHdd, pProfile->pAddIEScan); + pProfile->pAddIEScan = NULL; } if(pProfile->pAddIEAssoc) @@ -5858,7 +5854,7 @@ tSirResultCodes csrGetDeAuthRspStatusCode( tSirSmeDeauthRsp *pSmeRsp ) tANI_U8 *pBuffer = (tANI_U8 *)pSmeRsp; tANI_U32 ret; - pBuffer += (sizeof(tANI_U16) + sizeof(tANI_U16) + sizeof(tANI_U8) + sizeof(tANI_U16)); + pBuffer += (sizeof(tANI_U16) + sizeof(tANI_U16) + sizeof(tSirMacAddr)); //tSirResultCodes is an enum, assuming is 32bit //If we cannot make this assumption, use copymemory pal_get_U32( pBuffer, &ret ); diff --git a/drivers/staging/prima/CORE/SME/src/p2p/p2p_Api.c b/drivers/staging/prima/CORE/SME/src/p2p/p2p_Api.c index 093bcb7d712..75efe47413f 100644 --- a/drivers/staging/prima/CORE/SME/src/p2p/p2p_Api.c +++ b/drivers/staging/prima/CORE/SME/src/p2p/p2p_Api.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2014, The Linux Foundation. All rights reserved. + * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -70,7 +70,7 @@ eHalStatus p2pProcessRemainOnChannelCmd(tpAniSirGlobal pMac, tSmeCmd *p2pRemaino { eHalStatus status = eHAL_STATUS_SUCCESS; tSirRemainOnChnReq* pMsg; - tANI_U32 len; + tANI_U16 len; tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, p2pRemainonChn->sessionId ); if(!pSession) @@ -109,20 +109,14 @@ eHalStatus p2pProcessRemainOnChannelCmd(tpAniSirGlobal pMac, tSmeCmd *p2pRemaino #else len = sizeof(tSirRemainOnChnReq) + pMac->p2pContext.probeRspIeLength; #endif - if( len > 0xFFFF ) - { - /*In coming len for Msg is more then 16bit value*/ - smsLog(pMac, LOGE, FL(" Message length is very large, %d"), - len); - return eHAL_STATUS_FAILURE; - } + status = palAllocateMemory(pMac->hHdd, (void**)&pMsg, len ); if(HAL_STATUS_SUCCESS(status)) { VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, "%s call", __func__); palZeroMemory(pMac->hHdd, pMsg, sizeof(tSirRemainOnChnReq)); pMsg->messageType = eWNI_SME_REMAIN_ON_CHANNEL_REQ; - pMsg->length = (tANI_U16)len; + pMsg->length = len; palCopyMemory( pMac, pMsg->selfMacAddr, pSession->selfMacAddr, sizeof(tSirMacAddr) ); pMsg->chnNum = p2pRemainonChn->u.remainChlCmd.chn; pMsg->phyMode = p2pRemainonChn->u.remainChlCmd.phyMode; @@ -1161,7 +1155,7 @@ eHalStatus p2pCreateActionFrame(tpAniSirGlobal pMac, tANI_U8 SessionID, void *p2 return eHAL_STATUS_FAILURE; } - csrScanAbortMacScan(pMac, eCSR_SCAN_ABORT_DEFAULT); + csrScanAbortMacScan(pMac); switch (actionFrameType) { diff --git a/drivers/staging/prima/CORE/SME/src/pmc/pmc.c b/drivers/staging/prima/CORE/SME/src/pmc/pmc.c index 5d2c6c9951b..d27e9a0ec48 100644 --- a/drivers/staging/prima/CORE/SME/src/pmc/pmc.c +++ b/drivers/staging/prima/CORE/SME/src/pmc/pmc.c @@ -87,7 +87,7 @@ eHalStatus pmcEnterLowPowerState (tHalHandle hHal) { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - pmcLog(pMac, LOG2, FL("Entering pmcEnterLowPowerState")); + smsLog(pMac, LOG2, FL("Entering pmcEnterLowPowerState")); /* If already in Low Power State, just return. */ if (pMac->pmc.pmcState == LOW_POWER) @@ -96,7 +96,7 @@ eHalStatus pmcEnterLowPowerState (tHalHandle hHal) /* Cancel any running timers. */ if (palTimerStop(pMac->hHdd, pMac->pmc.hImpsTimer) != eHAL_STATUS_SUCCESS) { - pmcLog(pMac, LOGE, FL("Cannot cancel IMPS timer")); + smsLog(pMac, LOGE, FL("Cannot cancel IMPS timer")); return eHAL_STATUS_FAILURE; } @@ -104,7 +104,7 @@ eHalStatus pmcEnterLowPowerState (tHalHandle hHal) if (palTimerStop(pMac->hHdd, pMac->pmc.hExitPowerSaveTimer) != eHAL_STATUS_SUCCESS) { - pmcLog(pMac, LOGE, FL("Cannot cancel exit power save mode timer")); + smsLog(pMac, LOGE, FL("Cannot cancel exit power save mode timer")); return eHAL_STATUS_FAILURE; } @@ -137,12 +137,12 @@ eHalStatus pmcExitLowPowerState (tHalHandle hHal) { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - pmcLog(pMac, LOG2, FL("Entering pmcExitLowPowerState")); + smsLog(pMac, LOG2, FL("Entering pmcExitLowPowerState")); /* Must be in Low Power State if we are going to exit that state. */ if (pMac->pmc.pmcState != LOW_POWER) { - pmcLog(pMac, LOGE, FL("Cannot exit Low Power State if not in that state")); + smsLog(pMac, LOGE, FL("Cannot exit Low Power State if not in that state")); return eHAL_STATUS_FAILURE; } @@ -181,7 +181,7 @@ eHalStatus pmcEnterFullPowerState (tHalHandle hHal) { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - pmcLog(pMac, LOG2, FL("Entering pmcEnterFullPowerState")); + smsLog(pMac, LOG2, FL("Entering pmcEnterFullPowerState")); /* Take action based on the current state. */ switch (pMac->pmc.pmcState) @@ -217,15 +217,15 @@ eHalStatus pmcEnterFullPowerState (tHalHandle hHal) /* Cannot go directly to Full Power State from these states. */ default: - pmcLog(pMac, LOGE, FL("Trying to enter Full Power State from state %d"), pMac->pmc.pmcState); + smsLog(pMac, LOGE, FL("Trying to enter Full Power State from state %d"), pMac->pmc.pmcState); PMC_ABORT; return eHAL_STATUS_FAILURE; } - pmcLog(pMac, LOG1, "PMC: Enter full power done: Cancel XO Core ON vote"); + smsLog(pMac, LOG1, "PMC: Enter full power done: Cancel XO Core ON vote"); if (vos_chipVoteXOCore(NULL, NULL, NULL, VOS_FALSE) != VOS_STATUS_SUCCESS) { - pmcLog(pMac, LOGE, "Could not cancel XO Core ON vote. Not returning failure. " + smsLog(pMac, LOGE, "Could not cancel XO Core ON vote. Not returning failure. " "Power consumed will be high"); } @@ -255,7 +255,7 @@ eHalStatus pmcEnterRequestFullPowerState (tHalHandle hHal, tRequestFullPowerReas vos_call_status_type callType; VOS_STATUS status; - pmcLog(pMac, LOG2, FL("Entering pmcEnterRequestFullPowerState")); + smsLog(pMac, LOG2, FL("Entering pmcEnterRequestFullPowerState")); /* Take action based on the current state of the device. */ switch (pMac->pmc.pmcState) @@ -263,12 +263,12 @@ eHalStatus pmcEnterRequestFullPowerState (tHalHandle hHal, tRequestFullPowerReas /* Should not request full power if already there. */ case FULL_POWER: - pmcLog(pMac, LOGE, FL("Requesting Full Power State when already there")); + smsLog(pMac, LOGE, FL("Requesting Full Power State when already there")); return eHAL_STATUS_FAILURE; /* Only power events can take device out of Low Power State. */ case LOW_POWER: - pmcLog(pMac, LOGE, FL("Cannot request exit from Low Power State")); + smsLog(pMac, LOGE, FL("Cannot request exit from Low Power State")); return eHAL_STATUS_FAILURE; /* Cannot go directly to Request Full Power state from these states. @@ -280,7 +280,7 @@ eHalStatus pmcEnterRequestFullPowerState (tHalHandle hHal, tRequestFullPowerReas case REQUEST_BMPS: case REQUEST_ENTER_WOWL: case REQUEST_EXIT_WOWL: - pmcLog(pMac, LOGW, FL("Request for full power is being buffered. " + smsLog(pMac, LOGW, FL("Request for full power is being buffered. " "Current state is %d"), pMac->pmc.pmcState); //Ignore the new reason if request for full power is already pending if( !pMac->pmc.requestFullPowerPending ) @@ -347,7 +347,7 @@ eHalStatus pmcEnterRequestFullPowerState (tHalHandle hHal, tRequestFullPowerReas if (pmcIssueCommand(hHal, eSmeCommandExitImps, NULL, 0, FALSE) != eHAL_STATUS_SUCCESS) { - pmcLog(pMac, LOGE, "PMC: failure to send message " + smsLog(pMac, LOGE, "PMC: failure to send message " "eWNI_PMC_EXIT_IMPS_REQ"); return eHAL_STATUS_FAILURE; } @@ -360,7 +360,7 @@ eHalStatus pmcEnterRequestFullPowerState (tHalHandle hHal, tRequestFullPowerReas if (pmcIssueCommand(hHal, eSmeCommandExitUapsd, &fullPowerReason, sizeof(tRequestFullPowerReason), FALSE) != eHAL_STATUS_SUCCESS) { - pmcLog(pMac, LOGE, "PMC: failure to send message " + smsLog(pMac, LOGE, "PMC: failure to send message " "eWNI_PMC_EXIT_UAPSD_REQ"); return eHAL_STATUS_FAILURE; } @@ -371,7 +371,7 @@ eHalStatus pmcEnterRequestFullPowerState (tHalHandle hHal, tRequestFullPowerReas if (pmcIssueCommand(hHal, eSmeCommandExitWowl, &fullPowerReason, sizeof(tRequestFullPowerReason), FALSE) != eHAL_STATUS_SUCCESS) { - pmcLog(pMac, LOGP, "PMC: failure to send message " + smsLog(pMac, LOGP, "PMC: failure to send message " "eWNI_PMC_EXIT_WOWL_REQ"); return eHAL_STATUS_FAILURE; } @@ -379,8 +379,7 @@ eHalStatus pmcEnterRequestFullPowerState (tHalHandle hHal, tRequestFullPowerReas /* Cannot go directly to Request Full Power State from these states. */ default: - pmcLog(pMac, LOGE, - FL("Trying to enter Request Full Power State from state %d"), pMac->pmc.pmcState); + smsLog(pMac, LOGE, FL("Trying to enter Request Full Power State from state %d"), pMac->pmc.pmcState); PMC_ABORT; return eHAL_STATUS_FAILURE; } @@ -406,12 +405,12 @@ eHalStatus pmcEnterRequestImpsState (tHalHandle hHal) { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - pmcLog(pMac, LOG2, FL("Entering pmcEnterRequestImpsState")); + smsLog(pMac, LOG2, FL("Entering pmcEnterRequestImpsState")); /* Can enter Request IMPS State only from Full Power State. */ if (pMac->pmc.pmcState != FULL_POWER) { - pmcLog(pMac, LOGE, FL("Trying to enter Request IMPS State from state %d"), pMac->pmc.pmcState); + smsLog(pMac, LOGE, FL("Trying to enter Request IMPS State from state %d"), pMac->pmc.pmcState); return eHAL_STATUS_FAILURE; } @@ -421,14 +420,14 @@ eHalStatus pmcEnterRequestImpsState (tHalHandle hHal) /* Tell MAC to have device enter IMPS mode. */ if (pmcIssueCommand(hHal, eSmeCommandEnterImps, NULL, 0, FALSE) != eHAL_STATUS_SUCCESS) { - pmcLog(pMac, LOGE, "PMC: failure to send message eWNI_PMC_ENTER_IMPS_REQ"); + smsLog(pMac, LOGE, "PMC: failure to send message eWNI_PMC_ENTER_IMPS_REQ"); pMac->pmc.pmcState = FULL_POWER; if(pmcShouldBmpsTimerRun(pMac)) (void)pmcStartTrafficTimer(hHal, pMac->pmc.bmpsConfig.trafficMeasurePeriod); return eHAL_STATUS_FAILURE; } - pmcLog(pMac, LOG2, FL("eWNI_PMC_ENTER_IMPS_REQ sent to PE")); + smsLog(pMac, LOG2, FL("eWNI_PMC_ENTER_IMPS_REQ sent to PE")); return eHAL_STATUS_SUCCESS; } @@ -454,12 +453,12 @@ eHalStatus pmcEnterImpsState (tHalHandle hHal) tpAniSirGlobal pMac = PMAC_STRUCT(hHal); vos_call_status_type callType; VOS_STATUS status; - pmcLog(pMac, LOG2, FL("Entering pmcEnterImpsState")); + smsLog(pMac, LOG2, FL("Entering pmcEnterImpsState")); /* Can enter IMPS State only from Request IMPS State. */ if (pMac->pmc.pmcState != REQUEST_IMPS) { - pmcLog(pMac, LOGE, FL("Trying to enter IMPS State from state %d"), pMac->pmc.pmcState); + smsLog(pMac, LOGE, FL("Trying to enter IMPS State from state %d"), pMac->pmc.pmcState); return eHAL_STATUS_FAILURE; } @@ -485,16 +484,14 @@ eHalStatus pmcEnterImpsState (tHalHandle hHal) if (!(pMac->pmc.ImpsReqTimerfailCnt & 0xF)) { pMac->pmc.ImpsReqTimerfailCnt++; - pmcLog(pMac, LOGE, - FL("Cannot start IMPS timer, FailCnt - %d"), pMac->pmc.ImpsReqTimerfailCnt); + smsLog(pMac, LOGE, FL("Cannot start IMPS timer, FailCnt - %d"), pMac->pmc.ImpsReqTimerfailCnt); } pmcEnterRequestFullPowerState(hHal, eSME_REASON_OTHER); return eHAL_STATUS_FAILURE; } if (pMac->pmc.ImpsReqTimerfailCnt) { - pmcLog(pMac, LOGE, - FL("Start IMPS timer was failed %d times before success"), pMac->pmc.ImpsReqTimerfailCnt); + smsLog(pMac, LOGE, FL("Start IMPS timer was failed %d times before success"), pMac->pmc.ImpsReqTimerfailCnt); } pMac->pmc.ImpsReqTimerfailCnt = 0; } @@ -532,13 +529,12 @@ eHalStatus pmcEnterRequestBmpsState (tHalHandle hHal) { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - pmcLog(pMac, LOG2, FL("Entering pmcEnterRequestBmpsState")); + smsLog(pMac, LOG2, FL("Entering pmcEnterRequestBmpsState")); /* Can enter Request BMPS State only from Full Power State. */ if (pMac->pmc.pmcState != FULL_POWER) { - pmcLog(pMac, LOGE, - FL("Trying to enter Request BMPS State from state %d"), pMac->pmc.pmcState); + smsLog(pMac, LOGE, FL("Trying to enter Request BMPS State from state %d"), pMac->pmc.pmcState); return eHAL_STATUS_FAILURE; } @@ -552,7 +548,7 @@ eHalStatus pmcEnterRequestBmpsState (tHalHandle hHal) pMac->pmc.bmpsRequestQueued = eANI_BOOLEAN_TRUE; if(pmcIssueCommand(hHal, eSmeCommandEnterBmps, NULL, 0, FALSE) != eHAL_STATUS_SUCCESS) { - pmcLog(pMac, LOGE, "PMC: failure to send message eWNI_PMC_ENTER_BMPS_REQ"); + smsLog(pMac, LOGE, "PMC: failure to send message eWNI_PMC_ENTER_BMPS_REQ"); pMac->pmc.bmpsRequestQueued = eANI_BOOLEAN_FALSE; pMac->pmc.pmcState = FULL_POWER; if(pmcShouldBmpsTimerRun(pMac)) @@ -564,7 +560,7 @@ eHalStatus pmcEnterRequestBmpsState (tHalHandle hHal) } else { - pmcLog(pMac, LOGE, "PMC: enter BMPS command already queued"); + smsLog(pMac, LOGE, "PMC: enter BMPS command already queued"); //restart the timer if needed if(pmcShouldBmpsTimerRun(pMac)) { @@ -573,7 +569,7 @@ eHalStatus pmcEnterRequestBmpsState (tHalHandle hHal) return eHAL_STATUS_SUCCESS; } - pmcLog(pMac, LOGW, FL("eWNI_PMC_ENTER_BMPS_REQ sent to PE")); + smsLog(pMac, LOGW, FL("eWNI_PMC_ENTER_BMPS_REQ sent to PE")); return eHAL_STATUS_SUCCESS; } @@ -598,7 +594,7 @@ eHalStatus pmcEnterBmpsState (tHalHandle hHal) { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - pmcLog(pMac, LOG2, FL("Entering pmcEnterBmpsState")); + smsLog(pMac, LOG2, FL("Entering pmcEnterBmpsState")); /* Can enter BMPS State only from 5 states. */ if (pMac->pmc.pmcState != REQUEST_BMPS && @@ -607,7 +603,7 @@ eHalStatus pmcEnterBmpsState (tHalHandle hHal) pMac->pmc.pmcState != REQUEST_ENTER_WOWL && pMac->pmc.pmcState != REQUEST_EXIT_WOWL) { - pmcLog(pMac, LOGE, FL("Trying to enter BMPS State from state %d"), pMac->pmc.pmcState); + smsLog(pMac, LOGE, FL("Trying to enter BMPS State from state %d"), pMac->pmc.pmcState); return eHAL_STATUS_FAILURE; } @@ -624,7 +620,7 @@ eHalStatus pmcEnterBmpsState (tHalHandle hHal) { /* Start exit BMPS sequence now. */ - pmcLog(pMac, LOGW, FL("Pending Full Power request found on entering BMPS mode. " + smsLog(pMac, LOGW, FL("Pending Full Power request found on entering BMPS mode. " "Start exit BMPS exit sequence")); //Note: Reason must have been set when requestFullPowerPending flag was set. pmcEnterRequestFullPowerState(hHal, pMac->pmc.requestFullPowerReason); @@ -634,14 +630,14 @@ eHalStatus pmcEnterBmpsState (tHalHandle hHal) /*This should never happen ideally. WOWL and UAPSD not supported at the same time */ if (pMac->pmc.wowlModeRequired && pMac->pmc.uapsdSessionRequired) { - pmcLog(pMac, LOGW, FL("Both UAPSD and WOWL is required on entering BMPS mode. " + smsLog(pMac, LOGW, FL("Both UAPSD and WOWL is required on entering BMPS mode. " "UAPSD will be prioritized over WOWL")); } /* Do we need Uapsd?*/ if (pMac->pmc.uapsdSessionRequired) { - pmcLog(pMac, LOGW, FL("UAPSD session is required on entering BMPS mode. " + smsLog(pMac, LOGW, FL("UAPSD session is required on entering BMPS mode. " "Start UAPSD entry sequence")); pmcEnterRequestStartUapsdState(hHal); return eHAL_STATUS_SUCCESS; @@ -650,7 +646,7 @@ eHalStatus pmcEnterBmpsState (tHalHandle hHal) /* Do we need WOWL?*/ if (pMac->pmc.wowlModeRequired) { - pmcLog(pMac, LOGW, FL("WOWL is required on entering BMPS mode. " + smsLog(pMac, LOGW, FL("WOWL is required on entering BMPS mode. " "Start WOWL entry sequence")); pmcRequestEnterWowlState(hHal, &(pMac->pmc.wowlEnterParams)); } @@ -682,7 +678,7 @@ tANI_BOOLEAN pmcPowerSaveCheck (tHalHandle hHal) tANI_BOOLEAN (*checkRoutine) (void *checkContext); tANI_BOOLEAN bResult=FALSE; - pmcLog(pMac, LOG2, FL("Entering pmcPowerSaveCheck")); + smsLog(pMac, LOG2, FL("Entering pmcPowerSaveCheck")); /* Call the routines in the power save check routine list. If any return FALSE, then we cannot go into power save mode. */ @@ -698,7 +694,7 @@ tANI_BOOLEAN pmcPowerSaveCheck (tHalHandle hHal) { if (!checkRoutine(pPowerSaveCheckEntry->checkContext)) { - pmcLog(pMac, LOGE, FL("pmcPowerSaveCheck fail!")); + smsLog(pMac, LOGE, FL("pmcPowerSaveCheck fail!")); bResult = FALSE; break; } @@ -734,7 +730,7 @@ eHalStatus pmcSendPowerSaveConfigMessage (tHalHandle hHal) tpAniSirGlobal pMac = PMAC_STRUCT(hHal); tSirPowerSaveCfg powerSaveConfig; - pmcLog(pMac, LOG2, FL("Entering pmcSendPowerSaveConfigMessage")); + smsLog(pMac, LOG2, FL("Entering pmcSendPowerSaveConfigMessage")); palZeroMemory(pMac->hHdd, &(powerSaveConfig), sizeof(tSirPowerSaveCfg)); @@ -795,7 +791,7 @@ eHalStatus pmcSendPowerSaveConfigMessage (tHalHandle hHal) if (pmcSendMessage(hHal, eWNI_PMC_PWR_SAVE_CFG, &powerSaveConfig, sizeof(tSirPowerSaveCfg)) != eHAL_STATUS_SUCCESS) { - pmcLog(pMac, LOGE, FL("Send of eWNI_PMC_PWR_SAVE_CFG to PE failed")); + smsLog(pMac, LOGE, FL("Send of eWNI_PMC_PWR_SAVE_CFG to PE failed")); return eHAL_STATUS_FAILURE; } @@ -825,12 +821,12 @@ eHalStatus pmcSendMessage (tpAniSirGlobal pMac, tANI_U16 messageType, void *pMes { tSirMbMsg *pMsg; - pmcLog(pMac, LOG2, FL("Entering pmcSendMessage, message type %d"), messageType); + smsLog(pMac, LOG2, FL("Entering pmcSendMessage, message type %d"), messageType); /* Allocate and fill in message. */ if (palAllocateMemory(pMac->hHdd, (void **)&pMsg, WNI_CFG_MB_HDR_LEN + messageSize) != eHAL_STATUS_SUCCESS) { - pmcLog(pMac, LOGE, FL("Cannot allocate memory for message")); + smsLog(pMac, LOGE, FL("Cannot allocate memory for message")); PMC_ABORT; return eHAL_STATUS_FAILURE; } @@ -840,7 +836,7 @@ eHalStatus pmcSendMessage (tpAniSirGlobal pMac, tANI_U16 messageType, void *pMes { if (palCopyMemory(pMac->hHdd, pMsg->data, pMessageData, messageSize) != eHAL_STATUS_SUCCESS) { - pmcLog(pMac, LOGE, FL("Cannot copy message data")); + smsLog(pMac, LOGE, FL("Cannot copy message data")); PMC_ABORT; return eHAL_STATUS_FAILURE; } @@ -849,7 +845,7 @@ eHalStatus pmcSendMessage (tpAniSirGlobal pMac, tANI_U16 messageType, void *pMes /* Send message. */ if (palSendMBMessage(pMac->hHdd, pMsg) != eHAL_STATUS_SUCCESS) { - pmcLog(pMac, LOGE, FL("Cannot send message")); + smsLog(pMac, LOGE, FL("Cannot send message")); PMC_ABORT; return eHAL_STATUS_FAILURE; } @@ -880,7 +876,7 @@ void pmcDoCallbacks (tHalHandle hHal, eHalStatus callbackStatus) tListElem *pEntry; tpRequestFullPowerEntry pRequestFullPowerEntry; - pmcLog(pMac, LOG2, FL("Entering pmcDoCallbacks")); + smsLog(pMac, LOG2, FL("Entering pmcDoCallbacks")); /* Call IMPS callback routine. */ if (pMac->pmc.impsCallbackRoutine != NULL) @@ -897,7 +893,7 @@ void pmcDoCallbacks (tHalHandle hHal, eHalStatus callbackStatus) pRequestFullPowerEntry->callbackRoutine(pRequestFullPowerEntry->callbackContext, callbackStatus); if (palFreeMemory(pMac->hHdd, pRequestFullPowerEntry) != eHAL_STATUS_SUCCESS) { - pmcLog(pMac, LOGE, FL("Cannot free request full power routine list entry")); + smsLog(pMac, LOGE, FL("Cannot free request full power routine list entry")); PMC_ABORT; } } @@ -926,7 +922,7 @@ eHalStatus pmcStartTrafficTimer (tHalHandle hHal, tANI_U32 expirationTime) tpAniSirGlobal pMac = PMAC_STRUCT(hHal); VOS_STATUS vosStatus; - pmcLog(pMac, LOG2, FL("Entering pmcStartTrafficTimer")); + smsLog(pMac, LOG2, FL("Entering pmcStartTrafficTimer")); vosStatus = vos_timer_start(&pMac->pmc.hTrafficTimer, expirationTime); if ( !VOS_IS_STATUS_SUCCESS(vosStatus) ) @@ -934,11 +930,11 @@ eHalStatus pmcStartTrafficTimer (tHalHandle hHal, tANI_U32 expirationTime) if( VOS_STATUS_E_ALREADY == vosStatus ) { //Consider this ok since the timer is already started. - pmcLog(pMac, LOGW, FL(" traffic timer is already started")); + smsLog(pMac, LOGW, FL(" traffic timer is already started")); } else { - pmcLog(pMac, LOGP, FL("Cannot start traffic timer")); + smsLog(pMac, LOGP, FL("Cannot start traffic timer")); return eHAL_STATUS_FAILURE; } } @@ -963,7 +959,7 @@ eHalStatus pmcStartTrafficTimer (tHalHandle hHal, tANI_U32 expirationTime) void pmcStopTrafficTimer (tHalHandle hHal) { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - pmcLog(pMac, LOG2, FL("Entering pmcStopTrafficTimer")); + smsLog(pMac, LOG2, FL("Entering pmcStopTrafficTimer")); vos_timer_stop(&pMac->pmc.hTrafficTimer); } @@ -986,12 +982,12 @@ void pmcImpsTimerExpired (tHalHandle hHal) { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - pmcLog(pMac, LOG2, FL("Entering pmcImpsTimerExpired")); + smsLog(pMac, LOG2, FL("Entering pmcImpsTimerExpired")); /* If timer expires and we are in a state other than IMPS State then something is wrong. */ if (pMac->pmc.pmcState != IMPS) { - pmcLog(pMac, LOGE, FL("Got IMPS timer expiration in state %d"), pMac->pmc.pmcState); + smsLog(pMac, LOGE, FL("Got IMPS timer expiration in state %d"), pMac->pmc.pmcState); PMC_ABORT; return; } @@ -1021,24 +1017,23 @@ void pmcTrafficTimerExpired (tHalHandle hHal) tpAniSirGlobal pMac = PMAC_STRUCT(hHal); VOS_STATUS vosStatus; - pmcLog(pMac, LOG2, FL("BMPS Traffic timer expired")); + smsLog(pMac, LOG2, FL("BMPS Traffic timer expired")); /* If timer expires and we are in a state other than Full Power State then something is wrong. */ if (pMac->pmc.pmcState != FULL_POWER) { - pmcLog(pMac, LOGE, FL("Got traffic timer expiration in state %d"), pMac->pmc.pmcState); + smsLog(pMac, LOGE, FL("Got traffic timer expiration in state %d"), pMac->pmc.pmcState); return; } /* Untill DHCP is not completed remain in power active */ if(pMac->pmc.remainInPowerActiveTillDHCP) { - pmcLog(pMac, LOG2, FL("BMPS Traffic Timer expired before DHCP completion ignore enter BMPS")); + smsLog(pMac, LOG2, FL("BMPS Traffic Timer expired before DHCP completion ignore enter BMPS")); pMac->pmc.remainInPowerActiveThreshold++; if( pMac->pmc.remainInPowerActiveThreshold >= DHCP_REMAIN_POWER_ACTIVE_THRESHOLD) { - pmcLog(pMac, LOGE, - FL("Remain in power active DHCP threshold reached FALLBACK to enable enter BMPS")); + smsLog(pMac, LOGE, FL("Remain in power active DHCP threshold reached FALLBACK to enable enter BMPS")); /*FALLBACK: reset the flag to make BMPS entry possible*/ pMac->pmc.remainInPowerActiveTillDHCP = FALSE; pMac->pmc.remainInPowerActiveThreshold = 0; @@ -1047,7 +1042,7 @@ void pmcTrafficTimerExpired (tHalHandle hHal) vosStatus = vos_timer_start(&pMac->pmc.hTrafficTimer, pMac->pmc.bmpsConfig.trafficMeasurePeriod); if ( !VOS_IS_STATUS_SUCCESS(vosStatus) && (VOS_STATUS_E_ALREADY != vosStatus) ) { - pmcLog(pMac, LOGP, FL("Cannot re-start traffic timer")); + smsLog(pMac, LOGP, FL("Cannot re-start traffic timer")); } return; } @@ -1058,32 +1053,32 @@ void pmcTrafficTimerExpired (tHalHandle hHal) /* Check if the timer should be running */ if (!pmcShouldBmpsTimerRun(pMac)) { - pmcLog(pMac, LOGE, FL("BMPS timer should not be running")); + smsLog(pMac, LOGE, FL("BMPS timer should not be running")); return; } #ifdef FEATURE_WLAN_TDLS if (pMac->isTdlsPowerSaveProhibited) { - pmcLog(pMac, LOGE, FL("TDLS peer(s) connected/discovery sent. Dont enter BMPS")); + smsLog(pMac, LOGE, FL("TDLS peer(s) connected/discovery sent. Dont enter BMPS")); return; } #endif if (pmcPowerSaveCheck(hHal)) { - pmcLog(pMac, LOGW, FL("BMPS entry criteria satisfied. Requesting BMPS state")); + smsLog(pMac, LOGW, FL("BMPS entry criteria satisfied. Requesting BMPS state")); (void)pmcEnterRequestBmpsState(hHal); } else { /*Some module voted against Power Save. So timer should be restarted again to retry BMPS */ - pmcLog(pMac, LOGE, FL("Power Save check failed. Retry BMPS again later")); + smsLog(pMac, LOGE, FL("Power Save check failed. Retry BMPS again later")); //Since hTrafficTimer is a vos_timer now, we need to restart the timer here vosStatus = vos_timer_start(&pMac->pmc.hTrafficTimer, pMac->pmc.bmpsConfig.trafficMeasurePeriod); if ( !VOS_IS_STATUS_SUCCESS(vosStatus) && (VOS_STATUS_E_ALREADY != vosStatus) ) { - pmcLog(pMac, LOGP, FL("Cannot start traffic timer")); + smsLog(pMac, LOGP, FL("Cannot start traffic timer")); return; } } @@ -1108,7 +1103,7 @@ void pmcExitPowerSaveTimerExpired (tHalHandle hHal) { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - pmcLog(pMac, LOG2, FL("Entering pmcExitPowerSaveTimerExpired")); + smsLog(pMac, LOG2, FL("Entering pmcExitPowerSaveTimerExpired")); /* Make sure process of exiting power save mode might hasn't already been started due to another trigger. */ if (pMac->pmc.requestFullPowerPending) @@ -1139,7 +1134,7 @@ void pmcDoBmpsCallbacks (tHalHandle hHal, eHalStatus callbackStatus) tListElem *pEntry; tpRequestBmpsEntry pRequestBmpsEntry; - pmcLog(pMac, LOG2, "PMC: entering pmcDoBmpsCallbacks"); + smsLog(pMac, LOG2, "PMC: entering pmcDoBmpsCallbacks"); /* Call the routines in the request BMPS callback routine list. */ csrLLLock(&pMac->pmc.requestBmpsList); @@ -1181,7 +1176,7 @@ void pmcDoStartUapsdCallbacks (tHalHandle hHal, eHalStatus callbackStatus) tListElem *pEntry; tpStartUapsdEntry pStartUapsdEntry; - pmcLog(pMac, LOG2, "PMC: entering pmcDoStartUapsdCallbacks"); + smsLog(pMac, LOG2, "PMC: entering pmcDoStartUapsdCallbacks"); csrLLLock(&pMac->pmc.requestStartUapsdList); /* Call the routines in the request start UAPSD callback routine list. */ pEntry = csrLLRemoveHead(&pMac->pmc.requestStartUapsdList, FALSE); @@ -1216,7 +1211,7 @@ eHalStatus pmcEnterRequestStartUapsdState (tHalHandle hHal) tpAniSirGlobal pMac = PMAC_STRUCT(hHal); v_BOOL_t fFullPower = VOS_FALSE; //need to get back to full power state - pmcLog(pMac, LOG2, "PMC: entering pmcEnterRequestStartUapsdState"); + smsLog(pMac, LOG2, "PMC: entering pmcEnterRequestStartUapsdState"); /* Can enter UAPSD State only from FULL_POWER or BMPS State. */ switch (pMac->pmc.pmcState) @@ -1225,7 +1220,7 @@ eHalStatus pmcEnterRequestStartUapsdState (tHalHandle hHal) /* Check that entry into a power save mode is allowed at this time. */ if (!pmcPowerSaveCheck(hHal)) { - pmcLog(pMac, LOGW, "PMC: Power save check failed. UAPSD request " + smsLog(pMac, LOGW, "PMC: Power save check failed. UAPSD request " "will be accepted and buffered"); /* UAPSD mode will be attempted when we enter BMPS later */ pMac->pmc.uapsdSessionRequired = TRUE; @@ -1246,7 +1241,7 @@ eHalStatus pmcEnterRequestStartUapsdState (tHalHandle hHal) That is why no need to buffer the UAPSD request*/ if(pmcEnterRequestBmpsState(hHal) != eHAL_STATUS_SUCCESS) { - pmcLog(pMac, LOGE, "PMC: Device in Full Power. Enter Request Bmps failed. " + smsLog(pMac, LOGE, "PMC: Device in Full Power. Enter Request Bmps failed. " "UAPSD request will be dropped "); return eHAL_STATUS_FAILURE; } @@ -1270,7 +1265,7 @@ eHalStatus pmcEnterRequestStartUapsdState (tHalHandle hHal) if (pmcIssueCommand(hHal, eSmeCommandEnterUapsd, NULL, 0, FALSE) != eHAL_STATUS_SUCCESS) { - pmcLog(pMac, LOGE, "PMC: failure to send message " + smsLog(pMac, LOGE, "PMC: failure to send message " "eWNI_PMC_ENTER_BMPS_REQ"); return eHAL_STATUS_FAILURE; } @@ -1279,7 +1274,7 @@ eHalStatus pmcEnterRequestStartUapsdState (tHalHandle hHal) else { //Not ready for UAPSD at this time, save it first and wake up the chip - pmcLog(pMac, LOGE, " PMC state = %d",pMac->pmc.pmcState); + smsLog(pMac, LOGE, " PMC state = %d",pMac->pmc.pmcState); pMac->pmc.uapsdSessionRequired = TRUE; /* While BTC traffic is going on, STA can be in BMPS * and need not go to Full Power */ @@ -1311,7 +1306,7 @@ eHalStatus pmcEnterRequestStartUapsdState (tHalHandle hHal) break; default: - pmcLog(pMac, LOGE, "PMC: trying to enter UAPSD State from state %d", + smsLog(pMac, LOGE, "PMC: trying to enter UAPSD State from state %d", pMac->pmc.pmcState); return eHAL_STATUS_FAILURE; } @@ -1321,7 +1316,7 @@ eHalStatus pmcEnterRequestStartUapsdState (tHalHandle hHal) if( eHAL_STATUS_PMC_PENDING != pmcRequestFullPower( pMac, NULL, NULL, eSME_REASON_OTHER ) ) { //This is an error - pmcLog(pMac, LOGE, FL(" fail to request full power because BTC")); + smsLog(pMac, LOGE, FL(" fail to request full power because BTC")); } } @@ -1347,12 +1342,12 @@ eHalStatus pmcEnterUapsdState (tHalHandle hHal) { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - pmcLog(pMac, LOG2, "PMC: entering pmcEnterUapsdState"); + smsLog(pMac, LOG2, "PMC: entering pmcEnterUapsdState"); /* Can enter UAPSD State only from Request UAPSD State. */ if (pMac->pmc.pmcState != REQUEST_START_UAPSD ) { - pmcLog(pMac, LOGE, "PMC: trying to enter UAPSD State from state %d", + smsLog(pMac, LOGE, "PMC: trying to enter UAPSD State from state %d", pMac->pmc.pmcState); return eHAL_STATUS_FAILURE; } @@ -1396,7 +1391,7 @@ eHalStatus pmcEnterRequestStopUapsdState (tHalHandle hHal) { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - pmcLog(pMac, LOG2, "PMC: entering pmcEnterRequestStopUapsdState"); + smsLog(pMac, LOG2, "PMC: entering pmcEnterRequestStopUapsdState"); /* If already in REQUEST_STOP_UAPSD, simply return */ if (pMac->pmc.pmcState == REQUEST_STOP_UAPSD) @@ -1407,7 +1402,7 @@ eHalStatus pmcEnterRequestStopUapsdState (tHalHandle hHal) /* Can enter Request Stop UAPSD State only from UAPSD */ if (pMac->pmc.pmcState != UAPSD) { - pmcLog(pMac, LOGE, "PMC: trying to enter Request Stop UAPSD State from " + smsLog(pMac, LOGE, "PMC: trying to enter Request Stop UAPSD State from " "state %d", pMac->pmc.pmcState); return eHAL_STATUS_FAILURE; } @@ -1416,7 +1411,7 @@ eHalStatus pmcEnterRequestStopUapsdState (tHalHandle hHal) if (pmcIssueCommand(hHal, eSmeCommandExitUapsd, NULL, 0, FALSE) != eHAL_STATUS_SUCCESS) { - pmcLog(pMac, LOGE, "PMC: failure to send message " + smsLog(pMac, LOGE, "PMC: failure to send message " "eWNI_PMC_EXIT_UAPSD_REQ"); return eHAL_STATUS_FAILURE; } @@ -1443,12 +1438,12 @@ eHalStatus pmcEnterRequestStandbyState (tHalHandle hHal) { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - pmcLog(pMac, LOG2, "PMC: entering pmcEnterRequestStandbyState"); + smsLog(pMac, LOG2, "PMC: entering pmcEnterRequestStandbyState"); /* Can enter Standby State only from Full Power State. */ if (pMac->pmc.pmcState != FULL_POWER) { - pmcLog(pMac, LOGE, "PMC: trying to enter Standby State from " + smsLog(pMac, LOGE, "PMC: trying to enter Standby State from " "state %d", pMac->pmc.pmcState); return eHAL_STATUS_FAILURE; } @@ -1461,7 +1456,7 @@ eHalStatus pmcEnterRequestStandbyState (tHalHandle hHal) if (pmcIssueCommand(hHal, eSmeCommandEnterStandby, NULL, 0, FALSE) != eHAL_STATUS_SUCCESS) { - pmcLog(pMac, LOGE, "PMC: failure to send message " + smsLog(pMac, LOGE, "PMC: failure to send message " "eWNI_PMC_ENTER_IMPS_REQ"); pMac->pmc.pmcState = FULL_POWER; @@ -1494,12 +1489,12 @@ eHalStatus pmcEnterStandbyState (tHalHandle hHal) vos_call_status_type callType; VOS_STATUS status; - pmcLog(pMac, LOG2, "PMC: entering pmcEnterStandbyState"); + smsLog(pMac, LOG2, "PMC: entering pmcEnterStandbyState"); /* Can enter STANDBY State only from REQUEST_STANDBY State. */ if (pMac->pmc.pmcState != REQUEST_STANDBY) { - pmcLog(pMac, LOGE, "PMC: trying to enter STANDBY State from state %d", + smsLog(pMac, LOGE, "PMC: trying to enter STANDBY State from state %d", pMac->pmc.pmcState); return eHAL_STATUS_FAILURE; } @@ -1547,7 +1542,7 @@ void pmcDoStandbyCallbacks (tHalHandle hHal, eHalStatus callbackStatus) { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - pmcLog(pMac, LOG2, "PMC: entering pmcDoStandbyCallbacks"); + smsLog(pMac, LOG2, "PMC: entering pmcDoStandbyCallbacks"); /* Call Standby callback routine. */ if (pMac->pmc.standbyCallbackRoutine != NULL) @@ -1626,7 +1621,7 @@ void pmcDoDeviceStateUpdateCallbacks (tHalHandle hHal, tPmcState state) tpDeviceStateUpdateIndEntry pDeviceStateUpdateIndEntry; void (*callbackRoutine) (void *callbackContext, tPmcState pmcState); - pmcLog(pMac, LOG2, FL("PMC - Update registered modules of new device " + smsLog(pMac, LOG2, FL("PMC - Update registered modules of new device " "state: %s"), pmcGetPmcStateStr(state)); /* Call the routines in the update device state routine list. */ @@ -1658,7 +1653,7 @@ void pmcDoDeviceStateUpdateCallbacks (tHalHandle hHal, tPmcState state) eHalStatus pmcRequestEnterWowlState(tHalHandle hHal, tpSirSmeWowlEnterParams wowlEnterParams) { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - pmcLog(pMac, LOG2, "PMC: entering pmcRequestEnterWowlState"); + smsLog(pMac, LOG2, "PMC: entering pmcRequestEnterWowlState"); switch (pMac->pmc.pmcState) { @@ -1666,14 +1661,14 @@ eHalStatus pmcRequestEnterWowlState(tHalHandle hHal, tpSirSmeWowlEnterParams wow /* Put device in BMPS mode first. This step should NEVER fail. */ if(pmcEnterRequestBmpsState(hHal) != eHAL_STATUS_SUCCESS) { - pmcLog(pMac, LOGE, "PMC: Device in Full Power. pmcEnterRequestBmpsState failed. " + smsLog(pMac, LOGE, "PMC: Device in Full Power. pmcEnterRequestBmpsState failed. " "Cannot enter WOWL"); return eHAL_STATUS_FAILURE; } break; case REQUEST_BMPS: - pmcLog(pMac, LOGW, "PMC: BMPS transaction going on. WOWL request " + smsLog(pMac, LOGW, "PMC: BMPS transaction going on. WOWL request " "will be buffered"); break; @@ -1685,24 +1680,24 @@ eHalStatus pmcRequestEnterWowlState(tHalHandle hHal, tpSirSmeWowlEnterParams wow if (pmcIssueCommand(hHal, eSmeCommandEnterWowl, wowlEnterParams, sizeof(tSirSmeWowlEnterParams), FALSE) != eHAL_STATUS_SUCCESS) { - pmcLog(pMac, LOGE, "PMC: failure to send message eWNI_PMC_ENTER_WOWL_REQ"); + smsLog(pMac, LOGE, "PMC: failure to send message eWNI_PMC_ENTER_WOWL_REQ"); return eHAL_STATUS_FAILURE; } break; case REQUEST_ENTER_WOWL: //Multiple enter WOWL requests at the same time are not accepted - pmcLog(pMac, LOGE, "PMC: Enter WOWL transaction already going on. New WOWL request " + smsLog(pMac, LOGE, "PMC: Enter WOWL transaction already going on. New WOWL request " "will be rejected"); return eHAL_STATUS_FAILURE; case REQUEST_EXIT_WOWL: - pmcLog(pMac, LOGW, "PMC: Exit WOWL transaction going on. New WOWL request " + smsLog(pMac, LOGW, "PMC: Exit WOWL transaction going on. New WOWL request " "will be buffered"); break; default: - pmcLog(pMac, LOGE, "PMC: Trying to enter WOWL State from state %s", + smsLog(pMac, LOGE, "PMC: Trying to enter WOWL State from state %s", pmcGetPmcStateStr(pMac->pmc.pmcState)); return eHAL_STATUS_FAILURE; } @@ -1729,12 +1724,12 @@ eHalStatus pmcEnterWowlState (tHalHandle hHal) { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - pmcLog(pMac, LOG2, "PMC: entering pmcEnterWowlState"); + smsLog(pMac, LOG2, "PMC: entering pmcEnterWowlState"); /* Can enter WOWL State only from Request WOWL State. */ if (pMac->pmc.pmcState != REQUEST_ENTER_WOWL ) { - pmcLog(pMac, LOGP, "PMC: trying to enter WOWL State from state %d", + smsLog(pMac, LOGP, "PMC: trying to enter WOWL State from state %d", pMac->pmc.pmcState); return eHAL_STATUS_FAILURE; } @@ -1775,7 +1770,7 @@ eHalStatus pmcRequestExitWowlState(tHalHandle hHal) { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - pmcLog(pMac, LOG2, "PMC: entering pmcRequestExitWowlState"); + smsLog(pMac, LOG2, "PMC: entering pmcRequestExitWowlState"); switch (pMac->pmc.pmcState) { @@ -1784,17 +1779,17 @@ eHalStatus pmcRequestExitWowlState(tHalHandle hHal) if (pmcIssueCommand(hHal, eSmeCommandExitWowl, NULL, 0, FALSE) != eHAL_STATUS_SUCCESS) { - pmcLog(pMac, LOGP, "PMC: failure to send message eWNI_PMC_EXIT_WOWL_REQ"); + smsLog(pMac, LOGP, "PMC: failure to send message eWNI_PMC_EXIT_WOWL_REQ"); return eHAL_STATUS_FAILURE; } break; case REQUEST_ENTER_WOWL: - pmcLog(pMac, LOGP, "PMC: Rcvd exit WOWL even before enter WOWL was completed"); + smsLog(pMac, LOGP, "PMC: Rcvd exit WOWL even before enter WOWL was completed"); return eHAL_STATUS_FAILURE; default: - pmcLog(pMac, LOGW, "PMC: Got exit WOWL in state %s. Nothing to do as already out of WOWL", + smsLog(pMac, LOGW, "PMC: Got exit WOWL in state %s. Nothing to do as already out of WOWL", pmcGetPmcStateStr(pMac->pmc.pmcState)); break; } @@ -1819,7 +1814,7 @@ void pmcDoEnterWowlCallbacks (tHalHandle hHal, eHalStatus callbackStatus) { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - pmcLog(pMac, LOG2, "PMC: entering pmcDoWowlCallbacks"); + smsLog(pMac, LOG2, "PMC: entering pmcDoWowlCallbacks"); /* Call Wowl callback routine. */ if (pMac->pmc.enterWowlCallbackRoutine != NULL) @@ -1846,7 +1841,7 @@ static void pmcProcessDeferredMsg( tpAniSirGlobal pMac ) &pDeferredMsg->u.wowlAddPattern, sizeof(tSirWowlAddBcastPtrn)) != eHAL_STATUS_SUCCESS) { - pmcLog(pMac, LOGE, FL("Send of eWNI_PMC_WOWL_ADD_BCAST_PTRN to PE failed")); + smsLog(pMac, LOGE, FL("Send of eWNI_PMC_WOWL_ADD_BCAST_PTRN to PE failed")); } break; @@ -1856,7 +1851,7 @@ static void pmcProcessDeferredMsg( tpAniSirGlobal pMac ) &pDeferredMsg->u.wowlDelPattern, sizeof(tSirWowlDelBcastPtrn)) != eHAL_STATUS_SUCCESS) { - pmcLog(pMac, LOGE, FL("Send of eWNI_PMC_WOWL_ADD_BCAST_PTRN to PE failed")); + smsLog(pMac, LOGE, FL("Send of eWNI_PMC_WOWL_ADD_BCAST_PTRN to PE failed")); } break; @@ -1866,12 +1861,12 @@ static void pmcProcessDeferredMsg( tpAniSirGlobal pMac ) &pDeferredMsg->u.powerSaveConfig, sizeof(tSirPowerSaveCfg)) != eHAL_STATUS_SUCCESS) { - pmcLog(pMac, LOGE, FL("Send of eWNI_PMC_PWR_SAVE_CFG to PE failed")); + smsLog(pMac, LOGE, FL("Send of eWNI_PMC_PWR_SAVE_CFG to PE failed")); } break; default: - pmcLog(pMac, LOGE, FL("unknown message (%d)"), pDeferredMsg->messageType); + smsLog(pMac, LOGE, FL("unknown message (%d)"), pDeferredMsg->messageType); break; } //Need to free the memory here @@ -1887,7 +1882,7 @@ eHalStatus pmcDeferMsg( tpAniSirGlobal pMac, tANI_U16 messageType, void *pData, if( !HAL_STATUS_SUCCESS( palAllocateMemory( pMac->hHdd, (void **)&pDeferredMsg, sizeof(tPmcDeferredMsg) ) ) ) { - pmcLog(pMac, LOGE, FL("Cannot allocate memory for callback context")); + smsLog(pMac, LOGE, FL("Cannot allocate memory for callback context")); return eHAL_STATUS_RESOURCES; } palZeroMemory( pMac->hHdd, pDeferredMsg, sizeof(tPmcDeferredMsg) ); @@ -1898,7 +1893,7 @@ eHalStatus pmcDeferMsg( tpAniSirGlobal pMac, tANI_U16 messageType, void *pData, if( !HAL_STATUS_SUCCESS( palCopyMemory( pMac->hHdd, &pDeferredMsg->u.data, pData, size ) ) ) { - pmcLog(pMac, LOGE, FL("Cannot copy pattern for callback context")); + smsLog(pMac, LOGE, FL("Cannot copy pattern for callback context")); palFreeMemory( pMac->hHdd, pDeferredMsg ); return eHAL_STATUS_FAILURE; } @@ -1916,7 +1911,7 @@ eHalStatus pmcDeferMsg( tpAniSirGlobal pMac, tANI_U16 messageType, void *pData, } if( !HAL_STATUS_SUCCESS( status ) ) { - pmcLog(pMac, LOGE, FL("failed to request full power status = %d"), status); + smsLog(pMac, LOGE, FL("failed to request full power status = %d"), status); } } @@ -1951,54 +1946,54 @@ void pmcAbortCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand, tANI_BOOLEAN fStop switch( pCommand->command ) { case eSmeCommandEnterImps: - pmcLog(pMac, LOGE, FL("aborting request to enter IMPS")); + smsLog(pMac, LOGE, FL("aborting request to enter IMPS")); pmcEnterFullPowerState(pMac); break; case eSmeCommandExitImps: - pmcLog(pMac, LOGE, FL("aborting request to exit IMPS ")); + smsLog(pMac, LOGE, FL("aborting request to exit IMPS ")); pmcEnterFullPowerState(pMac); break; case eSmeCommandEnterBmps: - pmcLog(pMac, LOGE, FL("aborting request to enter BMPS ")); + smsLog(pMac, LOGE, FL("aborting request to enter BMPS ")); pMac->pmc.bmpsRequestQueued = eANI_BOOLEAN_FALSE; pmcEnterFullPowerState(pMac); pmcDoBmpsCallbacks(pMac, eHAL_STATUS_FAILURE); break; case eSmeCommandExitBmps: - pmcLog(pMac, LOGE, FL("aborting request to exit BMPS ")); + smsLog(pMac, LOGE, FL("aborting request to exit BMPS ")); pmcEnterFullPowerState(pMac); break; case eSmeCommandEnterUapsd: - pmcLog(pMac, LOGE, FL("aborting request to enter UAPSD ")); + smsLog(pMac, LOGE, FL("aborting request to enter UAPSD ")); //Since there is no retry for UAPSD, tell the requester here we are done with failure pMac->pmc.uapsdSessionRequired = FALSE; pmcDoStartUapsdCallbacks(pMac, eHAL_STATUS_FAILURE); break; case eSmeCommandExitUapsd: - pmcLog(pMac, LOGE, FL("aborting request to exit UAPSD ")); + smsLog(pMac, LOGE, FL("aborting request to exit UAPSD ")); break; case eSmeCommandEnterWowl: - pmcLog(pMac, LOGE, FL("aborting request to enter WOWL ")); + smsLog(pMac, LOGE, FL("aborting request to enter WOWL ")); pmcDoEnterWowlCallbacks(pMac, eHAL_STATUS_FAILURE); break; case eSmeCommandExitWowl: - pmcLog(pMac, LOGE, FL("aborting request to exit WOWL ")); + smsLog(pMac, LOGE, FL("aborting request to exit WOWL ")); break; case eSmeCommandEnterStandby: - pmcLog(pMac, LOGE, FL("aborting request to enter Standby ")); + smsLog(pMac, LOGE, FL("aborting request to enter Standby ")); pmcDoStandbyCallbacks(pMac, eHAL_STATUS_FAILURE); break; default: - pmcLog(pMac, LOGE, FL("Request for PMC command (%d) is dropped"), pCommand->command); + smsLog(pMac, LOGE, FL("Request for PMC command (%d) is dropped"), pCommand->command); break; } }// !stopping @@ -2034,13 +2029,11 @@ eHalStatus pmcPrepareCommand( tpAniSirGlobal pMac, eSmeCommandType cmdType, void } else { - pmcLog( pMac, LOGE, - FL(" fail to get command buffer for command 0x%X curState = %d"), cmdType, pMac->pmc.pmcState ); + smsLog( pMac, LOGE, FL(" fail to get command buffer for command 0x%X curState = %d"), cmdType, pMac->pmc.pmcState ); //For certain PMC command, we cannot fail if( PMC_IS_COMMAND_CANNOT_FAIL(cmdType) ) { - pmcLog( pMac, LOGE, - FL(" command 0x%X cannot fail try allocating memory for it"), cmdType ); + smsLog( pMac, LOGE, FL(" command 0x%X cannot fail try allocating memory for it"), cmdType ); status = palAllocateMemory(pMac->hHdd, (void **)&pCommand, sizeof(tSmeCmd)); if(!HAL_STATUS_SUCCESS(status)) { @@ -2091,7 +2084,7 @@ eHalStatus pmcPrepareCommand( tpAniSirGlobal pMac, eSmeCommandType cmdType, void } else { - pmcLog( pMac, LOGE, (" exit BMPS must have a reason code") ); + smsLog( pMac, LOGE, (" exit BMPS must have a reason code") ); } break; @@ -2104,7 +2097,7 @@ eHalStatus pmcPrepareCommand( tpAniSirGlobal pMac, eSmeCommandType cmdType, void break; default: - pmcLog( pMac, LOGE, FL(" invalid command type %d"), cmdType ); + smsLog( pMac, LOGE, FL(" invalid command type %d"), cmdType ); status = eHAL_STATUS_INVALID_PARAMETER; break; } @@ -2176,8 +2169,7 @@ tANI_BOOLEAN pmcProcessCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand ) } if( !HAL_STATUS_SUCCESS( status ) ) { - pmcLog(pMac, LOGE, - "PMC: failure to send message eWNI_PMC_ENTER_IMPS_REQ or pmcEnterImpsCheck failed"); + smsLog(pMac, LOGE, "PMC: failure to send message eWNI_PMC_ENTER_IMPS_REQ or pmcEnterImpsCheck failed"); pmcEnterFullPowerState( pMac ); if(pmcShouldBmpsTimerRun(pMac)) (void)pmcStartTrafficTimer(pMac, pMac->pmc.bmpsConfig.trafficMeasurePeriod); @@ -2200,13 +2192,12 @@ tANI_BOOLEAN pmcProcessCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand ) if ( HAL_STATUS_SUCCESS( status ) ) { pMac->pmc.pmcState = REQUEST_FULL_POWER; - pmcLog(pMac, LOG2, FL("eWNI_PMC_EXIT_IMPS_REQ sent to PE")); + smsLog(pMac, LOG2, FL("eWNI_PMC_EXIT_IMPS_REQ sent to PE")); fRemoveCmd = eANI_BOOLEAN_FALSE; } else { - pmcLog(pMac, LOGE, - FL("eWNI_PMC_EXIT_IMPS_REQ fail to be sent to PE status %d"), status); + smsLog(pMac, LOGE, FL("eWNI_PMC_EXIT_IMPS_REQ fail to be sent to PE status %d"), status); //Callbacks are called with success srarus, do we need to pass in real status?? pmcEnterFullPowerState(pMac); } @@ -2222,11 +2213,11 @@ tANI_BOOLEAN pmcProcessCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand ) { /* Change PMC state */ pMac->pmc.pmcState = REQUEST_BMPS; - pmcLog(pMac, LOG2, "PMC: Enter BMPS req done: Force XO Core ON"); + smsLog(pMac, LOG2, "PMC: Enter BMPS req done: Force XO Core ON"); vstatus = vos_chipVoteXOCore(NULL, NULL, NULL, VOS_TRUE); if ( !VOS_IS_STATUS_SUCCESS(vstatus) ) { - pmcLog(pMac, LOGE, "Could not turn XO Core ON. Can't go to BMPS"); + smsLog(pMac, LOGE, "Could not turn XO Core ON. Can't go to BMPS"); } else /* XO Core turn ON was successful */ { @@ -2238,13 +2229,13 @@ tANI_BOOLEAN pmcProcessCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand ) } else { - pmcLog(pMac, LOGE, "Fail to send enter BMPS msg to PE"); + smsLog(pMac, LOGE, "Fail to send enter BMPS msg to PE"); /* Cancel the vote for XO Core */ - pmcLog(pMac, LOGW, "In module init: Cancel the vote for XO CORE ON " + smsLog(pMac, LOGW, "In module init: Cancel the vote for XO CORE ON " "since send enter bmps failed"); if (vos_chipVoteXOCore(NULL, NULL, NULL, VOS_FALSE) != VOS_STATUS_SUCCESS) { - pmcLog(pMac, LOGE, "Could not cancel XO Core ON vote." + smsLog(pMac, LOGE, "Could not cancel XO Core ON vote." "Not returning failure." "Power consumed will be high"); } @@ -2254,8 +2245,7 @@ tANI_BOOLEAN pmcProcessCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand ) } if( !HAL_STATUS_SUCCESS( status ) ) { - pmcLog(pMac, LOGE, - "PMC: failure to send message eWNI_PMC_ENTER_BMPS_REQ status %d", status); + smsLog(pMac, LOGE, "PMC: failure to send message eWNI_PMC_ENTER_BMPS_REQ status %d", status); pMac->pmc.bmpsRequestQueued = eANI_BOOLEAN_FALSE; pmcEnterFullPowerState(pMac); //Do not call UAPSD callback here since it may be retried @@ -2277,12 +2267,12 @@ tANI_BOOLEAN pmcProcessCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand ) { pMac->pmc.pmcState = REQUEST_FULL_POWER; fRemoveCmd = eANI_BOOLEAN_FALSE; - pmcLog(pMac, LOG2, FL("eWNI_PMC_EXIT_BMPS_REQ sent to PE")); + smsLog(pMac, LOG2, FL("eWNI_PMC_EXIT_BMPS_REQ sent to PE")); } else { - pmcLog(pMac, LOGE, FL("eWNI_PMC_EXIT_BMPS_REQ fail to be sent to PE status %d"), status); + smsLog(pMac, LOGE, FL("eWNI_PMC_EXIT_BMPS_REQ fail to be sent to PE status %d"), status); pmcEnterFullPowerState(pMac); } } @@ -2300,7 +2290,7 @@ tANI_BOOLEAN pmcProcessCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand ) } else { - pmcLog(pMac, LOGE, "PMC: failure to send message " + smsLog(pMac, LOGE, "PMC: failure to send message " "eWNI_PMC_ENTER_BMPS_REQ"); //there is no retry for re-entering UAPSD so tell the requester we are done witgh failure. pMac->pmc.uapsdSessionRequired = FALSE; @@ -2332,7 +2322,7 @@ tANI_BOOLEAN pmcProcessCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand ) } else { - pmcLog(pMac, LOGE, "PMC: failure to send message " + smsLog(pMac, LOGE, "PMC: failure to send message " "eWNI_PMC_EXIT_UAPSD_REQ"); pmcEnterBmpsState(pMac); } @@ -2352,7 +2342,7 @@ tANI_BOOLEAN pmcProcessCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand ) } else { - pmcLog(pMac, LOGE, "PMC: failure to send message eWNI_PMC_ENTER_WOWL_REQ"); + smsLog(pMac, LOGE, "PMC: failure to send message eWNI_PMC_ENTER_WOWL_REQ"); pmcDoEnterWowlCallbacks(pMac, eHAL_STATUS_FAILURE); } } @@ -2376,7 +2366,7 @@ tANI_BOOLEAN pmcProcessCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand ) } else { - pmcLog(pMac, LOGP, "PMC: failure to send message eWNI_PMC_EXIT_WOWL_REQ"); + smsLog(pMac, LOGP, "PMC: failure to send message eWNI_PMC_EXIT_WOWL_REQ"); pmcEnterBmpsState(pMac); } } @@ -2419,7 +2409,7 @@ tANI_BOOLEAN pmcProcessCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand ) } else { - pmcLog(pMac, LOGE, "PMC: failure to send message " + smsLog(pMac, LOGE, "PMC: failure to send message " "eWNI_PMC_ENTER_IMPS_REQ"); pmcEnterFullPowerState(pMac); pmcDoStandbyCallbacks(pMac, eHAL_STATUS_FAILURE); @@ -2432,7 +2422,7 @@ tANI_BOOLEAN pmcProcessCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand ) break; default: - pmcLog( pMac, LOGE, FL(" invalid command type %d"), pCommand->command ); + smsLog( pMac, LOGE, FL(" invalid command type %d"), pCommand->command ); break; } @@ -2446,8 +2436,8 @@ eHalStatus pmcEnterImpsCheck( tpAniSirGlobal pMac ) if( !PMC_IS_READY(pMac) ) { - pmcLog(pMac, LOGE, FL("Requesting IMPS when PMC not ready")); - pmcLog(pMac, LOGE, FL("pmcReady = %d pmcState = %s"), + smsLog(pMac, LOGE, FL("Requesting IMPS when PMC not ready")); + smsLog(pMac, LOGE, FL("pmcReady = %d pmcState = %s"), pMac->pmc.pmcReady, pmcGetPmcStateStr(pMac->pmc.pmcState)); return eHAL_STATUS_FAILURE; } @@ -2455,21 +2445,21 @@ eHalStatus pmcEnterImpsCheck( tpAniSirGlobal pMac ) /* Check if IMPS is enabled. */ if (!pMac->pmc.impsEnabled) { - pmcLog(pMac, LOG2, FL("IMPS is disabled")); + smsLog(pMac, LOG2, FL("IMPS is disabled")); return eHAL_STATUS_PMC_DISABLED; } /* Check if IMPS enabled for current power source. */ if ((pMac->pmc.powerSource == AC_POWER) && !pMac->pmc.impsConfig.enterOnAc) { - pmcLog(pMac, LOG2, FL("IMPS is disabled when operating on AC power")); + smsLog(pMac, LOG2, FL("IMPS is disabled when operating on AC power")); return eHAL_STATUS_PMC_AC_POWER; } /* Check that entry into a power save mode is allowed at this time. */ if (!pmcPowerSaveCheck(pMac)) { - pmcLog(pMac, LOG2, FL("IMPS cannot be entered now")); + smsLog(pMac, LOG2, FL("IMPS cannot be entered now")); return eHAL_STATUS_PMC_NOT_NOW; } @@ -2477,7 +2467,7 @@ eHalStatus pmcEnterImpsCheck( tpAniSirGlobal pMac ) running sessions agree. */ if (!pmcAllowImps(pMac)) { - pmcLog(pMac, LOG2, FL("IMPS cannot be entered now")); + smsLog(pMac, LOG2, FL("IMPS cannot be entered now")); return eHAL_STATUS_PMC_NOT_NOW; } @@ -2485,14 +2475,14 @@ eHalStatus pmcEnterImpsCheck( tpAniSirGlobal pMac ) if ((pMac->pmc.pmcState == REQUEST_IMPS) || (pMac->pmc.pmcState == IMPS) || (pMac->pmc.pmcState == REQUEST_FULL_POWER)) { - pmcLog(pMac, LOG2, FL("Already in IMPS")); + smsLog(pMac, LOG2, FL("Already in IMPS")); return eHAL_STATUS_PMC_ALREADY_IN_IMPS; } /* Check whether driver load unload is in progress */ if(vos_is_load_unload_in_progress( VOS_MODULE_ID_VOSS, NULL)) { - pmcLog(pMac, LOGW, FL("Driver load/unload is in progress")); + smsLog(pMac, LOGW, FL("Driver load/unload is in progress")); return eHAL_STATUS_PMC_NOT_NOW; } @@ -2508,14 +2498,14 @@ eHalStatus pmcEnterBmpsCheck( tpAniSirGlobal pMac ) /* Check if BMPS is enabled. */ if (!pMac->pmc.bmpsEnabled) { - pmcLog(pMac, LOGE, "PMC: Cannot initiate BMPS. BMPS is disabled"); + smsLog(pMac, LOGE, "PMC: Cannot initiate BMPS. BMPS is disabled"); return eHAL_STATUS_PMC_DISABLED; } if( !PMC_IS_READY(pMac) ) { - pmcLog(pMac, LOGE, FL("Requesting BMPS when PMC not ready")); - pmcLog(pMac, LOGE, FL("pmcReady = %d pmcState = %s"), + smsLog(pMac, LOGE, FL("Requesting BMPS when PMC not ready")); + smsLog(pMac, LOGE, FL("pmcReady = %d pmcState = %s"), pMac->pmc.pmcReady, pmcGetPmcStateStr(pMac->pmc.pmcState)); return eHAL_STATUS_FAILURE; } @@ -2523,21 +2513,20 @@ eHalStatus pmcEnterBmpsCheck( tpAniSirGlobal pMac ) /* Check that we are associated with a single active session. */ if (!pmcValidateConnectState( pMac )) { - pmcLog(pMac, LOGE, "PMC: STA not associated with an AP with single active session. BMPS cannot be entered"); + smsLog(pMac, LOGE, "PMC: STA not associated with an AP with single active session. BMPS cannot be entered"); return eHAL_STATUS_FAILURE; } /* BMPS can only be requested when device is in Full Power */ if (pMac->pmc.pmcState != FULL_POWER) { - pmcLog(pMac, LOGE, - "PMC: Device not in full power. Cannot request BMPS. pmcState %d", pMac->pmc.pmcState); + smsLog(pMac, LOGE, "PMC: Device not in full power. Cannot request BMPS. pmcState %d", pMac->pmc.pmcState); return eHAL_STATUS_FAILURE; } /* Check that entry into a power save mode is allowed at this time. */ if (!pmcPowerSaveCheck(pMac)) { - pmcLog(pMac, LOGE, "PMC: Power save check failed. BMPS cannot be entered now"); + smsLog(pMac, LOGE, "PMC: Power save check failed. BMPS cannot be entered now"); return eHAL_STATUS_PMC_NOT_NOW; } @@ -2545,15 +2534,13 @@ eHalStatus pmcEnterBmpsCheck( tpAniSirGlobal pMac ) //BMPS_WORKAROUND_NOT_NEEDED if(!IS_FEATURE_SUPPORTED_BY_FW(SLM_SESSIONIZATION)) { - pmcLog(pMac, LOG1, FL("doBMPSWorkaround %u"), pMac->roam.configParam.doBMPSWorkaround); + smsLog(pMac, LOG1, FL("doBMPSWorkaround %u"), pMac->roam.configParam.doBMPSWorkaround); if (pMac->roam.configParam.doBMPSWorkaround) { pMac->roam.configParam.doBMPSWorkaround = 0; - pmcLog(pMac, LOG1, - FL("reset doBMPSWorkaround to disabled %u"), pMac->roam.configParam.doBMPSWorkaround); + smsLog(pMac, LOG1, FL("reset doBMPSWorkaround to disabled %u"), pMac->roam.configParam.doBMPSWorkaround); csrDisconnectAllActiveSessions(pMac); - pmcLog(pMac, LOGE, - "PMC: doBMPSWorkaround was enabled. First Disconnect all sessions. pmcState %d", pMac->pmc.pmcState); + smsLog(pMac, LOGE, "PMC: doBMPSWorkaround was enabled. First Disconnect all sessions. pmcState %d", pMac->pmc.pmcState); return eHAL_STATUS_FAILURE; } } @@ -2572,14 +2559,13 @@ tANI_BOOLEAN pmcShouldBmpsTimerRun( tpAniSirGlobal pMac ) pMac->pmc.uapsdSessionRequired || pMac->pmc.bmpsRequestedByHdd || pMac->pmc.wowlModeRequired ))) { - pmcLog(pMac, LOG1, FL("BMPS is not enabled or not required")); + smsLog(pMac, LOG1, FL("BMPS is not enabled or not required")); return eANI_BOOLEAN_FALSE; } if(pMac->pmc.isHostPsEn && pMac->pmc.remainInPowerActiveTillDHCP) { - pmcLog(pMac, LOG1, - FL("Host controlled ps enabled and host wants active mode, so dont allow BMPS")); + smsLog(pMac, LOG1, FL("Host controlled ps enabled and host wants active mode, so dont allow BMPS")); return eANI_BOOLEAN_FALSE; } @@ -2588,14 +2574,14 @@ tANI_BOOLEAN pmcShouldBmpsTimerRun( tpAniSirGlobal pMac ) (vos_get_concurrency_mode()& VOS_SAP) || (vos_get_concurrency_mode()& VOS_P2P_GO)))) { - pmcLog(pMac, LOG1, FL("Multiple Sessions/GO/SAP sessions . BMPS should not be started")); + smsLog(pMac, LOG1, FL("Multiple Sessions/GO/SAP sessions . BMPS should not be started")); return eANI_BOOLEAN_FALSE; } /* Check if there is an Infra session. BMPS is possible only if there is * an Infra session */ if (!csrIsInfraConnected(pMac)) { - pmcLog(pMac, LOG1, FL("No Infra Session or multiple sessions. BMPS should not be started")); + smsLog(pMac, LOG1, FL("No Infra Session or multiple sessions. BMPS should not be started")); return eANI_BOOLEAN_FALSE; } return eANI_BOOLEAN_TRUE; @@ -2617,12 +2603,12 @@ void pmcDiagEvtTimerExpired (tHalHandle hHal) WLAN_VOS_DIAG_EVENT_REPORT(&psRequest, EVENT_WLAN_POWERSAVE_GENERIC); - pmcLog(pMac, LOGW, FL("DIAG event timer expired")); + smsLog(pMac, LOGW, FL("DIAG event timer expired")); /* re-arm timer */ if (pmcStartDiagEvtTimer(hHal) != eHAL_STATUS_SUCCESS) { - pmcLog(pMac, LOGP, FL("Cannot re-arm DIAG evt timer")); + smsLog(pMac, LOGP, FL("Cannot re-arm DIAG evt timer")); } } @@ -2630,12 +2616,12 @@ eHalStatus pmcStartDiagEvtTimer (tHalHandle hHal) { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - pmcLog(pMac, LOG2, FL("Entering pmcStartDiagEvtTimer")); + smsLog(pMac, LOG2, FL("Entering pmcStartDiagEvtTimer")); if (palTimerStart(pMac->hHdd, pMac->pmc.hDiagEvtTimer, PMC_DIAG_EVT_TIMER_INTERVAL * 1000, TRUE) != eHAL_STATUS_SUCCESS) { - pmcLog(pMac, LOGP, FL("Cannot start DIAG evt timer")); + smsLog(pMac, LOGP, FL("Cannot start DIAG evt timer")); return eHAL_STATUS_FAILURE; } @@ -2645,7 +2631,7 @@ eHalStatus pmcStartDiagEvtTimer (tHalHandle hHal) void pmcStopDiagEvtTimer (tHalHandle hHal) { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - pmcLog(pMac, LOG2, FL("Entering pmcStopDiagEvtTimer")); + smsLog(pMac, LOG2, FL("Entering pmcStopDiagEvtTimer")); (void)palTimerStop(pMac->hHdd, pMac->pmc.hDiagEvtTimer); } #endif diff --git a/drivers/staging/prima/CORE/SME/src/pmc/pmcApi.c b/drivers/staging/prima/CORE/SME/src/pmc/pmcApi.c index 844b2f4d139..2747771eb44 100644 --- a/drivers/staging/prima/CORE/SME/src/pmc/pmcApi.c +++ b/drivers/staging/prima/CORE/SME/src/pmc/pmcApi.c @@ -1,23 +1,43 @@ /* - * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved. - * - * Previously licensed under the ISC license by Qualcomm Atheros, Inc. - * - * - * Permission to use, copy, modify, and/or distribute this software for - * any purpose with or without fee is hereby granted, provided that the - * above copyright notice and this permission notice appear in all - * copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL - * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE - * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL - * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. -*/ + * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved. + * + * Previously licensed under the ISC license by Qualcomm Atheros, Inc. + * + * + * Permission to use, copy, modify, and/or distribute this software for + * any purpose with or without fee is hereby granted, provided that the + * above copyright notice and this permission notice appear in all + * copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE + * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ +/* + * Copyright (c) 2012, The Linux Foundation. All rights reserved. + * + * Previously licensed under the ISC license by Qualcomm Atheros, Inc. + * + * + * Permission to use, copy, modify, and/or distribute this software for + * any purpose with or without fee is hereby granted, provided that the + * above copyright notice and this permission notice appear in all + * copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE + * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ /****************************************************************************** * @@ -25,6 +45,10 @@ * * Description: Routines that make up the Power Management Control (PMC) API. * +* Copyright 2008 (c) Qualcomm, Incorporated. +* All Rights Reserved. +* Qualcomm Confidential and Proprietary. +* ******************************************************************************/ #include "palTypes.h" @@ -70,7 +94,7 @@ eHalStatus pmcOpen (tHalHandle hHal) { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - pmcLog(pMac, LOG2, FL("Entering pmcOpen")); + smsLog(pMac, LOG2, FL("Entering pmcOpen")); /* Initialize basic PMC information about device. */ pMac->pmc.powerSource = BATTERY_POWER; @@ -94,29 +118,29 @@ eHalStatus pmcOpen (tHalHandle hHal) /* Allocate a timer to use with IMPS. */ if (palTimerAlloc(pMac->hHdd, &pMac->pmc.hImpsTimer, pmcImpsTimerExpired, hHal) != eHAL_STATUS_SUCCESS) { - pmcLog(pMac, LOGE, FL("Cannot allocate timer for IMPS")); + smsLog(pMac, LOGE, FL("Cannot allocate timer for IMPS")); return eHAL_STATUS_FAILURE; } /* Allocate a timer used in Full Power State to measure traffic levels and determine when to enter BMPS. */ - if (!VOS_IS_STATUS_SUCCESS(vos_timer_init(&pMac->pmc.hTrafficTimer, + if (!VOS_IS_STATUS_SUCCESS(vos_timer_init(&pMac->pmc.hTrafficTimer, VOS_TIMER_TYPE_SW, pmcTrafficTimerExpired, hHal))) { - pmcLog(pMac, LOGE, FL("Cannot allocate timer for traffic measurement")); + smsLog(pMac, LOGE, FL("Cannot allocate timer for traffic measurement")); return eHAL_STATUS_FAILURE; } -#ifdef FEATURE_WLAN_DIAG_SUPPORT +#ifdef FEATURE_WLAN_DIAG_SUPPORT /* Allocate a timer used to report current PMC state through periodic DIAG event */ if (palTimerAlloc(pMac->hHdd, &pMac->pmc.hDiagEvtTimer, pmcDiagEvtTimerExpired, hHal) != eHAL_STATUS_SUCCESS) { - pmcLog(pMac, LOGE, FL("Cannot allocate timer for diag event reporting")); + smsLog(pMac, LOGE, FL("Cannot allocate timer for diag event reporting")); return eHAL_STATUS_FAILURE; } #endif - //Initialize the default value for Bmps related config. + //Initialize the default value for Bmps related config. pMac->pmc.bmpsConfig.trafficMeasurePeriod = BMPS_TRAFFIC_TIMER_DEFAULT; pMac->pmc.bmpsConfig.bmpsPeriod = WNI_CFG_LISTEN_INTERVAL_STADEF; @@ -124,21 +148,21 @@ eHalStatus pmcOpen (tHalHandle hHal) if (palTimerAlloc(pMac->hHdd, &pMac->pmc.hExitPowerSaveTimer, pmcExitPowerSaveTimerExpired, hHal) != eHAL_STATUS_SUCCESS) { - pmcLog(pMac, LOGE, FL("Cannot allocate exit power save mode timer")); + smsLog(pMac, LOGE, FL("Cannot allocate exit power save mode timer")); PMC_ABORT; return eHAL_STATUS_FAILURE; } - + /* Initialize lists for power save check routines and request full power callback routines. */ if (csrLLOpen(pMac->hHdd, &pMac->pmc.powerSaveCheckList) != eHAL_STATUS_SUCCESS) { - pmcLog(pMac, LOGE, FL("Cannot initialize power save check routine list")); + smsLog(pMac, LOGE, FL("Cannot initialize power save check routine list")); PMC_ABORT; return eHAL_STATUS_FAILURE; } if (csrLLOpen(pMac->hHdd, &pMac->pmc.requestFullPowerList) != eHAL_STATUS_SUCCESS) { - pmcLog(pMac, LOGE, FL("Cannot initialize request full power callback routine list")); + smsLog(pMac, LOGE, FL("Cannot initialize request full power callback routine list")); PMC_ABORT; return eHAL_STATUS_FAILURE; } @@ -147,27 +171,27 @@ eHalStatus pmcOpen (tHalHandle hHal) if (csrLLOpen(pMac->hHdd, &pMac->pmc.requestBmpsList) != eHAL_STATUS_SUCCESS) { - pmcLog(pMac, LOGE, "PMC: cannot initialize request BMPS callback routine list"); + smsLog(pMac, LOGE, "PMC: cannot initialize request BMPS callback routine list"); return eHAL_STATUS_FAILURE; } /* Initialize lists for request start UAPSD callback routines. */ if (csrLLOpen(pMac->hHdd, &pMac->pmc.requestStartUapsdList) != eHAL_STATUS_SUCCESS) { - pmcLog(pMac, LOGE, "PMC: cannot initialize request start UAPSD callback routine list"); + smsLog(pMac, LOGE, "PMC: cannot initialize request start UAPSD callback routine list"); return eHAL_STATUS_FAILURE; } /* Initialize lists for device state update indication callback routines. */ if (csrLLOpen(pMac->hHdd, &pMac->pmc.deviceStateUpdateIndList) != eHAL_STATUS_SUCCESS) { - pmcLog(pMac, LOGE, "PMC: cannot initialize device state update indication callback list"); + smsLog(pMac, LOGE, "PMC: cannot initialize device state update indication callback list"); return eHAL_STATUS_FAILURE; } if (csrLLOpen(pMac->hHdd, &pMac->pmc.deferredMsgList) != eHAL_STATUS_SUCCESS) { - pmcLog(pMac, LOGE, FL("Cannot initialize deferred msg list")); + smsLog(pMac, LOGE, FL("Cannot initialize deferred msg list")); PMC_ABORT; return eHAL_STATUS_FAILURE; } @@ -196,7 +220,7 @@ eHalStatus pmcStart (tHalHandle hHal) tpAniSirGlobal pMac = PMAC_STRUCT(hHal); tSirMacHTMIMOPowerSaveState htMimoPowerSaveState; - pmcLog(pMac, LOG2, FL("Entering pmcStart")); + smsLog(pMac, LOG2, FL("Entering pmcStart")); /* Initialize basic PMC information about device. */ pMac->pmc.pmcState = FULL_POWER; @@ -238,12 +262,12 @@ eHalStatus pmcStart (tHalHandle hHal) } else htMimoPowerSaveState = eSIR_HT_MIMO_PS_NO_LIMIT; - + if (pmcSendMessage(hHal, eWNI_PMC_SMPS_STATE_IND, &htMimoPowerSaveState, sizeof(tSirMacHTMIMOPowerSaveState)) != eHAL_STATUS_SUCCESS) return eHAL_STATUS_FAILURE; -#ifdef FEATURE_WLAN_DIAG_SUPPORT +#ifdef FEATURE_WLAN_DIAG_SUPPORT if (pmcStartDiagEvtTimer(hHal) != eHAL_STATUS_SUCCESS) { return eHAL_STATUS_FAILURE; @@ -279,23 +303,23 @@ eHalStatus pmcStop (tHalHandle hHal) tListElem *pEntry; tPmcDeferredMsg *pDeferredMsg; - pmcLog(pMac, LOG2, FL("Entering pmcStop")); + smsLog(pMac, LOG2, FL("Entering pmcStop")); /* Cancel any running timers. */ if (palTimerStop(pMac->hHdd, pMac->pmc.hImpsTimer) != eHAL_STATUS_SUCCESS) { - pmcLog(pMac, LOGE, FL("Cannot cancel IMPS timer")); + smsLog(pMac, LOGE, FL("Cannot cancel IMPS timer")); } pmcStopTrafficTimer(hHal); -#ifdef FEATURE_WLAN_DIAG_SUPPORT +#ifdef FEATURE_WLAN_DIAG_SUPPORT pmcStopDiagEvtTimer(hHal); #endif if (palTimerStop(pMac->hHdd, pMac->pmc.hExitPowerSaveTimer) != eHAL_STATUS_SUCCESS) { - pmcLog(pMac, LOGE, FL("Cannot cancel exit power save mode timer")); + smsLog(pMac, LOGE, FL("Cannot cancel exit power save mode timer")); } /* Do all the callbacks. */ @@ -341,30 +365,30 @@ eHalStatus pmcClose (tHalHandle hHal) { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - pmcLog(pMac, LOG2, FL("Entering pmcClose")); + smsLog(pMac, LOG2, FL("Entering pmcClose")); /* Free up allocated resources. */ if (palTimerFree(pMac->hHdd, pMac->pmc.hImpsTimer) != eHAL_STATUS_SUCCESS) { - pmcLog(pMac, LOGE, FL("Cannot deallocate IMPS timer")); + smsLog(pMac, LOGE, FL("Cannot deallocate IMPS timer")); } if (!VOS_IS_STATUS_SUCCESS(vos_timer_destroy(&pMac->pmc.hTrafficTimer))) { - pmcLog(pMac, LOGE, FL("Cannot deallocate traffic timer")); + smsLog(pMac, LOGE, FL("Cannot deallocate traffic timer")); } -#ifdef FEATURE_WLAN_DIAG_SUPPORT +#ifdef FEATURE_WLAN_DIAG_SUPPORT if (palTimerFree(pMac->hHdd, pMac->pmc.hDiagEvtTimer) != eHAL_STATUS_SUCCESS) { - pmcLog(pMac, LOGE, FL("Cannot deallocate timer for diag event reporting")); + smsLog(pMac, LOGE, FL("Cannot deallocate timer for diag event reporting")); } #endif if (palTimerFree(pMac->hHdd, pMac->pmc.hExitPowerSaveTimer) != eHAL_STATUS_SUCCESS) { - pmcLog(pMac, LOGE, FL("Cannot deallocate exit power save mode timer")); + smsLog(pMac, LOGE, FL("Cannot deallocate exit power save mode timer")); } /* - The following list's entries are dynamically allocated so they need their own + The following list's entries are dynamically allocated so they need their own cleanup function */ pmcClosePowerSaveCheckList(pMac); @@ -401,7 +425,7 @@ eHalStatus pmcSignalPowerEvent (tHalHandle hHal, tPmcPowerEvent event) tSirMacHTMIMOPowerSaveState htMimoPowerSaveState; #endif - pmcLog(pMac, LOG2, FL("Entering pmcSignalPowerEvent, event %d"), event); + smsLog(pMac, LOG2, FL("Entering pmcSignalPowerEvent, event %d"), event); /* Take action based on the event being signaled. */ switch (event) @@ -440,7 +464,7 @@ eHalStatus pmcSignalPowerEvent (tHalHandle hHal, tPmcPowerEvent event) if (pMac->pmc.smpsConfig.mode == ePMC_STATIC_SMPS) htMimoPowerSaveState = eSIR_HT_MIMO_PS_STATIC; if (pmcSendMessage(hHal, eWNI_PMC_SMPS_STATE_IND, &htMimoPowerSaveState, - sizeof(tSirMacHTMIMOPowerSaveState)) != eHAL_STATUS_SUCCESS) + sizeof(tSirMacHTMIMOPowerSaveState)) != eHAL_STATUS_SUCCESS) return eHAL_STATUS_FAILURE; } return eHAL_STATUS_SUCCESS; @@ -459,7 +483,7 @@ eHalStatus pmcSignalPowerEvent (tHalHandle hHal, tPmcPowerEvent event) return eHAL_STATUS_SUCCESS; #endif //GEN6_ONWARDS default: - pmcLog(pMac, LOGE, FL("Invalid event %d"), event); + smsLog(pMac, LOGE, FL("Invalid event %d"), event); PMC_ABORT; return eHAL_STATUS_FAILURE; } @@ -492,52 +516,52 @@ eHalStatus pmcSetConfigPowerSave (tHalHandle hHal, tPmcPowerSavingMode psMode, v WLAN_VOS_DIAG_EVENT_DEF(psRequest, vos_event_wlan_powersave_payload_type); #endif - pmcLog(pMac, LOG2, FL("Entering pmcSetConfigPowerSave, power save mode %d"), psMode); + smsLog(pMac, LOG2, FL("Entering pmcSetConfigPowerSave, power save mode %d"), psMode); /* Configure the specified power saving mode. */ switch (psMode) { - + case ePMC_IDLE_MODE_POWER_SAVE: pMac->pmc.impsConfig = *(tpPmcImpsConfigParams)pConfigParams; - pmcLog(pMac, LOG3, FL("IMPS configuration")); - pmcLog(pMac, LOG3, " enter on AC: %d", + smsLog(pMac, LOG3, FL("IMPS configuration")); + smsLog(pMac, LOG3, " enter on AC: %d", pMac->pmc.impsConfig.enterOnAc); break; case ePMC_BEACON_MODE_POWER_SAVE: pMac->pmc.bmpsConfig = *(tpPmcBmpsConfigParams)pConfigParams; - pmcLog(pMac, LOG3, FL("BMPS configuration")); - pmcLog(pMac, LOG3, " enter on AC: %d", + smsLog(pMac, LOG3, FL("BMPS configuration")); + smsLog(pMac, LOG3, " enter on AC: %d", pMac->pmc.bmpsConfig.enterOnAc); - pmcLog(pMac, LOG3, " TX threshold: %d", + smsLog(pMac, LOG3, " TX threshold: %d", pMac->pmc.bmpsConfig.txThreshold); - pmcLog(pMac, LOG3, " RX threshold: %d", + smsLog(pMac, LOG3, " RX threshold: %d", pMac->pmc.bmpsConfig.rxThreshold); - pmcLog(pMac, LOG3, " traffic measurement period (ms): %d", + smsLog(pMac, LOG3, " traffic measurement period (ms): %d", pMac->pmc.bmpsConfig.trafficMeasurePeriod); - pmcLog(pMac, LOG3, " BMPS period: %d", + smsLog(pMac, LOG3, " BMPS period: %d", pMac->pmc.bmpsConfig.bmpsPeriod); - pmcLog(pMac, LOG3, " beacons to forward code: %d", + smsLog(pMac, LOG3, " beacons to forward code: %d", pMac->pmc.bmpsConfig.forwardBeacons); - pmcLog(pMac, LOG3, " value of N: %d", + smsLog(pMac, LOG3, " value of N: %d", pMac->pmc.bmpsConfig.valueOfN); - pmcLog(pMac, LOG3, " use PS poll: %d", + smsLog(pMac, LOG3, " use PS poll: %d", pMac->pmc.bmpsConfig.usePsPoll); - pmcLog(pMac, LOG3, " set PM on last frame: %d", + smsLog(pMac, LOG3, " set PM on last frame: %d", pMac->pmc.bmpsConfig.setPmOnLastFrame); - pmcLog(pMac, LOG3, " value of enableBeaconEarlyTermination: %d", + smsLog(pMac, LOG3, " value of enableBeaconEarlyTermination: %d", pMac->pmc.bmpsConfig.enableBeaconEarlyTermination); - pmcLog(pMac, LOG3, " value of bcnEarlyTermWakeInterval: %d", + smsLog(pMac, LOG3, " value of bcnEarlyTermWakeInterval: %d", pMac->pmc.bmpsConfig.bcnEarlyTermWakeInterval); -#ifdef FEATURE_WLAN_DIAG_SUPPORT +#ifdef FEATURE_WLAN_DIAG_SUPPORT vos_mem_zero(&psRequest, sizeof(vos_event_wlan_powersave_payload_type)); psRequest.event_subtype = WLAN_BMPS_SET_CONFIG; /* possible loss of data due to mismatch but expectation is that values can reasonably be expected to fit in target widths */ psRequest.bmps_auto_timer_duration = (v_U16_t)pMac->pmc.bmpsConfig.trafficMeasurePeriod; - psRequest.bmps_period = (v_U16_t)pMac->pmc.bmpsConfig.bmpsPeriod; + psRequest.bmps_period = (v_U16_t)pMac->pmc.bmpsConfig.bmpsPeriod; WLAN_VOS_DIAG_EVENT_REPORT(&psRequest, EVENT_WLAN_POWERSAVE_GENERIC); #endif @@ -547,14 +571,14 @@ eHalStatus pmcSetConfigPowerSave (tHalHandle hHal, tPmcPowerSavingMode psMode, v case ePMC_SPATIAL_MULTIPLEX_POWER_SAVE: pMac->pmc.smpsConfig = *(tpPmcSmpsConfigParams)pConfigParams; - pmcLog(pMac, LOG3, FL("SMPS configuration")); - pmcLog(pMac, LOG3, " mode: %d", pMac->pmc.smpsConfig.mode); - pmcLog(pMac, LOG3, " enter on AC: %d", + smsLog(pMac, LOG3, FL("SMPS configuration")); + smsLog(pMac, LOG3, " mode: %d", pMac->pmc.smpsConfig.mode); + smsLog(pMac, LOG3, " enter on AC: %d", pMac->pmc.smpsConfig.enterOnAc); break; default: - pmcLog(pMac, LOGE, FL("Invalid power save mode %d"), psMode); + smsLog(pMac, LOGE, FL("Invalid power save mode %d"), psMode); PMC_ABORT; return eHAL_STATUS_FAILURE; } @@ -592,12 +616,12 @@ eHalStatus pmcGetConfigPowerSave (tHalHandle hHal, tPmcPowerSavingMode psMode, v { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - pmcLog(pMac, LOG2, FL("Entering pmcGetConfigPowerSave, power save mode %d"), psMode); + smsLog(pMac, LOG2, FL("Entering pmcGetConfigPowerSave, power save mode %d"), psMode); /* Configure the specified power saving mode. */ switch (psMode) { - + case ePMC_IDLE_MODE_POWER_SAVE: *(tpPmcImpsConfigParams)pConfigParams = pMac->pmc.impsConfig; break; @@ -611,7 +635,7 @@ eHalStatus pmcGetConfigPowerSave (tHalHandle hHal, tPmcPowerSavingMode psMode, v break; default: - pmcLog(pMac, LOGE, FL("Invalid power save mode %d"), psMode); + smsLog(pMac, LOGE, FL("Invalid power save mode %d"), psMode); return eHAL_STATUS_FAILURE; } @@ -638,7 +662,7 @@ eHalStatus pmcEnablePowerSave (tHalHandle hHal, tPmcPowerSavingMode psMode) tpAniSirGlobal pMac = PMAC_STRUCT(hHal); tSirMacHTMIMOPowerSaveState htMimoPowerSaveState; -#ifdef FEATURE_WLAN_DIAG_SUPPORT +#ifdef FEATURE_WLAN_DIAG_SUPPORT WLAN_VOS_DIAG_EVENT_DEF(psRequest, vos_event_wlan_powersave_payload_type); vos_mem_zero(&psRequest, sizeof(vos_event_wlan_powersave_payload_type)); @@ -647,8 +671,8 @@ eHalStatus pmcEnablePowerSave (tHalHandle hHal, tPmcPowerSavingMode psMode) WLAN_VOS_DIAG_EVENT_REPORT(&psRequest, EVENT_WLAN_POWERSAVE_GENERIC); #endif - - pmcLog(pMac, LOG2, FL("Entering pmcEnablePowerSave, power save mode %d"), psMode); + + smsLog(pMac, LOG2, FL("Entering pmcEnablePowerSave, power save mode %d"), psMode); /* Enable the specified power saving mode. */ switch (psMode) @@ -693,7 +717,7 @@ eHalStatus pmcEnablePowerSave (tHalHandle hHal, tPmcPowerSavingMode psMode) break; default: - pmcLog(pMac, LOGE, FL("Invalid power save mode %d"), psMode); + smsLog(pMac, LOGE, FL("Invalid power save mode %d"), psMode); PMC_ABORT; return eHAL_STATUS_FAILURE; } @@ -706,13 +730,13 @@ eHalStatus pmcEnablePowerSave (tHalHandle hHal, tPmcPowerSavingMode psMode) module for entry into Bmps mode. This timer is started only if BMPS is enabled and whenever the device is in full power. \param hHal - The handle returned by macOpen. - \return eHalStatus + \return eHalStatus ---------------------------------------------------------------------------*/ -eHalStatus pmcStartAutoBmpsTimer (tHalHandle hHal) +eHalStatus pmcStartAutoBmpsTimer (tHalHandle hHal) { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); -#ifdef FEATURE_WLAN_DIAG_SUPPORT +#ifdef FEATURE_WLAN_DIAG_SUPPORT WLAN_VOS_DIAG_EVENT_DEF(psRequest, vos_event_wlan_powersave_payload_type); vos_mem_zero(&psRequest, sizeof(vos_event_wlan_powersave_payload_type)); @@ -721,18 +745,18 @@ eHalStatus pmcStartAutoBmpsTimer (tHalHandle hHal) WLAN_VOS_DIAG_EVENT_REPORT(&psRequest, EVENT_WLAN_POWERSAVE_GENERIC); #endif - pmcLog(pMac, LOG2, FL("Entering pmcStartAutoBmpsTimer")); + smsLog(pMac, LOG2, FL("Entering pmcStartAutoBmpsTimer")); /* Check if BMPS is enabled. */ if (!pMac->pmc.bmpsEnabled) { - pmcLog(pMac, LOGE, "PMC: Cannot enable BMPS timer. BMPS is disabled"); + smsLog(pMac, LOGE, "PMC: Cannot enable BMPS timer. BMPS is disabled"); return eHAL_STATUS_FAILURE; } pMac->pmc.autoBmpsEntryEnabled = TRUE; - /* Check if there is an Infra session. If there is no Infra session, timer will be started + /* Check if there is an Infra session. If there is no Infra session, timer will be started when STA associates to AP */ if (pmcShouldBmpsTimerRun(pMac)) @@ -752,13 +776,13 @@ eHalStatus pmcStartAutoBmpsTimer (tHalHandle hHal) Stopping the timer does not cause a device state change. Only the timer is stopped. If "Full Power" is desired, use the pmcRequestFullPower API \param hHal - The handle returned by macOpen. - \return eHalStatus + \return eHalStatus ---------------------------------------------------------------------------*/ eHalStatus pmcStopAutoBmpsTimer (tHalHandle hHal) { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); -#ifdef FEATURE_WLAN_DIAG_SUPPORT +#ifdef FEATURE_WLAN_DIAG_SUPPORT WLAN_VOS_DIAG_EVENT_DEF(psRequest, vos_event_wlan_powersave_payload_type); vos_mem_zero(&psRequest, sizeof(vos_event_wlan_powersave_payload_type)); @@ -767,7 +791,7 @@ eHalStatus pmcStopAutoBmpsTimer (tHalHandle hHal) WLAN_VOS_DIAG_EVENT_REPORT(&psRequest, EVENT_WLAN_POWERSAVE_GENERIC); #endif - pmcLog(pMac, LOG2, FL("Entering pmcStopAutoBmpsTimer")); + smsLog(pMac, LOG2, FL("Entering pmcStopAutoBmpsTimer")); pMac->pmc.autoBmpsEntryEnabled = FALSE; /* If uapsd session is not required or HDD has not requested BMPS, stop the auto bmps timer.*/ @@ -798,7 +822,7 @@ eHalStatus pmcDisablePowerSave (tHalHandle hHal, tPmcPowerSavingMode psMode) tpAniSirGlobal pMac = PMAC_STRUCT(hHal); tSirMacHTMIMOPowerSaveState htMimoPowerSaveState; -#ifdef FEATURE_WLAN_DIAG_SUPPORT +#ifdef FEATURE_WLAN_DIAG_SUPPORT WLAN_VOS_DIAG_EVENT_DEF(psRequest, vos_event_wlan_powersave_payload_type); vos_mem_zero(&psRequest, sizeof(vos_event_wlan_powersave_payload_type)); @@ -808,7 +832,7 @@ eHalStatus pmcDisablePowerSave (tHalHandle hHal, tPmcPowerSavingMode psMode) WLAN_VOS_DIAG_EVENT_REPORT(&psRequest, EVENT_WLAN_POWERSAVE_GENERIC); #endif - pmcLog(pMac, LOG2, FL("Entering pmcDisablePowerSave, power save mode %d"), psMode); + smsLog(pMac, LOG2, FL("Entering pmcDisablePowerSave, power save mode %d"), psMode); /* Disable the specified power saving mode. */ switch (psMode) @@ -845,7 +869,7 @@ eHalStatus pmcDisablePowerSave (tHalHandle hHal, tPmcPowerSavingMode psMode) break; default: - pmcLog(pMac, LOGE, FL("Invalid power save mode %d"), psMode); + smsLog(pMac, LOGE, FL("Invalid power save mode %d"), psMode); PMC_ABORT; return eHAL_STATUS_FAILURE; } @@ -879,7 +903,7 @@ eHalStatus pmcQueryPowerState (tHalHandle hHal, tPmcPowerState *pPowerState, { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - pmcLog(pMac, LOG2, FL("Entering pmcQueryPowerState")); + smsLog(pMac, LOG2, FL("Entering pmcQueryPowerState")); /* Return current power state based on PMC state. */ if(pPowerState != NULL) @@ -887,7 +911,7 @@ eHalStatus pmcQueryPowerState (tHalHandle hHal, tPmcPowerState *pPowerState, /* Return current power state based on PMC state. */ switch (pMac->pmc.pmcState) { - + case FULL_POWER: *pPowerState = ePMC_FULL_POWER; break; @@ -931,12 +955,12 @@ tANI_BOOLEAN pmcIsPowerSaveEnabled (tHalHandle hHal, tPmcPowerSavingMode psMode) { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - pmcLog(pMac, LOG2, FL("Entering pmcIsPowerSaveEnabled, power save mode %d"), psMode); + smsLog(pMac, LOG2, FL("Entering pmcIsPowerSaveEnabled, power save mode %d"), psMode); /* Check ability to enter based on the specified power saving mode. */ switch (psMode) { - + case ePMC_IDLE_MODE_POWER_SAVE: return pMac->pmc.impsEnabled && (pMac->pmc.powerSource != AC_POWER || pMac->pmc.impsConfig.enterOnAc); @@ -957,7 +981,7 @@ tANI_BOOLEAN pmcIsPowerSaveEnabled (tHalHandle hHal, tPmcPowerSavingMode psMode) break; default: - pmcLog(pMac, LOGE, FL("Invalid power save mode %d"), psMode); + smsLog(pMac, LOGE, FL("Invalid power save mode %d"), psMode); PMC_ABORT; return FALSE; } @@ -997,22 +1021,22 @@ eHalStatus pmcRequestFullPower (tHalHandle hHal, void (*callbackRoutine) (void * tpAniSirGlobal pMac = PMAC_STRUCT(hHal); tpRequestFullPowerEntry pEntry; -#ifdef FEATURE_WLAN_DIAG_SUPPORT +#ifdef FEATURE_WLAN_DIAG_SUPPORT WLAN_VOS_DIAG_EVENT_DEF(psRequest, vos_event_wlan_powersave_payload_type); vos_mem_zero(&psRequest, sizeof(vos_event_wlan_powersave_payload_type)); psRequest.event_subtype = WLAN_ENTER_FULL_POWER_REQ; psRequest.full_power_request_reason = fullPowerReason; - + WLAN_VOS_DIAG_EVENT_REPORT(&psRequest, EVENT_WLAN_POWERSAVE_GENERIC); #endif - pmcLog(pMac, LOG2, FL("Entering pmcRequestFullPower")); + smsLog(pMac, LOG2, FL("Entering pmcRequestFullPower")); if( !PMC_IS_READY(pMac) ) { - pmcLog(pMac, LOGE, FL("Requesting Full Power when PMC not ready")); - pmcLog(pMac, LOGE, FL("pmcReady = %d pmcState = %s"), + smsLog(pMac, LOGE, FL("Requesting Full Power when PMC not ready")); + smsLog(pMac, LOGE, FL("pmcReady = %d pmcState = %s"), pMac->pmc.pmcReady, pmcGetPmcStateStr(pMac->pmc.pmcState)); return eHAL_STATUS_FAILURE; } @@ -1033,7 +1057,7 @@ eHalStatus pmcRequestFullPower (tHalHandle hHal, void (*callbackRoutine) (void * if (pMac->pmc.pmcState == IMPS) if (palTimerStop(pMac->hHdd, pMac->pmc.hImpsTimer) != eHAL_STATUS_SUCCESS) { - pmcLog(pMac, LOGE, FL("Cannot cancel IMPS timer")); + smsLog(pMac, LOGE, FL("Cannot cancel IMPS timer")); return eHAL_STATUS_FAILURE; } @@ -1048,7 +1072,7 @@ eHalStatus pmcRequestFullPower (tHalHandle hHal, void (*callbackRoutine) (void * { if (palAllocateMemory(pMac->hHdd, (void **)&pEntry, sizeof(tRequestFullPowerEntry)) != eHAL_STATUS_SUCCESS) { - pmcLog(pMac, LOGE, FL("Cannot allocate memory for request full power routine list entry")); + smsLog(pMac, LOGE, FL("Cannot allocate memory for request full power routine list entry")); PMC_ABORT; return eHAL_STATUS_FAILURE; } @@ -1101,7 +1125,7 @@ eHalStatus pmcRequestImps (tHalHandle hHal, tANI_U32 impsPeriod, tpAniSirGlobal pMac = PMAC_STRUCT(hHal); eHalStatus status; -#ifdef FEATURE_WLAN_DIAG_SUPPORT +#ifdef FEATURE_WLAN_DIAG_SUPPORT WLAN_VOS_DIAG_EVENT_DEF(psRequest, vos_event_wlan_powersave_payload_type); vos_mem_zero(&psRequest, sizeof(vos_event_wlan_powersave_payload_type)); @@ -1112,7 +1136,7 @@ eHalStatus pmcRequestImps (tHalHandle hHal, tANI_U32 impsPeriod, #endif - pmcLog(pMac, LOG2, FL("Entering pmcRequestImps")); + smsLog(pMac, LOG2, FL("Entering pmcRequestImps")); status = pmcEnterImpsCheck( pMac ); if( HAL_STATUS_SUCCESS( status ) ) @@ -1165,12 +1189,12 @@ eHalStatus pmcRegisterPowerSaveCheck (tHalHandle hHal, tANI_BOOLEAN (*checkRouti tpAniSirGlobal pMac = PMAC_STRUCT(hHal); tpPowerSaveCheckEntry pEntry; - pmcLog(pMac, LOG2, FL("Entering pmcRegisterPowerSaveCheck")); + smsLog(pMac, LOG2, FL("Entering pmcRegisterPowerSaveCheck")); /* Allocate entry for power save check routine list. */ if (palAllocateMemory(pMac->hHdd, (void **)&pEntry, sizeof(tPowerSaveCheckEntry)) != eHAL_STATUS_SUCCESS) { - pmcLog(pMac, LOGE, FL("Cannot allocate memory for power save check routine list entry")); + smsLog(pMac, LOGE, FL("Cannot allocate memory for power save check routine list entry")); PMC_ABORT; return eHAL_STATUS_FAILURE; } @@ -1209,7 +1233,7 @@ eHalStatus pmcDeregisterPowerSaveCheck (tHalHandle hHal, tANI_BOOLEAN (*checkRou tListElem *pEntry; tpPowerSaveCheckEntry pPowerSaveCheckEntry; - pmcLog(pMac, LOG2, FL("Entering pmcDeregisterPowerSaveCheck")); + smsLog(pMac, LOG2, FL("Entering pmcDeregisterPowerSaveCheck")); /* Find entry in the power save check routine list that matches the specified routine and remove it. */ @@ -1223,14 +1247,14 @@ eHalStatus pmcDeregisterPowerSaveCheck (tHalHandle hHal, tANI_BOOLEAN (*checkRou { if (palFreeMemory(pMac->hHdd, pPowerSaveCheckEntry) != eHAL_STATUS_SUCCESS) { - pmcLog(pMac, LOGE, FL("Cannot free memory for power save check routine list entry")); + smsLog(pMac, LOGE, FL("Cannot free memory for power save check routine list entry")); PMC_ABORT; return eHAL_STATUS_FAILURE; } } else { - pmcLog(pMac, LOGE, FL("Cannot remove power save check routine list entry")); + smsLog(pMac, LOGE, FL("Cannot remove power save check routine list entry")); return eHAL_STATUS_FAILURE; } return eHAL_STATUS_SUCCESS; @@ -1254,7 +1278,7 @@ static void pmcProcessResponse( tpAniSirGlobal pMac, tSirSmeRsp *pMsg ) { pCommand = GET_BASE_ADDR(pEntry, tSmeCmd, Link); - pmcLog(pMac, LOG2, FL("process message = %d"), pMsg->messageType); + smsLog(pMac, LOG2, FL("process message = %d"), pMsg->messageType); /* Process each different type of message. */ switch (pMsg->messageType) @@ -1262,10 +1286,10 @@ static void pmcProcessResponse( tpAniSirGlobal pMac, tSirSmeRsp *pMsg ) /* We got a response to our IMPS request. */ case eWNI_PMC_ENTER_IMPS_RSP: - pmcLog(pMac, LOG2, FL("Rcvd eWNI_PMC_ENTER_IMPS_RSP with status = %d"), pMsg->statusCode); + smsLog(pMac, LOG2, FL("Rcvd eWNI_PMC_ENTER_IMPS_RSP with status = %d"), pMsg->statusCode); if( (eSmeCommandEnterImps != pCommand->command) && (eSmeCommandEnterStandby != pCommand->command) ) { - pmcLog(pMac, LOGW, FL("Rcvd eWNI_PMC_ENTER_IMPS_RSP without request")); + smsLog(pMac, LOGW, FL("Rcvd eWNI_PMC_ENTER_IMPS_RSP without request")); fRemoveCommand = eANI_BOOLEAN_FALSE; break; } @@ -1278,8 +1302,7 @@ static void pmcProcessResponse( tpAniSirGlobal pMac, tSirSmeRsp *pMsg ) pmcEnterImpsState(pMac); if (!(pMac->pmc.ImpsReqFailed || pMac->pmc.ImpsReqTimerFailed) && pMac->pmc.ImpsReqFailCnt) { - pmcLog(pMac, LOGE, - FL("Response message to request to enter IMPS was failed %d times before success"), + smsLog(pMac, LOGE, FL("Response message to request to enter IMPS was failed %d times before success"), pMac->pmc.ImpsReqFailCnt); pMac->pmc.ImpsReqFailCnt = 0; } @@ -1291,8 +1314,7 @@ static void pmcProcessResponse( tpAniSirGlobal pMac, tSirSmeRsp *pMsg ) pMac->pmc.ImpsReqFailed = VOS_TRUE; if (!(pMac->pmc.ImpsReqFailCnt & 0xF)) { - pmcLog(pMac, LOGE, - FL("Response message to request to enter IMPS indicates failure, status %x, FailCnt - %d"), + smsLog(pMac, LOGE, FL("Response message to request to enter IMPS indicates failure, status %x, FailCnt - %d"), pMsg->statusCode, ++pMac->pmc.ImpsReqFailCnt); } else @@ -1315,7 +1337,7 @@ static void pmcProcessResponse( tpAniSirGlobal pMac, tSirSmeRsp *pMsg ) and tell everyone that we aren't going into STANDBY. */ else { - pmcLog(pMac, LOGE, "PMC: response message to request to enter " + smsLog(pMac, LOGE, "PMC: response message to request to enter " "standby indicates failure, status %x", pMsg->statusCode); pmcEnterFullPowerState(pMac); pmcDoStandbyCallbacks(pMac, eHAL_STATUS_FAILURE); @@ -1323,24 +1345,24 @@ static void pmcProcessResponse( tpAniSirGlobal pMac, tSirSmeRsp *pMsg ) } else { - pmcLog(pMac, LOGE, "PMC: Enter IMPS rsp rcvd when device is " + smsLog(pMac, LOGE, "PMC: Enter IMPS rsp rcvd when device is " "in %d state", pMac->pmc.pmcState); } break; /* We got a response to our wake from IMPS request. */ case eWNI_PMC_EXIT_IMPS_RSP: - pmcLog(pMac, LOG2, FL("Rcvd eWNI_PMC_EXIT_IMPS_RSP with status = %d"), pMsg->statusCode); + smsLog(pMac, LOG2, FL("Rcvd eWNI_PMC_EXIT_IMPS_RSP with status = %d"), pMsg->statusCode); if( eSmeCommandExitImps != pCommand->command ) { - pmcLog(pMac, LOGW, FL("Rcvd eWNI_PMC_EXIT_IMPS_RSP without request")); + smsLog(pMac, LOGW, FL("Rcvd eWNI_PMC_EXIT_IMPS_RSP without request")); fRemoveCommand = eANI_BOOLEAN_FALSE; break; } /* Check that we are in the correct state for this message. */ if (pMac->pmc.pmcState != REQUEST_FULL_POWER) { - pmcLog(pMac, LOGE, FL("Got Exit IMPS Response Message while " + smsLog(pMac, LOGE, FL("Got Exit IMPS Response Message while " "in state %d"), pMac->pmc.pmcState); break; } @@ -1348,7 +1370,7 @@ static void pmcProcessResponse( tpAniSirGlobal pMac, tSirSmeRsp *pMsg ) /* Enter Full Power State. */ if (pMsg->statusCode != eSIR_SME_SUCCESS) { - pmcLog(pMac, LOGE, FL("Response message to request to exit " + smsLog(pMac, LOGE, FL("Response message to request to exit " "IMPS indicates failure, status %x"), pMsg->statusCode); } pmcEnterFullPowerState(pMac); @@ -1356,10 +1378,10 @@ static void pmcProcessResponse( tpAniSirGlobal pMac, tSirSmeRsp *pMsg ) /* We got a response to our BMPS request. */ case eWNI_PMC_ENTER_BMPS_RSP: - pmcLog(pMac, LOG2, FL("Rcvd eWNI_PMC_ENTER_BMPS_RSP with status = %d"), pMsg->statusCode); + smsLog(pMac, LOG2, FL("Rcvd eWNI_PMC_ENTER_BMPS_RSP with status = %d"), pMsg->statusCode); if( eSmeCommandEnterBmps != pCommand->command ) { - pmcLog(pMac, LOGW, FL("Rcvd eWNI_PMC_ENTER_BMPS_RSP without request")); + smsLog(pMac, LOGW, FL("Rcvd eWNI_PMC_ENTER_BMPS_RSP without request")); fRemoveCommand = eANI_BOOLEAN_FALSE; break; } @@ -1367,8 +1389,7 @@ static void pmcProcessResponse( tpAniSirGlobal pMac, tSirSmeRsp *pMsg ) /* Check that we are in the correct state for this message. */ if (pMac->pmc.pmcState != REQUEST_BMPS) { - pmcLog(pMac, LOGE, - FL("Got Enter BMPS Response Message while in state %d"), pMac->pmc.pmcState); + smsLog(pMac, LOGE, FL("Got Enter BMPS Response Message while in state %d"), pMac->pmc.pmcState); break; } @@ -1384,8 +1405,7 @@ static void pmcProcessResponse( tpAniSirGlobal pMac, tSirSmeRsp *pMsg ) /* If response is failure, then we stay in Full Power State and tell everyone that we aren't going into BMPS. */ else { - pmcLog(pMac, LOGE, - FL("Response message to request to enter BMPS indicates failure, status %x"), + smsLog(pMac, LOGE, FL("Response message to request to enter BMPS indicates failure, status %x"), pMsg->statusCode); pmcEnterFullPowerState(pMac); //Do not call UAPSD callback here since it may be re-entered @@ -1395,26 +1415,24 @@ static void pmcProcessResponse( tpAniSirGlobal pMac, tSirSmeRsp *pMsg ) /* We got a response to our wake from BMPS request. */ case eWNI_PMC_EXIT_BMPS_RSP: - pmcLog(pMac, LOG2, FL("Rcvd eWNI_PMC_EXIT_BMPS_RSP with status = %d"), pMsg->statusCode); + smsLog(pMac, LOG2, FL("Rcvd eWNI_PMC_EXIT_BMPS_RSP with status = %d"), pMsg->statusCode); if( eSmeCommandExitBmps != pCommand->command ) { - pmcLog(pMac, LOGW, FL("Rcvd eWNI_PMC_EXIT_BMPS_RSP without request")); + smsLog(pMac, LOGW, FL("Rcvd eWNI_PMC_EXIT_BMPS_RSP without request")); fRemoveCommand = eANI_BOOLEAN_FALSE; break; } /* Check that we are in the correct state for this message. */ if (pMac->pmc.pmcState != REQUEST_FULL_POWER) { - pmcLog(pMac, LOGE, - FL("Got Exit BMPS Response Message while in state %d"), pMac->pmc.pmcState); + smsLog(pMac, LOGE, FL("Got Exit BMPS Response Message while in state %d"), pMac->pmc.pmcState); break; } /* Enter Full Power State. */ if (pMsg->statusCode != eSIR_SME_SUCCESS) { - pmcLog(pMac, LOGP, - FL("Response message to request to exit BMPS indicates failure, status %x"), + smsLog(pMac, LOGP, FL("Response message to request to exit BMPS indicates failure, status %x"), pMsg->statusCode); } pmcEnterFullPowerState(pMac); @@ -1422,23 +1440,22 @@ static void pmcProcessResponse( tpAniSirGlobal pMac, tSirSmeRsp *pMsg ) /* We got a response to our Start UAPSD request. */ case eWNI_PMC_ENTER_UAPSD_RSP: - pmcLog(pMac, LOG2, FL("Rcvd eWNI_PMC_ENTER_UAPSD_RSP with status = %d"), pMsg->statusCode); + smsLog(pMac, LOG2, FL("Rcvd eWNI_PMC_ENTER_UAPSD_RSP with status = %d"), pMsg->statusCode); if( eSmeCommandEnterUapsd != pCommand->command ) { - pmcLog(pMac, LOGW, FL("Rcvd eWNI_PMC_ENTER_UAPSD_RSP without request")); + smsLog(pMac, LOGW, FL("Rcvd eWNI_PMC_ENTER_UAPSD_RSP without request")); fRemoveCommand = eANI_BOOLEAN_FALSE; break; } /* Check that we are in the correct state for this message. */ if (pMac->pmc.pmcState != REQUEST_START_UAPSD) { - pmcLog(pMac, LOGE, - FL("Got Enter Uapsd rsp Message while in state %d"), pMac->pmc.pmcState); + smsLog(pMac, LOGE, FL("Got Enter Uapsd rsp Message while in state %d"), pMac->pmc.pmcState); break; } /* Enter UAPSD State if response indicates success. */ - if (pMsg->statusCode == eSIR_SME_SUCCESS) + if (pMsg->statusCode == eSIR_SME_SUCCESS) { pmcEnterUapsdState(pMac); pmcDoStartUapsdCallbacks(pMac, eHAL_STATUS_SUCCESS); @@ -1446,7 +1463,7 @@ static void pmcProcessResponse( tpAniSirGlobal pMac, tSirSmeRsp *pMsg ) /* If response is failure, then we try to put the chip back in BMPS mode*/ else { - pmcLog(pMac, LOGE, "PMC: response message to request to enter " + smsLog(pMac, LOGE, "PMC: response message to request to enter " "UAPSD indicates failure, status %x", pMsg->statusCode); //Need to reset the UAPSD flag so pmcEnterBmpsState won't try to enter UAPSD. pMac->pmc.uapsdSessionRequired = FALSE; @@ -1458,24 +1475,23 @@ static void pmcProcessResponse( tpAniSirGlobal pMac, tSirSmeRsp *pMsg ) /* We got a response to our Stop UAPSD request. */ case eWNI_PMC_EXIT_UAPSD_RSP: - pmcLog(pMac, LOG2, FL("Rcvd eWNI_PMC_EXIT_UAPSD_RSP with status = %d"), pMsg->statusCode); + smsLog(pMac, LOG2, FL("Rcvd eWNI_PMC_EXIT_UAPSD_RSP with status = %d"), pMsg->statusCode); if( eSmeCommandExitUapsd != pCommand->command ) { - pmcLog(pMac, LOGW, FL("Rcvd eWNI_PMC_EXIT_UAPSD_RSP without request")); + smsLog(pMac, LOGW, FL("Rcvd eWNI_PMC_EXIT_UAPSD_RSP without request")); fRemoveCommand = eANI_BOOLEAN_FALSE; break; } /* Check that we are in the correct state for this message. */ if (pMac->pmc.pmcState != REQUEST_STOP_UAPSD) { - pmcLog(pMac, LOGE, - FL("Got Exit Uapsd rsp Message while in state %d"), pMac->pmc.pmcState); + smsLog(pMac, LOGE, FL("Got Exit Uapsd rsp Message while in state %d"), pMac->pmc.pmcState); break; } /* Enter BMPS State */ if (pMsg->statusCode != eSIR_SME_SUCCESS) { - pmcLog(pMac, LOGP, "PMC: response message to request to exit " + smsLog(pMac, LOGP, "PMC: response message to request to exit " "UAPSD indicates failure, status %x", pMsg->statusCode); } pmcEnterBmpsState(pMac); @@ -1486,14 +1502,14 @@ static void pmcProcessResponse( tpAniSirGlobal pMac, tSirSmeRsp *pMsg ) if( eSmeCommandEnterWowl != pCommand->command ) { - pmcLog(pMac, LOGW, FL("Rcvd eWNI_PMC_ENTER_WOWL_RSP without request")); + smsLog(pMac, LOGW, FL("Rcvd eWNI_PMC_ENTER_WOWL_RSP without request")); fRemoveCommand = eANI_BOOLEAN_FALSE; break; } /* Check that we are in the correct state for this message. */ if (pMac->pmc.pmcState != REQUEST_ENTER_WOWL) { - pmcLog(pMac, LOGE, FL("Got eWNI_PMC_ENTER_WOWL_RSP while in state %s"), + smsLog(pMac, LOGE, FL("Got eWNI_PMC_ENTER_WOWL_RSP while in state %s"), pmcGetPmcStateStr(pMac->pmc.pmcState)); break; } @@ -1507,7 +1523,7 @@ static void pmcProcessResponse( tpAniSirGlobal pMac, tSirSmeRsp *pMsg ) /* If response is failure, then we try to put the chip back in BMPS mode*/ else { - pmcLog(pMac, LOGE, "PMC: response message to request to enter " + smsLog(pMac, LOGE, "PMC: response message to request to enter " "WOWL indicates failure, status %x", pMsg->statusCode); pmcEnterBmpsState(pMac); pmcDoEnterWowlCallbacks(pMac, eHAL_STATUS_FAILURE); @@ -1519,27 +1535,27 @@ static void pmcProcessResponse( tpAniSirGlobal pMac, tSirSmeRsp *pMsg ) if( eSmeCommandExitWowl != pCommand->command ) { - pmcLog(pMac, LOGW, FL("Rcvd eWNI_PMC_EXIT_WOWL_RSP without request")); + smsLog(pMac, LOGW, FL("Rcvd eWNI_PMC_EXIT_WOWL_RSP without request")); fRemoveCommand = eANI_BOOLEAN_FALSE; break; } /* Check that we are in the correct state for this message. */ if (pMac->pmc.pmcState != REQUEST_EXIT_WOWL) { - pmcLog(pMac, LOGE, FL("Got Exit WOWL rsp Message while in state %d"), pMac->pmc.pmcState); + smsLog(pMac, LOGE, FL("Got Exit WOWL rsp Message while in state %d"), pMac->pmc.pmcState); break; } /* Enter BMPS State */ if (pMsg->statusCode != eSIR_SME_SUCCESS) { - pmcLog(pMac, LOGP, "PMC: response message to request to exit " + smsLog(pMac, LOGP, "PMC: response message to request to exit " "WOWL indicates failure, status %x", pMsg->statusCode); } pmcEnterBmpsState(pMac); break; default: - pmcLog(pMac, LOGE, FL("Invalid message type %d received"), pMsg->messageType); + smsLog(pMac, LOGE, FL("Invalid message type %d received"), pMsg->messageType); PMC_ABORT; break; }//switch @@ -1555,7 +1571,7 @@ static void pmcProcessResponse( tpAniSirGlobal pMac, tSirSmeRsp *pMsg ) } else { - pmcLog(pMac, LOGE, FL("message type %d received but no request is found"), pMsg->messageType); + smsLog(pMac, LOGE, FL("message type %d received but no request is found"), pMsg->messageType); } } @@ -1579,7 +1595,7 @@ void pmcMessageProcessor (tHalHandle hHal, tSirSmeRsp *pMsg) { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - pmcLog(pMac, LOG2, FL("Entering pmcMessageProcessor, message type %d"), pMsg->messageType); + smsLog(pMac, LOG2, FL("Entering pmcMessageProcessor, message type %d"), pMsg->messageType); switch( pMsg->messageType ) { @@ -1587,7 +1603,7 @@ void pmcMessageProcessor (tHalHandle hHal, tSirSmeRsp *pMsg) //When PMC needs to handle more indication from PE, they need to be added here. { /* Device left BMPS on its own. */ - pmcLog(pMac, LOGW, FL("Rcvd eWNI_PMC_EXIT_BMPS_IND with status = %d"), pMsg->statusCode); + smsLog(pMac, LOGW, FL("Rcvd eWNI_PMC_EXIT_BMPS_IND with status = %d"), pMsg->statusCode); /* Check that we are in the correct state for this message. */ switch(pMac->pmc.pmcState) { @@ -1599,10 +1615,10 @@ void pmcMessageProcessor (tHalHandle hHal, tSirSmeRsp *pMsg) case WOWL: case REQUEST_EXIT_WOWL: case REQUEST_FULL_POWER: - pmcLog(pMac, LOGW, FL("Got eWNI_PMC_EXIT_BMPS_IND while in state %d"), pMac->pmc.pmcState); + smsLog(pMac, LOGW, FL("Got eWNI_PMC_EXIT_BMPS_IND while in state %d"), pMac->pmc.pmcState); break; default: - pmcLog(pMac, LOGE, FL("Got eWNI_PMC_EXIT_BMPS_IND while in state %d"), pMac->pmc.pmcState); + smsLog(pMac, LOGE, FL("Got eWNI_PMC_EXIT_BMPS_IND while in state %d"), pMac->pmc.pmcState); PMC_ABORT; break; } @@ -1610,7 +1626,7 @@ void pmcMessageProcessor (tHalHandle hHal, tSirSmeRsp *pMsg) /* Enter Full Power State. */ if (pMsg->statusCode != eSIR_SME_SUCCESS) { - pmcLog(pMac, LOGP, FL("Exit BMPS indication indicates failure, status %x"), pMsg->statusCode); + smsLog(pMac, LOGP, FL("Exit BMPS indication indicates failure, status %x"), pMsg->statusCode); } else { @@ -1634,19 +1650,19 @@ tANI_BOOLEAN pmcValidateConnectState( tHalHandle hHal ) if ( !csrIsInfraConnected( pMac ) ) { - pmcLog(pMac, LOGW, "PMC: STA not associated. BMPS cannot be entered"); + smsLog(pMac, LOGW, "PMC: STA not associated. BMPS cannot be entered"); return eANI_BOOLEAN_FALSE; } //Cannot have other session if ( csrIsIBSSStarted( pMac ) ) { - pmcLog(pMac, LOGW, "PMC: IBSS started. BMPS cannot be entered"); + smsLog(pMac, LOGW, "PMC: IBSS started. BMPS cannot be entered"); return eANI_BOOLEAN_FALSE; } if ( csrIsBTAMPStarted( pMac ) ) { - pmcLog(pMac, LOGW, "PMC: BT-AMP exists. BMPS cannot be entered"); + smsLog(pMac, LOGW, "PMC: BT-AMP exists. BMPS cannot be entered"); return eANI_BOOLEAN_FALSE; } if ((vos_concurrent_sessions_running()) && @@ -1654,16 +1670,9 @@ tANI_BOOLEAN pmcValidateConnectState( tHalHandle hHal ) (vos_get_concurrency_mode()& VOS_SAP) || (vos_get_concurrency_mode()& VOS_P2P_GO))) { - pmcLog(pMac, LOGW, "PMC: Multiple active sessions exists. BMPS cannot be entered"); + smsLog(pMac, LOGW, "PMC: Multiple active sessions exists. BMPS cannot be entered"); return eANI_BOOLEAN_FALSE; } -#ifdef FEATURE_WLAN_TDLS - if (pMac->isTdlsPowerSaveProhibited) - { - pmcLog(pMac, LOGE, FL("TDLS peer(s) connected/discovery sent. Dont enter BMPS")); - return eANI_BOOLEAN_FALSE; - } -#endif return eANI_BOOLEAN_TRUE; } @@ -1674,19 +1683,19 @@ tANI_BOOLEAN pmcAllowImps( tHalHandle hHal ) //Cannot have other session like IBSS or BT AMP running if ( csrIsIBSSStarted( pMac ) ) { - pmcLog(pMac, LOGW, "PMC: IBSS started. IMPS cannot be entered"); + smsLog(pMac, LOGW, "PMC: IBSS started. IMPS cannot be entered"); return eANI_BOOLEAN_FALSE; } if ( csrIsBTAMPStarted( pMac ) ) { - pmcLog(pMac, LOGW, "PMC: BT-AMP exists. IMPS cannot be entered"); + smsLog(pMac, LOGW, "PMC: BT-AMP exists. IMPS cannot be entered"); return eANI_BOOLEAN_FALSE; } //All sessions must be disconnected to allow IMPS if ( !csrIsAllSessionDisconnected( pMac ) ) { - pmcLog(pMac, LOGW, "PMC: Atleast one connected session. IMPS cannot be entered"); + smsLog(pMac, LOGW, "PMC: Atleast one connected session. IMPS cannot be entered"); return eANI_BOOLEAN_FALSE; } @@ -1721,7 +1730,7 @@ eHalStatus pmcRequestBmps ( tpRequestBmpsEntry pEntry; eHalStatus status; -#ifdef FEATURE_WLAN_DIAG_SUPPORT +#ifdef FEATURE_WLAN_DIAG_SUPPORT WLAN_VOS_DIAG_EVENT_DEF(psRequest, vos_event_wlan_powersave_payload_type); vos_mem_zero(&psRequest, sizeof(vos_event_wlan_powersave_payload_type)); @@ -1730,16 +1739,16 @@ eHalStatus pmcRequestBmps ( WLAN_VOS_DIAG_EVENT_REPORT(&psRequest, EVENT_WLAN_POWERSAVE_GENERIC); #endif - pmcLog(pMac, LOG2, "PMC: entering pmcRequestBmps"); + smsLog(pMac, LOG2, "PMC: entering pmcRequestBmps"); /* If already in BMPS, just return. */ if (pMac->pmc.pmcState == BMPS || REQUEST_START_UAPSD == pMac->pmc.pmcState || UAPSD == pMac->pmc.pmcState) { - pmcLog(pMac, LOG2, "PMC: Device already in BMPS pmcState %d", pMac->pmc.pmcState); + smsLog(pMac, LOG2, "PMC: Device already in BMPS pmcState %d", pMac->pmc.pmcState); pMac->pmc.bmpsRequestedByHdd = TRUE; return eHAL_STATUS_SUCCESS; } - + status = pmcEnterBmpsCheck( pMac ); if(HAL_STATUS_SUCCESS( status )) { @@ -1758,7 +1767,7 @@ eHalStatus pmcRequestBmps ( pMac->hHdd, (void **)&pEntry, sizeof(tRequestBmpsEntry)) != eHAL_STATUS_SUCCESS) { - pmcLog(pMac, LOGE, "PMC: cannot allocate memory for request " + smsLog(pMac, LOGE, "PMC: cannot allocate memory for request " "BMPS routine list entry"); return eHAL_STATUS_FAILURE; } @@ -1782,16 +1791,16 @@ eHalStatus pmcRequestBmps ( else if (status == eHAL_STATUS_PMC_NOT_NOW) { pmcStopTrafficTimer(hHal); - pmcLog(pMac, LOG1, FL("Can't enter BMPS+++")); + smsLog(pMac, LOG1, FL("Can't enter BMPS+++")); if (pmcShouldBmpsTimerRun(pMac)) { if (pmcStartTrafficTimer(pMac, pMac->pmc.bmpsConfig.trafficMeasurePeriod) != eHAL_STATUS_SUCCESS) { - pmcLog(pMac, LOG1, FL("Cannot start BMPS Retry timer")); + smsLog(pMac, LOG1, FL("Cannot start BMPS Retry timer")); } - pmcLog(pMac, LOG1, + smsLog(pMac, LOG1, FL("BMPS Retry Timer already running or started")); } } @@ -1827,7 +1836,7 @@ eHalStatus pmcStartUapsd ( tpAniSirGlobal pMac = PMAC_STRUCT(hHal); tpStartUapsdEntry pEntry; -#ifdef FEATURE_WLAN_DIAG_SUPPORT +#ifdef FEATURE_WLAN_DIAG_SUPPORT WLAN_VOS_DIAG_EVENT_DEF(psRequest, vos_event_wlan_powersave_payload_type); vos_mem_zero(&psRequest, sizeof(vos_event_wlan_powersave_payload_type)); @@ -1836,12 +1845,12 @@ eHalStatus pmcStartUapsd ( WLAN_VOS_DIAG_EVENT_REPORT(&psRequest, EVENT_WLAN_POWERSAVE_GENERIC); #endif - pmcLog(pMac, LOG2, "PMC: entering pmcStartUapsd"); + smsLog(pMac, LOG2, "PMC: entering pmcStartUapsd"); if( !PMC_IS_READY(pMac) ) { - pmcLog(pMac, LOGE, FL("Requesting UAPSD when PMC not ready")); - pmcLog(pMac, LOGE, FL("pmcReady = %d pmcState = %s"), + smsLog(pMac, LOGE, FL("Requesting UAPSD when PMC not ready")); + smsLog(pMac, LOGE, FL("pmcReady = %d pmcState = %s"), pMac->pmc.pmcReady, pmcGetPmcStateStr(pMac->pmc.pmcState)); return eHAL_STATUS_FAILURE; } @@ -1849,14 +1858,14 @@ eHalStatus pmcStartUapsd ( /* Check if BMPS is enabled. */ if (!pMac->pmc.bmpsEnabled) { - pmcLog(pMac, LOGE, "PMC: Cannot enter UAPSD. BMPS is disabled"); + smsLog(pMac, LOGE, "PMC: Cannot enter UAPSD. BMPS is disabled"); return eHAL_STATUS_PMC_DISABLED; } /* Check if UAPSD is enabled. */ if (!pMac->pmc.uapsdEnabled) { - pmcLog(pMac, LOGE, "PMC: Cannot enter UAPSD. UAPSD is disabled"); + smsLog(pMac, LOGE, "PMC: Cannot enter UAPSD. UAPSD is disabled"); return eHAL_STATUS_PMC_DISABLED; } @@ -1867,7 +1876,7 @@ eHalStatus pmcStartUapsd ( /* Check that we are associated. */ if (!pmcValidateConnectState( pMac )) { - pmcLog(pMac, LOGE, "PMC: STA not associated with an AP. UAPSD cannot be entered"); + smsLog(pMac, LOGE, "PMC: STA not associated with an AP. UAPSD cannot be entered"); return eHAL_STATUS_FAILURE; } @@ -1881,7 +1890,7 @@ eHalStatus pmcStartUapsd ( if (palAllocateMemory(pMac->hHdd, (void **)&pEntry, sizeof(tStartUapsdEntry)) != eHAL_STATUS_SUCCESS) { - pmcLog(pMac, LOGE, "PMC: cannot allocate memory for request " + smsLog(pMac, LOGE, "PMC: cannot allocate memory for request " "start UAPSD routine list entry"); return eHAL_STATUS_FAILURE; } @@ -1916,7 +1925,7 @@ eHalStatus pmcStopUapsd (tHalHandle hHal) { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); -#ifdef FEATURE_WLAN_DIAG_SUPPORT +#ifdef FEATURE_WLAN_DIAG_SUPPORT WLAN_VOS_DIAG_EVENT_DEF(psRequest, vos_event_wlan_powersave_payload_type); vos_mem_zero(&psRequest, sizeof(vos_event_wlan_powersave_payload_type)); @@ -1925,7 +1934,7 @@ eHalStatus pmcStopUapsd (tHalHandle hHal) WLAN_VOS_DIAG_EVENT_REPORT(&psRequest, EVENT_WLAN_POWERSAVE_GENERIC); #endif - pmcLog(pMac, LOG2, "PMC: entering pmcStopUapsd"); + smsLog(pMac, LOG2, "PMC: entering pmcStopUapsd"); /* Clear any buffered command for entering UAPSD */ pMac->pmc.uapsdSessionRequired = FALSE; @@ -1934,7 +1943,7 @@ eHalStatus pmcStopUapsd (tHalHandle hHal) some other module (HDD, BT-AMP) requested Full Power.*/ if (pMac->pmc.pmcState != UAPSD && pMac->pmc.pmcState != REQUEST_STOP_UAPSD) { - pmcLog(pMac, LOGW, "PMC: Device is already out of UAPSD " + smsLog(pMac, LOGW, "PMC: Device is already out of UAPSD " "state. Current state is %d", pMac->pmc.pmcState); return eHAL_STATUS_SUCCESS; } @@ -1952,7 +1961,7 @@ eHalStatus pmcStopUapsd (tHalHandle hHal) \param hHal - The handle returned by macOpen. \param callbackRoutine - Callback routine invoked in case of success/failure \param callbackContext - value to be passed as parameter to callback - \return eHalStatus + \return eHalStatus eHAL_STATUS_SUCCESS - device is in Standby mode eHAL_STATUS_FAILURE - device cannot be put in standby mode eHAL_STATUS_PMC_PENDING - device is being put in standby mode @@ -1964,7 +1973,7 @@ extern eHalStatus pmcRequestStandby ( { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); -#ifdef FEATURE_WLAN_DIAG_SUPPORT +#ifdef FEATURE_WLAN_DIAG_SUPPORT WLAN_VOS_DIAG_EVENT_DEF(psRequest, vos_event_wlan_powersave_payload_type); vos_mem_zero(&psRequest, sizeof(vos_event_wlan_powersave_payload_type)); @@ -1973,19 +1982,19 @@ extern eHalStatus pmcRequestStandby ( WLAN_VOS_DIAG_EVENT_REPORT(&psRequest, EVENT_WLAN_POWERSAVE_GENERIC); #endif - pmcLog(pMac, LOG2, "PMC: entering pmcRequestStandby"); + smsLog(pMac, LOG2, "PMC: entering pmcRequestStandby"); /* Check if standby is enabled. */ if (!pMac->pmc.standbyEnabled) { - pmcLog(pMac, LOGE, "PMC: Cannot enter standby. Standby is disabled"); + smsLog(pMac, LOGE, "PMC: Cannot enter standby. Standby is disabled"); return eHAL_STATUS_PMC_DISABLED; } if( !PMC_IS_READY(pMac) ) { - pmcLog(pMac, LOGE, FL("Requesting standby when PMC not ready")); - pmcLog(pMac, LOGE, FL("pmcReady = %d pmcState = %s"), + smsLog(pMac, LOGE, FL("Requesting standby when PMC not ready")); + smsLog(pMac, LOGE, FL("pmcReady = %d pmcState = %s"), pMac->pmc.pmcReady, pmcGetPmcStateStr(pMac->pmc.pmcState)); return eHAL_STATUS_FAILURE; } @@ -1994,10 +2003,10 @@ extern eHalStatus pmcRequestStandby ( if (pMac->pmc.pmcState == STANDBY) return eHAL_STATUS_SUCCESS; - + if (csrIsIBSSStarted(pMac) || csrIsBTAMPStarted(pMac)) { - VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_FATAL, + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_FATAL, "WLAN: IBSS or BT-AMP session present. Cannot honor standby request"); return eHAL_STATUS_PMC_NOT_NOW; } @@ -2022,9 +2031,9 @@ extern eHalStatus pmcRequestStandby ( \param callbackContext - Cookie to be passed back during callback \return eHalStatus eHAL_STATUS_SUCCESS - successfully registered - eHAL_STATUS_FAILURE - not successfully registered + eHAL_STATUS_FAILURE - not successfully registered ---------------------------------------------------------------------------*/ -extern eHalStatus pmcRegisterDeviceStateUpdateInd (tHalHandle hHal, +extern eHalStatus pmcRegisterDeviceStateUpdateInd (tHalHandle hHal, void (*callbackRoutine) (void *callbackContext, tPmcState pmcState), void *callbackContext) { @@ -2032,12 +2041,12 @@ extern eHalStatus pmcRegisterDeviceStateUpdateInd (tHalHandle hHal, tpAniSirGlobal pMac = PMAC_STRUCT(hHal); tpDeviceStateUpdateIndEntry pEntry; - pmcLog(pMac, LOG2, FL("Entering pmcRegisterDeviceStateUpdateInd")); + smsLog(pMac, LOG2, FL("Entering pmcRegisterDeviceStateUpdateInd")); /* Allocate entry for device power state update indication. */ if (palAllocateMemory(pMac->hHdd, (void **)&pEntry, sizeof(tDeviceStateUpdateIndEntry)) != eHAL_STATUS_SUCCESS) { - pmcLog(pMac, LOGE, FL("Cannot allocate memory for device power state update indication")); + smsLog(pMac, LOGE, FL("Cannot allocate memory for device power state update indication")); PMC_ABORT; return eHAL_STATUS_FAILURE; } @@ -2059,16 +2068,16 @@ extern eHalStatus pmcRegisterDeviceStateUpdateInd (tHalHandle hHal, \param callbackRoutine - Callback routine to be deregistered \return eHalStatus eHAL_STATUS_SUCCESS - successfully deregistered - eHAL_STATUS_FAILURE - not successfully deregistered + eHAL_STATUS_FAILURE - not successfully deregistered ---------------------------------------------------------------------------*/ -eHalStatus pmcDeregisterDeviceStateUpdateInd (tHalHandle hHal, +eHalStatus pmcDeregisterDeviceStateUpdateInd (tHalHandle hHal, void (*callbackRoutine) (void *callbackContext, tPmcState pmcState)) { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); tListElem *pEntry; tpDeviceStateUpdateIndEntry pDeviceStateUpdateIndEntry; - pmcLog(pMac, LOG2, FL("Entering pmcDeregisterDeviceStateUpdateInd")); + smsLog(pMac, LOG2, FL("Entering pmcDeregisterDeviceStateUpdateInd")); /* Find entry in the power save update routine list that matches the specified routine and remove it. */ @@ -2080,12 +2089,12 @@ eHalStatus pmcDeregisterDeviceStateUpdateInd (tHalHandle hHal, { if (!csrLLRemoveEntry(&pMac->pmc.deviceStateUpdateIndList, pEntry, FALSE)) { - pmcLog(pMac, LOGE, FL("Cannot remove device state update ind entry from list")); + smsLog(pMac, LOGE, FL("Cannot remove device state update ind entry from list")); return eHAL_STATUS_FAILURE; } if (palFreeMemory(pMac->hHdd, pDeviceStateUpdateIndEntry) != eHAL_STATUS_SUCCESS) { - pmcLog(pMac, LOGE, FL("Cannot free memory for device state update ind routine list entry")); + smsLog(pMac, LOGE, FL("Cannot free memory for device state update ind routine list entry")); PMC_ABORT; return eHAL_STATUS_FAILURE; } @@ -2103,7 +2112,7 @@ eHalStatus pmcDeregisterDeviceStateUpdateInd (tHalHandle hHal, \brief fn to inform PMC that eWNI_SME_SYS_READY_IND has been sent to PE. This acts as a trigger to send a message to PE to update the power save related conig to FW. Note that if HDD configures any power save - related stuff before this API is invoked, PMC will buffer all the + related stuff before this API is invoked, PMC will buffer all the configutaion. \param hHal - The handle returned by macOpen. \return eHalStatus @@ -2112,11 +2121,11 @@ eHalStatus pmcReady(tHalHandle hHal) { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - pmcLog(pMac, LOG2, FL("Entering pmcReady")); + smsLog(pMac, LOG2, FL("Entering pmcReady")); if(pMac->pmc.pmcState == STOPPED) { - pmcLog(pMac, LOGP, FL("pmcReady is invoked even before pmcStart")); + smsLog(pMac, LOGP, FL("pmcReady is invoked even before pmcStart")); return eHAL_STATUS_FAILURE; } @@ -2133,16 +2142,16 @@ eHalStatus pmcReady(tHalHandle hHal) \fn pmcWowlAddBcastPattern \brief Add a pattern for Pattern Byte Matching in Wowl mode. Firmware will do a pattern match on these patterns when Wowl is enabled during BMPS - mode. Note that Firmware performs the pattern matching only on + mode. Note that Firmware performs the pattern matching only on broadcast frames and while Libra is in BMPS mode. \param hHal - The handle returned by macOpen. \param pattern - Pointer to the pattern to be added \return eHalStatus eHAL_STATUS_FAILURE Cannot add pattern - eHAL_STATUS_SUCCESS Request accepted. + eHAL_STATUS_SUCCESS Request accepted. ---------------------------------------------------------------------------*/ eHalStatus pmcWowlAddBcastPattern ( - tHalHandle hHal, + tHalHandle hHal, tpSirWowlAddBcastPtrn pattern, tANI_U8 sessionId) { @@ -2154,17 +2163,17 @@ eHalStatus pmcWowlAddBcastPattern ( WLAN_VOS_DIAG_LOG_ALLOC(log_ptr, vos_log_powersave_wow_add_ptrn_pkt_type, LOG_WLAN_POWERSAVE_WOW_ADD_PTRN_C); #endif //#ifdef FEATURE_WLAN_DIAG_SUPPORT - pmcLog(pMac, LOG2, "PMC: entering pmcWowlAddBcastPattern"); + smsLog(pMac, LOG2, "PMC: entering pmcWowlAddBcastPattern"); if(pattern == NULL) { - pmcLog(pMac, LOGE, FL("Null broadcast pattern being passed")); + smsLog(pMac, LOGE, FL("Null broadcast pattern being passed")); return eHAL_STATUS_FAILURE; } if( pSession == NULL) { - pmcLog(pMac, LOGE, FL("Session not found ")); + smsLog(pMac, LOGE, FL("Session not found ")); return eHAL_STATUS_FAILURE; } @@ -2187,13 +2196,13 @@ eHalStatus pmcWowlAddBcastPattern ( if(pattern->ucPatternId >= SIR_WOWL_BCAST_MAX_NUM_PATTERNS ) { - pmcLog(pMac, LOGE, FL("Pattern Id must range from 0 to %d"), SIR_WOWL_BCAST_MAX_NUM_PATTERNS-1); + smsLog(pMac, LOGE, FL("Pattern Id must range from 0 to %d"), SIR_WOWL_BCAST_MAX_NUM_PATTERNS-1); return eHAL_STATUS_FAILURE; } if( pMac->pmc.pmcState == STANDBY || pMac->pmc.pmcState == REQUEST_STANDBY ) { - pmcLog(pMac, LOGE, FL("Cannot add WoWL Pattern as chip is in %s state"), + smsLog(pMac, LOGE, FL("Cannot add WoWL Pattern as chip is in %s state"), pmcGetPmcStateStr(pMac->pmc.pmcState)); return eHAL_STATUS_FAILURE; } @@ -2202,14 +2211,14 @@ eHalStatus pmcWowlAddBcastPattern ( eHalStatus status; vos_mem_copy(pattern->bssId, pSession->connectedProfile.bssid, sizeof(tSirMacAddr)); //Wake up the chip first - status = pmcDeferMsg( pMac, eWNI_PMC_WOWL_ADD_BCAST_PTRN, + status = pmcDeferMsg( pMac, eWNI_PMC_WOWL_ADD_BCAST_PTRN, pattern, sizeof(tSirWowlAddBcastPtrn) ); if( eHAL_STATUS_PMC_PENDING == status ) { return eHAL_STATUS_SUCCESS; } - else + else { //either fail or already in full power if( !HAL_STATUS_SUCCESS( status ) ) @@ -2223,7 +2232,7 @@ eHalStatus pmcWowlAddBcastPattern ( if (pmcSendMessage(hHal, eWNI_PMC_WOWL_ADD_BCAST_PTRN, pattern, sizeof(tSirWowlAddBcastPtrn)) != eHAL_STATUS_SUCCESS) { - pmcLog(pMac, LOGE, FL("Send of eWNI_PMC_WOWL_ADD_BCAST_PTRN to PE failed")); + smsLog(pMac, LOGE, FL("Send of eWNI_PMC_WOWL_ADD_BCAST_PTRN to PE failed")); return eHAL_STATUS_FAILURE; } @@ -2237,44 +2246,44 @@ eHalStatus pmcWowlAddBcastPattern ( \param pattern - Pattern to be deleted \return eHalStatus eHAL_STATUS_FAILURE Cannot delete pattern - eHAL_STATUS_SUCCESS Request accepted. + eHAL_STATUS_SUCCESS Request accepted. ---------------------------------------------------------------------------*/ eHalStatus pmcWowlDelBcastPattern ( - tHalHandle hHal, + tHalHandle hHal, tpSirWowlDelBcastPtrn pattern, tANI_U8 sessionId) { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, sessionId ); -#ifdef FEATURE_WLAN_DIAG_SUPPORT +#ifdef FEATURE_WLAN_DIAG_SUPPORT WLAN_VOS_DIAG_EVENT_DEF(wowRequest, vos_event_wlan_powersave_wow_payload_type); vos_mem_zero(&wowRequest, sizeof(vos_event_wlan_powersave_wow_payload_type)); wowRequest.event_subtype = WLAN_WOW_DEL_PTRN_REQ; - wowRequest.wow_del_ptrn_id = pattern->ucPatternId; + wowRequest.wow_del_ptrn_id = pattern->ucPatternId; WLAN_VOS_DIAG_EVENT_REPORT(&wowRequest, EVENT_WLAN_POWERSAVE_WOW); #endif - pmcLog(pMac, LOG2, "PMC: entering pmcWowlDelBcastPattern"); + smsLog(pMac, LOG2, "PMC: entering pmcWowlDelBcastPattern"); if( NULL == pSession ) { - pmcLog(pMac, LOGE, FL("Session not found ")); + smsLog(pMac, LOGE, FL("Session not found ")); return eHAL_STATUS_FAILURE; } if(pattern->ucPatternId >= SIR_WOWL_BCAST_MAX_NUM_PATTERNS ) { - pmcLog(pMac, LOGE, FL("Pattern Id must range from 0 to %d"), + smsLog(pMac, LOGE, FL("Pattern Id must range from 0 to %d"), SIR_WOWL_BCAST_MAX_NUM_PATTERNS-1); return eHAL_STATUS_FAILURE; } if(pMac->pmc.pmcState == STANDBY || pMac->pmc.pmcState == REQUEST_STANDBY) { - pmcLog(pMac, LOGE, FL("Cannot delete WoWL Pattern as chip is in %s state"), + smsLog(pMac, LOGE, FL("Cannot delete WoWL Pattern as chip is in %s state"), pmcGetPmcStateStr(pMac->pmc.pmcState)); return eHAL_STATUS_FAILURE; } @@ -2285,14 +2294,14 @@ eHalStatus pmcWowlDelBcastPattern ( vos_mem_copy(pattern->bssId, pSession->connectedProfile.bssid, sizeof(tSirMacAddr)); //Wake up the chip first - status = pmcDeferMsg( pMac, eWNI_PMC_WOWL_DEL_BCAST_PTRN, + status = pmcDeferMsg( pMac, eWNI_PMC_WOWL_DEL_BCAST_PTRN, pattern, sizeof(tSirWowlDelBcastPtrn) ); if( eHAL_STATUS_PMC_PENDING == status ) { return eHAL_STATUS_SUCCESS; } - else + else { //either fail or already in full power if( !HAL_STATUS_SUCCESS( status ) ) @@ -2306,7 +2315,7 @@ eHalStatus pmcWowlDelBcastPattern ( if (pmcSendMessage(hHal, eWNI_PMC_WOWL_DEL_BCAST_PTRN, pattern, sizeof(tSirWowlDelBcastPtrn)) != eHAL_STATUS_SUCCESS) { - pmcLog(pMac, LOGE, FL("Send of eWNI_PMC_WOWL_DEL_BCAST_PTRN to PE failed")); + smsLog(pMac, LOGE, FL("Send of eWNI_PMC_WOWL_DEL_BCAST_PTRN to PE failed")); return eHAL_STATUS_FAILURE; } @@ -2319,20 +2328,20 @@ eHalStatus pmcWowlDelBcastPattern ( Note 1: If "fullPowerReason" specificied in this API is set to eSME_FULL_PWR_NEEDED_BY_HDD, PMC will clear any "buffered wowl" requests and also clear any "buffered BMPS requests by HDD". Assumption is that since - HDD is requesting full power, we need to undo any previous HDD requests for + HDD is requesting full power, we need to undo any previous HDD requests for BMPS (using sme_RequestBmps) or WoWL (using sme_EnterWoWL). If the reason is specified anything other than above, the buffered requests for BMPS and WoWL will not be cleared. Note 2: Requesting full power (no matter what the fullPowerReason is) doesn't disable the "auto bmps timer" (if it is enabled) or clear any "buffered uapsd request". - Note 3: When the device finally enters Full Power PMC will start a timer + Note 3: When the device finally enters Full Power PMC will start a timer if any of the following holds true: - Auto BMPS mode is enabled - Uapsd request is pending - HDD's request for BMPS is pending - HDD's request for WoWL is pending - On timer expiry PMC will attempt to put the device in BMPS mode if following + On timer expiry PMC will attempt to put the device in BMPS mode if following (in addition to those listed above) holds true: - Polling of all modules through the Power Save Check routine passes - STA is associated to an access point @@ -2343,13 +2352,13 @@ eHalStatus pmcWowlDelBcastPattern ( \param - wakeReasonIndCBContext - Cookie to be passed back during callback \param - fullPowerReason - Reason why this API is being invoked. SME needs to distinguish between BAP and HDD requests - \return eHalStatus - status + \return eHalStatus - status eHAL_STATUS_SUCCESS - device brought to full power state eHAL_STATUS_FAILURE - device cannot be brought to full power state eHAL_STATUS_PMC_PENDING - device is being brought to full power state, ---------------------------------------------------------------------------*/ -eHalStatus pmcEnterWowl ( - tHalHandle hHal, +eHalStatus pmcEnterWowl ( + tHalHandle hHal, void (*enterWowlCallbackRoutine) (void *callbackContext, eHalStatus status), void *enterWowlCallbackContext, #ifdef WLAN_WAKEUP_EVENTS @@ -2361,7 +2370,7 @@ eHalStatus pmcEnterWowl ( tpAniSirGlobal pMac = PMAC_STRUCT(hHal); tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, sessionId ); -#ifdef FEATURE_WLAN_DIAG_SUPPORT +#ifdef FEATURE_WLAN_DIAG_SUPPORT WLAN_VOS_DIAG_EVENT_DEF(wowRequest, vos_event_wlan_powersave_wow_payload_type); vos_mem_zero(&wowRequest, sizeof(vos_event_wlan_powersave_wow_payload_type)); @@ -2381,21 +2390,21 @@ eHalStatus pmcEnterWowl ( WLAN_VOS_DIAG_EVENT_REPORT(&wowRequest, EVENT_WLAN_POWERSAVE_WOW); #endif - pmcLog(pMac, LOG2, FL("PMC: entering pmcEnterWowl")); + smsLog(pMac, LOG2, FL("PMC: entering pmcEnterWowl")); if( NULL == pSession ) { - pmcLog(pMac, LOGE, FL("Session not found ")); + smsLog(pMac, LOGE, FL("Session not found ")); return eHAL_STATUS_FAILURE; } - vos_mem_copy(wowlEnterParams->bssId, pSession->connectedProfile.bssid, + vos_mem_copy(wowlEnterParams->bssId, pSession->connectedProfile.bssid, sizeof(tSirMacAddr)); if( !PMC_IS_READY(pMac) ) { - pmcLog(pMac, LOGE, FL("Requesting WoWL when PMC not ready")); - pmcLog(pMac, LOGE, FL("pmcReady = %d pmcState = %s"), + smsLog(pMac, LOGE, FL("Requesting WoWL when PMC not ready")); + smsLog(pMac, LOGE, FL("pmcReady = %d pmcState = %s"), pMac->pmc.pmcReady, pmcGetPmcStateStr(pMac->pmc.pmcState)); return eHAL_STATUS_FAILURE; } @@ -2403,21 +2412,21 @@ eHalStatus pmcEnterWowl ( /* Check if BMPS is enabled. */ if (!pMac->pmc.bmpsEnabled) { - pmcLog(pMac, LOGE, "PMC: Cannot enter WoWL. BMPS is disabled"); + smsLog(pMac, LOGE, "PMC: Cannot enter WoWL. BMPS is disabled"); return eHAL_STATUS_PMC_DISABLED; } /* Check if WoWL is enabled. */ if (!pMac->pmc.wowlEnabled) { - pmcLog(pMac, LOGE, "PMC: Cannot enter WoWL. WoWL is disabled"); + smsLog(pMac, LOGE, "PMC: Cannot enter WoWL. WoWL is disabled"); return eHAL_STATUS_PMC_DISABLED; } /* Check that we are associated with single Session. */ if (!pmcValidateConnectState( pMac )) { - pmcLog(pMac, LOGE, "PMC: Cannot enable WOWL. STA not associated " + smsLog(pMac, LOGE, "PMC: Cannot enable WOWL. STA not associated " "with an Access Point in Infra Mode with single active session"); return eHAL_STATUS_FAILURE; } @@ -2426,14 +2435,14 @@ eHalStatus pmcEnterWowl ( module to do the necessary cleanup before triggring WOWL*/ if(pMac->pmc.uapsdSessionRequired) { - pmcLog(pMac, LOGE, "PMC: Cannot request WOWL. Pending UAPSD request"); + smsLog(pMac, LOGE, "PMC: Cannot request WOWL. Pending UAPSD request"); return eHAL_STATUS_FAILURE; } /* Check that entry into a power save mode is allowed at this time. */ if (pMac->pmc.pmcState == FULL_POWER && !pmcPowerSaveCheck(hHal)) { - pmcLog(pMac, LOGE, "PMC: Power save check failed. WOWL request " + smsLog(pMac, LOGE, "PMC: Power save check failed. WOWL request " "will not be accepted"); return eHAL_STATUS_FAILURE; } @@ -2460,19 +2469,19 @@ eHalStatus pmcEnterWowl ( /* --------------------------------------------------------------------------- \fn pmcExitWowl - \brief This is the SME API exposed to HDD to request exit from WoWLAN mode. - SME will initiate exit from WoWLAN mode and device will be put in BMPS + \brief This is the SME API exposed to HDD to request exit from WoWLAN mode. + SME will initiate exit from WoWLAN mode and device will be put in BMPS mode. \param hHal - The handle returned by macOpen. \return eHalStatus eHAL_STATUS_FAILURE Device cannot exit WoWLAN mode. - eHAL_STATUS_SUCCESS Request accepted to exit WoWLAN mode. + eHAL_STATUS_SUCCESS Request accepted to exit WoWLAN mode. ---------------------------------------------------------------------------*/ eHalStatus pmcExitWowl (tHalHandle hHal) { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); -#ifdef FEATURE_WLAN_DIAG_SUPPORT +#ifdef FEATURE_WLAN_DIAG_SUPPORT WLAN_VOS_DIAG_EVENT_DEF(wowRequest, vos_event_wlan_powersave_wow_payload_type); vos_mem_zero(&wowRequest, sizeof(vos_event_wlan_powersave_wow_payload_type)); @@ -2481,7 +2490,7 @@ eHalStatus pmcExitWowl (tHalHandle hHal) WLAN_VOS_DIAG_EVENT_REPORT(&wowRequest, EVENT_WLAN_POWERSAVE_WOW); #endif - pmcLog(pMac, LOG2, "PMC: entering pmcExitWowl"); + smsLog(pMac, LOG2, "PMC: entering pmcExitWowl"); /* Clear any buffered command for entering WOWL */ pMac->pmc.wowlModeRequired = FALSE; @@ -2506,9 +2515,9 @@ eHalStatus pmcExitWowl (tHalHandle hHal) \param pRequest - Pointer to the offload request. \return eHalStatus eHAL_STATUS_FAILURE Cannot set the offload. - eHAL_STATUS_SUCCESS Request accepted. + eHAL_STATUS_SUCCESS Request accepted. ---------------------------------------------------------------------------*/ -eHalStatus pmcSetHostOffload (tHalHandle hHal, tpSirHostOffloadReq pRequest, +eHalStatus pmcSetHostOffload (tHalHandle hHal, tpSirHostOffloadReq pRequest, tANI_U8 sessionId) { tpSirHostOffloadReq pRequestBuf; @@ -2557,7 +2566,7 @@ eHalStatus pmcSetHostOffload (tHalHandle hHal, tpSirHostOffloadReq pRequest, \param pRequest - Pointer to the Keep Alive. \return eHalStatus eHAL_STATUS_FAILURE Cannot set the keepalive. - eHAL_STATUS_SUCCESS Request accepted. + eHAL_STATUS_SUCCESS Request accepted. ---------------------------------------------------------------------------*/ eHalStatus pmcSetKeepAlive (tHalHandle hHal, tpSirKeepAliveReq pRequest, tANI_U8 sessionId) { @@ -2615,23 +2624,24 @@ eHalStatus pmcSetKeepAlive (tHalHandle hHal, tpSirKeepAliveReq pRequest, tANI_U8 \param pRequest - Pointer to the offload request. \return eHalStatus eHAL_STATUS_FAILURE Cannot set the offload. - eHAL_STATUS_SUCCESS Request accepted. + eHAL_STATUS_SUCCESS Request accepted. ---------------------------------------------------------------------------*/ -eHalStatus pmcSetNSOffload (tHalHandle hHal, tpSirHostOffloadReq pRequest, +eHalStatus pmcSetNSOffload (tHalHandle hHal, tpSirHostOffloadReq pRequest, tANI_U8 sessionId) { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); tpSirHostOffloadReq pRequestBuf; vos_msg_t msg; + int i; tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, sessionId ); if( NULL == pSession ) { - pmcLog(pMac, LOGE, FL("Session not found ")); + smsLog(pMac, LOGE, FL("Session not found ")); return eHAL_STATUS_FAILURE; } - vos_mem_copy(pRequest->bssId, pSession->connectedProfile.bssid, + vos_mem_copy(pRequest->bssId, pSession->connectedProfile.bssid, sizeof(tSirMacAddr)); pRequestBuf = vos_mem_malloc(sizeof(tSirHostOffloadReq)); @@ -2669,7 +2679,7 @@ void pmcClosePowerSaveCheckList(tpAniSirGlobal pMac) pPowerSaveCheckEntry = GET_BASE_ADDR(pEntry, tPowerSaveCheckEntry, link); if (palFreeMemory(pMac->hHdd, pPowerSaveCheckEntry) != eHAL_STATUS_SUCCESS) { - pmcLog(pMac, LOGE, FL("Cannot free memory ")); + smsLog(pMac, LOGE, FL("Cannot free memory ")); PMC_ABORT; break; } @@ -2690,7 +2700,7 @@ void pmcCloseRequestFullPowerList(tpAniSirGlobal pMac) pRequestFullPowerEntry = GET_BASE_ADDR(pEntry, tRequestFullPowerEntry, link); if (palFreeMemory(pMac->hHdd, pRequestFullPowerEntry) != eHAL_STATUS_SUCCESS) { - pmcLog(pMac, LOGE, FL("Cannot free memory ")); + smsLog(pMac, LOGE, FL("Cannot free memory ")); PMC_ABORT; break; } @@ -2711,7 +2721,7 @@ void pmcCloseRequestBmpsList(tpAniSirGlobal pMac) pRequestBmpsEntry = GET_BASE_ADDR(pEntry, tRequestBmpsEntry, link); if (palFreeMemory(pMac->hHdd, pRequestBmpsEntry) != eHAL_STATUS_SUCCESS) { - pmcLog(pMac, LOGE, FL("Cannot free memory ")); + smsLog(pMac, LOGE, FL("Cannot free memory ")); PMC_ABORT; break; } @@ -2732,7 +2742,7 @@ void pmcCloseRequestStartUapsdList(tpAniSirGlobal pMac) pStartUapsdEntry = GET_BASE_ADDR(pEntry, tStartUapsdEntry, link); if (palFreeMemory(pMac->hHdd, pStartUapsdEntry) != eHAL_STATUS_SUCCESS) { - pmcLog(pMac, LOGE, FL("Cannot free memory ")); + smsLog(pMac, LOGE, FL("Cannot free memory ")); PMC_ABORT; break; } @@ -2753,7 +2763,7 @@ void pmcCloseDeviceStateUpdateList(tpAniSirGlobal pMac) pDeviceStateUpdateIndEntry = GET_BASE_ADDR(pEntry, tDeviceStateUpdateIndEntry, link); if (palFreeMemory(pMac->hHdd, pDeviceStateUpdateIndEntry) != eHAL_STATUS_SUCCESS) { - pmcLog(pMac, LOGE, FL("Cannot free memory ")); + smsLog(pMac, LOGE, FL("Cannot free memory ")); PMC_ABORT; break; } @@ -2774,7 +2784,7 @@ void pmcCloseDeferredMsgList(tpAniSirGlobal pMac) pDeferredMsg = GET_BASE_ADDR(pEntry, tPmcDeferredMsg, link); if (palFreeMemory(pMac->hHdd, pDeferredMsg) != eHAL_STATUS_SUCCESS) { - pmcLog(pMac, LOGE, FL("Cannot free memory ")); + smsLog(pMac, LOGE, FL("Cannot free memory ")); PMC_ABORT; break; } @@ -2786,7 +2796,7 @@ void pmcCloseDeferredMsgList(tpAniSirGlobal pMac) #ifdef FEATURE_WLAN_SCAN_PNO -static tSirRetStatus +static tSirRetStatus pmcPopulateMacHeader( tpAniSirGlobal pMac, tANI_U8* pBD, tANI_U8 type, @@ -2796,7 +2806,7 @@ pmcPopulateMacHeader( tpAniSirGlobal pMac, { tSirRetStatus statusCode = eSIR_SUCCESS; tpSirMacMgmtHdr pMacHdr; - + /// Prepare MAC management header pMacHdr = (tpSirMacMgmtHdr) (pBD); @@ -2849,12 +2859,12 @@ pmcPrepareProbeReqTemplate(tpAniSirGlobal pMac, PopulateDot11fExtSuppRates1( pMac, nChannelNum, &pr.ExtSuppRates ); } - + if (IS_DOT11_MODE_HT(dot11mode)) { PopulateDot11fHTCaps( pMac, NULL, &pr.HTCaps ); } - + // That's it-- now we pack it. First, how much space are we going to // need? nStatus = dot11fGetPackedProbeRequestSize( pMac, &pr, &nPayload ); @@ -2876,7 +2886,7 @@ pmcPrepareProbeReqTemplate(tpAniSirGlobal pMac, } nBytes = nPayload + sizeof( tSirMacMgmtHdr ); - + /* Prepare outgoing frame*/ palZeroMemory( pMac->hHdd, pFrame, nBytes ); @@ -2904,21 +2914,21 @@ pmcPrepareProbeReqTemplate(tpAniSirGlobal pMac, } else if ( DOT11F_WARNED( nStatus ) ) { - VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "There were warnings while packing a Probe Request" ); } - *pusLen = nPayload + sizeof(tSirMacMgmtHdr); + *pusLen = nPayload + sizeof(tSirMacMgmtHdr); return eSIR_SUCCESS; } // End pmcPrepareProbeReqTemplate. eHalStatus pmcSetPreferredNetworkList ( - tHalHandle hHal, - tpSirPNOScanReq pRequest, - tANI_U8 sessionId, - preferredNetworkFoundIndCallback callbackRoutine, + tHalHandle hHal, + tpSirPNOScanReq pRequest, + tANI_U8 sessionId, + preferredNetworkFoundIndCallback callbackRoutine, void *callbackContext ) { @@ -2959,11 +2969,11 @@ eHalStatus pmcSetPreferredNetworkList vos_mem_copy(pRequestBuf, pRequest, sizeof(tSirPNOScanReq)); /*Must translate the mode first*/ - ucDot11Mode = (tANI_U8) csrTranslateToWNICfgDot11Mode(pMac, + ucDot11Mode = (tANI_U8) csrTranslateToWNICfgDot11Mode(pMac, csrFindBestPhyMode( pMac, pMac->roam.configParam.phyMode )); /*Prepare a probe request for 2.4GHz band and one for 5GHz band*/ - if (eSIR_SUCCESS == pmcPrepareProbeReqTemplate(pMac, SIR_PNO_24G_DEFAULT_CH, + if (eSIR_SUCCESS == pmcPrepareProbeReqTemplate(pMac, SIR_PNO_24G_DEFAULT_CH, ucDot11Mode, pSession->selfMacAddr, pRequestBuf->p24GProbeTemplate, &pRequestBuf->us24GProbeTemplateLen)) @@ -3051,7 +3061,7 @@ eHalStatus pmcSetRssiFilter(tHalHandle hHal, v_U8_t rssiThreshold) } - pRequestBuf->rssiThreshold = rssiThreshold; + pRequestBuf->rssiThreshold = rssiThreshold; msg.type = WDA_SET_RSSI_FILTER_REQ; msg.reserved = 0; @@ -3082,18 +3092,18 @@ eHalStatus pmcUpdateScanParams(tHalHandle hHal, tCsrConfig *pRequest, tCsrChanne return eHAL_STATUS_FAILED_ALLOC; } - // + // // Fill pRequestBuf structure from pRequest // pRequestBuf->b11dEnabled = pRequest->Is11eSupportEnabled; pRequestBuf->b11dResolved = b11dResolved; - pRequestBuf->ucChannelCount = + pRequestBuf->ucChannelCount = ( pChannelList->numChannels < SIR_PNO_MAX_NETW_CHANNELS_EX )? pChannelList->numChannels:SIR_PNO_MAX_NETW_CHANNELS_EX; for (i=0; i < pRequestBuf->ucChannelCount; i++) - { - VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, + { + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, "%s: Channel List %d: %d", __FUNCTION__, i, pChannelList->channelList[i] ); pRequestBuf->aChannels[i] = pChannelList->channelList[i]; @@ -3101,7 +3111,7 @@ eHalStatus pmcUpdateScanParams(tHalHandle hHal, tCsrConfig *pRequest, tCsrChanne pRequestBuf->usPassiveMinChTime = pRequest->nPassiveMinChnTime; pRequestBuf->usPassiveMaxChTime = pRequest->nPassiveMaxChnTime; pRequestBuf->usActiveMinChTime = pRequest->nActiveMinChnTime; - pRequestBuf->usActiveMaxChTime = pRequest->nActiveMaxChnTime; + pRequestBuf->usActiveMaxChTime = pRequest->nActiveMaxChnTime; pRequestBuf->ucCBState = PHY_SINGLE_CHANNEL_CENTERED; msg.type = WDA_UPDATE_SCAN_PARAMS_REQ; @@ -3139,7 +3149,7 @@ eHalStatus pmcSetPowerParams(tHalHandle hHal, tSirSetPowerParamsReq* pwParams } - vos_mem_copy(pRequestBuf, pwParams, sizeof(*pRequestBuf)); + vos_mem_copy(pRequestBuf, pwParams, sizeof(*pRequestBuf)); msg.type = WDA_SET_POWER_PARAMS_REQ; @@ -3159,8 +3169,8 @@ eHalStatus pmcSetPowerParams(tHalHandle hHal, tSirSetPowerParamsReq* pwParams #ifdef WLAN_FEATURE_PACKET_FILTERING eHalStatus pmcGetFilterMatchCount ( - tHalHandle hHal, - FilterMatchCountCallback callbackRoutine, + tHalHandle hHal, + FilterMatchCountCallback callbackRoutine, void *callbackContext, tANI_U8 sessionId ) @@ -3170,7 +3180,7 @@ eHalStatus pmcGetFilterMatchCount tpAniSirGlobal pMac = PMAC_STRUCT(hHal); tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, sessionId ); - VOS_TRACE( VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, + VOS_TRACE( VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, "%s", __func__); if(NULL == pSession ) @@ -3189,7 +3199,7 @@ eHalStatus pmcGetFilterMatchCount return eHAL_STATUS_FAILED_ALLOC; } - vos_mem_copy(pRequestBuf->bssId, pSession->connectedProfile.bssid, sizeof(tSirMacAddr)); + vos_mem_copy(pRequestBuf->bssId, pSession->connectedProfile.bssid, sizeof(tSirMacAddr)); msg.type = WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ; msg.reserved = 0; @@ -3198,9 +3208,9 @@ eHalStatus pmcGetFilterMatchCount /* Cache the Packet Coalescing Filter Match Count callback information */ if (NULL != pMac->pmc.FilterMatchCountCB) { - // Do we need to check if the callback is in use? + // Do we need to check if the callback is in use? // Because we are not sending the same message again when it is pending, - // the only case when the callback is not NULL is that the previous message + // the only case when the callback is not NULL is that the previous message //was timed out or failed. // So, it will be safe to set the callback in this case. } @@ -3210,7 +3220,7 @@ eHalStatus pmcGetFilterMatchCount if(VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MODULE_ID_WDA, &msg)) { - VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "%s: Not able to post WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ " "message to WDA", __func__); vos_mem_free(pRequestBuf); @@ -3229,9 +3239,9 @@ eHalStatus pmcGetFilterMatchCount \param pGtkOffload - Pointer to the GTK offload request. \return eHalStatus eHAL_STATUS_FAILURE Cannot set the offload. - eHAL_STATUS_SUCCESS Request accepted. + eHAL_STATUS_SUCCESS Request accepted. ---------------------------------------------------------------------------*/ -eHalStatus pmcSetGTKOffload (tHalHandle hHal, tpSirGtkOffloadParams pGtkOffload, +eHalStatus pmcSetGTKOffload (tHalHandle hHal, tpSirGtkOffloadParams pGtkOffload, tANI_U8 sessionId) { tpSirGtkOffloadParams pRequestBuf; @@ -3239,7 +3249,7 @@ eHalStatus pmcSetGTKOffload (tHalHandle hHal, tpSirGtkOffloadParams pGtkOffload, tpAniSirGlobal pMac = PMAC_STRUCT(hHal); tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, sessionId ); - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "%s: KeyReplayCounter: %d", + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "%s: KeyReplayCounter: %d", __func__, pGtkOffload->ullKeyReplayCounter); if(NULL == pSession ) @@ -3257,7 +3267,7 @@ eHalStatus pmcSetGTKOffload (tHalHandle hHal, tpSirGtkOffloadParams pGtkOffload, return eHAL_STATUS_FAILED_ALLOC; } - vos_mem_copy(pGtkOffload->bssId, pSession->connectedProfile.bssid, sizeof(tSirMacAddr)); + vos_mem_copy(pGtkOffload->bssId, pSession->connectedProfile.bssid, sizeof(tSirMacAddr)); vos_mem_copy(pRequestBuf, pGtkOffload, sizeof(tSirGtkOffloadParams)); @@ -3282,9 +3292,9 @@ eHalStatus pmcSetGTKOffload (tHalHandle hHal, tpSirGtkOffloadParams pGtkOffload, \param callbackRoutine - Pointer to the GTK Offload Get Info response callback routine. \return eHalStatus eHAL_STATUS_FAILURE Cannot set the offload. - eHAL_STATUS_SUCCESS Request accepted. + eHAL_STATUS_SUCCESS Request accepted. ---------------------------------------------------------------------------*/ -eHalStatus pmcGetGTKOffload(tHalHandle hHal, GTKOffloadGetInfoCallback callbackRoutine, +eHalStatus pmcGetGTKOffload(tHalHandle hHal, GTKOffloadGetInfoCallback callbackRoutine, void *callbackContext, tANI_U8 sessionId) { tpSirGtkOffloadGetInfoRspParams pRequestBuf; @@ -3292,12 +3302,12 @@ eHalStatus pmcGetGTKOffload(tHalHandle hHal, GTKOffloadGetInfoCallback callbackR tpAniSirGlobal pMac = PMAC_STRUCT(hHal); tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, sessionId ); - VOS_TRACE( VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, "%s: filterId = %d", + VOS_TRACE( VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, "%s: filterId = %d", __func__); if(NULL == pSession ) { - VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "%s: Session not found ", __func__); return eHAL_STATUS_FAILURE; } @@ -3311,7 +3321,7 @@ eHalStatus pmcGetGTKOffload(tHalHandle hHal, GTKOffloadGetInfoCallback callbackR return eHAL_STATUS_FAILED_ALLOC; } - vos_mem_copy(pRequestBuf->bssId, pSession->connectedProfile.bssid, sizeof(tSirMacAddr)); + vos_mem_copy(pRequestBuf->bssId, pSession->connectedProfile.bssid, sizeof(tSirMacAddr)); msg.type = WDA_GTK_OFFLOAD_GETINFO_REQ; msg.reserved = 0; @@ -3320,7 +3330,7 @@ eHalStatus pmcGetGTKOffload(tHalHandle hHal, GTKOffloadGetInfoCallback callbackR /* Cache the Get GTK Offload callback information */ if (NULL != pMac->pmc.GtkOffloadGetInfoCB) { - // Do we need to check if the callback is in use? + // Do we need to check if the callback is in use? // Because we are not sending the same message again when it is pending, // the only case when the callback is not NULL is that the previous message was timed out or failed. // So, it will be safe to set the callback in this case. @@ -3331,7 +3341,7 @@ eHalStatus pmcGetGTKOffload(tHalHandle hHal, GTKOffloadGetInfoCallback callbackR if (!VOS_IS_STATUS_SUCCESS(vos_mq_post_message(VOS_MODULE_ID_WDA, &msg))) { - VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "%s: Not able to post WDA_GTK_OFFLOAD_GETINFO_REQ message to WDA", + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "%s: Not able to post WDA_GTK_OFFLOAD_GETINFO_REQ message to WDA", __func__); vos_mem_free(pRequestBuf); return eHAL_STATUS_FAILURE; diff --git a/drivers/staging/prima/CORE/SME/src/pmc/pmcLogDump.c b/drivers/staging/prima/CORE/SME/src/pmc/pmcLogDump.c index 4248dd0ae07..dc97a31d5b2 100644 --- a/drivers/staging/prima/CORE/SME/src/pmc/pmcLogDump.c +++ b/drivers/staging/prima/CORE/SME/src/pmc/pmcLogDump.c @@ -65,21 +65,21 @@ void dump_pmc_callbackRoutine (void *callbackContext, eHalStatus status) { tpAniSirGlobal pMac = (tpAniSirGlobal)callbackContext; - pmcLog(pMac, LOGW, "*********Received callback from PMC with status = %d\n*********",status); + smsLog(pMac, LOGW, "*********Received callback from PMC with status = %d\n*********",status); } #ifdef WLAN_WAKEUP_EVENTS void dump_pmc_callbackRoutine2 (void *callbackContext, tpSirWakeReasonInd pWakeReasonInd) { tpAniSirGlobal pMac = (tpAniSirGlobal)callbackContext; - pmcLog(pMac, LOGW, "*********Received callback from PMC with reason = %d\n*********",pWakeReasonInd->ulReason); + smsLog(pMac, LOGW, "*********Received callback from PMC with reason = %d\n*********",pWakeReasonInd->ulReason); } #endif // WLAN_WAKEUP_EVENTS void dump_pmc_deviceUpdateRoutine (void *callbackContext, tPmcState pmcState) { tpAniSirGlobal pMac = (tpAniSirGlobal)callbackContext; - pmcLog(pMac, LOGW, "*********Received msg from PMC: Device is in %s state\n*********", pmcGetPmcStateStr(pmcState)); + smsLog(pMac, LOGW, "*********Received msg from PMC: Device is in %s state\n*********", pmcGetPmcStateStr(pmcState)); } static char * @@ -103,7 +103,7 @@ dump_pmc_state( tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3 p += log_sprintf( pMac,p, " PMC: UapsdSessionRequired = %d\n", pMac->pmc.uapsdSessionRequired); p += log_sprintf( pMac,p, " PMC: wowlModeRequired = %d\n\n", pMac->pmc.wowlModeRequired); - pmcLog(pMac, LOGW, "\n%s", ptr); + smsLog(pMac, LOGW, "\n%s", ptr); return p; } @@ -240,8 +240,7 @@ dump_pmc_enter_wowl( tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, tANI_U32 if (arg1 == 0 && arg2 == 0) { - pmcLog(pMac, LOGE, - "Requesting WoWL but neither magic pkt and ptrn byte matching is being enabled\n"); + smsLog(pMac, LOGE, "Requesting WoWL but neither magic pkt and ptrn byte matching is being enabled\n"); return p; } if(arg1 == 1) @@ -252,8 +251,7 @@ dump_pmc_enter_wowl( tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, tANI_U32 status = wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8 *)wowlEnterParams.magicPtrn, &length); if (eSIR_SUCCESS != status) { - pmcLog(pMac, LOGE, - "Reading of WNI_CFG_STA_ID from CFG failed. Using hardcoded STA MAC Addr\n"); + smsLog(pMac, LOGE, "Reading of WNI_CFG_STA_ID from CFG failed. Using hardcoded STA MAC Addr\n"); wowlEnterParams.magicPtrn[0] = 0x00; wowlEnterParams.magicPtrn[1] = 0x0a; wowlEnterParams.magicPtrn[2] = 0xf5; @@ -269,7 +267,7 @@ dump_pmc_enter_wowl( tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, tANI_U32 if(arg3 == CSR_ROAM_SESSION_MAX ) { - pmcLog(pMac, LOGE, "Enter valid sessionId\n"); + smsLog(pMac, LOGE, "Enter valid sessionId\n"); return p; } pMac->pmc.bmpsEnabled = TRUE; @@ -308,7 +306,7 @@ dump_pmc_remove_ptrn( tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, tANI_U3 } else { - pmcLog(pMac, LOGE, "dump_pmc_remove_ptrn: Invalid pattern Id %d\n",arg1); + smsLog(pMac, LOGE, "dump_pmc_remove_ptrn: Invalid pattern Id %d\n",arg1); return p; } @@ -358,7 +356,7 @@ dump_pmc_test_Wowl( tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, tANI_U32 if(arg1 == CSR_ROAM_SESSION_MAX) { - pmcLog(pMac, LOGE, "dump_pmc_test_Wowl: Invalid sessionId\n"); + smsLog(pMac, LOGE, "dump_pmc_test_Wowl: Invalid sessionId\n"); return p; } diff --git a/drivers/staging/prima/CORE/SME/src/rrm/sme_rrm.c b/drivers/staging/prima/CORE/SME/src/rrm/sme_rrm.c index 975ded8e2d3..c1934809d30 100644 --- a/drivers/staging/prima/CORE/SME/src/rrm/sme_rrm.c +++ b/drivers/staging/prima/CORE/SME/src/rrm/sme_rrm.c @@ -186,10 +186,7 @@ void rrmIndicateNeighborReportResult(tpAniSirGlobal pMac, VOS_STATUS vosStatus) \return - 0 for success, non zero for failure --------------------------------------------------------------------------*/ -static eHalStatus sme_RrmSendBeaconReportXmitInd( tpAniSirGlobal pMac, - tCsrScanResultInfo **pResultArr, - tANI_U8 measurementDone, - tANI_U8 bss_count ) +static eHalStatus sme_RrmSendBeaconReportXmitInd( tpAniSirGlobal pMac, tCsrScanResultInfo **pResultArr, tANI_U8 measurementDone ) { tpSirBssDescription pBssDesc = NULL; tpSirBeaconReportXmitInd pBeaconRep; @@ -237,62 +234,35 @@ static eHalStatus sme_RrmSendBeaconReportXmitInd( tpAniSirGlobal pMac, while (pCurResult) { pBssDesc = &pCurResult->BssDescriptor; - if(pBssDesc != NULL) - { - ie_len = GET_IE_LEN_IN_BSS( pBssDesc->length ); - pBeaconRep->pBssDescription[msgCounter] = vos_mem_malloc ( - ie_len+sizeof(tSirBssDescription)); - if (NULL == pBeaconRep->pBssDescription[msgCounter]) - break; - vos_mem_copy( pBeaconRep->pBssDescription[msgCounter], - pBssDesc, - sizeof(tSirBssDescription) ); - vos_mem_copy( &pBeaconRep->pBssDescription[msgCounter]->ieFields[0], - pBssDesc->ieFields, ie_len ); - smsLog( pMac, LOG1, - "...RRM Result Bssid = %02x-%02x-%02x-%02x-%02x-%02x chan= %d, rssi = -%d", - pBeaconRep->pBssDescription[msgCounter]->bssId[ 0 ], - pBeaconRep->pBssDescription[msgCounter]->bssId[ 1 ], - pBeaconRep->pBssDescription[msgCounter]->bssId[ 2 ], - pBeaconRep->pBssDescription[msgCounter]->bssId[ 3 ], - pBeaconRep->pBssDescription[msgCounter]->bssId[ 4 ], - pBeaconRep->pBssDescription[msgCounter]->bssId[ 5 ], - pBeaconRep->pBssDescription[msgCounter]->channelId, - pBeaconRep->pBssDescription[msgCounter]->rssi * (-1)); - - pBeaconRep->numBssDesc++; - - if (++msgCounter >= SIR_BCN_REPORT_MAX_BSS_DESC_PER_ACTION_FRAME) - break; - - pCurResult = pResultArr[bssCounter + msgCounter]; - } - else - { - pCurResult = NULL; + ie_len = GET_IE_LEN_IN_BSS( pBssDesc->length ); + pBeaconRep->pBssDescription[msgCounter] = vos_mem_malloc ( ie_len+sizeof(tSirBssDescription) ); + if (NULL == pBeaconRep->pBssDescription[msgCounter]) + break; + vos_mem_copy( pBeaconRep->pBssDescription[msgCounter], pBssDesc, sizeof(tSirBssDescription) ); + vos_mem_copy( &pBeaconRep->pBssDescription[msgCounter]->ieFields[0], pBssDesc->ieFields, ie_len ); + + pBeaconRep->numBssDesc++; + + if (++msgCounter >= SIR_BCN_REPORT_MAX_BSS_DESC) + break; + + if (csrRoamIs11rAssoc(pMac)) { break; } + + pCurResult = pResultArr[msgCounter]; } bssCounter+=msgCounter; - if (!pResultArr || (pCurResult == NULL) || (bssCounter >= bss_count)) - { - pCurResult = NULL; - smsLog(pMac, LOG1, - "Reached to the max/last BSS in pCurResult list"); - } + if (!pResultArr || !pCurResult || (bssCounter>=SIR_BCN_REPORT_MAX_BSS_DESC)) + pCurResult = NULL; else - { - pCurResult = pResultArr[bssCounter]; - smsLog(pMac, LOG1, - "Move to the next BSS set in pCurResult list"); - } + pCurResult = pResultArr[bssCounter]; pBeaconRep->fMeasureDone = (pCurResult)?false:measurementDone; - smsLog(pMac, LOG1, - "SME Sending BcnRepXmit to PE numBss %d msgCounter %d bssCounter %d", - pBeaconRep->numBssDesc, msgCounter, bssCounter); + smsLog(pMac, LOGW, "SME Sending BcnRepXmit to PE numBss %d", + pBeaconRep->numBssDesc); status = palSendMBMessage(pMac->hHdd, pBeaconRep); @@ -315,15 +285,12 @@ static eHalStatus sme_RrmSendBeaconReportXmitInd( tpAniSirGlobal pMac, \return - 0 for success, non zero for failure --------------------------------------------------------------------------*/ -static eHalStatus sme_RrmSendScanResult( tpAniSirGlobal pMac, - tANI_U8 num_chan, - tANI_U8* chanList, - tANI_U8 measurementDone ) +static eHalStatus sme_RrmSendScanResult( tpAniSirGlobal pMac, tANI_U8 num_chan, tANI_U8* chanList, tANI_U8 measurementDone ) { tCsrScanResultFilter filter; tScanResultHandle pResult; tCsrScanResultInfo *pScanResult, *pNextResult; - tCsrScanResultInfo *pScanResultsArr[SIR_BCN_REPORT_MAX_BSS_PER_CHANNEL]; + tCsrScanResultInfo *pScanResultsArr[SIR_BCN_REPORT_MAX_BSS_DESC]; eHalStatus status; tANI_U8 counter=0; tpRrmSMEContext pSmeRrmContext = &pMac->rrm.rrmSmeContext; @@ -334,7 +301,7 @@ static eHalStatus sme_RrmSendScanResult( tpAniSirGlobal pMac, #endif vos_mem_zero( &filter, sizeof(filter) ); - vos_mem_zero( pScanResultsArr, sizeof(pNextResult)*SIR_BCN_REPORT_MAX_BSS_PER_CHANNEL ); + vos_mem_zero( pScanResultsArr, sizeof(pNextResult)*SIR_BCN_REPORT_MAX_BSS_DESC ); filter.BSSIDs.numOfBSSIDs = 1; filter.BSSIDs.bssid = &pSmeRrmContext->bssId; @@ -392,14 +359,14 @@ static eHalStatus sme_RrmSendScanResult( tpAniSirGlobal pMac, // send a xmit indication with moreToFollow set to MEASURMENT_DONE // so that PE can clean any context allocated. if( measurementDone ) - status = sme_RrmSendBeaconReportXmitInd( pMac, NULL, measurementDone, 0 ); + status = sme_RrmSendBeaconReportXmitInd( pMac, NULL, measurementDone ); return status; } pScanResult = sme_ScanResultGetFirst(pMac, pResult); if( NULL == pScanResult && measurementDone ) - status = sme_RrmSendBeaconReportXmitInd( pMac, NULL, measurementDone, 0 ); + status = sme_RrmSendBeaconReportXmitInd( pMac, NULL, measurementDone ); counter=0; while (pScanResult) @@ -407,19 +374,13 @@ static eHalStatus sme_RrmSendScanResult( tpAniSirGlobal pMac, pNextResult = sme_ScanResultGetNext(pMac, pResult); pScanResultsArr[counter++] = pScanResult; pScanResult = pNextResult; //sme_ScanResultGetNext(hHal, pResult); - if (counter >= SIR_BCN_REPORT_MAX_BSS_PER_CHANNEL) + if (counter >= SIR_BCN_REPORT_MAX_BSS_DESC) break; } if (counter) - { - status = sme_RrmSendBeaconReportXmitInd( pMac, - pScanResultsArr, - measurementDone, - counter); - smsLog(pMac, LOG1, " Number of BSS Desc with RRM Scan %d ", - counter); - } + status = sme_RrmSendBeaconReportXmitInd( pMac, pScanResultsArr, measurementDone); + sme_ScanResultPurge(pMac, pResult); return status; @@ -513,7 +474,7 @@ eHalStatus sme_RrmIssueScanReq( tpAniSirGlobal pMac ) vos_mem_zero( &scanRequest, sizeof(scanRequest)); /* set scanType, active or passive */ - scanRequest.bcnRptReqScan = TRUE; + scanRequest.scanType = pSmeRrmContext->measMode; vos_mem_copy(scanRequest.bssid, @@ -707,7 +668,7 @@ void sme_RrmProcessBeaconReportReqInd(tpAniSirGlobal pMac, void *pMsgBuf) /* Indicate measurement completion to PE */ /* If this is not done, pCurrentReq pointer will not be freed and PE will not handle subsequent Beacon requests */ - sme_RrmSendBeaconReportXmitInd(pMac, NULL, true, 0); + sme_RrmSendBeaconReportXmitInd(pMac, NULL, true); break; } diff --git a/drivers/staging/prima/CORE/SME/src/sme_common/sme_Api.c b/drivers/staging/prima/CORE/SME/src/sme_common/sme_Api.c index c823e0f07d0..768192374b6 100644 --- a/drivers/staging/prima/CORE/SME/src/sme_common/sme_Api.c +++ b/drivers/staging/prima/CORE/SME/src/sme_common/sme_Api.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2014, The Linux Foundation. All rights reserved. + * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -80,10 +80,6 @@ #include "csrInternal.h" #include "wlan_qct_wda.h" #include "halMsgApi.h" -#include "vos_trace.h" -#include "sme_Trace.h" -#include "vos_types.h" -#include "vos_trace.h" #include "sapApi.h" @@ -92,7 +88,7 @@ extern tSirRetStatus uMacPostCtrlMsg(void* pSirGlobal, tSirMbMsg* pMb); #include <wlan_qct_pal_api.h> -#define LOG_SIZE 256 + #define READ_MEMORY_DUMP_CMD 9 // TxMB Functions @@ -295,6 +291,7 @@ done: void dumpCsrCommandInfo(tpAniSirGlobal pMac, tSmeCmd *pCmd) { +#ifdef WLAN_DEBUG switch( pCmd->command ) { case eSmeCommandScan: @@ -322,6 +319,7 @@ void dumpCsrCommandInfo(tpAniSirGlobal pMac, tSmeCmd *pCmd) default: break; } +#endif //#ifdef WLAN_DEBUG } tSmeCmd *smeGetCommandBuffer( tpAniSirGlobal pMac ) @@ -601,8 +599,6 @@ tANI_BOOLEAN smeProcessCommand( tpAniSirGlobal pMac ) // .... and process the command. - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_COMMAND, pCommand->sessionId, pCommand->command)); switch ( pCommand->command ) { @@ -984,7 +980,6 @@ eHalStatus sme_Open(tHalHandle hHal) sme_FTOpen(pMac); #endif sme_p2pOpen(pMac); - smeTraceInit(pMac); }while (0); @@ -1014,8 +1009,6 @@ eHalStatus sme_set11dinfo(tHalHandle hHal, tpSmeConfigParams pSmeConfigParams) eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_MSG_SET_11DINFO, NO_SESSION, 0)); if (NULL == pSmeConfigParams ) { smsLog( pMac, LOGE, "Empty config param structure for SME, nothing to update"); @@ -1050,8 +1043,6 @@ eHalStatus sme_getSoftApDomain(tHalHandle hHal, v_REGDOMAIN_t *domainIdSoftAp) eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_MSG_GET_SOFTAP_DOMAIN, NO_SESSION, 0)); if (NULL == domainIdSoftAp ) { smsLog( pMac, LOGE, "Uninitialized domain Id"); return status; @@ -1069,8 +1060,6 @@ eHalStatus sme_setRegInfo(tHalHandle hHal, tANI_U8 *apCntryCode) eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_MSG_SET_REGINFO, NO_SESSION, 0)); if (NULL == apCntryCode ) { smsLog( pMac, LOGE, "Empty Country Code, nothing to update"); return status; @@ -1106,9 +1095,7 @@ eHalStatus sme_UpdateChannelConfig(tHalHandle hHal) { tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_MSG_UPDATE_CHANNEL_CONFIG, NO_SESSION, 0)); - pmcUpdateScanParams( pMac, &(pMac->roam.configParam), + pmcUpdateScanParams( pMac, &(pMac->roam.configParam), &pMac->scan.base20MHzChannels, FALSE); return eHAL_STATUS_SUCCESS; } @@ -1140,8 +1127,6 @@ eHalStatus sme_UpdateConfig(tHalHandle hHal, tpSmeConfigParams pSmeConfigParams) eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_MSG_UPDATE_CONFIG, NO_SESSION, 0)); if (NULL == pSmeConfigParams ) { smsLog( pMac, LOGE, "Empty config param structure for SME, nothing to update"); @@ -1253,8 +1238,6 @@ eHalStatus sme_HDDReadyInd(tHalHandle hHal) tPmcSwitchState swWlanSwitchState; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_MSG_HDDREADYIND, NO_SESSION, 0)); do { @@ -1662,6 +1645,21 @@ eHalStatus sme_ProcessMsg(tHalHandle hHal, vos_msg_t* pMsg) "(PACKET_COALESCING_FILTER_MATCH_COUNT_RSP), nothing to process"); } break; + // IKJB42MAIN-1244, Motorola, a19091 - BEGIN + case eWNI_SME_SET_V6_MC_FILTER: + if(pMsg->bodyptr) + { + tSirInvokeV6Filter *invokeV6Filter=(tSirInvokeV6Filter*)(pMsg->bodyptr); + invokeV6Filter->configureFilterFn(invokeV6Filter->pHddAdapter, invokeV6Filter->set, FALSE); + kfree(pMsg->bodyptr); + status = eHAL_STATUS_SUCCESS; + } + else + { + smsLog(pMac, LOGE, "Empty callback for eWNI_SME_SET_V6_MC_FILTER "); + } + break; + // IKJB42MAIN-1244, Motorola, a19091 - END #endif // WLAN_FEATURE_PACKET_FILTERING case eWNI_SME_PRE_SWITCH_CHL_IND: { @@ -1996,8 +1994,7 @@ eHalStatus sme_ScanRequest(tHalHandle hHal, tANI_U8 sessionId, tCsrScanRequest * { eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_MSG_SCAN_REQ, sessionId, pscanReq->scanType)); + smsLog(pMac, LOG2, FL("enter")); do { @@ -2058,8 +2055,6 @@ eHalStatus sme_ScanGetResult(tHalHandle hHal, tANI_U8 sessionId, tCsrScanResultF eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_MSG_SCAN_GET_RESULTS, sessionId,0 )); smsLog(pMac, LOG2, FL("enter")); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) @@ -2084,8 +2079,6 @@ eHalStatus sme_ScanFlushResult(tHalHandle hHal, tANI_U8 sessionId) eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_MSG_SCAN_FLUSH_RESULTS, sessionId,0 )); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { @@ -2096,36 +2089,11 @@ eHalStatus sme_ScanFlushResult(tHalHandle hHal, tANI_U8 sessionId) return (status); } -/* --------------------------------------------------------------------------- - \fn sme_FilterScanResults - \brief a wrapper function to request CSR to clear scan results. - This is a synchronous call - \return eHalStatus - ---------------------------------------------------------------------------*/ -eHalStatus sme_FilterScanResults(tHalHandle hHal, tANI_U8 sessionId) -{ - eHalStatus status = eHAL_STATUS_SUCCESS; - tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - - MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_MSG_SCAN_FLUSH_RESULTS, sessionId,0 )); - status = sme_AcquireGlobalLock( &pMac->sme ); - if ( HAL_STATUS_SUCCESS( status ) ) - { - csrScanFilterResults(pMac); - sme_ReleaseGlobalLock( &pMac->sme ); - } - - return (status); -} - eHalStatus sme_ScanFlushP2PResult(tHalHandle hHal, tANI_U8 sessionId) { eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_MSG_SCAN_FLUSH_P2PRESULTS, sessionId,0 )); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { @@ -2151,8 +2119,6 @@ tCsrScanResultInfo *sme_ScanResultGetFirst(tHalHandle hHal, tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); tCsrScanResultInfo *pRet = NULL; - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_MSG_SCAN_RESULT_GETFIRST, NO_SESSION,0 )); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { @@ -2180,8 +2146,6 @@ tCsrScanResultInfo *sme_ScanResultGetNext(tHalHandle hHal, tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); tCsrScanResultInfo *pRet = NULL; - MTRACE(vos_trace(VOS_MODULE_ID_SME , - TRACE_CODE_SME_RX_HDD_MSG_SCAN_RESULT_GETNEXT, NO_SESSION,0 )); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { @@ -2234,8 +2198,6 @@ eHalStatus sme_ScanResultPurge(tHalHandle hHal, tScanResultHandle hScanResult) eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_MSG_SCAN_RESULT_PURGE, NO_SESSION,0 )); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { @@ -2343,13 +2305,6 @@ eHalStatus sme_RoamConnect(tHalHandle hHal, tANI_U8 sessionId, tCsrRoamProfile * eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - if (!pMac) - { - return eHAL_STATUS_FAILURE; - } - - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_MSG_CONNECT, sessionId, 0)); smsLog(pMac, LOG2, FL("enter")); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) @@ -2424,8 +2379,6 @@ eHalStatus sme_RoamReassoc(tHalHandle hHal, tANI_U8 sessionId, tCsrRoamProfile * eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_ROAM_REASSOC, sessionId, 0)); smsLog(pMac, LOG2, FL("enter")); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) @@ -2498,8 +2451,6 @@ eHalStatus sme_RoamDisconnect(tHalHandle hHal, tANI_U8 sessionId, eCsrRoamDiscon eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_ROAM_DISCONNECT, sessionId, reason)); smsLog(pMac, LOG2, FL("enter")); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) @@ -2788,8 +2739,6 @@ eHalStatus sme_RoamGetConnectProfile(tHalHandle hHal, tANI_U8 sessionId, eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_ROAM_GET_CONNECTPROFILE, sessionId, 0)); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { @@ -2822,8 +2771,6 @@ eHalStatus sme_RoamFreeConnectProfile(tHalHandle hHal, eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_ROAM_FREE_CONNECTPROFILE, NO_SESSION, 0)); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { @@ -2855,8 +2802,6 @@ eHalStatus sme_RoamSetPMKIDCache( tHalHandle hHal, tANI_U8 sessionId, tPmkidCach eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_ROAM_SET_PMKIDCACHE, sessionId, numItems)); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { @@ -2874,26 +2819,6 @@ eHalStatus sme_RoamSetPMKIDCache( tHalHandle hHal, tANI_U8 sessionId, tPmkidCach return (status); } -eHalStatus sme_RoamDelPMKIDfromCache( tHalHandle hHal, tANI_U8 sessionId, tANI_U8 *pBSSId ) -{ - eHalStatus status = eHAL_STATUS_FAILURE; - tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - status = sme_AcquireGlobalLock( &pMac->sme ); - if ( HAL_STATUS_SUCCESS( status ) ) - { - if( CSR_IS_SESSION_VALID( pMac, sessionId ) ) - { - status = csrRoamDelPMKIDfromCache( pMac, sessionId, pBSSId ); - } - else - { - status = eHAL_STATUS_INVALID_PARAMETER; - } - sme_ReleaseGlobalLock( &pMac->sme ); - } - return (status); -} - /* --------------------------------------------------------------------------- \fn sme_RoamGetSecurityReqIE \brief a wrapper function to request CSR to return the WPA or RSN or WAPI IE CSR @@ -3048,8 +2973,6 @@ eHalStatus sme_GetConfigParam(tHalHandle hHal, tSmeConfigParams *pParam) eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_GET_CONFIGPARAM, NO_SESSION, 0)); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { @@ -3115,6 +3038,43 @@ eHalStatus sme_CfgSetStr(tHalHandle hHal, tANI_U32 cfgId, tANI_U8 *pStr, return(ccmCfgSetStr(hHal, cfgId, pStr, length, callback, toBeSaved)); } +/* --------------------------------------------------------------------------- + \fn sme_GetModifyProfileFields + \brief HDD or SME - QOS calls this function to get the current values of + connected profile fields, changing which can cause reassoc. + This function must be called after CFG is downloaded and STA is in connected + state. Also, make sure to call this function to get the current profile + fields before calling the reassoc. So that pModifyProfileFields will have + all the latest values plus the one(s) has been updated as part of reassoc + request. + \param pModifyProfileFields - pointer to the connected profile fields + changing which can cause reassoc + + \return eHalStatus + -------------------------------------------------------------------------------*/ +eHalStatus sme_GetModifyProfileFields(tHalHandle hHal, tANI_U8 sessionId, + tCsrRoamModifyProfileFields * pModifyProfileFields) +{ + eHalStatus status = eHAL_STATUS_FAILURE; + tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + + status = sme_AcquireGlobalLock( &pMac->sme ); + if ( HAL_STATUS_SUCCESS( status ) ) + { + if( CSR_IS_SESSION_VALID( pMac, sessionId ) ) + { + status = csrGetModifyProfileFields(pMac, sessionId, pModifyProfileFields); + } + else + { + status = eHAL_STATUS_INVALID_PARAMETER; + } + sme_ReleaseGlobalLock( &pMac->sme ); + } + + return (status); +} + /*-------------------------------------------------------------------------- \fn sme_SetConfigPowerSave \brief Wrapper fn to change power save configuration in SME (PMC) module. @@ -3134,8 +3094,6 @@ eHalStatus sme_SetConfigPowerSave(tHalHandle hHal, tPmcPowerSavingMode psMode, eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_SET_CONFIG_PWRSAVE, NO_SESSION, 0)); if (NULL == pConfigParams ) { smsLog( pMac, LOGE, "Empty config param structure for PMC, " "nothing to update"); @@ -3167,8 +3125,6 @@ eHalStatus sme_GetConfigPowerSave(tHalHandle hHal, tPmcPowerSavingMode psMode, eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_GET_CONFIG_PWRSAVE, NO_SESSION, 0)); if (NULL == pConfigParams ) { smsLog( pMac, LOGE, "Empty config param structure for PMC, " "nothing to update"); @@ -3223,8 +3179,6 @@ eHalStatus sme_EnablePowerSave (tHalHandle hHal, tPmcPowerSavingMode psMode) eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_ENABLE_PWRSAVE, NO_SESSION, psMode)); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { @@ -3249,8 +3203,6 @@ eHalStatus sme_DisablePowerSave (tHalHandle hHal, tPmcPowerSavingMode psMode) eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_DISABLE_PWRSAVE, NO_SESSION, psMode)); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { @@ -3293,8 +3245,6 @@ eHalStatus sme_StartAutoBmpsTimer ( tHalHandle hHal) eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_START_AUTO_BMPSTIMER, NO_SESSION, 0)); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { @@ -3317,8 +3267,6 @@ eHalStatus sme_StopAutoBmpsTimer ( tHalHandle hHal) eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_STOP_AUTO_BMPSTIMER, NO_SESSION, 0)); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { @@ -3368,8 +3316,6 @@ tANI_BOOLEAN sme_IsPowerSaveEnabled (tHalHandle hHal, tPmcPowerSavingMode psMode tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); tANI_BOOLEAN result = false; - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_IS_PWRSAVE_ENABLED, NO_SESSION, psMode)); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { @@ -3406,8 +3352,6 @@ eHalStatus sme_RequestFullPower ( eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_REQUEST_FULLPOWER, NO_SESSION, fullPowerReason)); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { @@ -3438,8 +3382,6 @@ eHalStatus sme_RequestBmps ( eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_REQUEST_BMPS, NO_SESSION, 0)); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { @@ -3461,8 +3403,6 @@ void sme_SetDHCPTillPowerActiveFlag(tHalHandle hHal, tANI_U8 flag) { tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_SET_DHCP_FLAG, NO_SESSION, flag)); // Set/Clear the DHCP flag which will disable/enable auto BMPS entery by PMC pMac->pmc.remainInPowerActiveTillDHCP = flag; } @@ -3543,8 +3483,6 @@ eHalStatus sme_RequestStandby ( eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_REQUEST_STANDBY, NO_SESSION, 0)); smsLog( pMac, LOG1, FL("") ); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) @@ -3584,26 +3522,6 @@ eHalStatus sme_RegisterPowerSaveCheck ( } /* --------------------------------------------------------------------------- - \fn sme_Register11dScanDoneCallback - \brief Register a routine of type csrScanCompleteCallback which is - called whenever an 11d scan is done - \param hHal - The handle returned by macOpen. - \param callback - 11d scan complete routine to be registered - \return eHalStatus - ---------------------------------------------------------------------------*/ -eHalStatus sme_Register11dScanDoneCallback ( - tHalHandle hHal, - csrScanCompleteCallback callback) -{ - eHalStatus status = eHAL_STATUS_SUCCESS; - tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - - pMac->scan.callback11dScanDone = callback; - - return (status); -} - -/* --------------------------------------------------------------------------- \fn sme_DeregisterPowerSaveCheck \brief Deregister a power save check routine \param hHal - The handle returned by macOpen. @@ -3703,8 +3621,6 @@ eHalStatus sme_WowlAddBcastPattern ( { eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_WOWL_ADDBCAST_PATTERN, sessionId, 0)); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { @@ -3731,8 +3647,6 @@ eHalStatus sme_WowlDelBcastPattern ( { eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_WOWL_DELBCAST_PATTERN, sessionId, 0)); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { @@ -3785,8 +3699,6 @@ eHalStatus sme_EnterWowl ( { eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_ENTER_WOWL, sessionId, 0)); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { @@ -3813,8 +3725,6 @@ eHalStatus sme_ExitWowl (tHalHandle hHal) { eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_EXIT_WOWL, NO_SESSION, 0)); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { @@ -3849,8 +3759,6 @@ eHalStatus sme_RoamSetKey(tHalHandle hHal, tANI_U8 sessionId, tCsrRoamSetKey *pS tANI_U32 i; tCsrRoamSession *pSession = NULL; - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_SET_KEY, sessionId, 0)); if (pSetKey->keyLength > CSR_MAX_KEY_LEN) { smsLog(pMac, LOGE, FL("Invalid key length %d"), pSetKey->keyLength); @@ -3929,8 +3837,6 @@ eHalStatus sme_RoamRemoveKey(tHalHandle hHal, tANI_U8 sessionId, tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); tANI_U32 roamId; - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_REMOVE_KEY, sessionId, 0)); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { @@ -4028,8 +3934,6 @@ eHalStatus sme_GetStatistics(tHalHandle hHal, eCsrStatsRequesterType requesterId eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_GET_STATS, NO_SESSION, periodicity)); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { @@ -4067,9 +3971,6 @@ eHalStatus sme_GetCountryCode(tHalHandle hHal, tANI_U8 *pBuf, tANI_U8 *pbLen) { tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_GET_CNTRYCODE, NO_SESSION, 0)); - return ( csrGetCountryCode( pMac, pBuf, pbLen ) ); } @@ -4096,8 +3997,6 @@ eHalStatus sme_SetCountryCode(tHalHandle hHal, tANI_U8 *pCountry, tANI_BOOLEAN * { tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_SET_CNTRYCODE, NO_SESSION, 0)); return ( csrSetCountryCode( pMac, pCountry, pfRestartNeeded ) ); } @@ -4311,8 +4210,6 @@ eHalStatus sme_ScanGetBaseChannels( tHalHandle hHal, tCsrChannelInfo * pChannelI \param pCountry New Country Code String - \param sendRegHint If we want to send reg hint to nl80211 - \return eHalStatus SUCCESS. FAILURE or RESOURCES The API finished and failed. @@ -4322,16 +4219,13 @@ eHalStatus sme_ChangeCountryCode( tHalHandle hHal, tSmeChangeCountryCallback callback, tANI_U8 *pCountry, void *pContext, - void* pVosContext, - tAniBool sendRegHint ) + void* pVosContext ) { eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); vos_msg_t msg; tAniChangeCountryCodeReq *pMsg; - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_CHANGE_CNTRYCODE, NO_SESSION, 0)); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { @@ -4347,7 +4241,6 @@ eHalStatus sme_ChangeCountryCode( tHalHandle hHal, pMsg->msgType = pal_cpu_to_be16((tANI_U16)eWNI_SME_CHANGE_COUNTRY_CODE); pMsg->msgLen = (tANI_U16)sizeof(tAniChangeCountryCodeReq); palCopyMemory(pMac->hHdd, pMsg->countryCode, pCountry, 3); - pMsg->sendRegHint = sendRegHint; pMsg->changeCCCallback = callback; pMsg->pDevContext = pContext; pMsg->pVosContext = pVosContext; @@ -4387,12 +4280,9 @@ eHalStatus sme_ChangeCountryCode( tHalHandle hHal, VOS_STATUS sme_BtcSignalBtEvent (tHalHandle hHal, tpSmeBtEvent pBtEvent) { VOS_STATUS status = VOS_STATUS_E_FAILURE; - #ifndef WLAN_MDM_CODE_REDUCTION_OPT tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_BTC_SIGNALEVENT, NO_SESSION, 0)); if ( eHAL_STATUS_SUCCESS == sme_AcquireGlobalLock( &pMac->sme ) ) { status = btcSignalBTEvent (hHal, pBtEvent); @@ -4419,8 +4309,6 @@ VOS_STATUS sme_BtcSetConfig (tHalHandle hHal, tpSmeBtcConfig pSmeBtcConfig) VOS_STATUS status = VOS_STATUS_E_FAILURE; #ifndef WLAN_MDM_CODE_REDUCTION_OPT tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_BTC_SETCONFIG, NO_SESSION, 0)); if ( eHAL_STATUS_SUCCESS == sme_AcquireGlobalLock( &pMac->sme ) ) { status = btcSetConfig (hHal, pSmeBtcConfig); @@ -4447,8 +4335,6 @@ VOS_STATUS sme_BtcGetConfig (tHalHandle hHal, tpSmeBtcConfig pSmeBtcConfig) #ifndef WLAN_MDM_CODE_REDUCTION_OPT tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_BTC_GETCONFIG, NO_SESSION, 0)); if ( eHAL_STATUS_SUCCESS == sme_AcquireGlobalLock( &pMac->sme ) ) { status = btcGetConfig (hHal, pSmeBtcConfig); @@ -4472,8 +4358,6 @@ void sme_SetCfgPrivacy( tHalHandle hHal, ) { tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_SET_CFGPRIVACY, NO_SESSION, 0)); if ( eHAL_STATUS_SUCCESS == sme_AcquireGlobalLock( &pMac->sme ) ) { csrSetCfgPrivacy(pMac, pProfile, fPrivacy); @@ -4498,8 +4382,6 @@ VOS_STATUS sme_NeighborReportRequest (tHalHandle hHal, tANI_U8 sessionId, { VOS_STATUS status = VOS_STATUS_E_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_NEIGHBOR_REPORTREQ, NO_SESSION, 0)); if ( eHAL_STATUS_SUCCESS == sme_AcquireGlobalLock( &pMac->sme ) ) { @@ -4523,8 +4405,6 @@ VOS_STATUS sme_DbgReadRegister(tHalHandle hHal, v_U32_t regAddr, v_U32_t *pRegVa tpAniSirGlobal pMac = PMAC_STRUCT(hHal); tPmcPowerState PowerState; tANI_U32 sessionId = 0; - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_DBG_READREG, NO_SESSION, 0)); /* 1) To make Quarky work in FTM mode **************************************/ @@ -4591,8 +4471,6 @@ VOS_STATUS sme_DbgWriteRegister(tHalHandle hHal, v_U32_t regAddr, v_U32_t regVal /* 1) To make Quarky work in FTM mode **************************************/ - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_DBG_WRITEREG, NO_SESSION, 0)); if(eDRIVER_TYPE_MFG == pMac->gDriverType) { if (eWLAN_PAL_STATUS_SUCCESS == wpalDbgWriteRegister(regAddr, regValue)) @@ -4654,8 +4532,6 @@ VOS_STATUS sme_DbgReadMemory(tHalHandle hHal, v_U32_t memAddr, v_U8_t *pBuf, v_U tANI_U32 arg4 = 0; /* 1) To make Quarky work in FTM mode **************************************/ - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_DBG_READMEM, NO_SESSION, 0)); if(eDRIVER_TYPE_MFG == pMac->gDriverType) { if (VOS_STATUS_SUCCESS == WDA_HALDumpCmdReq(pMac, cmd, arg1, arg2, arg3, arg4, (tANI_U8*)pBuf)) @@ -4720,8 +4596,6 @@ VOS_STATUS sme_DbgWriteMemory(tHalHandle hHal, v_U32_t memAddr, v_U8_t *pBuf, v_ /* 1) To make Quarky work in FTM mode **************************************/ - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_DBG_WRITEMEM, NO_SESSION, 0)); if(eDRIVER_TYPE_MFG == pMac->gDriverType) { { @@ -4765,24 +4639,6 @@ VOS_STATUS sme_DbgWriteMemory(tHalHandle hHal, v_U32_t memAddr, v_U8_t *pBuf, v_ } -void pmcLog(tpAniSirGlobal pMac, tANI_U32 loglevel, const char *pString, ...) -{ - VOS_TRACE_LEVEL vosDebugLevel; - char logBuffer[LOG_SIZE]; - va_list marker; - - /* getting proper Debug level */ - vosDebugLevel = getVosDebugLevel(loglevel); - - /* extracting arguments from pstring */ - va_start( marker, pString ); - vsnprintf(logBuffer, LOG_SIZE, pString, marker); - - VOS_TRACE(VOS_MODULE_ID_PMC, vosDebugLevel, "%s", logBuffer); - va_end( marker ); -} - - void smsLog(tpAniSirGlobal pMac, tANI_U32 loglevel, const char *pString,...) { #ifdef WLAN_DEBUG @@ -5196,9 +5052,6 @@ eHalStatus sme_OpenSession(tHalHandle hHal, csrRoamCompleteCallback callback, vo sme_ReleaseGlobalLock( &pMac->sme ); } } - if( NULL != pbSessionId ) - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_OPEN_SESSION,*pbSessionId, 0)); return ( status ); } @@ -5228,8 +5081,6 @@ eHalStatus sme_CloseSession(tHalHandle hHal, tANI_U8 sessionId, eHalStatus status; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_CLOSE_SESSION, sessionId, 0)); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { @@ -5395,8 +5246,6 @@ eHalStatus sme_SetHostOffload (tHalHandle hHal, tANI_U8 sessionId, tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); eHalStatus status = eHAL_STATUS_FAILURE; - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_SET_HOSTOFFLOAD, sessionId, 0)); if ( eHAL_STATUS_SUCCESS == ( status = sme_AcquireGlobalLock( &pMac->sme ) ) ) { #ifdef WLAN_NS_OFFLOAD @@ -5429,8 +5278,6 @@ eHalStatus sme_SetGTKOffload (tHalHandle hHal, tpSirGtkOffloadParams pRequest, tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); eHalStatus status; - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_SET_GTKOFFLOAD, sessionId, 0)); if ( eHAL_STATUS_SUCCESS == ( status = sme_AcquireGlobalLock( &pMac->sme ) ) ) { status = pmcSetGTKOffload( hHal, pRequest, sessionId ); @@ -5453,8 +5300,6 @@ eHalStatus sme_GetGTKOffload (tHalHandle hHal, GTKOffloadGetInfoCallback callbac tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); eHalStatus status; - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_GET_GTKOFFLOAD, sessionId, 0)); if ( eHAL_STATUS_SUCCESS == ( status = sme_AcquireGlobalLock( &pMac->sme ) ) ) { pmcGetGTKOffload(hHal, callbackRoutine, callbackContext, sessionId); @@ -5529,8 +5374,6 @@ eHalStatus sme_SetPowerParams(tHalHandle hHal, tSirSetPowerParamsReq* pwParams, tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); eHalStatus status; - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_SET_POWERPARAMS, NO_SESSION, 0)); if ( eHAL_STATUS_SUCCESS == ( status = sme_AcquireGlobalLock( &pMac->sme ) ) ) { pmcSetPowerParams(hHal, pwParams, forced); @@ -5544,22 +5387,20 @@ eHalStatus sme_SetPowerParams(tHalHandle hHal, tSirSetPowerParamsReq* pwParams, \fn sme_AbortMacScan \brief API to cancel MAC scan. \param hHal - The handle returned by macOpen. - \param reason - Reason to abort the scan. \return VOS_STATUS VOS_STATUS_E_FAILURE - failure VOS_STATUS_SUCCESS success ---------------------------------------------------------------------------*/ -eHalStatus sme_AbortMacScan(tHalHandle hHal, eCsrAbortReason reason) +eHalStatus sme_AbortMacScan(tHalHandle hHal) { eHalStatus status; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_ABORT_MACSCAN, NO_SESSION, 0)); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { - status = csrScanAbortMacScan(pMac, reason); + status = csrScanAbortMacScan(pMac); + sme_ReleaseGlobalLock( &pMac->sme ); } @@ -5612,8 +5453,6 @@ eHalStatus sme_RegisterMgmtFrame(tHalHandle hHal, tANI_U8 sessionId, eHalStatus status = eHAL_STATUS_SUCCESS; tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_REGISTER_MGMTFR, sessionId, 0)); if ( eHAL_STATUS_SUCCESS == ( status = sme_AcquireGlobalLock( &pMac->sme ) ) ) { tSirRegisterMgmtFrame *pMsg; @@ -5672,8 +5511,6 @@ eHalStatus sme_DeregisterMgmtFrame(tHalHandle hHal, tANI_U8 sessionId, eHalStatus status = eHAL_STATUS_SUCCESS; tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_DEREGISTER_MGMTFR, sessionId, 0)); if ( eHAL_STATUS_SUCCESS == ( status = sme_AcquireGlobalLock( &pMac->sme ) ) ) { tSirRegisterMgmtFrame *pMsg; @@ -5733,8 +5570,6 @@ eHalStatus sme_RemainOnChannel(tHalHandle hHal, tANI_U8 sessionId, eHalStatus status = eHAL_STATUS_SUCCESS; tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_REMAIN_ONCHAN, sessionId, 0)); if ( eHAL_STATUS_SUCCESS == ( status = sme_AcquireGlobalLock( &pMac->sme ) ) ) { status = p2pRemainOnChannel (hHal, sessionId, channel, duration, callback, pContext @@ -5844,8 +5679,6 @@ eHalStatus sme_sendAction(tHalHandle hHal, tANI_U8 sessionId, eHalStatus status = eHAL_STATUS_SUCCESS; tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_SEND_ACTION, sessionId, 0)); //acquire the lock for the sme object status = sme_AcquireGlobalLock(&pMac->sme); if(HAL_STATUS_SUCCESS(status)) @@ -5865,8 +5698,6 @@ eHalStatus sme_CancelRemainOnChannel(tHalHandle hHal, tANI_U8 sessionId ) eHalStatus status = eHAL_STATUS_SUCCESS; tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_CANCEL_REMAIN_ONCHAN, sessionId, 0)); if ( eHAL_STATUS_SUCCESS == ( status = sme_AcquireGlobalLock( &pMac->sme ) ) ) { status = p2pCancelRemainOnChannel (hHal, sessionId); @@ -5923,8 +5754,6 @@ eHalStatus sme_ConfigureRxpFilter( tHalHandle hHal, tpAniSirGlobal pMac = PMAC_STRUCT(hHal); vos_msg_t vosMessage; - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_CONFIG_RXPFIL, NO_SESSION, 0)); if ( eHAL_STATUS_SUCCESS == ( status = sme_AcquireGlobalLock( &pMac->sme ) ) ) { /* serialize the req through MC thread */ @@ -5967,8 +5796,6 @@ eHalStatus sme_ConfigureSuspendInd( tHalHandle hHal, tpAniSirGlobal pMac = PMAC_STRUCT(hHal); vos_msg_t vosMessage; - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_CONFIG_SUSPENDIND, NO_SESSION, 0)); if ( eHAL_STATUS_SUCCESS == ( status = sme_AcquireGlobalLock( &pMac->sme ) ) ) { /* serialize the req through MC thread */ @@ -6011,8 +5838,6 @@ eHalStatus sme_ConfigureResumeReq( tHalHandle hHal, tpAniSirGlobal pMac = PMAC_STRUCT(hHal); vos_msg_t vosMessage; - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_CONFIG_RESUMEREQ, NO_SESSION, 0)); if ( eHAL_STATUS_SUCCESS == ( status = sme_AcquireGlobalLock( &pMac->sme ) ) ) { /* serialize the req through MC thread */ @@ -6147,11 +5972,6 @@ eHalStatus sme_PreferredNetworkFoundInd (tHalHandle hHal, void* pMsg) smsLog(pMac, LOG2, "%s:SSID=%s frame length %d", __func__, dumpSsId, pPrefNetworkFoundInd->frameLength); - /* Flush scan results, So as to avoid indication/updation of - * stale entries, which may not have aged out during APPS collapse - */ - sme_ScanFlushResult(hHal,0); - //Save the frame to scan result if (pPrefNetworkFoundInd->mesgLen > sizeof(tSirPrefNetworkFoundInd)) { @@ -6359,7 +6179,7 @@ eHalStatus sme_HandleChangeCountryCode(tpAniSirGlobal pMac, void *pMsgBuf) return status; } - status = WDA_SetRegDomain(pMac, domainIdIoctl, pMsg->sendRegHint); + status = WDA_SetRegDomain(pMac, domainIdIoctl); if ( status != eHAL_STATUS_SUCCESS ) { @@ -6454,6 +6274,39 @@ eHalStatus sme_8023MulticastList (tHalHandle hHal, tANI_U8 sessionId, tpSirRcvFl return eHAL_STATUS_SUCCESS; } +// IKJB42MAIN-1244, Motorola, a19091 - BEGIN +eHalStatus sme_ReceiveSetMcFilter(tSirInvokeV6Filter *filterConfig) +{ + vos_msg_t msg; + tSirInvokeV6Filter *passFilterConfig = kmalloc(sizeof(tSirInvokeV6Filter), GFP_ATOMIC); + + if(passFilterConfig == NULL) { + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "%s: Not able to " + "allocate memory for Receive Filter Set Filter MC request", __func__); + return eHAL_STATUS_FAILED_ALLOC; + } + + vos_mem_copy(passFilterConfig, filterConfig, sizeof(tSirInvokeV6Filter)); + + msg.type = eWNI_SME_SET_V6_MC_FILTER; + msg.reserved = 0; + msg.bodyptr = passFilterConfig; + + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, + " MC set rcieved .. post for processing!"); + + if(VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, &msg)) + { + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "%s: Not able to post " + "WDA_RECEIVE_FILTER_SET_FILTER_MC_REQ message to WDA", __func__); + kfree(passFilterConfig); + return eHAL_STATUS_FAILURE; + } + + return eHAL_STATUS_SUCCESS; +} +// IKJB42MAIN-1244, Motorola, a19091 - END + eHalStatus sme_ReceiveFilterSetFilter(tHalHandle hHal, tpSirRcvPktFilterCfgType pRcvPktFilterCfg, tANI_U8 sessionId) { @@ -6485,7 +6338,6 @@ eHalStatus sme_ReceiveFilterSetFilter(tHalHandle hHal, tpSirRcvPktFilterCfgType vos_mem_free(pRequestBuf); return eHAL_STATUS_FAILURE; } - vos_mem_copy( pRcvPktFilterCfg->selfMacAddr, pSession->selfMacAddr, sizeof(tSirMacAddr)); vos_mem_copy( pRcvPktFilterCfg->bssId, pSession->connectedProfile.bssid, sizeof(tSirMacAddr)); @@ -6820,8 +6672,7 @@ eHalStatus sme_SetMaxTxPower(tHalHandle hHal, tSirMacAddr pBssid, { vos_msg_t msg; tpMaxTxPowerParams pMaxTxParams = NULL; - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_SET_MAXTXPOW, NO_SESSION, 0)); + pMaxTxParams = vos_mem_malloc(sizeof(tMaxTxPowerParams)); if (NULL == pMaxTxParams) { @@ -6867,8 +6718,6 @@ eHalStatus sme_SetTxPower(tHalHandle hHal, v_U8_t sessionId, v_U8_t mW) eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_SET_TXPOW, NO_SESSION, 0)); smsLog(pMac, LOG1, FL("set tx power %dmW"), mW); status = sme_AcquireGlobalLock(&pMac->sme); if (HAL_STATUS_SUCCESS(status)) @@ -6948,8 +6797,6 @@ eHalStatus sme_SetTmLevel(tHalHandle hHal, v_U16_t newTMLevel, v_U16_t tmMode) vos_msg_t vosMessage; tAniSetTmLevelReq *setTmLevelReq = NULL; - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_SET_TMLEVEL, NO_SESSION, 0)); if ( eHAL_STATUS_SUCCESS == ( status = sme_AcquireGlobalLock( &pMac->sme ) ) ) { setTmLevelReq = (tAniSetTmLevelReq *)vos_mem_malloc(sizeof(tAniSetTmLevelReq)); @@ -6993,8 +6840,6 @@ eHalStatus sme_SetTmLevel(tHalHandle hHal, v_U16_t newTMLevel, v_U16_t tmMode) void sme_featureCapsExchange( tHalHandle hHal) { v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_SME, NULL); - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_CAPS_EXCH, NO_SESSION, 0)); WDA_featureCapsExchange(vosContext); } @@ -7013,6 +6858,36 @@ void sme_disableFeatureCapablity(tANI_U8 feature_index) WDA_disableCapablityFeature(feature_index); } +/*---------------------------------------------------------------------------- + + \brief sme_isHostFeatSupported() - SME interface to determine the given feature + is supported by HOST or not. + + \param featCap - Feature support + + \return 1 on feature supported, 0 on feature not supported. +-----------------------------------------------------------------------------*/ + +tANI_U8 sme_isHostFeatSupported(tANI_U8 featCap) +{ + return WDA_getHostWlanFeatCaps(featCap); +} + +/*---------------------------------------------------------------------------- + + \brief sme_isFwFeatureSupported() - SME interface to determine the given feature + is supported by HOST or not. + + \param featCap - Feature support + + \return 1 on feature supported, 0 on feature not supported. +-----------------------------------------------------------------------------*/ + +tANI_U8 sme_isFwFeatSupported(tANI_U8 featCap) +{ + return WDA_getFwWlanFeatCaps(featCap); +} + /* --------------------------------------------------------------------------- \fn sme_GetDefaultCountryCode @@ -7027,8 +6902,6 @@ void sme_disableFeatureCapablity(tANI_U8 feature_index) eHalStatus sme_GetDefaultCountryCodeFrmNv(tHalHandle hHal, tANI_U8 *pCountry) { tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_GET_DEFCCNV, NO_SESSION, 0)); return csrGetDefaultCountryCodeFrmNv(pMac, pCountry); } @@ -7046,8 +6919,6 @@ eHalStatus sme_GetDefaultCountryCodeFrmNv(tHalHandle hHal, tANI_U8 *pCountry) eHalStatus sme_GetCurrentCountryCode(tHalHandle hHal, tANI_U8 *pCountry) { tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_GET_CURCC, NO_SESSION, 0)); return csrGetCurrentCountryCode(pMac, pCountry); } @@ -7084,8 +6955,6 @@ void sme_transportDebug(tHalHandle hHal, v_BOOL_t displaySnapshot, v_BOOL_t togg void sme_ResetPowerValuesFor5G (tHalHandle hHal) { tpAniSirGlobal pMac = PMAC_STRUCT (hHal); - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_RESET_PW5G, NO_SESSION, 0)); csrSaveChannelPowerForBand(pMac, eANI_BOOLEAN_TRUE); csrApplyPower2Current(pMac); // Store the channel+power info in the global place: Cfg } @@ -7106,8 +6975,6 @@ eHalStatus sme_UpdateRoamPrefer5GHz(tHalHandle hHal, v_BOOL_t nRoamPrefer5GHz) tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); eHalStatus status = eHAL_STATUS_SUCCESS; - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_UPDATE_RP5G, NO_SESSION, 0)); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { @@ -7136,8 +7003,6 @@ eHalStatus sme_setRoamIntraBand(tHalHandle hHal, const v_BOOL_t nRoamIntraBand) tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); eHalStatus status = eHAL_STATUS_SUCCESS; - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_SET_ROAMIBAND, NO_SESSION, 0)); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { @@ -7231,8 +7096,6 @@ eHalStatus sme_UpdateRoamScanHomeAwayTime(tHalHandle hHal, const v_U16_t nRoamSc v_BOOL_t sme_getRoamIntraBand(tHalHandle hHal) { tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_GET_ROAMIBAND, NO_SESSION, 0)); return pMac->roam.configParam.nRoamIntraBand; } @@ -7278,8 +7141,6 @@ eHalStatus sme_UpdateImmediateRoamRssiDiff(tHalHandle hHal, v_U8_t nImmediateRoa tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); eHalStatus status = eHAL_STATUS_SUCCESS; - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_UPDATE_IMMRSSIDIFF, NO_SESSION, 0)); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { @@ -7313,8 +7174,6 @@ eHalStatus sme_UpdateRoamRssiDiff(tHalHandle hHal, v_U8_t RoamRssiDiff) eHalStatus status = eHAL_STATUS_SUCCESS; status = sme_AcquireGlobalLock( &pMac->sme ); - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_UPDATE_RSSIDIFF, NO_SESSION, 0)); if ( HAL_STATUS_SUCCESS( status ) ) { VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_DEBUG, @@ -7350,8 +7209,6 @@ eHalStatus sme_UpdateFastTransitionEnabled(tHalHandle hHal, tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); eHalStatus status = eHAL_STATUS_SUCCESS; - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_UPDATE_FTENABLED, NO_SESSION, 0)); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { @@ -7411,8 +7268,6 @@ eHalStatus sme_SetRoamScanControl(tHalHandle hHal, v_BOOL_t roamScanControl) tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); eHalStatus status = eHAL_STATUS_SUCCESS; - MTRACE(vos_trace(VOS_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_SET_SCANCTRL, NO_SESSION, 0)); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { @@ -8242,29 +8097,15 @@ tANI_BOOLEAN sme_getIsFtFeatureEnabled(tHalHandle hHal) /* --------------------------------------------------------------------------- \fn sme_IsFeatureSupportedByFW - \brief Check if a feature is enabled by FW - - \param featEnumValue - Enumeration value from placeHolderInCapBitmap - \- return 1/0 (TRUE/FALSE) + \brief Check if an feature is enabled by FW + + \param feattEnumValue - Enumeration value from placeHolderInCapBitmap + \- return 1/0 (TRUE/FALSE) -------------------------------------------------------------------------*/ tANI_U8 sme_IsFeatureSupportedByFW(tANI_U8 featEnumValue) { return IS_FEATURE_SUPPORTED_BY_FW(featEnumValue); } - -/* --------------------------------------------------------------------------- - \fn sme_IsFeatureSupportedByDriver - \brief Check if a feature is enabled by Driver - - \param featEnumValue - Enumeration value from placeHolderInCapBitmap - \- return 1/0 (TRUE/FALSE) - -------------------------------------------------------------------------*/ - -tANI_U8 sme_IsFeatureSupportedByDriver(tANI_U8 featEnumValue) -{ - return IS_FEATURE_SUPPORTED_BY_DRIVER(featEnumValue); -} - #ifdef FEATURE_WLAN_TDLS /* --------------------------------------------------------------------------- \fn sme_SendTdlsMgmtFrame @@ -8557,65 +8398,3 @@ VOS_STATUS sme_isSta_p2p_clientConnected(tHalHandle hHal) return VOS_STATUS_E_FAILURE; } -/*-------------------------------------------------------------------------- - \brief sme_enable_disable_split_scan() - a wrapper function to set the split - scan parameter. - This is a synchronous call - \param hHal - The handle returned by macOpen - \return NONE. - \sa - --------------------------------------------------------------------------*/ -void sme_enable_disable_split_scan (tHalHandle hHal, tANI_U8 nNumStaChan, - tANI_U8 nNumP2PChan) -{ - tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - - pMac->roam.configParam.nNumStaChanCombinedConc = nNumStaChan; - pMac->roam.configParam.nNumP2PChanCombinedConc = nNumP2PChan; - - VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, - "%s: SCAN nNumStaChanCombinedConc : %d," - "nNumP2PChanCombinedConc : %d ", - __func__, nNumStaChan, nNumP2PChan); - - return; - -} - -void smeGetCommandQStatus( tHalHandle hHal ) -{ - tSmeCmd *pTempCmd = NULL; - tListElem *pEntry; - tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - - if (NULL == pMac) - { - VOS_TRACE( VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, - "smeGetCommandQStatus: pMac is NULL"); - return; - } - - pEntry = csrLLPeekHead( &pMac->sme.smeCmdActiveList, LL_ACCESS_LOCK ); - if( pEntry ) - { - pTempCmd = GET_BASE_ADDR( pEntry, tSmeCmd, Link ); - } - smsLog( pMac, LOGE, "Currently smeCmdActiveList has command (0x%X)", - (pTempCmd) ? pTempCmd->command : eSmeNoCommand ); - if(pTempCmd) - { - if( eSmeCsrCommandMask & pTempCmd->command ) - { - //CSR command is stuck. See what the reason code is for that command - dumpCsrCommandInfo(pMac, pTempCmd); - } - } //if(pTempCmd) - - smsLog( pMac, LOGE, "Currently smeCmdPendingList has %d commands", - csrLLCount(&pMac->sme.smeCmdPendingList)); - - smsLog( pMac, LOGE, "Currently roamCmdPendingList has %d commands", - csrLLCount(&pMac->roam.roamCmdPendingList)); - - return; -} diff --git a/drivers/staging/prima/CORE/SME/src/sme_common/sme_Trace.c b/drivers/staging/prima/CORE/SME/src/sme_common/sme_Trace.c deleted file mode 100644 index e322ff57683..00000000000 --- a/drivers/staging/prima/CORE/SME/src/sme_common/sme_Trace.c +++ /dev/null @@ -1,200 +0,0 @@ -/* - * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved. - * - * Previously licensed under the ISC license by Qualcomm Atheros, Inc. - * - * - * Permission to use, copy, modify, and/or distribute this software for - * any purpose with or without fee is hereby granted, provided that the - * above copyright notice and this permission notice appear in all - * copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL - * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE - * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL - * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -/************************************************************************ - smeTrace.c - - \brief implementation for trace related APIs - - \author Kiran Kumar Reddy CH L V - - Copyright (c) 2013 Qualcomm Atheros, Inc. - - All Rights Reserved. - - Qualcomm Atheros Confidential and Proprietary. - - ========================================================================*/ -#include "aniGlobal.h" //for tpAniSirGlobal -#include "smsDebug.h" -#include "macTrace.h" -#include "sme_Trace.h" -#include "smeInternal.h" -#ifndef SME_TRACE_RECORD -void smeTraceInit(tpAniSirGlobal pMac) -{ - return; -} -#endif -#ifdef SME_TRACE_RECORD - - -static tANI_U8* smeTraceGetRxMsgString( tANI_U32 code ) -{ - switch(code) - { - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_MSG_SCAN_REQ); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_MSG_SCAN_GET_RESULTS); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_MSG_CONNECT); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_MSG_SET_11DINFO); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_MSG_GET_SOFTAP_DOMAIN); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_MSG_SET_REGINFO); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_MSG_UPDATE_CHANNEL_CONFIG); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_MSG_UPDATE_CONFIG); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_MSG_HDDREADYIND); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_MSG_SCAN_FLUSH_RESULTS); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_MSG_SCAN_FLUSH_P2PRESULTS); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_MSG_SCAN_RESULT_GETFIRST); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_MSG_SCAN_RESULT_GETNEXT); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_MSG_SCAN_RESULT_PURGE); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_ROAM_REASSOC); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_ROAM_DISCONNECT); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_ROAM_GET_CONNECTPROFILE); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_ROAM_FREE_CONNECTPROFILE); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_ROAM_SET_PMKIDCACHE); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_GET_CONFIGPARAM); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_GET_MODPROFFIELDS); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_SET_CONFIG_PWRSAVE); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_GET_CONFIG_PWRSAVE); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_ENABLE_PWRSAVE); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_DISABLE_PWRSAVE); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_START_AUTO_BMPSTIMER); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_STOP_AUTO_BMPSTIMER); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_IS_PWRSAVE_ENABLED); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_REQUEST_FULLPOWER); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_REQUEST_BMPS); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_SET_DHCP_FLAG); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_REQUEST_STANDBY); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_WOWL_ADDBCAST_PATTERN); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_WOWL_DELBCAST_PATTERN); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_ENTER_WOWL); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_EXIT_WOWL); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_SET_KEY); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_REMOVE_KEY); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_GET_STATS); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_GET_CNTRYCODE); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_SET_CNTRYCODE); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_CHANGE_CNTRYCODE); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_BTC_SIGNALEVENT); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_BTC_SETCONFIG); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_BTC_GETCONFIG); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_SET_CFGPRIVACY); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_NEIGHBOR_REPORTREQ); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_DBG_READREG); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_DBG_WRITEREG); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_DBG_READMEM); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_DBG_WRITEMEM); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_OPEN_SESSION); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_CLOSE_SESSION); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_SET_HOSTOFFLOAD); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_SET_GTKOFFLOAD); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_GET_GTKOFFLOAD); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_SET_POWERPARAMS); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_ABORT_MACSCAN); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_REGISTER_MGMTFR); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_DEREGISTER_MGMTFR); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_REMAIN_ONCHAN); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_SEND_ACTION); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_CANCEL_REMAIN_ONCHAN); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_CONFIG_RXPFIL); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_CONFIG_SUSPENDIND); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_CONFIG_RESUMEREQ); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_SET_MAXTXPOW); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_SET_TXPOW); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_SET_TMLEVEL); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_CAPS_EXCH); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_DISABLE_CAP); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_GET_DEFCCNV); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_GET_CURCC); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_RESET_PW5G); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_UPDATE_RP5G); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_SET_ROAMIBAND); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_GET_ROAMIBAND); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_UPDATE_RSSIDIFF); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_UPDATE_IMMRSSIDIFF); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_UPDATE_FTENABLED); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_UPDATE_WESMODE); - CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_SET_SCANCTRL); - - default: - return( "UNKNOWN" ); - break; - } -} -static tANI_U8* smeTraceGetCommandString( tANI_U32 command ) -{ - switch(command) - { - CASE_RETURN_STRING(eSmeNoCommand); - CASE_RETURN_STRING(eSmeDropCommand); - CASE_RETURN_STRING(eSmeCsrCommandMask); - CASE_RETURN_STRING(eSmeCommandScan); - CASE_RETURN_STRING(eSmeCommandRoam); - CASE_RETURN_STRING(eSmeCommandWmStatusChange); - CASE_RETURN_STRING(eSmeCommandSetKey); - CASE_RETURN_STRING(eSmeCommandRemoveKey); - CASE_RETURN_STRING(eSmeCommandAddStaSession); - CASE_RETURN_STRING(eSmeCommandDelStaSession); - CASE_RETURN_STRING(eSmePmcCommandMask); - CASE_RETURN_STRING(eSmeCommandEnterImps); - CASE_RETURN_STRING(eSmeCommandExitImps); - CASE_RETURN_STRING(eSmeCommandEnterBmps); - CASE_RETURN_STRING(eSmeCommandExitBmps); - CASE_RETURN_STRING(eSmeCommandEnterUapsd); - CASE_RETURN_STRING(eSmeCommandExitUapsd); - CASE_RETURN_STRING(eSmeCommandEnterWowl); - CASE_RETURN_STRING(eSmeCommandExitWowl); - CASE_RETURN_STRING(eSmeCommandEnterStandby); - CASE_RETURN_STRING(eSmeQosCommandMask); - CASE_RETURN_STRING(eSmeCommandAddTs); - CASE_RETURN_STRING(eSmeCommandDelTs); -#ifdef FEATURE_OEM_DATA_SUPPORT - CASE_RETURN_STRING(eSmeCommandOemDataReq); -#endif - CASE_RETURN_STRING(eSmeCommandRemainOnChannel); - CASE_RETURN_STRING(eSmeCommandNoAUpdate); - default: - return( "UNKNOWN" ); - break; - } -} -static void smeTraceDump(tpAniSirGlobal pMac, tpvosTraceRecord pRecord, - tANI_U16 recIndex) -{ - if (TRACE_CODE_SME_COMMAND == pRecord->code) - { - smsLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s(0x%x)", recIndex, - pRecord->time, pRecord->session, "SME COMMAND:", - smeTraceGetCommandString(pRecord->data), pRecord->data ); - } - else - { - smsLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s(0x%x)", recIndex, - pRecord->time, pRecord->session, "RX HDD MSG:", - smeTraceGetRxMsgString(pRecord->code), pRecord->data ); - } -} - -void smeTraceInit(tpAniSirGlobal pMac) -{ - vosTraceRegister(VOS_MODULE_ID_SME, (tpvosTraceCb)&smeTraceDump); -} -#endif diff --git a/drivers/staging/prima/CORE/SYS/common/src/wlan_qct_sys.c b/drivers/staging/prima/CORE/SYS/common/src/wlan_qct_sys.c index 78c5a5df2ee..e39613d3598 100644 --- a/drivers/staging/prima/CORE/SYS/common/src/wlan_qct_sys.c +++ b/drivers/staging/prima/CORE/SYS/common/src/wlan_qct_sys.c @@ -336,13 +336,7 @@ VOS_STATUS sysMcProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg ) VOS_STATUS vosStatus = VOS_STATUS_SUCCESS; v_VOID_t *hHal; - if (NULL == pMsg) - { - VOS_ASSERT(0); - VOS_TRACE(VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR, - "%s: NULL pointer to vos_msg_t", __func__); - return VOS_STATUS_E_INVAL; - } + VOS_ASSERT( pMsg ); // All 'new' SYS messages are identified by a cookie in the reserved // field of the message as well as the message type. This prevents @@ -468,13 +462,7 @@ VOS_STATUS sysTxProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg ) { VOS_STATUS vosStatus = VOS_STATUS_SUCCESS; - if (NULL == pMsg) - { - VOS_ASSERT(0); - VOS_TRACE(VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR, - "%s: NULL pointer to vos_msg_t", __func__); - return VOS_STATUS_E_INVAL; - } + VOS_ASSERT( pMsg ); // All 'new' SYS messages are identified by a cookie in the reserved // field of the message as well as the message type. This prevents @@ -545,13 +533,7 @@ VOS_STATUS sysRxProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg ) { VOS_STATUS vosStatus = VOS_STATUS_SUCCESS; - if (NULL == pMsg) - { - VOS_ASSERT(0); - VOS_TRACE(VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR, - "%s: NULL pointer to vos_msg_t", __func__); - return VOS_STATUS_E_INVAL; - } + VOS_ASSERT( pMsg ); // All 'new' SYS messages are identified by a cookie in the reserved // field of the message as well as the message type. This prevents diff --git a/drivers/staging/prima/CORE/SYS/legacy/src/platform/src/VossWrapper.c b/drivers/staging/prima/CORE/SYS/legacy/src/platform/src/VossWrapper.c index bf48bc7f50b..be04bb9e2ce 100644 --- a/drivers/staging/prima/CORE/SYS/legacy/src/platform/src/VossWrapper.c +++ b/drivers/staging/prima/CORE/SYS/legacy/src/platform/src/VossWrapper.c @@ -331,22 +331,7 @@ v_UINT_t tx_timer_create_intern_debug( v_PVOID_t pMacGlobal, TX_TIMER *timer_ptr { VOS_STATUS status; - if (NULL == expiration_function) - { - VOS_TRACE(VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR, - "NULL timer expiration"); - VOS_ASSERT(0); - return TX_TIMER_ERROR; - } - - if(NULL == name_ptr) - { - - VOS_TRACE(VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR, - "NULL name pointer for timer"); - VOS_ASSERT(0); - return TX_TIMER_ERROR; - } + VOS_ASSERT((NULL != expiration_function) && (NULL != name_ptr)); if (!initScheduleTimeInTicks) return TX_TICK_ERROR; @@ -404,6 +389,7 @@ v_UINT_t tx_timer_create_intern( v_PVOID_t pMacGlobal, TX_TIMER *timer_ptr, { VOS_STATUS status; + VOS_ASSERT((NULL != expiration_function) && (NULL != name_ptr)); if((NULL == name_ptr) || (NULL == expiration_function)) return TX_TIMER_ERROR; diff --git a/drivers/staging/prima/CORE/SYS/legacy/src/system/src/macInitApi.c b/drivers/staging/prima/CORE/SYS/legacy/src/system/src/macInitApi.c index ea9f30541eb..efc327e1645 100644 --- a/drivers/staging/prima/CORE/SYS/legacy/src/system/src/macInitApi.c +++ b/drivers/staging/prima/CORE/SYS/legacy/src/system/src/macInitApi.c @@ -132,6 +132,12 @@ tSirRetStatus macStart(tHalHandle hHal, void* pHalMacStartParams) do { + +#if defined(TRACE_RECORD) + //Enable Tracing + macTraceInit(pMac); +#endif + if (!HAL_STATUS_SUCCESS(palAllocateMemory(pMac->hHdd, ((void *)&pMac->pResetMsg), sizeof(tSirMbMsg)))) { sysLog(pMac, LOGE, FL("pMac->pResetMsg is NULL\n")); diff --git a/drivers/staging/prima/CORE/SYS/legacy/src/utils/src/logApi.c b/drivers/staging/prima/CORE/SYS/legacy/src/utils/src/logApi.c index 14cf295e2b4..1965a97aea5 100644 --- a/drivers/staging/prima/CORE/SYS/legacy/src/utils/src/logApi.c +++ b/drivers/staging/prima/CORE/SYS/legacy/src/utils/src/logApi.c @@ -151,7 +151,7 @@ void logDbg(tpAniSirGlobal pMac, tANI_U8 modId, tANI_U32 debugLevel, const char #endif } -VOS_TRACE_LEVEL getVosDebugLevel(tANI_U32 debugLevel) +static inline VOS_TRACE_LEVEL getVosDebugLevel(tANI_U32 debugLevel) { switch(debugLevel) { @@ -181,11 +181,10 @@ static inline VOS_MODULE_ID getVosModuleId(tANI_U8 modId) case SIR_HAL_MODULE_ID: case SIR_PHY_MODULE_ID: return VOS_MODULE_ID_WDA; - case SIR_PMM_MODULE_ID: - return VOS_MODULE_ID_PMC; case SIR_LIM_MODULE_ID: case SIR_SCH_MODULE_ID: + case SIR_PMM_MODULE_ID: case SIR_CFG_MODULE_ID: case SIR_MNT_MODULE_ID: case SIR_DPH_MODULE_ID: diff --git a/drivers/staging/prima/CORE/SYS/legacy/src/utils/src/macTrace.c b/drivers/staging/prima/CORE/SYS/legacy/src/utils/src/macTrace.c index 8b7159bc289..70efdaceaaf 100644 --- a/drivers/staging/prima/CORE/SYS/legacy/src/utils/src/macTrace.c +++ b/drivers/staging/prima/CORE/SYS/legacy/src/utils/src/macTrace.c @@ -62,9 +62,12 @@ #include "macTrace.h" #include "wlan_qct_wda.h" -#include "vos_trace.h" + #ifdef TRACE_RECORD +static tTraceRecord gTraceTbl[MAX_TRACE_RECORDS]; +static tTraceData gTraceData; +static tpTraceCb traceCBTable[VOS_MODULE_ID_MAX]; @@ -529,6 +532,8 @@ tANI_U8* macTraceGetWdaMsgString( tANI_U16 wdaMsg ) } } + + tANI_U8* macTraceGetLimMsgString( tANI_U16 limMsg ) { switch( limMsg ) @@ -593,6 +598,9 @@ tANI_U8* macTraceGetLimMsgString( tANI_U16 limMsg ) } } + + + tANI_U8* macTraceGetCfgMsgString( tANI_U16 cfgMsg ) { switch( cfgMsg ) @@ -630,21 +638,153 @@ tANI_U8* macTraceGetModuleString( tANI_U8 moduleId ) //return gVosTraceInfo[moduleId].moduleNameStr; } + + + + + + + + + +void macTraceInit(tpAniSirGlobal pMac) +{ + tANI_U8 i; + gTraceData.head = INVALID_TRACE_ADDR; + gTraceData.tail = INVALID_TRACE_ADDR; + gTraceData.num = 0; + gTraceData.enable = TRUE; + gTraceData.dumpCount = DEFAULT_TRACE_DUMP_COUNT; + gTraceData.numSinceLastDump = 0; + + for(i=0; i<VOS_MODULE_ID_MAX; i++) + traceCBTable[i] = NULL; + +} + + + + + void macTraceReset(tpAniSirGlobal pMac) { } + void macTrace(tpAniSirGlobal pMac, tANI_U8 code, tANI_U8 session, tANI_U32 data) { //Today macTrace is being invoked by PE only, need to remove this function once PE is migrated to using new trace API. macTraceNew(pMac, VOS_MODULE_ID_PE, code, session, data); + +#if 0 + tpTraceRecord rec = NULL; + + //limLog(pMac, LOGE, "mac Trace code: %d, data: %x, head: %d, tail: %d\n", code, data, gTraceData.head, gTraceData.tail); + + if(!gTraceData.enable) + return; + gTraceData.num++; + + if (gTraceData.head == INVALID_TRACE_ADDR) + { + /* first record */ + gTraceData.head = 0; + gTraceData.tail = 0; + } + else + { + /* queue is not empty */ + tANI_U32 tail = gTraceData.tail + 1; + + if (tail == MAX_TRACE_RECORDS) + tail = 0; + + if (gTraceData.head == tail) + { + /* full */ + if (++gTraceData.head == MAX_TRACE_RECORDS) + gTraceData.head = 0; + } + + gTraceData.tail = tail; + } + + rec = &gTraceTbl[gTraceData.tail]; + rec->code = code; + rec->session = session; + rec->data = data; + rec->time = vos_timer_get_system_time(); + rec->module = VOS_MODULE_ID_PE; + gTraceData.numSinceLastDump ++; + + if(gTraceData.numSinceLastDump == gTraceData.dumpCount) + { + limLog(pMac, LOGE, "Trace Dump last %d traces\n", gTraceData.dumpCount); + macTraceDumpAll(pMac, 0, 0, gTraceData.dumpCount); + gTraceData.numSinceLastDump = 0; + } + #endif + } + + void macTraceNew(tpAniSirGlobal pMac, tANI_U8 module, tANI_U8 code, tANI_U8 session, tANI_U32 data) { - vos_trace(module, code, session, data); + tpTraceRecord rec = NULL; + + //limLog(pMac, LOGE, "mac Trace code: %d, data: %x, head: %d, tail: %d\n", code, data, gTraceData.head, gTraceData.tail); + + if(!gTraceData.enable) + return; + //If module is not registered, don't record for that module. + if(traceCBTable[module] == NULL) + return; + pe_AcquireGlobalLock( &pMac->lim ); + + gTraceData.num++; + + if (gTraceData.head == INVALID_TRACE_ADDR) + { + /* first record */ + gTraceData.head = 0; + gTraceData.tail = 0; + } + else + { + /* queue is not empty */ + tANI_U32 tail = gTraceData.tail + 1; + + if (tail == MAX_TRACE_RECORDS) + tail = 0; + + if (gTraceData.head == tail) + { + /* full */ + if (++gTraceData.head == MAX_TRACE_RECORDS) + gTraceData.head = 0; + } + + gTraceData.tail = tail; + } + + rec = &gTraceTbl[gTraceData.tail]; + rec->code = code; + rec->session = session; + rec->data = data; + rec->time = vos_timer_get_system_time(); + rec->module = module; + gTraceData.numSinceLastDump ++; + pe_ReleaseGlobalLock( &pMac->lim ); + } + + + + + + tANI_U8* macTraceMsgString(tpAniSirGlobal pMac, tANI_U32 msgType) { tANI_U16 msgId = (tANI_U16)MAC_TRACE_GET_MSG_ID(msgType); @@ -667,4 +807,88 @@ tANI_U8* macTraceMsgString(tpAniSirGlobal pMac, tANI_U32 msgType) } } + + + + + +void macTraceDumpAll(tpAniSirGlobal pMac, tANI_U8 code, tANI_U8 session, tANI_U32 count) +{ + tpTraceRecord pRecord; + tANI_S32 i, tail; + + + if(!gTraceData.enable) + { + VOS_TRACE( VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR, "Tracing Disabled \n"); + return; + } + + VOS_TRACE( VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR, + "Total Records: %d, Head: %d, Tail: %d\n", gTraceData.num, gTraceData.head, gTraceData.tail); + + pe_AcquireGlobalLock( &pMac->lim ); + if (gTraceData.head != INVALID_TRACE_ADDR) + { + + i = gTraceData.head; + tail = gTraceData.tail; + + if (count) + { + if (count > gTraceData.num) + count = gTraceData.num; + if (count > MAX_TRACE_RECORDS) + count = MAX_TRACE_RECORDS; + if(tail >= (count + 1)) + { + i = tail - count + 1; + } + else + { + i = MAX_TRACE_RECORDS - ((count + 1) - tail); + } + } + + pRecord = &gTraceTbl[i]; + + for (;;) + { + if ( (code == 0 || (code == pRecord->code)) && + (traceCBTable[pRecord->module] != NULL)) + traceCBTable[pRecord->module](pMac, pRecord, (tANI_U16)i); + + if (i == tail) + break; + i += 1; + + if (i == MAX_TRACE_RECORDS) + { + i = 0; + pRecord = &gTraceTbl[0]; + } + else + pRecord += 1; + } + gTraceData.numSinceLastDump = 0; + + } + pe_ReleaseGlobalLock( &pMac->lim ); + +} + + +void macTraceCfg(tpAniSirGlobal pMac, tANI_U32 enable, tANI_U32 dumpCount, tANI_U32 code, tANI_U32 session) +{ + gTraceData.enable = (tANI_U8)enable; + gTraceData.dumpCount= (tANI_U16)dumpCount; + gTraceData.numSinceLastDump = 0; +} + +void macTraceRegister( tpAniSirGlobal pMac, VOS_MODULE_ID moduleId, tpTraceCb traceCb) +{ + traceCBTable[moduleId] = traceCb; +} + + #endif diff --git a/drivers/staging/prima/CORE/SYS/legacy/src/utils/src/utilsParser.c b/drivers/staging/prima/CORE/SYS/legacy/src/utils/src/utilsParser.c index f70e657f7ef..d658e19cfeb 100644 --- a/drivers/staging/prima/CORE/SYS/legacy/src/utils/src/utilsParser.c +++ b/drivers/staging/prima/CORE/SYS/legacy/src/utils/src/utilsParser.c @@ -489,7 +489,7 @@ void ConvertWMMTSPEC(tpAniSirGlobal pMac, pOld->tsinfo.traffic.psb = (tANI_U16)pNew->psb; pOld->tsinfo.traffic.userPrio = (tANI_U16)pNew->user_priority; pOld->tsinfo.traffic.ackPolicy = (tANI_U16)pNew->tsinfo_ack_pol; - pOld->nomMsduSz = (pNew->fixed << 15) | pNew->size; + pOld->nomMsduSz = pNew->size; pOld->maxMsduSz = pNew->max_msdu_size; pOld->minSvcInterval = pNew->min_service_int; pOld->maxSvcInterval = pNew->max_service_int; diff --git a/drivers/staging/prima/CORE/TL/inc/wlan_qct_tl.h b/drivers/staging/prima/CORE/TL/inc/wlan_qct_tl.h index 7dbb4e51197..ffdab16bc69 100644 --- a/drivers/staging/prima/CORE/TL/inc/wlan_qct_tl.h +++ b/drivers/staging/prima/CORE/TL/inc/wlan_qct_tl.h @@ -920,53 +920,6 @@ WLANTL_Close v_PVOID_t pvosGCtx ); -/*=========================================================================== - - FUNCTION WLANTL_StartForwarding - - DESCRIPTION - - This function is used to ask serialization through TX thread of the - cached frame forwarding (if statation has been registered in the mean while) - or flushing (if station has not been registered by the time) - - In case of forwarding, upper layer is only required to call WLANTL_RegisterSTAClient() - and doesn't need to call this function explicitly. TL will handle this inside - WLANTL_RegisterSTAClient(). - - In case of flushing, upper layer is required to call this function explicitly - - DEPENDENCIES - - TL must have been initialized before this gets called. - - - PARAMETERS - - ucSTAId: station id - - RETURN VALUE - - The result code associated with performing the operation - Please check return values of vos_tx_mq_serialize. - - SIDE EFFECTS - If TL was asked to perform WLANTL_CacheSTAFrame() in WLANTL_RxFrames(), - either WLANTL_RegisterSTAClient() or this function must be called - within reasonable time. Otherwise, TL will keep cached vos buffer until - one of this function is called, and may end up with system buffer exhasution. - - It's an upper layer's responsibility to call this function in case of - flushing - -============================================================================*/ -VOS_STATUS -WLANTL_StartForwarding -( - v_U8_t ucSTAId, - v_U8_t ucUcastSig, - v_U8_t ucBcastSig -); /*---------------------------------------------------------------------------- INTERACTION WITH HDD @@ -1948,44 +1901,6 @@ WLANTL_McProcessMsg ); /*========================================================================== - FUNCTION WLANTL_RxProcessMsg - - DESCRIPTION - Called by VOSS when a message was serialized for TL through the - rx thread/task. - - DEPENDENCIES - The TL must be initialized before this function can be called. - - PARAMETERS - - IN - pvosGCtx: pointer to the global vos context; a handle to TL's - control block can be extracted from its context - message: type and content of the message - - - RETURN VALUE - The result code associated with performing the operation - - VOS_STATUS_E_INVAL: invalid input parameters - VOS_STATUS_E_FAULT: pointer to TL cb is NULL ; access would cause a - page fault - VOS_STATUS_SUCCESS: Everything is good :) - - Other values can be returned as a result of a function call, please check - corresponding API for more info. - SIDE EFFECTS - -============================================================================*/ -VOS_STATUS -WLANTL_RxProcessMsg -( - v_PVOID_t pvosGCtx, - vos_msg_t* message -); - -/*========================================================================== FUNCTION WLANTL_McFreeMsg DESCRIPTION @@ -2814,6 +2729,7 @@ WLANTL_GetSTALinkCapacity ); /*=========================================================================== +======= FUNCTION WLANTL_TxThreadDebugHandler DESCRIPTION @@ -2827,12 +2743,13 @@ WLANTL_GetSTALinkCapacity PARAMETERS IN - pvosGCtx: Pointer to the global vos context; a handle to TL's + pvosGCtx: pointer to the global vos context; a handle to TL's or WDA's control block can be extracted from its context - RETURN VALUE None + RETURN VALUE None SIDE EFFECTS + ============================================================================*/ v_VOID_t diff --git a/drivers/staging/prima/CORE/TL/src/wlan_qct_tl.c b/drivers/staging/prima/CORE/TL/src/wlan_qct_tl.c index 9e6f0bafa43..7c2eccfc28f 100644 --- a/drivers/staging/prima/CORE/TL/src/wlan_qct_tl.c +++ b/drivers/staging/prima/CORE/TL/src/wlan_qct_tl.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2014, The Linux Foundation. All rights reserved. + * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -1007,10 +1007,10 @@ WLANTL_StartForwarding vos_mem_zero( &sMessage, sizeof(vos_msg_t) ); uData = ucSTAId | (ucUcastSig << 8 ) | (ucBcastSig << 16); - sMessage.bodyval = uData; - sMessage.type = WLANTL_RX_FWD_CACHED; + sMessage.bodyptr = (v_PVOID_t)uData; + sMessage.type = WLANTL_TX_FWD_CACHED; - return vos_rx_mq_serialize(VOS_MQ_ID_TL, &sMessage); + return vos_tx_mq_serialize(VOS_MQ_ID_TL, &sMessage); } /* WLANTL_StartForwarding() */ @@ -1058,7 +1058,7 @@ void WLANTL_AssocFailed(v_U8_t staId) if(!VOS_IS_STATUS_SUCCESS(WLANTL_StartForwarding(staId,0,0))) { VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, - " %s fails to start forwarding (staId %d)", __func__, staId); + " %s fails to start forwarding", __func__); } } @@ -1327,20 +1327,6 @@ WLANTL_RegisterSTAClient pClientSTA->vosAMSDUChainRoot = NULL; - /* Reorder LOCK - * During handle normal RX frame within RX thread, - * if MC thread try to preempt, ADDBA, DELBA, TIMER - * Context should be protected from race */ - for (ucTid = 0; ucTid < WLAN_MAX_TID ; ucTid++) - { - if (!VOS_IS_STATUS_SUCCESS( - vos_lock_init(&pClientSTA->atlBAReorderInfo[ucTid].reorderLock))) - { - TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, - "Lock Init Fail")); - return VOS_STATUS_E_FAILURE; - } - } /*-------------------------------------------------------------------- Stats info --------------------------------------------------------------------*/ @@ -1504,16 +1490,13 @@ WLANTL_ClearSTAClient { TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, "WLAN TL:Station was not previously registered on WLANTL_ClearSTAClient")); - /* Clean packets cached for the STA */ - WLANTL_StartForwarding(ucSTAId,0,0); return VOS_STATUS_E_EXISTS; } /* Delete BA sessions on all TID's */ - for (ucIndex = 0; ucIndex < WLAN_MAX_TID ; ucIndex++) + for ( ucIndex = 0; ucIndex < WLAN_MAX_TID ; ucIndex++) { - WLANTL_BaSessionDel(pvosGCtx, ucSTAId, ucIndex); - vos_lock_destroy(&pTLCb->atlSTAClients[ucSTAId]->atlBAReorderInfo[ucIndex].reorderLock); + WLANTL_BaSessionDel (pvosGCtx, ucSTAId, ucIndex); } #ifdef FEATURE_WLAN_TDLS @@ -1878,6 +1861,7 @@ WLANTL_STAPktPending { WLANTL_CbType* pTLCb = NULL; WLANTL_STAClientType* pClientSTA = NULL; + vos_msg_t vosMsg; /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/ VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO, @@ -1946,6 +1930,16 @@ WLANTL_STAPktPending To avoid race condition, serialize the updation of AC and AC mask through WLANTL_TX_STAID_AC_IND message. -----------------------------------------------------------------------*/ +#ifdef FETURE_WLAN_TDLS + if ((WLAN_STA_SOFTAP != pClientSTA->wSTADesc.wSTAType) && + !(vos_concurrent_sessions_running()) && + !pTLCb->ucTdlsPeerCount) + { +#else + if ((WLAN_STA_SOFTAP != pClientSTA->wSTADesc.wSTAType) && + !(vos_concurrent_sessions_running())) + { +#endif pClientSTA->aucACMask[ucAc] = 1; @@ -1972,6 +1966,15 @@ WLANTL_STAPktPending "WLAN TL:Request to send but condition not met. Res: %d,Suspend: %d", pTLCb->uResCount, pTLCb->ucTxSuspended ); } + } + else + { + vosMsg.reserved = 0; + vosMsg.bodyval = 0; + vosMsg.bodyval = (ucAc | (ucSTAId << WLANTL_STAID_OFFSET)); + vosMsg.type = WLANTL_TX_STAID_AC_IND; + return vos_tx_mq_serialize( VOS_MQ_ID_TL, &vosMsg); + } return VOS_STATUS_SUCCESS; }/* WLANTL_STAPktPending */ @@ -3857,11 +3860,7 @@ WLANTL_GetFrames WDA_TLI_PROCESS_FRAME_LEN( pTLCb->tlMgmtFrmClient.vosPendingDataBuff, usPktLen, uResLen, uTotalPktLen); - if (usPktLen > WLANTL_MAX_ALLOWED_LEN) - { - usPktLen = WLANTL_MAX_ALLOWED_LEN; - VOS_ASSERT(0); - } + VOS_ASSERT(usPktLen <= WLANTL_MAX_ALLOWED_LEN); if ( ( pTLCb->uResCount > uResLen ) && ( uRemaining > uTotalPktLen ) && @@ -3899,11 +3898,7 @@ WLANTL_GetFrames WDA_TLI_PROCESS_FRAME_LEN( pTLCb->tlBAPClient.vosPendingDataBuff, usPktLen, uResLen, uTotalPktLen); - if (usPktLen > WLANTL_MAX_ALLOWED_LEN) - { - usPktLen = WLANTL_MAX_ALLOWED_LEN; - VOS_ASSERT(0); - } + VOS_ASSERT(usPktLen <= WLANTL_MAX_ALLOWED_LEN); if ( ( pTLCb->uResCount > (uResLen + WDA_TLI_MIN_RES_MF ) ) && ( uRemaining > uTotalPktLen )) @@ -4003,11 +3998,7 @@ WLANTL_GetFrames { WDA_TLI_PROCESS_FRAME_LEN( vosTempBuf, usPktLen, uResLen, uTotalPktLen); - if (usPktLen > WLANTL_MAX_ALLOWED_LEN) - { - usPktLen = WLANTL_MAX_ALLOWED_LEN; - VOS_ASSERT(0); - } + VOS_ASSERT( usPktLen <= WLANTL_MAX_ALLOWED_LEN); TLLOG4(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO_LOW, "WLAN TL:Resources needed by frame: %d", uResLen)); @@ -4155,11 +4146,7 @@ WLANTL_GetFrames { WDA_TLI_PROCESS_FRAME_LEN( vosTempBuf, usPktLen, uResLen, uTotalPktLen); - if (usPktLen > WLANTL_MAX_ALLOWED_LEN) - { - usPktLen = WLANTL_MAX_ALLOWED_LEN; - VOS_ASSERT(0); - } + VOS_ASSERT( usPktLen <= WLANTL_MAX_ALLOWED_LEN); TLLOG4(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO_LOW, "WLAN TL:Resources needed by frame: %d", uResLen)); @@ -4253,14 +4240,8 @@ WLANTL_GetFrames vos_pkt_walk_packet_chain( vosRoot, &vosDataBuff, 1/*true*/ ); *pvosDataBuff = vosDataBuff; - if (pbUrgent) - { - *pbUrgent = pTLCb->bUrgent; - } - else - { - VOS_ASSERT( pbUrgent ); - } + VOS_ASSERT( pbUrgent ); + *pbUrgent = pTLCb->bUrgent; return ucResult; }/* WLANTL_GetFrames */ @@ -4511,28 +4492,12 @@ WLANTL_CacheSTAFrame { /*this is the first frame that we are caching */ pClientSTA->vosBegCachedFrame = vosTempBuff; - - pClientSTA->tlCacheInfo.cacheInitTime = vos_timer_get_system_time(); - pClientSTA->tlCacheInfo.cacheDoneTime = - pClientSTA->tlCacheInfo.cacheInitTime; - pClientSTA->tlCacheInfo.cacheSize = 1; - } else { /*this is a subsequent frame that we are caching: chain to the end */ vos_pkt_chain_packet(pClientSTA->vosEndCachedFrame, vosTempBuff, VOS_TRUE); - - pClientSTA->tlCacheInfo.cacheDoneTime = vos_timer_get_system_time(); - pClientSTA->tlCacheInfo.cacheSize ++; - - if (pClientSTA->tlCacheInfo.cacheSize % WLANTL_CACHE_TRACE_WATERMARK == 0) - { - VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, - "%s: Cache High watermark for staid:%d (%d)", - __func__,ucSTAId, pClientSTA->tlCacheInfo.cacheSize); - } } pClientSTA->vosEndCachedFrame = vosTempBuff; }/*else new packet*/ @@ -4722,8 +4687,6 @@ done: -------------------------------------------------------------------------*/ pClientSTA->vosBegCachedFrame = NULL; pClientSTA->vosEndCachedFrame = NULL; - pClientSTA->tlCacheInfo.cacheSize = 0; - pClientSTA->tlCacheInfo.cacheClearTime = vos_timer_get_system_time(); /*----------------------------------------------------------------------- After all the init is complete we can mark the existance flag @@ -4957,6 +4920,9 @@ WLANTL_ProcessBAPFrame } /* Send packet to BAP client*/ + + VOS_ASSERT(pTLCb->tlBAPClient.pfnTlBAPRx != NULL); + if ( VOS_STATUS_SUCCESS != WDA_DS_TrimRxPacketInfo( vosTempBuff ) ) { TLLOGW(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_WARN, @@ -4986,10 +4952,6 @@ WLANTL_ProcessBAPFrame pTLCb->tlBAPClient.pfnTlBAPRx( vos_get_global_context(VOS_MODULE_ID_TL,pTLCb), vosTempBuff, (WLANTL_BAPFrameEnumType)usType ); - else - { - VOS_ASSERT(0); - } return VOS_TRUE; } @@ -5297,11 +5259,6 @@ WLANTL_RxFrames return VOS_STATUS_E_INVAL; } - /*------------------------------------------------------------------------ - Popolaute timestamp as the time when packet arrives - ---------------------------------------------------------------------- */ - vosDataBuff->timestamp = vos_timer_get_system_ticks(); - /*------------------------------------------------------------------------ Extract TL control block ------------------------------------------------------------------------*/ @@ -5551,25 +5508,16 @@ WLANTL_RxFrames #endif if ((( 0 == pClientSTA->ucExists ) || - (0 != pClientSTA->ucRxBlocked) || - ( WLANTL_STA_DISCONNECTED == pClientSTA->tlState)) && + ( (0 != pClientSTA->ucRxBlocked) + ///@@@: xg: no checking in SOFTAP for now, will revisit later + && (WLAN_STA_SOFTAP != pClientSTA->wSTADesc.wSTAType) + ) || + ( WLANTL_STA_DISCONNECTED == pClientSTA->tlState)) && /*Dont buffer Broadcast/Multicast frames. If AP transmits bursts of Broadcast/Multicast data frames, * libra buffers all Broadcast/Multicast packets after authentication with AP, * So it will lead to low resource condition in Rx Data Path.*/ - (WDA_IS_RX_BCAST(pvBDHeader) == 0) && - /* Dont cache frames for SOFTAP */ - (WLAN_STA_SOFTAP != pClientSTA->wSTADesc.wSTAType)) + ((WDA_IS_RX_BCAST(pvBDHeader) == 0))) { - if( WDA_IsSelfSTA(pvosGCtx,ucSTAId)) - { - //drop packet for Self STA index - TLLOGW(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_WARN, - "%s: Packet dropped for Self STA with staId %d ", __func__, ucSTAId )); - - vos_pkt_return_packet(vosTempBuff); - vosTempBuff = vosDataBuff; - continue; - } uDPUSig = WDA_GET_RX_DPUSIG( pvBDHeader ); //Station has not yet been registered with TL - cache the frame TLLOGW(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_WARN, @@ -5832,6 +5780,7 @@ WLANTL_RxCachedFrames -------------------------------------------------------------------------*/ pClientSTA = pTLCb->atlSTAClients[ucSTAId]; + if ( NULL == pClientSTA ) { TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, @@ -5958,92 +5907,6 @@ WLANTL_RxCachedFrames }/* WLANTL_RxCachedFrames */ /*========================================================================== - FUNCTION WLANTL_RxProcessMsg - - DESCRIPTION - Called by VOSS when a message was serialized for TL through the - rx thread/task. - - DEPENDENCIES - The TL must be initialized before this function can be called. - - PARAMETERS - - IN - pvosGCtx: pointer to the global vos context; a handle to TL's - control block can be extracted from its context - message: type and content of the message - - - RETURN VALUE - The result code associated with performing the operation - - VOS_STATUS_E_INVAL: invalid input parameters - VOS_STATUS_E_FAULT: pointer to TL cb is NULL ; access would cause a - page fault - VOS_STATUS_SUCCESS: Everything is good :) - - Other values can be returned as a result of a function call, please check - corresponding API for more info. - SIDE EFFECTS - -============================================================================*/ -VOS_STATUS -WLANTL_RxProcessMsg -( - v_PVOID_t pvosGCtx, - vos_msg_t* message -) -{ - VOS_STATUS vosStatus = VOS_STATUS_SUCCESS; - v_U32_t uData; - v_U8_t ucSTAId; - v_U8_t ucUcastSig; - v_U8_t ucBcastSig; - - /*------------------------------------------------------------------------ - Sanity check - ------------------------------------------------------------------------*/ - if ( NULL == message ) - { - TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, - "WLAN TL:Invalid parameter sent on WLANTL_RxProcessMessage")); - return VOS_STATUS_E_INVAL; - } - - /*------------------------------------------------------------------------ - Process message - ------------------------------------------------------------------------*/ - TLLOG2(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO_HIGH, - "WLAN TL:Received message: %d through rx flow", message->type)); - - switch( message->type ) - { - - case WLANTL_RX_FWD_CACHED: - /*--------------------------------------------------------------------- - The data sent with the message has the following structure: - | 00 | ucBcastSignature | ucUcastSignature | ucSTAID | - each field above is one byte - ---------------------------------------------------------------------*/ - uData = message->bodyval; - ucSTAId = ( uData & 0x000000FF); - ucUcastSig = ( uData & 0x0000FF00)>>8; - ucBcastSig = (v_U8_t)(( uData & 0x00FF0000)>>16); - vosStatus = WLANTL_ForwardSTAFrames( pvosGCtx, ucSTAId, - ucUcastSig, ucBcastSig); - break; - - default: - /*no processing for now*/ - break; - } - - return VOS_STATUS_SUCCESS; -} - - -/*========================================================================== FUNCTION WLANTL_ResourceCB DESCRIPTION @@ -7712,16 +7575,15 @@ WLANTL_FwdPktToHDD wRxMetaInfo.ucUP = (v_U8_t)(STAMetaInfo & WLANTL_AC_MASK); wRxMetaInfo.ucDesSTAId = ucDesSTAId; - vosStatus = pClientSTA->pfnSTARx( pvosGCtx, vosDataBuff, ucDesSTAId, + vosStatus = pClientSTA->pfnSTARx( pvosGCtx, vosDataBuff, ucDesSTAId, &wRxMetaInfo ); - if ( VOS_STATUS_SUCCESS != vosStatus ) - { - TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + if ( VOS_STATUS_SUCCESS != vosStatus ) + { + TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, "WLAN TL: failed to send pkt to HDD \n")); - vos_pkt_return_packet(vosDataBuff); - - return vosStatus; - } + vos_pkt_return_packet(vosDataBuff); + return vosStatus; + } vosDataBuff = vosNextDataBuff; } return VOS_STATUS_SUCCESS; @@ -8488,6 +8350,13 @@ WLANTL_TxProcessMsg ) { VOS_STATUS vosStatus = VOS_STATUS_SUCCESS; + v_U32_t uData; + v_U8_t ucSTAId; + v_U8_t ucUcastSig; + v_U8_t ucBcastSig; + WLANTL_CbType* pTLCb = NULL; + WLANTL_STAClientType* pClientSTA = NULL; + WLANTL_ACEnumType ucAC; void (*callbackRoutine) (void *callbackContext); void *callbackContext; /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/ @@ -8518,6 +8387,45 @@ WLANTL_TxProcessMsg case WLANTL_TX_RES_NEEDED: vosStatus = WLANTL_GetTxResourcesCB( pvosGCtx ); break; + + case WLANTL_TX_FWD_CACHED: + /*--------------------------------------------------------------------- + The data sent with the message has the following structure: + | 00 | ucBcastSignature | ucUcastSignature | ucSTAID | + each field above is one byte + ---------------------------------------------------------------------*/ + uData = (v_U32_t)message->bodyptr; + ucSTAId = ( uData & 0x000000FF); + ucUcastSig = ( uData & 0x0000FF00)>>8; + ucBcastSig = (v_U8_t)(( uData & 0x00FF0000)>>16); + vosStatus = WLANTL_ForwardSTAFrames( pvosGCtx, ucSTAId, + ucUcastSig, ucBcastSig); + break; + case WLANTL_TX_STAID_AC_IND: + pTLCb = VOS_GET_TL_CB(pvosGCtx); + if ( NULL == pTLCb ) + { + TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "WLAN TL:Invalid TL pointer from pvosGCtx on WLANTL_STAPktPending")); + return VOS_STATUS_E_FAULT; + } + + ucAC = message->bodyval & WLANTL_AC_MASK; + ucSTAId = (v_U8_t)(message->bodyval >> WLANTL_STAID_OFFSET); + pClientSTA = pTLCb->atlSTAClients[ucSTAId]; + + if ( NULL == pClientSTA ) + { + TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "WLAN TL:Client Memory was not allocated on %s", __func__)); + return VOS_STATUS_E_FAILURE; + } + + pClientSTA->aucACMask[ucAC] = 1; + + vos_atomic_set_U8( &pClientSTA->ucPktPending, 1); + vosStatus = WDA_DS_StartXmit(pvosGCtx); + break; case WDA_DS_TX_START_XMIT: WLANTL_ClearTxXmitPending(pvosGCtx); @@ -9861,7 +9769,7 @@ WLAN_TLAPGetNextTxIds { WLANTL_CbType* pTLCb; v_U8_t ucACFilter = 1; - v_U8_t ucNextSTA ; + v_U8_t ucNextSTA = 0; // Motorola IKJB42MAIN-4103, are002, initialization v_BOOL_t isServed = TRUE; //current round has find a packet or not v_U8_t ucACLoopNum = WLANTL_AC_VO + 1; //number of loop to go v_U8_t uFlowMask; // TX FlowMask from WDA @@ -10266,7 +10174,7 @@ WLANTL_MgmtFrmRxDefaultCb /*========================================================================== - FUNCTION WLANTL_BAPRxDefaultCb + FUNCTION WLANTL_STARxDefaultCb DESCRIPTION Default BAP rx callback: asserts all the time. If this function gets @@ -10330,7 +10238,7 @@ WLANTL_STARxDefaultCb "WLAN TL: No registered STA client rx cb for STAID: %d dropping pkt", ucSTAId)); vos_pkt_return_packet(vosDataBuff); - return VOS_STATUS_SUCCESS; + return VOS_STATUS_E_FAILURE; }/*WLANTL_MgmtFrmRxDefaultCb*/ diff --git a/drivers/staging/prima/CORE/TL/src/wlan_qct_tl_ba.c b/drivers/staging/prima/CORE/TL/src/wlan_qct_tl_ba.c index c8f69540487..25579713242 100644 --- a/drivers/staging/prima/CORE/TL/src/wlan_qct_tl_ba.c +++ b/drivers/staging/prima/CORE/TL/src/wlan_qct_tl_ba.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2014, The Linux Foundation. All rights reserved. + * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -99,8 +99,6 @@ //#define WLANTL_REORDER_DEBUG_MSG_ENABLE #define WLANTL_BA_REORDERING_AGING_TIMER 30 /* 30 millisec */ #define WLANTL_BA_MIN_FREE_RX_VOS_BUFFER 0 /* RX VOS buffer low threshold */ -#define CSN_WRAP_AROUND_THRESHOLD 3000 /* CSN wrap around threshold */ - /*========================================================================== @@ -137,10 +135,6 @@ v_VOID_t WLANTL_ReorderingAgingTimerExpierCB v_U8_t opCode; WLANTL_RxMetaInfoType wRxMetaInfo; v_U32_t fwIdx = 0; - WDI_DS_RxMetaInfoType *pRxMetadata; - vos_pkt_t *pCurrent; - vos_pkt_t *pNext; - v_S15_t seq; /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ if(NULL == timerUdata) @@ -316,24 +310,6 @@ v_VOID_t WLANTL_ReorderingAgingTimerExpierCB return; } - pCurrent = vosDataBuff; - - while (pCurrent != NULL) - { - vos_pkt_walk_packet_chain(pCurrent, &pNext, VOS_FALSE); - - if (NULL == pNext) - { - /* This is the last packet, retrieve its sequence number */ - pRxMetadata = WDI_DS_ExtractRxMetaData(VOS_TO_WPAL_PKT(pCurrent)); - seq = WDA_GET_RX_REORDER_CUR_PKT_SEQ_NO(pRxMetadata); - } - pCurrent = pNext; - } - TLLOG1(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO, - "%s: Sending out Frame no: %d to HDD", __func__, seq)); - ReorderInfo->LastSN = seq; - if( WLAN_STA_SOFTAP == pClientSTA->wSTADesc.wSTAType) { WLANTL_FwdPktToHDD( expireHandle->pAdapter, vosDataBuff, ucSTAID); @@ -482,7 +458,8 @@ WLANTL_BaSessionAdd return VOS_STATUS_E_FAULT; } - pClientSTA = pTLCb->atlSTAClients[ucSTAId]; + pClientSTA = pTLCb->atlSTAClients[ucSTAId]; + if ( NULL == pClientSTA ) { TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, @@ -497,29 +474,22 @@ WLANTL_BaSessionAdd return VOS_STATUS_E_EXISTS; } - reorderInfo = &pClientSTA->atlBAReorderInfo[ucTid]; - if (!VOS_IS_STATUS_SUCCESS( - vos_lock_acquire(&reorderInfo->reorderLock))) - { - TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, - "%s: Release LOCK Fail", __func__)); - return VOS_STATUS_E_FAULT; - } /*------------------------------------------------------------------------ Verify that BA session was not already added ------------------------------------------------------------------------*/ - if ( 0 != reorderInfo->ucExists ) + if ( 0 != pClientSTA->atlBAReorderInfo[ucTid].ucExists ) { - reorderInfo->ucExists++; + pClientSTA->atlBAReorderInfo[ucTid].ucExists++; VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, "WLAN TL:BA session already exists on WLANTL_BaSessionAdd"); - vos_lock_release(&reorderInfo->reorderLock); return VOS_STATUS_E_EXISTS; } /*------------------------------------------------------------------------ Initialize new BA session ------------------------------------------------------------------------*/ + reorderInfo = &pClientSTA->atlBAReorderInfo[ucTid]; + for(idx = 0; idx < WLANTL_MAX_BA_SESSION; idx++) { if(VOS_TRUE == pTLCb->reorderBufferPool[idx].isAvailable) @@ -536,13 +506,12 @@ WLANTL_BaSessionAdd } - if (WLAN_STA_SOFTAP == pClientSTA->wSTADesc.wSTAType) + if( WLAN_STA_SOFTAP == pClientSTA->wSTADesc.wSTAType) { - if (WLANTL_MAX_BA_SESSION == idx) + if( WLANTL_MAX_BA_SESSION == idx) { VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, - "Number of Add BA request received more than allowed"); - vos_lock_release(&reorderInfo->reorderLock); + "Number of Add BA request received more than allowed \n"); return VOS_STATUS_E_NOSUPPORT; } } @@ -558,9 +527,17 @@ WLANTL_BaSessionAdd (v_PVOID_t)(&reorderInfo->timerUdata)); if(!VOS_IS_STATUS_SUCCESS(status)) { - TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, - "%s: Timer Init Fail", __func__)); - vos_lock_release(&reorderInfo->reorderLock); + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR,"Timer Init Fail")); + return status; + } + + /* Reorder LOCK + * During handle normal RX frame, if timer sxpier, abnormal race condition happen + * Frames should be protected from double handle */ + status = vos_lock_init(&reorderInfo->reorderLock); + if(!VOS_IS_STATUS_SUCCESS(status)) + { + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR,"Lock Init Fail")); return status; } @@ -578,18 +555,10 @@ WLANTL_BaSessionAdd pClientSTA->atlBAReorderInfo[ucTid].SSN = SSN; pClientSTA->atlBAReorderInfo[ucTid].sessionID = sessionID; pClientSTA->atlBAReorderInfo[ucTid].pendingFramesCount = 0; - pClientSTA->atlBAReorderInfo[ucTid].LastSN = SSN; TLLOG2(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO_HIGH, "WLAN TL:New BA session added for STA: %d TID: %d", ucSTAId, ucTid)); - if(!VOS_IS_STATUS_SUCCESS( - vos_lock_release(&reorderInfo->reorderLock))) - { - TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, - "%s: Release LOCK Fail", __func__)); - return VOS_STATUS_E_FAULT; - } return VOS_STATUS_SUCCESS; }/* WLANTL_BaSessionAdd */ @@ -640,6 +609,7 @@ WLANTL_BaSessionDel WLANTL_BAReorderType* reOrderInfo = NULL; WLANTL_RxMetaInfoType wRxMetaInfo; v_U32_t fwIdx = 0; + tANI_U8 lockRetryCnt = 0; /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ /*------------------------------------------------------------------------ @@ -769,6 +739,8 @@ WLANTL_BaSessionDel } } + vos_lock_release(&reOrderInfo->reorderLock); + /*------------------------------------------------------------------------ Delete reordering timer ------------------------------------------------------------------------*/ @@ -778,7 +750,6 @@ WLANTL_BaSessionDel if(!VOS_IS_STATUS_SUCCESS(vosStatus)) { TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR,"Timer stop fail: %d", vosStatus)); - vos_lock_release(&reOrderInfo->reorderLock); return vosStatus; } } @@ -806,7 +777,18 @@ WLANTL_BaSessionDel reOrderInfo->winSize = 0; reOrderInfo->SSN = 0; reOrderInfo->sessionID = 0; - reOrderInfo->LastSN = 0; + + while (vos_lock_destroy(&reOrderInfo->reorderLock) == VOS_STATUS_E_BUSY) + { + if( lockRetryCnt > 2) + { + TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "Unable to destroy reorderLock\n")); + break; + } + vos_sleep(1); + lockRetryCnt++; + } TLLOG2(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO_HIGH, "WLAN TL: BA session deleted for STA: %d TID: %d", @@ -817,7 +799,6 @@ WLANTL_BaSessionDel WLANTL_MAX_WINSIZE * sizeof(v_PVOID_t)); reOrderInfo->reorderBuffer->isAvailable = VOS_TRUE; - vos_lock_release(&reOrderInfo->reorderLock); return VOS_STATUS_SUCCESS; }/* WLANTL_BaSessionDel */ @@ -1146,39 +1127,13 @@ VOS_STATUS WLANTL_MSDUReorder // remember our current CI so that later we can tell if it advanced ucCIndexOrig = currentReorderInfo->ucCIndex; - switch(ucOpCode) + switch(ucOpCode) { case WLANTL_OPCODE_INVALID: /* Do nothing just pass through current frame */ break; case WLANTL_OPCODE_QCUR_FWDBUF: - if (currentReorderInfo->LastSN > CSN) - { - if ((currentReorderInfo->LastSN - CSN) < CSN_WRAP_AROUND_THRESHOLD) - { - //this frame is received after BA timer is expired, discard it - TLLOG1(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO, - "(QCUR_FWDBUF) dropping old frame, SN=%d LastSN=%d", - CSN, currentReorderInfo->LastSN)); - status = vos_pkt_return_packet(*vosDataBuff); - if (!VOS_IS_STATUS_SUCCESS(status)) - { - TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, - "(QCUR_FWDBUF) drop old frame fail %d", status)); - } - *vosDataBuff = NULL; - lockStatus = vos_lock_release(¤tReorderInfo->reorderLock); - if (!VOS_IS_STATUS_SUCCESS(lockStatus)) - { - TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, - "WLANTL_MSDUReorder, Release LOCK Fail")); - return lockStatus; - } - return status; - } - } - currentReorderInfo->LastSN = CSN; if(0 == currentReorderInfo->pendingFramesCount) { //This frame will be fwd'ed to the OS. The next slot is the one we expect next @@ -1292,32 +1247,6 @@ VOS_STATUS WLANTL_MSDUReorder break; case WLANTL_OPCODE_QCUR: - if (currentReorderInfo->LastSN > CSN) - { - if ((currentReorderInfo->LastSN - CSN) < CSN_WRAP_AROUND_THRESHOLD) - { - // this frame is received after BA timer is expired, so disard it - TLLOG1(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO, - "(QCUR) dropping old frame, SN=%d LastSN=%d", - CSN, currentReorderInfo->LastSN)); - status = vos_pkt_return_packet(*vosDataBuff); - if (!VOS_IS_STATUS_SUCCESS(status)) - { - TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, - "*** (QCUR) drop old frame fail %d", status)); - } - *vosDataBuff = NULL; - lockStatus = vos_lock_release(¤tReorderInfo->reorderLock); - if (!VOS_IS_STATUS_SUCCESS(lockStatus)) - { - TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, - "WLANTL_MSDUReorder, Release LOCK Fail")); - return lockStatus; - } - return status; - } - } - status = WLANTL_QueueCurrent(currentReorderInfo, vosDataBuff, ucSlotIdx); diff --git a/drivers/staging/prima/CORE/TL/src/wlan_qct_tli.h b/drivers/staging/prima/CORE/TL/src/wlan_qct_tli.h index 5b2119d2452..2c7d9eaf59d 100644 --- a/drivers/staging/prima/CORE/TL/src/wlan_qct_tli.h +++ b/drivers/staging/prima/CORE/TL/src/wlan_qct_tli.h @@ -252,7 +252,6 @@ when who what, where, why ((WLANTL_BT_AMP_TYPE_AR == usType) || (WLANTL_BT_AMP_TYPE_SEC == usType) || \ (WLANTL_BT_AMP_TYPE_LS_REQ == usType) || (WLANTL_BT_AMP_TYPE_LS_REP == usType)) -#define WLANTL_CACHE_TRACE_WATERMARK 100 /*--------------------------------------------------------------------------- TL signals for TX thread ---------------------------------------------------------------------------*/ @@ -265,8 +264,7 @@ typedef enum and TL is low on resources*/ WLANTL_TX_RES_NEEDED = 1, - /* Forwarding RX cached frames. This is not used anymore as it is - replaced by WLANTL_RX_FWD_CACHED in RX thread*/ + /* Forwarding RX cached frames */ WLANTL_TX_FWD_CACHED = 2, /* Serialized STAID AC Indication */ @@ -284,18 +282,6 @@ typedef enum WLANTL_TX_MAX }WLANTL_TxSignalsType; - -/*--------------------------------------------------------------------------- - TL signals for RX thread ----------------------------------------------------------------------------*/ -typedef enum -{ - - /* Forwarding RX cached frames */ - WLANTL_RX_FWD_CACHED = 0, - -}WLANTL_RxSignalsType; - /*--------------------------------------------------------------------------- STA Event type ---------------------------------------------------------------------------*/ @@ -467,8 +453,6 @@ typedef struct WLANTL_TIMER_EXPIER_UDATA_T timerUdata; WLANTL_REORDER_BUFFER_T *reorderBuffer; - - v_U16_t LastSN; }WLANTL_BAReorderType; @@ -482,17 +466,6 @@ typedef struct }WLANTL_UAPSDInfoType; /*--------------------------------------------------------------------------- - per-STA cache info ----------------------------------------------------------------------------*/ -typedef struct -{ - v_U16_t cacheSize; - v_TIME_t cacheInitTime; - v_TIME_t cacheDoneTime; - v_TIME_t cacheClearTime; -}WLANTL_CacheInfoType; - -/*--------------------------------------------------------------------------- STA Client type ---------------------------------------------------------------------------*/ typedef struct @@ -601,7 +574,7 @@ typedef struct /*Begining of the cached packets chain*/ vos_pkt_t* vosEndCachedFrame; - WLANTL_CacheInfoType tlCacheInfo; + /* LWM related fields */ //current station is slow. LWM mode is enabled. diff --git a/drivers/staging/prima/CORE/VOSS/inc/i_vos_packet.h b/drivers/staging/prima/CORE/VOSS/inc/i_vos_packet.h index b79aaff2a0a..58ef385f129 100644 --- a/drivers/staging/prima/CORE/VOSS/inc/i_vos_packet.h +++ b/drivers/staging/prima/CORE/VOSS/inc/i_vos_packet.h @@ -209,11 +209,7 @@ typedef struct vos_pkt_context_s vos_pkt_low_resource_info txDataLowResourceInfo; vos_pkt_low_resource_info txMgmtLowResourceInfo; - struct mutex rxReplenishListLock; - struct mutex rxRawFreeListLock; - struct mutex txDataFreeListLock; - struct mutex txMgmtFreeListLock; - + struct mutex mlock; /*Meta Information to be transported with the packet*/ WDI_DS_TxMetaInfoType txMgmtMetaInfo[VPKT_NUM_TX_MGMT_PACKETS]; WDI_DS_TxMetaInfoType txDataMetaInfo[VPKT_NUM_TX_DATA_PACKETS]; diff --git a/drivers/staging/prima/CORE/VOSS/inc/i_vos_trace.h b/drivers/staging/prima/CORE/VOSS/inc/i_vos_trace.h index e4add12f841..9f80a408f99 100644..100755 --- a/drivers/staging/prima/CORE/VOSS/inc/i_vos_trace.h +++ b/drivers/staging/prima/CORE/VOSS/inc/i_vos_trace.h @@ -86,13 +86,13 @@ --------------------------------------------------------------------------*/ void vos_trace_msg( VOS_MODULE_ID module, VOS_TRACE_LEVEL level, char *strFormat, ... ); -void vos_trace_hex_dump( VOS_MODULE_ID module, VOS_TRACE_LEVEL level, - void *data, int buf_len ); - void vos_trace_display(void); void vos_trace_setValue( VOS_MODULE_ID module, VOS_TRACE_LEVEL level, v_U8_t on ); +//Begin Motorola dcw476 4/17/13 IKJBXLINE-5577:changing wlan driver log level dynamically +void vos_trace_setValue_till_level( VOS_MODULE_ID module, VOS_TRACE_LEVEL level, v_U8_t on) ; +//END IKJBXLINE-5577 // VOS_TRACE is the macro invoked to add trace messages to code. See the // documenation for vos_trace_msg() for the parameters etc. for this function. @@ -105,10 +105,8 @@ void vos_trace_setValue( VOS_MODULE_ID module, VOS_TRACE_LEVEL level, v_U8_t on // without being bogged down by all the tracing in the code. #if defined( WLAN_DEBUG ) #define VOS_TRACE vos_trace_msg -#define VOS_TRACE_HEX_DUMP vos_trace_hex_dump #else -#define VOS_TRACE(arg...) -#define VOS_TRACE_HEX_DUMP(arg...) +#define VOS_TRACE(arg...) #endif diff --git a/drivers/staging/prima/CORE/VOSS/inc/vos_api.h b/drivers/staging/prima/CORE/VOSS/inc/vos_api.h index d9285b7f3a7..80d941d8831 100644 --- a/drivers/staging/prima/CORE/VOSS/inc/vos_api.h +++ b/drivers/staging/prima/CORE/VOSS/inc/vos_api.h @@ -186,13 +186,9 @@ v_CONTEXT_t vos_get_global_context( VOS_MODULE_ID moduleId, v_U8_t vos_is_logp_in_progress(VOS_MODULE_ID moduleId, v_VOID_t *moduleContext); void vos_set_logp_in_progress(VOS_MODULE_ID moduleId, v_U8_t value); - v_U8_t vos_is_load_unload_in_progress(VOS_MODULE_ID moduleId, v_VOID_t *moduleContext); void vos_set_load_unload_in_progress(VOS_MODULE_ID moduleId, v_U8_t value); -v_U8_t vos_is_reinit_in_progress(VOS_MODULE_ID moduleId, v_VOID_t *moduleContext); -void vos_set_reinit_in_progress(VOS_MODULE_ID moduleId, v_U8_t value); - /**--------------------------------------------------------------------------- \brief vos_alloc_context() - allocate a context within the VOSS global Context diff --git a/drivers/staging/prima/CORE/VOSS/inc/vos_getBin.h b/drivers/staging/prima/CORE/VOSS/inc/vos_getBin.h index ecef7037760..39f89c82318 100644 --- a/drivers/staging/prima/CORE/VOSS/inc/vos_getBin.h +++ b/drivers/staging/prima/CORE/VOSS/inc/vos_getBin.h @@ -52,11 +52,19 @@ These APIs allow components to retrieve binary contents (firmware, configuration data, etc.) from a storage medium on the platform. +<<<<<<< HEAD:CORE/VOSS/inc/vos_getBin.h + + Copyright 2008 (c) Qualcomm, Incorporated. All Rights Reserved. + + Qualcomm Confidential and Proprietary. + +======= Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. Qualcomm Technologies Confidential and Proprietary. +>>>>>>> 1cc7c78... wlan: voss: remove obsolete "WLAN_SOFTAP_FEATURE" featurization:prima/CORE/VOSS/inc/vos_getBin.h ========================================================================*/ /* $Header$ */ diff --git a/drivers/staging/prima/CORE/VOSS/inc/vos_mq.h b/drivers/staging/prima/CORE/VOSS/inc/vos_mq.h index 800096438b2..e749b328bb7 100644 --- a/drivers/staging/prima/CORE/VOSS/inc/vos_mq.h +++ b/drivers/staging/prima/CORE/VOSS/inc/vos_mq.h @@ -49,11 +49,19 @@ \brief virtual Operating System Services (vOSS) message queue APIs Message Queue Definitions and API +<<<<<<< HEAD:CORE/VOSS/inc/vos_mq.h + + Copyright 2008 (c) Qualcomm, Incorporated. All Rights Reserved. + + Qualcomm Confidential and Proprietary. + +======= Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. Qualcomm Technologies Confidential and Proprietary. +>>>>>>> f7413b6... wlan: voss: remove obsolete "INTEGRATED_SOC" featurization:prima/CORE/VOSS/inc/vos_mq.h ========================================================================*/ /* $Header$ */ diff --git a/drivers/staging/prima/CORE/VOSS/inc/vos_nvitem.h b/drivers/staging/prima/CORE/VOSS/inc/vos_nvitem.h index 447963567b5..b51a1a25ecc 100644 --- a/drivers/staging/prima/CORE/VOSS/inc/vos_nvitem.h +++ b/drivers/staging/prima/CORE/VOSS/inc/vos_nvitem.h @@ -640,12 +640,10 @@ VOS_STATUS vos_nv_getNVBuffer(v_VOID_t **pNvBuffer ,v_SIZE_t *pSize); \brief vos_nv_setRegDomain - \param clientCtxt - Client Context, Not used for PRIMA regId - Regulatory Domain ID - sendRegHint - send hint to cfg80211 \return status set REG domain operation \sa -------------------------------------------------------------------------*/ -VOS_STATUS vos_nv_setRegDomain(void * clientCtxt, v_REGDOMAIN_t regId, - v_BOOL_t sendRegHint); +VOS_STATUS vos_nv_setRegDomain(void * clientCtxt, v_REGDOMAIN_t regId); /**------------------------------------------------------------------------ \brief vos_nv_getChannelEnabledState - diff --git a/drivers/staging/prima/CORE/VOSS/inc/vos_trace.h b/drivers/staging/prima/CORE/VOSS/inc/vos_trace.h index 2ca016aebf3..5703b5dd1b8 100644 --- a/drivers/staging/prima/CORE/VOSS/inc/vos_trace.h +++ b/drivers/staging/prima/CORE/VOSS/inc/vos_trace.h @@ -60,8 +60,6 @@ ------------------------------------------------------------------------*/ #include <vos_types.h> // For VOS_MODULE_ID... #include <stdarg.h> // For va_list... -#include <vos_status.h> -#include <i_vos_types.h> /*-------------------------------------------------------------------------- Type declarations @@ -105,51 +103,9 @@ typedef enum // TODO: remove this once this is not used on Android #define VOS_ENABLE_TRACING #define WCONN_TRACE_KMSG_LOG_BUFF -#define MAX_VOS_TRACE_RECORDS 4000 -#define INVALID_VOS_TRACE_ADDR 0xffffffff -#define DEFAULT_VOS_TRACE_DUMP_COUNT 0 #include <i_vos_trace.h> -#ifdef TRACE_RECORD - -#define MTRACE(p) p -#define NO_SESSION 0xFF - -#else -#define MTRACE(p) { } - -#endif - -/*-------------------------------------------------------------------------- - Structure definition - ------------------------------------------------------------------------*/ -typedef struct svosTraceRecord -{ - v_U32_t time; - v_U8_t module; - v_U8_t code; - v_U8_t session; - v_U32_t data; -}tvosTraceRecord, *tpvosTraceRecord; - -typedef struct svosTraceData -{ - // MTRACE logs are stored in ring buffer where head represents the position - // of first record, tail represents the position of last record added till - // now and num is the count of total record added. - v_U32_t head; - v_U32_t tail; - v_U32_t num; - v_U16_t numSinceLastDump; - - //Config for controlling the trace - v_U8_t enable; - v_U16_t dumpCount; //will dump after number of records reach this number. - -}tvosTraceData; - - /*------------------------------------------------------------------------- Function declarations and documenation ------------------------------------------------------------------------*/ @@ -213,11 +169,4 @@ void vos_wconn_trace_init(void); void vos_wconn_trace_exit(void); #endif -typedef void (*tpvosTraceCb) (void *pMac, tpvosTraceRecord, v_U16_t); -void vos_trace(v_U8_t module, v_U8_t code, v_U8_t session, v_U32_t data); -void vosTraceRegister(VOS_MODULE_ID, tpvosTraceCb); -VOS_STATUS vos_trace_spin_lock_init(void); -void vosTraceInit(void); -void vosTraceEnable(v_U32_t, v_U8_t enable); -void vosTraceDumpAll(void*, v_U8_t, v_U8_t, v_U32_t, v_U32_t); #endif diff --git a/drivers/staging/prima/CORE/VOSS/inc/vos_types.h b/drivers/staging/prima/CORE/VOSS/inc/vos_types.h index 58be70f81b6..58669cf98db 100644 --- a/drivers/staging/prima/CORE/VOSS/inc/vos_types.h +++ b/drivers/staging/prima/CORE/VOSS/inc/vos_types.h @@ -52,12 +52,22 @@ \file vos_Types.h \brief virtual Operating System Servies (vOS) +<<<<<<< HEAD:CORE/VOSS/inc/vos_types.h + + Basic type definitions + + Copyright 2008 (c) Qualcomm, Incorporated. All Rights Reserved. + + Qualcomm Confidential and Proprietary. + +======= Basic type definitions Copyright 2008 (c) Qualcomm, Incorporated. All Rights Reserved. Qualcomm Confidential and Proprietary. +>>>>>>> b682f18... wlan: qnx awareness to corestack:prima/CORE/VOSS/inc/vos_types.h ========================================================================*/ /* $Header$ */ @@ -138,7 +148,6 @@ typedef enum VOS_MODULE_ID_VOSS = 10, VOS_MODULE_ID_SAP = 11, VOS_MODULE_ID_HDD_SOFTAP = 12, - VOS_MODULE_ID_PMC = 13, // not a real module ID. This is used to identify the maxiumum // number of VOS_MODULE_IDs and should always be at the END of diff --git a/drivers/staging/prima/CORE/VOSS/inc/wlan_hdd_misc.h b/drivers/staging/prima/CORE/VOSS/inc/wlan_hdd_misc.h index 570a96f65ad..695248209b5 100644..100755 --- a/drivers/staging/prima/CORE/VOSS/inc/wlan_hdd_misc.h +++ b/drivers/staging/prima/CORE/VOSS/inc/wlan_hdd_misc.h @@ -48,6 +48,15 @@ #define WLAN_CFG_FILE "wlan/prima/WCNSS_cfg.dat" #define WLAN_FW_FILE "" #define WLAN_NV_FILE "wlan/prima/WCNSS_qcom_wlan_nv.bin" +#define WLAN_NV_DEFAULTFILE "wlan/prima/WCNSS_qcom_wlan_nv_default.bin" +#ifdef WLAN_NV_OTA_UPGRADE +#define WLAN_NV_FILE_REGULATORY "wlan/prima/WCNSS_qcom_wlan_nv_regulatory.bin" +#define WLAN_NV_FILE_CALIBRATION "wlan/prima/WCNSS_qcom_wlan_nv_calibration.bin" +// BEGIN IKJB42MAIN-9117, qjiang1, 04/10/2013 +#define WLAN_NV_FILE_REGULATORY_M "wlan/prima/WCNSS_qcom_wlan_nv_regulatory_m.bin" +#define WLAN_NV_FILE_CALIBRATION_M "wlan/prima/WCNSS_qcom_wlan_nv_calibration_m.bin" +// END IKJB42MAIN-9117 +#endif #define WLAN_COUNTRY_INFO_FILE "wlan/prima/WCNSS_wlan_country_info.dat" #define WLAN_HO_CFG_FILE "wlan/prima/WCNSS_wlan_ho_config" #else @@ -87,5 +96,8 @@ VOS_STATUS hdd_read_cfg_file(v_VOID_t *pCtx, char *pFileName, v_VOID_t *pBuffer, tVOS_CONCURRENCY_MODE hdd_get_concurrency_mode ( void ); +// BEGIN MOTOROLA IKJB42MAIN-274, dpn473, 01/02/2013, Add flag to disable/enable MCC mode +v_U8_t hdd_get_mcc_mode( void ); +// END IKJB42MAIN-274 #endif /* WLAN_HDD_MISC_H */ diff --git a/drivers/staging/prima/CORE/VOSS/src/vos_api.c b/drivers/staging/prima/CORE/VOSS/src/vos_api.c index 920d2c7abc2..590168d3bdc 100644 --- a/drivers/staging/prima/CORE/VOSS/src/vos_api.c +++ b/drivers/staging/prima/CORE/VOSS/src/vos_api.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2014, The Linux Foundation. All rights reserved. + * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -85,7 +85,6 @@ #include "wlan_hdd_cfg80211.h" #include "sapApi.h" -#include "vos_trace.h" @@ -172,13 +171,6 @@ VOS_STATUS vos_preOpen ( v_CONTEXT_t *pVosContext ) *pVosContext = gpVosContext; - /* Initialize the spinlock */ - vos_trace_spin_lock_init(); - /* it is the right time to initialize MTRACE structures */ - #if defined(TRACE_RECORD) - vosTraceInit(); - #endif - return VOS_STATUS_SUCCESS; } /* vos_preOpen()*/ @@ -278,7 +270,6 @@ VOS_STATUS vos_open( v_CONTEXT_t *pVosContext, v_SIZE_t hddContextSize ) /* Initialize the timer module */ vos_timer_module_init(); - /* Initialize the probe event */ if (vos_event_init(&gpVosContext->ProbeEvent) != VOS_STATUS_SUCCESS) { @@ -513,29 +504,11 @@ VOS_STATUS vos_preStart( v_CONTEXT_t vosContext ) VOS_TRACE(VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_INFO, "vos prestart"); - if (gpVosContext != pVosContext) - { - VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, - "%s: Context mismatch", __func__); - VOS_ASSERT(0); - return VOS_STATUS_E_INVAL; - } + VOS_ASSERT(gpVosContext == pVosContext); - if (pVosContext->pMACContext == NULL) - { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, - "%s: MAC NULL context", __func__); - VOS_ASSERT(0); - return VOS_STATUS_E_INVAL; - } + VOS_ASSERT( NULL != pVosContext->pMACContext); - if (pVosContext->pWDAContext == NULL) - { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, - "%s: WDA NULL context", __func__); - VOS_ASSERT(0); - return VOS_STATUS_E_INVAL; - } + VOS_ASSERT( NULL != pVosContext->pWDAContext); /* call macPreStart */ vStatus = macPreStart(gpVosContext->pMACContext); @@ -689,10 +662,6 @@ VOS_STATUS vos_start( v_CONTEXT_t vosContext ) } VOS_ASSERT(0); vos_event_reset( &(gpVosContext->wdaCompleteEvent) ); - if (vos_is_logp_in_progress(VOS_MODULE_ID_VOSS, NULL)) - { - VOS_BUG(0); - } WDA_setNeedShutdown(vosContext); return VOS_STATUS_E_FAILURE; } @@ -1051,7 +1020,6 @@ v_VOID_t* vos_get_context( VOS_MODULE_ID moduleId, case VOS_MODULE_ID_SME: case VOS_MODULE_ID_PE: - case VOS_MODULE_ID_PMC: { /* ** In all these cases, we just return the MAC Context @@ -1173,31 +1141,6 @@ void vos_set_load_unload_in_progress(VOS_MODULE_ID moduleId, v_U8_t value) gpVosContext->isLoadUnloadInProgress = value; } -v_U8_t vos_is_reinit_in_progress(VOS_MODULE_ID moduleId, v_VOID_t *moduleContext) -{ - if (gpVosContext == NULL) - { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, - "%s: global voss context is NULL", __func__); - return 1; - } - - return gpVosContext->isReInitInProgress; -} - -void vos_set_reinit_in_progress(VOS_MODULE_ID moduleId, v_U8_t value) -{ - if (gpVosContext == NULL) - { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, - "%s: global voss context is NULL", __func__); - return; - } - - gpVosContext->isReInitInProgress = value; -} - - /**--------------------------------------------------------------------------- \brief vos_alloc_context() - allocate a context within the VOSS global Context @@ -1282,7 +1225,6 @@ VOS_STATUS vos_alloc_context( v_VOID_t *pVosContext, VOS_MODULE_ID moduleID, } case VOS_MODULE_ID_SME: case VOS_MODULE_ID_PE: - case VOS_MODULE_ID_PMC: case VOS_MODULE_ID_HDD: case VOS_MODULE_ID_HDD_SOFTAP: default: @@ -1408,7 +1350,6 @@ VOS_STATUS vos_free_context( v_VOID_t *pVosContext, VOS_MODULE_ID moduleID, case VOS_MODULE_ID_HDD: case VOS_MODULE_ID_SME: case VOS_MODULE_ID_PE: - case VOS_MODULE_ID_PMC: case VOS_MODULE_ID_HDD_SOFTAP: default: { @@ -1767,11 +1708,6 @@ VOS_STATUS vos_rx_mq_serialize( VOS_MQ_ID msgQueueId, vos_msg_t *pMsg ) pTargetMq = &(gpVosContext->vosSched.wdiRxMq); break; } - case VOS_MQ_ID_TL: - { - pTargetMq = &(gpVosContext->vosSched.tlRxMq); - break; - } default: @@ -1953,7 +1889,7 @@ void vos_abort_mac_scan(void) return; } - hdd_abort_mac_scan(pHddCtx, eCSR_SCAN_ABORT_DEFAULT); + hdd_abort_mac_scan(pHddCtx); return; } @@ -2015,6 +1951,14 @@ VOS_STATUS vos_shutdown(v_CONTEXT_t vosContext) ((pVosContextType)vosContext)->pMACContext = NULL; + vosStatus = vos_nv_close(); + if (!VOS_IS_STATUS_SUCCESS(vosStatus)) + { + VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + "%s: Failed to close NV", __func__); + VOS_ASSERT( VOS_IS_STATUS_SUCCESS( vosStatus ) ); + } + vosStatus = sysClose( vosContext ); if (!VOS_IS_STATUS_SUCCESS(vosStatus)) { @@ -2195,5 +2139,31 @@ VOS_STATUS vos_wlanRestart(void) v_VOID_t vos_fwDumpReq(tANI_U32 cmd, tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3, tANI_U32 arg4) { + VOS_STATUS vStatus = VOS_STATUS_SUCCESS; + + /* Reset wda wait event */ + vos_event_reset(&gpVosContext->wdaCompleteEvent); + WDA_HALDumpCmdReq(NULL, cmd, arg1, arg2, arg3, arg4, NULL); + + /* Need to update time out of complete */ + vStatus = vos_wait_single_event(&gpVosContext->wdaCompleteEvent, + VOS_WDA_RESP_TIMEOUT ); + + if (vStatus != VOS_STATUS_SUCCESS) + { + if (vStatus == VOS_STATUS_E_TIMEOUT) + { + VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + "%s: Timeout occurred before WDA HAL DUMP complete\n", __func__); + } + else + { + VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + "%s: reporting other error", __func__); + } + } + + return; + } diff --git a/drivers/staging/prima/CORE/VOSS/src/vos_memory.c b/drivers/staging/prima/CORE/VOSS/src/vos_memory.c index 844cd59a206..79506fe0296 100644 --- a/drivers/staging/prima/CORE/VOSS/src/vos_memory.c +++ b/drivers/staging/prima/CORE/VOSS/src/vos_memory.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2014 The Linux Foundation. All rights reserved. + * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -130,10 +130,6 @@ void vos_mem_clean() VOS_STATUS vosStatus; struct s_vos_mem_struct* memStruct; - char* prev_mleak_file = ""; - unsigned int prev_mleak_lineNum = 0; - unsigned int prev_mleak_sz = 0; - unsigned int mleak_cnt = 0; VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: List is not Empty. listSize %d ", __func__, (int)listSize); @@ -146,41 +142,13 @@ void vos_mem_clean() if(VOS_STATUS_SUCCESS == vosStatus) { memStruct = (struct s_vos_mem_struct*)pNode; - - /* Take care to log only once multiple memory leaks from - * the same place */ - if(strcmp(prev_mleak_file, memStruct->fileName) || - (prev_mleak_lineNum != memStruct->lineNum) || - (prev_mleak_sz != memStruct->size)) - { - if(mleak_cnt != 0) - { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, - "%d Time Memory Leak@ File %s, @Line %d, size %d", - mleak_cnt, prev_mleak_file, prev_mleak_lineNum, - prev_mleak_sz); - } - prev_mleak_file = memStruct->fileName; - prev_mleak_lineNum = memStruct->lineNum; - prev_mleak_sz = memStruct->size; - mleak_cnt = 0; - } - mleak_cnt++; - + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, + "Memory Leak@ File %s, @Line %d, size %d", + memStruct->fileName, (int)memStruct->lineNum, memStruct->size); kfree((v_VOID_t*)memStruct); } }while(vosStatus == VOS_STATUS_SUCCESS); - /* Print last memory leak from the module */ - if(mleak_cnt) - { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, - "%d Time memory Leak@ File %s, @Line %d, size %d", - mleak_cnt, prev_mleak_file, prev_mleak_lineNum, - prev_mleak_sz); - } - - #ifdef CONFIG_HALT_KMEMLEAK BUG_ON(0); #endif @@ -205,12 +173,12 @@ v_VOID_t * vos_mem_malloc_debug( v_SIZE_t size, char* fileName, v_U32_t lineNum) "%s: called with arg > 1024K; passed in %d !!!", __func__,size); return NULL; } - if (in_interrupt()) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s cannot be " - "called from interrupt context!!!", __func__); - return NULL; + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + "%s is being called in interrupt context, using GPF_ATOMIC.", __func__); + return kmalloc(size, GFP_ATOMIC); + } new_size = size + sizeof(struct s_vos_mem_struct) + 8; @@ -244,14 +212,6 @@ v_VOID_t * vos_mem_malloc_debug( v_SIZE_t size, char* fileName, v_U32_t lineNum) v_VOID_t vos_mem_free( v_VOID_t *ptr ) { - - if (in_interrupt()) - { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s cannot be " - "called from interrupt context!!!", __func__); - return; - } - if (ptr != NULL) { VOS_STATUS vosStatus; @@ -281,7 +241,7 @@ v_VOID_t vos_mem_free( v_VOID_t *ptr ) { VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, "%s: Unallocated memory (double free?)", __func__); - VOS_BUG(0); + VOS_ASSERT(0); } } } diff --git a/drivers/staging/prima/CORE/VOSS/src/vos_nvitem.c b/drivers/staging/prima/CORE/VOSS/src/vos_nvitem.c index 64844d498ed..26c68701178 100644..100755 --- a/drivers/staging/prima/CORE/VOSS/src/vos_nvitem.c +++ b/drivers/staging/prima/CORE/VOSS/src/vos_nvitem.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2014, The Linux Foundation. All rights reserved. + * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -65,12 +65,15 @@ #include "vos_sched.h" #include "wlan_hdd_main.h" #include <net/cfg80211.h> +#include <linux/firmware.h> /* IK8960KK-1546 & 546, vikasm, 05/03/2014 */ + +#include <linux/of.h> /* IKJB42MAIN-9117, qjiang1, 04/10/2013 */ + static char crda_alpha2[2] = {0, 0}; /* country code from initial crda req */ static char run_time_alpha2[2] = {0, 0}; /* country code from none-default country req */ static v_BOOL_t crda_regulatory_entry_valid = VOS_FALSE; static v_BOOL_t crda_regulatory_run_time_entry_valid = VOS_FALSE; -/* Cant access pAdapter in this file so defining a new variable to wait when changing country*/ -static struct completion change_country_code; + /*---------------------------------------------------------------------------- * Preprocessor Definitions and Constants * -------------------------------------------------------------------------*/ @@ -376,6 +379,41 @@ typedef struct nvEFSTable_s sHalNv halnv; } nvEFSTable_t; nvEFSTable_t *gnvEFSTable; + +#ifdef WLAN_NV_OTA_UPGRADE + +typedef PACKED_PRE struct PACKED_POST +{ + v_U32_t nvValidityBitmap; + sNvFields fields; + sRegulatoryDomains regDomains[NUM_REG_DOMAINS]; + sDefaultCountry defaultCountryTable; +} nvEFSTable_reg_t; + + +typedef PACKED_PRE struct PACKED_POST +{ + v_U32_t nvValidityBitmap; + sNvFields fields; + tRateGroupPwr pwrOptimum[NUM_RF_SUBBANDS]; + tTpcPowerTable plutCharacterized[NUM_RF_CHANNELS]; + int16 plutPdadcOffset[NUM_RF_CHANNELS]; + tRateGroupPwrVR pwrOptimum_virtualRate[NUM_RF_SUBBANDS]; + sFwConfig fwConfig; + sRssiChannelOffsets rssiChanOffsets[2]; + sHwCalValues hwCalValues; + int16 antennaPathLoss[NUM_RF_CHANNELS]; + int16 pktTypePwrLimits[NUM_802_11_MODES][NUM_RF_CHANNELS]; + sOfdmCmdPwrOffset ofdmCmdPwrOffset; + sTxBbFilterMode txbbFilterMode; +} nvEFSTable_cal_t; + +#define REG_TABLE_VALIDITY_MAP ((1<<VNV_REGULARTORY_DOMAIN_TABLE)|(1<<VNV_DEFAULT_LOCATION)) +#define CAL_TABLE_VALIDITY_MAP ((1<<VNV_RATE_TO_POWER_TABLE)|(1<<VNV_TPC_POWER_TABLE)|(1<<VNV_TPC_PDADC_OFFSETS)|(1<<VNV_TABLE_VIRTUAL_RATE)|(1<<VNV_RSSI_CHANNEL_OFFSETS)|(1<<VNV_HW_CAL_VALUES)|(1<<VNV_ANTENNA_PATH_LOSS)|(1<<VNV_PACKET_TYPE_POWER_LIMITS)|(1<<VNV_OFDM_CMD_PWR_OFFSET)|(1<<VNV_TX_BB_FILTER_MODE)|(1<<VNV_FW_CONFIG)) +nvEFSTable_reg_t *gnvRegTable=NULL; +nvEFSTable_cal_t *gnvCalTable=NULL; +#endif + /* EFS Table to send the NV structure to HAL*/ static nvEFSTable_t *pnvEFSTable; @@ -472,7 +510,7 @@ const sRegulatoryChannel * regChannels = nvDefaults.tables.regDomains[0].channel /*---------------------------------------------------------------------------- Function Definitions and Documentation * -------------------------------------------------------------------------*/ -VOS_STATUS wlan_write_to_efs (v_U8_t *pData, v_U16_t data_len); +VOS_STATUS wlan_write_to_efs (v_U8_t *pData, v_U16_t data_len,v_U16_t table); /**------------------------------------------------------------------------ \brief vos_nv_init() - initialize the NV module The \a vos_nv_init() initializes the NV module. This read the binary @@ -486,14 +524,53 @@ VOS_STATUS vos_nv_init(void) return VOS_STATUS_SUCCESS; } +/* BEGIN IKJB42MAIN-9117, qjiang1, 04/10/2013 */ +static int device_is_obakem(void) +{ + struct device_node *chosen; + static int device_type = -1; /* 1 for obakem, 0 for non-obakem, -1 for unset */ + u32 product; + + if ( device_type != -1 ) + return device_type; + + chosen = of_find_node_by_path("/Chosen@0"); + if ( !chosen ){ + pr_err("%s: fail to find node Chosen@0 \n", __func__ ); + device_type = 0; + return device_type; + } + + if (of_property_read_u32(chosen, "product", &product)) { + pr_err("%s: fail to find product property \n", __func__); + device_type = 0; + } else { + if ( product == 0x000028ff )/* obakem product value */ + device_type = 1; + else + device_type = 0; + pr_info("%s: product type is %s \n", __func__, (device_type? "obakem": "not obakem") ); + } + + return device_type; +} +/* END IKJB42MAIN-9117*/ + VOS_STATUS vos_nv_open(void) { VOS_STATUS status = VOS_STATUS_SUCCESS; + #ifdef WLAN_NV_OTA_UPGRADE + VOS_STATUS status_reg = VOS_STATUS_SUCCESS; + VOS_STATUS status_cal = VOS_STATUS_SUCCESS; + v_BOOL_t motoNvOta = VOS_FALSE; + v_SIZE_t bufSize_reg; + v_SIZE_t bufSize_cal; + #endif v_CONTEXT_t pVosContext= NULL; v_SIZE_t bufSize; v_SIZE_t nvReadBufSize; v_BOOL_t itemIsValid = VOS_FALSE; - + /*Get the global context */ pVosContext = vos_get_global_context(VOS_MODULE_ID_SYS, NULL); @@ -507,17 +584,41 @@ VOS_STATUS vos_nv_open(void) ((VosContextType*)(pVosContext))->pHDDContext, (v_VOID_t**)&gnvEFSTable, &nvReadBufSize); - if ( (!VOS_IS_STATUS_SUCCESS( status )) || !gnvEFSTable) + #ifdef WLAN_NV_OTA_UPGRADE + bufSize_reg = sizeof(nvEFSTable_reg_t); + bufSize_cal = sizeof(nvEFSTable_cal_t); + +/* IKJB42MAIN-9117, qjiang1, 04/10/2013 */ + status_reg = hdd_request_firmware( ( device_is_obakem() ? WLAN_NV_FILE_REGULATORY_M : WLAN_NV_FILE_REGULATORY), + ((VosContextType*)(pVosContext))->pHDDContext, + (v_VOID_t**)&gnvRegTable, &bufSize_reg); +/* IKJB42MAIN-9117, qjiang1, 04/10/2013 */ + status_cal = hdd_request_firmware(( device_is_obakem() ? WLAN_NV_FILE_CALIBRATION_M : WLAN_NV_FILE_CALIBRATION), + ((VosContextType*)(pVosContext))->pHDDContext, + (v_VOID_t**)&gnvCalTable, &bufSize_cal); + + if((bufSize_reg == sizeof(nvEFSTable_reg_t)) && (bufSize_cal == sizeof(nvEFSTable_cal_t))) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, - "%s: unable to download NV file %s", - __func__, WLAN_NV_FILE); - return VOS_STATUS_E_RESOURCES; + if(VOS_IS_STATUS_SUCCESS(status_cal) && VOS_IS_STATUS_SUCCESS(status_cal)) { + motoNvOta = VOS_TRUE; + if(((gnvRegTable->nvValidityBitmap)&(~REG_TABLE_VALIDITY_MAP)) != 0){ + gnvRegTable->nvValidityBitmap = REG_TABLE_VALIDITY_MAP; + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, "Hypervalidity for REG! - restrict to 0x%x", + gnvRegTable->nvValidityBitmap); + } + if(((gnvCalTable->nvValidityBitmap)&(~CAL_TABLE_VALIDITY_MAP)) != 0){ + gnvCalTable->nvValidityBitmap = CAL_TABLE_VALIDITY_MAP; + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, "Hypervalidity for CAL! - restrict to 0x%x", + gnvCalTable->nvValidityBitmap); + } + } } - - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, - "INFO: NV binary file version=%d Driver default NV version=%d, continue...\n", - gnvEFSTable->halnv.fields.nvVersion, WLAN_NV_VERSION); + if(motoNvOta != VOS_TRUE) { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, + "!!! WARNING!!!! Could not find upgradable CAL/REG table, CAL size %d, expected %d, REG size %d, expected %d", + bufSize_cal, sizeof(nvEFSTable_cal_t), bufSize_reg, sizeof(nvEFSTable_reg_t)); + } + #endif /* Copying the read nv data to the globa NV EFS table */ { @@ -533,15 +634,39 @@ VOS_STATUS vos_nv_open(void) /*Copying the NV defaults */ vos_mem_copy(&(pnvEFSTable->halnv),&nvDefaults,sizeof(sHalNv)); - /* Size mismatch */ - if ( nvReadBufSize != bufSize) + if ( (!VOS_IS_STATUS_SUCCESS( status )) || !gnvEFSTable) { - pnvEFSTable->nvValidityBitmap = DEFAULT_NV_VALIDITY_BITMAP; + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, + "!! ERROR !! %s: unable to download persist NV file %s - To correct - pls flash persist.img ONCE (as factory programmed)!!", + __func__, WLAN_NV_FILE); + gnvEFSTable = pnvEFSTable; + nvReadBufSize = sizeof(sNvFields)+1; + //return VOS_STATUS_E_RESOURCES; + } + + if ( nvReadBufSize != bufSize) + { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, "!!! WARNING !!! Detected NV of size %d bytes, expected %d bytes ", + nvReadBufSize, bufSize); + #ifdef WLAN_NV_OTA_UPGRADE + if(motoNvOta == VOS_TRUE && nvReadBufSize > sizeof(sNvFields)) { + gnvEFSTable->nvValidityBitmap = ((1 << VNV_FIELD_IMAGE)|gnvRegTable->nvValidityBitmap|gnvCalTable->nvValidityBitmap); + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, "!!! CAL, REG ok ... importing MAC!"); + } else { + #endif + pnvEFSTable->nvValidityBitmap = DEFAULT_NV_VALIDITY_BITMAP; + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, "!!!WARNING: INVALID NV FILE, DRIVER IS USING DEFAULT CAL VALUES %d %d!!!", nvReadBufSize, bufSize); - return VOS_STATUS_SUCCESS; + return VOS_STATUS_SUCCESS; + #ifdef WLAN_NV_OTA_UPGRADE + } + #endif } + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + "INFO: NV binary file version=%d Driver default NV version=%d, continue...\n", + gnvEFSTable->halnv.fields.nvVersion, WLAN_NV_VERSION); /* Version mismatch */ if (gnvEFSTable->halnv.fields.nvVersion != WLAN_NV_VERSION) @@ -573,18 +698,60 @@ VOS_STATUS vos_nv_open(void) if(vos_nv_read( VNV_FIELD_IMAGE, (v_VOID_t *)&pnvEFSTable->halnv.fields, NULL, sizeof(sNvFields) ) != VOS_STATUS_SUCCESS) goto error; + #ifdef WLAN_NV_OTA_UPGRADE + if(motoNvOta == VOS_TRUE) { + pnvEFSTable->halnv.fields.couplerType = gnvCalTable->fields.couplerType; + pnvEFSTable->halnv.fields.nvVersion = gnvCalTable->fields.nvVersion; + gnvEFSTable->halnv.fields.couplerType = gnvCalTable->fields.couplerType; + gnvEFSTable->halnv.fields.nvVersion = gnvCalTable->fields.nvVersion; + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, + "CAL OVERRIDE: Coupler set to %d, NV Version set to %d", + pnvEFSTable->halnv.fields.couplerType, + pnvEFSTable->halnv.fields.nvVersion); + } + #endif } } + /* Version mismatch */ + if (gnvEFSTable->halnv.fields.nvVersion != WLAN_NV_VERSION) + { + if ((WLAN_NV_VERSION == NV_VERSION_11N_11AC_FW_CONFIG) && + (gnvEFSTable->halnv.fields.nvVersion == NV_VERSION_11N_11AC_COUPER_TYPE)) + { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + "!!!WARNING: Using Coupler Type field instead of Fw Config table,\n" + "Make sure that this is intented or may impact performance!!!\n"); + } + else + { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + "!!!WARNING: NV binary file version doesn't match with Driver default NV version\n" + "Driver NV defaults will be used, may impact performance!!!\n"); + + return VOS_STATUS_SUCCESS; + } + } if (vos_nv_getValidity(VNV_RATE_TO_POWER_TABLE, &itemIsValid) == VOS_STATUS_SUCCESS) { if (itemIsValid == VOS_TRUE) { - if(vos_nv_read( VNV_RATE_TO_POWER_TABLE, - (v_VOID_t *)&pnvEFSTable->halnv.tables.pwrOptimum[0], - NULL, sizeof(tRateGroupPwr) * NUM_RF_SUBBANDS ) != VOS_STATUS_SUCCESS) - goto error; + #ifdef WLAN_NV_OTA_UPGRADE + if(motoNvOta == VOS_TRUE) + { + memcpy((v_VOID_t *)&pnvEFSTable->halnv.tables.pwrOptimum[0], + (v_VOID_t *)&gnvCalTable->pwrOptimum[0], sizeof(tRateGroupPwr) * NUM_RF_SUBBANDS); + } + else { + #endif + if(vos_nv_read( VNV_RATE_TO_POWER_TABLE, + (v_VOID_t *)&pnvEFSTable->halnv.tables.pwrOptimum[0], + NULL, sizeof(tRateGroupPwr) * NUM_RF_SUBBANDS ) != VOS_STATUS_SUCCESS) + goto error; + #ifdef WLAN_NV_OTA_UPGRADE + } + #endif } } @@ -594,10 +761,21 @@ VOS_STATUS vos_nv_open(void) if (itemIsValid == VOS_TRUE) { - if(vos_nv_read( VNV_REGULARTORY_DOMAIN_TABLE, - (v_VOID_t *)&pnvEFSTable->halnv.tables.regDomains[0], - NULL, sizeof(sRegulatoryDomains) * NUM_REG_DOMAINS ) != VOS_STATUS_SUCCESS) + #ifdef WLAN_NV_OTA_UPGRADE + if(motoNvOta == VOS_TRUE) + { + memcpy((v_VOID_t *)&pnvEFSTable->halnv.tables.regDomains[0], + (v_VOID_t *)&gnvRegTable->regDomains[0], sizeof(sRegulatoryDomains) * NUM_REG_DOMAINS); + } + else { + #endif + if(vos_nv_read( VNV_REGULARTORY_DOMAIN_TABLE, + (v_VOID_t *)&pnvEFSTable->halnv.tables.regDomains[0], + NULL, sizeof(sRegulatoryDomains) * NUM_REG_DOMAINS ) != VOS_STATUS_SUCCESS) goto error; + #ifdef WLAN_NV_OTA_UPGRADE + } + #endif } } @@ -606,10 +784,21 @@ VOS_STATUS vos_nv_open(void) { if (itemIsValid == VOS_TRUE) { - if(vos_nv_read( VNV_DEFAULT_LOCATION, - (v_VOID_t *)&pnvEFSTable->halnv.tables.defaultCountryTable, - NULL, sizeof(sDefaultCountry) ) != VOS_STATUS_SUCCESS) + #ifdef WLAN_NV_OTA_UPGRADE + if(motoNvOta == VOS_TRUE) + { + memcpy((v_VOID_t *)&pnvEFSTable->halnv.tables.defaultCountryTable, + (v_VOID_t *)&gnvRegTable->defaultCountryTable, sizeof(sDefaultCountry)); + } + else { + #endif + if(vos_nv_read( VNV_DEFAULT_LOCATION, + (v_VOID_t *)&pnvEFSTable->halnv.tables.defaultCountryTable, + NULL, sizeof(sDefaultCountry) ) != VOS_STATUS_SUCCESS) goto error; + #ifdef WLAN_NV_OTA_UPGRADE + } + #endif } } @@ -618,10 +807,21 @@ VOS_STATUS vos_nv_open(void) { if (itemIsValid == VOS_TRUE) { + #ifdef WLAN_NV_OTA_UPGRADE + if(motoNvOta == VOS_TRUE) + { + memcpy((v_VOID_t *)&pnvEFSTable->halnv.tables.plutCharacterized[0], + (v_VOID_t *)&gnvCalTable->plutCharacterized[0], sizeof(tTpcPowerTable) * NUM_RF_CHANNELS ); + } + else { + #endif if(vos_nv_read( VNV_TPC_POWER_TABLE, (v_VOID_t *)&pnvEFSTable->halnv.tables.plutCharacterized[0], NULL, sizeof(tTpcPowerTable) * NUM_RF_CHANNELS ) != VOS_STATUS_SUCCESS) goto error; + #ifdef WLAN_NV_OTA_UPGRADE + } + #endif } } @@ -630,10 +830,21 @@ VOS_STATUS vos_nv_open(void) { if (itemIsValid == VOS_TRUE) { - if(vos_nv_read( VNV_TPC_PDADC_OFFSETS, - (v_VOID_t *)&pnvEFSTable->halnv.tables.plutPdadcOffset[0], - NULL, sizeof(tANI_U16) * NUM_RF_CHANNELS ) != VOS_STATUS_SUCCESS) + #ifdef WLAN_NV_OTA_UPGRADE + if(motoNvOta == VOS_TRUE) + { + memcpy((v_VOID_t *)&pnvEFSTable->halnv.tables.plutPdadcOffset[0], + (v_VOID_t *)&gnvCalTable->plutPdadcOffset[0], sizeof(tANI_U16) * NUM_RF_CHANNELS); + } + else { + #endif + if(vos_nv_read( VNV_TPC_PDADC_OFFSETS, + (v_VOID_t *)&pnvEFSTable->halnv.tables.plutPdadcOffset[0], + NULL, sizeof(tANI_U16) * NUM_RF_CHANNELS ) != VOS_STATUS_SUCCESS) goto error; + #ifdef WLAN_NV_OTA_UPGRADE + } + #endif } } if (vos_nv_getValidity(VNV_RSSI_CHANNEL_OFFSETS, &itemIsValid) == @@ -641,10 +852,21 @@ VOS_STATUS vos_nv_open(void) { if (itemIsValid == VOS_TRUE) { - if(vos_nv_read( VNV_RSSI_CHANNEL_OFFSETS, - (v_VOID_t *)&pnvEFSTable->halnv.tables.rssiChanOffsets[0], - NULL, sizeof(sRssiChannelOffsets) * 2 ) != VOS_STATUS_SUCCESS) + #ifdef WLAN_NV_OTA_UPGRADE + if(motoNvOta == VOS_TRUE) + { + memcpy((v_VOID_t *)&pnvEFSTable->halnv.tables.rssiChanOffsets[0], + (v_VOID_t *)&gnvCalTable->rssiChanOffsets[0], sizeof(sRssiChannelOffsets) * 2); + } + else { + #endif + if(vos_nv_read( VNV_RSSI_CHANNEL_OFFSETS, + (v_VOID_t *)&pnvEFSTable->halnv.tables.rssiChanOffsets[0], + NULL, sizeof(sRssiChannelOffsets) * 2 ) != VOS_STATUS_SUCCESS) goto error; + #ifdef WLAN_NV_OTA_UPGRADE + } + #endif } } @@ -653,9 +875,20 @@ VOS_STATUS vos_nv_open(void) { if (itemIsValid == VOS_TRUE) { + #ifdef WLAN_NV_OTA_UPGRADE + if(motoNvOta == VOS_TRUE) + { + memcpy((v_VOID_t *)&pnvEFSTable->halnv.tables.hwCalValues, + (v_VOID_t *)&gnvCalTable->hwCalValues, sizeof(sHwCalValues)); + } + else { + #endif if(vos_nv_read( VNV_HW_CAL_VALUES, (v_VOID_t *)&pnvEFSTable->halnv .tables.hwCalValues, NULL, sizeof(sHwCalValues) ) != VOS_STATUS_SUCCESS) goto error; + #ifdef WLAN_NV_OTA_UPGRADE + } + #endif } } @@ -664,21 +897,42 @@ VOS_STATUS vos_nv_open(void) { if (itemIsValid == VOS_TRUE) { + #ifdef WLAN_NV_OTA_UPGRADE + if(motoNvOta == VOS_TRUE) + { + memcpy((v_VOID_t *)&pnvEFSTable->halnv.tables.fwConfig, + (v_VOID_t *)&gnvCalTable->fwConfig, sizeof(sFwConfig)); + } + else { + #endif if(vos_nv_read( VNV_FW_CONFIG, (v_VOID_t *)&pnvEFSTable->halnv .tables.fwConfig, NULL, sizeof(sFwConfig) ) != VOS_STATUS_SUCCESS) goto error; + #ifdef WLAN_NV_OTA_UPGRADE + } + #endif } } - if (vos_nv_getValidity(VNV_ANTENNA_PATH_LOSS, &itemIsValid) == VOS_STATUS_SUCCESS) { if (itemIsValid == VOS_TRUE) { - if(vos_nv_read( VNV_ANTENNA_PATH_LOSS, - (v_VOID_t *)&pnvEFSTable->halnv.tables.antennaPathLoss[0], NULL, - sizeof(tANI_S16)*NUM_RF_CHANNELS ) != VOS_STATUS_SUCCESS) + #ifdef WLAN_NV_OTA_UPGRADE + if(motoNvOta == VOS_TRUE) + { + memcpy((v_VOID_t *)&pnvEFSTable->halnv.tables.antennaPathLoss[0], + (v_VOID_t *)&gnvCalTable->antennaPathLoss[0], sizeof(tANI_S16)*NUM_RF_CHANNELS); + } + else { + #endif + if(vos_nv_read( VNV_ANTENNA_PATH_LOSS, + (v_VOID_t *)&pnvEFSTable->halnv.tables.antennaPathLoss[0], NULL, + sizeof(tANI_S16)*NUM_RF_CHANNELS ) != VOS_STATUS_SUCCESS) goto error; + #ifdef WLAN_NV_OTA_UPGRADE + } + #endif } } if (vos_nv_getValidity(VNV_PACKET_TYPE_POWER_LIMITS, &itemIsValid) == @@ -686,10 +940,21 @@ VOS_STATUS vos_nv_open(void) { if (itemIsValid == VOS_TRUE) { - if(vos_nv_read( VNV_PACKET_TYPE_POWER_LIMITS, - (v_VOID_t *)&pnvEFSTable->halnv.tables.pktTypePwrLimits[0], NULL, - sizeof(tANI_S16)*NUM_802_11_MODES*NUM_RF_CHANNELS ) != VOS_STATUS_SUCCESS) + #ifdef WLAN_NV_OTA_UPGRADE + if(motoNvOta == VOS_TRUE) + { + memcpy((v_VOID_t *)&pnvEFSTable->halnv.tables.pktTypePwrLimits[0][0], + (v_VOID_t *)&gnvCalTable->pktTypePwrLimits[0][0], sizeof(tANI_S16)*NUM_802_11_MODES*NUM_RF_CHANNELS); + } + else { + #endif + if(vos_nv_read( VNV_PACKET_TYPE_POWER_LIMITS, + (v_VOID_t *)&pnvEFSTable->halnv.tables.pktTypePwrLimits[0], NULL, + sizeof(tANI_S16)*NUM_802_11_MODES*NUM_RF_CHANNELS ) != VOS_STATUS_SUCCESS) goto error; + #ifdef WLAN_NV_OTA_UPGRADE + } + #endif } } @@ -698,11 +963,22 @@ VOS_STATUS vos_nv_open(void) { if (itemIsValid == VOS_TRUE) { + #ifdef WLAN_NV_OTA_UPGRADE + if(motoNvOta == VOS_TRUE) + { + memcpy((v_VOID_t *)&pnvEFSTable->halnv.tables.ofdmCmdPwrOffset, + (v_VOID_t *)&gnvCalTable->ofdmCmdPwrOffset, sizeof(sOfdmCmdPwrOffset)); + } + else { + #endif if(vos_nv_read( VNV_OFDM_CMD_PWR_OFFSET, (v_VOID_t *)&pnvEFSTable->halnv.tables.ofdmCmdPwrOffset, NULL, sizeof(sOfdmCmdPwrOffset)) != VOS_STATUS_SUCCESS) goto error; } + #ifdef WLAN_NV_OTA_UPGRADE + } + #endif } if (vos_nv_getValidity(VNV_TX_BB_FILTER_MODE, &itemIsValid) == @@ -710,22 +986,44 @@ VOS_STATUS vos_nv_open(void) { if (itemIsValid == VOS_TRUE) { + #ifdef WLAN_NV_OTA_UPGRADE + if(motoNvOta == VOS_TRUE) + { + memcpy((v_VOID_t *)&pnvEFSTable->halnv.tables.txbbFilterMode, + (v_VOID_t *)&gnvCalTable->txbbFilterMode, sizeof(sTxBbFilterMode)); + } + else { + #endif if(vos_nv_read(VNV_TX_BB_FILTER_MODE, (v_VOID_t *)&pnvEFSTable->halnv.tables.txbbFilterMode, NULL, sizeof(sTxBbFilterMode)) != VOS_STATUS_SUCCESS) goto error; } + #ifdef WLAN_NV_OTA_UPGRADE + } + #endif } if (vos_nv_getValidity(VNV_TABLE_VIRTUAL_RATE, &itemIsValid) == VOS_STATUS_SUCCESS) { if (itemIsValid == VOS_TRUE) { + #ifdef WLAN_NV_OTA_UPGRADE + if(motoNvOta == VOS_TRUE) + { + vos_mem_copy((v_VOID_t *)&pnvEFSTable->halnv.tables.pwrOptimum_virtualRate, + (v_VOID_t *)&gnvCalTable->pwrOptimum_virtualRate, sizeof(gnvEFSTable->halnv.tables.pwrOptimum_virtualRate)); + } + else { + #endif if(vos_nv_read(VNV_TABLE_VIRTUAL_RATE, (v_VOID_t *)&pnvEFSTable->halnv.tables.pwrOptimum_virtualRate, NULL, sizeof(gnvEFSTable->halnv.tables.pwrOptimum_virtualRate)) != VOS_STATUS_SUCCESS) goto error; } + #ifdef WLAN_NV_OTA_UPGRADE + } + #endif } } @@ -745,11 +1043,44 @@ VOS_STATUS vos_nv_close(void) if ( !VOS_IS_STATUS_SUCCESS( status )) { VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, - "%s : vos_open failed\n",__func__); + "%s : vos_close failed\n",__func__); return VOS_STATUS_E_FAILURE; } + +#ifdef WLAN_NV_OTA_UPGRADE + if(gnvRegTable != NULL) + { +/* IKJB42MAIN-9117, qjiang1, 04/10/2013 */ + status = hdd_release_firmware(( device_is_obakem() ? WLAN_NV_FILE_REGULATORY_M : WLAN_NV_FILE_REGULATORY), ((VosContextType*)(pVosContext))->pHDDContext); + if ( !VOS_IS_STATUS_SUCCESS( status )) + { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + "%s : vos_close failed\n",__func__); + return VOS_STATUS_E_FAILURE; + } + } + + if(gnvCalTable != NULL) + { +/* IKJB42MAIN-9117, qjiang1, 04/10/2013 */ + status = hdd_release_firmware(( device_is_obakem() ? WLAN_NV_FILE_CALIBRATION_M : WLAN_NV_FILE_CALIBRATION), ((VosContextType*)(pVosContext))->pHDDContext); + if ( !VOS_IS_STATUS_SUCCESS( status )) + { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + "%s : vos_close failed\n",__func__); + return VOS_STATUS_E_FAILURE; + } + } +#endif + vos_mem_free(pnvEFSTable); gnvEFSTable=NULL; + +#ifdef WLAN_NV_OTA_UPGRADE + gnvRegTable=NULL; + gnvCalTable=NULL; +#endif + return VOS_STATUS_SUCCESS; } /**------------------------------------------------------------------------ @@ -1073,7 +1404,7 @@ VOS_STATUS vos_nv_setValidity( VNV_TYPE type, v_BOOL_t itemIsValid ) if (newNvValidityBitmap != lastNvValidityBitmap) { gnvEFSTable->nvValidityBitmap = newNvValidityBitmap; - status = wlan_write_to_efs((v_U8_t*)gnvEFSTable,sizeof(nvEFSTable_t)); + status = wlan_write_to_efs((v_U8_t*)gnvEFSTable,sizeof(nvEFSTable_t), 0); if (! VOS_IS_STATUS_SUCCESS(status)) { VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, ("vos_nv_write_to_efs failed!!!\r\n")); status = VOS_STATUS_E_FAULT; @@ -1370,7 +1701,35 @@ VOS_STATUS vos_nv_write( VNV_TYPE type, v_VOID_t *inputVoidBuffer, { VOS_STATUS status = VOS_STATUS_SUCCESS; v_SIZE_t itemSize; +#ifdef WLAN_NV_OTA_UPGRADE + int nv_type = 0; + int three_files = 0; + VOS_STATUS status_reg = VOS_STATUS_SUCCESS; + VOS_STATUS status_cal = VOS_STATUS_SUCCESS; + v_SIZE_t bufSize_reg; + v_SIZE_t bufSize_cal; + v_CONTEXT_t pVosContext= NULL; + + /*Get the global context */ + pVosContext = vos_get_global_context(VOS_MODULE_ID_SYS, NULL); + + bufSize_reg = sizeof(nvEFSTable_reg_t); + bufSize_cal = sizeof(nvEFSTable_cal_t); +/* IKJB42MAIN-9117, qjiang1, 04/10/2013 */ + status_reg = hdd_request_firmware(( device_is_obakem()? WLAN_NV_FILE_REGULATORY_M : WLAN_NV_FILE_REGULATORY), + ((VosContextType*)(pVosContext))->pHDDContext, + (v_VOID_t**)&gnvRegTable, &bufSize_reg); +/* IKJB42MAIN-9117, qjiang1, 04/10/2013 */ + status_cal = hdd_request_firmware(( device_is_obakem()? WLAN_NV_FILE_CALIBRATION_M : WLAN_NV_FILE_CALIBRATION), + ((VosContextType*)(pVosContext))->pHDDContext, + (v_VOID_t**)&gnvCalTable, &bufSize_cal); + if((bufSize_reg == sizeof(nvEFSTable_reg_t)) && (bufSize_cal == sizeof(nvEFSTable_cal_t)) && VOS_IS_STATUS_SUCCESS(status_cal) && VOS_IS_STATUS_SUCCESS(status_cal)) + { + three_files = 1; + } + +#endif // sanity check if (VNV_TYPE_COUNT <= type) { @@ -1402,6 +1761,14 @@ VOS_STATUS vos_nv_write( VNV_TYPE type, v_VOID_t *inputVoidBuffer, } else { memcpy(&gnvEFSTable->halnv.fields,inputVoidBuffer,bufferSize); + #ifdef WLAN_NV_OTA_UPGRADE + if(three_files == 1) + { + nv_type=2; + memcpy(&gnvRegTable->fields,inputVoidBuffer,bufferSize); + memcpy(&gnvCalTable->fields,inputVoidBuffer,bufferSize); + } + #endif } break; case VNV_RATE_TO_POWER_TABLE: @@ -1414,6 +1781,13 @@ VOS_STATUS vos_nv_write( VNV_TYPE type, v_VOID_t *inputVoidBuffer, } else { memcpy(&gnvEFSTable->halnv.tables.pwrOptimum[0],inputVoidBuffer,bufferSize); + #ifdef WLAN_NV_OTA_UPGRADE + if(three_files == 1) + { + nv_type = 2; + memcpy(&gnvCalTable->pwrOptimum[0],inputVoidBuffer,bufferSize); + } + #endif } break; case VNV_REGULARTORY_DOMAIN_TABLE: @@ -1426,6 +1800,13 @@ VOS_STATUS vos_nv_write( VNV_TYPE type, v_VOID_t *inputVoidBuffer, } else { memcpy(&gnvEFSTable->halnv.tables.regDomains[0],inputVoidBuffer,bufferSize); + #ifdef WLAN_NV_OTA_UPGRADE + if(three_files == 1) + { + nv_type = 1; + memcpy(&gnvRegTable->regDomains[0],inputVoidBuffer,bufferSize); + } + #endif } break; case VNV_DEFAULT_LOCATION: @@ -1438,7 +1819,14 @@ VOS_STATUS vos_nv_write( VNV_TYPE type, v_VOID_t *inputVoidBuffer, } else { memcpy(&gnvEFSTable->halnv.tables.defaultCountryTable,inputVoidBuffer,bufferSize); - } + #ifdef WLAN_NV_OTA_UPGRADE + if(three_files == 1) + { + nv_type = 1; + memcpy(&gnvRegTable->defaultCountryTable,inputVoidBuffer,bufferSize); + } + #endif + } break; case VNV_TPC_POWER_TABLE: itemSize = sizeof(gnvEFSTable->halnv.tables.plutCharacterized); @@ -1450,6 +1838,13 @@ VOS_STATUS vos_nv_write( VNV_TYPE type, v_VOID_t *inputVoidBuffer, } else { memcpy(&gnvEFSTable->halnv.tables.plutCharacterized[0],inputVoidBuffer,bufferSize); + #ifdef WLAN_NV_OTA_UPGRADE + if(three_files == 1) + { + nv_type = 2; + memcpy(&gnvCalTable->plutCharacterized[0],inputVoidBuffer,bufferSize); + } + #endif } break; case VNV_TPC_PDADC_OFFSETS: @@ -1462,6 +1857,13 @@ VOS_STATUS vos_nv_write( VNV_TYPE type, v_VOID_t *inputVoidBuffer, } else { memcpy(&gnvEFSTable->halnv.tables.plutPdadcOffset[0],inputVoidBuffer,bufferSize); + #ifdef WLAN_NV_OTA_UPGRADE + if(three_files == 1) + { + nv_type = 2; + memcpy(&gnvCalTable->plutPdadcOffset[0],inputVoidBuffer,bufferSize); + } + #endif } break; case VNV_RSSI_CHANNEL_OFFSETS: @@ -1477,6 +1879,13 @@ VOS_STATUS vos_nv_write( VNV_TYPE type, v_VOID_t *inputVoidBuffer, } else { memcpy(&gnvEFSTable->halnv.tables.rssiChanOffsets[0],inputVoidBuffer,bufferSize); + #ifdef WLAN_NV_OTA_UPGRADE + if(three_files == 1) + { + nv_type = 2; + memcpy(&gnvCalTable->rssiChanOffsets[0],inputVoidBuffer,bufferSize); + } + #endif } break; case VNV_HW_CAL_VALUES: @@ -1492,6 +1901,13 @@ VOS_STATUS vos_nv_write( VNV_TYPE type, v_VOID_t *inputVoidBuffer, } else { memcpy(&gnvEFSTable->halnv.tables.hwCalValues,inputVoidBuffer,bufferSize); + #ifdef WLAN_NV_OTA_UPGRADE + if(three_files == 1) + { + nv_type = 2; + memcpy(&gnvCalTable->hwCalValues,inputVoidBuffer,bufferSize); + } + #endif } break; case VNV_FW_CONFIG: @@ -1506,9 +1922,16 @@ VOS_STATUS vos_nv_write( VNV_TYPE type, v_VOID_t *inputVoidBuffer, status = VOS_STATUS_E_INVAL; } else { - memcpy(&gnvEFSTable->halnv.tables.fwConfig,inputVoidBuffer,bufferSize); - } - break; + memcpy(&gnvEFSTable->halnv.tables.fwConfig,inputVoidBuffer,bufferSize); + #ifdef WLAN_NV_OTA_UPGRADE + if(three_files == 1) + { + nv_type = 2; + memcpy(&gnvCalTable->fwConfig,inputVoidBuffer,bufferSize); + } + #endif + } + break; case VNV_ANTENNA_PATH_LOSS: itemSize = sizeof(gnvEFSTable->halnv.tables.antennaPathLoss); if(bufferSize != itemSize) { @@ -1519,6 +1942,13 @@ VOS_STATUS vos_nv_write( VNV_TYPE type, v_VOID_t *inputVoidBuffer, } else { memcpy(&gnvEFSTable->halnv.tables.antennaPathLoss[0],inputVoidBuffer,bufferSize); + #ifdef WLAN_NV_OTA_UPGRADE + if(three_files == 1) + { + nv_type = 2; + memcpy(&gnvCalTable->antennaPathLoss[0],inputVoidBuffer,bufferSize); + } + #endif } break; @@ -1531,7 +1961,14 @@ VOS_STATUS vos_nv_write( VNV_TYPE type, v_VOID_t *inputVoidBuffer, status = VOS_STATUS_E_INVAL; } else { - memcpy(gnvEFSTable->halnv.tables.pktTypePwrLimits,inputVoidBuffer,bufferSize); + memcpy(&gnvEFSTable->halnv.tables.pktTypePwrLimits[0][0],inputVoidBuffer,bufferSize); + #ifdef WLAN_NV_OTA_UPGRADE + if(three_files == 1) + { + nv_type = 2; + memcpy(&gnvCalTable->pktTypePwrLimits[0][0],inputVoidBuffer,bufferSize); + } + #endif } break; @@ -1545,6 +1982,13 @@ VOS_STATUS vos_nv_write( VNV_TYPE type, v_VOID_t *inputVoidBuffer, } else { memcpy(&gnvEFSTable->halnv.tables.ofdmCmdPwrOffset,inputVoidBuffer,bufferSize); + #ifdef WLAN_NV_OTA_UPGRADE + if(three_files == 1) + { + nv_type = 2; + memcpy(&gnvCalTable->ofdmCmdPwrOffset,inputVoidBuffer,bufferSize); + } + #endif } break; @@ -1558,6 +2002,13 @@ VOS_STATUS vos_nv_write( VNV_TYPE type, v_VOID_t *inputVoidBuffer, } else { memcpy(&gnvEFSTable->halnv.tables.txbbFilterMode,inputVoidBuffer,bufferSize); + #ifdef WLAN_NV_OTA_UPGRADE + if(three_files == 1) + { + nv_type = 2; + memcpy(&gnvCalTable->txbbFilterMode,inputVoidBuffer,bufferSize); + } + #endif } break; @@ -1572,6 +2023,13 @@ VOS_STATUS vos_nv_write( VNV_TYPE type, v_VOID_t *inputVoidBuffer, } else { memcpy(&gnvEFSTable->halnv.tables.pwrOptimum_virtualRate,inputVoidBuffer,bufferSize); + #ifdef WLAN_NV_OTA_UPGRADE + if(three_files == 1) + { + nv_type = 2; + memcpy(&gnvCalTable->pwrOptimum_virtualRate,inputVoidBuffer,bufferSize); + } + #endif } break; @@ -1586,12 +2044,43 @@ VOS_STATUS vos_nv_write( VNV_TYPE type, v_VOID_t *inputVoidBuffer, VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, ("vos_nv_setValidity failed!!!\r\n")); status = VOS_STATUS_E_FAULT; } - status = wlan_write_to_efs((v_U8_t*)gnvEFSTable,sizeof(nvEFSTable_t)); + /* IK8960KK-1546 & 546, vikasm, 05/03/2014 */ + // buf size was mis-matched(larger than actual data size), causing panic during memcpy + // Solution: passing buf size which was read when gnvEFSTable being populated. + status = wlan_write_to_efs((v_U8_t*)gnvEFSTable, ((hdd_context_t *)(((VosContextType*)(pVosContext))->pHDDContext))->nv->size, 0); + /* IK8960KK-1546 & 546, vikasm, 05/03/2014 */ + if (! VOS_IS_STATUS_SUCCESS(status)) { VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, ("vos_nv_write_to_efs failed!!!\r\n")); status = VOS_STATUS_E_FAULT; } + + #ifdef WLAN_NV_OTA_UPGRADE + if(three_files == 1) + { + if(nv_type == 1) + { + vos_sleep(100); + status = wlan_write_to_efs((v_U8_t*)gnvRegTable,sizeof(nvEFSTable_reg_t),nv_type); + + if (! VOS_IS_STATUS_SUCCESS(status)) { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, ("vos_nv_write_to_efs reg failed!!!\r\n")); + status = VOS_STATUS_E_FAULT; + } + } + else if(nv_type == 2) + { + vos_sleep(100); + status = wlan_write_to_efs((v_U8_t*)gnvCalTable,sizeof(nvEFSTable_cal_t),nv_type); + + if (! VOS_IS_STATUS_SUCCESS(status)) { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, ("vos_nv_write_to_efs cal failed!!!\r\n")); + status = VOS_STATUS_E_FAULT; + } + } + } + #endif } return status; } @@ -1755,12 +2244,10 @@ VOS_STATUS vos_nv_getNVBuffer(v_VOID_t **pNvBuffer,v_SIZE_t *pSize) \brief vos_nv_setRegDomain - \param clientCtxt - Client Context, Not used for PRIMA regId - Regulatory Domain ID - sendRegHint - send hint to nl80211 \return status set REG domain operation \sa -------------------------------------------------------------------------*/ -VOS_STATUS vos_nv_setRegDomain(void * clientCtxt, v_REGDOMAIN_t regId, - v_BOOL_t sendRegHint) +VOS_STATUS vos_nv_setRegDomain(void * clientCtxt, v_REGDOMAIN_t regId) { v_CONTEXT_t pVosContext = NULL; hdd_context_t *pHddCtx = NULL; @@ -1784,7 +2271,7 @@ VOS_STATUS vos_nv_setRegDomain(void * clientCtxt, v_REGDOMAIN_t regId, /* when CRDA is not running then we are world roaming. In this case if 11d is enabled, then country code should be update on basis of world roaming */ - if (sendRegHint && (NULL != pHddCtx) && (memcmp(pHddCtx->cfg_ini->crdaDefaultCountryCode, + if ((NULL != pHddCtx) && (memcmp(pHddCtx->cfg_ini->crdaDefaultCountryCode, CFG_CRDA_DEFAULT_COUNTRY_CODE_DEFAULT , 2) == 0)) { wiphy = pHddCtx->wiphy; @@ -2298,16 +2785,6 @@ static int create_crda_regulatory_entry_from_regd(struct wiphy *wiphy, crda_regulatory_entry_post_processing(wiphy, request, nBandCapability, domain_id); return 0; } -/* -* FUNCTION: vos_nv_change_country_code_cb -* to wait for contry code completion -*/ -void* vos_nv_change_country_code_cb(void *pAdapter) -{ - struct completion *change_code_cng = pAdapter; - complete(change_code_cng); - return NULL; -} /* * Function: wlan_hdd_crda_reg_notifier @@ -2327,64 +2804,11 @@ int wlan_hdd_crda_reg_notifier(struct wiphy *wiphy, int i,j,k,m; wiphy_dbg(wiphy, "info: cfg80211 reg_notifier callback for country" " %c%c\n", request->alpha2[0], request->alpha2[1]); - /* During load and SSR, vos_open (which will lead to WDA_SetRegDomain) - * is called before we assign pHddCtx->hHal so we might get it as - * NULL here leading to crash. - */ - if (NULL == pHddCtx) - { - VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, - ("%s Invalid pHddCtx pointer"), __func__); - return 0; - } - if(pHddCtx->isLoadUnloadInProgress || - pHddCtx->isLogpInProgress) - { - VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, - ("%s load/unload or SSR is in progress Ignore"), __func__ ); - return 0; - } - if (request->initiator == NL80211_REGDOM_SET_BY_USER) { - int status; wiphy_dbg(wiphy, "info: set by user\n"); - memset(ccode, 0, WNI_CFG_COUNTRY_CODE_LEN); - memcpy(ccode, request->alpha2, 2); - init_completion(&change_country_code); - /* We will process hints by user from nl80211 in driver. - * sme_ChangeCountryCode will set the country to driver - * and update the regdomain. - * when we return back to nl80211 from this callback, the nl80211 will - * send NL80211_CMD_REG_CHANGE event to the hostapd waking it up to - * query channel list from nl80211. Thus we need to update the channels - * according to reg domain set by user before returning to nl80211 so - * that hostapd will gets the updated channels. - * The argument sendRegHint in sme_ChangeCountryCode is - * set to eSIR_FALSE (hint is from nl80211 and thus - * no need to notify nl80211 back)*/ - status = sme_ChangeCountryCode(pHddCtx->hHal, - (void *)(tSmeChangeCountryCallback) - vos_nv_change_country_code_cb, - ccode, - &change_country_code, - pHddCtx->pvosContext, - eSIR_FALSE); - if (eHAL_STATUS_SUCCESS == status) - { - status = wait_for_completion_interruptible_timeout( - &change_country_code, - msecs_to_jiffies(WLAN_WAIT_TIME_COUNTRY)); - if(status <= 0) - { - wiphy_dbg(wiphy, "info: set country timed out\n"); - } - } - else - { - wiphy_dbg(wiphy, "info: unable to set country by user\n"); + if (create_crda_regulatory_entry(wiphy, request, pHddCtx->cfg_ini->nBandCapability) != 0) return 0; - } // ToDo /* Don't change default country code to CRDA country code by user req */ /* Shouldcall sme_ChangeCountryCode to send a message to trigger read @@ -2392,8 +2816,7 @@ int wlan_hdd_crda_reg_notifier(struct wiphy *wiphy, //sme_ChangeCountryCode(pHddCtx->hHal, NULL, // &country_code[0], pAdapter, pHddCtx->pvosContext); } - - if (request->initiator == NL80211_REGDOM_SET_BY_COUNTRY_IE) + else if (request->initiator == NL80211_REGDOM_SET_BY_COUNTRY_IE) { wiphy_dbg(wiphy, "info: set by country IE\n"); if (create_crda_regulatory_entry(wiphy, request, pHddCtx->cfg_ini->nBandCapability) != 0) @@ -2408,8 +2831,7 @@ int wlan_hdd_crda_reg_notifier(struct wiphy *wiphy, // &country_code[0], pAdapter, pHddCtx->pvosContext); } else if (request->initiator == NL80211_REGDOM_SET_BY_DRIVER || - (request->initiator == NL80211_REGDOM_SET_BY_CORE)|| - (request->initiator == NL80211_REGDOM_SET_BY_USER)) + (request->initiator == NL80211_REGDOM_SET_BY_CORE)) { if ( eHAL_STATUS_SUCCESS != sme_GetCountryCode(pHddCtx->hHal, ccode, &uBufLen)) { @@ -2527,26 +2949,16 @@ int wlan_hdd_crda_reg_notifier(struct wiphy *wiphy, } /* Haven't seen any condition that will set by driver after init. If we do, then we should also call sme_ChangeCountryCode */ - - /* To Disable the strict regulatory FCC rule, need set - gEnableStrictRegulatoryForFCC to zero from INI. - By default regulatory FCC rule enable or set to 1, and - in this case one can control dynamically using IOCTL - (nEnableStrictRegulatoryForFCC). - If gEnableStrictRegulatoryForFCC is set to zero then - IOCTL operation is inactive */ - - if ( pHddCtx->cfg_ini->gEnableStrictRegulatoryForFCC && - wiphy->bands[IEEE80211_BAND_5GHZ]) + if (wiphy->bands[IEEE80211_BAND_5GHZ]) { for (j=0; j<wiphy->bands[IEEE80211_BAND_5GHZ]->n_channels; j++) { - // UNII-1 band channels are passive when domain is FCC. + // p2p UNII-1 band channels are passive when domain is FCC. if ((wiphy->bands[IEEE80211_BAND_5GHZ ]->channels[j].center_freq == 5180 || wiphy->bands[IEEE80211_BAND_5GHZ]->channels[j].center_freq == 5200 || wiphy->bands[IEEE80211_BAND_5GHZ]->channels[j].center_freq == 5220 || wiphy->bands[IEEE80211_BAND_5GHZ]->channels[j].center_freq == 5240) && - ((domainIdCurrent == REGDOMAIN_FCC) && pHddCtx->nEnableStrictRegulatoryForFCC)) + (ccode[0]== 'U'&& ccode[1]=='S')) { wiphy->bands[IEEE80211_BAND_5GHZ]->channels[j].flags |= IEEE80211_CHAN_PASSIVE_SCAN; } @@ -2554,7 +2966,7 @@ int wlan_hdd_crda_reg_notifier(struct wiphy *wiphy, wiphy->bands[IEEE80211_BAND_5GHZ]->channels[j].center_freq == 5200 || wiphy->bands[IEEE80211_BAND_5GHZ]->channels[j].center_freq == 5220 || wiphy->bands[IEEE80211_BAND_5GHZ]->channels[j].center_freq == 5240) && - ((domainIdCurrent != REGDOMAIN_FCC) || !pHddCtx->nEnableStrictRegulatoryForFCC)) + (ccode[0]!= 'U'&& ccode[1]!='S')) { wiphy->bands[IEEE80211_BAND_5GHZ]->channels[j].flags &= ~IEEE80211_CHAN_PASSIVE_SCAN; } @@ -2566,8 +2978,5 @@ int wlan_hdd_crda_reg_notifier(struct wiphy *wiphy, } } } - - complete(&pHddCtx->wiphy_channel_update_event); - return 0; } diff --git a/drivers/staging/prima/CORE/VOSS/src/vos_packet.c b/drivers/staging/prima/CORE/VOSS/src/vos_packet.c index e266abb3b99..6d9436471d4 100644 --- a/drivers/staging/prima/CORE/VOSS/src/vos_packet.c +++ b/drivers/staging/prima/CORE/VOSS/src/vos_packet.c @@ -185,23 +185,21 @@ static void vos_pkti_replenish_raw_pool(void) vos_pkt_get_packet_callback callback; // if there are no packets in the replenish pool then we can't do anything - mutex_lock(&gpVosPacketContext->rxReplenishListLock); if (likely(0 == gpVosPacketContext->rxReplenishListCount)) { - mutex_unlock(&gpVosPacketContext->rxReplenishListLock); return; } // we only replenish if the Rx Raw pool is empty or the Replenish pool // reaches a high water mark - mutex_lock(&gpVosPacketContext->rxRawFreeListLock); + mutex_lock(&gpVosPacketContext->mlock); + if ((gpVosPacketContext->rxReplenishListCount < gpVosPacketContext->numOfRxRawPackets/4) && (!list_empty(&gpVosPacketContext->rxRawFreeList))) { - mutex_unlock(&gpVosPacketContext->rxRawFreeListLock); - mutex_unlock(&gpVosPacketContext->rxReplenishListLock); + mutex_unlock(&gpVosPacketContext->mlock); return; } @@ -268,14 +266,12 @@ static void vos_pkti_replenish_raw_pool(void) callback = gpVosPacketContext->rxRawLowResourceInfo.callback; gpVosPacketContext->rxRawLowResourceInfo.callback = NULL; - mutex_unlock(&gpVosPacketContext->rxRawFreeListLock); - mutex_unlock(&gpVosPacketContext->rxReplenishListLock); + mutex_unlock(&gpVosPacketContext->mlock); callback(pVosPacket, gpVosPacketContext->rxRawLowResourceInfo.userData); } else { - mutex_unlock(&gpVosPacketContext->rxRawFreeListLock); - mutex_unlock(&gpVosPacketContext->rxReplenishListLock); + mutex_unlock(&gpVosPacketContext->mlock); } } @@ -392,7 +388,6 @@ VOS_STATUS vos_packet_open( v_VOID_t *pVosContext, pVosPacketContext->vosContext = pVosContext; // initialize the rx Replenish pool (initially empty) - mutex_init(&gpVosPacketContext->rxReplenishListLock); INIT_LIST_HEAD(&pVosPacketContext->rxReplenishList); pVosPacketContext->rxReplenishListCount = 0; @@ -400,7 +395,6 @@ VOS_STATUS vos_packet_open( v_VOID_t *pVosContext, freePacketIndex = 0; // initialize the rxRaw free list pool - mutex_init(&gpVosPacketContext->rxRawFreeListLock); pFreeList = &pVosPacketContext->rxRawFreeList; pVosPacketContext->rxRawFreeListCount = 0; INIT_LIST_HEAD(pFreeList); @@ -435,7 +429,6 @@ VOS_STATUS vos_packet_open( v_VOID_t *pVosContext, } // initialize the txData free list pool - mutex_init(&gpVosPacketContext->txDataFreeListLock); pFreeList = &pVosPacketContext->txDataFreeList; INIT_LIST_HEAD(pFreeList); @@ -465,10 +458,10 @@ VOS_STATUS vos_packet_open( v_VOID_t *pVosContext, } // initialize the txMgmt free list pool - mutex_init(&gpVosPacketContext->txMgmtFreeListLock); pFreeList = &pVosPacketContext->txMgmtFreeList; INIT_LIST_HEAD(pFreeList); + mutex_init(&gpVosPacketContext->mlock); // fill the txMgmt free list for (idx = 0; idx < VPKT_NUM_TX_MGMT_PACKETS; idx++) { @@ -542,27 +535,19 @@ VOS_STATUS vos_packet_close( v_PVOID_t pVosContext ) return VOS_STATUS_E_INVAL; } - - mutex_lock(&gpVosPacketContext->txMgmtFreeListLock); + mutex_lock(&gpVosPacketContext->mlock); (void) vos_pkti_list_destroy(&gpVosPacketContext->txMgmtFreeList); - mutex_unlock(&gpVosPacketContext->txMgmtFreeListLock); - - mutex_lock(&gpVosPacketContext->txDataFreeListLock); (void) vos_pkti_list_destroy(&gpVosPacketContext->txDataFreeList); - gpVosPacketContext->uctxDataFreeListCount = 0; - mutex_unlock(&gpVosPacketContext->txDataFreeListLock); - - mutex_lock(&gpVosPacketContext->rxRawFreeListLock); (void) vos_pkti_list_destroy(&gpVosPacketContext->rxRawFreeList); - gpVosPacketContext->rxRawFreeListCount = 0; - mutex_unlock(&gpVosPacketContext->rxRawFreeListLock); - - mutex_lock(&gpVosPacketContext->rxReplenishListLock); (void) vos_pkti_list_destroy(&gpVosPacketContext->rxReplenishList); + + gpVosPacketContext->rxRawFreeListCount = 0; gpVosPacketContext->rxReplenishListCount = 0; - mutex_unlock(&gpVosPacketContext->rxReplenishListLock); + gpVosPacketContext->uctxDataFreeListCount = 0; + mutex_unlock(&gpVosPacketContext->mlock); + gpVosPacketContext->uctxDataFreeListCount = 0; return VOS_STATUS_SUCCESS; } @@ -657,8 +642,6 @@ VOS_STATUS vos_pkt_get_packet( vos_pkt_t **ppPacket, vos_pkt_low_resource_info *pLowResourceInfo; struct vos_pkt_t *pVosPacket; v_SIZE_t *pCount = NULL; - struct mutex *mlock; - // Validate the return parameter pointer if (unlikely(NULL == ppPacket)) { @@ -692,7 +675,6 @@ VOS_STATUS vos_pkt_get_packet( vos_pkt_t **ppPacket, case VOS_PKT_TYPE_RX_RAW: pPktFreeList = &gpVosPacketContext->rxRawFreeList; pLowResourceInfo = &gpVosPacketContext->rxRawLowResourceInfo; - mlock = &gpVosPacketContext->rxRawFreeListLock; // see if we need to replenish the Rx Raw pool vos_pkti_replenish_raw_pool(); @@ -703,7 +685,6 @@ VOS_STATUS vos_pkt_get_packet( vos_pkt_t **ppPacket, case VOS_PKT_TYPE_TX_802_11_MGMT: pPktFreeList = &gpVosPacketContext->txMgmtFreeList; pLowResourceInfo = &gpVosPacketContext->txMgmtLowResourceInfo; - mlock = &gpVosPacketContext->txMgmtFreeListLock; break; default: @@ -718,13 +699,13 @@ VOS_STATUS vos_pkt_get_packet( vos_pkt_t **ppPacket, // then we know we are already in a low-resource condition if (unlikely(pLowResourceInfo->callback)) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_WARN, + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "VPKT [%d]: Low resource handler already registered", __LINE__); return VOS_STATUS_E_ALREADY; } - mutex_lock(mlock); + mutex_lock(&gpVosPacketContext->mlock); // are there vos packets on the associated free pool? if (unlikely(list_empty(pPktFreeList))) { @@ -735,7 +716,7 @@ VOS_STATUS vos_pkt_get_packet( vos_pkt_t **ppPacket, VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "VPKT [%d]: Low resource condition and no callback provided", __LINE__); - mutex_unlock(mlock); + mutex_unlock(&gpVosPacketContext->mlock); return VOS_STATUS_E_FAILURE; } @@ -747,7 +728,7 @@ VOS_STATUS vos_pkt_get_packet( vos_pkt_t **ppPacket, VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_WARN, "VPKT [%d]: Low resource condition for packet type %d[%s]", __LINE__, pktType, vos_pkti_packet_type_str(pktType)); - mutex_unlock(mlock); + mutex_unlock(&gpVosPacketContext->mlock); return VOS_STATUS_E_RESOURCES; } @@ -759,7 +740,7 @@ VOS_STATUS vos_pkt_get_packet( vos_pkt_t **ppPacket, { (*pCount)--; } - mutex_unlock(mlock); + mutex_unlock(&gpVosPacketContext->mlock); // clear out the User Data pointers in the voss packet.. memset(&pVosPacket->pvUserData, 0, sizeof(pVosPacket->pvUserData)); @@ -880,7 +861,6 @@ VOS_STATUS vos_pkt_wrap_data_packet( vos_pkt_t **ppPacket, struct list_head *pPktFreeList; vos_pkt_low_resource_info *pLowResourceInfo; struct vos_pkt_t *pVosPacket; - struct mutex *mlock; // Validate the return parameter pointer if (unlikely(NULL == ppPacket)) @@ -903,19 +883,15 @@ VOS_STATUS vos_pkt_wrap_data_packet( vos_pkt_t **ppPacket, // determine which packet pool and low resource block we should use. pPktFreeList = &gpVosPacketContext->txDataFreeList; pLowResourceInfo = &gpVosPacketContext->txDataLowResourceInfo; - mlock = &gpVosPacketContext->txDataFreeListLock; - - mutex_lock(mlock); // is there already a low resource callback registered for this pool? // we only support one callback per pool, so if one is already registered // then we know we are already in a low-resource condition if (unlikely(pLowResourceInfo->callback)) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_WARN, + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "VPKT [%d]: Low resource handler already registered", __LINE__); - mutex_unlock(mlock); return VOS_STATUS_E_ALREADY; } @@ -929,7 +905,6 @@ VOS_STATUS vos_pkt_wrap_data_packet( vos_pkt_t **ppPacket, VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "VPKT [%d]: Low resource condition and no callback provided", __LINE__); - mutex_unlock(mlock); return VOS_STATUS_E_FAILURE; } @@ -940,7 +915,6 @@ VOS_STATUS vos_pkt_wrap_data_packet( vos_pkt_t **ppPacket, VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_WARN, "VPKT [%d]: Low resource condition for pool %s", __LINE__, vos_pkti_packet_type_str(pktType)); - mutex_unlock(mlock); return VOS_STATUS_E_RESOURCES; } @@ -948,7 +922,6 @@ VOS_STATUS vos_pkt_wrap_data_packet( vos_pkt_t **ppPacket, pVosPacket = list_first_entry(pPktFreeList, struct vos_pkt_t, node); list_del(&pVosPacket->node); gpVosPacketContext->uctxDataFreeListCount --; - mutex_unlock(mlock); // clear out the User Data pointers in the voss packet.. memset(&pVosPacket->pvUserData, 0, sizeof(pVosPacket->pvUserData)); @@ -1301,8 +1274,7 @@ VOS_STATUS vos_pkt_return_packet( vos_pkt_t *pPacket ) vos_pkt_get_packet_callback callback; v_SIZE_t *pCount; VOS_PKT_TYPE packetType = VOS_PKT_TYPE_TX_802_3_DATA; - v_BOOL_t lowResource; - struct mutex * mlock; + v_BOOL_t lowResource = VOS_FALSE; // Validate the input parameter pointer if (unlikely(NULL == pPacket)) @@ -1317,7 +1289,6 @@ VOS_STATUS vos_pkt_return_packet( vos_pkt_t *pPacket ) pNext = pPacket->pNext; pPacket->pNext = NULL; - lowResource = VOS_FALSE; // Validate that this really an initialized vos packet if (unlikely(VPKT_MAGIC_NUMBER != pPacket->magic)) { @@ -1348,14 +1319,12 @@ VOS_STATUS vos_pkt_return_packet( vos_pkt_t *pPacket ) pPktFreeList = &gpVosPacketContext->rxRawFreeList; pLowResourceInfo = &gpVosPacketContext->rxRawLowResourceInfo; pCount = &gpVosPacketContext->rxRawFreeListCount; - mlock = &gpVosPacketContext->rxRawFreeListLock; } else { pPktFreeList = &gpVosPacketContext->rxReplenishList; pLowResourceInfo = NULL; pCount = &gpVosPacketContext->rxReplenishListCount; - mlock = &gpVosPacketContext->rxReplenishListLock; } packetType = VOS_PKT_TYPE_RX_RAW; break; @@ -1364,14 +1333,12 @@ VOS_STATUS vos_pkt_return_packet( vos_pkt_t *pPacket ) pPktFreeList = &gpVosPacketContext->txMgmtFreeList; pLowResourceInfo = &gpVosPacketContext->txMgmtLowResourceInfo; - mlock = &gpVosPacketContext->txMgmtFreeListLock; - + break; case VOS_PKT_TYPE_TX_802_3_DATA: pPktFreeList = &gpVosPacketContext->txDataFreeList; pLowResourceInfo = &gpVosPacketContext->txDataLowResourceInfo; - mlock = &gpVosPacketContext->txDataFreeListLock; gpVosPacketContext->uctxDataFreeListCount ++; break; @@ -1391,10 +1358,10 @@ VOS_STATUS vos_pkt_return_packet( vos_pkt_t *pPacket ) // pLowResourceInfo->callback is modified from threads (different CPU's). // So a mutex is enough to protect is against a race condition. // mutex is SMP safe - mutex_lock(mlock); + mutex_lock(&gpVosPacketContext->mlock); callback = pLowResourceInfo->callback; pLowResourceInfo->callback = NULL; - mutex_unlock(mlock); + mutex_unlock(&gpVosPacketContext->mlock); // only one context can get a valid callback if(callback) @@ -1434,14 +1401,14 @@ VOS_STATUS vos_pkt_return_packet( vos_pkt_t *pPacket ) "VPKT [%d]: [%p] Packet returned, type %d[%s]", __LINE__, pPacket, pPacket->packetType, vos_pkti_packet_type_str(pPacket->packetType)); - mutex_lock(mlock); + mutex_lock(&gpVosPacketContext->mlock); list_add_tail(&pPacket->node, pPktFreeList); - + mutex_unlock(&gpVosPacketContext->mlock); + if (pCount) { (*pCount)++; } - mutex_unlock(mlock); } // move to next packet in the chain @@ -2939,8 +2906,6 @@ VOS_STATUS vos_pkt_get_available_buffer_pool (VOS_PKT_TYPE pktType, struct list_head *pList; struct list_head *pNode; v_SIZE_t count; - struct mutex *mlock; - if (NULL == vosFreeBuffer) { return VOS_STATUS_E_INVAL; @@ -2950,7 +2915,6 @@ VOS_STATUS vos_pkt_get_available_buffer_pool (VOS_PKT_TYPE pktType, { case VOS_PKT_TYPE_TX_802_11_MGMT: pList = &gpVosPacketContext->txMgmtFreeList; - mlock = &gpVosPacketContext->txMgmtFreeListLock; break; case VOS_PKT_TYPE_TX_802_11_DATA: @@ -2961,10 +2925,7 @@ VOS_STATUS vos_pkt_get_available_buffer_pool (VOS_PKT_TYPE pktType, return VOS_STATUS_SUCCESS; } else - { - pList = &gpVosPacketContext->txDataFreeList; - mlock = &gpVosPacketContext->txDataFreeListLock; - } + pList = &gpVosPacketContext->txDataFreeList; break; case VOS_PKT_TYPE_RX_RAW: @@ -2982,12 +2943,12 @@ VOS_STATUS vos_pkt_get_available_buffer_pool (VOS_PKT_TYPE pktType, } count = 0; - mutex_lock(mlock); + mutex_lock(&gpVosPacketContext->mlock); list_for_each(pNode, pList) { count++; } - mutex_unlock(mlock); + mutex_unlock(&gpVosPacketContext->mlock); *vosFreeBuffer = count; return VOS_STATUS_SUCCESS; } diff --git a/drivers/staging/prima/CORE/VOSS/src/vos_power.c b/drivers/staging/prima/CORE/VOSS/src/vos_power.c index 81b78e343b1..5bf8724ba8d 100644 --- a/drivers/staging/prima/CORE/VOSS/src/vos_power.c +++ b/drivers/staging/prima/CORE/VOSS/src/vos_power.c @@ -98,6 +98,22 @@ when who what, where, why #include <mach/vreg.h> #include <linux/err.h> #include <linux/delay.h> + +#ifdef MSM_PLATFORM_7x30 +#include <mach/irqs-7x30.h> +#include <linux/mfd/pmic8058.h> +#include <mach/rpc_pmapp.h> +#include <mach/pmic.h> +#endif + +#ifdef MSM_PLATFORM_8660 +#include <qcomwlan_pwrif.h> +#endif + +#ifdef MSM_PLATFORM_7x27A +#include <linux/qcomwlan7x27a_pwrif.h> +#endif + #endif //MSM_PLATFORM #include <vos_sched.h> @@ -122,6 +138,391 @@ when who what, where, why // SDIO Config Cycle Clock Frequency #define WLAN_LOW_SD_CONFIG_CLOCK_FREQ 400000 +#ifdef MSM_PLATFORM_7x30 + +#define PM8058_GPIO_PM_TO_SYS(pm_gpio) (pm_gpio + NR_GPIO_IRQS) + +static const char* id = "WLAN"; + +struct wlan_pm8058_gpio { + int gpio_num; + struct pm_gpio gpio_cfg; +}; + + +//PMIC8058 GPIO COnfiguration for MSM7x30 //ON +static struct wlan_pm8058_gpio wlan_gpios_reset[] = { + {PM8058_GPIO_PM_TO_SYS(22),{PM_GPIO_DIR_OUT, PM_GPIO_OUT_BUF_CMOS, 0, PM_GPIO_PULL_NO, 2, PM_GPIO_STRENGTH_LOW, PM_GPIO_FUNC_NORMAL, 0}}, +}; + +//OFF +static struct wlan_pm8058_gpio wlan_gpios_reset_out[] = { + {PM8058_GPIO_PM_TO_SYS(22),{PM_GPIO_DIR_OUT, PM_GPIO_OUT_BUF_CMOS, 1, PM_GPIO_PULL_NO, 2, PM_GPIO_STRENGTH_HIGH, PM_GPIO_FUNC_NORMAL, 0}}, +}; + + +/* Routine to power on/off Volans chip */ +int vos_chip_power_qrf8600(int on) +{ + struct vreg *vreg_wlan = NULL; + struct vreg *vreg_gp16 = NULL; + struct vreg *vreg_gp15 = NULL; + struct vreg *vreg_s2 = NULL; + int rc = 0; + +VOS_PWR_SLEEP(100); + //2.9v PA from LDO13 + vreg_wlan = vreg_get(NULL, "wlan"); + if (IS_ERR(vreg_wlan)) { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: wlan vreg get failed (%ld)\n", + __func__, PTR_ERR(vreg_wlan)); + return PTR_ERR(vreg_wlan); + } + + //1.2V AON from LDO24 + vreg_gp16 = vreg_get(NULL, "gp16"); + if (IS_ERR(vreg_gp16)) { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: gp16 vreg get failed (%ld)\n", + __func__, PTR_ERR(vreg_gp16)); + return PTR_ERR(vreg_gp16); + } + + //1.2V sw from LDO22 + vreg_gp15 = vreg_get(NULL, "gp15"); + if (IS_ERR(vreg_gp15)) { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: gp15 vreg get failed (%ld)\n", + __func__, PTR_ERR(vreg_gp15)); + return PTR_ERR(vreg_gp15); + } + + //1.3V sw from S2 + vreg_s2 = vreg_get(NULL, "s2"); + if (IS_ERR(vreg_s2)) { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: s2 vreg get failed (%ld)\n", + __func__, PTR_ERR(vreg_s2)); + return PTR_ERR(vreg_s2); + } + + if (on) { + /* Program GPIO 23 to de-assert (drive 1) external_por_n (default 0x00865a05 */ + rc = pm8xxx_gpio_config(wlan_gpios_reset[0].gpio_num, &wlan_gpios_reset[0].gpio_cfg); + if (rc) { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: pmic gpio %d config failed (%d)\n", + __func__, wlan_gpios_reset[0].gpio_num, rc); + return -EIO; + } + VOS_PWR_SLEEP(300); + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO, "WLAN put in reset mode \n"); +#if 0 + rc = pmapp_clock_vote("wlan", PMAPP_CLOCK_ID_A0, PMAPP_CLOCK_VOTE_ON); + if (rc) { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: Voting TCXO to ON failed. (%d)\n",__func__, rc); + return -EIO; + } +#endif + /* Configure TCXO to be slave to WLAN_CLK_PWR_REQ */ + rc = pmapp_clock_vote(id, PMAPP_CLOCK_ID_A0, PMAPP_CLOCK_VOTE_PIN_CTRL); + if (rc) { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: Configuring TCXO to Pin controllable failed. (%d)\n",__func__, rc); + return -EIO; + } + + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO, "TCXO configured to be slave to WLAN_CLK_PWR-REQ \n"); + printk(KERN_ERR "TCXO is now slave to clk_pwr_req \n"); + + //Wait 10msec + msleep(10); + + /* Enable L13 to output 2.9V (default 2.9V) */ + rc = vreg_set_level(vreg_wlan, 3050); + if (rc) { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: wlan vreg set level failed (%d)\n", __func__, rc); + return -EIO; + } + + rc = vreg_enable(vreg_wlan); + if (rc) { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: wlan vreg enable failed. (%d)\n",__func__, rc); + return -EIO; + } + + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO, "2.9V Power Supply Enabled \n"); + printk(KERN_ERR "3.05V Supply Enabled \n"); + + /* Enable L24 to output 1.2V AON(default 1.3V) */ + rc = vreg_set_level(vreg_gp16, 1200); + if (rc) { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: gp16 vreg set level failed (%d)\n", __func__, rc); + return -EIO; + } + + rc = vreg_enable(vreg_gp16); + if (rc) { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: gp16 vreg enable failed. (%d)\n",__func__, rc); + return -EIO; + } + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO, "1.2V AON Power Supply Enabled \n"); + printk(KERN_ERR "1.2V AON Supply Enabled \n"); + + //Wait 300usec + msleep(1); + + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO, "1.2V AON Power Supply Enabled \n"); + + rc = pm8xxx_gpio_config(wlan_gpios_reset_out[0].gpio_num, &wlan_gpios_reset_out[0].gpio_cfg); + if (rc) { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: pmic gpio %d config failed (%d)\n", + __func__, wlan_gpios_reset_out[0].gpio_num, rc); + return -EIO; + } + + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO, "WLAN is out of reset now \n"); + printk(KERN_ERR "WLAN is out of reset \n"); + + /* Wait 500usec */ + msleep(1); + + /* TODO: Replace the code to enable 1.2V sw and 1.3V sw once we have the API to set these power supplies Pin controllable */ + + /* Enable 1.2 switcheable power supply */ + rc = vreg_set_level(vreg_gp15, 1200); + if (rc) { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: gp15 vreg set level failed (%d)\n", __func__, rc); + return -EIO; + } + +#ifdef WLAN_FEATURE_VOS_POWER_VOTED_SUPPLY + rc = vreg_enable(vreg_gp15); + if (rc) { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: gp15 vreg enable failed. (%d)\n",__func__, rc); + return -EIO; + } +#else + /* 1.2v switchable supply is following the clk_pwr_req signal */ + rc = pmapp_vreg_pincntrl_vote(id, PMAPP_VREG_LDO22, PMAPP_CLOCK_ID_A0, VOS_TRUE); + if (rc) { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: gp15 vreg enable failed. (%d)\n",__func__, rc); + return -EIO; + } + vos_sleep(5); +#endif + + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO, "1.2V sw Power Supply is enabled \n"); + printk(KERN_ERR "1.2V sw is enabled \n"); + + /* Enable 1.3 switcheable power supply */ + rc = pmapp_vreg_level_vote(id, PMAPP_VREG_S2, 1300); + if (rc) { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: s2 vreg set level failed (%d)\n", __func__, rc); + return -EIO; + } + VOS_PWR_SLEEP(300); + +#ifdef WLAN_FEATURE_VOS_POWER_VOTED_SUPPLY + rc = vreg_enable(vreg_s2); + if (rc) { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: s2 vreg enable failed. .(%d)\n",__func__, rc); + return -EIO; + } + msleep(1); +#else + /* 1.3v switchable supply is following the clk_pwr_req signal */ + rc = pmapp_vreg_pincntrl_vote(id, PMAPP_VREG_S2, PMAPP_CLOCK_ID_A0, VOS_TRUE); + if (rc) { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: s2 vreg enable failed. (%d)\n",__func__, rc); + return -EIO; + } + vos_sleep(5); +#endif + + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO, "1.3V sw Power Supply is enabled \n"); + printk(KERN_ERR "1.3V sw is enabled \n"); + + } else { + + /** + Assert the external POR to keep the chip in reset state. When the chip is turned + on the next time, it won't be detected by the bus driver until we deassert it. + This is to work-around the issue where it fails sometimes when turning WIFI off and on + though GUI. The theory is that, even though we vote off 1.2V AON, it may still on because + it is shared by other components. When the next time to turn on WIFI, polling is turned on + first and when librasdioif.ko is loaded, the card is detected right away before wlan driver loads. + The bus driver may have finished configuration of the device. When WLAN driver loads, + it resets the device that causes issues when the bus driver tries to assess the chip later. + This setting draws more power after the driver is unloaded. + + The load sequence is + 1. Enable polling + 2. insmod librasdioif.ko (if card detected, stop polling) + 3. insmod libra.ko (reset the chip) + 4. stop polling + **/ + /* Program GPIO 23 to de-assert (drive 1) external_por_n to prevent chip detection + until it is asserted. + */ + rc = pm8xxx_gpio_config(wlan_gpios_reset[0].gpio_num, &wlan_gpios_reset[0].gpio_cfg); + if (rc) { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: pmic gpio %d config failed (%d)\n", + __func__, wlan_gpios_reset[0].gpio_num, rc); + return -EIO; + } + +#ifdef WLAN_FEATURE_VOS_POWER_VOTED_SUPPLY + /* TODO: Remove the code to disable 1.2V sw and 1.3V sw once we have the API to set these power supplies Pin controllable */ + printk(KERN_ERR "power down switchable\n"); + rc = pmapp_vreg_level_vote(id, PMAPP_VREG_S2, 0); + if (rc) { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: s2 vreg set level failed (%d)\n", __func__, rc); + return -EIO; + } + + /* 1.3V sw */ + rc = vreg_disable(vreg_s2); + if (rc) { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: s2 vreg disable failed (%d)\n", __func__, rc); + return -EIO; + } + + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO, "1.3V sw is disabled \n"); + + /* 1.2V sw */ + rc = vreg_disable(vreg_gp15); + if (rc) { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: gp15 vreg disable failed (%d)\n", __func__, rc); + return -EIO; + } + + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO, "1.2V sw is disabled \n"); +#endif //#ifdef WLAN_FEATURE_VOS_POWER_VOTED_SUPPLY + + /* 1.2V AON */ + rc = vreg_disable(vreg_gp16); + if (rc) { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: gp16 vreg disable failed (%d)\n", __func__, rc); + return -EIO; + } + + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO, "1.2V AON is disabled \n"); + +#ifdef VOLANS_2_0 + /* Cannot turn off 2.9V due to the PAD issue on Volans */ + + /* 2.9V */ + rc = vreg_disable(vreg_wlan); + if (rc) { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: wlan vreg disable failed (%d)\n", __func__, rc); + return -EIO; + } + + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO, "2.9V is disabled \n"); +#endif + } + + return rc; +} +#endif + +#ifdef MSM_PLATFORM_7x27_FFA + +#define MPP_4_CHIP_PWD_L 3 //MPP4 is hooked to Deep Sleep Signal + +//Helper routine to power up Libra keypad on the 7x27 FFA +int vos_chip_power_7x27_keypad( int on ) +{ + struct vreg *vreg_wlan, *vreg_bt = NULL; + int rc = 0; + + vreg_wlan = vreg_get(NULL, "wlan"); + if (IS_ERR(vreg_wlan)) { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: wlan vreg get failed (%ld)", + __func__, PTR_ERR(vreg_wlan)); + return PTR_ERR(vreg_wlan); + } + + vreg_bt = vreg_get(NULL, "gp6"); + if (IS_ERR(vreg_bt)) { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: gp6 vreg get failed (%ld)", + __func__, PTR_ERR(vreg_bt)); + return PTR_ERR(vreg_bt); + } + + if(on) { + + /* units of mV, steps of 50 mV */ + rc = vreg_set_level(vreg_bt, 2600); + if (rc) { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: vreg set level failed (%d)",__func__, rc); + return -EIO; + } + rc = vreg_enable(vreg_bt); + if (rc) { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: vreg enable failed (%d)",__func__, rc); + return -EIO; + } + + //Set TCXO to 1.8v. + rc = vreg_set_level(vreg_wlan, 1800); + if (rc) { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: vreg set level failed (%d)", __func__, rc); + return -EIO; + } + + rc = vreg_enable(vreg_wlan); + if (rc) { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: wlan vreg enable failed (%d)",__func__, rc); + return -EIO; + } + + msleep(100); + + // Pull MPP4 high to turn on various supply voltages. + rc = mpp_config_digital_out(MPP_4_CHIP_PWD_L, + MPP_CFG(MPP_DLOGIC_LVL_MSMP, MPP_DLOGIC_OUT_CTRL_HIGH)); + if (rc) { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: MPP_4 pull high failed (%d)",__func__, rc); + return -EIO; + } + + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: Enabled power supply for WLAN", __func__); + + msleep(500); + } + else + { + + // Pull MPP4 low to place the chip in reset. + rc = mpp_config_digital_out(MPP_4_CHIP_PWD_L, + MPP_CFG(MPP_DLOGIC_LVL_MSMP, MPP_DLOGIC_OUT_CTRL_LOW)); + if (rc) { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: MPP_4 pull low failed (%d)",__func__, rc); + return -EIO; + } + + msleep(100); + + /* Turn off 2.6V */ + rc = vreg_disable(vreg_bt); + if (rc) { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: vreg disable failed (%d)",__func__, rc); + return -EIO; + } + + /* Turn off 1.8V */ + rc = vreg_disable(vreg_wlan); + if (rc) { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: wlan vreg disable failed (%d)",__func__, rc); + return -EIO; + } + + msleep(100); + + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: Disabled power supply for WLAN", __func__); + } + + return 0; +} +#endif + /*=========================================================================== FUNCTION PROTOTYPES @@ -162,6 +563,27 @@ VOS_STATUS vos_chipPowerUp v_PVOID_t user_data ) { + +#ifdef MSM_PLATFORM_8660 + if(vos_chip_power_qrf8615(CHIP_POWER_ON)) + return VOS_STATUS_E_FAILURE; +#endif + +#ifdef MSM_PLATFORM_7x30 + if(vos_chip_power_qrf8600(CHIP_POWER_ON)) + return VOS_STATUS_E_FAILURE; +#endif + +#ifdef MSM_PLATFORM_7x27_FFA + if(vos_chip_power_7x27_keypad(CHIP_POWER_ON)) + return VOS_STATUS_E_FAILURE; +#endif + +#ifdef MSM_PLATFORM_7x27A + if(chip_power_qrf6285(CHIP_POWER_ON)) + return VOS_STATUS_E_FAILURE; +#endif + return VOS_STATUS_SUCCESS; } @@ -196,6 +618,29 @@ VOS_STATUS vos_chipPowerDown v_PVOID_t user_data ) { + +#ifdef MSM_PLATFORM_8660 + if(vos_chip_power_qrf8615(CHIP_POWER_OFF)) + return VOS_STATUS_E_FAILURE; +#endif + +#ifdef MSM_PLATFORM_7x30 +///#ifndef VOS_PWR_WIFI_ON_OFF_HACK + if(vos_chip_power_qrf8600(CHIP_POWER_OFF)) + return VOS_STATUS_E_FAILURE; +///#endif +#endif + +#ifdef MSM_PLATFORM_7x27_FFA + if(vos_chip_power_7x27_keypad(CHIP_POWER_OFF)) + return VOS_STATUS_E_FAILURE; +#endif + +#ifdef MSM_PLATFORM_7x27A + if(chip_power_qrf6285(CHIP_POWER_OFF)) + return VOS_STATUS_E_FAILURE; +#endif + return VOS_STATUS_SUCCESS; } @@ -352,6 +797,29 @@ VOS_STATUS vos_chipAssertDeepSleep v_PVOID_t user_data ) { +#ifdef FIXME_VOLANS +#ifdef MSM_PLATFORM_7x27_FFA + int rc = mpp_config_digital_out(MPP_4_CHIP_PWD_L, + MPP_CFG(MPP_DLOGIC_LVL_MSMP, MPP_DLOGIC_OUT_CTRL_LOW)); + if (rc) { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: Failed to pull high MPP_4_CHIP_PWD_L (%d)", + __func__, rc); + return VOS_STATUS_E_FAILURE; + } + +#endif + +#ifdef MSM_PLATFORM_7x30 + // Configure GPIO 23 for Deep Sleep + int rc = pm8xxx_gpio_config(wlan_gpios_reset_out[0].gpio_num, &wlan_gpios_reset_out[0].gpio_cfg); + if (rc) { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: pmic GPIO %d config failed (%d)", + __func__, wlan_gpios_reset_out[0].gpio_num, rc); + return VOS_STATUS_E_FAILURE; + } +#endif +#endif //FIXME_VOLANS + return VOS_STATUS_SUCCESS; } @@ -388,6 +856,29 @@ VOS_STATUS vos_chipDeAssertDeepSleep v_PVOID_t user_data ) { +#ifdef FIXME_VOLANS +#ifdef MSM_PLATFORM_7x27_FFA + int rc = mpp_config_digital_out(MPP_4_CHIP_PWD_L, + MPP_CFG(MPP_DLOGIC_LVL_MSMP, MPP_DLOGIC_OUT_CTRL_HIGH)); + if (rc) { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: Failed to pull high MPP_4_CHIP_PWD_L (%d)", + __func__, rc); + return VOS_STATUS_E_FAILURE; + } + + +#endif + +#ifdef MSM_PLATFORM_7x30 + // Configure GPIO 23 for Deep Sleep + int rc = pm8xxx_gpio_config(wlan_gpios_reset[2].gpio_num, &wlan_gpios_reset[2].gpio_cfg); + if (rc) { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: pmic GPIO %d config failed (%d)", + __func__, wlan_gpios_reset[2].gpio_num, rc); + return VOS_STATUS_E_FAILURE; + } +#endif +#endif //FIXME_VOLANS return VOS_STATUS_SUCCESS; } @@ -423,6 +914,57 @@ VOS_STATUS vos_chipExitDeepSleepVREGHandler v_PVOID_t user_data ) { +#ifdef FIXME_VOLANS +#ifdef MSM_PLATFORM_7x27_FFA + struct vreg *vreg_wlan; + int rc; + + vreg_wlan = vreg_get(NULL, "wlan"); + if (IS_ERR(vreg_wlan)) { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: wlan vreg get failed (%ld)", + __func__, PTR_ERR(vreg_wlan)); + return VOS_STATUS_E_FAILURE; + } + + rc = vreg_set_level(vreg_wlan, 1800); + if (rc) { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: wlan vreg set level failed (%d)", + __func__, rc); + return VOS_STATUS_E_FAILURE; + } + + rc = vreg_enable(vreg_wlan); + if (rc) { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: wlan vreg enable failed (%d)", + __func__, rc); + return VOS_STATUS_E_FAILURE; + } + + msleep(500); + + rc = vreg_set_level(vreg_wlan, 2600); + if (rc) { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: wlan vreg set level failed (%d)", + __func__, rc); + return VOS_STATUS_E_FAILURE; + } + + msleep(500); + + *status = VOS_CALL_SYNC; + +#endif + +#ifdef MSM_PLATFORM_7x30 + VOS_STATUS vosStatus; + vos_call_status_type callType; + + vosStatus = vos_chipVoteOnBBAnalogSupply(&callType, NULL, NULL); + VOS_ASSERT( VOS_IS_STATUS_SUCCESS( vosStatus ) ); + msleep(500); + +#endif +#endif //FIXME_VOLANS return VOS_STATUS_SUCCESS; } @@ -457,6 +999,58 @@ VOS_STATUS vos_chipVoteOnRFSupply v_PVOID_t user_data ) { +#ifdef FIXME_VOLANS +#ifdef MSM_PLATFORM_7x30 + int rc; + struct vreg *vreg_s2 = NULL; + struct vreg *vreg_s4 = NULL; + + //1.3v RF; + vreg_s2 = vreg_get(NULL, "s2"); + if (IS_ERR(vreg_s2)) { + printk(KERN_ERR "%s: s2 vreg get failed (%ld)\n", + __func__, PTR_ERR(vreg_s2)); + return VOS_STATUS_E_FAILURE; + } + + //2.2v RF + vreg_s4 = vreg_get(NULL, "s4"); + if (IS_ERR(vreg_s4)) { + printk(KERN_ERR "%s: s4 vreg get failed (%ld)\n", + __func__, PTR_ERR(vreg_s4)); + return VOS_STATUS_E_FAILURE; + } + + rc = pmapp_vreg_level_vote(id, PMAPP_VREG_S2, 1300); + if (rc) { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, "%s: s2 vreg vote " + "level failed (%d)",__func__, rc); + return VOS_STATUS_E_FAILURE; + } + + rc = vreg_enable(vreg_s2); + if (rc) { + printk(KERN_ERR "%s: s2 vreg enable failed (%d)\n", __func__, rc); + return VOS_STATUS_E_FAILURE; + } + + rc = pmapp_vreg_level_vote(id, PMAPP_VREG_S4, 2200); + if (rc) { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, "%s: s4 vreg vote " + "level failed (%d)",__func__, rc); + return VOS_STATUS_E_FAILURE; + } + + rc = vreg_enable(vreg_s4); + if (rc) { + printk(KERN_ERR "%s: s4 vreg enable failed (%d)\n", __func__, rc); + return VOS_STATUS_E_FAILURE; + } + + return VOS_STATUS_SUCCESS; + +#endif //MSM_PLATFORM_7x30 +#endif //FIXME_VOLANS return VOS_STATUS_SUCCESS; } @@ -494,6 +1088,55 @@ VOS_STATUS vos_chipVoteOffRFSupply v_PVOID_t user_data ) { +#ifdef FIXME_VOLANS +#ifdef MSM_PLATFORM_7x30 + + int rc; + struct vreg *vreg_s2; + struct vreg *vreg_s4; + + //1.3v RF + vreg_s2 = vreg_get(NULL, "s2"); + if (IS_ERR(vreg_s2)) { + printk(KERN_ERR "%s: s2 vreg get failed (%ld)\n", + __func__, PTR_ERR(vreg_s2)); + return VOS_STATUS_E_FAILURE; + } + + //2.2v RF + vreg_s4 = vreg_get(NULL, "s4"); + if (IS_ERR(vreg_s4)) { + printk(KERN_ERR "%s: s4 vreg get failed (%ld)\n", + __func__, PTR_ERR(vreg_s4)); + return VOS_STATUS_E_FAILURE; + } + + rc = pmapp_vreg_level_vote(id, PMAPP_VREG_S2, 0); + if (rc) { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_WARN, "%s: s2 vreg vote " + "level failed (%d)",__func__, rc); + } + + rc = vreg_disable(vreg_s2); + if (rc) { + printk(KERN_ERR "%s: s2 vreg disable failed (%d)\n", __func__, rc); + } + + rc = pmapp_vreg_level_vote(id, PMAPP_VREG_S4, 0); + if (rc) { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_WARN, "%s: s4 vreg vote " + "level failed (%d)",__func__, rc); + } + + rc = vreg_disable(vreg_s4); + if (rc) { + printk(KERN_ERR "%s: s4 vreg disable failed (%d)\n", __func__, rc); + } + + return VOS_STATUS_SUCCESS; + +#endif //MSM_PLATFORM_7x30 +#endif //FIXME_VOLANS return VOS_STATUS_SUCCESS; } @@ -529,6 +1172,34 @@ VOS_STATUS vos_chipVoteOnBBAnalogSupply v_PVOID_t user_data ) { +#ifdef FIXME_VOLANS +#ifdef MSM_PLATFORM_7x30 + struct vreg *vreg_wlan2 = NULL; + int rc; + + //2.5v Analog from LDO19 + vreg_wlan2 = vreg_get(NULL, "wlan2"); + if (IS_ERR(vreg_wlan2)) { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, "%s: wlan2 vreg get " + "failed (%ld)", __func__, PTR_ERR(vreg_wlan2)); + return VOS_STATUS_E_FAILURE; + } + + rc = vreg_set_level(vreg_wlan2, 2500); + if (rc) { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, "%s: wlan2 vreg set " + "level failed (%d)",__func__, rc); + return VOS_STATUS_E_FAILURE; + } + + rc = vreg_enable(vreg_wlan2); + if (rc) { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, "%s: wlan2 vreg enable " + "failed (%d)", __func__, rc); + return VOS_STATUS_E_FAILURE; + } +#endif +#endif //FIXME_VOLANS return VOS_STATUS_SUCCESS; } @@ -564,6 +1235,27 @@ VOS_STATUS vos_chipVoteOffBBAnalogSupply v_PVOID_t user_data ) { +#ifdef FIXME_VOLANS +#ifdef MSM_PLATFORM_7x30 + struct vreg *vreg_wlan2 = NULL; + int rc; + + //2.5v Analog from LDO19 + vreg_wlan2 = vreg_get(NULL, "wlan2"); + if (IS_ERR(vreg_wlan2)) { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, "%s: wlan2 vreg get " + "failed (%ld)", __func__, PTR_ERR(vreg_wlan2)); + return VOS_STATUS_E_FAILURE; + } + + rc = vreg_disable(vreg_wlan2); + if (rc) { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, "%s: wlan2 vreg disable " + "failed (%d)", __func__, rc); + return VOS_STATUS_E_FAILURE; + } +#endif +#endif //FIXME_VOLANS return VOS_STATUS_SUCCESS; } @@ -714,5 +1406,20 @@ VOS_STATUS vos_chipVoteFreqFor1p3VSupply v_U32_t freq ) { + + +#ifdef MSM_PLATFORM_8660 + if(freq == VOS_NV_FREQUENCY_FOR_1_3V_SUPPLY_3P2MH) + { + if(qcomwlan_freq_change_1p3v_supply(RPM_VREG_FREQ_3p20)) + return VOS_STATUS_E_FAILURE; + } + else + { + if(qcomwlan_freq_change_1p3v_supply(RPM_VREG_FREQ_1p60)) + return VOS_STATUS_E_FAILURE; + } +#endif + return VOS_STATUS_SUCCESS; } diff --git a/drivers/staging/prima/CORE/VOSS/src/vos_sched.c b/drivers/staging/prima/CORE/VOSS/src/vos_sched.c index 7cc459a4803..cff46c48882 100644 --- a/drivers/staging/prima/CORE/VOSS/src/vos_sched.c +++ b/drivers/staging/prima/CORE/VOSS/src/vos_sched.c @@ -80,15 +80,6 @@ * Preprocessor Definitions and Constants * ------------------------------------------------------------------------*/ #define VOS_SCHED_THREAD_HEART_BEAT INFINITE -/* Milli seconds to delay SSR thread when an Entry point is Active */ -#define SSR_WAIT_SLEEP_TIME 100 -/* MAX iteration count to wait for Entry point to exit before - * we proceed with SSR in WD Thread - */ -#define MAX_SSR_WAIT_ITERATIONS 20 - -static atomic_t ssr_protect_entry_count; - /*--------------------------------------------------------------------------- * Type Declarations * ------------------------------------------------------------------------*/ @@ -416,9 +407,10 @@ VosMCThread "%s: MC thread signaled to shutdown", __func__); shutdown = VOS_TRUE; /* Check for any Suspend Indication */ - if (test_and_clear_bit(MC_SUSPEND_EVENT_MASK, - &pSchedContext->mcEventFlag)) + if(test_bit(MC_SUSPEND_EVENT_MASK, &pSchedContext->mcEventFlag)) { + clear_bit(MC_SUSPEND_EVENT_MASK, &pSchedContext->mcEventFlag); + /* Unblock anyone waiting on suspend */ complete(&pHddCtx->mc_sus_event_var); } @@ -612,9 +604,9 @@ VosMCThread continue; } /* Check for any Suspend Indication */ - if (test_and_clear_bit(MC_SUSPEND_EVENT_MASK, - &pSchedContext->mcEventFlag)) + if(test_bit(MC_SUSPEND_EVENT_MASK, &pSchedContext->mcEventFlag)) { + clear_bit(MC_SUSPEND_EVENT_MASK, &pSchedContext->mcEventFlag); spin_lock(&pSchedContext->McThreadLock); /* Mc Thread Suspended */ @@ -663,10 +655,7 @@ VosWDThread pVosWatchdogContext pWdContext = (pVosWatchdogContext)Arg; int retWaitStatus = 0; v_BOOL_t shutdown = VOS_FALSE; - int count = 0; VOS_STATUS vosStatus = VOS_STATUS_SUCCESS; - hdd_context_t *pHddCtx = NULL; - v_CONTEXT_t pVosContext = NULL; set_user_nice(current, -3); if (Arg == NULL) @@ -675,24 +664,6 @@ VosWDThread "%s: Bad Args passed", __func__); return 0; } - - /* Get the Global VOSS Context */ - pVosContext = vos_get_global_context(VOS_MODULE_ID_SYS, NULL); - - if(!pVosContext) - { - hddLog(VOS_TRACE_LEVEL_FATAL,"%s: Global VOS context is Null", __func__); - return 0; - } - - /* Get the HDD context */ - pHddCtx = (hdd_context_t *)vos_get_context(VOS_MODULE_ID_HDD, pVosContext ); - - if(!pHddCtx) - { - hddLog(VOS_TRACE_LEVEL_FATAL,"%s: HDD context is Null",__func__); - return 0; - } daemonize("WD_Thread"); /* ** Ack back to the context from which the Watchdog thread has been @@ -716,33 +687,6 @@ VosWDThread clear_bit(WD_POST_EVENT_MASK, &pWdContext->wdEventFlag); while(1) { - /* Check for any Active Entry Points - * If active, delay SSR until no entry point is active or - * delay until count is decremented to ZERO - */ - count = MAX_SSR_WAIT_ITERATIONS; - while (count) - { - if (!atomic_read(&ssr_protect_entry_count)) - { - /* no external threads are executing */ - break; - } - /* at least one external thread is executing */ - if (--count) - { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, - "%s: Waiting for active entry points to exit", __func__); - msleep(SSR_WAIT_SLEEP_TIME); - } - } - /* at least one external thread is executing */ - if (!count) - { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, - "%s: Continuing SSR when %d Entry points are still active", - __func__, atomic_read(&ssr_protect_entry_count)); - } // Check if Watchdog needs to shutdown if(test_bit(WD_SHUTDOWN_EVENT_MASK, &pWdContext->wdEventFlag)) { @@ -798,7 +742,6 @@ VosWDThread goto err_reset; } pWdContext->resetInProgress = false; - complete(&pHddCtx->ssr_comp_var); } else { @@ -900,9 +843,10 @@ static int VosTXThread ( void * Arg ) "%s: TX thread signaled to shutdown", __func__); shutdown = VOS_TRUE; /* Check for any Suspend Indication */ - if (test_and_clear_bit(TX_SUSPEND_EVENT_MASK, - &pSchedContext->txEventFlag)) + if(test_bit(TX_SUSPEND_EVENT_MASK, &pSchedContext->txEventFlag)) { + clear_bit(TX_SUSPEND_EVENT_MASK, &pSchedContext->txEventFlag); + /* Unblock anyone waiting on suspend */ complete(&pHddCtx->tx_sus_event_var); } @@ -993,9 +937,9 @@ static int VosTXThread ( void * Arg ) continue; } /* Check for any Suspend Indication */ - if (test_and_clear_bit(TX_SUSPEND_EVENT_MASK, - &pSchedContext->txEventFlag)) + if(test_bit(TX_SUSPEND_EVENT_MASK, &pSchedContext->txEventFlag)) { + clear_bit(TX_SUSPEND_EVENT_MASK, &pSchedContext->txEventFlag); spin_lock(&pSchedContext->TxThreadLock); /* Tx Thread Suspended */ @@ -1095,9 +1039,10 @@ static int VosRXThread ( void * Arg ) "%s: RX thread signaled to shutdown", __func__); shutdown = VOS_TRUE; /* Check for any Suspend Indication */ - if (test_and_clear_bit(RX_SUSPEND_EVENT_MASK, - &pSchedContext->rxEventFlag)) + if(test_bit(RX_SUSPEND_EVENT_MASK, &pSchedContext->rxEventFlag)) { + clear_bit(RX_SUSPEND_EVENT_MASK, &pSchedContext->rxEventFlag); + /* Unblock anyone waiting on suspend */ complete(&pHddCtx->rx_sus_event_var); } @@ -1131,32 +1076,6 @@ static int VosRXThread ( void * Arg ) continue; } - // Check now the TL queue - if (!vos_is_mq_empty(&pSchedContext->tlRxMq)) - { - // Service the TL message queue - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO, - "%s: Servicing the VOS TL RX Message queue",__func__); - pMsgWrapper = vos_mq_get(&pSchedContext->tlRxMq); - if (pMsgWrapper == NULL) - { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, - "%s: pMsgWrapper is NULL", __func__); - VOS_ASSERT(0); - break; - } - vStatus = WLANTL_RxProcessMsg( pSchedContext->pVContext, - pMsgWrapper->pVosMsg); - if (!VOS_IS_STATUS_SUCCESS(vStatus)) - { - VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, - "%s: Issue Processing RX TL message",__func__); - } - // return message to the Core - vos_core_return_msg(pSchedContext->pVContext, pMsgWrapper); - continue; - } - // Check the WDI queue if (!vos_is_mq_empty(&pSchedContext->wdiRxMq)) { @@ -1194,9 +1113,9 @@ static int VosRXThread ( void * Arg ) } /* Check for any Suspend Indication */ - if (test_and_clear_bit(RX_SUSPEND_EVENT_MASK, - &pSchedContext->rxEventFlag)) + if(test_bit(RX_SUSPEND_EVENT_MASK, &pSchedContext->rxEventFlag)) { + clear_bit(RX_SUSPEND_EVENT_MASK, &pSchedContext->rxEventFlag); spin_lock(&pSchedContext->RxThreadLock); /* Rx Thread Suspended */ @@ -1250,7 +1169,7 @@ VOS_STATUS vos_sched_close ( v_PVOID_t pVosContext ) set_bit(MC_POST_EVENT_MASK, &gpVosSchedContext->mcEventFlag); wake_up_interruptible(&gpVosSchedContext->mcWaitQueue); //Wait for MC to exit - wait_for_completion(&gpVosSchedContext->McShutdown); + wait_for_completion_interruptible(&gpVosSchedContext->McShutdown); gpVosSchedContext->McThread = 0; // shut down TX Thread @@ -1258,7 +1177,7 @@ VOS_STATUS vos_sched_close ( v_PVOID_t pVosContext ) set_bit(TX_POST_EVENT_MASK, &gpVosSchedContext->txEventFlag); wake_up_interruptible(&gpVosSchedContext->txWaitQueue); //Wait for TX to exit - wait_for_completion(&gpVosSchedContext->TxShutdown); + wait_for_completion_interruptible(&gpVosSchedContext->TxShutdown); gpVosSchedContext->TxThread = 0; // shut down RX Thread @@ -1266,7 +1185,7 @@ VOS_STATUS vos_sched_close ( v_PVOID_t pVosContext ) set_bit(RX_POST_EVENT_MASK, &gpVosSchedContext->rxEventFlag); wake_up_interruptible(&gpVosSchedContext->rxWaitQueue); //Wait for RX to exit - wait_for_completion(&gpVosSchedContext->RxShutdown); + wait_for_completion_interruptible(&gpVosSchedContext->RxShutdown); gpVosSchedContext->RxThread = 0; //Clean up message queues of TX and MC thread @@ -1294,7 +1213,7 @@ VOS_STATUS vos_watchdog_close ( v_PVOID_t pVosContext ) set_bit(WD_POST_EVENT_MASK, &gpVosWatchdogContext->wdEventFlag); wake_up_interruptible(&gpVosWatchdogContext->wdWaitQueue); //Wait for Watchdog thread to exit - wait_for_completion(&gpVosWatchdogContext->WdShutdown); + wait_for_completion_interruptible(&gpVosWatchdogContext->WdShutdown); return VOS_STATUS_SUCCESS; } /* vos_watchdog_close() */ @@ -1391,18 +1310,6 @@ VOS_STATUS vos_sched_init_mqs ( pVosSchedContext pSchedContext ) VOS_ASSERT(0); return vStatus; } - - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO_HIGH, - "%s: Initializing the TL Rx Message queue",__func__); - vStatus = vos_mq_init(&pSchedContext->tlRxMq); - if (! VOS_IS_STATUS_SUCCESS(vStatus)) - { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, - "%s: Failed to init TL RX Message queue",__func__); - VOS_ASSERT(0); - return vStatus; - } - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO_HIGH, "%s: Initializing the WDI Tx Message queue",__func__); vStatus = vos_mq_init(&pSchedContext->wdiTxMq); @@ -1488,12 +1395,6 @@ void vos_sched_deinit_mqs ( pVosSchedContext pSchedContext ) VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO_HIGH, "%s De-Initializing the TL Tx Message queue",__func__); vos_mq_deinit(&pSchedContext->tlTxMq); - - //Rx TL - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO_HIGH, - "%s De-Initializing the TL Rx Message queue",__func__); - vos_mq_deinit(&pSchedContext->tlRxMq); - //Tx WDI VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO_HIGH, "%s: DeInitializing the WDI Tx Message queue",__func__); @@ -1553,7 +1454,7 @@ void vos_sched_flush_mc_mqs ( pVosSchedContext pSchedContext ) while( NULL != (pMsgWrapper = vos_mq_get(&pSchedContext->sysMcMq) )) { VOS_TRACE( VOS_MODULE_ID_VOSS, - VOS_TRACE_LEVEL_ERROR, + VOS_TRACE_LEVEL_INFO, "%s: Freeing MC SYS message type %d ",__func__, pMsgWrapper->pVosMsg->type ); sysMcFreeMsg(pSchedContext->pVContext, pMsgWrapper->pVosMsg); @@ -1564,7 +1465,7 @@ void vos_sched_flush_mc_mqs ( pVosSchedContext pSchedContext ) { if(pMsgWrapper->pVosMsg != NULL) { - VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO, "%s: Freeing MC WDA MSG message type %d", __func__, pMsgWrapper->pVosMsg->type ); if (pMsgWrapper->pVosMsg->bodyptr) { @@ -1583,28 +1484,13 @@ void vos_sched_flush_mc_mqs ( pVosSchedContext pSchedContext ) { if(pMsgWrapper->pVosMsg != NULL) { - VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO, "%s: Freeing MC WDI MSG message type %d", __func__, pMsgWrapper->pVosMsg->type ); - - /* MSG body pointer is not NULL - * and MSG type is 0 - * This MSG is not posted by SMD NOTIFY - * We have to free MSG body */ - if ((pMsgWrapper->pVosMsg->bodyptr) && (!pMsgWrapper->pVosMsg->type)) - { + if (pMsgWrapper->pVosMsg->bodyptr) { vos_mem_free((v_VOID_t*)pMsgWrapper->pVosMsg->bodyptr); } - /* MSG body pointer is not NULL - * and MSG type is not 0 - * This MSG is posted by SMD NOTIFY - * We should not free MSG body */ - else if ((pMsgWrapper->pVosMsg->bodyptr) && pMsgWrapper->pVosMsg->type) - { - VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, - "%s: SMD NOTIFY MSG, do not free body", - __func__); - } + pMsgWrapper->pVosMsg->bodyptr = NULL; pMsgWrapper->pVosMsg->bodyval = 0; pMsgWrapper->pVosMsg->type = 0; @@ -1616,7 +1502,7 @@ void vos_sched_flush_mc_mqs ( pVosSchedContext pSchedContext ) while( NULL != (pMsgWrapper = vos_mq_get(&pSchedContext->peMcMq) )) { VOS_TRACE( VOS_MODULE_ID_VOSS, - VOS_TRACE_LEVEL_ERROR, + VOS_TRACE_LEVEL_INFO, "%s: Freeing MC PE MSG message type %d",__func__, pMsgWrapper->pVosMsg->type ); peFreeMsg(vosCtx->pMACContext, (tSirMsgQ*)pMsgWrapper->pVosMsg); @@ -1626,7 +1512,7 @@ void vos_sched_flush_mc_mqs ( pVosSchedContext pSchedContext ) while( NULL != (pMsgWrapper = vos_mq_get(&pSchedContext->smeMcMq) )) { VOS_TRACE( VOS_MODULE_ID_VOSS, - VOS_TRACE_LEVEL_ERROR, + VOS_TRACE_LEVEL_INFO, "%s: Freeing MC SME MSG message type %d", __func__, pMsgWrapper->pVosMsg->type ); sme_FreeMsg(vosCtx->pMACContext, pMsgWrapper->pVosMsg); @@ -1636,7 +1522,7 @@ void vos_sched_flush_mc_mqs ( pVosSchedContext pSchedContext ) while( NULL != (pMsgWrapper = vos_mq_get(&pSchedContext->tlMcMq) )) { VOS_TRACE( VOS_MODULE_ID_VOSS, - VOS_TRACE_LEVEL_ERROR, + VOS_TRACE_LEVEL_INFO, "%s: Freeing MC TL message type %d",__func__, pMsgWrapper->pVosMsg->type ); WLANTL_McFreeMsg(pSchedContext->pVContext, pMsgWrapper->pVosMsg); @@ -1728,15 +1614,6 @@ void vos_sched_flush_rx_mqs ( pVosSchedContext pSchedContext ) sysTxFreeMsg(pSchedContext->pVContext, pMsgWrapper->pVosMsg); } - while( NULL != (pMsgWrapper = vos_mq_get(&pSchedContext->tlRxMq) )) - { - VOS_TRACE( VOS_MODULE_ID_VOSS, - VOS_TRACE_LEVEL_INFO, - "%s: Freeing RX TL MSG message type %d",__func__, - pMsgWrapper->pVosMsg->type ); - sysTxFreeMsg(pSchedContext->pVContext, pMsgWrapper->pVosMsg); - } - while( NULL != (pMsgWrapper = vos_mq_get(&pSchedContext->sysRxMq) )) { VOS_TRACE( VOS_MODULE_ID_VOSS, @@ -1868,7 +1745,6 @@ VOS_STATUS vos_watchdog_wlan_shutdown(void) /* Set the flags so that all future CMD53 and Wext commands get blocked right away */ vos_set_logp_in_progress(VOS_MODULE_ID_VOSS, TRUE); - vos_set_reinit_in_progress(VOS_MODULE_ID_VOSS, FALSE); pHddCtx->isLogpInProgress = TRUE; /* Release the lock here */ @@ -1922,37 +1798,3 @@ VOS_STATUS vos_watchdog_wlan_re_init(void) return VOS_STATUS_SUCCESS; } - -/** - @brief vos_ssr_protect() - - This function is called to keep track of active driver entry points - - @param - caller_func - Name of calling function. - @return - void -*/ -void vos_ssr_protect(const char *caller_func) -{ - int count; - count = atomic_inc_return(&ssr_protect_entry_count); - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: ENTRY ACTIVE %d", caller_func, count); -} - -/** - @brief vos_ssr_unprotect() - - @param - caller_func - Name of calling function. - @return - void -*/ -void vos_ssr_unprotect(const char *caller_func) -{ - int count; - count = atomic_dec_return(&ssr_protect_entry_count); - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: ENTRY INACTIVE %d", caller_func, count); -} diff --git a/drivers/staging/prima/CORE/VOSS/src/vos_sched.h b/drivers/staging/prima/CORE/VOSS/src/vos_sched.h index 13c0a5460ac..8426b2a3fb4 100644 --- a/drivers/staging/prima/CORE/VOSS/src/vos_sched.h +++ b/drivers/staging/prima/CORE/VOSS/src/vos_sched.h @@ -174,9 +174,6 @@ typedef struct _VosSchedContext /* TL Message queue on the Tx thread */ VosMqType tlTxMq; - /* TL Message queue on the Rx thread */ - VosMqType tlRxMq; - /* SYS Message queue on the Tx thread */ VosMqType sysTxMq; @@ -344,9 +341,6 @@ typedef struct _VosContextType volatile v_U8_t isLoadUnloadInProgress; - /* SSR re-init in progress */ - volatile v_U8_t isReInitInProgress; - } VosContextType, *pVosContextType; @@ -510,8 +504,5 @@ void clearWlanResetReason(void); void vos_timer_module_init( void ); VOS_STATUS vos_watchdog_wlan_shutdown(void); VOS_STATUS vos_watchdog_wlan_re_init(void); -int isWDresetInProgress(void); -void vos_ssr_protect(const char *caller_func); -void vos_ssr_unprotect(const char *caller_func); #endif // #if !defined __VOSS_SCHED_H diff --git a/drivers/staging/prima/CORE/VOSS/src/vos_timer.c b/drivers/staging/prima/CORE/VOSS/src/vos_timer.c index 2dd8f3f65d2..112f07b1bf2 100644 --- a/drivers/staging/prima/CORE/VOSS/src/vos_timer.c +++ b/drivers/staging/prima/CORE/VOSS/src/vos_timer.c @@ -46,11 +46,19 @@ \brief virtual Operating System Servies (vOS) Definitions for vOSS Timer services +<<<<<<< HEAD:CORE/VOSS/src/vos_timer.c + + Copyright 2008 (c) Qualcomm, Incorporated. All Rights Reserved. + + Qualcomm Confidential and Proprietary. + +======= Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. Qualcomm Technologies Confidential and Proprietary. +>>>>>>> f7413b6... wlan: voss: remove obsolete "INTEGRATED_SOC" featurization:prima/CORE/VOSS/src/vos_timer.c ========================================================================*/ /* $Header$ */ @@ -199,14 +207,7 @@ static void vos_linux_timer_callback ( v_U32_t data ) tryAllowingSleep( type ); - if (callback == NULL) - { - VOS_ASSERT(0); - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, - "%s: No TIMER callback, Could not enqueue timer to any queue", - __func__); - return; - } + VOS_ASSERT( callback ); // If timer has expired then call vos_client specific callback if ( vos_sched_is_tx_thread( threadId ) ) diff --git a/drivers/staging/prima/CORE/VOSS/src/vos_trace.c b/drivers/staging/prima/CORE/VOSS/src/vos_trace.c index 1af7736ac16..257e663135c 100644..100755 --- a/drivers/staging/prima/CORE/VOSS/src/vos_trace.c +++ b/drivers/staging/prima/CORE/VOSS/src/vos_trace.c @@ -77,7 +77,6 @@ Include Files ------------------------------------------------------------------------*/ #include <vos_trace.h> -#include <aniGlobal.h> /*-------------------------------------------------------------------------- Preprocessor definitions and constants ------------------------------------------------------------------------*/ @@ -123,25 +122,9 @@ moduleTraceInfo gVosTraceInfo[ VOS_MODULE_ID_MAX ] = [VOS_MODULE_ID_VOSS] = { VOS_DEFAULT_TRACE_LEVEL, "VOS" }, [VOS_MODULE_ID_SAP] = { VOS_DEFAULT_TRACE_LEVEL, "SAP" }, [VOS_MODULE_ID_HDD_SOFTAP] = { VOS_DEFAULT_TRACE_LEVEL, "HSP" }, - [VOS_MODULE_ID_PMC] = { VOS_DEFAULT_TRACE_LEVEL, "PMC" }, }; -/*------------------------------------------------------------------------- - Static and Global variables - ------------------------------------------------------------------------*/ -static spinlock_t ltraceLock; -static tvosTraceRecord gvosTraceTbl[MAX_VOS_TRACE_RECORDS]; -// Global vosTraceData -static tvosTraceData gvosTraceData; -/* - * all the call back functions for dumping MTRACE messages from ring buffer - * are stored in vostraceCBTable,these callbacks are initialized during init only - * so, we will make a copy of these call back functions and maintain in to - * vostraceRestoreCBTable. Incase if we make modifications to vostraceCBTable, - * we can certainly retrieve all the call back functions back from Restore Table - */ -static tpvosTraceCb vostraceCBTable[VOS_MODULE_ID_MAX]; -static tpvosTraceCb vostraceRestoreCBTable[VOS_MODULE_ID_MAX]; + /*------------------------------------------------------------------------- Functions ------------------------------------------------------------------------*/ @@ -208,6 +191,38 @@ void vos_trace_setValue( VOS_MODULE_ID module, VOS_TRACE_LEVEL level, v_U8_t on) } } +//Begin Motorola dcw476 4/17/13 IKJBXLINE-5577:changing wlan driver log level dynamically +void vos_trace_setValue_till_level( VOS_MODULE_ID module, VOS_TRACE_LEVEL level, v_U8_t on) { + // Make sure the caller is passing in a valid LEVEL. + if ( level < 0 || level >= VOS_TRACE_LEVEL_MAX ) + { + pr_err("%s: Invalid trace level %d passed in!\n", __func__, level); + return; + } + + // Make sure the caller is passing in a valid module. + if ( module < 0 || module >= VOS_MODULE_ID_MAX ) + { + pr_err("%s: Invalid module id %d passed in!\n", __func__, module); + return; + } + + // Treat 'none' differently. NONE means we have to turn off all + // the bits in the bit mask so none of the traces appear. + if ( VOS_TRACE_LEVEL_NONE == level ) + { + gVosTraceInfo[ module ].moduleTraceLevel = VOS_TRACE_LEVEL_NONE; + } + // Treat 'All' differently. All means we have to turn on all + // the bits in the bit mask so all of the traces appear. + else if ( VOS_TRACE_LEVEL_ALL == level ) + { + gVosTraceInfo[ module ].moduleTraceLevel = 0xFFFF; + } else { + gVosTraceInfo[ module ].moduleTraceLevel = VOS_TRACE_LEVEL_TO_MODULE_BITMASK( level +1) -1; + } +} +//IKJBXLINE-5577 v_BOOL_t vos_trace_getLevel( VOS_MODULE_ID module, VOS_TRACE_LEVEL level ) { @@ -390,359 +405,4 @@ void vos_trace_display(void) } } -/*---------------------------------------------------------------------------- - - \brief vos_trace_hex_dump() - Externally called hex dump function - - Checks the level of severity and accordingly prints the trace messages - - \param module - module identifier. A member of the VOS_MODULE_ID - enumeration that identifies the module issuing the trace message. - - \param level - trace level. A member of the VOS_TRACE_LEVEL - enumeration indicating the severity of the condition causing the - trace message to be issued. More severe conditions are more - likely to be logged. - - \param data - . The base address of the buffer to be logged. - - \param buf_len - . The size of the buffer to be logged. - - \return nothing - - \sa - --------------------------------------------------------------------------*/ -void vos_trace_hex_dump( VOS_MODULE_ID module, VOS_TRACE_LEVEL level, - void *data, int buf_len ) -{ - char *buf = (char *)data; - int i; - for (i=0; (i+7)<buf_len; i+=8) - { - vos_trace_msg( module, level, - "%02x %02x %02x %02x %02x %02x %02x %02x \n", - buf[i], - buf[i+1], - buf[i+2], - buf[i+3], - buf[i+4], - buf[i+5], - buf[i+6], - buf[i+7]); - } - - // Dump the bytes in the last line - for (; i < buf_len; i++) - { - vos_trace_msg( module, level, "%02x ", buf[i]); - if ((i+1) == buf_len) - vos_trace_msg( module, level, "\n"); - } - -} - #endif - -/*----------------------------------------------------------------------------- - \brief vosTraceEnable() - Enable MTRACE for specific modules whose bits are - set in bitmask and enable is true. if enable is false it disables MTRACE for - that module. set the bitmask according to enum value of the modules. - - this functions will be called when you issue ioctl as mentioned following - [iwpriv wlan0 setdumplog <value> <enable>]. - <value> - Decimal number, i.e. 64 decimal value shows only SME module, - 128 decimal value shows only PE module, 192 decimal value shows PE and SME. - - \param - bitmask_of_moduleId - as explained above set bitmask according to - enum of the modules. - 32 [dec] = 0010 0000 [bin] <enum of HDD is 5> - 64 [dec] = 0100 0000 [bin] <enum of SME is 6> - 128 [dec] = 1000 0000 [bin] <enum of PE is 7> - \param - enable - can be true or false. - True implies enabling MTRACE, false implies disabling MTRACE. - ---------------------------------------------------------------------------*/ -void vosTraceEnable(v_U32_t bitmask_of_moduleId, v_U8_t enable) -{ - int i; - if (bitmask_of_moduleId) - { - for (i=0; i<VOS_MODULE_ID_MAX; i++) - { - if (((bitmask_of_moduleId >> i) & 1 )) - { - if(enable) - { - if (NULL != vostraceRestoreCBTable[i]) - { - vostraceCBTable[i] = vostraceRestoreCBTable[i]; - } - } - else - { - vostraceRestoreCBTable[i] = vostraceCBTable[i]; - vostraceCBTable[i] = NULL; - } - } - } - } - - else - { - if(enable) - { - for (i=0; i<VOS_MODULE_ID_MAX; i++) - { - if (NULL != vostraceRestoreCBTable[i]) - { - vostraceCBTable[i] = vostraceRestoreCBTable[i]; - } - } - } - else - { - for (i=0; i<VOS_MODULE_ID_MAX; i++) - { - vostraceRestoreCBTable[i] = vostraceCBTable[i]; - vostraceCBTable[i] = NULL; - } - } - } -} - -/*----------------------------------------------------------------------------- - \brief vosTraceInit() - Initializes vos trace structures and variables. - - Called immediately after vos_preopen, so that we can start recording HDD - events ASAP. - ----------------------------------------------------------------------------*/ -void vosTraceInit() -{ - v_U8_t i; - gvosTraceData.head = INVALID_VOS_TRACE_ADDR; - gvosTraceData.tail = INVALID_VOS_TRACE_ADDR; - gvosTraceData.num = 0; - gvosTraceData.enable = TRUE; - gvosTraceData.dumpCount = DEFAULT_VOS_TRACE_DUMP_COUNT; - gvosTraceData.numSinceLastDump = 0; - - for (i=0; i<VOS_MODULE_ID_MAX; i++) - { - vostraceCBTable[i] = NULL; - vostraceRestoreCBTable[i] = NULL; - } -} - -/*----------------------------------------------------------------------------- - \brief vos_trace() - puts the messages in to ring-buffer - - This function will be called from each module who wants record the messages - in circular queue. Before calling this functions make sure you have - registered your module with voss through vosTraceRegister function. - - \param module - enum of module, basically module id. - \param code - - \param session - - \param data - actual message contents. - ----------------------------------------------------------------------------*/ -void vos_trace(v_U8_t module, v_U8_t code, v_U8_t session, v_U32_t data) -{ - tpvosTraceRecord rec = NULL; - unsigned long flags; - - - if (!gvosTraceData.enable) - { - return; - } - //If module is not registered, don't record for that module. - if (NULL == vostraceCBTable[module]) - { - return; - } - - /* Aquire the lock so that only one thread at a time can fill the ring buffer */ - spin_lock_irqsave(<raceLock, flags); - - gvosTraceData.num++; - - if (gvosTraceData.num > MAX_VOS_TRACE_RECORDS) - { - gvosTraceData.num = MAX_VOS_TRACE_RECORDS; - } - - if (INVALID_VOS_TRACE_ADDR == gvosTraceData.head) - { - /* first record */ - gvosTraceData.head = 0; - gvosTraceData.tail = 0; - } - else - { - /* queue is not empty */ - v_U32_t tail = gvosTraceData.tail + 1; - - if (MAX_VOS_TRACE_RECORDS == tail) - { - tail = 0; - } - - if (gvosTraceData.head == tail) - { - /* full */ - if (MAX_VOS_TRACE_RECORDS == ++gvosTraceData.head) - { - gvosTraceData.head = 0; - } - } - - gvosTraceData.tail = tail; - } - - rec = &gvosTraceTbl[gvosTraceData.tail]; - rec->code = code; - rec->session = session; - rec->data = data; - rec->time = vos_timer_get_system_time(); - rec->module = module; - gvosTraceData.numSinceLastDump ++; - spin_unlock_irqrestore(<raceLock, flags); -} - - -/*----------------------------------------------------------------------------- - \brief vos_trace_spin_lock_init() - Initializes the lock variable before use - - This function will be called from vos_preOpen, we will have lock available - to use ASAP. - ----------------------------------------------------------------------------*/ -VOS_STATUS vos_trace_spin_lock_init() -{ - spin_lock_init(<raceLock); - - return VOS_STATUS_SUCCESS; -} - -/*----------------------------------------------------------------------------- - \brief vosTraceRegister() - Registers the call back functions to display the - messages in particular format mentioned in these call back functions. - - this functions should be called by interested module in their init part as - we will be ready to register as soon as modules are up. - - \param moduleID - enum value of module - \param vostraceCb - call back functions to display the messages in particular - format. - ----------------------------------------------------------------------------*/ -void vosTraceRegister(VOS_MODULE_ID moduleID, tpvosTraceCb vostraceCb) -{ - vostraceCBTable[moduleID] = vostraceCb; -} - -/*------------------------------------------------------------------------------ - \brief vosTraceDumpAll() - Dump data from ring buffer via call back functions - registered with VOSS - - This function will be called up on issueing ioctl call as mentioned following - [iwpriv wlan0 dumplog 0 0 <n> <bitmask_of_module>] - - <n> - number lines to dump starting from tail to head. - - <bitmask_of_module> - if anybody wants to know how many messages were recorded - for particular module/s mentioned by setbit in bitmask from last <n> messages. - it is optional, if you don't provide then it will dump everything from buffer. - - \param pMac - context of particular module - \param code - - \param session - - \param count - number of lines to dump starting from tail to head - ----------------------------------------------------------------------------*/ -void vosTraceDumpAll(void *pMac, v_U8_t code, v_U8_t session, - v_U32_t count, v_U32_t bitmask_of_module) -{ - tvosTraceRecord pRecord; - tANI_S32 i, tail; - - - if (!gvosTraceData.enable) - { - VOS_TRACE( VOS_MODULE_ID_SYS, - VOS_TRACE_LEVEL_ERROR, "Tracing Disabled"); - return; - } - - VOS_TRACE( VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR, - "Total Records: %d, Head: %d, Tail: %d", - gvosTraceData.num, gvosTraceData.head, gvosTraceData.tail); - - /* Aquire the lock so that only one thread at a time can read the ring buffer */ - spin_lock(<raceLock); - - if (gvosTraceData.head != INVALID_VOS_TRACE_ADDR) - { - i = gvosTraceData.head; - tail = gvosTraceData.tail; - - if (count) - { - if (count > gvosTraceData.num) - { - count = gvosTraceData.num; - } - if (tail >= (count - 1)) - { - i = tail - count + 1; - } - else if (count != MAX_VOS_TRACE_RECORDS) - { - i = MAX_VOS_TRACE_RECORDS - ((count - 1) - tail); - } - } - - pRecord = gvosTraceTbl[i]; - /* right now we are not using numSinceLastDump member but in future - we might re-visit and use this member to track how many latest - messages got added while we were dumping from ring buffer */ - gvosTraceData.numSinceLastDump = 0; - spin_unlock(<raceLock); - for (;;) - { - if ((code == 0 || (code == pRecord.code)) && - (vostraceCBTable[pRecord.module] != NULL)) - { - if (0 == bitmask_of_module) - { - vostraceCBTable[pRecord.module](pMac, &pRecord, (v_U16_t)i); - } - else - { - if (bitmask_of_module & (1 << pRecord.module)) - { - vostraceCBTable[pRecord.module](pMac, &pRecord, (v_U16_t)i); - } - } - } - - if (i == tail) - { - break; - } - i += 1; - - spin_lock(<raceLock); - if (MAX_VOS_TRACE_RECORDS == i) - { - i = 0; - pRecord= gvosTraceTbl[0]; - } - else - { - pRecord = gvosTraceTbl[i]; - } - spin_unlock(<raceLock); - } - } - else - { - spin_unlock(<raceLock); - } -} diff --git a/drivers/staging/prima/CORE/WDA/inc/wlan_qct_wda.h b/drivers/staging/prima/CORE/WDA/inc/wlan_qct_wda.h index 887f7ad0bd1..8ca4b73e087 100644 --- a/drivers/staging/prima/CORE/WDA/inc/wlan_qct_wda.h +++ b/drivers/staging/prima/CORE/WDA/inc/wlan_qct_wda.h @@ -154,7 +154,6 @@ typedef enum */ #define IS_MCC_SUPPORTED (WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual( 0, 1, 1, 0)) #define IS_FEATURE_SUPPORTED_BY_FW(featEnumValue) (!!WDA_getFwWlanFeatCaps(featEnumValue)) -#define IS_FEATURE_SUPPORTED_BY_DRIVER(featEnumValue) (!!WDA_getHostWlanFeatCaps(featEnumValue)) #ifdef WLAN_ACTIVEMODE_OFFLOAD_FEATURE #define IS_ACTIVEMODE_OFFLOAD_FEATURE_ENABLE ((WDA_getFwWlanFeatCaps(WLANACTIVE_OFFLOAD)) & (WDI_getHostWlanFeatCaps(WLANACTIVE_OFFLOAD))) @@ -282,7 +281,6 @@ typedef enum #define WDA_DS_TX_START_XMIT WLANTL_TX_START_XMIT #define WDA_DS_FINISH_ULA WLANTL_FINISH_ULA -#define VOS_TO_WPAL_PKT(_vos_pkt) ((wpt_packet*)_vos_pkt) #define WDA_TX_PACKET_FREED 0X0 @@ -1044,6 +1042,7 @@ tSirRetStatus uMacPostCtrlMsg(void* pSirGlobal, tSirMbMsg* pMb); #define WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ SIR_HAL_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ #define WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP SIR_HAL_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP #define WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ SIR_HAL_RECEIVE_FILTER_CLEAR_FILTER_REQ +#define WDA_RECEIVE_FILTER_SET_FILTER_MC_REQ SIR_HAL_RECEIVE_FILTER_SET_FILTER_MC_REQ // IKJB42MAIN-1244, Motorola, a19091 #endif // WLAN_FEATURE_PACKET_FILTERING #define WDA_SET_POWER_PARAMS_REQ SIR_HAL_SET_POWER_PARAMS_REQ @@ -1065,8 +1064,7 @@ tSirRetStatus uMacPostCtrlMsg(void* pSirGlobal, tSirMbMsg* pMb); tSirRetStatus wdaPostCtrlMsg(tpAniSirGlobal pMac, tSirMsgQ *pMsg); -eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId, - tAniBool sendRegHint); +eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId); #define HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME 0x40 // Bit 6 will be used to control BD rate for Management frames @@ -1103,8 +1101,6 @@ eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId, v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx, tANI_U8 staIdx); -v_BOOL_t WDA_IsSelfSTA(v_PVOID_t pVosGCtx,tANI_U8 staIdx); - # define WDA_EnableUapsdAcParams(vosGCtx, staId, uapsdInfo) \ WDA_SetUapsdAcParamsReq(vosGCtx, staId, uapsdInfo) @@ -1811,10 +1807,9 @@ tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue); PARAMETERS pMac : upper MAC context pointer displaySnapshot : Display DXE snapshot option - debugFlags : Enable stall detect features - defined by WPAL_DeviceDebugFlags - These features may effect - data performance. + enableStallDetect : Enable stall detect feature + This feature will take effect to data performance + Not integrate till fully verification RETURN VALUE NONE @@ -1824,7 +1819,7 @@ void WDA_TransportChannelDebug ( tpAniSirGlobal pMac, v_BOOL_t displaySnapshot, - v_U8_t debugFlags + v_BOOL_t toggleStallDetect ); /*========================================================================== diff --git a/drivers/staging/prima/CORE/WDA/src/wlan_qct_wda.c b/drivers/staging/prima/CORE/WDA/src/wlan_qct_wda.c index a57c4f7c841..ccd72af108d 100644 --- a/drivers/staging/prima/CORE/WDA/src/wlan_qct_wda.c +++ b/drivers/staging/prima/CORE/WDA/src/wlan_qct_wda.c @@ -72,7 +72,6 @@ #include "vos_nvitem.h" #include "sirApi.h" #include "wlan_qct_pal_packet.h" -#include "wlan_qct_pal_device.h" #include "wlan_qct_wda.h" #include "wlan_qct_wda_msg.h" #include "wlan_qct_wdi_cfg.h" @@ -196,6 +195,9 @@ static VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq ( tWDA_CbContext *pWDA, tSirRcvPktFilterCfgType *pRcvPktFilterCfg ); +// IKJB42MAIN-1244, Motorola, a19091 - BEGIN +void WDA_ProcessReceiveFilterSetFilterMcReq(tSirInvokeV6Filter *invokeV6FilterConfig); +// IKJB42MAIN-1244, Motorola, a19091 - END static VOS_STATUS WDA_ProcessPacketFilterMatchCountReq ( tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp @@ -459,8 +461,31 @@ VOS_STATUS WDA_start(v_PVOID_t pVosContext) return VOS_STATUS_E_FAILURE; } /* wait for WDI start to invoke our callback */ - status = vos_wait_single_event( &wdaContext->wdaWdiEvent, - WDA_WDI_START_TIMEOUT ); + // IKHSS7-38339 - Motorola, a19091, -- START + /*status = vos_wait_single_event( &wdaContext->wdaWdiEvent, + WDA_WDI_START_TIMEOUT ); */ + if(in_interrupt()) { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, + "%s cannot be called from interrupt context!!!", __FUNCTION__); + VOS_ASSERT(0); + status = VOS_STATUS_E_FAULT; + } else if(NULL == &wdaContext->wdaWdiEvent) { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, + "Null event used at *s!!!", __FUNCTION__); + VOS_ASSERT(0); + status = VOS_STATUS_E_FAULT; + } else if ( LINUX_EVENT_COOKIE != wdaContext->wdaWdiEvent.cookie ) { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, + "Uninitialized event used at %s", __FUNCTION__); + VOS_ASSERT(0); + status = VOS_STATUS_E_INVAL; + } else { + long ret; + ret = wait_for_completion_timeout(&(wdaContext->wdaWdiEvent.complete), + msecs_to_jiffies(WDA_WDI_START_TIMEOUT)); + status = ( 0 >= ret ) ? VOS_STATUS_E_TIMEOUT : VOS_STATUS_SUCCESS; + } + // IKHSS7-38339 - Motorola, a19091, -- END if ( !VOS_IS_STATUS_SUCCESS(status) ) { if ( VOS_STATUS_E_TIMEOUT == status ) @@ -1478,68 +1503,7 @@ VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext, tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct + sizeof(tHalCfg) + tlvStruct->length) ; -/* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_WLAN_LEN */ - tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ; - tlvStruct->length = sizeof(tANI_U32); - configDataValue = (tANI_U32 *)(tlvStruct + 1); - if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_WLAN_LEN, - configDataValue ) != eSIR_SUCCESS) - { - VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, - "Failed to get value for WNI_CFG_BTC_ACTIVE_WLAN_LEN"); - goto handle_failure; - } - - tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct - + sizeof(tHalCfg) + tlvStruct->length) ; - -/* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_BT_LEN */ - tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN ; - tlvStruct->length = sizeof(tANI_U32); - configDataValue = (tANI_U32 *)(tlvStruct + 1); - if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_BT_LEN, - configDataValue ) != eSIR_SUCCESS) - { - VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, - "Failed to get value for WNI_CFG_BTC_ACTIVE_BT_LEN"); - goto handle_failure; - } - - tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct - + sizeof(tHalCfg) + tlvStruct->length) ; - -/* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN */ - tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ; - tlvStruct->length = sizeof(tANI_U32); - configDataValue = (tANI_U32 *)(tlvStruct + 1); - if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN, - configDataValue ) != eSIR_SUCCESS) - { - VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, - "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN"); - goto handle_failure; - } - - tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct - + sizeof(tHalCfg) + tlvStruct->length) ; - -/* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_BTC_ACTIVE_BT_LEN */ - tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN ; - tlvStruct->length = sizeof(tANI_U32); - configDataValue = (tANI_U32 *)(tlvStruct + 1); - if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_BT_LEN, - configDataValue ) != eSIR_SUCCESS) - { - VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, - "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_BT_LEN"); - goto handle_failure; - } - - tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct - + sizeof(tHalCfg) + tlvStruct->length) ; - wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ; - #ifdef WLAN_DEBUG { int i; @@ -3275,9 +3239,6 @@ void WDA_DelBSSReqCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp, "%s: Clear STA index form table Fail", __func__); VOS_ASSERT(0) ; } - - WLANTL_StartForwarding(staIdx,0,0); - vos_mem_free(pWdaParams->wdaWdiApiMsgParam); vos_mem_free(pWdaParams) ; /* reset the the system role*/ @@ -3383,7 +3344,6 @@ void WDA_DelSTAReqCallback(WDI_DelSTARspParamsType *wdiDelStaRsp, VOS_ASSERT(0) ; } delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ; - WLANTL_StartForwarding(delStaReqParam->staIdx,0,0); } vos_mem_free(pWdaParams->wdaWdiApiMsgParam); vos_mem_free(pWdaParams) ; @@ -6599,66 +6559,17 @@ VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA, } #endif /* - * FUNCTION: WDA_EnterImpsRspCallback + * FUNCTION: WDA_EnterImpsReqCallback * send Enter IMPS RSP back to PE */ -void WDA_EnterImpsRspCallback(WDI_Status status, void* pUserData) +void WDA_EnterImpsReqCallback(WDI_Status status, void* pUserData) { - tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData; - tWDA_CbContext *pWDA; - + tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ; VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, - "<------ %s status=%d" ,__func__,status); - if(NULL == pWdaParams) - { - VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, - "%s: pWdaParams received NULL", __func__); - VOS_ASSERT(0); - return; - } - - pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext; - - vos_mem_free(pWdaParams->wdaWdiApiMsgParam); - vos_mem_free(pWdaParams); + "<------ %s " ,__func__); WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ; return ; } - - -/* - * FUNCTION: WDA_EnterImpsReqCallback - * Free memory and send Enter IMPS RSP back to PE. - * Invoked when Enter IMPS REQ failed in WDI and no RSP callback is generated. - */ -void WDA_EnterImpsReqCallback(WDI_Status wdiStatus, void* pUserData) -{ - tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData; - tWDA_CbContext *pWDA; - - VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, - "<------ %s, wdiStatus: %d", __func__, wdiStatus); - - if(NULL == pWdaParams) - { - VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, - "%s: pWdaParams received NULL", __func__); - VOS_ASSERT(0); - return; - } - - pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext; - - if(IS_WDI_STATUS_FAILURE(wdiStatus)) - { - vos_mem_free(pWdaParams->wdaWdiApiMsgParam); - vos_mem_free(pWdaParams); - WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL, - CONVERT_WDI2SIR_STATUS(wdiStatus)); - } - - return; -} /* * FUNCTION: WDA_ProcessEnterImpsReq * Request to WDI to Enter IMPS power state. @@ -6666,51 +6577,13 @@ void WDA_EnterImpsReqCallback(WDI_Status wdiStatus, void* pUserData) VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA) { WDI_Status status = WDI_STATUS_SUCCESS ; - WDI_EnterImpsReqParamsType *wdiEnterImpsReqParams; - tWDA_ReqParams *pWdaParams; VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "------> %s " ,__func__); - - - wdiEnterImpsReqParams = vos_mem_malloc(sizeof(WDI_EnterImpsReqParamsType)); - if (NULL == wdiEnterImpsReqParams) - { - VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, - "%s: VOS MEM Alloc Failure", __func__); - VOS_ASSERT(0); - WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL, - CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ; - return VOS_STATUS_E_NOMEM; - } - - pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)); - if (NULL == pWdaParams) - { - VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, - "%s: VOS MEM Alloc Failure", __func__); - VOS_ASSERT(0); - vos_mem_free(wdiEnterImpsReqParams); - WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , - CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ; - return VOS_STATUS_E_NOMEM; - } - - wdiEnterImpsReqParams->wdiReqStatusCB = WDA_EnterImpsReqCallback; - wdiEnterImpsReqParams->pUserData = pWdaParams; - - pWdaParams->wdaWdiApiMsgParam = wdiEnterImpsReqParams; - pWdaParams->wdaMsgParam = NULL; - pWdaParams->pWdaContext = pWDA; - - status = WDI_EnterImpsReq(wdiEnterImpsReqParams, - (WDI_EnterImpsRspCb)WDA_EnterImpsRspCallback, - pWdaParams); + status = WDI_EnterImpsReq((WDI_EnterImpsRspCb)WDA_EnterImpsReqCallback, pWDA); if(IS_WDI_STATUS_FAILURE(status)) { VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "Failure in Enter IMPS REQ WDI API, free all the memory " ); - vos_mem_free(wdiEnterImpsReqParams); - vos_mem_free(pWdaParams); WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ; } return CONVERT_WDI2VOS_STATUS(status) ; @@ -7766,19 +7639,10 @@ VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA, { VOS_STATUS status = VOS_STATUS_SUCCESS; WDI_Status wstatus; - WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams; - tWDA_ReqParams *pWdaParams ; - /* Sanity Check - * This is very unlikely and add assert to collect more info next time */ - if(NULL == pWlanSuspendParam) - { - VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, - "%s: pWlanSuspendParam received NULL", __func__); - VOS_ASSERT(0) ; - return VOS_STATUS_E_FAULT; - } - wdiRxpFilterParams = (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc( + WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams = + (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc( sizeof(WDI_ConfigureRxpFilterReqParamsType)) ; + tWDA_ReqParams *pWdaParams ; VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "------> %s " ,__func__); if(NULL == wdiRxpFilterParams) @@ -8474,8 +8338,6 @@ VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA, { wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0; } - wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx = - pHostOffloadParams->nsOffloadInfo.slotIdx; break; #endif //WLAN_NS_OFFLOAD default: @@ -9228,19 +9090,6 @@ v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx, { return WDI_IsHwFrameTxTranslationCapable(staIdx); } - -/* - * FUNCTION: WDA_IsSelfSTA - * Request to WDI to determine whether a given STAID is self station - * index. - */ -v_BOOL_t WDA_IsSelfSTA(v_PVOID_t pVosContext, tANI_U8 ucSTAIdx) -{ - - tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext); - - return WDI_IsSelfSTA(pWDA->pWdiContext,ucSTAIdx); -} /* * FUNCTION: WDA_NvDownloadReqCallback * send NV Download RSP back to PE @@ -9805,14 +9654,9 @@ void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparam VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "<------ %s " ,__func__); - if(NULL == pWdaParams) - { - VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, - "%s: pWdaParams received NULL", __func__); - VOS_ASSERT(0); - return; - } + VOS_ASSERT(NULL != pWdaParams); + vos_mem_free(pWdaParams->wdaMsgParam) ; vos_mem_free(pWdaParams->wdaWdiApiMsgParam); vos_mem_free(pWdaParams) ; @@ -9942,13 +9786,8 @@ void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkO VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "<------ %s " ,__func__); - if(NULL == pWdaParams) - { - VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, - "%s: pWdaParams received NULL", __func__); - VOS_ASSERT(0); - return; - } + + VOS_ASSERT(NULL != pWdaParams); pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ; pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam; @@ -10135,22 +9974,7 @@ VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd, VOS_STATUS vStatus; pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac); - if(pVosContext) - { - if (pVosContext->isLogpInProgress) - { - VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, - "%s:LOGP in Progress. Ignore!!!", __func__); - return VOS_STATUS_E_BUSY; - } - } - else - { - VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, - "%s: VOS Context Null", __func__); - return VOS_STATUS_E_RESOURCES; - } - + pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ; if(NULL == pWdaParams) { @@ -10517,7 +10341,7 @@ VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA, after the packet gets completed(packet freed once)*/ /* TX MGMT fail with COMP timeout, try to detect DXE stall */ - WDA_TransportChannelDebug(pMac, 1, WPAL_DEBUG_TX_DESC_RESYNC); + WDA_TransportChannelDebug(pMac, 1, 0); /*Tag Frame as timed out for later deletion*/ vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA, @@ -10544,16 +10368,6 @@ VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA, } status = VOS_STATUS_E_FAILURE; } -#ifdef WLAN_DUMP_MGMTFRAMES - if (VOS_IS_STATUS_SUCCESS(status)) - { - VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, - "%s() TX packet : SubType %d", __func__,pFc->subType); - VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, - pData, frmLen); - } -#endif - return status; } /* @@ -11116,6 +10930,13 @@ VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg ) WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr); break; } + // IKJB42MAIN-1244, Motorola, a19091 - BEGIN + case WDA_RECEIVE_FILTER_SET_FILTER_MC_REQ: + { + WDA_ProcessReceiveFilterSetFilterMcReq((tSirInvokeV6Filter *)pMsg->bodyptr); + break; + } + // IKJB42MAIN-1244, Motorola, a19091 - END case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ: { WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr); @@ -11492,14 +11313,13 @@ void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd, VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "Memory allocation failure, " "WDI_PREF_NETWORK_FOUND_IND not forwarded"); - if (NULL != - wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData) + + if (NULL != wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData) { - wpalMemoryFree( - wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData - ); + wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData); wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL; } + break; } /* Message Header */ @@ -12137,10 +11957,9 @@ void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA) /* * WDA Set REG Domain to VOS NV */ -eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId, - tAniBool sendRegHint) +eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId) { - if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId, sendRegHint)) + if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId)) { return eHAL_STATUS_INVALID_PARAMETER; } @@ -12155,10 +11974,8 @@ eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId, void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData) { tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData; - tSirPNOScanReq *pPNOScanReqParams; - VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, - "<------ %s, wdiStatus: %d",__func__, status); + "<------ %s " ,__func__); if(NULL == pWdaParams) { VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, @@ -12167,14 +11984,6 @@ void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData) return ; } - pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam; - if(pPNOScanReqParams->statusCallback) - { - pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext, - (status == WDI_STATUS_SUCCESS) ? - VOS_STATUS_SUCCESS : VOS_STATUS_E_FAILURE); - } - vos_mem_free(pWdaParams->wdaWdiApiMsgParam); vos_mem_free(pWdaParams->wdaMsgParam); vos_mem_free(pWdaParams); @@ -12189,7 +11998,6 @@ void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData) void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData) { tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData; - tSirPNOScanReq *pPNOScanReqParams; VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "<------ %s, wdiStatus: %d", __func__, wdiStatus); @@ -12204,13 +12012,6 @@ void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData) if(IS_WDI_STATUS_FAILURE(wdiStatus)) { - pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam; - if(pPNOScanReqParams->statusCallback) - { - pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext, - VOS_STATUS_E_FAILURE); - } - vos_mem_free(pWdaParams->wdaWdiApiMsgParam); vos_mem_free(pWdaParams->wdaMsgParam); vos_mem_free(pWdaParams); @@ -12346,12 +12147,6 @@ VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA, { VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "Failure in Set PNO REQ WDI API, free all the memory " ); - if(pPNOScanReqParams->statusCallback) - { - pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext, - VOS_STATUS_E_FAILURE); - } - vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ; vos_mem_free(pWdaParams->wdaMsgParam); pWdaParams->wdaWdiApiMsgParam = NULL; @@ -13044,7 +12839,7 @@ void WDA_ReceiveFilterSetFilterRespCallback( VOS_ASSERT(0) ; return ; } - + vos_mem_free(pWdaParams->wdaMsgParam) ; vos_mem_free(pWdaParams->wdaWdiApiMsgParam); vos_mem_free(pWdaParams) ; @@ -13200,6 +12995,22 @@ VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA, } return CONVERT_WDI2VOS_STATUS(status) ; } + +// IKJB42MAIN-1244, Motorola, a19091 - BEGIN +/* + * FUNCTION WDA_ProcessReceiveFilterSetFilterMcReq + */ +void WDA_ProcessReceiveFilterSetFilterMcReq(tSirInvokeV6Filter *invokeV6FilterConfig) +{ + if(invokeV6FilterConfig != NULL) + { + invokeV6FilterConfig->configureFilterFn(invokeV6FilterConfig->pHddAdapter, + invokeV6FilterConfig->set, FALSE); + kfree(invokeV6FilterConfig); + } +} +// IKJB42MAIN-1244, Motorola, a19091 - END + /* * FUNCTION: WDA_FilterMatchCountRespCallback * @@ -13380,9 +13191,9 @@ void WDA_ReceiveFilterClearFilterRespCallback( VOS_ASSERT(0) ; return ; } - - vos_mem_free(pWdaParams->wdaMsgParam) ; + vos_mem_free(pWdaParams->wdaWdiApiMsgParam); + vos_mem_free(pWdaParams->wdaMsgParam); vos_mem_free(pWdaParams) ; //print a msg, nothing else to do VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, @@ -13895,10 +13706,9 @@ VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA, PARAMETERS pMac : upper MAC context pointer displaySnapshot : Display DXE snapshot option - debugFlags : Enable stall detect features - defined by WPAL_DeviceDebugFlags - These features may effect - data performance. + enableStallDetect : Enable stall detect feature + This feature will take effect to data performance + Not integrate till fully verification RETURN VALUE NONE @@ -13908,17 +13718,10 @@ void WDA_TransportChannelDebug ( tpAniSirGlobal pMac, v_BOOL_t displaySnapshot, - v_U8_t debugFlags + v_BOOL_t toggleStallDetect ) { - if (NULL != pMac) - { - VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, - "HAL BMU DUMP Request" ); - /* 17 is BMU dump opcode */ - WDA_HALDumpCmdReq(pMac, 17, 0, 0, 0, 0, NULL); - } - WDI_TransportChannelDebug(displaySnapshot, debugFlags); + WDI_TransportChannelDebug(displaySnapshot, toggleStallDetect); return; } diff --git a/drivers/staging/prima/CORE/WDA/src/wlan_qct_wda_ds.c b/drivers/staging/prima/CORE/WDA/src/wlan_qct_wda_ds.c index a2860007611..ec2b406a936 100644 --- a/drivers/staging/prima/CORE/WDA/src/wlan_qct_wda_ds.c +++ b/drivers/staging/prima/CORE/WDA/src/wlan_qct_wda_ds.c @@ -84,6 +84,8 @@ when who what, where, why #define WDA_DS_DXE_RES_COUNT (WDA_TLI_MIN_RES_DATA + 20) +#define VOS_TO_WPAL_PKT(_vos_pkt) ((wpt_packet*)_vos_pkt) + /* macro's for acessing TL API/data structures */ #define WDA_TL_SET_TX_XMIT_PENDING(a) WLANTL_SetTxXmitPending(a) #define WDA_TL_IS_TX_XMIT_PENDING(a) WLANTL_IsTxXmitPending(a) @@ -490,8 +492,7 @@ WDA_DS_BuildTxPacketInfo WLANTL_MAC_ADDR_ALIGN( ucDisableFrmXtl ), (v_PVOID_t)pvDestMacAddr, &usMacAddrSize ); - if ((VOS_STATUS_SUCCESS != vosStatus) || - (usMacAddrSize != VOS_MAC_ADDR_SIZE)) + if ( VOS_STATUS_SUCCESS != vosStatus ) { VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, "WDA:Failed while attempting to extract MAC Addr %d", @@ -500,6 +501,8 @@ WDA_DS_BuildTxPacketInfo return VOS_STATUS_E_FAULT; } + VOS_ASSERT(usMacAddrSize == VOS_MAC_ADDR_SIZE); + vos_copy_macaddr( (v_MACADDR_t*)pTxMetaInfo->fSTAMACAddress, pvDestMacAddr ); // ADDR2 diff --git a/drivers/staging/prima/CORE/WDA/src/wlan_qct_wda_legacy.c b/drivers/staging/prima/CORE/WDA/src/wlan_qct_wda_legacy.c index 341f2d33d05..9a5352ca8e0 100644 --- a/drivers/staging/prima/CORE/WDA/src/wlan_qct_wda_legacy.c +++ b/drivers/staging/prima/CORE/WDA/src/wlan_qct_wda_legacy.c @@ -207,9 +207,6 @@ tSirRetStatus uMacPostCtrlMsg(void* pSirGlobal, tSirMbMsg* pMb) break; case SIR_PTT_MSG_TYPES_BEGIN: - WDALOGW( wdaLog(pMac, LOGW, FL("%s:%d: message type = 0x%X"), - __func__, __LINE__, msg.type)); - vos_mem_free(msg.bodyptr); break; diff --git a/drivers/staging/prima/CORE/WDI/CP/inc/wlan_qct_wdi.h b/drivers/staging/prima/CORE/WDI/CP/inc/wlan_qct_wdi.h index 5e99ecf428a..bdfa13192e2 100644 --- a/drivers/staging/prima/CORE/WDI/CP/inc/wlan_qct_wdi.h +++ b/drivers/staging/prima/CORE/WDI/CP/inc/wlan_qct_wdi.h @@ -3217,21 +3217,6 @@ typedef struct }WDI_EnterBmpsReqParamsType; /*--------------------------------------------------------------------------- - WDI_EnterImpsReqParamsType - Enter IMPS parameters passed to WDI from WDA ----------------------------------------------------------------------------*/ -typedef struct -{ - /*Request status callback offered by UMAC - it is called if the current req - has returned PENDING as status; it delivers the status of sending the message - over the BUS */ - WDI_ReqStatusCb wdiReqStatusCB; - /*The user data passed in by UMAC, it will be sent back when the above - function pointer will be called */ - void* pUserData; -}WDI_EnterImpsReqParamsType; - -/*--------------------------------------------------------------------------- WDI_EnterBmpsReqParamsType Enter BMPS parameters passed from WDI to WDA ---------------------------------------------------------------------------*/ @@ -3537,7 +3522,6 @@ typedef struct wpt_uint8 srcIPv6AddrValid : 1; wpt_uint8 targetIPv6Addr1Valid : 1; wpt_uint8 targetIPv6Addr2Valid : 1; - wpt_uint8 slotIdx; } WDI_NSOffloadParams; #endif //WLAN_NS_OFFLOAD @@ -4355,7 +4339,7 @@ typedef struct wpt_uint8 ucChannelCount; /*the actual channels*/ - wpt_uint8 aChannels[WDI_PNO_MAX_NETW_CHANNELS_EX]; + wpt_uint8 aChannels[WDI_PNO_MAX_NETW_CHANNELS]; /*rssi threshold that a network must meet to be considered, 0 - for any*/ wpt_uint8 rssiThreshold; @@ -7831,7 +7815,6 @@ WDI_SetPwrSaveCfgReq WDI_Status WDI_EnterImpsReq ( - WDI_EnterImpsReqParamsType *pwdiEnterImpsReqParams, WDI_EnterImpsRspCb wdiEnterImpsRspCb, void* pUserData ); @@ -8830,24 +8813,6 @@ wpt_boolean WDI_IsHwFrameTxTranslationCapable wpt_uint8 uSTAIdx ); - -/** - @brief WDI_IsSelfSTA - check if staid is self sta index - - @param pWDICtx: pointer to the WLAN DAL context - ucSTAIdx: station index - - @return Result of the function call -*/ - -wpt_boolean -WDI_IsSelfSTA -( - void* pWDICtx, - wpt_uint8 ucSTAIdx -); - - #ifdef WLAN_FEATURE_VOWIFI_11R /** @brief WDI_AggrAddTSReq will be called when the upper MAC to inform @@ -9509,17 +9474,16 @@ WDI_UpdateVHTOpModeReq Or if host driver detects any abnormal stcuk may display @param displaySnapshot : Display DXE snapshot option - @param debugFlags : Enable stall detect features - defined by WPAL_DeviceDebugFlags - These features may effect - data performance. + @param enableStallDetect : Enable stall detect feature + This feature will take effect to data performance + Not integrate till fully verification @see @return none */ void WDI_TransportChannelDebug ( wpt_boolean displaySnapshot, - wpt_uint8 debugFlags + wpt_boolean toggleStallDetect ); /** diff --git a/drivers/staging/prima/CORE/WDI/CP/inc/wlan_qct_wdi_i.h b/drivers/staging/prima/CORE/WDI/CP/inc/wlan_qct_wdi_i.h index 3dea1b2a589..b23d29223d4 100644 --- a/drivers/staging/prima/CORE/WDI/CP/inc/wlan_qct_wdi_i.h +++ b/drivers/staging/prima/CORE/WDI/CP/inc/wlan_qct_wdi_i.h @@ -1059,8 +1059,6 @@ typedef struct DXE when DXE wakes up from power save*/ unsigned int dxePhyAddr; - wpt_boolean dxeRingsEmpty; - /*NV download request parameters */ WDI_NvDownloadReqParamsType wdiCachedNvDownloadReq; @@ -4407,7 +4405,7 @@ WDI_RXMsgCTSCB @see @return Result of the function call */ -WDI_Status +WPT_INLINE WDI_Status // Motorola IKJB42MAIN-4103, are002, match instantiation WDI_ProcessResponse ( WDI_ControlBlockType* pWDICtx, diff --git a/drivers/staging/prima/CORE/WDI/CP/src/wlan_qct_wdi.c b/drivers/staging/prima/CORE/WDI/CP/src/wlan_qct_wdi.c index 344c61795e6..06d2250e8e6 100644 --- a/drivers/staging/prima/CORE/WDI/CP/src/wlan_qct_wdi.c +++ b/drivers/staging/prima/CORE/WDI/CP/src/wlan_qct_wdi.c @@ -3208,7 +3208,6 @@ WDI_SetPwrSaveCfgReq WDI_Status WDI_EnterImpsReq ( - WDI_EnterImpsReqParamsType *pwdiEnterImpsReqParams, WDI_EnterImpsRspCb wdiEnterImpsRspCb, void* pUserData ) @@ -3231,8 +3230,8 @@ WDI_EnterImpsReq Fill in Event data and post to the Main FSM ------------------------------------------------------------------------*/ wdiEventData.wdiRequest = WDI_ENTER_IMPS_REQ; - wdiEventData.pEventData = pwdiEnterImpsReqParams; - wdiEventData.uEventDataSize = sizeof(*pwdiEnterImpsReqParams); + wdiEventData.pEventData = NULL; + wdiEventData.uEventDataSize = 0; wdiEventData.pCBfnc = wdiEnterImpsRspCb; wdiEventData.pUserData = pUserData; @@ -12118,6 +12117,10 @@ WDI_SetPowerStateCb wpt_status wptStatus; WDI_ControlBlockType *pCB = NULL; /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/ + if(eWLAN_PAL_STATUS_E_FAILURE == status ) + { + //it shouldn't happen, put an error msg + } /* * Trigger the event to bring the Enter BMPS req function to come * out of wait @@ -12131,15 +12134,6 @@ WDI_SetPowerStateCb //put an error msg pCB = &gWDICb; } - - if(eWLAN_PAL_STATUS_SUCCESS == status ) - { - pCB->dxeRingsEmpty = eWLAN_PAL_TRUE; - } - else - { - pCB->dxeRingsEmpty = eWLAN_PAL_FALSE; - } pCB->dxePhyAddr = dxePhyAddr; wptStatus = wpalEventSet(&pCB->setPowerStateEvent); if ( eWLAN_PAL_STATUS_SUCCESS != wptStatus ) @@ -12175,16 +12169,13 @@ WDI_ProcessEnterImpsReq wpt_uint8* pSendBuffer = NULL; wpt_uint16 usDataOffset = 0; wpt_uint16 usSendSize = 0; - WDI_EnterImpsReqParamsType* pwdiEnterImpsReqParams = NULL; /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ /*------------------------------------------------------------------------- Sanity check -------------------------------------------------------------------------*/ - if ((NULL == pEventData ) || - (NULL == (wdiEnterImpsRspCb = (WDI_EnterImpsRspCb)pEventData->pCBfnc)) || - (NULL == (pwdiEnterImpsReqParams = - (WDI_EnterImpsReqParamsType*)pEventData->pEventData))) + if (( NULL == pEventData ) || + ( NULL == (wdiEnterImpsRspCb = (WDI_EnterImpsRspCb)pEventData->pCBfnc))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, "%s: Invalid parameters", __func__); @@ -12242,16 +12233,6 @@ WDI_ProcessEnterImpsReq goto fail; } - if (pWDICtx->dxeRingsEmpty == eWLAN_PAL_FALSE) - { - WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL, - "%s: DXE Rings not empty, cannot enter IMPS",__func__); - - goto fail; - } - - pWDICtx->wdiReqStatusCB = pwdiEnterImpsReqParams->wdiReqStatusCB; - pWDICtx->pReqStatusUserData = pwdiEnterImpsReqParams->pUserData; /*------------------------------------------------------------------------- Send Get STA Request to HAL -------------------------------------------------------------------------*/ @@ -13226,17 +13207,9 @@ WDI_ProcessHostOffloadReq wpalMemoryCopy(nsOffloadParams.selfMacAddr, pwdiHostOffloadParams->wdiNsOffloadParams.selfMacAddr, 6); - nsOffloadParams.srcIPv6AddrValid = - pwdiHostOffloadParams->wdiNsOffloadParams.srcIPv6AddrValid; - - nsOffloadParams.targetIPv6Addr1Valid = - pwdiHostOffloadParams->wdiNsOffloadParams.targetIPv6Addr1Valid; - - nsOffloadParams.targetIPv6Addr2Valid = - pwdiHostOffloadParams->wdiNsOffloadParams.targetIPv6Addr2Valid; - - nsOffloadParams.slotIndex = - pwdiHostOffloadParams->wdiNsOffloadParams.slotIdx; + nsOffloadParams.srcIPv6AddrValid = pwdiHostOffloadParams->wdiNsOffloadParams.srcIPv6AddrValid; + nsOffloadParams.targetIPv6Addr1Valid = pwdiHostOffloadParams->wdiNsOffloadParams.targetIPv6Addr1Valid; + nsOffloadParams.targetIPv6Addr2Valid = pwdiHostOffloadParams->wdiNsOffloadParams.targetIPv6Addr2Valid; #endif // WLAN_NS_OFFLOAD } @@ -17328,6 +17301,7 @@ WDI_ProcessSetMaxTxPowerRsp { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, "Error status returned in Set Max Tx Power Response "); + WDI_DetectedDeviceError( pWDICtx, WDI_ERR_BASIC_OP_FAILURE); return WDI_STATUS_E_FAILURE; } @@ -20092,10 +20066,7 @@ WDI_SendMsg (eWLAN_PAL_STATUS_E_RESOURCES != ret)) { WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL, - "Failed to send message with expected response %s (%d)" - " over the bus - catastrophic failure", - WDI_getRespMsgString(pWDICtx->wdiExpectedResponse), - pWDICtx->wdiExpectedResponse); + "Failed to send message over the bus - catastrophic failure"); wdiStatus = WDI_STATUS_E_FAILURE; } @@ -20341,10 +20312,6 @@ WDI_ResponseTimerCB } #ifndef WDI_RE_ENABLE_WIFI_ON_WDI_TIMEOUT wpalWcnssResetIntr(); - if(wpalIsWDresetInProgress()) - { - wpalDevicePanic(); - } /* if this timer fires, it means Riva did not receive the FIQ */ wpalTimerStart(&pWDICtx->ssrTimer, WDI_SSR_TIMEOUT); #else @@ -20629,7 +20596,6 @@ WDI_DequeuePendingReq /*Save the global state as we need it on the other side*/ palMsg->val = pWDICtx->uGlobalState; - palMsg->type = 0; /*Transition back to BUSY as we need to handle a queued request*/ WDI_STATE_TRANSITION( pWDICtx, WDI_BUSY_ST); @@ -22847,10 +22813,6 @@ WDI_ExtractRequestCBFromEvent *ppfnReqCB = ((WDI_ExitBmpsReqParamsType*)pEvent->pEventData)->wdiReqStatusCB; *ppUserData = ((WDI_ExitBmpsReqParamsType*)pEvent->pEventData)->pUserData; break; - case WDI_ENTER_IMPS_REQ: - *ppfnReqCB = ((WDI_EnterImpsReqParamsType*)pEvent->pEventData)->wdiReqStatusCB; - *ppUserData = ((WDI_EnterImpsReqParamsType*)pEvent->pEventData)->pUserData; - break; case WDI_ENTER_UAPSD_REQ: *ppfnReqCB = ((WDI_EnterUapsdReqParamsType*)pEvent->pEventData)->wdiReqStatusCB; *ppUserData = ((WDI_EnterUapsdReqParamsType*)pEvent->pEventData)->pUserData; @@ -23021,32 +22983,6 @@ WDI_IsHwFrameTxTranslationCapable return gWDICb.bFrameTransEnabled; }/*WDI_IsHwFrameTxTranslationCapable*/ - -/** - @brief WDI_IsSelfSTA - check if staid is self sta index - - - @param pWDICtx: pointer to the WLAN DAL context - ucSTAIdx: station index - - @return Result of the function call -*/ -wpt_boolean WDI_IsSelfSTA( void* pWDICtx, wpt_uint8 ucSTAIdx ) -{ - wpt_uint8 ucSTAType; - - if( WDI_STATableGetStaType( (WDI_ControlBlockType*)pWDICtx, - ucSTAIdx,&ucSTAType) == WDI_STATUS_SUCCESS) - { - if( ucSTAType == WDI_STA_ENTRY_SELF ) - return eWLAN_PAL_TRUE; - } - - return eWLAN_PAL_FALSE; -} - - - #ifdef FEATURE_WLAN_SCAN_PNO /** @brief WDI_SetPreferredNetworkList @@ -23085,18 +23021,6 @@ WDI_SetPreferredNetworkReq return WDI_STATUS_E_NOT_ALLOWED; } - /*---------------------------------------------------------------------- - Avoid Enable PNO during any active session or an ongoing session - ----------------------------------------------------------------------*/ - if ( (pwdiPNOScanReqParams->wdiPNOScanInfo.bEnable && - WDI_GetActiveSessionsCount(&gWDICb)) ) - { - WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, - "%s:(Active/Ongoing Session) - Fail request", __func__); - - return WDI_STATUS_E_NOT_ALLOWED; - } - /*------------------------------------------------------------------------ Fill in Event data and post to the Main FSM ------------------------------------------------------------------------*/ @@ -24777,7 +24701,8 @@ WDI_ProcessReceiveFilterSetFilterReq if ( NULL == pBSSSes ) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, - " %s : Association for this BSSID does not exist",__func__); + " %s : Association for this BSSID does not exist, filter Id =%d", + __func__, pwdiSetRcvPktFilterReqInfo->wdiPktFilterCfg.filterId); // IKJB42MAIN-1244, Motorola, a19091 return WDI_STATUS_E_FAILURE; } @@ -25164,7 +25089,8 @@ WDI_ProcessReceiveFilterClearFilterReq if ( NULL == pBSSSes ) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, - " %s : Association for this BSSID does not exist",__func__); + " %s : Association for this BSSID does not exist, filter ID = %d", + __func__, pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId); // IKJB42MAIN-1244, Motorola, a19091 return WDI_STATUS_E_FAILURE; } @@ -26805,20 +26731,19 @@ WDI_UpdateVHTOpModeReq Or if host driver detects any abnormal stcuk may display @param displaySnapshot : Display DXE snapshot option - @param debugFlags : Enable stall detect features - defined by WPAL_DeviceDebugFlags - These features may effect - data performance. + @param enableStallDetect : Enable stall detect feature + This feature will take effect to data performance + Not integrate till fully verification @see @return none */ void WDI_TransportChannelDebug ( wpt_boolean displaySnapshot, - wpt_uint8 debugFlags + wpt_boolean toggleStallDetect ) { - WDTS_ChannelDebug(displaySnapshot, debugFlags); + WDTS_ChannelDebug(displaySnapshot, toggleStallDetect); return; } /** diff --git a/drivers/staging/prima/CORE/WDI/CP/src/wlan_qct_wdi_dp.c b/drivers/staging/prima/CORE/WDI/CP/src/wlan_qct_wdi_dp.c index 4595a511978..20ddd649add 100644 --- a/drivers/staging/prima/CORE/WDI/CP/src/wlan_qct_wdi_dp.c +++ b/drivers/staging/prima/CORE/WDI/CP/src/wlan_qct_wdi_dp.c @@ -607,23 +607,16 @@ WDI_FillTxBd * Sanity: Force HW frame translation OFF for mgmt frames. --------------------------------------------------------------------*/ /* apply to both ucast/mcast mgmt frames */ - /* Probe requests are sent using BD rate */ - if( ucSubType == WDI_MAC_MGMT_PROBE_REQ ) + if (useStaRateForBcastFrames) { - pBd->bdRate = WDI_BDRATE_BCMGMT_FRAME; + pBd->bdRate = (ucUnicastDst)? WDI_BDRATE_BCMGMT_FRAME : WDI_TXBD_BDRATE_DEFAULT; } else { - if (useStaRateForBcastFrames) - { - pBd->bdRate = (ucUnicastDst)? WDI_BDRATE_BCMGMT_FRAME : WDI_TXBD_BDRATE_DEFAULT; - } - else - { - pBd->bdRate = WDI_BDRATE_BCMGMT_FRAME; - } + pBd->bdRate = WDI_BDRATE_BCMGMT_FRAME; } - if ( ucTxFlag & WDI_USE_BD_RATE2_FOR_MANAGEMENT_FRAME) + + if ( ucTxFlag & WDI_USE_BD_RATE2_FOR_MANAGEMENT_FRAME) { pBd->bdRate = WDI_BDRATE_CTRL_FRAME; } diff --git a/drivers/staging/prima/CORE/WDI/TRP/CTS/src/wlan_qct_wdi_cts.c b/drivers/staging/prima/CORE/WDI/TRP/CTS/src/wlan_qct_wdi_cts.c index 8bda1f1305e..f193ab83f60 100644 --- a/drivers/staging/prima/CORE/WDI/TRP/CTS/src/wlan_qct_wdi_cts.c +++ b/drivers/staging/prima/CORE/WDI/TRP/CTS/src/wlan_qct_wdi_cts.c @@ -734,11 +734,9 @@ WCTS_OpenTransport */ pWCTSCb->wctsOpenMsg.callback = WCTS_PALOpenCallback; pWCTSCb->wctsOpenMsg.pContext = pWCTSCb; - pWCTSCb->wctsOpenMsg.type= WPAL_MC_MSG_SMD_NOTIF_OPEN_SIG; pWCTSCb->wctsDataMsg.callback = WCTS_PALDataCallback; pWCTSCb->wctsDataMsg.pContext = pWCTSCb; - pWCTSCb-> wctsDataMsg.type= WPAL_MC_MSG_SMD_NOTIF_DATA_SIG; /*--------------------------------------------------------------------- Open the SMD channel @@ -968,6 +966,7 @@ WCTS_SendMessage WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, "WCTS_SendMessage: Failed to send message over the bus."); wpalMemoryFree(pMsg); + WPAL_ASSERT(0); return eWLAN_PAL_STATUS_E_FAILURE; } else if (written == len) { /* Message sent! No deferred state, free the buffer*/ diff --git a/drivers/staging/prima/CORE/WDI/TRP/DTS/inc/wlan_qct_wdi_dts.h b/drivers/staging/prima/CORE/WDI/TRP/DTS/inc/wlan_qct_wdi_dts.h index 23795e25bb0..398b8b21a48 100644 --- a/drivers/staging/prima/CORE/WDI/TRP/DTS/inc/wlan_qct_wdi_dts.h +++ b/drivers/staging/prima/CORE/WDI/TRP/DTS/inc/wlan_qct_wdi_dts.h @@ -128,7 +128,7 @@ typedef struct { wpt_status (*setPowerState) (void *pContext, WDTS_PowerStateType powerState, WDTS_SetPSCbType cBack); void (*channelDebug)(wpt_boolean displaySnapshot, - wpt_uint8 debugFlags); + wpt_boolean enableStallDetect); wpt_status (*stop) (void *pContext); wpt_status (*close) (void *pContext); wpt_uint32 (*getFreeTxDataResNumber) (void *pContext); @@ -239,16 +239,13 @@ wpt_status WDTS_SetPowerState(void *pContext, WDTS_PowerStateType powerState, * Or if host driver detects any abnormal stcuk may display * Parameters: * displaySnapshot : Display DXE snapshot option - * debugFlags : Enable stall detect features - * defined by WPAL_DeviceDebugFlags - * These features may effect - * data performance. - * - * Not integrate till fully verification + * enableStallDetect : Enable stall detect feature + This feature will take effect to data performance + Not integrate till fully verification * Return Value: NONE * */ -void WDTS_ChannelDebug(wpt_boolean displaySnapshot, wpt_uint8 debugFlags); +void WDTS_ChannelDebug(wpt_boolean displaySnapshot, wpt_boolean toggleStallDetect); /* DTS Stop function. * Stop Transport driver, ie DXE, SDIO diff --git a/drivers/staging/prima/CORE/WDI/TRP/DTS/src/wlan_qct_wdi_dts.c b/drivers/staging/prima/CORE/WDI/TRP/DTS/src/wlan_qct_wdi_dts.c index 2b6ac6389b4..78bdaaeb183 100644 --- a/drivers/staging/prima/CORE/WDI/TRP/DTS/src/wlan_qct_wdi_dts.c +++ b/drivers/staging/prima/CORE/WDI/TRP/DTS/src/wlan_qct_wdi_dts.c @@ -288,9 +288,6 @@ static WDI_DTS_TrafficStatsType gDsTrafficStats; #define DTS_RATE_TPUT(x) gRateInfo[x].tputBpus #define DTS_11BRATE_TPUT_MULTIPLIER(x) g11bRateInfo[x].tputBpus -/* RX thread frame size threshold to delay frame drain */ -#define DTS_RX_DELAY_FRAMESIZE_THRESHOLD 500 - /* Tx/Rx stats function * This function should be invoked to fetch the current stats * Parameters: @@ -536,18 +533,6 @@ wpt_status WDTS_RxPacket (void *pContext, wpt_packet *pFrame, WDTS_ChannelType c ucMPDUHLen = (wpt_uint8)WDI_RX_BD_GET_MPDU_H_LEN(pBDHeader); ucTid = (wpt_uint8)WDI_RX_BD_GET_TID(pBDHeader); - /* If RX thread drain small size of frame from HW too fast - * Sometimes HW cannot handle interrupt fast enough - * And system crash might happen - * To avoid system crash, input 1usec delay each frame draining - * within host side, if frame size is smaller that threshold. - * This is SW work around, to fix HW problem - * Throughput and SnS test done successfully */ - if (usMPDULen < DTS_RX_DELAY_FRAMESIZE_THRESHOLD) - { - wpalBusyWait(1); - } - /*------------------------------------------------------------------------ Gather AMSDU information ------------------------------------------------------------------------*/ @@ -668,7 +653,7 @@ wpt_status WDTS_RxPacket (void *pContext, wpt_packet *pFrame, WDTS_ChannelType c pRxMetadata->ampdu_reorderOpcode = (wpt_uint8)WDI_RX_BD_GET_BA_OPCODE(pBDHeader); pRxMetadata->ampdu_reorderSlotIdx = (wpt_uint8)WDI_RX_BD_GET_BA_SI(pBDHeader); pRxMetadata->ampdu_reorderFwdIdx = (wpt_uint8)WDI_RX_BD_GET_BA_FI(pBDHeader); - pRxMetadata->currentPktSeqNo = (wpt_uint16)WDI_RX_BD_GET_BA_CSN(pBDHeader); + pRxMetadata->currentPktSeqNo = (wpt_uint8)WDI_RX_BD_GET_BA_CSN(pBDHeader); /*------------------------------------------------------------------------ @@ -979,9 +964,9 @@ wpt_status WDTS_SetPowerState(void *pContext, WDTS_PowerStateType powerState, * Return Value: NONE * */ -void WDTS_ChannelDebug(wpt_boolean displaySnapshot, wpt_uint8 debugFlags) +void WDTS_ChannelDebug(wpt_boolean displaySnapshot, wpt_boolean toggleStallDetect) { - gTransportDriver.channelDebug(displaySnapshot, debugFlags); + gTransportDriver.channelDebug(displaySnapshot, toggleStallDetect); return; } diff --git a/drivers/staging/prima/CORE/WDI/WPAL/inc/wlan_qct_pal_api.h b/drivers/staging/prima/CORE/WDI/WPAL/inc/wlan_qct_pal_api.h index bf98f687f24..a5659396096 100644 --- a/drivers/staging/prima/CORE/WDI/WPAL/inc/wlan_qct_pal_api.h +++ b/drivers/staging/prima/CORE/WDI/WPAL/inc/wlan_qct_pal_api.h @@ -350,25 +350,4 @@ void wpalWcnssResetIntr(void); void wpalFwDumpReq(wpt_uint32 cmd, wpt_uint32 arg1, wpt_uint32 arg2, wpt_uint32 arg3, wpt_uint32 arg4); -/*--------------------------------------------------------------------------- - wpalDevicePanic - Trigger Device Panic - Trigger device panic to help debug - - Param: - NONE - - Return: - NONE ----------------------------------------------------------------------------*/ -void wpalDevicePanic(void); - -/*--------------------------------------------------------------------------- - wpalIsWDresetInProgress - calls vos API isWDresetInProgress() - - Param: - NONE - Return: - STATUS ---------------------------------------------------------------------------*/ -int wpalIsWDresetInProgress(void); #endif // __WLAN_QCT_PAL_API_H diff --git a/drivers/staging/prima/CORE/WDI/WPAL/inc/wlan_qct_pal_device.h b/drivers/staging/prima/CORE/WDI/WPAL/inc/wlan_qct_pal_device.h index 2d9a5e4d62b..a838a13328d 100644 --- a/drivers/staging/prima/CORE/WDI/WPAL/inc/wlan_qct_pal_device.h +++ b/drivers/staging/prima/CORE/WDI/WPAL/inc/wlan_qct_pal_device.h @@ -80,11 +80,6 @@ #define WPAL_SMSM_WLAN_TX_ENABLE 0x00000400 #define WPAL_SMSM_WLAN_TX_RINGS_EMPTY 0x00000200 -typedef enum -{ - WPAL_DEBUG_START_HEALTH_TIMER = 1<<0, - WPAL_DEBUG_TX_DESC_RESYNC = 1<<1, -} WPAL_DeviceDebugFlags; /* ==================================================================================================================== @ Function Name wpalIsrType diff --git a/drivers/staging/prima/CORE/WDI/WPAL/inc/wlan_qct_pal_msg.h b/drivers/staging/prima/CORE/WDI/WPAL/inc/wlan_qct_pal_msg.h index 371f80b4068..6cfa3aa98cb 100644 --- a/drivers/staging/prima/CORE/WDI/WPAL/inc/wlan_qct_pal_msg.h +++ b/drivers/staging/prima/CORE/WDI/WPAL/inc/wlan_qct_pal_msg.h @@ -60,12 +60,6 @@ #include "wlan_qct_pal_type.h" #include "wlan_qct_pal_status.h" -/* Random signature to detect SMD OPEN NOTIFY */ -#define WPAL_MC_MSG_SMD_NOTIF_OPEN_SIG 0x09E2 - -/* Random signature to detect SMD DATA NOTIFY */ -#define WPAL_MC_MSG_SMD_NOTIF_DATA_SIG 0xDA7A - typedef struct swpt_msg wpt_msg; typedef void (*wpal_msg_callback)(wpt_msg *pMsg); diff --git a/drivers/staging/prima/CORE/WDI/WPAL/inc/wlan_qct_pal_timer.h b/drivers/staging/prima/CORE/WDI/WPAL/inc/wlan_qct_pal_timer.h index df7debf90ff..0e314075ea7 100644 --- a/drivers/staging/prima/CORE/WDI/WPAL/inc/wlan_qct_pal_timer.h +++ b/drivers/staging/prima/CORE/WDI/WPAL/inc/wlan_qct_pal_timer.h @@ -139,13 +139,6 @@ wpt_uint32 wpalGetSystemTime(void); ---------------------------------------------------------------------------*/ wpt_status wpalSleep(wpt_uint32 timeout); -/*--------------------------------------------------------------------------- - wpalBusyWait - Thread busy wait with specified usec - Param: - usecDelay - amount of time to wait. In unit of micro-seconds. - Return: - NONE ----------------------------------------------------------------------------*/ -void wpalBusyWait(wpt_uint32 usecDelay); + #endif // __WLAN_QCT_PAL_TIMER_H diff --git a/drivers/staging/prima/CORE/WDI/WPAL/src/wlan_qct_pal_api.c b/drivers/staging/prima/CORE/WDI/WPAL/src/wlan_qct_pal_api.c index 2868edc8f9a..868df102234 100644 --- a/drivers/staging/prima/CORE/WDI/WPAL/src/wlan_qct_pal_api.c +++ b/drivers/staging/prima/CORE/WDI/WPAL/src/wlan_qct_pal_api.c @@ -61,7 +61,6 @@ #ifndef MEMORY_DEBUG #include "vos_memory.h" #endif /* MEMORY_DEBUG */ -#include "vos_sched.h" #include "vos_api.h" #include "dma-mapping.h" @@ -447,32 +446,3 @@ void wpalFwDumpReq(wpt_uint32 cmd, wpt_uint32 arg1, wpt_uint32 arg2, vos_fwDumpReq(cmd, arg1, arg2, arg3, arg4); return; } - -/*--------------------------------------------------------------------------- - wpalDevicePanic - Trigger Device Panic - Trigger device panic to help debug - - Param: - NONE - - Return: - NONE ----------------------------------------------------------------------------*/ -void wpalDevicePanic(void) -{ - BUG_ON(1); - return; -} - -/*--------------------------------------------------------------------------- - wpalIsWDresetInProgress - calls vos API isWDresetInProgress() - - Param: - NONE - Return: - STATUS - ---------------------------------------------------------------------------*/ -int wpalIsWDresetInProgress(void) -{ - return isWDresetInProgress(); -} diff --git a/drivers/staging/prima/CORE/WDI/WPAL/src/wlan_qct_pal_device.c b/drivers/staging/prima/CORE/WDI/WPAL/src/wlan_qct_pal_device.c index 7758ff16172..eb0f43ab6c0 100644 --- a/drivers/staging/prima/CORE/WDI/WPAL/src/wlan_qct_pal_device.c +++ b/drivers/staging/prima/CORE/WDI/WPAL/src/wlan_qct_pal_device.c @@ -462,11 +462,7 @@ wpt_status wpalWriteRegister wpt_uint32 data ) { - /* if SSR is in progress, and WCNSS is not out of reset (re-init - * not invoked), then do not access WCNSS registers */ - if (NULL == gpEnv || wcnss_device_is_shutdown() || - (vos_is_logp_in_progress(VOS_MODULE_ID_WDI, NULL) && - !vos_is_reinit_in_progress(VOS_MODULE_ID_WDI, NULL))) { + if (NULL == gpEnv) { WPAL_TRACE(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR, "%s: invoked before subsystem initialized", __func__); @@ -510,11 +506,7 @@ wpt_status wpalReadRegister wpt_uint32 *data ) { - /* if SSR is in progress, and WCNSS is not out of reset (re-init - * not invoked), then do not access WCNSS registers */ - if (NULL == gpEnv || wcnss_device_is_shutdown() || - (vos_is_logp_in_progress(VOS_MODULE_ID_WDI, NULL) && - !vos_is_reinit_in_progress(VOS_MODULE_ID_WDI, NULL))) { + if (NULL == gpEnv) { WPAL_TRACE(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR, "%s: invoked before subsystem initialized", __func__); @@ -561,11 +553,7 @@ wpt_status wpalWriteDeviceMemory wpt_uint32 len ) { - /* if SSR is in progress, and WCNSS is not out of reset (re-init - * not invoked), then do not access WCNSS registers */ - if (NULL == gpEnv || wcnss_device_is_shutdown() || - (vos_is_logp_in_progress(VOS_MODULE_ID_WDI, NULL) && - !vos_is_reinit_in_progress(VOS_MODULE_ID_WDI, NULL))) { + if (NULL == gpEnv) { WPAL_TRACE(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR, "%s: invoked before subsystem initialized", __func__); @@ -605,11 +593,7 @@ wpt_status wpalReadDeviceMemory wpt_uint32 len ) { - /* if SSR is in progress, and WCNSS is not out of reset (re-init - * not invoked), then do not access WCNSS registers */ - if (NULL == gpEnv || wcnss_device_is_shutdown() || - (vos_is_logp_in_progress(VOS_MODULE_ID_WDI, NULL) && - !vos_is_reinit_in_progress(VOS_MODULE_ID_WDI, NULL))) { + if (NULL == gpEnv) { WPAL_TRACE(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR, "%s: invoked before subsystem initialized", __func__); diff --git a/drivers/staging/prima/CORE/WDI/WPAL/src/wlan_qct_pal_msg.c b/drivers/staging/prima/CORE/WDI/WPAL/src/wlan_qct_pal_msg.c index 11bd23324b8..0f60cf3ff76 100644 --- a/drivers/staging/prima/CORE/WDI/WPAL/src/wlan_qct_pal_msg.c +++ b/drivers/staging/prima/CORE/WDI/WPAL/src/wlan_qct_pal_msg.c @@ -79,20 +79,7 @@ wpt_status wpalPostCtrlMsg(void *pPalContext, wpt_msg *pMsg) return status; } - if ((WPAL_MC_MSG_SMD_NOTIF_OPEN_SIG == pMsg->type) || - (WPAL_MC_MSG_SMD_NOTIF_DATA_SIG == pMsg->type)) - { - /* SMD NOTIFY MSG has none 0 vos MSG type - * If VOS MC MSG flush procedure detect this, - * Do not free MSG body */ - msg.type = pMsg->type; - } - else - { - /* Default MSG type - * VOS MC MSG flush procedure will free MSG body */ - msg.type = 0; - } + msg.type = 0; //This field is not used because VOSS doesn't check it. msg.reserved = 0; msg.bodyval = 0; msg.bodyptr = pMsg; diff --git a/drivers/staging/prima/CORE/WDI/WPAL/src/wlan_qct_pal_packet.c b/drivers/staging/prima/CORE/WDI/WPAL/src/wlan_qct_pal_packet.c index 3179e9840db..a2ff37cfc34 100644 --- a/drivers/staging/prima/CORE/WDI/WPAL/src/wlan_qct_pal_packet.c +++ b/drivers/staging/prima/CORE/WDI/WPAL/src/wlan_qct_pal_packet.c @@ -138,6 +138,8 @@ VOS_STATUS wpalPacketRXLowResourceCB(vos_pkt_t *pPacket, v_VOID_t *userData) wpalPacketAvailableCB( (wpt_packet *)pPacket, userData ); + wpalPacketAvailableCB = NULL; + return VOS_STATUS_SUCCESS; } @@ -168,22 +170,6 @@ wpt_packet * wpalPacketAlloc(wpt_packet_type pktType, wpt_uint32 nPktSize, break; case eWLAN_PAL_PKT_TYPE_RX_RAW: - /* Set the wpalPacketAvailableCB before we try to get a VOS - * packet from the 'free list' and reset it if vos_pkt_get_packet() - * returns a valid packet. This order is required to avoid the - * race condition: - * 1. The below call to vos_pkt_get_packet() in RX_Thread determines - * that no more packets are available in the 'free list' and sets - * the low resource callbacks. - * 2. in parallel vos_pkt_return_packet() is called in MC_Thread for a - * Management frame before wpalPacketAlloc() gets a chance to set - * wpalPacketAvailableCB and since the 'low resource callbacks' - * are set the callback function - wpalPacketRXLowResourceCB is - * executed,but since wpalPacketAvailableCB is still NULL the low - * resource recovery fails. - */ - wpalPacketAvailableCB = rxLowCB; - vosStatus = vos_pkt_get_packet(&pVosPkt, VOS_PKT_TYPE_RX_RAW, nPktSize, 1, VOS_FALSE, wpalPacketRXLowResourceCB, usrData); @@ -192,9 +178,12 @@ wpt_packet * wpalPacketAlloc(wpt_packet_type pktType, wpt_uint32 nPktSize, /* Reserve the entire raw rx buffer for DXE */ if( vosStatus == VOS_STATUS_SUCCESS ) { - wpalPacketAvailableCB = NULL; vosStatus = vos_pkt_reserve_head_fast( pVosPkt, &pData, nPktSize ); } + else + { + wpalPacketAvailableCB = rxLowCB; + } #endif /* FEATURE_R33D */ if((NULL != pVosPkt) && (VOS_STATUS_E_RESOURCES != vosStatus)) { @@ -312,18 +301,8 @@ wpt_status wpalPacketRawTrimHead(wpt_packet *pPkt, wpt_uint32 size) return eWLAN_PAL_STATUS_E_INVAL; } - if ((eWLAN_PAL_PKT_TYPE_TX_802_11_MGMT == WPAL_PACKET_GET_TYPE(pPkt)) || - (eWLAN_PAL_PKT_TYPE_RX_RAW == WPAL_PACKET_GET_TYPE(pPkt))) - { - // Continue to trim the packet - } - else - { - WPAL_TRACE(eWLAN_MODULE_PAL, eWLAN_PAL_TRACE_LEVEL_ERROR, - "%s : neither 80211 managment packet nor RAW packet", __func__); - VOS_ASSERT(0); - return eWLAN_PAL_STATUS_E_INVAL; - } + VOS_ASSERT( (eWLAN_PAL_PKT_TYPE_TX_802_11_MGMT == WPAL_PACKET_GET_TYPE(pPkt)) || + (eWLAN_PAL_PKT_TYPE_RX_RAW == WPAL_PACKET_GET_TYPE(pPkt)) ); if( !VOS_IS_STATUS_SUCCESS(vos_pkt_trim_head(WPAL_TO_VOS_PKT(pPkt), (v_SIZE_t)size)) ) { @@ -355,19 +334,8 @@ wpt_status wpalPacketRawTrimTail(wpt_packet *pPkt, wpt_uint32 size) return eWLAN_PAL_STATUS_E_INVAL; } - if ((eWLAN_PAL_PKT_TYPE_TX_802_11_MGMT == WPAL_PACKET_GET_TYPE(pPkt)) || - (eWLAN_PAL_PKT_TYPE_RX_RAW == WPAL_PACKET_GET_TYPE(pPkt))) - { - // Continue to trim the packet - } - else - { - WPAL_TRACE(eWLAN_MODULE_PAL, eWLAN_PAL_TRACE_LEVEL_ERROR, - "%s : neither 80211 managment packet nor RAW packet", __func__); - VOS_ASSERT(0); - return eWLAN_PAL_STATUS_E_INVAL; - } - + VOS_ASSERT( (eWLAN_PAL_PKT_TYPE_TX_802_11_MGMT == WPAL_PACKET_GET_TYPE(pPkt)) || + (eWLAN_PAL_PKT_TYPE_RX_RAW == WPAL_PACKET_GET_TYPE(pPkt)) ); if( !VOS_IS_STATUS_SUCCESS(vos_pkt_trim_tail(WPAL_TO_VOS_PKT(pPkt), (v_SIZE_t)size)) ) { WPAL_TRACE(eWLAN_MODULE_PAL, eWLAN_PAL_TRACE_LEVEL_ERROR, "%s Invalid trim(%d)\n", @@ -480,7 +448,6 @@ WPT_STATIC WPT_INLINE void* itGetOSPktAddrFromDevice( wpt_packet *pPacket ) { struct sk_buff *skb; - /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ if ( VOS_STATUS_SUCCESS != vos_pkt_get_os_packet(WPAL_TO_VOS_PKT(pPacket), (void**)&skb, VOS_FALSE )) @@ -489,19 +456,6 @@ WPT_STATIC WPT_INLINE void* itGetOSPktAddrFromDevice( wpt_packet *pPacket ) } else { - if(skb->data == skb->tail) - { -#ifdef WLAN_BUG_ON_SKB_ERROR - wpalDevicePanic(); -#else - WPAL_TRACE(eWLAN_MODULE_PAL, eWLAN_PAL_TRACE_LEVEL_FATAL, - "%s: skb->data == skb->tail. Attempting recovery " - "skb:%p, head:%p, tail:%p, data:%p", - __func__, skb, skb->head, skb->tail, skb->data); - - skb->data = skb->head; -#endif - } /*Map skb data into dma-able memory (changes will be commited from cache) */ return (void*)dma_map_single( NULL, skb->data, skb->len, DMA_FROM_DEVICE ); diff --git a/drivers/staging/prima/CORE/WDI/WPAL/src/wlan_qct_pal_timer.c b/drivers/staging/prima/CORE/WDI/WPAL/src/wlan_qct_pal_timer.c index 32ca0e798ce..bd5decf1df4 100644 --- a/drivers/staging/prima/CORE/WDI/WPAL/src/wlan_qct_pal_timer.c +++ b/drivers/staging/prima/CORE/WDI/WPAL/src/wlan_qct_pal_timer.c @@ -229,16 +229,3 @@ wpt_status wpalSleep(wpt_uint32 timeout) vos_sleep( timeout ); return eWLAN_PAL_STATUS_SUCCESS; } - -/*--------------------------------------------------------------------------- - wpalBusyWait - Thread busy wait with specified usec - Param: - usecDelay - amount of time to wait. In unit of micro-seconds. - Return: - NONE ----------------------------------------------------------------------------*/ -void wpalBusyWait(wpt_uint32 usecDelay) -{ - vos_busy_wait(usecDelay); - return; -} diff --git a/drivers/staging/prima/Makefile b/drivers/staging/prima/Makefile index e7ac3c1cee0..210fe5943dd 100644 --- a/drivers/staging/prima/Makefile +++ b/drivers/staging/prima/Makefile @@ -235,8 +235,7 @@ SME_PMC_OBJS := $(SME_SRC_DIR)/pmc/pmcApi.o \ SME_QOS_OBJS := $(SME_SRC_DIR)/QoS/sme_Qos.o SME_CMN_OBJS := $(SME_SRC_DIR)/sme_common/sme_Api.o \ - $(SME_SRC_DIR)/sme_common/sme_FTApi.o \ - $(SME_SRC_DIR)/sme_common/sme_Trace.o + $(SME_SRC_DIR)/sme_common/sme_FTApi.o SME_BTC_OBJS := $(SME_SRC_DIR)/btc/btcApi.o @@ -478,12 +477,10 @@ CDEFINES := -DANI_BUS_TYPE_PLATFORM=1 \ -DWLAN_FEATURE_P2P_DEBUG \ -DWLAN_ENABLE_AGEIE_ON_SCAN_RESULTS \ -DWLANTL_DEBUG\ - -DWLAN_NS_OFFLOAD \ -DWLAN_ACTIVEMODE_OFFLOAD_FEATURE \ -DWLAN_FEATURE_HOLD_RX_WAKELOCK \ -DWLAN_SOFTAP_VSTA_FEATURE \ - -DWLAN_FEATURE_ROAM_SCAN_OFFLOAD \ - -DWLAN_BUG_ON_SKB_ERROR + -DWLAN_FEATURE_ROAM_SCAN_OFFLOAD ifneq ($(CONFIG_PRONTO_WLAN),) CDEFINES += -DWCN_PRONTO @@ -494,7 +491,6 @@ ifeq ($(BUILD_DEBUG_VERSION),1) CDEFINES += -DWLAN_DEBUG \ -DTRACE_RECORD \ -DLIM_TRACE_RECORD \ - -DSME_TRACE_RECORD \ -DPE_DEBUG_LOGW \ -DPE_DEBUG_LOGE \ -DDEBUG @@ -538,6 +534,9 @@ endif ifeq ($(CONFIG_PRIMA_WLAN_LFR),y) CDEFINES += -DFEATURE_WLAN_LFR +#Begin fjdw67 Motorola, IKJB42MAIN-6385 - LFR roaming instrumentation +CDEFINES += -DFEATURE_WLAN_LFR_METRICS +#End IKJB42MAIN-6385 endif ifeq ($(CONFIG_PRIMA_WLAN_OKC),y) @@ -557,8 +556,27 @@ endif # enable the MAC Address auto-generation feature CDEFINES += -DWLAN_AUTOGEN_MACADDR_FEATURE -ifeq ($(CONFIG_WLAN_FEATURE_11W),y) -CDEFINES += -DWLAN_FEATURE_11W +#Allow for OTA upgrade of BIN files +CDEFINES += -DWLAN_NV_OTA_UPGRADE + +ifneq (, $(filter msm8960, $(BOARD_PLATFORM))) +EXTRA_CFLAGS += -march=armv7-a +CDEFINES += -DMSM_PLATFORM_8960 +endif + +ifneq (, $(filter msm8660, $(BOARD_PLATFORM))) +EXTRA_CFLAGS += -march=armv7-a +CDEFINES += -DMSM_PLATFORM_8660 +endif + +ifneq (, $(filter msm7630_surf msm7630_fusion, $(BOARD_PLATFORM))) +EXTRA_CFLAGS += -march=armv7-a +CDEFINES += -DMSM_PLATFORM_7x30 +endif + +ifneq (, $(filter msm7627_surf, $(BOARD_PLATFORM))) +EXTRA_CFLAGS += -march=armv6 +CDEFINES += -DMSM_PLATFORM_7x27 endif ifeq ($(PANIC_ON_BUG),1) diff --git a/drivers/staging/prima/firmware_bin/WCNSS_cfg.dat b/drivers/staging/prima/firmware_bin/WCNSS_cfg.dat Binary files differindex 5dac7620110..bd3facccc4a 100644..100755 --- a/drivers/staging/prima/firmware_bin/WCNSS_cfg.dat +++ b/drivers/staging/prima/firmware_bin/WCNSS_cfg.dat diff --git a/drivers/staging/prima/firmware_bin/WCNSS_qcom_cfg.ini b/drivers/staging/prima/firmware_bin/WCNSS_qcom_cfg.ini index 21a4ba6af46..fd063b25656 100644..100755 --- a/drivers/staging/prima/firmware_bin/WCNSS_qcom_cfg.ini +++ b/drivers/staging/prima/firmware_bin/WCNSS_qcom_cfg.ini @@ -3,6 +3,10 @@ # defaults for the WLAN Driver +# Enable/Disable MCC Mode +gEnableMCCMode=1 +gAllowMCCGODiffBI=2 + # Enable IMPS or not gEnableImps=1 @@ -19,6 +23,18 @@ gImpsModSleepTime=0 # Enable BMPS or not gEnableBmps=1 +gBmpsMinListenInterval=1 +gBmpsModListenInterval=2 +gBmpsMaxListenInterval=3 +gPowerUsage=Max + +#Telescopic Beacon skipping +gTelescopicBeaconWakeupEn=1 +telescopicBeaconTransListenInterval=3 +telescopicBeaconTransListenIntervalNumIdleBcns=1 +telescopicBeaconMaxListenInterval=3 +telescopicBeaconMaxListenIntervalNumIdleBcns=1 + # Enable suspend or not @@ -54,7 +70,7 @@ Intf3MacAddress=000AF58989FC # UAPSD service interval for VO,VI, BE, BK traffic - +UapsdMask=0 InfraUapsdVoSrvIntv=0 InfraUapsdViSrvIntv=0 @@ -85,7 +101,7 @@ gNthBeaconFilter=50 # 2: Filter all Broadcast. 3: Filter all Mcast abd Bcast -McastBcastFilter=3 +McastBcastFilter=0 #Flag to enable HostARPOffload feature or not @@ -93,10 +109,6 @@ McastBcastFilter=3 hostArpOffload=1 -#Flag to enable HostNSOffload feature or not - -hostNSOffload=1 - #SoftAP Related Parameters # AP MAc addr @@ -116,7 +128,7 @@ gEnableApOBSSProt=1 #Enable/Disable UAPSD for SoftAP -gEnableApUapsd=1 +gEnableApUapsd=0 # Fixed Rate @@ -277,7 +289,7 @@ BandCapability=0 #Beacon Early Termination (1 = enable the BET feature, 0 = disable) -enableBeaconEarlyTermination=0 +enableBeaconEarlyTermination=1 beaconEarlyTerminationWakeInterval=3 @@ -307,7 +319,7 @@ gChannelBondingMode5GHz=1 #Enable Keep alive with non-zero period value -#gStaKeepAlivePeriod = 30 +gStaKeepAlivePeriod = 30 #AP LINK MONITOR TIMEOUT is used for both SAP and GO mode. #It is used to change the frequency of keep alive packets in the AP Link Monitor period which is by @@ -325,8 +337,8 @@ gEnableBypass11d=1 #If set to 0, will not scan DFS channels - -gEnableDFSChnlScan=1 +#Off by default, but DFS will be required for Korea +gEnableDFSChnlScan=0 gVhtChannelWidth=2 @@ -341,7 +353,7 @@ gEnableAutomaticTxPowerControl=1 gEnableCloseLoop=1 #Data Inactivity Timeout when in powersave (in ms) -gDataInactivityTimeout=200 +gDataInactivityTimeout=120 # VHT Tx/Rx MCS values # Valid values are 0,1,2. If commented out, the default value is 0. @@ -357,20 +369,29 @@ gVhtTxMCS=2 # gPassiveMinChannelTime=60 # gActiveMaxChannelTime=40 # gActiveMinChannelTime=20 - -#If set to 0, MCC is not allowed. -gEnableMCCMode=1 +gPassiveMaxChannelTimeConc=110 +gPassiveMinChannelTimeConc=60 +gActiveMaxChannelTimeConc=27 +gActiveMinChannelTimeConc=20 +gRestTimeConc=100 +gNumChanCombinedConc=1 # 1=enable STBC; 0=disable STBC gEnableRXSTBC=1 +# Priority Setting:COUNTRY IOCTL > 11d > NV default +gCountryCodePriority=1 + +#Count of the Scan Result age. +gScanResultAgeCount=2 + # Enable Active mode offload gEnableActiveModeOffload=1 #Enable Scan Results Aging based on timer #Timer value is in seconds #If Set to 0 it will not enable the feature -gScanAgingTime=0 +gScanAgingTime=10 #Enable Power saving mechanism Based on Android Framework #If set to 0 Driver internally control the Power saving mechanism @@ -387,36 +408,31 @@ gThermalMitigationEnable=1 #Each country code must be delimited by comma(,) gListOfNon11acCountryCode=RU,UA,ZA +# To enable, set gRoamIntraBand=1 (Roaming within band) +# To disable, set gRoamIntraBand=0 (Roaming across band) +gRoamIntraBand=0 + +#Disconnect hotspot connection for inactive client after 4 mins +gApKeepAlivePeriod=60 + #Maxium Channel time in msec -gMaxMediumTime = 5480 +gMaxMediumTime = 6000 # 802.11K support -gRrmEnable=1 -gRrmOperChanMax=8 -gRrmNonOperChanMax=8 -gRrmRandIntvl=100 - -#Disable/Enable Strict FCC Regulatory -# 0 to disable, 1 to enable -gEnableStrictRegulatoryForFCC=1 - -# TDLS configuration -gEnableTDLSSupport=1 -gEnableTDLSImplicitTrigger=1 -gTDLSExternalControl=1 -gTDLSTxStatsPeriod=5000 -gTDLSTxPacketThreshold=10 -gTDLSDiscoveryPeriod=20000 -gTDLSMaxDiscoveryAttempt=5 -gTDLSIdleTimeout=40000 -gTDLSRssiHysteresis=100 -gTDLSRSSITriggerThreshold=-60 -gTDLSIdlePacketThreshold=5 -gTDLSRSSITeardownThreshold=-70 +#gRrmEnable=1 +#gRrmOperChanMax=8 +#gRrmNonOperChanMax=8 +#gRrmRandIntvl=100 + +#Disconnect hotspot connection for inactive client after 4 mins +gApKeepAlivePeriod=60 + +#SAP/P2P-GO mode traffic monitor +gEnableTrafficMonitor=0 +gTrafficIdleTimeout=3000 gEmptyScanRefreshPeriod=30000 gEmptyScanMaxPeriod=240000 - END # Note: Configuration parser would not read anything past the END marker diff --git a/drivers/staging/prima/riva/inc/wlan_hal_cfg.h b/drivers/staging/prima/riva/inc/wlan_hal_cfg.h index d5800093ed0..c9a319c7756 100644 --- a/drivers/staging/prima/riva/inc/wlan_hal_cfg.h +++ b/drivers/staging/prima/riva/inc/wlan_hal_cfg.h @@ -154,15 +154,14 @@ #define QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER 100 #define QWLAN_HAL_CFG_ENABLE_DETECT_PS_SUPPORT 101 #define QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT 102 -#define QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN 103 -#define QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN 104 -#define QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN 105 -#define QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN 106 -#define QWLAN_HAL_CFG_MAX_PARAMS 107 +#define QWLAN_HAL_CFG_BTC_DWELL_TIME_MULTIPLIER 103 +#define QWLAN_HAL_CFG_ENABLE_TDLS_OXYGEN_MODE 104 +#define QWLAN_HAL_CFG_MAX_PARAMS 105 + /* Total number of Integer CFGs. This is used while allocating the memory for TLV */ -#define QWLAN_HAL_CFG_INTEGER_PARAM 106 +#define QWLAN_HAL_CFG_INTEGER_PARAM 100 /*------------------------------------------------------------------------- @@ -741,11 +740,6 @@ #define QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER_MAX 1 #define QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER_DEF 0 -/* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */ -#define QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER_MIN 0 -#define QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER_MAX 1 -#define QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER_DEF 0 - /* QWLAN_HAL_CFG_ENABLE_DETECT_PS_SUPPORT */ #define QWLAN_HAL_CFG_ENABLE_DETECT_PS_SUPPORT_MIN 0 #define QWLAN_HAL_CFG_ENABLE_DETECT_PS_SUPPORT_MAX 1 @@ -756,21 +750,12 @@ #define QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT_MAX 255 #define QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT_DEF 3 -#define QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN_MIN 0 -#define QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN_MAX 250000 -#define QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN_DEF 60000 - -#define QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN_MIN 0 -#define QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN_MAX 250000 -#define QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN_DEF 90000 - -#define QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN_MIN 0 -#define QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN_MAX 250000 -#define QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN_DEF 60000 - -#define QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN_MIN 0 -#define QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN_MAX 250000 -#define QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN_DEF 90000 +/*QWLAN_HAL_CFG_BTC_DWELL_TIME_MULTIPLIER*/ +/*This value is multiplied to ChannelDwellTime + *i.e If value is 300 then ChannelDwellTime is (3*ChannelDwelltime)*/ +#define QWLAN_HAL_CFG_BTC_DWELL_TIME_MULTIPLIER_MIN 0 +#define QWLAN_HAL_CFG_BTC_DWELL_TIME_MULTIPLIER_MAX 300 +#define QWLAN_HAL_CFG_BTC_DWELL_TIME_MULTIPLIER_DEF 300 #endif //__WLAN_HAL_CFG_H__ diff --git a/drivers/staging/prima/riva/inc/wlan_nv.h b/drivers/staging/prima/riva/inc/wlan_nv.h index dc765efae86..ca8f158bd06 100755 --- a/drivers/staging/prima/riva/inc/wlan_nv.h +++ b/drivers/staging/prima/riva/inc/wlan_nv.h @@ -98,6 +98,15 @@ typedef enum #define WLAN_NV_VERSION NV_VERSION_11N_11AC_FW_CONFIG #endif //WCN_PRONTO +typedef PACKED_PRE struct PACKED_POST +{ + uint8 macAddr1[NV_FIELD_MAC_ADDR_SIZE]; + uint8 macAddr2[NV_FIELD_MAC_ADDR_SIZE]; + uint8 macAddr3[NV_FIELD_MAC_ADDR_SIZE]; + uint8 macAddr4[NV_FIELD_MAC_ADDR_SIZE]; +}sMacAddr; + + typedef PACKED_PRE union PACKED_POST { //common NV fields @@ -106,10 +115,7 @@ typedef PACKED_PRE union PACKED_POST uint8 wlanNvRevId; uint8 numOfTxChains; uint8 numOfRxChains; - uint8 macAddr[NV_FIELD_MAC_ADDR_SIZE]; /* Default, not change name for compatibility */ - uint8 macAddr2[NV_FIELD_MAC_ADDR_SIZE]; - uint8 macAddr3[NV_FIELD_MAC_ADDR_SIZE]; - uint8 macAddr4[NV_FIELD_MAC_ADDR_SIZE]; + sMacAddr macAddr; uint8 mfgSN[NV_FIELD_MFG_SN_SIZE]; uint8 couplerType; uint8 nvVersion; @@ -377,6 +383,11 @@ typedef enum #define HW_VAL_VALUES_VALID_CUSTOM_TCXO_REG9_MASK 0x20 +#define HAL_PWR_SAVE_FW_BMPS_SLEEP_TIME_OVERHEADS_US 1400 //(2.4Ghz operation) +#define HAL_PWR_SAVE_FW_BMPS_SLEEP_TIME_OVERHEADS_5GHZ_US 1400 //(5Ghz operation) +#define HAL_PWR_SAVE_FW_BMPS_SLEEP_TIME_OVERHEADS_XPA_US 1600 //(xLNA operation) + + //From wlanfw/inc/halPhyCalMemory.h typedef PACKED_PRE struct PACKED_POST { diff --git a/sound/soc/msm/qdsp6/q6voice.c b/sound/soc/msm/qdsp6/q6voice.c index e6fb885e9a4..341ebffea5e 100644 --- a/sound/soc/msm/qdsp6/q6voice.c +++ b/sound/soc/msm/qdsp6/q6voice.c @@ -48,7 +48,6 @@ static int voice_send_enable_vocproc_cmd(struct voice_data *v); static int voice_send_netid_timing_cmd(struct voice_data *v); static int voice_send_attach_vocproc_cmd(struct voice_data *v); static int voice_send_set_device_cmd(struct voice_data *v); -static int voice_send_disable_vocproc_cmd(struct voice_data *v); static int voice_send_vol_index_cmd(struct voice_data *v); static int voice_send_cvp_map_memory_cmd(struct voice_data *v); static int voice_send_cvp_unmap_memory_cmd(struct voice_data *v); @@ -799,39 +798,37 @@ static int voice_send_tty_mode_cmd(struct voice_data *v) } mvm_handle = voice_get_mvm_handle(v); - if (v->tty_mode) { - /* send tty mode cmd to mvm */ - mvm_tty_mode_cmd.hdr.hdr_field = APR_HDR_FIELD( - APR_MSG_TYPE_SEQ_CMD, - APR_HDR_LEN(APR_HDR_SIZE), - APR_PKT_VER); - mvm_tty_mode_cmd.hdr.pkt_size = APR_PKT_SIZE(APR_HDR_SIZE, - sizeof(mvm_tty_mode_cmd) - - APR_HDR_SIZE); - pr_debug("%s: pkt size = %d\n", - __func__, mvm_tty_mode_cmd.hdr.pkt_size); - mvm_tty_mode_cmd.hdr.src_port = v->session_id; - mvm_tty_mode_cmd.hdr.dest_port = mvm_handle; - mvm_tty_mode_cmd.hdr.token = 0; - mvm_tty_mode_cmd.hdr.opcode = VSS_ISTREAM_CMD_SET_TTY_MODE; - mvm_tty_mode_cmd.tty_mode.mode = v->tty_mode; - pr_debug("tty mode =%d\n", mvm_tty_mode_cmd.tty_mode.mode); - - v->mvm_state = CMD_STATUS_FAIL; - ret = apr_send_pkt(apr_mvm, (uint32_t *) &mvm_tty_mode_cmd); - if (ret < 0) { - pr_err("%s: Error %d sending SET_TTY_MODE\n", - __func__, ret); - goto fail; - } - ret = wait_event_timeout(v->mvm_wait, - (v->mvm_state == CMD_STATUS_SUCCESS), - msecs_to_jiffies(TIMEOUT_MS)); - if (!ret) { - pr_err("%s: wait_event timeout\n", __func__); - goto fail; - } + /* send tty mode cmd to mvm */ + mvm_tty_mode_cmd.hdr.hdr_field = APR_HDR_FIELD( + APR_MSG_TYPE_SEQ_CMD, + APR_HDR_LEN(APR_HDR_SIZE), + APR_PKT_VER); + mvm_tty_mode_cmd.hdr.pkt_size = APR_PKT_SIZE(APR_HDR_SIZE, + sizeof(mvm_tty_mode_cmd) - + APR_HDR_SIZE); + pr_debug("%s: pkt size = %d\n", + __func__, mvm_tty_mode_cmd.hdr.pkt_size); + mvm_tty_mode_cmd.hdr.src_port = v->session_id; + mvm_tty_mode_cmd.hdr.dest_port = mvm_handle; + mvm_tty_mode_cmd.hdr.token = 0; + mvm_tty_mode_cmd.hdr.opcode = VSS_ISTREAM_CMD_SET_TTY_MODE; + mvm_tty_mode_cmd.tty_mode.mode = v->tty_mode; + pr_debug("tty mode =%d\n", mvm_tty_mode_cmd.tty_mode.mode); + v->mvm_state = CMD_STATUS_FAIL; + ret = apr_send_pkt(apr_mvm, (uint32_t *) &mvm_tty_mode_cmd); + if (ret < 0) { + pr_err("%s: Error %d sending SET_TTY_MODE\n", + __func__, ret); + goto fail; } + ret = wait_event_timeout(v->mvm_wait, + (v->mvm_state == CMD_STATUS_SUCCESS), + msecs_to_jiffies(TIMEOUT_MS)); + if (!ret) { + pr_err("%s: wait_event timeout\n", __func__); + goto fail; + } + return 0; fail: return -EINVAL; @@ -1128,57 +1125,6 @@ fail: return -EINVAL; } -static int voice_send_disable_vocproc_cmd(struct voice_data *v) -{ - struct apr_hdr cvp_disable_cmd; - int ret = 0; - void *apr_cvp; - u16 cvp_handle; - - if (v == NULL) { - pr_err("%s: v is NULL\n", __func__); - return -EINVAL; - } - apr_cvp = common.apr_q6_cvp; - - if (!apr_cvp) { - pr_err("%s: apr regist failed\n", __func__); - return -EINVAL; - } - cvp_handle = voice_get_cvp_handle(v); - - /* disable vocproc and wait for respose */ - cvp_disable_cmd.hdr_field = APR_HDR_FIELD(APR_MSG_TYPE_SEQ_CMD, - APR_HDR_LEN(APR_HDR_SIZE), - APR_PKT_VER); - cvp_disable_cmd.pkt_size = APR_PKT_SIZE(APR_HDR_SIZE, - sizeof(cvp_disable_cmd) - APR_HDR_SIZE); - pr_debug("cvp_disable_cmd pkt size = %d, cvp_handle=%d\n", - cvp_disable_cmd.pkt_size, cvp_handle); - cvp_disable_cmd.src_port = v->session_id; - cvp_disable_cmd.dest_port = cvp_handle; - cvp_disable_cmd.token = 0; - cvp_disable_cmd.opcode = VSS_IVOCPROC_CMD_DISABLE; - - v->cvp_state = CMD_STATUS_FAIL; - ret = apr_send_pkt(apr_cvp, (uint32_t *) &cvp_disable_cmd); - if (ret < 0) { - pr_err("Fail in sending VSS_IVOCPROC_CMD_DISABLE\n"); - goto fail; - } - ret = wait_event_timeout(v->cvp_wait, - (v->cvp_state == CMD_STATUS_SUCCESS), - msecs_to_jiffies(TIMEOUT_MS)); - if (!ret) { - pr_err("%s: wait_event timeout\n", __func__); - goto fail; - } - - return 0; -fail: - return -EINVAL; -} - static int voice_send_set_device_cmd(struct voice_data *v) { struct cvp_set_device_cmd cvp_setdev_cmd; @@ -2295,7 +2241,7 @@ static int voice_setup_vocproc(struct voice_data *v) voice_send_set_widevoice_enable_cmd(v); /* enable slowtalk if st_enable is set */ - if (v->st_enable) + if (v->st_enable && !v->tty_mode) voice_send_set_pp_enable_cmd(v, MODULE_ID_VOICE_MODULE_ST, v->st_enable); voice_send_set_pp_enable_cmd(v, MODULE_ID_VOICE_MODULE_FENS, @@ -3151,6 +3097,57 @@ fail: return ret; } +static int voice_pause_voice_call(struct voice_data *v) +{ + struct apr_hdr mvm_pause_voice_cmd; + void *apr_mvm; + int ret = 0; + + if (v == NULL) { + pr_err("%s: Voice data is NULL\n", __func__); + ret = -EINVAL; + goto done; + } + + apr_mvm = common.apr_q6_mvm; + if (!apr_mvm) { + pr_err("%s: apr_mvm is NULL.\n", __func__); + ret = -EINVAL; + goto done; + } + + mvm_pause_voice_cmd.hdr_field = APR_HDR_FIELD(APR_MSG_TYPE_SEQ_CMD, + APR_HDR_LEN(APR_HDR_SIZE), APR_PKT_VER); + mvm_pause_voice_cmd.pkt_size = APR_PKT_SIZE(APR_HDR_SIZE, + sizeof(mvm_pause_voice_cmd) - APR_HDR_SIZE); + mvm_pause_voice_cmd.src_port = v->session_id; + mvm_pause_voice_cmd.dest_port = voice_get_mvm_handle(v); + mvm_pause_voice_cmd.token = 0; + mvm_pause_voice_cmd.opcode = VSS_IMVM_CMD_PAUSE_VOICE; + v->mvm_state = CMD_STATUS_FAIL; + pr_debug("%s: send mvm_pause_voice_cmd pkt size = %d\n", + __func__, mvm_pause_voice_cmd.pkt_size); + + ret = apr_send_pkt(apr_mvm, (uint32_t *)&mvm_pause_voice_cmd); + + if (ret < 0) { + pr_err("Fail in sending VSS_IMVM_CMD_PAUSE_VOICE\n"); + ret = -EINVAL; + goto done; + } + + ret = wait_event_timeout(v->mvm_wait, + (v->mvm_state == CMD_STATUS_SUCCESS), + msecs_to_jiffies(TIMEOUT_MS)); + if (!ret) { + pr_err("%s: Command timeout\n", __func__); + ret = -EINVAL; + goto done; + } +done: + return ret; +} + int voc_start_playback(uint32_t set) { int ret = 0; @@ -3189,38 +3186,45 @@ int voc_disable_cvp(uint16_t session_id) struct voice_data *v = voice_get_session(session_id); int ret = 0; + pr_debug("%s: voc state=%d, session_id=0x%x\n", __func__, + v->voc_state, session_id); + if (v == NULL) { pr_err("%s: invalid session_id 0x%x\n", __func__, session_id); - return -EINVAL; } mutex_lock(&v->lock); - if (v->voc_state == VOC_RUN) { if (v->dev_tx.port_id != RT_PROXY_PORT_001_TX && v->dev_rx.port_id != RT_PROXY_PORT_001_RX) afe_sidetone(v->dev_tx.port_id, v->dev_rx.port_id, 0, 0); - rtac_remove_voice(voice_get_cvs_handle(v)); - /* send cmd to dsp to disable vocproc */ - ret = voice_send_disable_vocproc_cmd(v); + ret = voice_pause_voice_call(v); if (ret < 0) { - pr_err("%s: disable vocproc failed\n", __func__); - goto fail; + pr_err("%s: Pause Voice Call failed for session 0x%x, err %d!\n", + __func__, v->session_id, ret); + goto done; } + rtac_remove_voice(voice_get_cvs_handle(v)); + /* deregister cvp and vol cal */ voice_send_cvp_deregister_vol_cal_table_cmd(v); voice_send_cvp_deregister_cal_cmd(v); voice_send_cvp_unmap_memory_cmd(v); - if (common.ec_ref_ext == true) + if (common.ec_ref_ext) voc_set_ext_ec_ref(AFE_PORT_INVALID, false); + v->voc_state = VOC_CHANGE; + } else { + pr_debug("%s: called in voc state=%d, No_OP\n", + __func__, v->voc_state); } -fail: mutex_unlock(&v->lock); +done: + mutex_unlock(&v->lock); return ret; } @@ -3231,82 +3235,87 @@ int voc_enable_cvp(uint16_t session_id) struct sidetone_cal sidetone_cal_data; int ret = 0; + pr_debug("%s: voc state=%d, session_id= 0x%x\n", + __func__, v->voc_state, session_id); if (v == NULL) { pr_err("%s: invalid session_id 0x%x\n", __func__, session_id); - return -EINVAL; } mutex_lock(&v->lock); - if (v->voc_state == VOC_CHANGE) { + ret = voice_send_tty_mode_cmd(v); + if (ret < 0) { + pr_err("%s: Sending TTY mode failed, ret=%d\n", + __func__, ret); + /* Not a critical error, allow voice call to continue */ + } + + if (v->tty_mode) { + /* disable slowtalk */ + voice_send_set_pp_enable_cmd(v, + MODULE_ID_VOICE_MODULE_ST, + 0); + } else { + /* restore slowtalk */ + voice_send_set_pp_enable_cmd(v, + MODULE_ID_VOICE_MODULE_ST, + v->st_enable); + } + + get_sidetone_cal(&sidetone_cal_data); + if (v->dev_tx.port_id != RT_PROXY_PORT_001_TX && + v->dev_rx.port_id != RT_PROXY_PORT_001_RX) { + ret = afe_sidetone(v->dev_tx.port_id, + v->dev_rx.port_id, + sidetone_cal_data.enable, + sidetone_cal_data.gain); + if (ret < 0) + pr_err("%s: AFE command sidetone failed\n", + __func__); + } if (common.ec_ref_ext == true) { ret = voice_send_set_device_cmd_v2(v); if (ret < 0) { pr_err("%s: set device V2 failed\n" "rc =%x\n", __func__, ret); - goto fail; + goto done; } } else { ret = voice_send_set_device_cmd(v); if (ret < 0) { - pr_err("%s: set device failed rc=%x\n", - __func__, ret); - goto fail; + pr_err("%s: Set device failed, ret=%d\n", + __func__, ret); + goto done; } } + /* send cvp and vol cal */ ret = voice_send_cvp_map_memory_cmd(v); if (!ret) { voice_send_cvp_register_cal_cmd(v); voice_send_cvp_register_vol_cal_table_cmd(v); } - ret = voice_send_enable_vocproc_cmd(v); - if (ret < 0) { - pr_err("%s: enable vocproc failed\n", __func__); - goto fail; - - } - /* send tty mode if tty device is used */ - voice_send_tty_mode_cmd(v); - - /* enable widevoice if wv_enable is set */ - if (v->wv_enable) - voice_send_set_widevoice_enable_cmd(v); - - /* enable slowtalk */ - if (v->st_enable) - voice_send_set_pp_enable_cmd(v, - MODULE_ID_VOICE_MODULE_ST, - v->st_enable); - /* enable FENS */ - if (v->fens_enable) - voice_send_set_pp_enable_cmd(v, - MODULE_ID_VOICE_MODULE_FENS, - v->fens_enable); - get_sidetone_cal(&sidetone_cal_data); - if (v->dev_tx.port_id != RT_PROXY_PORT_001_TX && - v->dev_rx.port_id != RT_PROXY_PORT_001_RX) { - ret = afe_sidetone(v->dev_tx.port_id, - v->dev_rx.port_id, - sidetone_cal_data.enable, - sidetone_cal_data.gain); - - if (ret < 0) - pr_err("%s: AFE command sidetone failed\n", - __func__); + ret = voice_send_start_voice_cmd(v); + if (ret < 0) { + pr_err("%s: Fail in sending START_VOICE, ret=%d\n", + __func__, ret); + goto done; } rtac_add_voice(voice_get_cvs_handle(v), - voice_get_cvp_handle(v), - v->dev_rx.port_id, v->dev_tx.port_id, - v->session_id); + voice_get_cvp_handle(v), + v->dev_rx.port_id, v->dev_tx.port_id, + v->session_id); + v->voc_state = VOC_RUN; + } else { + pr_debug("%s: called in voc state=%d, No_OP\n", + __func__, v->voc_state); } - -fail: +done: mutex_unlock(&v->lock); return ret; @@ -3484,7 +3493,8 @@ int voc_set_pp_enable(uint16_t session_id, uint32_t module_id, uint32_t enable) v->fens_enable = enable; if (v->voc_state == VOC_RUN) { - if (module_id == MODULE_ID_VOICE_MODULE_ST) + if ((module_id == MODULE_ID_VOICE_MODULE_ST) && + (!v->tty_mode)) ret = voice_send_set_pp_enable_cmd(v, MODULE_ID_VOICE_MODULE_ST, enable); @@ -3926,6 +3936,7 @@ static int32_t qdsp_mvm_callback(struct apr_client_data *data, void *priv) case VSS_IWIDEVOICE_CMD_SET_WIDEVOICE: case VSS_IMVM_CMD_SET_POLICY_DUAL_CONTROL: case VSS_IMVM_CMD_STANDBY_VOICE: + case VSS_IMVM_CMD_PAUSE_VOICE: pr_debug("%s: cmd = 0x%x\n", __func__, ptr[0]); v->mvm_state = CMD_STATUS_SUCCESS; wake_up(&v->mvm_wait); diff --git a/sound/soc/msm/qdsp6/q6voice.h b/sound/soc/msm/qdsp6/q6voice.h index a90e1645d2f..4242198b4f2 100644 --- a/sound/soc/msm/qdsp6/q6voice.h +++ b/sound/soc/msm/qdsp6/q6voice.h @@ -153,6 +153,9 @@ struct vss_unmap_memory_cmd { * vocproc from all the streams to which it is currently attached. */ +#define VSS_IMVM_CMD_PAUSE_VOICE 0x0001137D +/* No payload. Wait for APRV2_IBASIC_RSP_RESULT response. */ + #define VSS_IMVM_CMD_START_VOICE 0x00011190 /* * Start Voice call command. |
