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

Commit 2b14c30b authored by Jeff Garzik's avatar Jeff Garzik
Browse files

Merge branch 'upstream-fixes' of...

Merge branch 'upstream-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6 into upstream-fixes
parents fd60ae40 fde627b5
Loading
Loading
Loading
Loading
+2 −2
Original line number Original line Diff line number Diff line
@@ -797,7 +797,7 @@ static int zd1211_hw_init_hmac(struct zd_chip *chip)
		{ CR_ADDA_MBIAS_WARMTIME,	0x30000808 },
		{ CR_ADDA_MBIAS_WARMTIME,	0x30000808 },
		{ CR_ZD1211_RETRY_MAX,		0x2 },
		{ CR_ZD1211_RETRY_MAX,		0x2 },
		{ CR_SNIFFER_ON,		0 },
		{ CR_SNIFFER_ON,		0 },
		{ CR_RX_FILTER,			AP_RX_FILTER },
		{ CR_RX_FILTER,			STA_RX_FILTER },
		{ CR_GROUP_HASH_P1,		0x00 },
		{ CR_GROUP_HASH_P1,		0x00 },
		{ CR_GROUP_HASH_P2,		0x80000000 },
		{ CR_GROUP_HASH_P2,		0x80000000 },
		{ CR_REG1,			0xa4 },
		{ CR_REG1,			0xa4 },
@@ -844,7 +844,7 @@ static int zd1211b_hw_init_hmac(struct zd_chip *chip)
		{ CR_ZD1211B_AIFS_CTL2,		0x008C003C },
		{ CR_ZD1211B_AIFS_CTL2,		0x008C003C },
		{ CR_ZD1211B_TXOP,		0x01800824 },
		{ CR_ZD1211B_TXOP,		0x01800824 },
		{ CR_SNIFFER_ON,		0 },
		{ CR_SNIFFER_ON,		0 },
		{ CR_RX_FILTER,			AP_RX_FILTER },
		{ CR_RX_FILTER,			STA_RX_FILTER },
		{ CR_GROUP_HASH_P1,		0x00 },
		{ CR_GROUP_HASH_P1,		0x00 },
		{ CR_GROUP_HASH_P2,		0x80000000 },
		{ CR_GROUP_HASH_P2,		0x80000000 },
		{ CR_REG1,			0xa4 },
		{ CR_REG1,			0xa4 },
+6 −4
Original line number Original line Diff line number Diff line
@@ -461,10 +461,15 @@


#define CR_RX_FILTER			CTL_REG(0x068c)
#define CR_RX_FILTER			CTL_REG(0x068c)
#define RX_FILTER_ASSOC_RESPONSE	0x0002
#define RX_FILTER_ASSOC_RESPONSE	0x0002
#define RX_FILTER_REASSOC_RESPONSE	0x0008
#define RX_FILTER_PROBE_RESPONSE	0x0020
#define RX_FILTER_PROBE_RESPONSE	0x0020
#define RX_FILTER_BEACON		0x0100
#define RX_FILTER_BEACON		0x0100
#define RX_FILTER_DISASSOC		0x0400
#define RX_FILTER_AUTH			0x0800
#define RX_FILTER_AUTH			0x0800
/* Sniff modus sets filter to 0xfffff */
#define AP_RX_FILTER			0x0400feff
#define STA_RX_FILTER			0x0000ffff

/* Monitor mode sets filter to 0xfffff */


#define CR_ACK_TIMEOUT_EXT		CTL_REG(0x0690)
#define CR_ACK_TIMEOUT_EXT		CTL_REG(0x0690)
#define CR_BCN_FIFO_SEMAPHORE		CTL_REG(0x0694)
#define CR_BCN_FIFO_SEMAPHORE		CTL_REG(0x0694)
@@ -546,9 +551,6 @@
#define CR_ZD1211B_TXOP			CTL_REG(0x0b20)
#define CR_ZD1211B_TXOP			CTL_REG(0x0b20)
#define CR_ZD1211B_RETRY_MAX		CTL_REG(0x0b28)
#define CR_ZD1211B_RETRY_MAX		CTL_REG(0x0b28)


#define AP_RX_FILTER			0x0400feff
#define STA_RX_FILTER			0x0000ffff

#define CWIN_SIZE			0x007f043f
#define CWIN_SIZE			0x007f043f




+8 −8
Original line number Original line Diff line number Diff line
@@ -108,7 +108,9 @@ int zd_mac_init_hw(struct zd_mac *mac, u8 device_type)
	if (r)
	if (r)
		goto disable_int;
		goto disable_int;


	r = zd_set_encryption_type(chip, NO_WEP);
	/* We must inform the device that we are doing encryption/decryption in
	 * software at the moment. */
	r = zd_set_encryption_type(chip, ENC_SNIFFER);
	if (r)
	if (r)
		goto disable_int;
		goto disable_int;


@@ -136,10 +138,8 @@ static int reset_mode(struct zd_mac *mac)
{
{
	struct ieee80211_device *ieee = zd_mac_to_ieee80211(mac);
	struct ieee80211_device *ieee = zd_mac_to_ieee80211(mac);
	struct zd_ioreq32 ioreqs[3] = {
	struct zd_ioreq32 ioreqs[3] = {
		{ CR_RX_FILTER, RX_FILTER_BEACON|RX_FILTER_PROBE_RESPONSE|
		{ CR_RX_FILTER, STA_RX_FILTER },
			        RX_FILTER_AUTH|RX_FILTER_ASSOC_RESPONSE },
		{ CR_SNIFFER_ON, 0U },
		{ CR_SNIFFER_ON, 0U },
		{ CR_ENCRYPTION_TYPE, NO_WEP },
	};
	};


	if (ieee->iw_mode == IW_MODE_MONITOR) {
	if (ieee->iw_mode == IW_MODE_MONITOR) {
@@ -713,10 +713,10 @@ static int zd_mac_tx(struct zd_mac *mac, struct ieee80211_txb *txb, int pri)
struct zd_rt_hdr {
struct zd_rt_hdr {
	struct ieee80211_radiotap_header rt_hdr;
	struct ieee80211_radiotap_header rt_hdr;
	u8  rt_flags;
	u8  rt_flags;
	u8  rt_rate;
	u16 rt_channel;
	u16 rt_channel;
	u16 rt_chbitmask;
	u16 rt_chbitmask;
	u16 rt_rate;
} __attribute__((packed));
};


static void fill_rt_header(void *buffer, struct zd_mac *mac,
static void fill_rt_header(void *buffer, struct zd_mac *mac,
	                   const struct ieee80211_rx_stats *stats,
	                   const struct ieee80211_rx_stats *stats,
@@ -735,14 +735,14 @@ static void fill_rt_header(void *buffer, struct zd_mac *mac,
	if (status->decryption_type & (ZD_RX_WEP64|ZD_RX_WEP128|ZD_RX_WEP256))
	if (status->decryption_type & (ZD_RX_WEP64|ZD_RX_WEP128|ZD_RX_WEP256))
		hdr->rt_flags |= IEEE80211_RADIOTAP_F_WEP;
		hdr->rt_flags |= IEEE80211_RADIOTAP_F_WEP;


	hdr->rt_rate = stats->rate / 5;

	/* FIXME: 802.11a */
	/* FIXME: 802.11a */
	hdr->rt_channel = cpu_to_le16(ieee80211chan2mhz(
	hdr->rt_channel = cpu_to_le16(ieee80211chan2mhz(
		                             _zd_chip_get_channel(&mac->chip)));
		                             _zd_chip_get_channel(&mac->chip)));
	hdr->rt_chbitmask = cpu_to_le16(IEEE80211_CHAN_2GHZ |
	hdr->rt_chbitmask = cpu_to_le16(IEEE80211_CHAN_2GHZ |
		((status->frame_status & ZD_RX_FRAME_MODULATION_MASK) ==
		((status->frame_status & ZD_RX_FRAME_MODULATION_MASK) ==
		ZD_RX_OFDM ? IEEE80211_CHAN_OFDM : IEEE80211_CHAN_CCK));
		ZD_RX_OFDM ? IEEE80211_CHAN_OFDM : IEEE80211_CHAN_CCK));

	hdr->rt_rate = stats->rate / 5;
}
}


/* Returns 1 if the data packet is for us and 0 otherwise. */
/* Returns 1 if the data packet is for us and 0 otherwise. */
+3 −4
Original line number Original line Diff line number Diff line
@@ -323,7 +323,6 @@ static void disable_read_regs_int(struct zd_usb *usb)
{
{
	struct zd_usb_interrupt *intr = &usb->intr;
	struct zd_usb_interrupt *intr = &usb->intr;


	ZD_ASSERT(in_interrupt());
	spin_lock(&intr->lock);
	spin_lock(&intr->lock);
	intr->read_regs_enabled = 0;
	intr->read_regs_enabled = 0;
	spin_unlock(&intr->lock);
	spin_unlock(&intr->lock);
@@ -545,11 +544,11 @@ static void handle_rx_packet(struct zd_usb *usb, const u8 *buffer,
	 * be padded. Unaligned access might also happen if the length_info
	 * be padded. Unaligned access might also happen if the length_info
	 * structure is not present.
	 * structure is not present.
	 */
	 */
	if (get_unaligned(&length_info->tag) == RX_LENGTH_INFO_TAG) {
	if (get_unaligned(&length_info->tag) == cpu_to_le16(RX_LENGTH_INFO_TAG))
	{
		unsigned int l, k, n;
		unsigned int l, k, n;
		for (i = 0, l = 0;; i++) {
		for (i = 0, l = 0;; i++) {
			k = le16_to_cpu(get_unaligned(
			k = le16_to_cpu(get_unaligned(&length_info->length[i]));
				&length_info->length[i]));
			n = l+k;
			n = l+k;
			if (n > length)
			if (n > length)
				return;
				return;