nexmon – Blame information for rev 1
?pathlinks?
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); |