cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

orinoco.h (6616B)


      1/* orinoco.h
      2 *
      3 * Common definitions to all pieces of the various orinoco
      4 * drivers
      5 */
      6
      7#ifndef _ORINOCO_H
      8#define _ORINOCO_H
      9
     10#define DRIVER_VERSION "0.15"
     11
     12#include <linux/interrupt.h>
     13#include <linux/suspend.h>
     14#include <linux/netdevice.h>
     15#include <linux/wireless.h>
     16#include <net/iw_handler.h>
     17#include <net/cfg80211.h>
     18
     19#include "hermes.h"
     20
     21/* To enable debug messages */
     22/*#define ORINOCO_DEBUG		3*/
     23
     24#define WIRELESS_SPY		/* enable iwspy support */
     25
     26#define MAX_SCAN_LEN		4096
     27
     28#define ORINOCO_SEQ_LEN		8
     29#define ORINOCO_MAX_KEY_SIZE	14
     30#define ORINOCO_MAX_KEYS	4
     31
     32struct orinoco_key {
     33	__le16 len;	/* always stored as little-endian */
     34	char data[ORINOCO_MAX_KEY_SIZE];
     35} __packed;
     36
     37#define TKIP_KEYLEN	16
     38#define MIC_KEYLEN	8
     39
     40struct orinoco_tkip_key {
     41	u8 tkip[TKIP_KEYLEN];
     42	u8 tx_mic[MIC_KEYLEN];
     43	u8 rx_mic[MIC_KEYLEN];
     44};
     45
     46enum orinoco_alg {
     47	ORINOCO_ALG_NONE,
     48	ORINOCO_ALG_WEP,
     49	ORINOCO_ALG_TKIP
     50};
     51
     52enum fwtype {
     53	FIRMWARE_TYPE_AGERE,
     54	FIRMWARE_TYPE_INTERSIL,
     55	FIRMWARE_TYPE_SYMBOL
     56};
     57
     58struct firmware;
     59
     60struct orinoco_private {
     61	void *card;	/* Pointer to card dependent structure */
     62	struct device *dev;
     63	int (*hard_reset)(struct orinoco_private *);
     64	int (*stop_fw)(struct orinoco_private *, int);
     65
     66	struct ieee80211_supported_band band;
     67	struct ieee80211_channel channels[14];
     68	u32 cipher_suites[3];
     69
     70	/* Synchronisation stuff */
     71	spinlock_t lock;
     72	int hw_unavailable;
     73	struct work_struct reset_work;
     74
     75	/* Interrupt tasklets */
     76	struct tasklet_struct rx_tasklet;
     77	struct list_head rx_list;
     78
     79	/* driver state */
     80	int open;
     81	u16 last_linkstatus;
     82	struct work_struct join_work;
     83	struct work_struct wevent_work;
     84
     85	/* Net device stuff */
     86	struct net_device *ndev;
     87	struct iw_statistics wstats;
     88
     89	/* Hardware control variables */
     90	struct hermes hw;
     91	u16 txfid;
     92
     93	/* Capabilities of the hardware/firmware */
     94	enum fwtype firmware_type;
     95	int ibss_port;
     96	int nicbuf_size;
     97	u16 channel_mask;
     98
     99	/* Boolean capabilities */
    100	unsigned int has_ibss:1;
    101	unsigned int has_port3:1;
    102	unsigned int has_wep:1;
    103	unsigned int has_big_wep:1;
    104	unsigned int has_mwo:1;
    105	unsigned int has_pm:1;
    106	unsigned int has_preamble:1;
    107	unsigned int has_sensitivity:1;
    108	unsigned int has_hostscan:1;
    109	unsigned int has_alt_txcntl:1;
    110	unsigned int has_ext_scan:1;
    111	unsigned int has_wpa:1;
    112	unsigned int do_fw_download:1;
    113	unsigned int broken_disableport:1;
    114	unsigned int broken_monitor:1;
    115	unsigned int prefer_port3:1;
    116
    117	/* Configuration paramaters */
    118	enum nl80211_iftype iw_mode;
    119	enum orinoco_alg encode_alg;
    120	u16 wep_restrict, tx_key;
    121	struct key_params keys[ORINOCO_MAX_KEYS];
    122
    123	int bitratemode;
    124	char nick[IW_ESSID_MAX_SIZE + 1];
    125	char desired_essid[IW_ESSID_MAX_SIZE + 1];
    126	char desired_bssid[ETH_ALEN];
    127	int bssid_fixed;
    128	u16 frag_thresh, mwo_robust;
    129	u16 channel;
    130	u16 ap_density, rts_thresh;
    131	u16 pm_on, pm_mcast, pm_period, pm_timeout;
    132	u16 preamble;
    133	u16 short_retry_limit, long_retry_limit;
    134	u16 retry_lifetime;
    135#ifdef WIRELESS_SPY
    136	struct iw_spy_data spy_data; /* iwspy support */
    137	struct iw_public_data	wireless_data;
    138#endif
    139
    140	/* Configuration dependent variables */
    141	int port_type, createibss;
    142	int promiscuous, mc_count;
    143
    144	/* Scanning support */
    145	struct cfg80211_scan_request *scan_request;
    146	struct work_struct process_scan;
    147	struct list_head scan_list;
    148	spinlock_t scan_lock; /* protects the scan list */
    149
    150	/* WPA support */
    151	u8 *wpa_ie;
    152	int wpa_ie_len;
    153
    154	struct crypto_shash *rx_tfm_mic;
    155	struct crypto_shash *tx_tfm_mic;
    156
    157	unsigned int wpa_enabled:1;
    158	unsigned int tkip_cm_active:1;
    159	unsigned int key_mgmt:3;
    160
    161#if defined(CONFIG_HERMES_CACHE_FW_ON_INIT) || defined(CONFIG_PM_SLEEP)
    162	/* Cached in memory firmware to use during ->resume. */
    163	const struct firmware *cached_pri_fw;
    164	const struct firmware *cached_fw;
    165#endif
    166
    167	struct notifier_block pm_notifier;
    168};
    169
    170#ifdef ORINOCO_DEBUG
    171extern int orinoco_debug;
    172#define DEBUG(n, args...) do { \
    173	if (orinoco_debug > (n)) \
    174		printk(KERN_DEBUG args); \
    175} while (0)
    176#else
    177#define DEBUG(n, args...) do { } while (0)
    178#endif	/* ORINOCO_DEBUG */
    179
    180/********************************************************************/
    181/* Exported prototypes                                              */
    182/********************************************************************/
    183
    184struct orinoco_private *alloc_orinocodev(int sizeof_card, struct device *device,
    185					 int (*hard_reset)(struct orinoco_private *),
    186					 int (*stop_fw)(struct orinoco_private *, int));
    187void free_orinocodev(struct orinoco_private *priv);
    188int orinoco_init(struct orinoco_private *priv);
    189int orinoco_if_add(struct orinoco_private *priv, unsigned long base_addr,
    190		   unsigned int irq, const struct net_device_ops *ops);
    191void orinoco_if_del(struct orinoco_private *priv);
    192int orinoco_up(struct orinoco_private *priv);
    193void orinoco_down(struct orinoco_private *priv);
    194irqreturn_t orinoco_interrupt(int irq, void *dev_id);
    195
    196void __orinoco_ev_info(struct net_device *dev, struct hermes *hw);
    197void __orinoco_ev_rx(struct net_device *dev, struct hermes *hw);
    198
    199int orinoco_process_xmit_skb(struct sk_buff *skb,
    200			     struct net_device *dev,
    201			     struct orinoco_private *priv,
    202			     int *tx_control,
    203			     u8 *mic);
    204
    205/* Common ndo functions exported for reuse by orinoco_usb */
    206int orinoco_open(struct net_device *dev);
    207int orinoco_stop(struct net_device *dev);
    208void orinoco_set_multicast_list(struct net_device *dev);
    209int orinoco_change_mtu(struct net_device *dev, int new_mtu);
    210void orinoco_tx_timeout(struct net_device *dev, unsigned int txqueue);
    211
    212/********************************************************************/
    213/* Locking and synchronization functions                            */
    214/********************************************************************/
    215
    216static inline int orinoco_lock(struct orinoco_private *priv,
    217			       unsigned long *flags)
    218{
    219	priv->hw.ops->lock_irqsave(&priv->lock, flags);
    220	if (priv->hw_unavailable) {
    221		DEBUG(1, "orinoco_lock() called with hw_unavailable (dev=%p)\n",
    222		       priv->ndev);
    223		priv->hw.ops->unlock_irqrestore(&priv->lock, flags);
    224		return -EBUSY;
    225	}
    226	return 0;
    227}
    228
    229static inline void orinoco_unlock(struct orinoco_private *priv,
    230				  unsigned long *flags)
    231{
    232	priv->hw.ops->unlock_irqrestore(&priv->lock, flags);
    233}
    234
    235static inline void orinoco_lock_irq(struct orinoco_private *priv)
    236{
    237	priv->hw.ops->lock_irq(&priv->lock);
    238}
    239
    240static inline void orinoco_unlock_irq(struct orinoco_private *priv)
    241{
    242	priv->hw.ops->unlock_irq(&priv->lock);
    243}
    244
    245/*** Navigate from net_device to orinoco_private ***/
    246static inline struct orinoco_private *ndev_priv(struct net_device *dev)
    247{
    248	struct wireless_dev *wdev = netdev_priv(dev);
    249	return wdev_priv(wdev);
    250}
    251#endif /* _ORINOCO_H */