nexmon – Blame information for rev 1

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 office 1 diff -ur linux-2.6.21-gentoo-orig/drivers/net/wireless/zd1211rw/zd_mac.c linux-2.6.21-gentoo-rawtx/drivers/net/wireless/zd1211rw/zd_mac.c
2 --- linux-2.6.21-gentoo-orig/drivers/net/wireless/zd1211rw/zd_mac.c 2007-04-27 17:23:31.000000000 -0400
3 +++ linux-2.6.21-gentoo-rawtx/drivers/net/wireless/zd1211rw/zd_mac.c 2007-04-27 18:32:21.000000000 -0400
4 @@ -201,7 +201,13 @@
5 goto disable_rx;
6  
7 housekeeping_enable(mac);
8 - ieee80211softmac_start(netdev);
9 + netif_carrier_on(netdev);
10 + ieee80211softmac_start(netdev);
11 + if(!netif_queue_stopped(netdev))
12 + netif_start_queue(netdev);
13 + else
14 + netif_wake_queue(netdev);
15 +
16 return 0;
17 disable_rx:
18 zd_chip_disable_rx(chip);
19 @@ -834,6 +840,7 @@
20 struct ieee80211_txb *txb,
21 int frag_num)
22 {
23 + struct ieee80211_device *ieee = zd_mac_to_ieee80211(mac);
24 int r;
25 struct sk_buff *skb = txb->fragments[frag_num];
26 struct ieee80211_hdr_4addr *hdr =
27 @@ -857,7 +864,10 @@
28  
29 cs->tx_length = cpu_to_le16(frag_len);
30  
31 - cs_set_control(mac, cs, hdr);
32 + if(ieee->iw_mode == IW_MODE_MONITOR)
33 + cs->control = ZD_CS_MULTICAST;
34 + else
35 + cs_set_control(mac, cs, hdr);
36  
37 packet_length = frag_len + sizeof(struct zd_ctrlset) + 10;
38 ZD_ASSERT(packet_length <= 0xffff);
39 @@ -913,7 +923,11 @@
40 ieee->stats.tx_dropped++;
41 return r;
42 }
43 - r = zd_usb_tx(&mac->chip.usb, skb->data, skb->len);
44 +
45 + if(ieee->iw_mode == IW_MODE_MONITOR)
46 + r = zd_usb_tx_inject(&mac->chip.usb, skb->data, skb->len);
47 + else
48 + r = zd_usb_tx(&mac->chip.usb, skb->data, skb->len);
49 if (r) {
50 ieee->stats.tx_dropped++;
51 return r;
52 @@ -933,6 +947,8 @@
53 u8 rt_rate;
54 u16 rt_channel;
55 u16 rt_chbitmask;
56 + u8 rt_antsignal;
57 + u8 rt_antnoise;
58 } __attribute__((packed));
59  
60 static void fill_rt_header(void *buffer, struct zd_mac *mac,
61 @@ -946,7 +962,9 @@
62 hdr->rt_hdr.it_len = cpu_to_le16(sizeof(struct zd_rt_hdr));
63 hdr->rt_hdr.it_present = cpu_to_le32((1 << IEEE80211_RADIOTAP_FLAGS) |
64 (1 << IEEE80211_RADIOTAP_CHANNEL) |
65 - (1 << IEEE80211_RADIOTAP_RATE));
66 + (1 << IEEE80211_RADIOTAP_RATE) |
67 + (1 << IEEE80211_RADIOTAP_DBM_ANTSIGNAL) |
68 + (1 << IEEE80211_RADIOTAP_DBM_ANTNOISE));
69  
70 hdr->rt_flags = 0;
71 if (status->decryption_type & (ZD_RX_WEP64|ZD_RX_WEP128|ZD_RX_WEP256))
72 @@ -960,6 +978,9 @@
73 hdr->rt_chbitmask = cpu_to_le16(IEEE80211_CHAN_2GHZ |
74 ((status->frame_status & ZD_RX_FRAME_MODULATION_MASK) ==
75 ZD_RX_OFDM ? IEEE80211_CHAN_OFDM : IEEE80211_CHAN_CCK));
76 +
77 + hdr->rt_antsignal = status->signal_strength;
78 + hdr->rt_antnoise = stats->noise;
79 }
80  
81 /* Returns 1 if the data packet is for us and 0 otherwise. */
82 @@ -1066,7 +1087,8 @@
83 const struct rx_status *status;
84  
85 *pstatus = status = zd_tail(buffer, length, sizeof(struct rx_status));
86 - if (status->frame_status & ZD_RX_ERROR) {
87 + if (status->frame_status & ZD_RX_ERROR
88 + || status->frame_status & ~0x21) {
89 struct ieee80211_device *ieee = zd_mac_to_ieee80211(mac);
90 ieee->stats.rx_errors++;
91 if (status->frame_status & ZD_RX_TIMEOUT_ERROR)
92 diff -ur linux-2.6.21-gentoo-orig/drivers/net/wireless/zd1211rw/zd_usb.c linux-2.6.21-gentoo-rawtx/drivers/net/wireless/zd1211rw/zd_usb.c
93 --- linux-2.6.21-gentoo-orig/drivers/net/wireless/zd1211rw/zd_usb.c 2007-04-27 17:23:31.000000000 -0400
94 +++ linux-2.6.21-gentoo-rawtx/drivers/net/wireless/zd1211rw/zd_usb.c 2007-04-27 17:59:07.000000000 -0400
95 @@ -63,6 +63,7 @@
96 { USB_DEVICE(0x13b1, 0x0024), .driver_info = DEVICE_ZD1211B },
97 { USB_DEVICE(0x0586, 0x340f), .driver_info = DEVICE_ZD1211B },
98 { USB_DEVICE(0x0baf, 0x0121), .driver_info = DEVICE_ZD1211B },
99 + { USB_DEVICE(0x083a, 0x4505), .driver_info = DEVICE_ZD1211B },
100 /* "Driverless" devices that need ejecting */
101 { USB_DEVICE(0x0ace, 0x2011), .driver_info = DEVICE_INSTALLER },
102 {}
103 @@ -773,6 +774,46 @@
104 return r;
105 }
106  
107 +/* Puts the frame on the USB endpoint. It doesn't wait for
108 + * completion. The frame must contain the control set.
109 + */
110 +int zd_usb_tx_inject(struct zd_usb *usb, const u8 *frame, unsigned int length)
111 +{
112 + int r;
113 + struct usb_device *udev = zd_usb_to_usbdev(usb);
114 + struct urb *urb;
115 + void *buffer;
116 +
117 + urb = usb_alloc_urb(0, GFP_ATOMIC);
118 + if (!urb) {
119 + r = -ENOMEM;
120 + goto out;
121 + }
122 +
123 + buffer = usb_buffer_alloc(zd_usb_to_usbdev(usb), length, GFP_ATOMIC,
124 + &urb->transfer_dma);
125 + if (!buffer) {
126 + r = -ENOMEM;
127 + goto error_free_urb;
128 + }
129 + memcpy(buffer, frame, length);
130 +
131 + usb_fill_bulk_urb(urb, udev, usb_sndbulkpipe(udev, EP_DATA_OUT),
132 + buffer, length, tx_urb_complete, NULL);
133 +
134 + r = usb_submit_urb(urb, GFP_ATOMIC);
135 + if (r)
136 + goto error;
137 + return 0;
138 +error:
139 + usb_buffer_free(zd_usb_to_usbdev(usb), length, buffer,
140 + urb->transfer_dma);
141 +error_free_urb:
142 + usb_free_urb(urb);
143 +out:
144 + return r;
145 +}
146 +
147 static inline void init_usb_interrupt(struct zd_usb *usb)
148 {
149 struct zd_usb_interrupt *intr = &usb->intr;
150 diff -ur linux-2.6.21-gentoo-orig/drivers/net/wireless/zd1211rw/zd_usb.h linux-2.6.21-gentoo-rawtx/drivers/net/wireless/zd1211rw/zd_usb.h
151 --- linux-2.6.21-gentoo-orig/drivers/net/wireless/zd1211rw/zd_usb.h 2007-04-27 17:23:31.000000000 -0400
152 +++ linux-2.6.21-gentoo-rawtx/drivers/net/wireless/zd1211rw/zd_usb.h 2007-04-27 18:01:02.000000000 -0400
153 @@ -221,6 +221,7 @@
154 void zd_usb_disable_rx(struct zd_usb *usb);
155  
156 int zd_usb_tx(struct zd_usb *usb, const u8 *frame, unsigned int length);
157 +int zd_usb_tx_inject(struct zd_usb *usb, const u8 *frame, unsigned int length);
158  
159 int zd_usb_ioread16v(struct zd_usb *usb, u16 *values,
160 const zd_addr_t *addresses, unsigned int count);