diff options
Diffstat (limited to 'drivers/net/wireless/rt2x00/rt2800usb.c')
-rw-r--r-- | drivers/net/wireless/rt2x00/rt2800usb.c | 63 |
1 files changed, 62 insertions, 1 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2800usb.c b/drivers/net/wireless/rt2x00/rt2800usb.c index 098613ed93fb..f32282009146 100644 --- a/drivers/net/wireless/rt2x00/rt2800usb.c +++ b/drivers/net/wireless/rt2x00/rt2800usb.c | |||
@@ -485,7 +485,7 @@ static void rt2800usb_write_tx_desc(struct queue_entry *entry, | |||
485 | */ | 485 | */ |
486 | skbdesc->flags |= SKBDESC_DESC_IN_SKB; | 486 | skbdesc->flags |= SKBDESC_DESC_IN_SKB; |
487 | skbdesc->desc = txi; | 487 | skbdesc->desc = txi; |
488 | skbdesc->desc_len = TXINFO_DESC_SIZE + TXWI_DESC_SIZE; | 488 | skbdesc->desc_len = entry->queue->desc_size; |
489 | } | 489 | } |
490 | 490 | ||
491 | /* | 491 | /* |
@@ -730,6 +730,11 @@ static void rt2800usb_fill_rxdone(struct queue_entry *entry, | |||
730 | * Process the RXWI structure. | 730 | * Process the RXWI structure. |
731 | */ | 731 | */ |
732 | rt2800_process_rxwi(entry, rxdesc); | 732 | rt2800_process_rxwi(entry, rxdesc); |
733 | |||
734 | /* | ||
735 | * Remove RXWI descriptor from start of buffer. | ||
736 | */ | ||
737 | skb_pull(entry->skb, entry->queue->desc_size - RXINFO_DESC_SIZE); | ||
733 | } | 738 | } |
734 | 739 | ||
735 | /* | 740 | /* |
@@ -890,6 +895,47 @@ static const struct rt2x00_ops rt2800usb_ops = { | |||
890 | #endif /* CONFIG_RT2X00_LIB_DEBUGFS */ | 895 | #endif /* CONFIG_RT2X00_LIB_DEBUGFS */ |
891 | }; | 896 | }; |
892 | 897 | ||
898 | static const struct data_queue_desc rt2800usb_queue_rx_5592 = { | ||
899 | .entry_num = 128, | ||
900 | .data_size = AGGREGATION_SIZE, | ||
901 | .desc_size = RXINFO_DESC_SIZE + RXWI_DESC_SIZE_5592, | ||
902 | .priv_size = sizeof(struct queue_entry_priv_usb), | ||
903 | }; | ||
904 | |||
905 | static const struct data_queue_desc rt2800usb_queue_tx_5592 = { | ||
906 | .entry_num = 16, | ||
907 | .data_size = AGGREGATION_SIZE, | ||
908 | .desc_size = TXINFO_DESC_SIZE + TXWI_DESC_SIZE_5592, | ||
909 | .priv_size = sizeof(struct queue_entry_priv_usb), | ||
910 | }; | ||
911 | |||
912 | static const struct data_queue_desc rt2800usb_queue_bcn_5592 = { | ||
913 | .entry_num = 8, | ||
914 | .data_size = MGMT_FRAME_SIZE, | ||
915 | .desc_size = TXINFO_DESC_SIZE + TXWI_DESC_SIZE_5592, | ||
916 | .priv_size = sizeof(struct queue_entry_priv_usb), | ||
917 | }; | ||
918 | |||
919 | |||
920 | static const struct rt2x00_ops rt2800usb_ops_5592 = { | ||
921 | .name = KBUILD_MODNAME, | ||
922 | .drv_data_size = sizeof(struct rt2800_drv_data), | ||
923 | .max_ap_intf = 8, | ||
924 | .eeprom_size = EEPROM_SIZE, | ||
925 | .rf_size = RF_SIZE, | ||
926 | .tx_queues = NUM_TX_QUEUES, | ||
927 | .extra_tx_headroom = TXINFO_DESC_SIZE + TXWI_DESC_SIZE_5592, | ||
928 | .rx = &rt2800usb_queue_rx_5592, | ||
929 | .tx = &rt2800usb_queue_tx_5592, | ||
930 | .bcn = &rt2800usb_queue_bcn_5592, | ||
931 | .lib = &rt2800usb_rt2x00_ops, | ||
932 | .drv = &rt2800usb_rt2800_ops, | ||
933 | .hw = &rt2800usb_mac80211_ops, | ||
934 | #ifdef CONFIG_RT2X00_LIB_DEBUGFS | ||
935 | .debugfs = &rt2800_rt2x00debug, | ||
936 | #endif /* CONFIG_RT2X00_LIB_DEBUGFS */ | ||
937 | }; | ||
938 | |||
893 | /* | 939 | /* |
894 | * rt2800usb module information. | 940 | * rt2800usb module information. |
895 | */ | 941 | */ |
@@ -1200,6 +1246,18 @@ static struct usb_device_id rt2800usb_device_table[] = { | |||
1200 | { USB_DEVICE(0x148f, 0x5370) }, | 1246 | { USB_DEVICE(0x148f, 0x5370) }, |
1201 | { USB_DEVICE(0x148f, 0x5372) }, | 1247 | { USB_DEVICE(0x148f, 0x5372) }, |
1202 | #endif | 1248 | #endif |
1249 | #ifdef CONFIG_RT2800USB_RT55XX | ||
1250 | /* Arcadyan */ | ||
1251 | { USB_DEVICE(0x043e, 0x7a32), .driver_info = 5592 }, | ||
1252 | /* AVM GmbH */ | ||
1253 | { USB_DEVICE(0x057c, 0x8501), .driver_info = 5592 }, | ||
1254 | /* D-Link DWA-160-B2 */ | ||
1255 | { USB_DEVICE(0x2001, 0x3c1a), .driver_info = 5592 }, | ||
1256 | /* Proware */ | ||
1257 | { USB_DEVICE(0x043e, 0x7a13), .driver_info = 5592 }, | ||
1258 | /* Ralink */ | ||
1259 | { USB_DEVICE(0x148f, 0x5572), .driver_info = 5592 }, | ||
1260 | #endif | ||
1203 | #ifdef CONFIG_RT2800USB_UNKNOWN | 1261 | #ifdef CONFIG_RT2800USB_UNKNOWN |
1204 | /* | 1262 | /* |
1205 | * Unclear what kind of devices these are (they aren't supported by the | 1263 | * Unclear what kind of devices these are (they aren't supported by the |
@@ -1303,6 +1361,9 @@ MODULE_LICENSE("GPL"); | |||
1303 | static int rt2800usb_probe(struct usb_interface *usb_intf, | 1361 | static int rt2800usb_probe(struct usb_interface *usb_intf, |
1304 | const struct usb_device_id *id) | 1362 | const struct usb_device_id *id) |
1305 | { | 1363 | { |
1364 | if (id->driver_info == 5592) | ||
1365 | return rt2x00usb_probe(usb_intf, &rt2800usb_ops_5592); | ||
1366 | |||
1306 | return rt2x00usb_probe(usb_intf, &rt2800usb_ops); | 1367 | return rt2x00usb_probe(usb_intf, &rt2800usb_ops); |
1307 | } | 1368 | } |
1308 | 1369 | ||