/drivers/net/wireless/tiwlan1251/pform/linux/inc/esta_drv.h
C Header | 335 lines | 229 code | 49 blank | 57 comment | 6 complexity | 93521fd9a32721ffb434606915594510 MD5 | raw file
Possible License(s): AGPL-1.0, GPL-2.0, LGPL-2.0
- /****************************************************************************
- **+-----------------------------------------------------------------------+**
- **| |**
- **| Copyright(c) 1998 - 2008 Texas Instruments. All rights reserved. |**
- **| All rights reserved. |**
- **| |**
- **| Redistribution and use in source and binary forms, with or without |**
- **| modification, are permitted provided that the following conditions |**
- **| are met: |**
- **| |**
- **| * Redistributions of source code must retain the above copyright |**
- **| notice, this list of conditions and the following disclaimer. |**
- **| * Redistributions in binary form must reproduce the above copyright |**
- **| notice, this list of conditions and the following disclaimer in |**
- **| the documentation and/or other materials provided with the |**
- **| distribution. |**
- **| * Neither the name Texas Instruments nor the names of its |**
- **| contributors may be used to endorse or promote products derived |**
- **| from this software without specific prior written permission. |**
- **| |**
- **| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |**
- **| "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |**
- **| LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |**
- **| A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |**
- **| OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |**
- **| SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |**
- **| LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |**
- **| DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |**
- **| THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |**
- **| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |**
- **| OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |**
- **| |**
- **+-----------------------------------------------------------------------+**
- ****************************************************************************/
- #ifndef ESTA_DRV_INCLUDE_FILE
- #define ESTA_DRV_INCLUDE_FILE
- #include <linux/version.h>
- #include <linux/completion.h>
- #include <linux/netdevice.h>
- #include <linux/interrupt.h>
- #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27)
- #include <asm/arch/gpio.h>
- #ifdef CONFIG_ANDROID_POWER
- #include <linux/android_power.h>
- #endif
- #else
- #include <asm/gpio.h>
- #ifdef CONFIG_HAS_WAKELOCK
- #include <linux/wakelock.h>
- #endif
- #endif
- #ifdef CONFIG_TROUT_PWRSINK
- #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27)
- #include <asm/arch/trout_pwrsink.h>
- #else
- #include <mach/trout_pwrsink.h>
- #endif
- #endif
- #ifdef CONFIG_HTC_PWRSINK
- #include <mach/htc_pwrsink.h>
- #endif
- #include "osTIType.h"
- #include "osAdapter.h"
- #include "paramOut.h"
- #ifndef GWSI_DRIVER /* for GWSI Stand Alone */
- #include "configMgr.h"
- #endif
- #include "linux_ioctl_common.h"
- #define TIWLAN_DRV_NAME "tiwlan"
- #define TIWLAN_DRV_IF_NAME TIWLAN_DRV_NAME"%d"
- #define TIWLAN_DRV_NAME_WIRELESS_PROTO "IEEE 802.11-DS"
- #define TIWLAN_DBG_PROC "wifidbg"
- #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,29)
- #define NETDEV_SET_PRIVATE(dev, drv) dev->priv = drv
- #define NETDEV_GET_PRIVATE(dev) dev->priv
- #else
- #define NETDEV_SET_PRIVATE(dev, drv) dev->ml_priv = drv
- #define NETDEV_GET_PRIVATE(dev) dev->ml_priv
- #endif
- void *wifi_kernel_prealloc(int section, unsigned long size);
- #ifdef TIWLAN_MSM7000
- #ifdef CONFIG_WIFI_CONTROL_FUNC
- #include <linux/platform_device.h>
- #include <linux/wifi_tiwlan.h>
- int msm_wifi_power(int on);
- int msm_wifi_reset(int on);
- #else
- extern int trout_wifi_power(int on);
- extern int trout_wifi_reset(int on);
- extern int trout_wifi_set_carddetect(int val);
- #define msm_wifi_power(a) trout_wifi_power(a)
- #define msm_wifi_reset(a) trout_wifi_reset(a)
- #endif
- #endif
- #ifdef CONFIG_HAS_WAKELOCK
- #define CONFIG_ANDROID_POWER
- typedef struct wake_lock android_suspend_lock_t;
- #define android_unlock_suspend(a) wake_unlock(a)
- #define android_lock_suspend(a) wake_lock(a)
- #define android_lock_suspend_auto_expire(a,t) wake_lock_timeout(a,t)
- #define android_init_suspend_wakelock(a,n) wake_lock_init(a,WAKE_LOCK_SUSPEND,n)
- #define android_uninit_suspend_lock(a) wake_lock_destroy(a)
- #endif
- #ifndef TIWLAN_OMAP1610_REGBASE
- #if defined(TIWLAN_OMAP1610_INNOVATOR)
- #define TIWLAN_OMAP1610_REGBASE 0xEC100000 /* VA*/
- #elif defined(TIWLAN_OMAP1610_WIPP) || defined(TIWLAN_OMAP1610_CRTWIPP)
- #ifndef OMAP_WLAN_BASE
- #define OMAP_WLAN_BASE 0
- #endif
- #define TIWLAN_OMAP1610_REGBASE (OMAP_WLAN_BASE+0x100000)
- #else
- /* Dm: #error TIWLAN_OMAP1610_REGBASE not defined for this platform */
- #endif
- #endif /* #ifndef TIWLAN_OMAP1610_REGBASE */
- #ifdef TIWLAN_OMAP1610_REGBASE
- #define TIWLAN_OMAP1610_REGSIZE 0x10000
- #define TIWLAN_OMAP1610_MEMBASE (TIWLAN_OMAP1610_REGBASE | 0x20000)
- #define TIWLAN_OMAP1610_MEMSIZE 0x10000
- #endif /* #ifdef TIWLAN_OMAP1610_REGBASE */
- #ifndef TIWLAN_OMAP1610_IRQ
- #if defined(TIWLAN_OMAP1610_INNOVATOR)
- #define TIWLAN_OMAP1610_IRQ (OMAP_GPIO_IRQ(8))
- #elif defined(TIWLAN_OMAP1610_CRTWIPP)
- #define TIWLAN_OMAP1610_IRQ (OMAP_GPIO_IRQ(2))
- #elif defined(TIWLAN_OMAP1610_WIPP)
- #define TIWLAN_OMAP1610_IRQ (OMAP_GPIO_IRQ(2))
- #endif
- #endif /* TIWLAN_OMAP1610_IRQ */
- #define TIWLAN_IRQ_POLL_INTERVAL HZ/100 /* Used when no Intr are handled from the FW */
- #ifdef TI_DBG
- #define ti_dprintf(log, fmt, args...) do { \
- if (log != TIWLAN_LOG_OTHER) { \
- printk(KERN_INFO fmt, ## args); \
- } \
- } while (0)
- #else
- #define ti_dprintf(log, fmt, args...)
- #endif
- #define ti_nodprintf(log, fmt, args...)
- typedef enum {
- TIWLAN_LOG_ERROR,
- TIWLAN_LOG_INFO,
- TIWLAN_LOG_OTHER,
- TIWLAN_LOG_DUMMY
- } tiwlan_log_t;
- typedef struct tiwlan_region {
- unsigned long pa;
- void *va;
- unsigned long size;
- } tiwlan_region_t;
- /* Driver structure */
- typedef struct tiwlan_net_dev tiwlan_net_dev_t;
- #if defined (__KERNEL__)
- /* Request/response to/from control tasklet */
- typedef struct tiwlan_req {
- struct list_head list;
- tiwlan_net_dev_t *drv;
- struct
- {
- struct {
- int (*f)(struct tiwlan_req *req);
- unsigned long p1;
- unsigned long p2;
- unsigned long p3;
- unsigned long p4;
- int reply_expected; /* 1=reply expected */
- struct completion comp;
- } req;
- int reply;
- } u;
- } tiwlan_req_t;
- /* Timer structure */
- typedef struct timer_obj {
- tiwlan_req_t req;
- /* Timer handler function ->p1 */
- /* Timer handler function parameter ->p2 */
- /* Periodic ->p3 */
- /* jiffies ->p4 */
- struct timer_list timer;
- int use_count;
- } timer_obj_t;
- #ifdef DRIVER_PROFILING
- /* Profiler banchmark function type */
- typedef void (*tiwlan_pfofile_t) (void*, unsigned);
- /* Maximum number of profile banchmarks */
- #define MAX_PROFILE_BM 10
- #endif
- #if defined(CONFIG_TROUT_PWRSINK) || defined(CONFIG_HTC_PWRSINK)
- #define PWRSINK_WIFI_PERCENT_BASE 4
- #endif
- /* #define DM_USE_WORKQUEUE */
- /* Driver structure */
- struct tiwlan_net_dev {
- struct list_head list;
- tiwlan_region_t acx_mem;
- tiwlan_region_t acx_reg;
- tiwlan_region_t eeprom_image;
- tiwlan_region_t firmware_image;
- int irq;
- #ifdef DM_USE_WORKQUEUE
- struct workqueue_struct *tiwlan_wq; /* Work Queue */
- struct work_struct tirq; /* Work Task for interrupt */
- struct work_struct tw; /* Work Task for other stuff */
- mem_MSDU_T *txmit_msdu_next;
- mem_MSDU_T *txmit_msdu_last;
- struct work_struct txmit; /* Work Task for transmit */
- #else
- struct tasklet_struct tl; /* Control tasklet */
- #endif
- #if defined(CONFIG_TROUT_PWRSINK) || defined(CONFIG_HTC_PWRSINK)
- struct delayed_work trxw; /* Work Task for rx watchdog */
- #endif
- #ifdef CONFIG_ANDROID_POWER
- android_suspend_lock_t irq_wake_lock; /* Suspend Lock to keep system awake */
- android_suspend_lock_t xmit_wake_lock;
- android_suspend_lock_t timer_wake_lock;
- android_suspend_lock_t rx_wake_lock;
- android_suspend_lock_t exec_wake_lock;
- int receive_packet; /* 1=packet was pushed to network stack */
- #endif
- int interrupt_pending; /* 1=tasklet has to handle interrupts when awakes */
- int dma_done;
- struct list_head request_q; /* Requests queue: -> tasklet */
- spinlock_t lock;
- unsigned long flags;
- struct timer_list poll_timer; /* Polling timer. Used only when working without interrupts */
- int started; /* 1=config manager started. 0=config manager stopped */
- int initialized; /* 1=succeeded to pass init stage, 0=otherwise */
- int unload_driver; /* Driver unload indicator */
- struct net_device_stats stats;
- int alloc_msdu_failures; /* Extra statistics */
- initTable_t init_table;
- TIWLN_ADAPTER_T adapter;
- struct sock *wl_sock;
- struct completion comp;
- struct net_device *netdev;
- void *priv; /* Pointer to struct net_device */
- #ifdef DRIVER_PROFILING
- tiwlan_pfofile_t fpro [MAX_PROFILE_BM]; /* Profiler functions */
- unsigned max_number_of_timers; /* Maximum number of allocated timers */
- unsigned cur_number_of_timers; /* Current number of allocated timers */
- unsigned max_heap_bytes_allocated; /* Maximum number of allocated bytes on the heap */
- unsigned cur_heap_bytes_allocated; /* Current number of allocated bytes on the heap */
- unsigned max_buf_bytes_allocated; /* Maximum number of allocated bytes on the heap for TX/RX buffers */
- unsigned cpu_usage_estimator_start_time; /* Time measured when CPU estimation was started */
- unsigned cpu_usage_estimator_stop_time; /* Time measured when CPU estimation was stopped */
- unsigned cpu_usage_estimator_resolution; /* Resolution of the CPU estimation in us */
- unsigned total_us_of_cpu_time; /* Total number of CPU time used by the driver since CPU estimator started */
- unsigned total_us_of_bus_access_cpu_time; /* Total number of CPU time used by the bus driver since CPU estimator started */
- unsigned driver_entry_start_time; /* Time measured at the start of last driver entry point */
- unsigned bus_driver_entry_start_time; /* Time measured at the start of last bus driver entry point */
- #endif
- #ifdef GWSI_DRIVER
- void *gwsi; /* GWSI manager handler */
- void *gwsi_ev; /* GWSI event handler */
- char gwsi_tester_buf [4096]; /* GWSI tester buffer */
- #endif
- };
- #define VENDOR_ID_TI 0x104c
- #define DEVICE_ID_TI_WLAN 0x9066
- /* tiwlan_send_wait_reply
- This internal interface function creates request and sends
- it to the control tasklet for processing.
- The calling process is blocked until the request is replied.
- Function f is being called in the context of the control tasklet.
- The request block that is passed to the function as a parameter
- contains p1, p2, p3, p4.
- The function return code is propagated back to the caller.
- tiwlan_send_req_and_wait returns (*f) return code or
- -ENOMEM if failed to allocate a request.
- */
- int tiwlan_send_wait_reply(tiwlan_net_dev_t *drv,
- int (*f)(tiwlan_req_t *req),
- unsigned long p1,
- unsigned long p2,
- unsigned long p3,
- unsigned long p4);
- #endif /* #if defined (__KERNEL__)*/
- int tiwlan_init_drv(tiwlan_net_dev_t *drv, tiwlan_dev_init_t *init_info);
- int tiwlan_start_drv(tiwlan_net_dev_t *drv);
- int tiwlan_stop_drv(tiwlan_net_dev_t *drv);
- int tiwlan_stop_and_destroy_drv(tiwlan_net_dev_t *drv);
- int tiwlan_stop_and_destroy_drv_request(tiwlan_req_t *req);
- int tiwlan_ioctl_init(struct net_device *dev);
- #endif /* ESTA_DRV_INCLUDE_FILE*/