2005-04-16 15:20:36 -07:00
/* orinoco.h
*
* Common definitions to all pieces of the various orinoco
* drivers
*/
# ifndef _ORINOCO_H
# define _ORINOCO_H
2006-04-07 04:11:02 -04:00
# define DRIVER_VERSION "0.15"
2005-04-16 15:20:36 -07:00
# include <linux/netdevice.h>
# include <linux/wireless.h>
2005-09-09 18:43:02 -04:00
# include <net/iw_handler.h>
2005-04-16 15:20:36 -07:00
# include "hermes.h"
/* To enable debug messages */
//#define ORINOCO_DEBUG 3
# define WIRELESS_SPY // enable iwspy support
2005-06-19 01:27:51 +02:00
# define MAX_SCAN_LEN 4096
2005-04-16 15:20:36 -07:00
# define ORINOCO_MAX_KEY_SIZE 14
# define ORINOCO_MAX_KEYS 4
struct orinoco_key {
2005-09-23 04:18:06 -04:00
__le16 len ; /* always stored as little-endian */
2005-04-16 15:20:36 -07:00
char data [ ORINOCO_MAX_KEY_SIZE ] ;
} __attribute__ ( ( packed ) ) ;
typedef enum {
FIRMWARE_TYPE_AGERE ,
FIRMWARE_TYPE_INTERSIL ,
FIRMWARE_TYPE_SYMBOL
} fwtype_t ;
struct orinoco_private {
void * card ; /* Pointer to card dependent structure */
int ( * hard_reset ) ( struct orinoco_private * ) ;
/* Synchronisation stuff */
spinlock_t lock ;
int hw_unavailable ;
struct work_struct reset_work ;
/* driver state */
int open ;
u16 last_linkstatus ;
2005-06-19 01:27:51 +02:00
struct work_struct join_work ;
2005-06-19 01:27:56 +02:00
struct work_struct wevent_work ;
2005-04-16 15:20:36 -07:00
/* Net device stuff */
struct net_device * ndev ;
struct net_device_stats stats ;
struct iw_statistics wstats ;
/* Hardware control variables */
hermes_t hw ;
u16 txfid ;
/* Capabilities of the hardware/firmware */
fwtype_t firmware_type ;
char fw_name [ 32 ] ;
int ibss_port ;
int nicbuf_size ;
u16 channel_mask ;
/* Boolean capabilities */
unsigned int has_ibss : 1 ;
unsigned int has_port3 : 1 ;
unsigned int has_wep : 1 ;
unsigned int has_big_wep : 1 ;
unsigned int has_mwo : 1 ;
unsigned int has_pm : 1 ;
unsigned int has_preamble : 1 ;
unsigned int has_sensitivity : 1 ;
2005-06-19 01:27:56 +02:00
unsigned int has_hostscan : 1 ;
2005-04-16 15:20:36 -07:00
unsigned int broken_disableport : 1 ;
2005-06-19 01:28:06 +02:00
unsigned int broken_monitor : 1 ;
2005-04-16 15:20:36 -07:00
/* Configuration paramaters */
u32 iw_mode ;
int prefer_port3 ;
u16 wep_on , wep_restrict , tx_key ;
struct orinoco_key keys [ ORINOCO_MAX_KEYS ] ;
int bitratemode ;
char nick [ IW_ESSID_MAX_SIZE + 1 ] ;
char desired_essid [ IW_ESSID_MAX_SIZE + 1 ] ;
2005-06-19 01:27:51 +02:00
char desired_bssid [ ETH_ALEN ] ;
int bssid_fixed ;
2005-04-16 15:20:36 -07:00
u16 frag_thresh , mwo_robust ;
u16 channel ;
u16 ap_density , rts_thresh ;
u16 pm_on , pm_mcast , pm_period , pm_timeout ;
u16 preamble ;
# ifdef WIRELESS_SPY
2005-09-09 18:43:02 -04:00
struct iw_spy_data spy_data ; /* iwspy support */
struct iw_public_data wireless_data ;
2005-04-16 15:20:36 -07:00
# endif
/* Configuration dependent variables */
int port_type , createibss ;
int promiscuous , mc_count ;
2005-06-19 01:27:56 +02:00
/* Scanning support */
int scan_inprogress ; /* Scan pending... */
u32 scan_mode ; /* Type of scan done */
char * scan_result ; /* Result of previous scan */
int scan_len ; /* Lenght of result */
2005-04-16 15:20:36 -07:00
} ;
# ifdef ORINOCO_DEBUG
extern int orinoco_debug ;
# define DEBUG(n, args...) do { if (orinoco_debug>(n)) printk(KERN_DEBUG args); } while(0)
# else
# define DEBUG(n, args...) do { } while (0)
# endif /* ORINOCO_DEBUG */
/********************************************************************/
/* Exported prototypes */
/********************************************************************/
extern struct net_device * alloc_orinocodev ( int sizeof_card ,
int ( * hard_reset ) ( struct orinoco_private * ) ) ;
extern void free_orinocodev ( struct net_device * dev ) ;
extern int __orinoco_up ( struct net_device * dev ) ;
extern int __orinoco_down ( struct net_device * dev ) ;
extern int orinoco_reinit_firmware ( struct net_device * dev ) ;
extern irqreturn_t orinoco_interrupt ( int irq , void * dev_id , struct pt_regs * regs ) ;
/********************************************************************/
/* Locking and synchronization functions */
/********************************************************************/
2006-08-15 20:45:00 -04:00
static inline int orinoco_lock ( struct orinoco_private * priv ,
2005-04-16 15:20:36 -07:00
unsigned long * flags )
{
spin_lock_irqsave ( & priv - > lock , * flags ) ;
if ( priv - > hw_unavailable ) {
DEBUG ( 1 , " orinoco_lock() called with hw_unavailable (dev=%p) \n " ,
priv - > ndev ) ;
spin_unlock_irqrestore ( & priv - > lock , * flags ) ;
return - EBUSY ;
}
return 0 ;
}
2006-08-15 20:45:00 -04:00
static inline void orinoco_unlock ( struct orinoco_private * priv ,
2005-04-16 15:20:36 -07:00
unsigned long * flags )
{
spin_unlock_irqrestore ( & priv - > lock , * flags ) ;
}
# endif /* _ORINOCO_H */