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>
33 #include <net/iw_handler.h>
38 //extern struct zsWdsStruct wds[ZM_WDS_PORT_NUMBER];
39 extern struct zsVapStruct vap
[ZM_VAP_PORT_NUMBER
];
43 void zfLnxRecv80211(zdev_t
* dev
, zbuf_t
* buf
, struct zsAdditionInfo
* addInfo
)
49 struct usbdrv_private
*macp
= dev
->ml_priv
;
51 //frameCtrl = zmw_buf_readb(dev, buf, 0);
52 frameCtrl
= *(u8_t
*)((u8_t
*)buf
->data
);
53 frameType
= frameCtrl
& 0xf;
54 frameSubtype
= frameCtrl
& 0xf0;
56 if ((frameType
== 0x0) && (macp
->forwardMgmt
))
64 skb1
= skb_copy(buf
, GFP_ATOMIC
);
68 skb1
->mac_header
= skb1
->data
;
69 skb1
->ip_summed
= CHECKSUM_NONE
;
70 skb1
->pkt_type
= PACKET_OTHERHOST
;
71 skb1
->protocol
= __constant_htons(0x0019); /* ETH_P_80211_RAW */
80 zfiRecv80211(dev
, buf
, addInfo
);
84 #define ZM_AVOID_UDP_LARGE_PACKET_FAIL
85 void zfLnxRecvEth(zdev_t
* dev
, zbuf_t
* buf
, u16_t port
)
87 struct usbdrv_private
*macp
= dev
->ml_priv
;
88 #ifdef ZM_AVOID_UDP_LARGE_PACKET_FAIL
91 //new_buf = dev_alloc_skb(2048);
92 new_buf
= dev_alloc_skb(buf
->len
);
94 #ifdef NET_SKBUFF_DATA_USES_OFFSET
98 new_buf
->tail
= new_buf
->data
;
102 skb_put(new_buf
, buf
->len
);
103 memcpy(new_buf
->data
, buf
->data
, buf
->len
);
106 dev_kfree_skb_any(buf
);
111 new_buf
->protocol
= eth_type_trans(new_buf
, dev
);
116 if (vap
[0].dev
!= NULL
)
118 new_buf
->dev
= vap
[0].dev
;
119 new_buf
->protocol
= eth_type_trans(new_buf
, vap
[0].dev
);
124 new_buf
->protocol
= eth_type_trans(new_buf
, dev
);
128 new_buf
->ip_summed
= CHECKSUM_NONE
;
129 dev
->last_rx
= jiffies
;
131 switch(netif_rx(new_buf
))
136 buf
->protocol
= eth_type_trans(buf
, dev
);
141 if (vap
[0].dev
!= NULL
)
143 buf
->dev
= vap
[0].dev
;
144 buf
->protocol
= eth_type_trans(buf
, vap
[0].dev
);
149 buf
->protocol
= eth_type_trans(buf
, dev
);
153 buf
->ip_summed
= CHECKSUM_NONE
;
154 dev
->last_rx
= jiffies
;
156 switch(netif_rx(buf
))
165 macp
->drv_stats
.net_stats
.rx_packets
++;
166 macp
->drv_stats
.net_stats
.rx_bytes
+= buf
->len
;
173 /* Leave an empty line below to remove warning message on some compiler */