| /* p80211netdev.h |
| * |
| * WLAN net device structure and functions |
| * |
| * Copyright (C) 1999 AbsoluteValue Systems, Inc. All Rights Reserved. |
| * -------------------------------------------------------------------- |
| * |
| * linux-wlan |
| * |
| * The contents of this file are subject to the Mozilla Public |
| * License Version 1.1 (the "License"); you may not use this file |
| * except in compliance with the License. You may obtain a copy of |
| * the License at http://www.mozilla.org/MPL/ |
| * |
| * Software distributed under the License is distributed on an "AS |
| * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or |
| * implied. See the License for the specific language governing |
| * rights and limitations under the License. |
| * |
| * Alternatively, the contents of this file may be used under the |
| * terms of the GNU Public License version 2 (the "GPL"), in which |
| * case the provisions of the GPL are applicable instead of the |
| * above. If you wish to allow the use of your version of this file |
| * only under the terms of the GPL and not to allow others to use |
| * your version of this file under the MPL, indicate your decision |
| * by deleting the provisions above and replace them with the notice |
| * and other provisions required by the GPL. If you do not delete |
| * the provisions above, a recipient may use your version of this |
| * file under either the MPL or the GPL. |
| * |
| * -------------------------------------------------------------------- |
| * |
| * Inquiries regarding the linux-wlan Open Source project can be |
| * made directly to: |
| * |
| * AbsoluteValue Systems Inc. |
| * info@linux-wlan.com |
| * http://www.linux-wlan.com |
| * |
| * -------------------------------------------------------------------- |
| * |
| * Portions of the development of this software were funded by |
| * Intersil Corporation as part of PRISM(R) chipset product development. |
| * |
| * -------------------------------------------------------------------- |
| * |
| * This file declares the structure type that represents each wlan |
| * interface. |
| * |
| * -------------------------------------------------------------------- |
| */ |
| |
| #ifndef _LINUX_P80211NETDEV_H |
| #define _LINUX_P80211NETDEV_H |
| |
| #include <linux/interrupt.h> |
| #include <linux/wireless.h> |
| #include <linux/netdevice.h> |
| |
| #undef netdevice_t |
| typedef struct net_device netdevice_t; |
| |
| #define WLAN_RELEASE "0.3.0-staging" |
| |
| #define WLAN_DEVICE_CLOSED 0 |
| #define WLAN_DEVICE_OPEN 1 |
| |
| #define WLAN_MACMODE_NONE 0 |
| #define WLAN_MACMODE_IBSS_STA 1 |
| #define WLAN_MACMODE_ESS_STA 2 |
| #define WLAN_MACMODE_ESS_AP 3 |
| |
| /* MSD States */ |
| #define WLAN_MSD_HWPRESENT_PENDING 1 |
| #define WLAN_MSD_HWFAIL 2 |
| #define WLAN_MSD_HWPRESENT 3 |
| #define WLAN_MSD_FWLOAD_PENDING 4 |
| #define WLAN_MSD_FWLOAD 5 |
| #define WLAN_MSD_RUNNING_PENDING 6 |
| #define WLAN_MSD_RUNNING 7 |
| |
| #ifndef ETH_P_ECONET |
| #define ETH_P_ECONET 0x0018 /* needed for 2.2.x kernels */ |
| #endif |
| |
| #define ETH_P_80211_RAW (ETH_P_ECONET + 1) |
| |
| #ifndef ARPHRD_IEEE80211 |
| #define ARPHRD_IEEE80211 801 /* kernel 2.4.6 */ |
| #endif |
| |
| #ifndef ARPHRD_IEEE80211_PRISM /* kernel 2.4.18 */ |
| #define ARPHRD_IEEE80211_PRISM 802 |
| #endif |
| |
| /*--- NSD Capabilities Flags ------------------------------*/ |
| #define P80211_NSDCAP_HARDWAREWEP 0x01 /* hardware wep engine */ |
| #define P80211_NSDCAP_SHORT_PREAMBLE 0x10 /* hardware supports */ |
| #define P80211_NSDCAP_HWFRAGMENT 0x80 /* nsd handles frag/defrag */ |
| #define P80211_NSDCAP_AUTOJOIN 0x100 /* nsd does autojoin */ |
| #define P80211_NSDCAP_NOSCAN 0x200 /* nsd can scan */ |
| |
| /* Received frame statistics */ |
| typedef struct p80211_frmrx_t { |
| u32 mgmt; |
| u32 assocreq; |
| u32 assocresp; |
| u32 reassocreq; |
| u32 reassocresp; |
| u32 probereq; |
| u32 proberesp; |
| u32 beacon; |
| u32 atim; |
| u32 disassoc; |
| u32 authen; |
| u32 deauthen; |
| u32 mgmt_unknown; |
| u32 ctl; |
| u32 pspoll; |
| u32 rts; |
| u32 cts; |
| u32 ack; |
| u32 cfend; |
| u32 cfendcfack; |
| u32 ctl_unknown; |
| u32 data; |
| u32 dataonly; |
| u32 data_cfack; |
| u32 data_cfpoll; |
| u32 data__cfack_cfpoll; |
| u32 null; |
| u32 cfack; |
| u32 cfpoll; |
| u32 cfack_cfpoll; |
| u32 data_unknown; |
| u32 decrypt; |
| u32 decrypt_err; |
| } p80211_frmrx_t; |
| |
| /* called by /proc/net/wireless */ |
| struct iw_statistics *p80211wext_get_wireless_stats(netdevice_t *dev); |
| /* wireless extensions' ioctls */ |
| extern struct iw_handler_def p80211wext_handler_def; |
| |
| /* WEP stuff */ |
| #define NUM_WEPKEYS 4 |
| #define MAX_KEYLEN 32 |
| |
| #define HOSTWEP_DEFAULTKEY_MASK (BIT(1)|BIT(0)) |
| #define HOSTWEP_SHAREDKEY BIT(3) |
| #define HOSTWEP_DECRYPT BIT(4) |
| #define HOSTWEP_ENCRYPT BIT(5) |
| #define HOSTWEP_PRIVACYINVOKED BIT(6) |
| #define HOSTWEP_EXCLUDEUNENCRYPTED BIT(7) |
| |
| extern int wlan_watchdog; |
| extern int wlan_wext_write; |
| |
| /* WLAN device type */ |
| typedef struct wlandevice { |
| void *priv; /* private data for MSD */ |
| |
| /* Subsystem State */ |
| char name[WLAN_DEVNAMELEN_MAX]; /* Dev name, from register_wlandev() */ |
| char *nsdname; |
| |
| u32 state; /* Device I/F state (open/closed) */ |
| u32 msdstate; /* state of underlying driver */ |
| u32 hwremoved; /* Has the hw been yanked out? */ |
| |
| /* Hardware config */ |
| unsigned int irq; |
| unsigned int iobase; |
| unsigned int membase; |
| u32 nsdcaps; /* NSD Capabilities flags */ |
| |
| /* Config vars */ |
| unsigned int ethconv; |
| |
| /* device methods (init by MSD, used by p80211 */ |
| int (*open)(struct wlandevice *wlandev); |
| int (*close)(struct wlandevice *wlandev); |
| void (*reset)(struct wlandevice *wlandev); |
| int (*txframe)(struct wlandevice *wlandev, struct sk_buff *skb, |
| union p80211_hdr *p80211_hdr, |
| struct p80211_metawep *p80211_wep); |
| int (*mlmerequest)(struct wlandevice *wlandev, struct p80211msg *msg); |
| int (*set_multicast_list)(struct wlandevice *wlandev, |
| netdevice_t *dev); |
| void (*tx_timeout)(struct wlandevice *wlandev); |
| |
| /* 802.11 State */ |
| u8 bssid[WLAN_BSSID_LEN]; |
| p80211pstr32_t ssid; |
| u32 macmode; |
| int linkstatus; |
| |
| /* WEP State */ |
| u8 wep_keys[NUM_WEPKEYS][MAX_KEYLEN]; |
| u8 wep_keylens[NUM_WEPKEYS]; |
| int hostwep; |
| |
| /* Request/Confirm i/f state (used by p80211) */ |
| unsigned long request_pending; /* flag, access atomically */ |
| |
| /* netlink socket */ |
| /* queue for indications waiting for cmd completion */ |
| /* Linux netdevice and support */ |
| netdevice_t *netdev; /* ptr to linux netdevice */ |
| |
| /* Rx bottom half */ |
| struct tasklet_struct rx_bh; |
| |
| struct sk_buff_head nsd_rxq; |
| |
| /* 802.11 device statistics */ |
| struct p80211_frmrx_t rx; |
| |
| struct iw_statistics wstats; |
| |
| /* jkriegl: iwspy fields */ |
| u8 spy_number; |
| char spy_address[IW_MAX_SPY][ETH_ALEN]; |
| struct iw_quality spy_stat[IW_MAX_SPY]; |
| } wlandevice_t; |
| |
| /* WEP stuff */ |
| int wep_change_key(wlandevice_t *wlandev, int keynum, u8 *key, int keylen); |
| int wep_decrypt(wlandevice_t *wlandev, u8 *buf, u32 len, int key_override, |
| u8 *iv, u8 *icv); |
| int wep_encrypt(wlandevice_t *wlandev, u8 *buf, u8 *dst, u32 len, int keynum, |
| u8 *iv, u8 *icv); |
| |
| int wlan_setup(wlandevice_t *wlandev, struct device *physdev); |
| void wlan_unsetup(wlandevice_t *wlandev); |
| int register_wlandev(wlandevice_t *wlandev); |
| int unregister_wlandev(wlandevice_t *wlandev); |
| void p80211netdev_rx(wlandevice_t *wlandev, struct sk_buff *skb); |
| void p80211netdev_hwremoved(wlandevice_t *wlandev); |
| #endif |