2009-08-12 09:56:59 -07:00
/*
* Copyright ( c ) 2008 - 2009 Atheros Communications Inc .
*
* Permission to use , copy , modify , and / or distribute this software for any
* purpose with or without fee is hereby granted , provided that the above
* copyright notice and this permission notice appear in all copies .
*
* THE SOFTWARE IS PROVIDED " AS IS " AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS . IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL , DIRECT , INDIRECT , OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE , DATA OR PROFITS , WHETHER IN AN
* ACTION OF CONTRACT , NEGLIGENCE OR OTHER TORTIOUS ACTION , ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE .
*/
# ifndef ATH_H
# define ATH_H
# include <linux/skbuff.h>
2009-09-09 22:43:17 -07:00
# include <linux/if_ether.h>
2009-09-13 00:03:27 -07:00
# include <net/mac80211.h>
2009-08-12 09:56:59 -07:00
2009-09-09 22:19:26 -07:00
static const u8 ath_bcast_mac [ ETH_ALEN ] = { 0xff , 0xff , 0xff , 0xff , 0xff , 0xff } ;
2009-11-03 17:07:04 -08:00
struct ath_ani {
bool caldone ;
int16_t noise_floor ;
unsigned int longcal_timer ;
unsigned int shortcal_timer ;
unsigned int resetcal_timer ;
unsigned int checkani_timer ;
struct timer_list timer ;
} ;
2009-10-06 21:19:07 -04:00
enum ath_device_state {
ATH_HW_UNAVAILABLE ,
ATH_HW_INITIALIZED ,
} ;
2009-08-17 18:07:23 -07:00
struct reg_dmn_pair_mapping {
u16 regDmnEnum ;
u16 reg_5ghz_ctl ;
u16 reg_2ghz_ctl ;
} ;
struct ath_regulatory {
char alpha2 [ 2 ] ;
u16 country_code ;
u16 max_power_level ;
u32 tp_scale ;
u16 current_rd ;
u16 current_rd_ext ;
int16_t power_limit ;
struct reg_dmn_pair_mapping * regpair ;
} ;
2009-09-10 16:11:21 -07:00
struct ath_ops {
unsigned int ( * read ) ( void * , u32 reg_offset ) ;
void ( * write ) ( void * , u32 val , u32 reg_offset ) ;
} ;
2009-09-14 00:55:09 -07:00
struct ath_common ;
struct ath_bus_ops {
void ( * read_cachesize ) ( struct ath_common * common , int * csz ) ;
void ( * cleanup ) ( struct ath_common * common ) ;
bool ( * eeprom_read ) ( struct ath_common * common , u32 off , u16 * data ) ;
void ( * bt_coex_prep ) ( struct ath_common * common ) ;
} ;
2009-08-12 09:56:59 -07:00
struct ath_common {
2009-09-10 17:52:45 -07:00
void * ah ;
2009-09-28 02:54:40 -04:00
void * priv ;
2009-09-13 00:03:27 -07:00
struct ieee80211_hw * hw ;
2009-09-13 02:42:02 -07:00
int debug_mask ;
2009-10-06 21:19:07 -04:00
enum ath_device_state state ;
2009-09-13 02:42:02 -07:00
2009-11-03 17:07:04 -08:00
struct ath_ani ani ;
2009-08-12 09:56:59 -07:00
u16 cachelsz ;
2009-09-10 09:22:37 -07:00
u16 curaid ;
u8 macaddr [ ETH_ALEN ] ;
u8 curbssid [ ETH_ALEN ] ;
u8 bssidmask [ ETH_ALEN ] ;
2009-09-13 02:42:02 -07:00
2009-09-13 21:07:07 -07:00
u8 tx_chainmask ;
u8 rx_chainmask ;
2009-08-17 18:07:23 -07:00
struct ath_regulatory regulatory ;
2009-09-10 18:04:47 -07:00
const struct ath_ops * ops ;
2009-09-14 00:55:09 -07:00
const struct ath_bus_ops * bus_ops ;
2009-08-12 09:56:59 -07:00
} ;
struct sk_buff * ath_rxbuf_alloc ( struct ath_common * common ,
u32 len ,
gfp_t gfp_mask ) ;
2009-09-10 17:52:45 -07:00
void ath_hw_setbssidmask ( struct ath_common * common ) ;
2009-08-12 09:56:59 -07:00
# endif /* ATH_H */