Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6
This commit is contained in:
Коммит
a25a32ab71
|
@ -2546,6 +2546,7 @@ static struct {
|
|||
{ AR_SREV_VERSION_9287, "9287" },
|
||||
{ AR_SREV_VERSION_9271, "9271" },
|
||||
{ AR_SREV_VERSION_9300, "9300" },
|
||||
{ AR_SREV_VERSION_9485, "9485" },
|
||||
};
|
||||
|
||||
/* For devices with external radios */
|
||||
|
|
|
@ -1536,7 +1536,7 @@ static void dma_rx(struct b43_dmaring *ring, int *slot)
|
|||
dmaaddr = meta->dmaaddr;
|
||||
goto drop_recycle_buffer;
|
||||
}
|
||||
if (unlikely(len > ring->rx_buffersize)) {
|
||||
if (unlikely(len + ring->frameoffset > ring->rx_buffersize)) {
|
||||
/* The data did not fit into one descriptor buffer
|
||||
* and is split over multiple buffers.
|
||||
* This should never happen, as we try to allocate buffers
|
||||
|
|
|
@ -163,7 +163,7 @@ struct b43_dmadesc_generic {
|
|||
/* DMA engine tuning knobs */
|
||||
#define B43_TXRING_SLOTS 256
|
||||
#define B43_RXRING_SLOTS 64
|
||||
#define B43_DMA0_RX_BUFFERSIZE IEEE80211_MAX_FRAME_LEN
|
||||
#define B43_DMA0_RX_BUFFERSIZE (B43_DMA0_RX_FRAMEOFFSET + IEEE80211_MAX_FRAME_LEN)
|
||||
|
||||
/* Pointer poison */
|
||||
#define B43_DMA_PTR_POISON ((void *)ERR_PTR(-ENOMEM))
|
||||
|
|
|
@ -241,7 +241,7 @@ struct iwl_eeprom_enhanced_txpwr {
|
|||
|
||||
/* 6x00 Specific */
|
||||
#define EEPROM_6000_TX_POWER_VERSION (4)
|
||||
#define EEPROM_6000_EEPROM_VERSION (0x434)
|
||||
#define EEPROM_6000_EEPROM_VERSION (0x423)
|
||||
|
||||
/* 6x50 Specific */
|
||||
#define EEPROM_6050_TX_POWER_VERSION (4)
|
||||
|
|
|
@ -56,6 +56,7 @@ static struct usb_device_id p54u_table[] __devinitdata = {
|
|||
{USB_DEVICE(0x0846, 0x4210)}, /* Netgear WG121 the second ? */
|
||||
{USB_DEVICE(0x0846, 0x4220)}, /* Netgear WG111 */
|
||||
{USB_DEVICE(0x09aa, 0x1000)}, /* Spinnaker Proto board */
|
||||
{USB_DEVICE(0x0bf8, 0x1007)}, /* Fujitsu E-5400 USB */
|
||||
{USB_DEVICE(0x0cde, 0x0006)}, /* Medion 40900, Roper Europe */
|
||||
{USB_DEVICE(0x0db0, 0x6826)}, /* MSI UB54G (MS-6826) */
|
||||
{USB_DEVICE(0x107b, 0x55f2)}, /* Gateway WGU-210 (Gemtek) */
|
||||
|
@ -68,6 +69,7 @@ static struct usb_device_id p54u_table[] __devinitdata = {
|
|||
{USB_DEVICE(0x1915, 0x2235)}, /* Linksys WUSB54G Portable OEM */
|
||||
{USB_DEVICE(0x2001, 0x3701)}, /* DLink DWL-G120 Spinnaker */
|
||||
{USB_DEVICE(0x2001, 0x3703)}, /* DLink DWL-G122 */
|
||||
{USB_DEVICE(0x2001, 0x3762)}, /* Conceptronic C54U */
|
||||
{USB_DEVICE(0x5041, 0x2234)}, /* Linksys WUSB54G */
|
||||
{USB_DEVICE(0x5041, 0x2235)}, /* Linksys WUSB54G Portable */
|
||||
|
||||
|
|
|
@ -1062,8 +1062,10 @@ void rt2x00lib_remove_dev(struct rt2x00_dev *rt2x00dev)
|
|||
* Stop all work.
|
||||
*/
|
||||
cancel_work_sync(&rt2x00dev->intf_work);
|
||||
cancel_work_sync(&rt2x00dev->rxdone_work);
|
||||
cancel_work_sync(&rt2x00dev->txdone_work);
|
||||
if (rt2x00_is_usb(rt2x00dev)) {
|
||||
cancel_work_sync(&rt2x00dev->rxdone_work);
|
||||
cancel_work_sync(&rt2x00dev->txdone_work);
|
||||
}
|
||||
destroy_workqueue(rt2x00dev->workqueue);
|
||||
|
||||
/*
|
||||
|
|
|
@ -685,7 +685,7 @@ static int efuse_pg_packet_read(struct ieee80211_hw *hw, u8 offset, u8 *data)
|
|||
|
||||
u8 efuse_data, word_cnts = 0;
|
||||
u16 efuse_addr = 0;
|
||||
u8 hworden;
|
||||
u8 hworden = 0;
|
||||
u8 tmpdata[8];
|
||||
|
||||
if (data == NULL)
|
||||
|
|
|
@ -303,7 +303,7 @@ static void _rtl92c_fill_h2c_command(struct ieee80211_hw *hw,
|
|||
u16 box_reg, box_extreg;
|
||||
u8 u1b_tmp;
|
||||
bool isfw_read = false;
|
||||
u8 buf_index;
|
||||
u8 buf_index = 0;
|
||||
bool bwrite_sucess = false;
|
||||
u8 wait_h2c_limmit = 100;
|
||||
u8 wait_writeh2c_limmit = 100;
|
||||
|
|
|
@ -246,7 +246,7 @@ static void _rtl_usb_io_handler_init(struct device *dev,
|
|||
|
||||
static void _rtl_usb_io_handler_release(struct ieee80211_hw *hw)
|
||||
{
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
struct rtl_priv __maybe_unused *rtlpriv = rtl_priv(hw);
|
||||
|
||||
mutex_destroy(&rtlpriv->io.bb_mutex);
|
||||
}
|
||||
|
|
|
@ -340,7 +340,7 @@ module_init(wl1271_init);
|
|||
module_exit(wl1271_exit);
|
||||
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_AUTHOR("Luciano Coelho <luciano.coelho@nokia.com>");
|
||||
MODULE_AUTHOR("Luciano Coelho <coelho@ti.com>");
|
||||
MODULE_AUTHOR("Juuso Oikarinen <juuso.oikarinen@nokia.com>");
|
||||
MODULE_FIRMWARE(WL1271_FW_NAME);
|
||||
MODULE_FIRMWARE(WL1271_AP_FW_NAME);
|
||||
|
|
|
@ -487,7 +487,7 @@ module_init(wl1271_init);
|
|||
module_exit(wl1271_exit);
|
||||
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_AUTHOR("Luciano Coelho <luciano.coelho@nokia.com>");
|
||||
MODULE_AUTHOR("Luciano Coelho <coelho@ti.com>");
|
||||
MODULE_AUTHOR("Juuso Oikarinen <juuso.oikarinen@nokia.com>");
|
||||
MODULE_FIRMWARE(WL1271_FW_NAME);
|
||||
MODULE_FIRMWARE(WL1271_AP_FW_NAME);
|
||||
|
|
|
@ -204,7 +204,10 @@ static int wl1271_tm_cmd_nvs_push(struct wl1271 *wl, struct nlattr *tb[])
|
|||
|
||||
kfree(wl->nvs);
|
||||
|
||||
wl->nvs = kzalloc(sizeof(struct wl1271_nvs_file), GFP_KERNEL);
|
||||
if (len != sizeof(struct wl1271_nvs_file))
|
||||
return -EINVAL;
|
||||
|
||||
wl->nvs = kzalloc(len, GFP_KERNEL);
|
||||
if (!wl->nvs) {
|
||||
wl1271_error("could not allocate memory for the nvs file");
|
||||
ret = -ENOMEM;
|
||||
|
|
|
@ -643,7 +643,7 @@ static void rx_urb_complete(struct urb *urb)
|
|||
usb = urb->context;
|
||||
rx = &usb->rx;
|
||||
|
||||
zd_usb_reset_rx_idle_timer(usb);
|
||||
tasklet_schedule(&rx->reset_timer_tasklet);
|
||||
|
||||
if (length%rx->usb_packet_size > rx->usb_packet_size-4) {
|
||||
/* If there is an old first fragment, we don't care. */
|
||||
|
@ -812,6 +812,7 @@ void zd_usb_disable_rx(struct zd_usb *usb)
|
|||
__zd_usb_disable_rx(usb);
|
||||
mutex_unlock(&rx->setup_mutex);
|
||||
|
||||
tasklet_kill(&rx->reset_timer_tasklet);
|
||||
cancel_delayed_work_sync(&rx->idle_work);
|
||||
}
|
||||
|
||||
|
@ -1106,6 +1107,13 @@ static void zd_rx_idle_timer_handler(struct work_struct *work)
|
|||
zd_usb_reset_rx(usb);
|
||||
}
|
||||
|
||||
static void zd_usb_reset_rx_idle_timer_tasklet(unsigned long param)
|
||||
{
|
||||
struct zd_usb *usb = (struct zd_usb *)param;
|
||||
|
||||
zd_usb_reset_rx_idle_timer(usb);
|
||||
}
|
||||
|
||||
void zd_usb_reset_rx_idle_timer(struct zd_usb *usb)
|
||||
{
|
||||
struct zd_usb_rx *rx = &usb->rx;
|
||||
|
@ -1127,6 +1135,7 @@ static inline void init_usb_interrupt(struct zd_usb *usb)
|
|||
static inline void init_usb_rx(struct zd_usb *usb)
|
||||
{
|
||||
struct zd_usb_rx *rx = &usb->rx;
|
||||
|
||||
spin_lock_init(&rx->lock);
|
||||
mutex_init(&rx->setup_mutex);
|
||||
if (interface_to_usbdev(usb->intf)->speed == USB_SPEED_HIGH) {
|
||||
|
@ -1136,11 +1145,14 @@ static inline void init_usb_rx(struct zd_usb *usb)
|
|||
}
|
||||
ZD_ASSERT(rx->fragment_length == 0);
|
||||
INIT_DELAYED_WORK(&rx->idle_work, zd_rx_idle_timer_handler);
|
||||
rx->reset_timer_tasklet.func = zd_usb_reset_rx_idle_timer_tasklet;
|
||||
rx->reset_timer_tasklet.data = (unsigned long)usb;
|
||||
}
|
||||
|
||||
static inline void init_usb_tx(struct zd_usb *usb)
|
||||
{
|
||||
struct zd_usb_tx *tx = &usb->tx;
|
||||
|
||||
spin_lock_init(&tx->lock);
|
||||
atomic_set(&tx->enabled, 0);
|
||||
tx->stopped = 0;
|
||||
|
@ -1671,6 +1683,10 @@ static void iowrite16v_urb_complete(struct urb *urb)
|
|||
|
||||
if (urb->status && !usb->cmd_error)
|
||||
usb->cmd_error = urb->status;
|
||||
|
||||
if (!usb->cmd_error &&
|
||||
urb->actual_length != urb->transfer_buffer_length)
|
||||
usb->cmd_error = -EIO;
|
||||
}
|
||||
|
||||
static int zd_submit_waiting_urb(struct zd_usb *usb, bool last)
|
||||
|
@ -1805,7 +1821,7 @@ int zd_usb_iowrite16v_async(struct zd_usb *usb, const struct zd_ioreq16 *ioreqs,
|
|||
usb_fill_int_urb(urb, udev, usb_sndintpipe(udev, EP_REGS_OUT),
|
||||
req, req_len, iowrite16v_urb_complete, usb,
|
||||
ep->desc.bInterval);
|
||||
urb->transfer_flags |= URB_FREE_BUFFER | URB_SHORT_NOT_OK;
|
||||
urb->transfer_flags |= URB_FREE_BUFFER;
|
||||
|
||||
/* Submit previous URB */
|
||||
r = zd_submit_waiting_urb(usb, false);
|
||||
|
|
|
@ -183,6 +183,7 @@ struct zd_usb_rx {
|
|||
spinlock_t lock;
|
||||
struct mutex setup_mutex;
|
||||
struct delayed_work idle_work;
|
||||
struct tasklet_struct reset_timer_tasklet;
|
||||
u8 fragment[2 * USB_MAX_RX_SIZE];
|
||||
unsigned int fragment_length;
|
||||
unsigned int usb_packet_size;
|
||||
|
|
|
@ -1753,8 +1753,19 @@ enum ieee80211_ampdu_mlme_action {
|
|||
* that TX/RX_STOP can pass NULL for this parameter.
|
||||
* The @buf_size parameter is only valid when the action is set to
|
||||
* %IEEE80211_AMPDU_TX_OPERATIONAL and indicates the peer's reorder
|
||||
* buffer size (number of subframes) for this session -- aggregates
|
||||
* containing more subframes than this may not be transmitted to the peer.
|
||||
* buffer size (number of subframes) for this session -- the driver
|
||||
* may neither send aggregates containing more subframes than this
|
||||
* nor send aggregates in a way that lost frames would exceed the
|
||||
* buffer size. If just limiting the aggregate size, this would be
|
||||
* possible with a buf_size of 8:
|
||||
* - TX: 1.....7
|
||||
* - RX: 2....7 (lost frame #1)
|
||||
* - TX: 8..1...
|
||||
* which is invalid since #1 was now re-transmitted well past the
|
||||
* buffer size of 8. Correct ways to retransmit #1 would be:
|
||||
* - TX: 1 or 18 or 81
|
||||
* Even "189" would be wrong since 1 could be lost again.
|
||||
*
|
||||
* Returns a negative error code on failure.
|
||||
* The callback can sleep.
|
||||
*
|
||||
|
|
|
@ -2541,7 +2541,6 @@ static void ieee80211_rx_handlers(struct ieee80211_rx_data *rx)
|
|||
* same TID from the same station
|
||||
*/
|
||||
rx->skb = skb;
|
||||
rx->flags = 0;
|
||||
|
||||
CALL_RXH(ieee80211_rx_h_decrypt)
|
||||
CALL_RXH(ieee80211_rx_h_check_more_data)
|
||||
|
@ -2612,6 +2611,7 @@ void ieee80211_release_reorder_timeout(struct sta_info *sta, int tid)
|
|||
.sdata = sta->sdata,
|
||||
.local = sta->local,
|
||||
.queue = tid,
|
||||
.flags = 0,
|
||||
};
|
||||
struct tid_ampdu_rx *tid_agg_rx;
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче