[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#385553: Bug#484019: Bug#385553: linux-modules-extra-2.6: Please provide pre-built ndiswrapper modules



Hi Jak, Daniel,

(Dropped Bart from CC)

On Thursday 10 July 2008 05:16:20 Daniel Baumann wrote:
> Julian Andres Klode wrote:
> > Sorry, I wasn't at home in the last 2 weeks. Should get uploaded this
> > week. I will do some final builds and tests and see if my AM sponsors it,
> > else I will look for another sponsor.

No worries, I figured you were busy with life.

> 
> take your time - there won't be a 2.6.25 upload anymore anyways; please
> directly head for 2.6.26.

The following patch will be required for 2.6.26, it has been submitted to
ndiswrapper upstream and requires testing. Jak, pick it up if you like.

Thanks, Kel.
---
Adapt to Linux 2.6.26 WEXT API change.

Add compat defines for iwe_stream_add_{event,point,value}() and
iwe_stream_lcp_len() in reaction to change in WEXT API [0] of Linux 2.6.26.

Based on patches committed to Madwifi [1,2].

[0] http://git.kernel.org/?p=linux/kernel/git/davem/wireless-2.6.git;a=commitdiff;h=ccc580571cf0799d0460a085a7632b77753f083e
[1] http://madwifi.org/changeset/3750
[2] http://madwifi.org/changeset/3760

Signed-off-by: Kel Modderman <kel@otaku42.de>
---
--- a/driver/iw_ndis.c
+++ b/driver/iw_ndis.c
@@ -1015,7 +1015,16 @@
 	return 0;
 }
 
-static char *ndis_translate_scan(struct net_device *dev, char *event,
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 26)
+#define	iwe_stream_add_event(a, b, c, d, e)	iwe_stream_add_event(b, c, d, e)
+#define	iwe_stream_add_point(a, b, c, d, e)	iwe_stream_add_point(b, c, d, e)
+#define	iwe_stream_add_value(a, b, c, d, e, f)	\
+	iwe_stream_add_value(b, c, d, e, f)
+#define	iwe_stream_lcp_len(...)			IW_EV_LCP_LEN
+#endif
+
+static char *ndis_translate_scan(struct net_device *dev,
+				 struct iw_request_info *info, char *event,
 				 char *end_buf, void *item)
 {
 	struct iw_event iwe;
@@ -1034,7 +1043,8 @@
 	iwe.u.ap_addr.sa_family = ARPHRD_ETHER;
 	iwe.len = IW_EV_ADDR_LEN;
 	memcpy(iwe.u.ap_addr.sa_data, bssid->mac, ETH_ALEN);
-	event = iwe_stream_add_event(event, end_buf, &iwe, IW_EV_ADDR_LEN);
+	event = iwe_stream_add_event(info, event, end_buf, &iwe,
+				     IW_EV_ADDR_LEN);
 
 	/* add essid */
 	memset(&iwe, 0, sizeof(iwe));
@@ -1044,13 +1054,15 @@
 		iwe.u.data.length = IW_ESSID_MAX_SIZE;
 	iwe.u.data.flags = 1;
 	iwe.len = IW_EV_POINT_LEN + iwe.u.data.length;
-	event = iwe_stream_add_point(event, end_buf, &iwe, bssid->ssid.essid);
+	event = iwe_stream_add_point(info, event, end_buf, &iwe,
+				     bssid->ssid.essid);
 
 	/* add protocol name */
 	memset(&iwe, 0, sizeof(iwe));
 	iwe.cmd = SIOCGIWNAME;
 	strncpy(iwe.u.name, network_type_to_name(bssid->net_type), IFNAMSIZ);
-	event = iwe_stream_add_event(event, end_buf, &iwe, IW_EV_CHAR_LEN);
+	event = iwe_stream_add_event(info, event, end_buf, &iwe,
+				     IW_EV_CHAR_LEN);
 
 	/* add mode */
 	memset(&iwe, 0, sizeof(iwe));
@@ -1061,7 +1073,8 @@
 		iwe.u.mode = IW_MODE_INFRA;
 	else // if (bssid->mode == Ndis802_11AutoUnknown)
 		iwe.u.mode = IW_MODE_AUTO;
-	event = iwe_stream_add_event(event, end_buf, &iwe, IW_EV_UINT_LEN);
+	event = iwe_stream_add_event(info, event, end_buf, &iwe,
+				     IW_EV_UINT_LEN);
 
 	/* add freq */
 	memset(&iwe, 0, sizeof(iwe));
@@ -1076,7 +1089,8 @@
 	/* convert from kHz to Hz */
 	iwe.u.freq.e += 3;
 	iwe.len = IW_EV_FREQ_LEN;
-	event = iwe_stream_add_event(event, end_buf, &iwe, IW_EV_FREQ_LEN);
+	event = iwe_stream_add_event(info, event, end_buf, &iwe,
+				     IW_EV_FREQ_LEN);
 
 	/* add qual */
 	memset(&iwe, 0, sizeof(iwe));
@@ -1090,7 +1104,8 @@
 	iwe.u.qual.noise = WL_NOISE;
 	iwe.u.qual.qual  = i;
 	iwe.len = IW_EV_QUAL_LEN;
-	event = iwe_stream_add_event(event, end_buf, &iwe, IW_EV_QUAL_LEN);
+	event = iwe_stream_add_event(info, event, end_buf, &iwe,
+				     IW_EV_QUAL_LEN);
 
 	/* add key info */
 	memset(&iwe, 0, sizeof(iwe));
@@ -1101,11 +1116,12 @@
 		iwe.u.data.flags = IW_ENCODE_ENABLED | IW_ENCODE_NOKEY;
 	iwe.u.data.length = 0;
 	iwe.len = IW_EV_POINT_LEN;
-	event = iwe_stream_add_point(event, end_buf, &iwe, bssid->ssid.essid);
+	event = iwe_stream_add_point(info, event, end_buf, &iwe,
+				     bssid->ssid.essid);
 
 	/* add rate */
 	memset(&iwe, 0, sizeof(iwe));
-	current_val = event + IW_EV_LCP_LEN;
+	current_val = event + iwe_stream_lcp_len(info);
 	iwe.cmd = SIOCGIWRATE;
 	if (bssid->length > sizeof(*bssid))
 		nrates = NDIS_MAX_RATES_EX;
@@ -1115,26 +1131,27 @@
 		if (bssid->rates[i] & 0x7f) {
 			iwe.u.bitrate.value = ((bssid->rates[i] & 0x7f) *
 					       500000);
-			current_val = iwe_stream_add_value(event, current_val,
+			current_val = iwe_stream_add_value(info, event,
+							   current_val,
 							   end_buf, &iwe,
 							   IW_EV_PARAM_LEN);
 		}
 	}
 
-	if ((current_val - event) > IW_EV_LCP_LEN)
+	if ((current_val - event) > iwe_stream_lcp_len(info))
 		event = current_val;
 
 	memset(&iwe, 0, sizeof(iwe));
 	iwe.cmd = IWEVCUSTOM;
 	sprintf(buf, "bcn_int=%d", bssid->config.beacon_period);
 	iwe.u.data.length = strlen(buf);
-	event = iwe_stream_add_point(event, end_buf, &iwe, buf);
+	event = iwe_stream_add_point(info, event, end_buf, &iwe, buf);
 
 	memset(&iwe, 0, sizeof(iwe));
 	iwe.cmd = IWEVCUSTOM;
 	sprintf(buf, "atim=%u", bssid->config.atim_window);
 	iwe.u.data.length = strlen(buf);
-	event = iwe_stream_add_point(event, end_buf, &iwe, buf);
+	event = iwe_stream_add_point(info, event, end_buf, &iwe, buf);
 
 	TRACE2("%d, %u", bssid->length, (unsigned int)sizeof(*bssid));
 	if (bssid->length > sizeof(*bssid)) {
@@ -1155,8 +1172,9 @@
 				memset(&iwe, 0, sizeof(iwe));
 				iwe.cmd = IWEVGENIE;
 				iwe.u.data.length = ielen;
-				event = iwe_stream_add_point(event, end_buf,
-							     &iwe, iep);
+				event = iwe_stream_add_point(info, event,
+							     end_buf, &iwe,
+							     iep);
 			}
 			iep += ielen;
 		}
@@ -1236,7 +1254,7 @@
 	TRACE2("%d", bssid_list->num_items);
 	cur_item = &bssid_list->bssid[0];
 	for (i = 0; i < bssid_list->num_items; i++) {
-		event = ndis_translate_scan(dev, event,
+		event = ndis_translate_scan(dev, info, event,
 					    extra + IW_SCAN_MAX_DATA, cur_item);
 		cur_item = (struct ndis_wlan_bssid *)((char *)cur_item +
 						      cur_item->length);
---



Reply to: