Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
Conflicts: net/mac80211/rate.c
This commit is contained in:
commit
5ecccb74dc
@ -2284,6 +2284,7 @@ static int __devinit efx_pci_probe(struct pci_dev *pci_dev,
|
|||||||
fail2:
|
fail2:
|
||||||
efx_fini_struct(efx);
|
efx_fini_struct(efx);
|
||||||
fail1:
|
fail1:
|
||||||
|
WARN_ON(rc > 0);
|
||||||
EFX_LOG(efx, "initialisation failed. rc=%d\n", rc);
|
EFX_LOG(efx, "initialisation failed. rc=%d\n", rc);
|
||||||
free_netdev(net_dev);
|
free_netdev(net_dev);
|
||||||
return rc;
|
return rc;
|
||||||
|
@ -320,7 +320,7 @@ static int qt202x_reset_phy(struct efx_nic *efx)
|
|||||||
|
|
||||||
falcon_board(efx)->type->init_phy(efx);
|
falcon_board(efx)->type->init_phy(efx);
|
||||||
|
|
||||||
return rc;
|
return 0;
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
EFX_ERR(efx, "PHY reset timed out\n");
|
EFX_ERR(efx, "PHY reset timed out\n");
|
||||||
|
@ -1879,13 +1879,12 @@ static void velocity_error(struct velocity_info *vptr, int status)
|
|||||||
/**
|
/**
|
||||||
* tx_srv - transmit interrupt service
|
* tx_srv - transmit interrupt service
|
||||||
* @vptr; Velocity
|
* @vptr; Velocity
|
||||||
* @status:
|
|
||||||
*
|
*
|
||||||
* Scan the queues looking for transmitted packets that
|
* Scan the queues looking for transmitted packets that
|
||||||
* we can complete and clean up. Update any statistics as
|
* we can complete and clean up. Update any statistics as
|
||||||
* necessary/
|
* necessary/
|
||||||
*/
|
*/
|
||||||
static int velocity_tx_srv(struct velocity_info *vptr, u32 status)
|
static int velocity_tx_srv(struct velocity_info *vptr)
|
||||||
{
|
{
|
||||||
struct tx_desc *td;
|
struct tx_desc *td;
|
||||||
int qnum;
|
int qnum;
|
||||||
@ -2092,14 +2091,12 @@ static int velocity_receive_frame(struct velocity_info *vptr, int idx)
|
|||||||
/**
|
/**
|
||||||
* velocity_rx_srv - service RX interrupt
|
* velocity_rx_srv - service RX interrupt
|
||||||
* @vptr: velocity
|
* @vptr: velocity
|
||||||
* @status: adapter status (unused)
|
|
||||||
*
|
*
|
||||||
* Walk the receive ring of the velocity adapter and remove
|
* Walk the receive ring of the velocity adapter and remove
|
||||||
* any received packets from the receive queue. Hand the ring
|
* any received packets from the receive queue. Hand the ring
|
||||||
* slots back to the adapter for reuse.
|
* slots back to the adapter for reuse.
|
||||||
*/
|
*/
|
||||||
static int velocity_rx_srv(struct velocity_info *vptr, int status,
|
static int velocity_rx_srv(struct velocity_info *vptr, int budget_left)
|
||||||
int budget_left)
|
|
||||||
{
|
{
|
||||||
struct net_device_stats *stats = &vptr->dev->stats;
|
struct net_device_stats *stats = &vptr->dev->stats;
|
||||||
int rd_curr = vptr->rx.curr;
|
int rd_curr = vptr->rx.curr;
|
||||||
@ -2153,32 +2150,24 @@ static int velocity_poll(struct napi_struct *napi, int budget)
|
|||||||
struct velocity_info *vptr = container_of(napi,
|
struct velocity_info *vptr = container_of(napi,
|
||||||
struct velocity_info, napi);
|
struct velocity_info, napi);
|
||||||
unsigned int rx_done;
|
unsigned int rx_done;
|
||||||
u32 isr_status;
|
unsigned long flags;
|
||||||
|
|
||||||
spin_lock(&vptr->lock);
|
|
||||||
isr_status = mac_read_isr(vptr->mac_regs);
|
|
||||||
|
|
||||||
/* Ack the interrupt */
|
|
||||||
mac_write_isr(vptr->mac_regs, isr_status);
|
|
||||||
if (isr_status & (~(ISR_PRXI | ISR_PPRXI | ISR_PTXI | ISR_PPTXI)))
|
|
||||||
velocity_error(vptr, isr_status);
|
|
||||||
|
|
||||||
|
spin_lock_irqsave(&vptr->lock, flags);
|
||||||
/*
|
/*
|
||||||
* Do rx and tx twice for performance (taken from the VIA
|
* Do rx and tx twice for performance (taken from the VIA
|
||||||
* out-of-tree driver).
|
* out-of-tree driver).
|
||||||
*/
|
*/
|
||||||
rx_done = velocity_rx_srv(vptr, isr_status, budget / 2);
|
rx_done = velocity_rx_srv(vptr, budget / 2);
|
||||||
velocity_tx_srv(vptr, isr_status);
|
velocity_tx_srv(vptr);
|
||||||
rx_done += velocity_rx_srv(vptr, isr_status, budget - rx_done);
|
rx_done += velocity_rx_srv(vptr, budget - rx_done);
|
||||||
velocity_tx_srv(vptr, isr_status);
|
velocity_tx_srv(vptr);
|
||||||
|
|
||||||
spin_unlock(&vptr->lock);
|
|
||||||
|
|
||||||
/* If budget not fully consumed, exit the polling mode */
|
/* If budget not fully consumed, exit the polling mode */
|
||||||
if (rx_done < budget) {
|
if (rx_done < budget) {
|
||||||
napi_complete(napi);
|
napi_complete(napi);
|
||||||
mac_enable_int(vptr->mac_regs);
|
mac_enable_int(vptr->mac_regs);
|
||||||
}
|
}
|
||||||
|
spin_unlock_irqrestore(&vptr->lock, flags);
|
||||||
|
|
||||||
return rx_done;
|
return rx_done;
|
||||||
}
|
}
|
||||||
@ -2208,10 +2197,17 @@ static irqreturn_t velocity_intr(int irq, void *dev_instance)
|
|||||||
return IRQ_NONE;
|
return IRQ_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Ack the interrupt */
|
||||||
|
mac_write_isr(vptr->mac_regs, isr_status);
|
||||||
|
|
||||||
if (likely(napi_schedule_prep(&vptr->napi))) {
|
if (likely(napi_schedule_prep(&vptr->napi))) {
|
||||||
mac_disable_int(vptr->mac_regs);
|
mac_disable_int(vptr->mac_regs);
|
||||||
__napi_schedule(&vptr->napi);
|
__napi_schedule(&vptr->napi);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isr_status & (~(ISR_PRXI | ISR_PPRXI | ISR_PTXI | ISR_PPTXI)))
|
||||||
|
velocity_error(vptr, isr_status);
|
||||||
|
|
||||||
spin_unlock(&vptr->lock);
|
spin_unlock(&vptr->lock);
|
||||||
|
|
||||||
return IRQ_HANDLED;
|
return IRQ_HANDLED;
|
||||||
@ -3100,7 +3096,7 @@ static int velocity_resume(struct pci_dev *pdev)
|
|||||||
velocity_init_registers(vptr, VELOCITY_INIT_WOL);
|
velocity_init_registers(vptr, VELOCITY_INIT_WOL);
|
||||||
mac_disable_int(vptr->mac_regs);
|
mac_disable_int(vptr->mac_regs);
|
||||||
|
|
||||||
velocity_tx_srv(vptr, 0);
|
velocity_tx_srv(vptr);
|
||||||
|
|
||||||
for (i = 0; i < vptr->tx.numq; i++) {
|
for (i = 0; i < vptr->tx.numq; i++) {
|
||||||
if (vptr->tx.used[i])
|
if (vptr->tx.used[i])
|
||||||
@ -3344,6 +3340,7 @@ static int velocity_set_coalesce(struct net_device *dev,
|
|||||||
{
|
{
|
||||||
struct velocity_info *vptr = netdev_priv(dev);
|
struct velocity_info *vptr = netdev_priv(dev);
|
||||||
int max_us = 0x3f * 64;
|
int max_us = 0x3f * 64;
|
||||||
|
unsigned long flags;
|
||||||
|
|
||||||
/* 6 bits of */
|
/* 6 bits of */
|
||||||
if (ecmd->tx_coalesce_usecs > max_us)
|
if (ecmd->tx_coalesce_usecs > max_us)
|
||||||
@ -3365,6 +3362,7 @@ static int velocity_set_coalesce(struct net_device *dev,
|
|||||||
ecmd->tx_coalesce_usecs);
|
ecmd->tx_coalesce_usecs);
|
||||||
|
|
||||||
/* Setup the interrupt suppression and queue timers */
|
/* Setup the interrupt suppression and queue timers */
|
||||||
|
spin_lock_irqsave(&vptr->lock, flags);
|
||||||
mac_disable_int(vptr->mac_regs);
|
mac_disable_int(vptr->mac_regs);
|
||||||
setup_adaptive_interrupts(vptr);
|
setup_adaptive_interrupts(vptr);
|
||||||
setup_queue_timers(vptr);
|
setup_queue_timers(vptr);
|
||||||
@ -3372,6 +3370,7 @@ static int velocity_set_coalesce(struct net_device *dev,
|
|||||||
mac_write_int_mask(vptr->int_mask, vptr->mac_regs);
|
mac_write_int_mask(vptr->int_mask, vptr->mac_regs);
|
||||||
mac_clear_isr(vptr->mac_regs);
|
mac_clear_isr(vptr->mac_regs);
|
||||||
mac_enable_int(vptr->mac_regs);
|
mac_enable_int(vptr->mac_regs);
|
||||||
|
spin_unlock_irqrestore(&vptr->lock, flags);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1610,7 +1610,7 @@ static int ath_tx_setup_buffer(struct ieee80211_hw *hw, struct ath_buf *bf,
|
|||||||
bf->bf_frmlen -= padsize;
|
bf->bf_frmlen -= padsize;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (conf_is_ht(&hw->conf) && !is_pae(skb))
|
if (conf_is_ht(&hw->conf))
|
||||||
bf->bf_state.bf_type |= BUF_HT;
|
bf->bf_state.bf_type |= BUF_HT;
|
||||||
|
|
||||||
bf->bf_flags = setup_tx_flags(sc, skb, txctl->txq);
|
bf->bf_flags = setup_tx_flags(sc, skb, txctl->txq);
|
||||||
@ -1696,7 +1696,7 @@ static void ath_tx_start_dma(struct ath_softc *sc, struct ath_buf *bf,
|
|||||||
goto tx_done;
|
goto tx_done;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tx_info->flags & IEEE80211_TX_CTL_AMPDU) {
|
if ((tx_info->flags & IEEE80211_TX_CTL_AMPDU) && !is_pae(skb)) {
|
||||||
/*
|
/*
|
||||||
* Try aggregation if it's a unicast data frame
|
* Try aggregation if it's a unicast data frame
|
||||||
* and the destination is HT capable.
|
* and the destination is HT capable.
|
||||||
|
@ -1012,7 +1012,10 @@ static void iwl_pass_packet_to_mac80211(struct iwl_priv *priv,
|
|||||||
if (ieee80211_is_mgmt(fc) ||
|
if (ieee80211_is_mgmt(fc) ||
|
||||||
ieee80211_has_protected(fc) ||
|
ieee80211_has_protected(fc) ||
|
||||||
ieee80211_has_morefrags(fc) ||
|
ieee80211_has_morefrags(fc) ||
|
||||||
le16_to_cpu(hdr->seq_ctrl) & IEEE80211_SCTL_FRAG)
|
le16_to_cpu(hdr->seq_ctrl) & IEEE80211_SCTL_FRAG ||
|
||||||
|
(ieee80211_is_data_qos(fc) &&
|
||||||
|
*ieee80211_get_qos_ctl(hdr) &
|
||||||
|
IEEE80211_QOS_CONTROL_A_MSDU_PRESENT))
|
||||||
ret = skb_linearize(skb);
|
ret = skb_linearize(skb);
|
||||||
else
|
else
|
||||||
ret = __pskb_pull_tail(skb, min_t(u16, IWL_LINK_HDR_MAX, len)) ?
|
ret = __pskb_pull_tail(skb, min_t(u16, IWL_LINK_HDR_MAX, len)) ?
|
||||||
|
@ -794,7 +794,7 @@ static int iwm_mlme_update_bss_table(struct iwm_priv *iwm, u8 *buf,
|
|||||||
}
|
}
|
||||||
|
|
||||||
bss->bss = kzalloc(bss_len, GFP_KERNEL);
|
bss->bss = kzalloc(bss_len, GFP_KERNEL);
|
||||||
if (!bss) {
|
if (!bss->bss) {
|
||||||
kfree(bss);
|
kfree(bss);
|
||||||
IWM_ERR(iwm, "Couldn't allocate bss\n");
|
IWM_ERR(iwm, "Couldn't allocate bss\n");
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
@ -65,6 +65,7 @@ static struct usb_device_id rtl8187_table[] __devinitdata = {
|
|||||||
/* Sitecom */
|
/* Sitecom */
|
||||||
{USB_DEVICE(0x0df6, 0x000d), .driver_info = DEVICE_RTL8187},
|
{USB_DEVICE(0x0df6, 0x000d), .driver_info = DEVICE_RTL8187},
|
||||||
{USB_DEVICE(0x0df6, 0x0028), .driver_info = DEVICE_RTL8187B},
|
{USB_DEVICE(0x0df6, 0x0028), .driver_info = DEVICE_RTL8187B},
|
||||||
|
{USB_DEVICE(0x0df6, 0x0029), .driver_info = DEVICE_RTL8187B},
|
||||||
/* Sphairon Access Systems GmbH */
|
/* Sphairon Access Systems GmbH */
|
||||||
{USB_DEVICE(0x114B, 0x0150), .driver_info = DEVICE_RTL8187},
|
{USB_DEVICE(0x114B, 0x0150), .driver_info = DEVICE_RTL8187},
|
||||||
/* Dick Smith Electronics */
|
/* Dick Smith Electronics */
|
||||||
|
@ -946,7 +946,6 @@ int igmp_rcv(struct sk_buff *skb)
|
|||||||
break;
|
break;
|
||||||
case IGMP_HOST_MEMBERSHIP_REPORT:
|
case IGMP_HOST_MEMBERSHIP_REPORT:
|
||||||
case IGMPV2_HOST_MEMBERSHIP_REPORT:
|
case IGMPV2_HOST_MEMBERSHIP_REPORT:
|
||||||
case IGMPV3_HOST_MEMBERSHIP_REPORT:
|
|
||||||
/* Is it our report looped back? */
|
/* Is it our report looped back? */
|
||||||
if (skb_rtable(skb)->fl.iif == 0)
|
if (skb_rtable(skb)->fl.iif == 0)
|
||||||
break;
|
break;
|
||||||
@ -960,6 +959,7 @@ int igmp_rcv(struct sk_buff *skb)
|
|||||||
in_dev_put(in_dev);
|
in_dev_put(in_dev);
|
||||||
return pim_rcv_v1(skb);
|
return pim_rcv_v1(skb);
|
||||||
#endif
|
#endif
|
||||||
|
case IGMPV3_HOST_MEMBERSHIP_REPORT:
|
||||||
case IGMP_DVMRP:
|
case IGMP_DVMRP:
|
||||||
case IGMP_TRACE:
|
case IGMP_TRACE:
|
||||||
case IGMP_HOST_LEAVE_MESSAGE:
|
case IGMP_HOST_LEAVE_MESSAGE:
|
||||||
|
@ -5783,11 +5783,9 @@ int tcp_rcv_state_process(struct sock *sk, struct sk_buff *skb,
|
|||||||
|
|
||||||
/* tcp_ack considers this ACK as duplicate
|
/* tcp_ack considers this ACK as duplicate
|
||||||
* and does not calculate rtt.
|
* and does not calculate rtt.
|
||||||
* Fix it at least with timestamps.
|
* Force it here.
|
||||||
*/
|
*/
|
||||||
if (tp->rx_opt.saw_tstamp &&
|
tcp_ack_update_rtt(sk, 0, 0);
|
||||||
tp->rx_opt.rcv_tsecr && !tp->srtt)
|
|
||||||
tcp_ack_saw_tstamp(sk, 0);
|
|
||||||
|
|
||||||
if (tp->rx_opt.tstamp_ok)
|
if (tp->rx_opt.tstamp_ok)
|
||||||
tp->advmss -= TCPOLEN_TSTAMP_ALIGNED;
|
tp->advmss -= TCPOLEN_TSTAMP_ALIGNED;
|
||||||
|
@ -303,6 +303,9 @@ void rate_control_get_rate(struct ieee80211_sub_if_data *sdata,
|
|||||||
info->control.rates[i].count = 1;
|
info->control.rates[i].count = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (sdata->local->hw.flags & IEEE80211_HW_HAS_RATE_CONTROL)
|
||||||
|
return;
|
||||||
|
|
||||||
ref->ops->get_rate(ref->priv, ista, priv_sta, txrc);
|
ref->ops->get_rate(ref->priv, ista, priv_sta, txrc);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
Reference in New Issue
Block a user