Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 01c78533 authored by Mohammed Shafi Shajakhan's avatar Mohammed Shafi Shajakhan Committed by John W. Linville
Browse files

ath9k: Add definitions and structures to support WoW



*add structures, macros and variables for WoW, so that the driver
can make use of it.
*maintain a list for user enabled patterns and masks
*track pattern slots for the hardware limitation on the
maximum number of patterns that can be stored.
*track interrupts enabled before WoW suspend, so
that can be reconfigured after resume
*have macros to parse user defined wow configurations to
hardware code

Cc: Senthil Balasubramanian <senthilb@qca.qualcomm.com>
Cc: Rajkumar Manoharan <rmanohar@qca.qualcomm.com>
Cc: vadivel@qca.qualcomm.com
Signed-off-by: default avatarLuis R. Rodriguez <mcgrof@qca.qualcomm.com>
Signed-off-by: default avatarMohammed Shafi Shajakhan <mohammed@qca.qualcomm.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 90090298
Loading
Loading
Loading
Loading
+12 −0
Original line number Original line Diff line number Diff line
@@ -510,6 +510,12 @@ static inline void ath9k_btcoex_stop_gen_timer(struct ath_softc *sc)
}
}
#endif /* CONFIG_ATH9K_BTCOEX_SUPPORT */
#endif /* CONFIG_ATH9K_BTCOEX_SUPPORT */


struct ath9k_wow_pattern {
	u8 pattern_bytes[MAX_PATTERN_SIZE];
	u8 mask_bytes[MAX_PATTERN_SIZE];
	u32 pattern_len;
};

/********************/
/********************/
/*   LED Control    */
/*   LED Control    */
/********************/
/********************/
@@ -711,6 +717,12 @@ struct ath_softc {
	struct ath_ant_comb ant_comb;
	struct ath_ant_comb ant_comb;
	u8 ant_tx, ant_rx;
	u8 ant_tx, ant_rx;
	struct dfs_pattern_detector *dfs_detector;
	struct dfs_pattern_detector *dfs_detector;

#ifdef CONFIG_PM_SLEEP
	atomic_t wow_got_bmiss_intr;
	atomic_t wow_sleep_proc_intr; /* in the middle of WoW sleep ? */
	u32 wow_intr_before_sleep;
#endif
};
};


void ath9k_tasklet(unsigned long data);
void ath9k_tasklet(unsigned long data);
+34 −0
Original line number Original line Diff line number Diff line
@@ -180,6 +180,37 @@
#define PAPRD_TABLE_SZ			24
#define PAPRD_TABLE_SZ			24
#define PAPRD_IDEAL_AGC2_PWR_RANGE	0xe0
#define PAPRD_IDEAL_AGC2_PWR_RANGE	0xe0


/*
 * Wake on Wireless
 */

/* Keep Alive Frame */
#define KAL_FRAME_LEN		28
#define KAL_FRAME_TYPE		0x2	/* data frame */
#define KAL_FRAME_SUB_TYPE	0x4	/* null data frame */
#define KAL_DURATION_ID		0x3d
#define KAL_NUM_DATA_WORDS	6
#define KAL_NUM_DESC_WORDS	12
#define KAL_ANTENNA_MODE	1
#define KAL_TO_DS		1
#define KAL_DELAY		4	/*delay of 4ms between 2 KAL frames */
#define KAL_TIMEOUT		900

#define MAX_PATTERN_SIZE		256
#define MAX_PATTERN_MASK_SIZE		32
#define MAX_NUM_PATTERN			8
#define MAX_NUM_USER_PATTERN		6 /*  deducting the disassociate and
					      deauthenticate packets */

/*
 * WoW trigger mapping to hardware code
 */

#define AH_WOW_USER_PATTERN_EN		BIT(0)
#define AH_WOW_MAGIC_PATTERN_EN		BIT(1)
#define AH_WOW_LINK_CHANGE		BIT(2)
#define AH_WOW_BEACON_MISS		BIT(3)

enum ath_hw_txq_subtype {
enum ath_hw_txq_subtype {
	ATH_TXQ_AC_BE = 0,
	ATH_TXQ_AC_BE = 0,
	ATH_TXQ_AC_BK = 1,
	ATH_TXQ_AC_BK = 1,
@@ -863,6 +894,9 @@ struct ath_hw {
	/* Enterprise mode cap */
	/* Enterprise mode cap */
	u32 ent_mode;
	u32 ent_mode;


#ifdef CONFIG_PM_SLEEP
	u32 wow_event_mask;
#endif
	bool is_clk_25mhz;
	bool is_clk_25mhz;
	int (*get_mac_revision)(void);
	int (*get_mac_revision)(void);
	int (*external_reset)(void);
	int (*external_reset)(void);