Commit a98917ac authored by David S. Miller's avatar David S. Miller
parents 417bc4b8 e16c1bb6
...@@ -1141,7 +1141,8 @@ static int ar9170_set_freq_cal_data(struct ar9170 *ar, ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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) ...@@ -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) ...@@ -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, ...@@ -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[] = { ...@@ -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) ...@@ -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);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment