Skip to content

Commit

Permalink
ar9170: rework rxstream code
Browse files Browse the repository at this point in the history
With this patch ar9170 is capable of receiving aggregated 802.11n frames
and sniffing on most networks without having a "debug message overhead".

(Includes phy initialization requested by
Johannes Berg <johannes@sipsolutions.net> -- JWL)

Signed-off-by: Christian Lamparter <chunkeey@web.de>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
  • Loading branch information
Christian Lamparter authored and John W. Linville committed Apr 22, 2009
1 parent e7ec86f commit cca8479
Show file tree
Hide file tree
Showing 3 changed files with 421 additions and 138 deletions.
12 changes: 12 additions & 0 deletions drivers/net/wireless/ath/ar9170/ar9170.h
Original file line number Diff line number Diff line change
Expand Up @@ -104,10 +104,16 @@ enum ar9170_device_state {
AR9170_ASSOCIATED,
};

struct ar9170_rxstream_mpdu_merge {
struct ar9170_rx_head plcp;
bool has_plcp;
};

struct ar9170 {
struct ieee80211_hw *hw;
struct mutex mutex;
enum ar9170_device_state state;
unsigned long bad_hw_nagger;

int (*open)(struct ar9170 *);
void (*stop)(struct ar9170 *);
Expand Down Expand Up @@ -135,6 +141,7 @@ struct ar9170 {
u64 cur_mc_hash, want_mc_hash;
u32 cur_filter, want_filter;
unsigned int filter_changed;
unsigned int filter_state;
bool sniffer_enabled;

/* PHY */
Expand Down Expand Up @@ -174,6 +181,11 @@ struct ar9170 {
struct sk_buff_head global_tx_status;
struct sk_buff_head global_tx_status_waste;
struct delayed_work tx_status_janitor;

/* rxstream mpdu merge */
struct ar9170_rxstream_mpdu_merge rx_mpdu;
struct sk_buff *rx_failover;
int rx_failover_missing;
};

struct ar9170_sta_info {
Expand Down
15 changes: 9 additions & 6 deletions drivers/net/wireless/ath/ar9170/hw.h
Original file line number Diff line number Diff line change
Expand Up @@ -312,7 +312,7 @@ struct ar9170_rx_head {
u8 plcp[12];
} __packed;

struct ar9170_rx_tail {
struct ar9170_rx_phystatus {
union {
struct {
u8 rssi_ant0, rssi_ant1, rssi_ant2,
Expand All @@ -324,6 +324,9 @@ struct ar9170_rx_tail {

u8 evm_stream0[6], evm_stream1[6];
u8 phy_err;
} __packed;

struct ar9170_rx_macstatus {
u8 SAidx, DAidx;
u8 error;
u8 status;
Expand All @@ -339,7 +342,7 @@ struct ar9170_rx_tail {

#define AR9170_RX_ENC_SOFTWARE 0x8

static inline u8 ar9170_get_decrypt_type(struct ar9170_rx_tail *t)
static inline u8 ar9170_get_decrypt_type(struct ar9170_rx_macstatus *t)
{
return (t->SAidx & 0xc0) >> 4 |
(t->DAidx & 0xc0) >> 6;
Expand All @@ -357,10 +360,9 @@ static inline u8 ar9170_get_decrypt_type(struct ar9170_rx_tail *t)

#define AR9170_RX_STATUS_MPDU_MASK 0x30
#define AR9170_RX_STATUS_MPDU_SINGLE 0x00
#define AR9170_RX_STATUS_MPDU_FIRST 0x10
#define AR9170_RX_STATUS_MPDU_MIDDLE 0x20
#define AR9170_RX_STATUS_MPDU_LAST 0x30

#define AR9170_RX_STATUS_MPDU_FIRST 0x20
#define AR9170_RX_STATUS_MPDU_MIDDLE 0x30
#define AR9170_RX_STATUS_MPDU_LAST 0x10

#define AR9170_RX_ERROR_RXTO 0x01
#define AR9170_RX_ERROR_OVERRUN 0x02
Expand All @@ -369,6 +371,7 @@ static inline u8 ar9170_get_decrypt_type(struct ar9170_rx_tail *t)
#define AR9170_RX_ERROR_WRONG_RA 0x10
#define AR9170_RX_ERROR_PLCP 0x20
#define AR9170_RX_ERROR_MMIC 0x40
#define AR9170_RX_ERROR_FATAL 0x80

struct ar9170_cmd_tx_status {
__le16 unkn;
Expand Down
Loading

0 comments on commit cca8479

Please sign in to comment.