2 * Copyright (c) 2007-2008 Atheros Communications Inc.
4 * Permission to use, copy, modify, and/or distribute this software for any
5 * purpose with or without fee is hereby granted, provided that the above
6 * copyright notice and this permission notice appear in all copies.
8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 /* Module Name : wrap_pkt.c */
20 /* This module contains wrapper functions for packet handling */
23 /* Platform dependent. */
25 /************************************************************************/
30 #include <linux/netlink.h>
31 #include <net/iw_handler.h>
34 //extern struct zsWdsStruct wds[ZM_WDS_PORT_NUMBER];
35 extern struct zsVapStruct vap
[ZM_VAP_PORT_NUMBER
];
39 void zfLnxRecv80211(zdev_t
* dev
, zbuf_t
* buf
, struct zsAdditionInfo
* addInfo
)
45 struct usbdrv_private
*macp
= dev
->ml_priv
;
47 //frameCtrl = zmw_buf_readb(dev, buf, 0);
48 frameCtrl
= *(u8_t
*)((u8_t
*)buf
->data
);
49 frameType
= frameCtrl
& 0xf;
50 frameSubtype
= frameCtrl
& 0xf0;
52 if ((frameType
== 0x0) && (macp
->forwardMgmt
))
60 skb1
= skb_copy(buf
, GFP_ATOMIC
);
64 skb1
->mac_header
= skb1
->data
;
65 skb1
->ip_summed
= CHECKSUM_NONE
;
66 skb1
->pkt_type
= PACKET_OTHERHOST
;
67 skb1
->protocol
= __constant_htons(0x0019); /* ETH_P_80211_RAW */
76 zfiRecv80211(dev
, buf
, addInfo
);
80 #define ZM_AVOID_UDP_LARGE_PACKET_FAIL
81 void zfLnxRecvEth(zdev_t
* dev
, zbuf_t
* buf
, u16_t port
)
83 struct usbdrv_private
*macp
= dev
->ml_priv
;
84 #ifdef ZM_AVOID_UDP_LARGE_PACKET_FAIL
87 //new_buf = dev_alloc_skb(2048);
88 new_buf
= dev_alloc_skb(buf
->len
);
90 #ifdef NET_SKBUFF_DATA_USES_OFFSET
94 new_buf
->tail
= new_buf
->data
;
98 skb_put(new_buf
, buf
->len
);
99 memcpy(new_buf
->data
, buf
->data
, buf
->len
);
102 dev_kfree_skb_any(buf
);
107 new_buf
->protocol
= eth_type_trans(new_buf
, dev
);
112 if (vap
[0].dev
!= NULL
)
114 new_buf
->dev
= vap
[0].dev
;
115 new_buf
->protocol
= eth_type_trans(new_buf
, vap
[0].dev
);
120 new_buf
->protocol
= eth_type_trans(new_buf
, dev
);
124 new_buf
->ip_summed
= CHECKSUM_NONE
;
125 dev
->last_rx
= jiffies
;
127 switch(netif_rx(new_buf
))
132 buf
->protocol
= eth_type_trans(buf
, dev
);
137 if (vap
[0].dev
!= NULL
)
139 buf
->dev
= vap
[0].dev
;
140 buf
->protocol
= eth_type_trans(buf
, vap
[0].dev
);
145 buf
->protocol
= eth_type_trans(buf
, dev
);
149 buf
->ip_summed
= CHECKSUM_NONE
;
150 dev
->last_rx
= jiffies
;
152 switch(netif_rx(buf
))
158 macp
->drv_stats
.net_stats
.rx_packets
++;
159 macp
->drv_stats
.net_stats
.rx_bytes
+= buf
->len
;
166 /* Leave an empty line below to remove warning message on some compiler */