34 #include <linux/compiler.h>
35 #include <linux/errno.h>
36 #include <linux/if_arp.h>
37 #include <linux/in6.h>
40 #include <linux/kernel.h>
41 #include <linux/module.h>
42 #include <linux/netdevice.h>
43 #include <linux/pci.h>
46 #include <linux/slab.h>
47 #include <linux/tcp.h>
48 #include <linux/types.h>
49 #include <linux/wireless.h>
52 #include <linux/if_vlan.h>
166 if (h_proto == 0x8137 || h_proto == 0x80f3)
170 snap->
oui[0] = oui[0];
171 snap->
oui[1] = oui[1];
172 snap->
oui[2] = oui[2];
187 if (!(crypt && crypt->
ops)) {
198 if (crypt->
ops->encrypt_msdu)
199 res = crypt->
ops->encrypt_msdu(frag, hdr_len, crypt->
priv);
200 if (res == 0 && crypt->
ops->encrypt_mpdu)
201 res = crypt->
ops->encrypt_mpdu(frag, hdr_len, crypt->
priv);
206 ieee->
dev->name, frag->
len);
253 static int rtllib_classify(
struct sk_buff *
skb,
u8 bIsAmsdu)
264 switch (ip->
tos & 0xfc) {
284 static void rtllib_tx_query_agg_cap(
struct rtllib_device *ieee,
299 if (is_multicast_ether_addr(hdr->
addr1))
320 }
else if (tcb_desc->
bdhcp == 1) {
325 goto FORCED_AGG_SETTING;
326 }
else if (pTxTs->
bUsingBa ==
false) {
331 goto FORCED_AGG_SETTING;
359 static void rtllib_qurey_ShortPreambleMode(
struct rtllib_device *ieee,
371 static void rtllib_query_HTCapShortGI(
struct rtllib_device *ieee,
392 static void rtllib_query_BandwidthMode(
struct rtllib_device *ieee,
413 static void rtllib_query_protectionmode(
struct rtllib_device *ieee,
426 if (is_broadcast_ether_addr(skb->
data+16))
430 if (skb->
len > ieee->
rts) {
469 if (skb->
len > ieee->
rts) {
496 static void rtllib_txrate_selectmode(
struct rtllib_device *ieee,
517 if (is_multicast_ether_addr(dst))
531 static int wme_downgrade_ac(
struct sk_buff *skb)
554 netdev_priv_rsl(dev);
557 int i, bytes_per_frag, nr_frags, bytes_last_frag, frag_size;
572 u8 bIsMulticast =
false;
593 ieee->
dev->name, skb->
len);
600 memset(skb->cb, 0,
sizeof(skb->cb));
620 if (skb->
len > 282) {
629 if (((((
u8 *)udp)[1] == 68) &&
630 (((
u8 *)udp)[3] == 67)) ||
631 ((((
u8 *)udp)[1] == 67) &&
632 (((
u8 *)udp)[3] == 68))) {
639 "Protocol start tx ARP pkt!!\n");
646 skb->
priority = rtllib_classify(skb, IsAmsdu);
660 eap_get_type(eap->
type));
700 bIsMulticast = is_multicast_ether_addr(header.
addr1);
710 frag_size = ieee->
fts;
720 if (wme_downgrade_ac(skb))
734 bytes_per_frag = frag_size -
hdr_len;
742 bytes_per_frag -= crypt->
ops->extra_mpdu_prefix_len +
743 crypt->
ops->extra_mpdu_postfix_len +
744 crypt->
ops->extra_msdu_prefix_len +
745 crypt->
ops->extra_msdu_postfix_len;
749 nr_frags = bytes / bytes_per_frag;
750 bytes_last_frag = bytes % bytes_per_frag;
754 bytes_last_frag = bytes_per_frag;
759 txb = rtllib_alloc_txb(nr_frags, frag_size +
774 for (i = 0; i < nr_frags; i++) {
776 tcb_desc = (
struct cb_desc *)(skb_frag->cb +
792 skb_reserve(skb_frag,
793 crypt->
ops->extra_mpdu_prefix_len +
794 crypt->
ops->extra_msdu_prefix_len);
800 memcpy(frag_hdr, &header, hdr_len);
804 if (i != nr_frags - 1) {
807 bytes = bytes_per_frag;
811 bytes = bytes_last_frag;
813 if ((qos_actived) && (!bIsMulticast)) {
827 sizeof(
u16)), ether_type);
847 if ((qos_actived) && (!bIsMulticast)) {
861 ieee->
dev->name, skb->
len);
900 if (is_multicast_ether_addr(header.
addr1))
902 if (is_broadcast_ether_addr(header.
addr1))
904 rtllib_txrate_selectmode(ieee, tcb_desc);
928 rtllib_qurey_ShortPreambleMode(ieee, tcb_desc);
929 rtllib_tx_query_agg_cap(ieee, txb->
fragments[0],
931 rtllib_query_HTCapShortGI(ieee, tcb_desc);
932 rtllib_query_BandwidthMode(ieee, tcb_desc);
933 rtllib_query_protectionmode(ieee, tcb_desc,
937 spin_unlock_irqrestore(&ieee->
lock, flags);
941 dev->
stats.tx_packets++;
957 spin_unlock_irqrestore(&ieee->
lock, flags);
958 netif_stop_queue(dev);
965 memset(skb->cb, 0,
sizeof(skb->cb));