diff options
| author | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2013-05-01 08:47:44 -0700 | 
|---|---|---|
| committer | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2013-05-01 08:47:44 -0700 | 
| commit | bf61c8840efe60fd8f91446860b63338fb424158 (patch) | |
| tree | 7a71832407a4f0d6346db773343f4c3ae2257b19 /drivers/net/wireless/ath/ath6kl/core.h | |
| parent | 5846115b30f3a881e542c8bfde59a699c1c13740 (diff) | |
| parent | 0c6a61657da78098472fd0eb71cc01f2387fa1bb (diff) | |
| download | olio-linux-3.10-bf61c8840efe60fd8f91446860b63338fb424158.tar.xz olio-linux-3.10-bf61c8840efe60fd8f91446860b63338fb424158.zip  | |
Merge branch 'next' into for-linus
Prepare first set of updates for 3.10 merge window.
Diffstat (limited to 'drivers/net/wireless/ath/ath6kl/core.h')
| -rw-r--r-- | drivers/net/wireless/ath/ath6kl/core.h | 71 | 
1 files changed, 68 insertions, 3 deletions
diff --git a/drivers/net/wireless/ath/ath6kl/core.h b/drivers/net/wireless/ath/ath6kl/core.h index cec49a31029..61b2f98b4e7 100644 --- a/drivers/net/wireless/ath/ath6kl/core.h +++ b/drivers/net/wireless/ath/ath6kl/core.h @@ -115,6 +115,27 @@ enum ath6kl_fw_capability {  	 */  	ATH6KL_FW_CAPABILITY_SCHED_SCAN_MATCH_LIST, +	/* Firmware supports filtering BSS results by RSSI */ +	ATH6KL_FW_CAPABILITY_RSSI_SCAN_THOLD, + +	/* FW sets mac_addr[4] ^= 0x80 for newly created interfaces */ +	ATH6KL_FW_CAPABILITY_CUSTOM_MAC_ADDR, + +	/* Firmware supports TX error rate notification */ +	ATH6KL_FW_CAPABILITY_TX_ERR_NOTIFY, + +	/* supports WMI_SET_REGDOMAIN_CMDID command */ +	ATH6KL_FW_CAPABILITY_REGDOMAIN, + +	/* Firmware supports sched scan decoupled from host sleep */ +	ATH6KL_FW_CAPABILITY_SCHED_SCAN_V2, + +	/* +	 * Firmware capability for hang detection through heart beat +	 * challenge messages. +	 */ +	ATH6KL_FW_CAPABILITY_HEART_BEAT_POLL, +  	/* this needs to be last */  	ATH6KL_FW_CAPABILITY_MAX,  }; @@ -128,11 +149,15 @@ struct ath6kl_fw_ie {  };  enum ath6kl_hw_flags { -	ATH6KL_HW_FLAG_64BIT_RATES	= BIT(0), +	ATH6KL_HW_64BIT_RATES		= BIT(0), +	ATH6KL_HW_AP_INACTIVITY_MINS	= BIT(1), +	ATH6KL_HW_MAP_LP_ENDPOINT	= BIT(2), +	ATH6KL_HW_SDIO_CRC_ERROR_WAR	= BIT(3),  };  #define ATH6KL_FW_API2_FILE "fw-2.bin"  #define ATH6KL_FW_API3_FILE "fw-3.bin" +#define ATH6KL_FW_API4_FILE "fw-4.bin"  /* AR6003 1.0 definitions */  #define AR6003_HW_1_0_VERSION                 0x300002ba @@ -186,6 +211,13 @@ enum ath6kl_hw_flags {  #define AR6004_HW_1_2_DEFAULT_BOARD_DATA_FILE \  	AR6004_HW_1_2_FW_DIR "/bdata.bin" +/* AR6004 1.3 definitions */ +#define AR6004_HW_1_3_VERSION			0x31c8088a +#define AR6004_HW_1_3_FW_DIR			"ath6k/AR6004/hw1.3" +#define AR6004_HW_1_3_FIRMWARE_FILE		"fw.ram.bin" +#define AR6004_HW_1_3_BOARD_DATA_FILE		"ath6k/AR6004/hw1.3/bdata.bin" +#define AR6004_HW_1_3_DEFAULT_BOARD_DATA_FILE	"ath6k/AR6004/hw1.3/bdata.bin" +  /* Per STA data, used in AP mode */  #define STA_PS_AWAKE		BIT(0)  #define	STA_PS_SLEEP		BIT(1) @@ -536,6 +568,7 @@ enum ath6kl_vif_state {  	HOST_SLEEP_MODE_CMD_PROCESSED,  	NETDEV_MCAST_ALL_ON,  	NETDEV_MCAST_ALL_OFF, +	SCHED_SCANNING,  };  struct ath6kl_vif { @@ -580,11 +613,13 @@ struct ath6kl_vif {  	u16 assoc_bss_beacon_int;  	u16 listen_intvl_t;  	u16 bmiss_time_t; +	u32 txe_intvl;  	u16 bg_scan_period;  	u8 assoc_bss_dtim_period;  	struct net_device_stats net_stats;  	struct target_stats target_stats;  	struct wmi_connect_cmd profile; +	u16 rsn_capab;  	struct list_head mc_filter;  }; @@ -609,6 +644,7 @@ enum ath6kl_dev_state {  	SKIP_SCAN,  	ROAM_TBL_PEND,  	FIRST_BOOT, +	RECOVERY_CLEANUP,  };  enum ath6kl_state { @@ -619,7 +655,16 @@ enum ath6kl_state {  	ATH6KL_STATE_DEEPSLEEP,  	ATH6KL_STATE_CUTPOWER,  	ATH6KL_STATE_WOW, -	ATH6KL_STATE_SCHED_SCAN, +	ATH6KL_STATE_RECOVERY, +}; + +/* Fw error recovery */ +#define ATH6KL_HB_RESP_MISS_THRES	5 + +enum ath6kl_fw_err { +	ATH6KL_FW_ASSERT, +	ATH6KL_FW_HB_RESP_FAILURE, +	ATH6KL_FW_EP_FULL,  };  struct ath6kl { @@ -679,6 +724,7 @@ struct ath6kl {  	struct ath6kl_req_key ap_mode_bkey;  	struct sk_buff_head mcastpsq;  	u32 want_ch_switch; +	u16 last_ch;  	/*  	 * FIXME: protects access to mcastpsq but is actually useless as @@ -764,6 +810,17 @@ struct ath6kl {  	bool wiphy_registered; +	struct ath6kl_fw_recovery { +		struct work_struct recovery_work; +		unsigned long err_reason; +		unsigned long hb_poll; +		struct timer_list hb_timer; +		u32 seq_num; +		bool hb_pending; +		u8 hb_misscnt; +		bool enable; +	} fw_recovery; +  #ifdef CONFIG_ATH6KL_DEBUG  	struct {  		struct sk_buff_head fwlog_queue; @@ -883,7 +940,7 @@ void ath6kl_reset_device(struct ath6kl *ar, u32 target_type,  			 bool wait_fot_compltn, bool cold_reset);  void ath6kl_init_control_info(struct ath6kl_vif *vif);  struct ath6kl_vif *ath6kl_vif_first(struct ath6kl *ar); -void ath6kl_cleanup_vif(struct ath6kl_vif *vif, bool wmi_ready); +void ath6kl_cfg80211_vif_stop(struct ath6kl_vif *vif, bool wmi_ready);  int ath6kl_init_hw_start(struct ath6kl *ar);  int ath6kl_init_hw_stop(struct ath6kl *ar);  int ath6kl_init_fetch_firmwares(struct ath6kl *ar); @@ -899,4 +956,12 @@ int ath6kl_core_init(struct ath6kl *ar, enum ath6kl_htc_type htc_type);  void ath6kl_core_cleanup(struct ath6kl *ar);  void ath6kl_core_destroy(struct ath6kl *ar); +/* Fw error recovery */ +void ath6kl_init_hw_restart(struct ath6kl *ar); +void ath6kl_recovery_err_notify(struct ath6kl *ar, enum ath6kl_fw_err reason); +void ath6kl_recovery_hb_event(struct ath6kl *ar, u32 cookie); +void ath6kl_recovery_init(struct ath6kl *ar); +void ath6kl_recovery_cleanup(struct ath6kl *ar); +void ath6kl_recovery_suspend(struct ath6kl *ar); +void ath6kl_recovery_resume(struct ath6kl *ar);  #endif /* CORE_H */  |