164064216a8433360745f69edddce19a606659163The Android Open Source Project/**************************************************************************** 264064216a8433360745f69edddce19a606659163The Android Open Source Project**+-----------------------------------------------------------------------+** 364064216a8433360745f69edddce19a606659163The Android Open Source Project**| |** 464064216a8433360745f69edddce19a606659163The Android Open Source Project**| Copyright(c) 1998 - 2008 Texas Instruments. All rights reserved. |** 564064216a8433360745f69edddce19a606659163The Android Open Source Project**| All rights reserved. |** 664064216a8433360745f69edddce19a606659163The Android Open Source Project**| |** 764064216a8433360745f69edddce19a606659163The Android Open Source Project**| Redistribution and use in source and binary forms, with or without |** 864064216a8433360745f69edddce19a606659163The Android Open Source Project**| modification, are permitted provided that the following conditions |** 964064216a8433360745f69edddce19a606659163The Android Open Source Project**| are met: |** 1064064216a8433360745f69edddce19a606659163The Android Open Source Project**| |** 1164064216a8433360745f69edddce19a606659163The Android Open Source Project**| * Redistributions of source code must retain the above copyright |** 1264064216a8433360745f69edddce19a606659163The Android Open Source Project**| notice, this list of conditions and the following disclaimer. |** 1364064216a8433360745f69edddce19a606659163The Android Open Source Project**| * Redistributions in binary form must reproduce the above copyright |** 1464064216a8433360745f69edddce19a606659163The Android Open Source Project**| notice, this list of conditions and the following disclaimer in |** 1564064216a8433360745f69edddce19a606659163The Android Open Source Project**| the documentation and/or other materials provided with the |** 1664064216a8433360745f69edddce19a606659163The Android Open Source Project**| distribution. |** 1764064216a8433360745f69edddce19a606659163The Android Open Source Project**| * Neither the name Texas Instruments nor the names of its |** 1864064216a8433360745f69edddce19a606659163The Android Open Source Project**| contributors may be used to endorse or promote products derived |** 1964064216a8433360745f69edddce19a606659163The Android Open Source Project**| from this software without specific prior written permission. |** 2064064216a8433360745f69edddce19a606659163The Android Open Source Project**| |** 2164064216a8433360745f69edddce19a606659163The Android Open Source Project**| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |** 2264064216a8433360745f69edddce19a606659163The Android Open Source Project**| "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |** 2364064216a8433360745f69edddce19a606659163The Android Open Source Project**| LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |** 2464064216a8433360745f69edddce19a606659163The Android Open Source Project**| A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |** 2564064216a8433360745f69edddce19a606659163The Android Open Source Project**| OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |** 2664064216a8433360745f69edddce19a606659163The Android Open Source Project**| SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |** 2764064216a8433360745f69edddce19a606659163The Android Open Source Project**| LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |** 2864064216a8433360745f69edddce19a606659163The Android Open Source Project**| DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |** 2964064216a8433360745f69edddce19a606659163The Android Open Source Project**| THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |** 3064064216a8433360745f69edddce19a606659163The Android Open Source Project**| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |** 3164064216a8433360745f69edddce19a606659163The Android Open Source Project**| OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |** 3264064216a8433360745f69edddce19a606659163The Android Open Source Project**| |** 3364064216a8433360745f69edddce19a606659163The Android Open Source Project**+-----------------------------------------------------------------------+** 3464064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************/ 3564064216a8433360745f69edddce19a606659163The Android Open Source Project 3664064216a8433360745f69edddce19a606659163The Android Open Source Project 3764064216a8433360745f69edddce19a606659163The Android Open Source Project#ifndef ESTA_DRV_INCLUDE_FILE 3864064216a8433360745f69edddce19a606659163The Android Open Source Project#define ESTA_DRV_INCLUDE_FILE 3964064216a8433360745f69edddce19a606659163The Android Open Source Project 4064064216a8433360745f69edddce19a606659163The Android Open Source Project#include <linux/version.h> 4164064216a8433360745f69edddce19a606659163The Android Open Source Project#include <linux/completion.h> 4264064216a8433360745f69edddce19a606659163The Android Open Source Project#include <linux/netdevice.h> 4364064216a8433360745f69edddce19a606659163The Android Open Source Project#include <linux/interrupt.h> 4464064216a8433360745f69edddce19a606659163The Android Open Source Project#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27) 4564064216a8433360745f69edddce19a606659163The Android Open Source Project#include <asm/arch/gpio.h> 4664064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef CONFIG_ANDROID_POWER 4764064216a8433360745f69edddce19a606659163The Android Open Source Project#include <linux/android_power.h> 4864064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 4964064216a8433360745f69edddce19a606659163The Android Open Source Project#else 5064064216a8433360745f69edddce19a606659163The Android Open Source Project#include <asm/gpio.h> 5164064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef CONFIG_HAS_WAKELOCK 5264064216a8433360745f69edddce19a606659163The Android Open Source Project#include <linux/wakelock.h> 5364064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 5464064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 5564064216a8433360745f69edddce19a606659163The Android Open Source Project 5664064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef CONFIG_TROUT_PWRSINK 5764064216a8433360745f69edddce19a606659163The Android Open Source Project#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27) 5864064216a8433360745f69edddce19a606659163The Android Open Source Project#include <asm/arch/trout_pwrsink.h> 5964064216a8433360745f69edddce19a606659163The Android Open Source Project#else 6064064216a8433360745f69edddce19a606659163The Android Open Source Project#include <mach/trout_pwrsink.h> 6164064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 6264064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 6364064216a8433360745f69edddce19a606659163The Android Open Source Project 6464064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef CONFIG_HTC_PWRSINK 6564064216a8433360745f69edddce19a606659163The Android Open Source Project#include <mach/htc_pwrsink.h> 6664064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 6764064216a8433360745f69edddce19a606659163The Android Open Source Project 6864064216a8433360745f69edddce19a606659163The Android Open Source Project#include "osTIType.h" 6964064216a8433360745f69edddce19a606659163The Android Open Source Project#include "osAdapter.h" 7064064216a8433360745f69edddce19a606659163The Android Open Source Project#include "paramOut.h" 7164064216a8433360745f69edddce19a606659163The Android Open Source Project#ifndef GWSI_DRIVER /* for GWSI Stand Alone */ 7264064216a8433360745f69edddce19a606659163The Android Open Source Project#include "configMgr.h" 7364064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 7464064216a8433360745f69edddce19a606659163The Android Open Source Project#include "linux_ioctl_common.h" 7564064216a8433360745f69edddce19a606659163The Android Open Source Project 7664064216a8433360745f69edddce19a606659163The Android Open Source Project#define TIWLAN_DRV_NAME "tiwlan" 7764064216a8433360745f69edddce19a606659163The Android Open Source Project#define TIWLAN_DRV_IF_NAME TIWLAN_DRV_NAME"%d" 7864064216a8433360745f69edddce19a606659163The Android Open Source Project#define TIWLAN_DRV_NAME_WIRELESS_PROTO "IEEE 802.11-DS" 7964064216a8433360745f69edddce19a606659163The Android Open Source Project#define TIWLAN_DBG_PROC "wifidbg" 8064064216a8433360745f69edddce19a606659163The Android Open Source Project 8128a8b7370a08958b1d14c922dae2d4ed22c04205Dmitry Shmidt#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,29) 8228a8b7370a08958b1d14c922dae2d4ed22c04205Dmitry Shmidt#define NETDEV_SET_PRIVATE(dev, drv) dev->priv = drv 8328a8b7370a08958b1d14c922dae2d4ed22c04205Dmitry Shmidt#define NETDEV_GET_PRIVATE(dev) dev->priv 8428a8b7370a08958b1d14c922dae2d4ed22c04205Dmitry Shmidt#else 8528a8b7370a08958b1d14c922dae2d4ed22c04205Dmitry Shmidt#define NETDEV_SET_PRIVATE(dev, drv) dev->ml_priv = drv 8628a8b7370a08958b1d14c922dae2d4ed22c04205Dmitry Shmidt#define NETDEV_GET_PRIVATE(dev) dev->ml_priv 8728a8b7370a08958b1d14c922dae2d4ed22c04205Dmitry Shmidt#endif 8828a8b7370a08958b1d14c922dae2d4ed22c04205Dmitry Shmidt 8964064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid *wifi_kernel_prealloc(int section, unsigned long size); 9064064216a8433360745f69edddce19a606659163The Android Open Source Project 9164064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef TIWLAN_MSM7000 9264064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef CONFIG_WIFI_CONTROL_FUNC 9364064216a8433360745f69edddce19a606659163The Android Open Source Project#include <linux/platform_device.h> 9464064216a8433360745f69edddce19a606659163The Android Open Source Project#include <linux/wifi_tiwlan.h> 9564064216a8433360745f69edddce19a606659163The Android Open Source Projectint msm_wifi_power(int on); 9664064216a8433360745f69edddce19a606659163The Android Open Source Projectint msm_wifi_reset(int on); 9764064216a8433360745f69edddce19a606659163The Android Open Source Project#else 9864064216a8433360745f69edddce19a606659163The Android Open Source Projectextern int trout_wifi_power(int on); 9964064216a8433360745f69edddce19a606659163The Android Open Source Projectextern int trout_wifi_reset(int on); 10064064216a8433360745f69edddce19a606659163The Android Open Source Projectextern int trout_wifi_set_carddetect(int val); 10164064216a8433360745f69edddce19a606659163The Android Open Source Project#define msm_wifi_power(a) trout_wifi_power(a) 10264064216a8433360745f69edddce19a606659163The Android Open Source Project#define msm_wifi_reset(a) trout_wifi_reset(a) 10364064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 10464064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 10564064216a8433360745f69edddce19a606659163The Android Open Source Project 10664064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef CONFIG_HAS_WAKELOCK 10764064216a8433360745f69edddce19a606659163The Android Open Source Project#define CONFIG_ANDROID_POWER 10864064216a8433360745f69edddce19a606659163The Android Open Source Projecttypedef struct wake_lock android_suspend_lock_t; 10964064216a8433360745f69edddce19a606659163The Android Open Source Project#define android_unlock_suspend(a) wake_unlock(a) 11064064216a8433360745f69edddce19a606659163The Android Open Source Project#define android_lock_suspend(a) wake_lock(a) 11164064216a8433360745f69edddce19a606659163The Android Open Source Project#define android_lock_suspend_auto_expire(a,t) wake_lock_timeout(a,t) 11264064216a8433360745f69edddce19a606659163The Android Open Source Project#define android_init_suspend_wakelock(a,n) wake_lock_init(a,WAKE_LOCK_SUSPEND,n) 11364064216a8433360745f69edddce19a606659163The Android Open Source Project#define android_uninit_suspend_lock(a) wake_lock_destroy(a) 11464064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 11564064216a8433360745f69edddce19a606659163The Android Open Source Project 11664064216a8433360745f69edddce19a606659163The Android Open Source Project#ifndef TIWLAN_OMAP1610_REGBASE 11764064216a8433360745f69edddce19a606659163The Android Open Source Project 11864064216a8433360745f69edddce19a606659163The Android Open Source Project#if defined(TIWLAN_OMAP1610_INNOVATOR) 11964064216a8433360745f69edddce19a606659163The Android Open Source Project#define TIWLAN_OMAP1610_REGBASE 0xEC100000 /* VA*/ 12064064216a8433360745f69edddce19a606659163The Android Open Source Project#elif defined(TIWLAN_OMAP1610_WIPP) || defined(TIWLAN_OMAP1610_CRTWIPP) 12164064216a8433360745f69edddce19a606659163The Android Open Source Project#ifndef OMAP_WLAN_BASE 12264064216a8433360745f69edddce19a606659163The Android Open Source Project#define OMAP_WLAN_BASE 0 12364064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 12464064216a8433360745f69edddce19a606659163The Android Open Source Project#define TIWLAN_OMAP1610_REGBASE (OMAP_WLAN_BASE+0x100000) 12564064216a8433360745f69edddce19a606659163The Android Open Source Project#else 12664064216a8433360745f69edddce19a606659163The Android Open Source Project/* Dm: #error TIWLAN_OMAP1610_REGBASE not defined for this platform */ 12764064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 12864064216a8433360745f69edddce19a606659163The Android Open Source Project 12964064216a8433360745f69edddce19a606659163The Android Open Source Project#endif /* #ifndef TIWLAN_OMAP1610_REGBASE */ 13064064216a8433360745f69edddce19a606659163The Android Open Source Project 13164064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef TIWLAN_OMAP1610_REGBASE 13264064216a8433360745f69edddce19a606659163The Android Open Source Project 13364064216a8433360745f69edddce19a606659163The Android Open Source Project#define TIWLAN_OMAP1610_REGSIZE 0x10000 13464064216a8433360745f69edddce19a606659163The Android Open Source Project#define TIWLAN_OMAP1610_MEMBASE (TIWLAN_OMAP1610_REGBASE | 0x20000) 13564064216a8433360745f69edddce19a606659163The Android Open Source Project#define TIWLAN_OMAP1610_MEMSIZE 0x10000 13664064216a8433360745f69edddce19a606659163The Android Open Source Project 13764064216a8433360745f69edddce19a606659163The Android Open Source Project#endif /* #ifdef TIWLAN_OMAP1610_REGBASE */ 13864064216a8433360745f69edddce19a606659163The Android Open Source Project 13964064216a8433360745f69edddce19a606659163The Android Open Source Project#ifndef TIWLAN_OMAP1610_IRQ 14064064216a8433360745f69edddce19a606659163The Android Open Source Project 14164064216a8433360745f69edddce19a606659163The Android Open Source Project#if defined(TIWLAN_OMAP1610_INNOVATOR) 14264064216a8433360745f69edddce19a606659163The Android Open Source Project#define TIWLAN_OMAP1610_IRQ (OMAP_GPIO_IRQ(8)) 14364064216a8433360745f69edddce19a606659163The Android Open Source Project#elif defined(TIWLAN_OMAP1610_CRTWIPP) 14464064216a8433360745f69edddce19a606659163The Android Open Source Project#define TIWLAN_OMAP1610_IRQ (OMAP_GPIO_IRQ(2)) 14564064216a8433360745f69edddce19a606659163The Android Open Source Project#elif defined(TIWLAN_OMAP1610_WIPP) 14664064216a8433360745f69edddce19a606659163The Android Open Source Project#define TIWLAN_OMAP1610_IRQ (OMAP_GPIO_IRQ(2)) 14764064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 14864064216a8433360745f69edddce19a606659163The Android Open Source Project 14964064216a8433360745f69edddce19a606659163The Android Open Source Project#endif /* TIWLAN_OMAP1610_IRQ */ 15064064216a8433360745f69edddce19a606659163The Android Open Source Project#define TIWLAN_IRQ_POLL_INTERVAL HZ/100 /* Used when no Intr are handled from the FW */ 15164064216a8433360745f69edddce19a606659163The Android Open Source Project 15264064216a8433360745f69edddce19a606659163The Android Open Source Project 15364064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef TI_DBG 15464064216a8433360745f69edddce19a606659163The Android Open Source Project#define ti_dprintf(log, fmt, args...) do { \ 15564064216a8433360745f69edddce19a606659163The Android Open Source Project if (log != TIWLAN_LOG_OTHER) { \ 15664064216a8433360745f69edddce19a606659163The Android Open Source Project printk(KERN_INFO fmt, ## args); \ 15764064216a8433360745f69edddce19a606659163The Android Open Source Project } \ 15864064216a8433360745f69edddce19a606659163The Android Open Source Project} while (0) 15964064216a8433360745f69edddce19a606659163The Android Open Source Project#else 16064064216a8433360745f69edddce19a606659163The Android Open Source Project#define ti_dprintf(log, fmt, args...) 16164064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 16264064216a8433360745f69edddce19a606659163The Android Open Source Project 16364064216a8433360745f69edddce19a606659163The Android Open Source Project 16464064216a8433360745f69edddce19a606659163The Android Open Source Project#define ti_nodprintf(log, fmt, args...) 16564064216a8433360745f69edddce19a606659163The Android Open Source Project 16664064216a8433360745f69edddce19a606659163The Android Open Source Projecttypedef enum { 16764064216a8433360745f69edddce19a606659163The Android Open Source Project TIWLAN_LOG_ERROR, 16864064216a8433360745f69edddce19a606659163The Android Open Source Project TIWLAN_LOG_INFO, 16964064216a8433360745f69edddce19a606659163The Android Open Source Project TIWLAN_LOG_OTHER, 17064064216a8433360745f69edddce19a606659163The Android Open Source Project TIWLAN_LOG_DUMMY 17164064216a8433360745f69edddce19a606659163The Android Open Source Project} tiwlan_log_t; 17264064216a8433360745f69edddce19a606659163The Android Open Source Project 17364064216a8433360745f69edddce19a606659163The Android Open Source Projecttypedef struct tiwlan_region { 17464064216a8433360745f69edddce19a606659163The Android Open Source Project unsigned long pa; 17564064216a8433360745f69edddce19a606659163The Android Open Source Project void *va; 17664064216a8433360745f69edddce19a606659163The Android Open Source Project unsigned long size; 17764064216a8433360745f69edddce19a606659163The Android Open Source Project} tiwlan_region_t; 17864064216a8433360745f69edddce19a606659163The Android Open Source Project 17964064216a8433360745f69edddce19a606659163The Android Open Source Project/* Driver structure */ 18064064216a8433360745f69edddce19a606659163The Android Open Source Projecttypedef struct tiwlan_net_dev tiwlan_net_dev_t; 18164064216a8433360745f69edddce19a606659163The Android Open Source Project 18264064216a8433360745f69edddce19a606659163The Android Open Source Project#if defined (__KERNEL__) 18364064216a8433360745f69edddce19a606659163The Android Open Source Project/* Request/response to/from control tasklet */ 18464064216a8433360745f69edddce19a606659163The Android Open Source Projecttypedef struct tiwlan_req { 18564064216a8433360745f69edddce19a606659163The Android Open Source Project struct list_head list; 18664064216a8433360745f69edddce19a606659163The Android Open Source Project tiwlan_net_dev_t *drv; 18764064216a8433360745f69edddce19a606659163The Android Open Source Project struct 18864064216a8433360745f69edddce19a606659163The Android Open Source Project { 18964064216a8433360745f69edddce19a606659163The Android Open Source Project struct { 19064064216a8433360745f69edddce19a606659163The Android Open Source Project int (*f)(struct tiwlan_req *req); 19164064216a8433360745f69edddce19a606659163The Android Open Source Project unsigned long p1; 19264064216a8433360745f69edddce19a606659163The Android Open Source Project unsigned long p2; 19364064216a8433360745f69edddce19a606659163The Android Open Source Project unsigned long p3; 19464064216a8433360745f69edddce19a606659163The Android Open Source Project unsigned long p4; 19564064216a8433360745f69edddce19a606659163The Android Open Source Project int reply_expected; /* 1=reply expected */ 19664064216a8433360745f69edddce19a606659163The Android Open Source Project struct completion comp; 19764064216a8433360745f69edddce19a606659163The Android Open Source Project } req; 19864064216a8433360745f69edddce19a606659163The Android Open Source Project int reply; 19964064216a8433360745f69edddce19a606659163The Android Open Source Project } u; 20064064216a8433360745f69edddce19a606659163The Android Open Source Project} tiwlan_req_t; 20164064216a8433360745f69edddce19a606659163The Android Open Source Project 20264064216a8433360745f69edddce19a606659163The Android Open Source Project/* Timer structure */ 20364064216a8433360745f69edddce19a606659163The Android Open Source Projecttypedef struct timer_obj { 20464064216a8433360745f69edddce19a606659163The Android Open Source Project tiwlan_req_t req; 20564064216a8433360745f69edddce19a606659163The Android Open Source Project /* Timer handler function ->p1 */ 20664064216a8433360745f69edddce19a606659163The Android Open Source Project /* Timer handler function parameter ->p2 */ 20764064216a8433360745f69edddce19a606659163The Android Open Source Project /* Periodic ->p3 */ 20864064216a8433360745f69edddce19a606659163The Android Open Source Project /* jiffies ->p4 */ 20964064216a8433360745f69edddce19a606659163The Android Open Source Project struct timer_list timer; 21064064216a8433360745f69edddce19a606659163The Android Open Source Project int use_count; 21164064216a8433360745f69edddce19a606659163The Android Open Source Project} timer_obj_t; 21264064216a8433360745f69edddce19a606659163The Android Open Source Project 21364064216a8433360745f69edddce19a606659163The Android Open Source Project 21464064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef DRIVER_PROFILING 21564064216a8433360745f69edddce19a606659163The Android Open Source Project 21664064216a8433360745f69edddce19a606659163The Android Open Source Project/* Profiler banchmark function type */ 21764064216a8433360745f69edddce19a606659163The Android Open Source Projecttypedef void (*tiwlan_pfofile_t) (void*, unsigned); 21864064216a8433360745f69edddce19a606659163The Android Open Source Project 21964064216a8433360745f69edddce19a606659163The Android Open Source Project/* Maximum number of profile banchmarks */ 22064064216a8433360745f69edddce19a606659163The Android Open Source Project#define MAX_PROFILE_BM 10 22164064216a8433360745f69edddce19a606659163The Android Open Source Project 22264064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 22364064216a8433360745f69edddce19a606659163The Android Open Source Project 22464064216a8433360745f69edddce19a606659163The Android Open Source Project#if defined(CONFIG_TROUT_PWRSINK) || defined(CONFIG_HTC_PWRSINK) 22564064216a8433360745f69edddce19a606659163The Android Open Source Project#define PWRSINK_WIFI_PERCENT_BASE 4 22664064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 22764064216a8433360745f69edddce19a606659163The Android Open Source Project 22864064216a8433360745f69edddce19a606659163The Android Open Source Project/* #define DM_USE_WORKQUEUE */ 22964064216a8433360745f69edddce19a606659163The Android Open Source Project 23064064216a8433360745f69edddce19a606659163The Android Open Source Project/* Driver structure */ 23164064216a8433360745f69edddce19a606659163The Android Open Source Projectstruct tiwlan_net_dev { 23264064216a8433360745f69edddce19a606659163The Android Open Source Project struct list_head list; 23364064216a8433360745f69edddce19a606659163The Android Open Source Project 23464064216a8433360745f69edddce19a606659163The Android Open Source Project tiwlan_region_t acx_mem; 23564064216a8433360745f69edddce19a606659163The Android Open Source Project tiwlan_region_t acx_reg; 23664064216a8433360745f69edddce19a606659163The Android Open Source Project tiwlan_region_t eeprom_image; 23764064216a8433360745f69edddce19a606659163The Android Open Source Project tiwlan_region_t firmware_image; 23864064216a8433360745f69edddce19a606659163The Android Open Source Project int irq; 23964064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef DM_USE_WORKQUEUE 24064064216a8433360745f69edddce19a606659163The Android Open Source Project struct workqueue_struct *tiwlan_wq; /* Work Queue */ 24164064216a8433360745f69edddce19a606659163The Android Open Source Project struct work_struct tirq; /* Work Task for interrupt */ 24264064216a8433360745f69edddce19a606659163The Android Open Source Project struct work_struct tw; /* Work Task for other stuff */ 24364064216a8433360745f69edddce19a606659163The Android Open Source Project mem_MSDU_T *txmit_msdu_next; 24464064216a8433360745f69edddce19a606659163The Android Open Source Project mem_MSDU_T *txmit_msdu_last; 24564064216a8433360745f69edddce19a606659163The Android Open Source Project struct work_struct txmit; /* Work Task for transmit */ 24664064216a8433360745f69edddce19a606659163The Android Open Source Project#else 24764064216a8433360745f69edddce19a606659163The Android Open Source Project struct tasklet_struct tl; /* Control tasklet */ 24864064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 24964064216a8433360745f69edddce19a606659163The Android Open Source Project#if defined(CONFIG_TROUT_PWRSINK) || defined(CONFIG_HTC_PWRSINK) 25064064216a8433360745f69edddce19a606659163The Android Open Source Project struct delayed_work trxw; /* Work Task for rx watchdog */ 25164064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 25264064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef CONFIG_ANDROID_POWER 25364064216a8433360745f69edddce19a606659163The Android Open Source Project android_suspend_lock_t irq_wake_lock; /* Suspend Lock to keep system awake */ 25464064216a8433360745f69edddce19a606659163The Android Open Source Project android_suspend_lock_t xmit_wake_lock; 25564064216a8433360745f69edddce19a606659163The Android Open Source Project android_suspend_lock_t timer_wake_lock; 25664064216a8433360745f69edddce19a606659163The Android Open Source Project android_suspend_lock_t rx_wake_lock; 2577bfc4e581771193145d1be28cf843aa75d9e9acaThe Android Open Source Project android_suspend_lock_t exec_wake_lock; 25864064216a8433360745f69edddce19a606659163The Android Open Source Project int receive_packet; /* 1=packet was pushed to network stack */ 25964064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 26064064216a8433360745f69edddce19a606659163The Android Open Source Project int interrupt_pending; /* 1=tasklet has to handle interrupts when awakes */ 26164064216a8433360745f69edddce19a606659163The Android Open Source Project int dma_done; 26264064216a8433360745f69edddce19a606659163The Android Open Source Project struct list_head request_q; /* Requests queue: -> tasklet */ 26364064216a8433360745f69edddce19a606659163The Android Open Source Project spinlock_t lock; 26464064216a8433360745f69edddce19a606659163The Android Open Source Project unsigned long flags; 26564064216a8433360745f69edddce19a606659163The Android Open Source Project struct timer_list poll_timer; /* Polling timer. Used only when working without interrupts */ 26664064216a8433360745f69edddce19a606659163The Android Open Source Project int started; /* 1=config manager started. 0=config manager stopped */ 26764064216a8433360745f69edddce19a606659163The Android Open Source Project int initialized; /* 1=succeeded to pass init stage, 0=otherwise */ 26864064216a8433360745f69edddce19a606659163The Android Open Source Project int unload_driver; /* Driver unload indicator */ 26964064216a8433360745f69edddce19a606659163The Android Open Source Project struct net_device_stats stats; 27064064216a8433360745f69edddce19a606659163The Android Open Source Project int alloc_msdu_failures; /* Extra statistics */ 27164064216a8433360745f69edddce19a606659163The Android Open Source Project initTable_t init_table; 27264064216a8433360745f69edddce19a606659163The Android Open Source Project TIWLN_ADAPTER_T adapter; 27364064216a8433360745f69edddce19a606659163The Android Open Source Project struct sock *wl_sock; 27464064216a8433360745f69edddce19a606659163The Android Open Source Project struct completion comp; 27564064216a8433360745f69edddce19a606659163The Android Open Source Project struct net_device *netdev; 27664064216a8433360745f69edddce19a606659163The Android Open Source Project void *priv; /* Pointer to struct net_device */ 27764064216a8433360745f69edddce19a606659163The Android Open Source Project 27864064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef DRIVER_PROFILING 27964064216a8433360745f69edddce19a606659163The Android Open Source Project tiwlan_pfofile_t fpro [MAX_PROFILE_BM]; /* Profiler functions */ 28064064216a8433360745f69edddce19a606659163The Android Open Source Project 28164064216a8433360745f69edddce19a606659163The Android Open Source Project unsigned max_number_of_timers; /* Maximum number of allocated timers */ 28264064216a8433360745f69edddce19a606659163The Android Open Source Project unsigned cur_number_of_timers; /* Current number of allocated timers */ 28364064216a8433360745f69edddce19a606659163The Android Open Source Project 28464064216a8433360745f69edddce19a606659163The Android Open Source Project unsigned max_heap_bytes_allocated; /* Maximum number of allocated bytes on the heap */ 28564064216a8433360745f69edddce19a606659163The Android Open Source Project unsigned cur_heap_bytes_allocated; /* Current number of allocated bytes on the heap */ 28664064216a8433360745f69edddce19a606659163The Android Open Source Project unsigned max_buf_bytes_allocated; /* Maximum number of allocated bytes on the heap for TX/RX buffers */ 28764064216a8433360745f69edddce19a606659163The Android Open Source Project 28864064216a8433360745f69edddce19a606659163The Android Open Source Project unsigned cpu_usage_estimator_start_time; /* Time measured when CPU estimation was started */ 28964064216a8433360745f69edddce19a606659163The Android Open Source Project unsigned cpu_usage_estimator_stop_time; /* Time measured when CPU estimation was stopped */ 29064064216a8433360745f69edddce19a606659163The Android Open Source Project unsigned cpu_usage_estimator_resolution; /* Resolution of the CPU estimation in us */ 29164064216a8433360745f69edddce19a606659163The Android Open Source Project unsigned total_us_of_cpu_time; /* Total number of CPU time used by the driver since CPU estimator started */ 29264064216a8433360745f69edddce19a606659163The Android Open Source Project unsigned total_us_of_bus_access_cpu_time; /* Total number of CPU time used by the bus driver since CPU estimator started */ 29364064216a8433360745f69edddce19a606659163The Android Open Source Project unsigned driver_entry_start_time; /* Time measured at the start of last driver entry point */ 29464064216a8433360745f69edddce19a606659163The Android Open Source Project unsigned bus_driver_entry_start_time; /* Time measured at the start of last bus driver entry point */ 29564064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 29664064216a8433360745f69edddce19a606659163The Android Open Source Project 29764064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef GWSI_DRIVER 29864064216a8433360745f69edddce19a606659163The Android Open Source Project void *gwsi; /* GWSI manager handler */ 29964064216a8433360745f69edddce19a606659163The Android Open Source Project void *gwsi_ev; /* GWSI event handler */ 30064064216a8433360745f69edddce19a606659163The Android Open Source Project char gwsi_tester_buf [4096]; /* GWSI tester buffer */ 30164064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 30264064216a8433360745f69edddce19a606659163The Android Open Source Project}; 30364064216a8433360745f69edddce19a606659163The Android Open Source Project 30464064216a8433360745f69edddce19a606659163The Android Open Source Project 30564064216a8433360745f69edddce19a606659163The Android Open Source Project#define VENDOR_ID_TI 0x104c 30664064216a8433360745f69edddce19a606659163The Android Open Source Project#define DEVICE_ID_TI_WLAN 0x9066 30764064216a8433360745f69edddce19a606659163The Android Open Source Project 30864064216a8433360745f69edddce19a606659163The Android Open Source Project/* tiwlan_send_wait_reply 30964064216a8433360745f69edddce19a606659163The Android Open Source Project This internal interface function creates request and sends 31064064216a8433360745f69edddce19a606659163The Android Open Source Project it to the control tasklet for processing. 31164064216a8433360745f69edddce19a606659163The Android Open Source Project The calling process is blocked until the request is replied. 31264064216a8433360745f69edddce19a606659163The Android Open Source Project Function f is being called in the context of the control tasklet. 31364064216a8433360745f69edddce19a606659163The Android Open Source Project The request block that is passed to the function as a parameter 31464064216a8433360745f69edddce19a606659163The Android Open Source Project contains p1, p2, p3, p4. 31564064216a8433360745f69edddce19a606659163The Android Open Source Project The function return code is propagated back to the caller. 31664064216a8433360745f69edddce19a606659163The Android Open Source Project tiwlan_send_req_and_wait returns (*f) return code or 31764064216a8433360745f69edddce19a606659163The Android Open Source Project -ENOMEM if failed to allocate a request. 31864064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 31964064216a8433360745f69edddce19a606659163The Android Open Source Projectint tiwlan_send_wait_reply(tiwlan_net_dev_t *drv, 32064064216a8433360745f69edddce19a606659163The Android Open Source Project int (*f)(tiwlan_req_t *req), 32164064216a8433360745f69edddce19a606659163The Android Open Source Project unsigned long p1, 32264064216a8433360745f69edddce19a606659163The Android Open Source Project unsigned long p2, 32364064216a8433360745f69edddce19a606659163The Android Open Source Project unsigned long p3, 32464064216a8433360745f69edddce19a606659163The Android Open Source Project unsigned long p4); 32564064216a8433360745f69edddce19a606659163The Android Open Source Project 32664064216a8433360745f69edddce19a606659163The Android Open Source Project#endif /* #if defined (__KERNEL__)*/ 32764064216a8433360745f69edddce19a606659163The Android Open Source Project 32864064216a8433360745f69edddce19a606659163The Android Open Source Projectint tiwlan_init_drv(tiwlan_net_dev_t *drv, tiwlan_dev_init_t *init_info); 32964064216a8433360745f69edddce19a606659163The Android Open Source Projectint tiwlan_start_drv(tiwlan_net_dev_t *drv); 33064064216a8433360745f69edddce19a606659163The Android Open Source Projectint tiwlan_stop_drv(tiwlan_net_dev_t *drv); 33164064216a8433360745f69edddce19a606659163The Android Open Source Projectint tiwlan_stop_and_destroy_drv(tiwlan_net_dev_t *drv); 332058dc1f05238b5a9a619805fa6e293c4d3f26647Dmitry Shmidtint tiwlan_stop_and_destroy_drv_request(tiwlan_req_t *req); 33364064216a8433360745f69edddce19a606659163The Android Open Source Projectint tiwlan_ioctl_init(struct net_device *dev); 33464064216a8433360745f69edddce19a606659163The Android Open Source Project 33564064216a8433360745f69edddce19a606659163The Android Open Source Project#endif /* ESTA_DRV_INCLUDE_FILE*/ 336