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