Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6
This commit is contained in:
commit
a98917acc7
@ -1141,7 +1141,8 @@ static int ar9170_set_freq_cal_data(struct ar9170 *ar,
|
|||||||
u8 vpds[2][AR5416_PD_GAIN_ICEPTS];
|
u8 vpds[2][AR5416_PD_GAIN_ICEPTS];
|
||||||
u8 pwrs[2][AR5416_PD_GAIN_ICEPTS];
|
u8 pwrs[2][AR5416_PD_GAIN_ICEPTS];
|
||||||
int chain, idx, i;
|
int chain, idx, i;
|
||||||
u8 f;
|
u32 phy_data = 0;
|
||||||
|
u8 f, tmp;
|
||||||
|
|
||||||
switch (channel->band) {
|
switch (channel->band) {
|
||||||
case IEEE80211_BAND_2GHZ:
|
case IEEE80211_BAND_2GHZ:
|
||||||
@ -1208,9 +1209,6 @@ static int ar9170_set_freq_cal_data(struct ar9170 *ar,
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < 76; i++) {
|
for (i = 0; i < 76; i++) {
|
||||||
u32 phy_data;
|
|
||||||
u8 tmp;
|
|
||||||
|
|
||||||
if (i < 25) {
|
if (i < 25) {
|
||||||
tmp = ar9170_interpolate_val(i, &pwrs[0][0],
|
tmp = ar9170_interpolate_val(i, &pwrs[0][0],
|
||||||
&vpds[0][0]);
|
&vpds[0][0]);
|
||||||
|
@ -340,10 +340,15 @@ static u16 tx_write_2byte_queue(struct b43_pio_txqueue *q,
|
|||||||
q->mmio_base + B43_PIO_TXDATA,
|
q->mmio_base + B43_PIO_TXDATA,
|
||||||
sizeof(u16));
|
sizeof(u16));
|
||||||
if (data_len & 1) {
|
if (data_len & 1) {
|
||||||
|
u8 tail[2] = { 0, };
|
||||||
|
|
||||||
/* Write the last byte. */
|
/* Write the last byte. */
|
||||||
ctl &= ~B43_PIO_TXCTL_WRITEHI;
|
ctl &= ~B43_PIO_TXCTL_WRITEHI;
|
||||||
b43_piotx_write16(q, B43_PIO_TXCTL, ctl);
|
b43_piotx_write16(q, B43_PIO_TXCTL, ctl);
|
||||||
b43_piotx_write16(q, B43_PIO_TXDATA, data[data_len - 1]);
|
tail[0] = data[data_len - 1];
|
||||||
|
ssb_block_write(dev->dev, tail, 2,
|
||||||
|
q->mmio_base + B43_PIO_TXDATA,
|
||||||
|
sizeof(u16));
|
||||||
}
|
}
|
||||||
|
|
||||||
return ctl;
|
return ctl;
|
||||||
@ -386,26 +391,31 @@ static u32 tx_write_4byte_queue(struct b43_pio_txqueue *q,
|
|||||||
q->mmio_base + B43_PIO8_TXDATA,
|
q->mmio_base + B43_PIO8_TXDATA,
|
||||||
sizeof(u32));
|
sizeof(u32));
|
||||||
if (data_len & 3) {
|
if (data_len & 3) {
|
||||||
u32 value = 0;
|
u8 tail[4] = { 0, };
|
||||||
|
|
||||||
/* Write the last few bytes. */
|
/* Write the last few bytes. */
|
||||||
ctl &= ~(B43_PIO8_TXCTL_8_15 | B43_PIO8_TXCTL_16_23 |
|
ctl &= ~(B43_PIO8_TXCTL_8_15 | B43_PIO8_TXCTL_16_23 |
|
||||||
B43_PIO8_TXCTL_24_31);
|
B43_PIO8_TXCTL_24_31);
|
||||||
data = &(data[data_len - 1]);
|
|
||||||
switch (data_len & 3) {
|
switch (data_len & 3) {
|
||||||
case 3:
|
case 3:
|
||||||
ctl |= B43_PIO8_TXCTL_16_23;
|
ctl |= B43_PIO8_TXCTL_16_23 | B43_PIO8_TXCTL_8_15;
|
||||||
value |= (u32)(*data) << 16;
|
tail[0] = data[data_len - 3];
|
||||||
data--;
|
tail[1] = data[data_len - 2];
|
||||||
|
tail[2] = data[data_len - 1];
|
||||||
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
ctl |= B43_PIO8_TXCTL_8_15;
|
ctl |= B43_PIO8_TXCTL_8_15;
|
||||||
value |= (u32)(*data) << 8;
|
tail[0] = data[data_len - 2];
|
||||||
data--;
|
tail[1] = data[data_len - 1];
|
||||||
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
value |= (u32)(*data);
|
tail[0] = data[data_len - 1];
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
b43_piotx_write32(q, B43_PIO8_TXCTL, ctl);
|
b43_piotx_write32(q, B43_PIO8_TXCTL, ctl);
|
||||||
b43_piotx_write32(q, B43_PIO8_TXDATA, value);
|
ssb_block_write(dev->dev, tail, 4,
|
||||||
|
q->mmio_base + B43_PIO8_TXDATA,
|
||||||
|
sizeof(u32));
|
||||||
}
|
}
|
||||||
|
|
||||||
return ctl;
|
return ctl;
|
||||||
@ -693,21 +703,25 @@ static bool pio_rx_frame(struct b43_pio_rxqueue *q)
|
|||||||
q->mmio_base + B43_PIO8_RXDATA,
|
q->mmio_base + B43_PIO8_RXDATA,
|
||||||
sizeof(u32));
|
sizeof(u32));
|
||||||
if (len & 3) {
|
if (len & 3) {
|
||||||
u32 value;
|
u8 tail[4] = { 0, };
|
||||||
char *data;
|
|
||||||
|
|
||||||
/* Read the last few bytes. */
|
/* Read the last few bytes. */
|
||||||
value = b43_piorx_read32(q, B43_PIO8_RXDATA);
|
ssb_block_read(dev->dev, tail, 4,
|
||||||
data = &(skb->data[len + padding - 1]);
|
q->mmio_base + B43_PIO8_RXDATA,
|
||||||
|
sizeof(u32));
|
||||||
switch (len & 3) {
|
switch (len & 3) {
|
||||||
case 3:
|
case 3:
|
||||||
*data = (value >> 16);
|
skb->data[len + padding - 3] = tail[0];
|
||||||
data--;
|
skb->data[len + padding - 2] = tail[1];
|
||||||
|
skb->data[len + padding - 1] = tail[2];
|
||||||
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
*data = (value >> 8);
|
skb->data[len + padding - 2] = tail[0];
|
||||||
data--;
|
skb->data[len + padding - 1] = tail[1];
|
||||||
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
*data = value;
|
skb->data[len + padding - 1] = tail[0];
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -715,11 +729,13 @@ static bool pio_rx_frame(struct b43_pio_rxqueue *q)
|
|||||||
q->mmio_base + B43_PIO_RXDATA,
|
q->mmio_base + B43_PIO_RXDATA,
|
||||||
sizeof(u16));
|
sizeof(u16));
|
||||||
if (len & 1) {
|
if (len & 1) {
|
||||||
u16 value;
|
u8 tail[2] = { 0, };
|
||||||
|
|
||||||
/* Read the last byte. */
|
/* Read the last byte. */
|
||||||
value = b43_piorx_read16(q, B43_PIO_RXDATA);
|
ssb_block_read(dev->dev, tail, 2,
|
||||||
skb->data[len + padding - 1] = value;
|
q->mmio_base + B43_PIO_RXDATA,
|
||||||
|
sizeof(u16));
|
||||||
|
skb->data[len + padding - 1] = tail[0];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -631,6 +631,9 @@ static void mac80211_hwsim_bss_info_changed(struct ieee80211_hw *hw,
|
|||||||
data->beacon_int = 1024 * info->beacon_int / 1000 * HZ / 1000;
|
data->beacon_int = 1024 * info->beacon_int / 1000 * HZ / 1000;
|
||||||
if (WARN_ON(!data->beacon_int))
|
if (WARN_ON(!data->beacon_int))
|
||||||
data->beacon_int = 1;
|
data->beacon_int = 1;
|
||||||
|
if (data->started)
|
||||||
|
mod_timer(&data->beacon_timer,
|
||||||
|
jiffies + data->beacon_int);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (changed & BSS_CHANGED_ERP_CTS_PROT) {
|
if (changed & BSS_CHANGED_ERP_CTS_PROT) {
|
||||||
|
@ -2381,6 +2381,7 @@ static struct usb_device_id rt73usb_device_table[] = {
|
|||||||
/* Huawei-3Com */
|
/* Huawei-3Com */
|
||||||
{ USB_DEVICE(0x1472, 0x0009), USB_DEVICE_DATA(&rt73usb_ops) },
|
{ USB_DEVICE(0x1472, 0x0009), USB_DEVICE_DATA(&rt73usb_ops) },
|
||||||
/* Hercules */
|
/* Hercules */
|
||||||
|
{ USB_DEVICE(0x06f8, 0xe002), USB_DEVICE_DATA(&rt73usb_ops) },
|
||||||
{ USB_DEVICE(0x06f8, 0xe010), USB_DEVICE_DATA(&rt73usb_ops) },
|
{ USB_DEVICE(0x06f8, 0xe010), USB_DEVICE_DATA(&rt73usb_ops) },
|
||||||
{ USB_DEVICE(0x06f8, 0xe020), USB_DEVICE_DATA(&rt73usb_ops) },
|
{ USB_DEVICE(0x06f8, 0xe020), USB_DEVICE_DATA(&rt73usb_ops) },
|
||||||
/* Linksys */
|
/* Linksys */
|
||||||
|
@ -367,7 +367,10 @@ ieee80211_tx_h_unicast_ps_buf(struct ieee80211_tx_data *tx)
|
|||||||
struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)tx->skb->data;
|
struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)tx->skb->data;
|
||||||
u32 staflags;
|
u32 staflags;
|
||||||
|
|
||||||
if (unlikely(!sta || ieee80211_is_probe_resp(hdr->frame_control)))
|
if (unlikely(!sta || ieee80211_is_probe_resp(hdr->frame_control)
|
||||||
|
|| ieee80211_is_auth(hdr->frame_control)
|
||||||
|
|| ieee80211_is_assoc_resp(hdr->frame_control)
|
||||||
|
|| ieee80211_is_reassoc_resp(hdr->frame_control)))
|
||||||
return TX_CONTINUE;
|
return TX_CONTINUE;
|
||||||
|
|
||||||
staflags = get_sta_flags(sta);
|
staflags = get_sta_flags(sta);
|
||||||
|
Loading…
Reference in New Issue
Block a user