|  | /* | 
|  | * 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> | 
|  | #include <linux/if_ether.h> | 
|  | #include <net/mac80211.h> | 
|  |  | 
|  | /* | 
|  | * The key cache is used for h/w cipher state and also for | 
|  | * tracking station state such as the current tx antenna. | 
|  | * We also setup a mapping table between key cache slot indices | 
|  | * and station state to short-circuit node lookups on rx. | 
|  | * Different parts have different size key caches.  We handle | 
|  | * up to ATH_KEYMAX entries (could dynamically allocate state). | 
|  | */ | 
|  | #define	ATH_KEYMAX	        128     /* max key cache size we handle */ | 
|  |  | 
|  | static const u8 ath_bcast_mac[ETH_ALEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; | 
|  |  | 
|  | 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; | 
|  | }; | 
|  |  | 
|  | enum ath_device_state { | 
|  | ATH_HW_UNAVAILABLE, | 
|  | ATH_HW_INITIALIZED, | 
|  | }; | 
|  |  | 
|  | enum ath_bus_type { | 
|  | ATH_PCI, | 
|  | ATH_AHB, | 
|  | ATH_USB, | 
|  | }; | 
|  |  | 
|  | 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; | 
|  | }; | 
|  |  | 
|  | /** | 
|  | * struct ath_ops - Register read/write operations | 
|  | * | 
|  | * @read: Register read | 
|  | * @write: Register write | 
|  | * @enable_write_buffer: Enable multiple register writes | 
|  | * @disable_write_buffer: Disable multiple register writes | 
|  | * @write_flush: Flush buffered register writes | 
|  | */ | 
|  | struct ath_ops { | 
|  | unsigned int (*read)(void *, u32 reg_offset); | 
|  | void (*write)(void *, u32 val, u32 reg_offset); | 
|  | void (*enable_write_buffer)(void *); | 
|  | void (*disable_write_buffer)(void *); | 
|  | void (*write_flush) (void *); | 
|  | }; | 
|  |  | 
|  | struct ath_common; | 
|  |  | 
|  | struct ath_bus_ops { | 
|  | enum ath_bus_type ath_bus_type; | 
|  | void (*read_cachesize)(struct ath_common *common, int *csz); | 
|  | bool (*eeprom_read)(struct ath_common *common, u32 off, u16 *data); | 
|  | void (*bt_coex_prep)(struct ath_common *common); | 
|  | }; | 
|  |  | 
|  | struct ath_common { | 
|  | void *ah; | 
|  | void *priv; | 
|  | struct ieee80211_hw *hw; | 
|  | int debug_mask; | 
|  | enum ath_device_state state; | 
|  |  | 
|  | struct ath_ani ani; | 
|  |  | 
|  | u16 cachelsz; | 
|  | u16 curaid; | 
|  | u8 macaddr[ETH_ALEN]; | 
|  | u8 curbssid[ETH_ALEN]; | 
|  | u8 bssidmask[ETH_ALEN]; | 
|  |  | 
|  | u8 tx_chainmask; | 
|  | u8 rx_chainmask; | 
|  |  | 
|  | u32 rx_bufsize; | 
|  |  | 
|  | u32 keymax; | 
|  | DECLARE_BITMAP(keymap, ATH_KEYMAX); | 
|  | u8 splitmic; | 
|  |  | 
|  | struct ath_regulatory regulatory; | 
|  | const struct ath_ops *ops; | 
|  | const struct ath_bus_ops *bus_ops; | 
|  | }; | 
|  |  | 
|  | struct sk_buff *ath_rxbuf_alloc(struct ath_common *common, | 
|  | u32 len, | 
|  | gfp_t gfp_mask); | 
|  |  | 
|  | void ath_hw_setbssidmask(struct ath_common *common); | 
|  |  | 
|  | #endif /* ATH_H */ |