1/* 2 * Copyright (c) 2007-2008 Atheros Communications Inc. 3 * 4 * Permission to use, copy, modify, and/or distribute this software for any 5 * purpose with or without fee is hereby granted, provided that the above 6 * copyright notice and this permission notice appear in all copies. 7 * 8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 11 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 13 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 14 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 15 */ 16/* */ 17/* Module Name : usbdrv.h */ 18/* */ 19/* Abstract */ 20/* This module contains network interface up/down related definition*/ 21/* */ 22/* NOTES */ 23/* Platform dependent. */ 24/* */ 25/************************************************************************/ 26 27#ifndef _USBDRV_H 28#define _USBDRV_H 29 30#define WLAN_USB 0 31#define WLAN_PCI 1 32 33#include <linux/module.h> 34#include <linux/pci.h> 35#include <linux/netdevice.h> 36#include <linux/etherdevice.h> 37#include <linux/skbuff.h> 38#include <linux/uaccess.h> 39#include <linux/wireless.h> 40#include <linux/if_arp.h> 41#include <linux/slab.h> 42#include <linux/io.h> 43 44#include "zdcompat.h" 45 46#include "oal_dt.h" 47#include "oal_marc.h" 48#include "80211core/pub_zfi.h" 49/* #include "pub_zfw.h" */ 50#include "80211core/pub_usb.h" 51 52#include <linux/usb.h> 53/* Please include header files for device type in the beginning of this file */ 54#define urb_t struct urb 55 56#define usb_complete_t usb_complete_t 57#define pipe_t u32_t 58 59/* USB Endpoint definition */ 60#define USB_WLAN_TX_PIPE 1 61#define USB_WLAN_RX_PIPE 2 62#define USB_REG_IN_PIPE 3 63#define USB_REG_OUT_PIPE 4 64 65#ifdef ZM_HOSTAPD_SUPPORT 66#include "athr_common.h" 67#endif 68 69/************************************************************************** 70** Descriptor Data Structure 71***************************************************************************/ 72struct driver_stats { 73 struct net_device_stats net_stats; 74}; 75 76#define ZM_MAX_RX_BUFFER_SIZE 8192 77 78#if ZM_USB_TX_STREAM_MODE == 1 79#define ZM_MAX_TX_AGGREGATE_NUM 4 80#define ZM_USB_TX_BUF_SIZE 8096 81#define ZM_MAX_TX_URB_NUM 4 82#else 83#define ZM_USB_TX_BUF_SIZE 2048 84#define ZM_MAX_TX_URB_NUM 8 85#endif 86#define ZM_USB_REG_MAX_BUF_SIZE 64 87#define ZM_MAX_RX_URB_NUM 16 88#define ZM_MAX_TX_BUF_NUM 128 89 90typedef struct UsbTxQ { 91 zbuf_t *buf; 92 u8_t hdr[80]; 93 u16_t hdrlen; 94 u8_t snap[8]; 95 u16_t snapLen; 96 u8_t tail[16]; 97 u16_t tailLen; 98 u16_t offset; 99} UsbTxQ_t; 100 101 102struct zdap_ioctl { 103 u16_t cmd; /* Command to run */ 104 u32_t addr; /* Length of the data buffer */ 105 u32_t value; /* Pointer to the data buffer */ 106 u8_t data[0x100]; 107}; 108 109#define ZM_OAL_MAX_STA_SUPPORT 16 110 111struct usbdrv_private { 112 /* linux used */ 113 struct net_device *device; 114#if (WLAN_HOSTIF == WLAN_PCI) 115 struct pci_dev *pdev; 116#endif 117#if (WLAN_HOSTIF == WLAN_USB) 118 struct usb_device *udev; 119 struct usb_interface *interface; 120#endif 121 struct driver_stats drv_stats; 122 char ifname[IFNAMSIZ]; 123 int using_dac; 124 u8_t rev_id; /* adapter PCI revision ID */ 125 rwlock_t isolate_lock; 126 spinlock_t cs_lock; 127 int driver_isolated; 128#if (WLAN_HOSTIF == WLAN_PCI) 129 void *regp; 130#endif 131 132 /* timer for heart beat */ 133 struct timer_list hbTimer10ms; 134 135 /* For driver core */ 136 void *wd; 137 138#if (WLAN_HOSTIF == WLAN_USB) 139 u8_t txUsbBuf[ZM_MAX_TX_URB_NUM][ZM_USB_TX_BUF_SIZE]; 140 u8_t regUsbReadBuf[ZM_USB_REG_MAX_BUF_SIZE]; 141 u8_t regUsbWriteBuf[ZM_USB_REG_MAX_BUF_SIZE]; 142 urb_t *WlanTxDataUrb[ZM_MAX_TX_URB_NUM]; 143 urb_t *WlanRxDataUrb[ZM_MAX_RX_URB_NUM]; 144 urb_t *RegOutUrb; 145 urb_t *RegInUrb; 146 UsbTxQ_t UsbTxBufQ[ZM_MAX_TX_BUF_NUM]; 147 zbuf_t *UsbRxBufQ[ZM_MAX_RX_URB_NUM]; 148 u16_t TxBufHead; 149 u16_t TxBufTail; 150 u16_t TxBufCnt; 151 u16_t TxUrbHead; 152 u16_t TxUrbTail; 153 u16_t TxUrbCnt; 154 u16_t RxBufHead; 155 u16_t RxBufTail; 156 u16_t RxBufCnt; 157#endif 158 159#if ZM_USB_STREAM_MODE == 1 160 zbuf_t *reamin_buf; 161#endif 162 163#ifdef ZM_HOSTAPD_SUPPORT 164 struct athr_wlan_param athr_wpa_req; 165#endif 166 struct sock *netlink_sk; 167 u8_t DeviceOpened; /* CWYang(+) */ 168 u8_t supIe[50]; 169 u8_t supLen; 170 struct ieee80211req_wpaie stawpaie[ZM_OAL_MAX_STA_SUPPORT]; 171 u8_t forwardMgmt; 172 173 struct zfCbUsbFuncTbl usbCbFunctions; 174 175 /* For keventd */ 176 u32_t flags; 177 unsigned long kevent_flags; 178 u16_t kevent_ready; 179 180 struct semaphore ioctl_sem; 181 struct work_struct kevent; 182 wait_queue_head_t wait_queue_event; 183#ifdef ZM_HALPLUS_LOCK 184 unsigned long hal_irqFlag; 185#endif 186 u16_t adapterState; 187}; 188 189/* WDS */ 190#define ZM_WDS_PORT_NUMBER 6 191 192struct zsWdsStruct { 193 struct net_device *dev; 194 u16_t openFlag; 195}; 196 197/* VAP */ 198#define ZM_VAP_PORT_NUMBER 7 199 200struct zsVapStruct { 201 struct net_device *dev; 202 u16_t openFlag; 203}; 204 205/***************************************/ 206 207#define ZM_IOCTL_REG_READ 0x01 208#define ZM_IOCTL_REG_WRITE 0x02 209#define ZM_IOCTL_MEM_DUMP 0x03 210#define ZM_IOCTL_REG_DUMP 0x05 211#define ZM_IOCTL_TXD_DUMP 0x06 212#define ZM_IOCTL_RXD_DUMP 0x07 213#define ZM_IOCTL_MEM_READ 0x0B 214#define ZM_IOCTL_MEM_WRITE 0x0C 215#define ZM_IOCTL_DMA_TEST 0x10 216#define ZM_IOCTL_REG_TEST 0x11 217#define ZM_IOCTL_TEST 0x80 218#define ZM_IOCTL_TALLY 0x81 /* CWYang(+) */ 219#define ZM_IOCTL_RTS 0xA0 220#define ZM_IOCTL_MIX_MODE 0xA1 221#define ZM_IOCTL_FRAG 0xA2 222#define ZM_IOCTL_SCAN 0xA3 223#define ZM_IOCTL_KEY 0xA4 224#define ZM_IOCTL_RATE 0xA5 225#define ZM_IOCTL_ENCRYPTION_MODE 0xA6 226#define ZM_IOCTL_GET_TXCNT 0xA7 227#define ZM_IOCTL_GET_DEAGG_CNT 0xA8 228#define ZM_IOCTL_DURATION_MODE 0xA9 229#define ZM_IOCTL_SET_AES_KEY 0xAA 230#define ZM_IOCTL_SET_AES_MODE 0xAB 231#define ZM_IOCTL_SIGNAL_STRENGTH 0xAC /* CWYang(+) */ 232#define ZM_IOCTL_SIGNAL_QUALITY 0xAD /* CWYang(+) */ 233#define ZM_IOCTL_SET_PIBSS_MODE 0xAE 234 235#define ZDAPIOCTL SIOCDEVPRIVATE 236 237enum devState { 238 Opened, 239 Enabled, 240 Disabled, 241 Closed 242}; 243 244#endif /* _USBDRV_H */ 245