diff -ur ../rt2500-cvs-20051008/Module/rtmp_data.c ./Module/rtmp_data.c
--- ../rt2500-cvs-20051008/Module/rtmp_data.c	2005-10-06 04:53:08.000000000 +0200
+++ ./Module/rtmp_data.c	2005-11-05 01:20:02.000000000 +0100
@@ -50,6 +50,7 @@
 	 0, /* RATE_1 */    1, /* RATE_2 */     2, /* RATE_5_5 */   3, /* RATE_11 */    // see BBP spec
 	11, /* RATE_6 */   15, /* RATE_9 */    10, /* RATE_12 */   14, /* RATE_18 */    // see IEEE802.11a-1999 p.14
 	 9, /* RATE_24 */  13, /* RATE_36 */    8, /* RATE_48 */    12  /* RATE_54 */ }; // see IEEE802.11a-1999 p.14
+static	UINT	_11G_RATES[12] = { 0, 0, 0, 0, 6, 9, 12, 18, 24, 36, 48, 54 };
 	 
 #define COLLECT_RX_ANTENNA_AVERAGE_RSSI(_pAd, _RxAnt, _rssi)      \
 {                                                           \
@@ -1132,9 +1133,61 @@
  		if (pAdapter->PortCfg.BssType == BSS_MONITOR)
          	{
  	            struct sk_buff  *skb;
+		    wlan_ng_prism2_header *ph;
  	
  	            if ((skb = __dev_alloc_skb(2048, GFP_DMA|GFP_ATOMIC)) != NULL)
  	            {
+			// setup the wlan-ng prismheader
+
+			if (skb_headroom(skb) < sizeof(wlan_ng_prism2_header))
+				pskb_expand_head(skb, sizeof(wlan_ng_prism2_header), 0, GFP_ATOMIC);
+
+			ph = (wlan_ng_prism2_header *)
+				skb_push(skb, sizeof(wlan_ng_prism2_header));
+			memset(ph, 0, sizeof(wlan_ng_prism2_header));
+
+			ph->msgcode		= DIDmsg_lnxind_wlansniffrm;
+			ph->msglen		= sizeof(wlan_ng_prism2_header);
+			strcpy(ph->devname, pAdapter->net_dev->name);
+
+			ph->hosttime.did	= DIDmsg_lnxind_wlansniffrm_hosttime;
+			ph->mactime.did		= DIDmsg_lnxind_wlansniffrm_mactime;
+			ph->channel.did		= DIDmsg_lnxind_wlansniffrm_channel;
+			ph->rssi.did		= DIDmsg_lnxind_wlansniffrm_rssi;
+			ph->signal.did		= DIDmsg_lnxind_wlansniffrm_signal;
+			ph->noise.did		= DIDmsg_lnxind_wlansniffrm_noise;
+			ph->rate.did		= DIDmsg_lnxind_wlansniffrm_rate;
+			ph->istx.did		= DIDmsg_lnxind_wlansniffrm_istx;
+			ph->frmlen.did		= DIDmsg_lnxind_wlansniffrm_frmlen;
+
+			ph->hosttime.len	= 4;
+			ph->mactime.len		= 4;
+			ph->channel.len		= 4;
+			ph->rssi.len		= 4;
+			ph->signal.len		= 4;
+			ph->noise.len		= 4;
+			ph->rate.len		= 4;
+			ph->istx.len		= 4;
+			ph->frmlen.len		= 4;
+
+			ph->hosttime.data	= jiffies;
+			ph->signal.data		= pRxD->BBR1;
+			ph->channel.data	= pAdapter->PortCfg.IbssConfig.Channel;
+			ph->noise.data		= pAdapter->PortCfg.LastR17Value;
+			ph->rssi.data		= ph->signal.data - ph->noise.data;
+			ph->frmlen.data		= pRxD->DataByteCnt;
+
+			if (pRxD->Ofdm == 1)
+			{
+				for (i = 4; i < 12; i++)
+					if (pRxD->BBR0 == PlcpSignal[i])
+						ph->rate.data = _11G_RATES[i] * 2;
+			}
+			else
+				ph->rate.data = pRxD->BBR0 / 5;
+
+			// end prismheader setup
+
  	                skb->dev = pAdapter->net_dev;
  	                memcpy(skb_put(skb, pRxD->DataByteCnt), pData, pRxD->DataByteCnt);
  	                skb->mac.raw = skb->data;
diff -ur ../rt2500-cvs-20051008/Module/rtmp.h ./Module/rtmp.h
--- ../rt2500-cvs-20051008/Module/rtmp.h	2005-10-06 04:53:08.000000000 +0200
+++ ./Module/rtmp.h	2005-10-09 00:10:27.000000000 +0200
@@ -2549,4 +2549,54 @@
        IN      ULONG                   DescriptorType);
 #endif
 
+#ifndef _PRISMHEADER
+#define _PRISMHEADER
+
+enum {
+	DIDmsg_lnxind_wlansniffrm		= 0x00000044,
+	DIDmsg_lnxind_wlansniffrm_hosttime	= 0x00010044,
+	DIDmsg_lnxind_wlansniffrm_mactime	= 0x00020044,
+	DIDmsg_lnxind_wlansniffrm_channel	= 0x00030044,
+	DIDmsg_lnxind_wlansniffrm_rssi		= 0x00040044,
+	DIDmsg_lnxind_wlansniffrm_sq		= 0x00050044,
+	DIDmsg_lnxind_wlansniffrm_signal	= 0x00060044,
+	DIDmsg_lnxind_wlansniffrm_noise		= 0x00070044,
+	DIDmsg_lnxind_wlansniffrm_rate		= 0x00080044,
+	DIDmsg_lnxind_wlansniffrm_istx		= 0x00090044,
+	DIDmsg_lnxind_wlansniffrm_frmlen	= 0x000A0044
+};
+enum {
+	P80211ENUM_msgitem_status_no_value	= 0x00
+};
+enum {
+	P80211ENUM_truth_false			= 0x00,
+	P80211ENUM_truth_true			= 0x01
+};
+
+typedef struct {
+	u_int32_t did;
+	u_int16_t status;
+	u_int16_t len;
+	u_int32_t data;
+} p80211item_uint32_t;
+
+typedef struct {
+	u_int32_t msgcode;
+	u_int32_t msglen;
+#define WLAN_DEVNAMELEN_MAX 16
+	u_int8_t devname[WLAN_DEVNAMELEN_MAX];
+	p80211item_uint32_t hosttime;
+	p80211item_uint32_t mactime;
+	p80211item_uint32_t channel;
+	p80211item_uint32_t rssi;
+	p80211item_uint32_t sq;
+	p80211item_uint32_t signal;
+	p80211item_uint32_t noise;
+	p80211item_uint32_t rate;
+	p80211item_uint32_t istx;
+	p80211item_uint32_t frmlen;
+} wlan_ng_prism2_header;
+
+#endif
+
 #endif  // __RTMP_H__
diff -ur ../rt2500-cvs-20051008/Module/rtmp_info.c ./Module/rtmp_info.c
--- ../rt2500-cvs-20051008/Module/rtmp_info.c	2005-10-06 04:53:08.000000000 +0200
+++ ./Module/rtmp_info.c	2005-10-09 00:07:51.000000000 +0200
@@ -1973,7 +1973,7 @@
             {
                 if (pAdapter->PortCfg.BssType == BSS_MONITOR)
                 {
-                    pAdapter->net_dev->type = 801;
+                    pAdapter->net_dev->type = 802; // ARPHRD_IEEE80211_PRISM
                     RTMP_IO_WRITE32(pAdapter, RXCSR0, 0x4e);
                 }
                 else
