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