Your message dated Sun, 26 Aug 2007 10:47:03 +0000
with message-id <[EMAIL PROTECTED]>
and subject line Bug#439442: fixed in acx100 20070101-1
has caused the attached Bug report to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what I am
talking about this indicates a serious mail system misconfiguration
somewhere.  Please contact me immediately.)

Debian bug tracking system administrator
(administrator, Debian Bugs database)

--- Begin Message ---
Package: acx100
Version: 20060521-3
Severity: normal
Tags: patch

Hi,

Attached is the diff for my acx100 20070101-1 NMU.

-- 
                                        With best regards,
                        Stanislav Kogut <[EMAIL PROTECTED]>
diff -Nru /tmp/wYqKdCn6l2/acx100-20060521/acx_config.h /tmp/DfExYlGbnH/acx100-20070101/acx_config.h
--- /tmp/wYqKdCn6l2/acx100-20060521/acx_config.h	2006-05-20 21:27:57.000000000 +0300
+++ /tmp/DfExYlGbnH/acx100-20070101/acx_config.h	2007-01-05 13:05:20.000000000 +0200
@@ -2,7 +2,7 @@
 #define CONFIG_ACX_PCI 1
 #define CONFIG_ACX_USB 1
 
-#define ACX_RELEASE "v0.3.35"
+#define ACX_RELEASE "v0.3.36"
 
 /* set to 0 if you don't want any debugging code to be compiled in */
 /* set to 1 if you want some debugging */
diff -Nru /tmp/wYqKdCn6l2/acx100-20060521/acx_func.h /tmp/DfExYlGbnH/acx100-20070101/acx_func.h
--- /tmp/wYqKdCn6l2/acx100-20060521/acx_func.h	2006-05-20 21:27:56.000000000 +0300
+++ /tmp/DfExYlGbnH/acx100-20070101/acx_func.h	2006-06-03 18:46:59.000000000 +0300
@@ -241,6 +241,13 @@
 }
 
 
+static inline int
+is_hidden_essid(char *essid)
+{
+	return (('\0' == essid[0]) ||
+		((' ' == essid[0]) && ('\0' == essid[1])));
+}
+
 /***********************************************************************
 ** LOCKING
 ** We have adev->sem and adev->lock.
diff -Nru /tmp/wYqKdCn6l2/acx100-20060521/acx_struct.h /tmp/DfExYlGbnH/acx100-20070101/acx_struct.h
--- /tmp/wYqKdCn6l2/acx100-20060521/acx_struct.h	2006-05-20 21:27:59.000000000 +0300
+++ /tmp/DfExYlGbnH/acx100-20070101/acx_struct.h	2006-08-13 23:49:57.000000000 +0300
@@ -298,12 +298,12 @@
 DEF_IE(1xx_IE_DOT11_MAX_XMIT_MSDU_LIFETIME	,0x1008, 0x04);
 DEF_IE(1xx_IE_DOT11_GROUP_ADDR		,0x1009, -1);
 DEF_IE(1xx_IE_DOT11_CURRENT_REG_DOMAIN	,0x100a, 0x02);
-//It's harmless to have larger struct. Use USB case always.
+/* It's harmless to have larger struct. Use USB case always. */
 DEF_IE(1xx_IE_DOT11_CURRENT_ANTENNA	,0x100b, 0x02);	/* in fact len=1 for PCI */
 DEF_IE(1xx_IE_DOT11_UNKNOWN_100C	,0x100c, -1);	/* mapped to cfgInvalid in FW150 */
 DEF_IE(1xx_IE_DOT11_TX_POWER_LEVEL	,0x100d, 0x01); /* TNETW1450 has length 2!! */
 DEF_IE(1xx_IE_DOT11_CURRENT_CCA_MODE	,0x100e, 0x02);	/* in fact len=1 for PCI */
-//USB doesn't return anything - len==0?!
+/* USB doesn't return anything - len==0?! */
 DEF_IE(100_IE_DOT11_ED_THRESHOLD	,0x100f, 0x04);
 DEF_IE(1xx_IE_DOT11_WEP_DEFAULT_KEY_SET	,0x1010, 0x01);	/* set default key ID; TNETW1450: length 2 */
 DEF_IE(100_IE_DOT11_UNKNOWN_1011	,0x1011, -1);	/* mapped to cfgInvalid in FW150 */
@@ -495,7 +495,7 @@
 
 /* I've hoped it's a 802.11 PHY header, but no...
  * so far, I've seen on acx111:
- * 0000 3a00 0000 0000 IBBS Beacons
+ * 0000 3a00 0000 0000 IBSS Beacons
  * 0000 3c00 0000 0000 ESS Beacons
  * 0000 2700 0000 0000 Probe requests
  * --vda
diff -Nru /tmp/wYqKdCn6l2/acx100-20060521/Changelog /tmp/DfExYlGbnH/acx100-20070101/Changelog
--- /tmp/wYqKdCn6l2/acx100-20060521/Changelog	2006-05-20 21:27:59.000000000 +0300
+++ /tmp/DfExYlGbnH/acx100-20070101/Changelog	2007-01-11 00:03:44.000000000 +0200
@@ -104,6 +104,31 @@
 13:14:13 wlan0: tx error 0x20, buf 07!
 13:14:13 wlan0: tx error 0x20, buf 08!
 
+[20070101] 0.3.36
+* Andreas Mohr <[EMAIL PROTECTED]>
+  - cope with *tons* of Linux kernel API changes (via added version checks):
+    - linux/utsrelease.h required in 2.6.18
+    - linux/config.h include removal in 2.6.19
+    - pt_regs interrupt handler arg removal in 2.6.19
+    - INIT_WORK() change in 2.6.20-rc1-git1
+    - "ESSID last char missing" API change in WE-21
+    If anything fails to work for a real non-prerelease mainline kernel version
+    (supported ones, that is: >= 2.6.10), then please yell immediately!
+    Those people *REALLY* want me to concentrate on getting this stuff ready for
+    mainline, it seems...
+  - MAC address change fix (contributed by Carlos MartМn Nieto/Luis Padilla)
+  - fix iwlist wlan0 scan output (updated wrong pointer variable --> only one single rate value listed, doh!)
+  - fix buggy hidden ESSID handling (didn't cover all variants in all places)
+  - corrected(?) duration/sequence values in assoc steps handling
+  - use ioremap_nocache() instead of ioremap() (safer)
+  - add another TNETW1450 USB ID
+  - FIX buggy "correction" of medium busy percentage log message
+  - small /proc/driver/acx_wlan0_diag addition
+  - much more verbose firmware image query log message
+  - updated format of main hardware status log message
+  - slightly enhanced Reason Code log messages
+  - minor cleanup
+
 [20060518]
 * Fix warnings about packed structs and printf format mismatches.
   Fix "implicit declaration of function dma_free_coherent" warning.
diff -Nru /tmp/wYqKdCn6l2/acx100-20060521/common.c /tmp/DfExYlGbnH/acx100-20070101/common.c
--- /tmp/wYqKdCn6l2/acx100-20060521/common.c	2006-05-20 21:27:58.000000000 +0300
+++ /tmp/DfExYlGbnH/acx100-20070101/common.c	2007-08-25 09:08:44.000000000 +0300
@@ -30,8 +30,10 @@
 ** ---------------------------------------------------------------------
 */
 
-#include <linux/config.h>
 #include <linux/version.h>
+#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 18)
+#include <linux/config.h>
+#endif
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/sched.h>
@@ -501,8 +503,8 @@
 	/* 9 */	"reserved",
 	/*10 */	"Cannot support all requested capabilities in Capability Information field",
 	/*11 */	"Reassoc denied (reason outside of 802.11b scope)",
-	/*12 */	"Assoc denied (reason outside of 802.11b scope), maybe MAC filtering by peer?",
-	/*13 */	"Responding station doesnt support specified auth algorithm",
+	/*12 */	"Assoc denied (reason outside of 802.11b scope) -- maybe MAC filtering by peer?",
+	/*13 */	"Responding station doesnt support specified auth algorithm -- maybe WEP auth Open vs. Restricted?",
 	/*14 */	"Auth rejected: wrong transaction sequence number",
 	/*15 */	"Auth rejected: challenge failure",
 	/*16 */	"Auth rejected: timeout for next frame in sequence",
@@ -619,8 +621,8 @@
 		}
 
 		adev->firmware_numver = (u32)(
-				(hexarr[0] << 24) + (hexarr[1] << 16)
-				+ (hexarr[2] << 8) + hexarr[3]);
+				(hexarr[0] << 24) | (hexarr[1] << 16)
+				| (hexarr[2] << 8) | hexarr[3]);
 		log(L_DEBUG, "firmware_numver 0x%08X\n", adev->firmware_numver);
 	}
 	if (IS_ACX111(adev)) {
@@ -718,12 +720,12 @@
 		break;
 	}
 
-	printk("acx: form factor 0x%02X (%s), "
-		"radio type 0x%02X (%s), EEPROM version 0x%02X, "
-		"uploaded firmware '%s' (0x%08X)\n",
-		adev->form_factor, form_str, adev->radio_type, radio_str,
-		adev->eeprom_version, adev->firmware_version,
-		adev->firmware_id);
+	printk("acx: === chipset %s, radio type 0x%02X (%s), "
+		"form factor 0x%02X (%s), EEPROM version 0x%02X: "
+		"uploaded firmware '%s' ===\n",
+		adev->chip_name, adev->radio_type, radio_str,
+		adev->form_factor, form_str, adev->eeprom_version,
+		adev->firmware_version);
 
 	FN_EXIT0;
 }
@@ -1203,10 +1205,12 @@
 		"** PHY status **\n"
 		"tx_disabled %d, tx_level_dbm %d\n" /* "tx_level_val %d, tx_level_auto %d\n" */
 		"sensitivity %d, antenna 0x%02X, ed_threshold %d, cca %d, preamble_mode %d\n"
+		"rate_basic 0x%04X, rate_oper 0x%04X\n"
 		"rts_threshold %d, frag_threshold %d, short_retry %d, long_retry %d\n"
 		"msdu_lifetime %d, listen_interval %d, beacon_interval %d\n",
 		adev->tx_disabled, adev->tx_level_dbm, /* adev->tx_level_val, adev->tx_level_auto, */
 		adev->sensitivity, adev->antenna, adev->ed_threshold, adev->cca, adev->preamble_mode,
+		adev->rate_basic, adev->rate_oper,
 		adev->rts_threshold, adev->frag_threshold, adev->short_retry, adev->long_retry,
 		adev->msdu_lifetime, adev->listen_interval, adev->beacon_interval);
 
@@ -2749,8 +2753,11 @@
 
 	skb->dev = adev->ndev;
 	skb->dev->last_rx = jiffies;
-
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22)
+	skb_reset_mac_header(skb);
+#else
 	skb->mac.raw = skb->data;
+#endif
 	skb->ip_summed = CHECKSUM_NONE;
 	skb->pkt_type = PACKET_OTHERHOST;
 	skb->protocol = htons(ETH_P_80211_RAW);
@@ -4581,7 +4588,7 @@
 
 	/* People moan about this being too noisy at L_ASSOC */
 	log(L_DEBUG,
-		"found %s: ESSID='%s' ch=%d "
+		"found %s: ESSID=\"%s\" ch=%d "
 		"BSSID="MACSTR" caps=0x%04X SIR=%d SNR=%d\n",
 		(bss->cap_info & WF_MGMT_CAP_IBSS) ? "Ad-Hoc peer" : "AP",
 		bss->essid, bss->channel, MAC(bss->bssid), bss->cap_info,
@@ -4619,7 +4626,7 @@
 			** other candidates... */
 
 			printk("%s: association FAILED: peer sent "
-				"response code %d (%s)\n",
+				"Status Code %d (%s)\n",
 				adev->ndev->name, st, get_status_string(st));
 			res = NOT_OK;
 		}
@@ -4698,6 +4705,8 @@
 	seq = ieee2host16(*(req->auth_seq));
 	status = ieee2host16(*(req->status));
 
+	log(L_ASSOC, "auth algorithm %d, auth sequence %d, status %d\n", alg, seq, status);
+
 	ap = (adev->mode == ACX_MODE_3_AP);
 
 	if (adev->auth_alg <= 1) {
@@ -4708,8 +4717,6 @@
 			goto end;
 		}
 	}
-	log(L_ASSOC, "algorithm is ok\n");
-
 	if (ap) {
 		clt = acx_l_sta_list_get_or_add(adev, hdr->a2);
 		if (STA_LIST_ADD_CAN_FAIL && !clt) {
@@ -4729,7 +4736,6 @@
 
 	/* now check which step in the authentication sequence we are
 	 * currently in, and act accordingly */
-	log(L_ASSOC, "acx_process_authen auth seq step %d\n", seq);
 	switch (seq) {
 	case 1:
 		if (!ap)
@@ -4786,7 +4792,7 @@
 		acx_l_transmit_assoc_req(adev);
 		break;
 	}
-	result = NOT_OK;
+	result = OK;
 end:
 	FN_EXIT1(result);
 	return result;
@@ -4866,8 +4872,8 @@
 
 	FN_ENTER;
 
-	log(L_ASSOC, "sending authentication1 request, "
-		"awaiting response\n");
+	log(L_ASSOC, "sending authentication1 request (auth algo %d), "
+		"awaiting response\n", adev->auth_alg);
 
 	tx = acx_l_alloc_tx(adev);
 	if (!tx)
@@ -4880,7 +4886,9 @@
 	body = (void*)(head + 1);
 
 	head->fc = WF_FSTYPE_AUTHENi;
-	head->dur = host2ieee16(0x8000);
+	/* duration should be 0 instead of 0x8000 to have
+	 * the firmware calculate the value, right? */
+	head->dur = 0;
 	MAC_COPY(head->da, adev->bssid);
 	MAC_COPY(head->sa, adev->dev_addr);
 	MAC_COPY(head->bssid, adev->bssid);
@@ -4936,11 +4944,11 @@
 	body = (void*)(head + 1);
 
 	head->fc = WF_FSTYPE_AUTHENi;
-	head->dur = req->hdr->dur;
+	head->dur = 0 /* req->hdr->dur */;
 	MAC_COPY(head->da, req->hdr->a2);
 	MAC_COPY(head->sa, adev->dev_addr);
 	MAC_COPY(head->bssid, req->hdr->a3);
-	head->seq = req->hdr->seq;
+	head->seq = 0 /* req->hdr->seq */;
 
 	/* already in IEEE format, no endianness conversion */
 	body->auth_alg = *(req->auth_alg);
@@ -4992,8 +5000,11 @@
 	}
 	body = (void*)(head + 1);
 
+	/* add WF_FC_ISWEPi: auth step 3 needs to be encrypted */
 	head->fc = WF_FC_ISWEPi + WF_FSTYPE_AUTHENi;
 	/* FIXME: is this needed?? authen4 does it...
+	 * I think it's even wrong since we shouldn't re-use old
+	 * values but instead let the firmware calculate proper ones
 	head->dur = req->hdr->dur;
 	head->seq = req->hdr->seq;
 	*/
@@ -5040,11 +5051,11 @@
 	body = (void*)(head + 1);
 
 	head->fc = WF_FSTYPE_AUTHENi; /* 0xb0 */
-	head->dur = req->hdr->dur;
+	head->dur = 0 /* req->hdr->dur */;
 	MAC_COPY(head->da, req->hdr->a2);
 	MAC_COPY(head->sa, adev->dev_addr);
 	MAC_COPY(head->bssid, req->hdr->a3);
-	head->seq = req->hdr->seq;
+	head->seq = 0 /* req->hdr->seq  */;
 
 	/* already in IEEE format, no endianness conversion */
 	body->auth_alg = *(req->auth_alg);
@@ -5157,7 +5168,7 @@
 	/* calculate lengths */
 	packet_len = WLAN_HDR_A3_LEN + (p - body);
 
-	log(L_ASSOC, "association: requesting caps 0x%04X, ESSID '%s'\n",
+	log(L_ASSOC, "association: requesting caps 0x%04X, ESSID \"%s\"\n",
 		cap, adev->essid_for_assoc);
 
 	acx_l_tx_data(adev, tx, packet_len);
@@ -5274,7 +5285,7 @@
 		bss = &adev->sta_list[i];
 		if (!bss->used) continue;
 
-		log(L_ASSOC, "scan table: SSID='%s' CH=%d SIR=%d SNR=%d\n",
+		log(L_ASSOC, "scan table: SSID=\"%s\" CH=%d SIR=%d SNR=%d\n",
 			bss->essid, bss->channel, bss->sir, bss->snr);
 
 		if (!mac_is_bcast(adev->ap))
@@ -5351,9 +5362,7 @@
 			if (bss->channel == adev->channel)
 				break;
 		} else
-		if (!bss->essid[0]
-		 || ((' ' == bss->essid[0]) && !bss->essid[1])
-		) {
+		if (is_hidden_essid(bss->essid)) {
 			/* hmm, station with empty or single-space SSID:
 			 * using hidden SSID broadcast?
 			 */
@@ -5385,7 +5394,7 @@
 		bss = &adev->sta_list[idx_found];
 		adev->ap_client = bss;
 
-		if (bss->essid[0] == '\0') {
+		if (is_hidden_essid(bss->essid)) {
 			/* if the ESSID of the station we found is empty
 			 * (no broadcast), then use user-configured ESSID
 			 * instead */
@@ -6377,6 +6386,7 @@
 		u8 *paddr;
 
 		paddr = &stationID[4];
+		memcpy(adev->dev_addr, adev->ndev->dev_addr, ETH_ALEN);
 		for (i = 0; i < ETH_ALEN; i++) {
 			/* copy the MAC address we obtained when we noticed
 			 * that the ethernet iface's MAC changed
@@ -6784,7 +6794,7 @@
 				adev->ndev->name);
 			adev->recalib_msg_ratelimit++;
 			if (adev->recalib_msg_ratelimit == 5)
-				printk("disabling above message\n");
+				printk("disabling above message until next recalib\n");
 		}
 		return;
 	}
@@ -6821,11 +6831,18 @@
 	}
 }
 
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 20)
+static void
+acx_e_after_interrupt_task(struct work_struct *work)
+{
+	acx_device_t *adev = container_of(work, acx_device_t, after_interrupt_task);
+#else
 static void
 acx_e_after_interrupt_task(void *data)
 {
 	struct net_device *ndev = (struct net_device*)data;
 	acx_device_t *adev = ndev2adev(ndev);
+#endif
 
 	FN_ENTER;
 
@@ -6940,8 +6957,12 @@
 acx_init_task_scheduler(acx_device_t *adev)
 {
 	/* configure task scheduler */
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 20)
+	INIT_WORK(&adev->after_interrupt_task, acx_e_after_interrupt_task);
+#else
 	INIT_WORK(&adev->after_interrupt_task, acx_e_after_interrupt_task,
 			adev->ndev);
+#endif
 }
 
 
@@ -6962,7 +6983,7 @@
 	SET_BIT(adev->set_mask, SET_TEMPLATES|SET_STA_LIST|GETSET_WEP
 		|GETSET_TXPOWER|GETSET_ANTENNA|GETSET_ED_THRESH|GETSET_CCA
 		|GETSET_REG_DOMAIN|GETSET_MODE|GETSET_CHANNEL
-		|GETSET_TX|GETSET_RX);
+		|GETSET_TX|GETSET_RX|GETSET_STATION_ID);
 
 	log(L_INIT, "updating initial settings on iface activation\n");
 	acx_s_update_card_settings(adev);
diff -Nru /tmp/wYqKdCn6l2/acx100-20060521/conv.c /tmp/DfExYlGbnH/acx100-20070101/conv.c
--- /tmp/wYqKdCn6l2/acx100-20060521/conv.c	2006-05-20 21:27:57.000000000 +0300
+++ /tmp/DfExYlGbnH/acx100-20070101/conv.c	2007-01-09 23:27:43.000000000 +0200
@@ -30,8 +30,10 @@
 ** ---------------------------------------------------------------------
 */
 
-#include <linux/config.h>
 #include <linux/version.h>
+#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 18)
+#include <linux/config.h>
+#endif
 #include <linux/skbuff.h>
 #include <linux/if_arp.h>
 #include <linux/etherdevice.h>
diff -Nru /tmp/wYqKdCn6l2/acx100-20060521/debian/changelog /tmp/DfExYlGbnH/acx100-20070101/debian/changelog
--- /tmp/wYqKdCn6l2/acx100-20060521/debian/changelog	2007-08-25 09:08:44.000000000 +0300
+++ /tmp/DfExYlGbnH/acx100-20070101/debian/changelog	2007-08-25 09:08:44.000000000 +0300
@@ -1,3 +1,9 @@
+acx100 (20070101-1) unstable; urgency=low
+
+  * closes #405795
+
+ -- Stanislav V. Kogut <[EMAIL PROTECTED]>  Sat, 25 Aug 2007 08:35:17 +0300
+
 acx100 (20060521-3) unstable; urgency=low
 
   * Modified pci.h to enable building in 2.6.18. 
diff -Nru /tmp/wYqKdCn6l2/acx100-20060521/ioctl.c /tmp/DfExYlGbnH/acx100-20070101/ioctl.c
--- /tmp/wYqKdCn6l2/acx100-20060521/ioctl.c	2006-05-20 21:27:59.000000000 +0300
+++ /tmp/DfExYlGbnH/acx100-20070101/ioctl.c	2007-01-09 23:27:58.000000000 +0200
@@ -30,12 +30,14 @@
 ** ---------------------------------------------------------------------
 */
 
-#include <linux/config.h>
 #include <linux/version.h>
+#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 18)
+#include <linux/config.h>
+#endif
 #include <linux/kernel.h>
 #include <linux/types.h>
 #include <asm/io.h>
-//#include <asm/uaccess.h> /* required for 2.4.x kernels; verify_write() */
+/* #include <asm/uaccess.h> */ /* required for 2.4.x kernels; verify_write() */
 #include <linux/if_arp.h>
 #include <linux/wireless.h>
 #include <net/iw_handler.h>
@@ -568,7 +570,7 @@
 		if (rate & 1) {
 			iwe.u.bitrate.value = *p * 500000; /* units of 500kb/s */
 			log(L_IOCTL, "scan, rate: %d\n", iwe.u.bitrate.value);
-			ptr = iwe_stream_add_value(ptr, ptr_rate, end_buf,
+			ptr_rate = iwe_stream_add_value(ptr, ptr_rate, end_buf,
 						&iwe, IW_EV_PARAM_LEN);
 		}
 		rate >>= 1;
@@ -662,6 +664,12 @@
 	log(L_IOCTL, "set ESSID '%*s', length %d, flags 0x%04X\n",
 					len, extra, len, dwrq->flags);
 
+#if WIRELESS_EXT >= 21
+	/* WE 21 gives real ESSID strlen, not +1 (trailing zero):
+	 * see LKML "[patch] drivers/net/wireless: correct reported ssid lengths" */
+	len += 1;
+#endif
+
 	acx_sem_lock(adev);
 
 	/* ESSID disabled? */
@@ -2232,7 +2240,10 @@
 
 	usage.busytime = le32_to_cpu(usage.busytime);
 	usage.totaltime = le32_to_cpu(usage.totaltime);
-	printk("%s: average busy percentage since last invocation: %d%% "
+	
+	/* yes, this is supposed to be "Medium" (singular of media),
+	   not "average"! OK, reword the message to make it obvious... */
+	printk("%s: busy percentage of medium (since last invocation): %d%% "
 		"(%u of %u microseconds)\n",
 		ndev->name,
 		usage.busytime / ((usage.totaltime / 100) + 1),
diff -Nru /tmp/wYqKdCn6l2/acx100-20060521/patch.diff /tmp/DfExYlGbnH/acx100-20070101/patch.diff
--- /tmp/wYqKdCn6l2/acx100-20060521/patch.diff	1970-01-01 03:00:00.000000000 +0300
+++ /tmp/DfExYlGbnH/acx100-20070101/patch.diff	2007-08-25 09:08:44.000000000 +0300
@@ -0,0 +1,29 @@
+--- acx-20070101/pci.c.orig	2007-07-24 03:57:41.000000000 -0700
++++ acx-20070101/pci.c	2007-07-24 03:59:20.000000000 -0700
+@@ -2104,7 +2104,11 @@
+ /* TODO: pci_set_power_state(pdev, PCI_D0); ? */
+
+ 	/* request shared IRQ handler */
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,21)	
++	if (request_irq(ndev->irq, acxpci_i_interrupt, IRQF_SHARED, ndev->name, ndev)) {
++#else
+ 	if (request_irq(ndev->irq, acxpci_i_interrupt, SA_SHIRQ, ndev->name, ndev)) {
++#endif		
+ 		printk("%s: request_irq FAILED\n", ndev->name);
+ 		result = -EAGAIN;
+ 		goto done;
+--- acx-20070101/common.c.orig	2007-07-24 03:59:40.000000000 -0700
++++ acx-20070101/common.c	2007-07-24 04:01:23.000000000 -0700
+@@ -2753,8 +2753,11 @@
+ 
+ 	skb->dev = adev->ndev;
+ 	skb->dev->last_rx = jiffies;
+-
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22)
++	skb_reset_mac_header(skb);
++#else
+ 	skb->mac.raw = skb->data;
++#endif
+ 	skb->ip_summed = CHECKSUM_NONE;
+ 	skb->pkt_type = PACKET_OTHERHOST;
+ 	skb->protocol = htons(ETH_P_80211_RAW);
diff -Nru /tmp/wYqKdCn6l2/acx100-20060521/pci.c /tmp/DfExYlGbnH/acx100-20070101/pci.c
--- /tmp/wYqKdCn6l2/acx100-20060521/pci.c	2007-08-25 09:08:44.000000000 +0300
+++ /tmp/DfExYlGbnH/acx100-20070101/pci.c	2007-08-25 09:08:44.000000000 +0300
@@ -31,8 +31,16 @@
 */
 #define ACX_PCI 1
 
-#include <linux/config.h>
 #include <linux/version.h>
+#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 18)
+#include <linux/config.h>
+#endif
+
+/* Linux 2.6.18+ uses <linux/utsrelease.h> */
+#ifndef UTS_RELEASE
+#include <linux/utsrelease.h>
+#endif
+
 #include <linux/compiler.h> /* required for Lx 2.6.8 ?? */
 #include <linux/kernel.h>
 #include <linux/module.h>
@@ -51,9 +59,6 @@
 #include <linux/pm.h>
 #include <linux/vmalloc.h>
 #include <linux/dma-mapping.h>
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 18)
-#include <linux/utsrelease.h>
-#endif 
 
 #include "acx.h"
 
@@ -101,7 +106,11 @@
 /***********************************************************************
 */
 static void acxpci_i_tx_timeout(struct net_device *ndev);
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19)
+static irqreturn_t acxpci_i_interrupt(int irq, void *dev_id);
+#else
 static irqreturn_t acxpci_i_interrupt(int irq, void *dev_id, struct pt_regs *regs);
+#endif
 static void acxpci_i_set_multicast_list(struct net_device *ndev);
 
 static int acxpci_e_open(struct net_device *ndev);
@@ -626,6 +635,13 @@
 
 	FN_ENTER;
 
+	/* print exact chipset and radio ID to make sure people really get a clue on which files exactly they are supposed to provide,
+	 * since firmware loading is the biggest enduser PITA with these chipsets.
+	 * Not printing radio ID in 0xHEX in order to not confuse them into wrong file naming */
+	printk(	"acx: need to load firmware for acx1%02d chipset with radio ID %02x, please provide via firmware hotplug:\n"
+		"acx: either one file only (<c>ombined firmware image file, radio-specific) or two files (radio-less base image file *plus* separate <r>adio-specific extension file)\n",
+		IS_ACX111(adev)*11, adev->radio_type);
+
 	/* Try combined, then main image */
 	adev->need_radio_fw = 0;
 	snprintf(filename, sizeof(filename), "tiacx1%02dc%02X",
@@ -644,11 +660,11 @@
 
 	for (try = 1; try <= 5; try++) {
 		res = acxpci_s_write_fw(adev, fw_image, 0);
-		log(L_DEBUG|L_INIT, "acx_write_fw (main/combined):%d\n", res);
+		log(L_DEBUG|L_INIT, "acx_write_fw (main/combined): %d\n", res);
 		if (OK == res) {
 			res = acxpci_s_validate_fw(adev, fw_image, 0);
 			log(L_DEBUG|L_INIT, "acx_validate_fw "
-					"(main/combined):%d\n", res);
+					"(main/combined): %d\n", res);
 		}
 
 		if (OK == res) {
@@ -1517,12 +1533,21 @@
 		printk("acx: cannot reserve PCI memory region 2\n");
 		goto fail_request_mem_region2;
 	}
-	mem1 = ioremap(phymem1, mem_region1_size);
+	
+	/* this used to be ioremap(), but ioremap_nocache()
+	 * is much less risky, right? (and slower?)
+	 * FIXME: we may want to go back to cached variant if it's
+	 * certain that our code really properly handles
+	 * cached operation (memory barriers, volatile?, ...)
+	 * (but always keep this comment here regardless!)
+	 * Possibly make this a driver config setting? */
+	
+	mem1 = ioremap_nocache(phymem1, mem_region1_size);
 	if (!mem1) {
 		printk("acx: ioremap() FAILED\n");
 		goto fail_ioremap1;
 	}
-	mem2 = ioremap(phymem2, mem_region2_size);
+	mem2 = ioremap_nocache(phymem2, mem_region2_size);
 	if (!mem2) {
 		printk("acx: ioremap() #2 FAILED\n");
 		goto fail_ioremap2;
@@ -1544,7 +1569,7 @@
 	ndev = alloc_netdev(sizeof(*adev), "wlan%d", dummy_netdev_init);
 	/* (NB: memsets to 0 entire area) */
 	if (!ndev) {
-		printk("acx: no memory for netdevice structure\n");
+		printk("acx: no memory for netdevice struct\n");
 		goto fail_alloc_netdev;
 	}
 
@@ -1622,7 +1647,7 @@
 		acx_s_interrogate(adev, &co, ACX111_IE_CONFIG_OPTIONS);
 	}
 
-//TODO: merge them into one function, they are called just once and are the same for pci & usb
+/* TODO: merge them into one function, they are called just once and are the same for pci & usb */
 	if (OK != acxpci_read_eeprom_byte(adev, 0x05, &adev->eeprom_version))
 		goto fail_read_eeprom_version;
 
@@ -2076,10 +2101,14 @@
 
 	acx_init_task_scheduler(adev);
 
-//TODO: pci_set_power_state(pdev, PCI_D0); ?
+/* TODO: pci_set_power_state(pdev, PCI_D0); ? */
 
 	/* request shared IRQ handler */
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,21)	
+	if (request_irq(ndev->irq, acxpci_i_interrupt, IRQF_SHARED, ndev->name, ndev)) {
+#else
 	if (request_irq(ndev->irq, acxpci_i_interrupt, SA_SHIRQ, ndev->name, ndev)) {
+#endif		
 		printk("%s: request_irq FAILED\n", ndev->name);
 		result = -EAGAIN;
 		goto done;
@@ -2135,7 +2164,7 @@
 	write_reg16(adev, IO_ACX_FEMR, 0x0);
 	free_irq(ndev->irq, ndev);
 
-//TODO: pci_set_power_state(pdev, PCI_D3hot); ?
+/* TODO: pci_set_power_state(pdev, PCI_D3hot); ? */
 
 	/* We currently don't have to do anything else.
 	 * Higher layers know we're not ready from dev->start==0 and
@@ -2436,7 +2465,7 @@
 		printk(" Key_Not_Found");
 	}
 	if (irqtype & HOST_INT_IV_ICV_FAILURE) {
-		printk(" IV_ICV_Failure");
+		printk(" IV_ICV_Failure (crypto)");
 	}
 		/* HOST_INT_CMD_COMPLETE  */
 		/* HOST_INT_INFO          */
@@ -2478,7 +2507,11 @@
 #define MAX_IRQLOOPS_PER_JIFFY  (20000/HZ) /* a la orinoco.c */
 
 static irqreturn_t
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19)
+acxpci_i_interrupt(int irq, void *dev_id)
+#else
 acxpci_i_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+#endif
 {
 	acx_device_t *adev;
 	unsigned long flags;
@@ -3344,6 +3377,15 @@
 		adev->stats.tx_fifo_errors++;
 		break;
 	case 0x80:
+		/* possibly ACPI C-state powersaving related!!!
+		 * (DMA timeout due to excessively high wakeup
+		 * latency after C-state activation!?)
+		 * Disable C-State powersaving and try again,
+		 * then PLEASE REPORT, I'm VERY interested in
+		 * whether my theory is correct that this is
+		 * actually the problem here.
+		 * In that case, use new Linux idle wakeup latency
+		 * requirements kernel API to prevent this issue. */
 		err = "DMA error";
 		adev->wstats.discard.misc++;
 		break;
diff -Nru /tmp/wYqKdCn6l2/acx100-20060521/usb.c /tmp/DfExYlGbnH/acx100-20070101/usb.c
--- /tmp/wYqKdCn6l2/acx100-20060521/usb.c	2006-05-20 21:27:57.000000000 +0300
+++ /tmp/DfExYlGbnH/acx100-20070101/usb.c	2007-01-10 00:11:52.000000000 +0200
@@ -45,7 +45,9 @@
 #define ACX_USB 1
 
 #include <linux/version.h>
+#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 18)
 #include <linux/config.h>
+#endif
 #include <linux/types.h>
 #include <linux/module.h>
 #include <linux/moduleparam.h>
@@ -88,6 +90,7 @@
 #define PRODUCT_ID_WUG2400	0xb21a /* AboCom WUG2400 or SafeCom SWLUT-54125 */
 #define VENDOR_ID_AVM_GMBH	0x057c
 #define PRODUCT_ID_AVM_WLAN_USB	0x5601
+#define PRODUCT_ID_AVM_WLAN_USB_si	0x6201 /* "self install" named Version: driver kills kernel on inbound scans from fritz box ???  */
 #define VENDOR_ID_ZCOM		0x0cde
 #define PRODUCT_ID_ZCOM_XG750	0x0017 /* not tested yet */
 #define VENDOR_ID_TI		0x0451
@@ -112,8 +115,13 @@
 */
 static int acxusb_e_probe(struct usb_interface *, const struct usb_device_id *);
 static void acxusb_e_disconnect(struct usb_interface *);
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19)
+static void acxusb_i_complete_tx(struct urb *);
+static void acxusb_i_complete_rx(struct urb *);
+#else
 static void acxusb_i_complete_tx(struct urb *, struct pt_regs *);
 static void acxusb_i_complete_rx(struct urb *, struct pt_regs *);
+#endif
 static int acxusb_e_open(struct net_device *);
 static int acxusb_e_close(struct net_device *);
 static void acxusb_i_set_rx_mode(struct net_device *);
@@ -145,6 +153,7 @@
 	{ USB_DEVICE(ACX100_VENDOR_ID, ACX100_PRODUCT_ID_UNBOOTED) },
 	{ USB_DEVICE(VENDOR_ID_DLINK, PRODUCT_ID_WUG2400) },
 	{ USB_DEVICE(VENDOR_ID_AVM_GMBH, PRODUCT_ID_AVM_WLAN_USB) },
+	{ USB_DEVICE(VENDOR_ID_AVM_GMBH, PRODUCT_ID_AVM_WLAN_USB_si) },
 	{ USB_DEVICE(VENDOR_ID_ZCOM, PRODUCT_ID_ZCOM_XG750) },
 	{ USB_DEVICE(VENDOR_ID_TI, PRODUCT_ID_TI_UNKNOWN) },
 	{}
@@ -1283,7 +1292,11 @@
 ** USB receive is triggered.
 */
 static void
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19)
+acxusb_i_complete_rx(struct urb *urb)
+#else
 acxusb_i_complete_rx(struct urb *urb, struct pt_regs *regs)
+#endif
 {
 	acx_device_t *adev;
 	rxbuffer_t *ptr;
@@ -1503,7 +1516,11 @@
 ** This function is invoked upon termination of a USB transfer.
 */
 static void
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19)
+acxusb_i_complete_tx(struct urb *urb)
+#else
 acxusb_i_complete_tx(struct urb *urb, struct pt_regs *regs)
+#endif
 {
 	acx_device_t *adev;
 	usb_tx_t *tx;
diff -Nru /tmp/wYqKdCn6l2/acx100-20060521/wlan.c /tmp/DfExYlGbnH/acx100-20070101/wlan.c
--- /tmp/wYqKdCn6l2/acx100-20060521/wlan.c	2006-05-20 21:27:59.000000000 +0300
+++ /tmp/DfExYlGbnH/acx100-20070101/wlan.c	2007-01-09 23:27:29.000000000 +0200
@@ -37,8 +37,10 @@
 ** http://www.linux-wlan.com
 */
 
-#include <linux/config.h>
 #include <linux/version.h>
+#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 18)
+#include <linux/config.h>
+#endif
 #include <linux/types.h>
 #include <linux/if_arp.h>
 #include <linux/wireless.h>
diff -Nru /tmp/wYqKdCn6l2/acx100-20060521/wlan_hdr.h /tmp/DfExYlGbnH/acx100-20070101/wlan_hdr.h
--- /tmp/wYqKdCn6l2/acx100-20060521/wlan_hdr.h	2006-05-20 21:27:56.000000000 +0300
+++ /tmp/DfExYlGbnH/acx100-20070101/wlan_hdr.h	2006-08-14 00:10:56.000000000 +0300
@@ -307,7 +307,7 @@
 /* Macros to get/set the bitfields of the Duration Field      */
 /*  - the duration value is only valid when bit15 is zero     */
 /*  - the firmware handles these values, so I'm not going     */
-/*    these macros right now.                                 */
+/*    to use these macros right now.                          */
 /*------------------------------------------------------------*/
 
 /*--- Sequence Control  Macros -------------------------------*/

--- End Message ---
--- Begin Message ---
Source: acx100
Source-Version: 20070101-1

We believe that the bug you reported is fixed in the latest version of
acx100, which is due to be installed in the Debian FTP archive:

acx100-source_20070101-1_all.deb
  to pool/contrib/a/acx100/acx100-source_20070101-1_all.deb
acx100_20070101-1.diff.gz
  to pool/contrib/a/acx100/acx100_20070101-1.diff.gz
acx100_20070101-1.dsc
  to pool/contrib/a/acx100/acx100_20070101-1.dsc
acx100_20070101.orig.tar.gz
  to pool/contrib/a/acx100/acx100_20070101.orig.tar.gz



A summary of the changes between this version and the previous one is
attached.

Thank you for reporting the bug, which will now be closed.  If you
have further comments please address them to [EMAIL PROTECTED],
and the maintainer will reopen the bug report if appropriate.

Debian distribution maintenance software
pp.
Stefano Canepa <[EMAIL PROTECTED]> (supplier of updated acx100 package)

(This message was generated automatically at their request; if you
believe that there is a problem with it please contact the archive
administrators by mailing [EMAIL PROTECTED])


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Format: 1.7
Date: Mon, 20 Aug 2007 23:18:54 +0200
Source: acx100
Binary: acx100-source
Architecture: source all
Version: 20070101-1
Distribution: unstable
Urgency: low
Maintainer: Stefano Canepa <[EMAIL PROTECTED]>
Changed-By: Stefano Canepa <[EMAIL PROTECTED]>
Description: 
 acx100-source - ACX100/ACX111 wireless network drivers source
Closes: 405795 419900 439442
Changes: 
 acx100 (20070101-1) unstable; urgency=low
 .
   * New maintainer (Closes: #405795)
   * New upstream release
   * Modified pci.c and common.c to build in 2.6.21 an newer kernel. (Closes: 
#419900, #439442)
Files: 
 e1ee85f38d5b3bd3d4219a1f2380bc10 569 contrib/net extra acx100_20070101-1.dsc
 1988a3c0db36ab4effeccd5aff48bf52 184152 contrib/net extra 
acx100_20070101.orig.tar.gz
 b2a7bb31085dc080f8cc06abda12976b 15612 contrib/net extra 
acx100_20070101-1.diff.gz
 35eb15b76fdef637a40a21cdf30225de 224234 contrib/net extra 
acx100-source_20070101-1_all.deb

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)

iD4DBQFG0Hm0NTNQylgICMQRAtr1AJ9ThIHn1LCHRTSCTvPmXJi2UejptwCUDvTb
im8kKlNqqJiwmxf/1qFRSw==
=pVAp
-----END PGP SIGNATURE-----


--- End Message ---

Reply via email to