1diff -ur ../rt2500-cvs-20051008/Module/rtmp_data.c ./Module/rtmp_data.c
2--- ../rt2500-cvs-20051008/Module/rtmp_data.c	2005-10-06 04:53:08.000000000 +0200
3+++ ./Module/rtmp_data.c	2005-11-05 01:20:02.000000000 +0100
4@@ -50,6 +50,7 @@
5 	 0, /* RATE_1 */    1, /* RATE_2 */     2, /* RATE_5_5 */   3, /* RATE_11 */    // see BBP spec
6 	11, /* RATE_6 */   15, /* RATE_9 */    10, /* RATE_12 */   14, /* RATE_18 */    // see IEEE802.11a-1999 p.14
7 	 9, /* RATE_24 */  13, /* RATE_36 */    8, /* RATE_48 */    12  /* RATE_54 */ }; // see IEEE802.11a-1999 p.14
8+static	UINT	_11G_RATES[12] = { 0, 0, 0, 0, 6, 9, 12, 18, 24, 36, 48, 54 };
9
10 #define COLLECT_RX_ANTENNA_AVERAGE_RSSI(_pAd, _RxAnt, _rssi)      \
11 {                                                           \
12@@ -1132,9 +1133,61 @@
13  		if (pAdapter->PortCfg.BssType == BSS_MONITOR)
14          	{
15  	            struct sk_buff  *skb;
16+		    wlan_ng_prism2_header *ph;
17
18  	            if ((skb = __dev_alloc_skb(2048, GFP_DMA|GFP_ATOMIC)) != NULL)
19  	            {
20+			// setup the wlan-ng prismheader
21+
22+			if (skb_headroom(skb) < sizeof(wlan_ng_prism2_header))
23+				pskb_expand_head(skb, sizeof(wlan_ng_prism2_header), 0, GFP_ATOMIC);
24+
25+			ph = (wlan_ng_prism2_header *)
26+				skb_push(skb, sizeof(wlan_ng_prism2_header));
27+			memset(ph, 0, sizeof(wlan_ng_prism2_header));
28+
29+			ph->msgcode		= DIDmsg_lnxind_wlansniffrm;
30+			ph->msglen		= sizeof(wlan_ng_prism2_header);
31+			strcpy(ph->devname, pAdapter->net_dev->name);
32+
33+			ph->hosttime.did	= DIDmsg_lnxind_wlansniffrm_hosttime;
34+			ph->mactime.did		= DIDmsg_lnxind_wlansniffrm_mactime;
35+			ph->channel.did		= DIDmsg_lnxind_wlansniffrm_channel;
36+			ph->rssi.did		= DIDmsg_lnxind_wlansniffrm_rssi;
37+			ph->signal.did		= DIDmsg_lnxind_wlansniffrm_signal;
38+			ph->noise.did		= DIDmsg_lnxind_wlansniffrm_noise;
39+			ph->rate.did		= DIDmsg_lnxind_wlansniffrm_rate;
40+			ph->istx.did		= DIDmsg_lnxind_wlansniffrm_istx;
41+			ph->frmlen.did		= DIDmsg_lnxind_wlansniffrm_frmlen;
42+
43+			ph->hosttime.len	= 4;
44+			ph->mactime.len		= 4;
45+			ph->channel.len		= 4;
46+			ph->rssi.len		= 4;
47+			ph->signal.len		= 4;
48+			ph->noise.len		= 4;
49+			ph->rate.len		= 4;
50+			ph->istx.len		= 4;
51+			ph->frmlen.len		= 4;
52+
53+			ph->hosttime.data	= jiffies;
54+			ph->signal.data		= pRxD->BBR1;
55+			ph->channel.data	= pAdapter->PortCfg.IbssConfig.Channel;
56+			ph->noise.data		= pAdapter->PortCfg.LastR17Value;
57+			ph->rssi.data		= ph->signal.data - ph->noise.data;
58+			ph->frmlen.data		= pRxD->DataByteCnt;
59+
60+			if (pRxD->Ofdm == 1)
61+			{
62+				for (i = 4; i < 12; i++)
63+					if (pRxD->BBR0 == PlcpSignal[i])
64+						ph->rate.data = _11G_RATES[i] * 2;
65+			}
66+			else
67+				ph->rate.data = pRxD->BBR0 / 5;
68+
69+			// end prismheader setup
70+
71  	                skb->dev = pAdapter->net_dev;
72  	                memcpy(skb_put(skb, pRxD->DataByteCnt), pData, pRxD->DataByteCnt);
73  	                skb->mac.raw = skb->data;
74diff -ur ../rt2500-cvs-20051008/Module/rtmp.h ./Module/rtmp.h
75--- ../rt2500-cvs-20051008/Module/rtmp.h	2005-10-06 04:53:08.000000000 +0200
76+++ ./Module/rtmp.h	2005-10-09 00:10:27.000000000 +0200
77@@ -2549,4 +2549,54 @@
78        IN      ULONG                   DescriptorType);
79 #endif
80
81+#ifndef _PRISMHEADER
82+#define _PRISMHEADER
83+
84+enum {
85+	DIDmsg_lnxind_wlansniffrm		= 0x00000044,
86+	DIDmsg_lnxind_wlansniffrm_hosttime	= 0x00010044,
87+	DIDmsg_lnxind_wlansniffrm_mactime	= 0x00020044,
88+	DIDmsg_lnxind_wlansniffrm_channel	= 0x00030044,
89+	DIDmsg_lnxind_wlansniffrm_rssi		= 0x00040044,
90+	DIDmsg_lnxind_wlansniffrm_sq		= 0x00050044,
91+	DIDmsg_lnxind_wlansniffrm_signal	= 0x00060044,
92+	DIDmsg_lnxind_wlansniffrm_noise		= 0x00070044,
93+	DIDmsg_lnxind_wlansniffrm_rate		= 0x00080044,
94+	DIDmsg_lnxind_wlansniffrm_istx		= 0x00090044,
95+	DIDmsg_lnxind_wlansniffrm_frmlen	= 0x000A0044
96+};
97+enum {
98+	P80211ENUM_msgitem_status_no_value	= 0x00
99+};
100+enum {
101+	P80211ENUM_truth_false			= 0x00,
102+	P80211ENUM_truth_true			= 0x01
103+};
104+
105+typedef struct {
106+	u_int32_t did;
107+	u_int16_t status;
108+	u_int16_t len;
109+	u_int32_t data;
110+} p80211item_uint32_t;
111+
112+typedef struct {
113+	u_int32_t msgcode;
114+	u_int32_t msglen;
115+#define WLAN_DEVNAMELEN_MAX 16
116+	u_int8_t devname[WLAN_DEVNAMELEN_MAX];
117+	p80211item_uint32_t hosttime;
118+	p80211item_uint32_t mactime;
119+	p80211item_uint32_t channel;
120+	p80211item_uint32_t rssi;
121+	p80211item_uint32_t sq;
122+	p80211item_uint32_t signal;
123+	p80211item_uint32_t noise;
124+	p80211item_uint32_t rate;
125+	p80211item_uint32_t istx;
126+	p80211item_uint32_t frmlen;
127+} wlan_ng_prism2_header;
128+
129+#endif
130+
131 #endif  // __RTMP_H__
132diff -ur ../rt2500-cvs-20051008/Module/rtmp_info.c ./Module/rtmp_info.c
133--- ../rt2500-cvs-20051008/Module/rtmp_info.c	2005-10-06 04:53:08.000000000 +0200
134+++ ./Module/rtmp_info.c	2005-10-09 00:07:51.000000000 +0200
135@@ -1973,7 +1973,7 @@
136             {
137                 if (pAdapter->PortCfg.BssType == BSS_MONITOR)
138                 {
139-                    pAdapter->net_dev->type = 801;
140+                    pAdapter->net_dev->type = 802; // ARPHRD_IEEE80211_PRISM
141                     RTMP_IO_WRITE32(pAdapter, RXCSR0, 0x4e);
142                 }
143                 else
144