If this doesn't manage to fix some things reported here or if it has some new bugs as compared to the last version, then please notify me immediately by email: andi AT A HOST CALLED lisas.de 57 (intermediate/sync release, many improvements, but still with 2Mbps default_client problem and AMD64 OOPS on >= 2.6.11): RELIABILITY FEEDBACK: nothing yet 2005-06-05 22:53 andim2 * README (1.134): More prominently warn about the recent Auto mode change 2005-06-05 22:41 andim2 * include/acx_struct.h (1.12), src/acx100_helper.c (1.368): Rename acx_configoption_t to acx111_ie_configoption_t 2005-06-05 22:36 andim2 * include/acx_struct.h (1.11), src/acx100_helper.c (1.367), src/ihw.c (1.131): Rename ACX1xx_IE_DOT11_ED_THRESHOLD_LEN to ACX100_IE_DOT11_ED_THRESHOLD_LEN, since it's ACX100-only. 2005-06-05 22:31 andim2 * src/acx100_helper.c (1.366): Make function static 2005-06-05 22:30 andim2 * src/acx100_helper.c (1.365): Remove some asterisks 2005-06-05 22:28 andim2 * src/acx100_helper.c (1.364): Add small comment. 2005-06-05 22:26 andim2 * src/acx100_helper.c (1.363): Tiny comment change. 2005-06-05 22:24 andim2 * src/acx100.c (1.316): Add SET_MODULE_OWNER() 2005-06-05 19:56 andim2 * include/acx_func.h (1.10), src/acx100.c (1.315), src/acx100_helper.c (1.362), src/acx100_ioctl.c (1.249), src/acx100_usb.c (1.96): Replace all manual priv member lookups by a transitional define, acx_netdev_priv(). 2005-06-04 14:06 andim2 * src/acx100_helper.c (1.361): Make sure people know that we need to configure the *whole* element, not just the "normal" key string size 2005-06-04 09:34 andim2 * src/acx100_conv.c (1.74): Add more unlikely() to speed up normal transfer conditions 2005-06-02 13:16 andim2 * src/acx100_helper.c (1.360): More detailed comment. 2005-06-01 22:47 andim2 * src/: acx100_helper.c (1.359), acx100_helper2.c (1.255), acx100_usb.c (1.95), idma.c (1.285), ihw.c (1.130): Add likely()/unlikely() here and there... 2005-06-01 22:45 andim2 * include/acx_struct.h (1.10): Reorder some wlandevice_t entries 2005-06-01 22:32 andim2 * doc/devel_info.txt (1.1): Add misc. development information. 2005-05-31 22:52 andim2 * src/acx100_helper.c (1.358): Clear the radio recalibration flag beforehand. Hopefully this will manage to resolve a mysterious and fatal recalibration loop which caused my machine to go down recently... 2005-05-30 23:08 andim2 * src/acx100_helper.c (1.357): Fix OOPS caused by wrong symlinking of TIACX111.BIN to TNET1130.sys (invalid small image size, overflowing allocated buffer with the data read from the file) 2005-05-29 16:02 andim2 * include/acx_inline.h (1.4), include/acx_struct.h (1.9), include/wlan_mgmt.h (1.4), src/acx100.c (1.314), src/acx100_helper.c (1.356), src/acx100_helper2.c (1.254), src/acx100_ioctl.c (1.248), src/idma.c (1.284), src/setrate.c (1.6): Some more fixes for strict warning compile: many char -> u8 changes, proper casting for I/O address calculations, remove comma at end of lists, some constifies, some other casts. 2005-05-29 15:55 andim2 * include/acx_func.h (1.9): Fix warnings during strict compile by changing probably misdeclared "extern" into "static" 2005-05-29 15:50 andim2 * src/Makefile (1.60): Remove -Werror since it is not too helpful 2005-05-29 14:18 andim2 * README (1.133): Tiny fix 2005-05-29 14:17 andim2 * src/acx100_ioctl.c (1.247): Make sure to trigger a rescan after an iwpriv SetScanParams 2005-05-29 13:28 andim2 * src/idma.c (1.283): Add some more unlikely() 2005-05-29 13:27 andim2 * src/Makefile (1.59): Add more debug compile flags 2005-05-28 18:10 andim2 * include/acx_inline.h (1.3), src/acx100.c (1.313), src/acx100_helper.c (1.355), src/idma.c (1.282), src/ihw.c (1.129): Add some memory barriers and PCI posting flushing. This might fix various ring buffer reliability issues. Some small optimizations, too. 2005-05-28 18:05 andim2 * src/Makefile (1.58): Tiny patch 2005-05-24 18:43 andim2 * README (1.132): Mention MAC changing utility. 2005-05-14 14:05 andim2 * src/acx100_helper.c (1.354): Some updates about EEPROM writing support 2005-05-14 14:00 andim2 * src/acx100.c (1.312): Avoid the "failure" word in a non-fatal log message 2005-05-11 00:30 andim2 * src/acx100_ioctl.c (1.246): IW_MODE_MONITOR is only supported in WIRELESS_EXT > 14 2005-05-11 00:08 andim2 * src/acx100_helper.c (1.353): Add EEPROM backup notice to EEPROM writing function. 2005-05-11 00:04 andim2 * include/acx_struct.h (1.8): Add warnings about I/O register array 56 (aaaargh, please shoot me...): RELIABILITY FEEDBACK: quite ok, but 2Mbps default_client problem and AMD64 OOPS on >= 2.6.11, plus assoc issues with APs (configure Basic/Operational Rateset!!) 2005-05-07 19:09 andim2 * src/acx100_helper2.c (1.253): Kill very problematic rate check temporarily. Something in rate setup or checking needs to be done differently, it is unusable with the current code. 2005-05-07 18:58 andim2 * include/acx_struct.h (1.7): AAAAAAAARGH, I *somehow* (don't ask me how!) forgot to checkin that VERY important 2.4.x compile fix. 55 (2.4.x compile fix, AP assoc fixes, timeout handler fixes, logging fixes, endianness fixes, IOW: it should hopefully bring us back to pf48/49 stability levels, and actually beyond that) RELIABILITY FEEDBACK: no 2.4.x compile fix in here, ... 2005-05-06 23:38 andim2 * src/acx100_usb.c (1.94): Fix firmware upload. 2005-05-06 21:31 andim2 * src/Makefile (1.57): Carlos Martin: The patch changes the output of the Makefile at the end of compilation to reflect that we now have 2.6 firmware loading (or at least that the hotplug system can take care of it). It also makes the output a bit prettier. 2005-05-06 21:27 andim2 * src/acx100_usb.c (1.93): Commit long forgotten endianness patch (by jeepfr, 20041222). Doh! 2005-05-03 14:21 andim2 * README (1.131): Mention roadmap stuff. 2005-05-03 09:29 andim2 * src/acx100.c (1.311): Add a log line upon ifdown 2005-05-01 14:22 andim2 * include/acx_func.h (1.8), src/acx100_helper.c (1.352), src/acx100_helper2.c (1.252), src/acx100_usb.c (1.92), src/ihw.c (1.128): fix hidden ESSID assoc to only consider in case no other AP has been found yet (this is not very perfect and the whole assoc selection logic has to be improved), better rate and assoc logging, add firmware version to /proc/driver/acx_wlan0_diag. 2005-04-30 15:27 andim2 * src/acx100_helper2.c (1.251): Fix most likely incorrect Capabilities assumption which broke association to many APs according to many recent user reports. 2005-04-29 23:41 andim2 * doc/firmware_versions.txt (1.12): Add comment about potential hardware incompatibility. 2005-04-26 21:37 andim2 * include/acx_func.h (1.7), src/acx100.c (1.310), src/idma.c (1.281): Much improved timeout handling, hopefully. Not tested! 2005-04-26 21:36 andim2 * README (1.130): Mention possible IRQ lockup issues fix. 2005-04-26 09:48 andim2 * README (1.129): Doh, 802.11g chips also have trouble with SB Live! 54 (Hopefully fully fixes the issues of the very problematic pf53 release): RELIABILITY FEEDBACK: not good, AP association issues since about pf50. Use something before that if it fails for you. 2005-04-21 22:55 andim2 * README (1.128), include/acx_config.h (1.2), src/acx100.c (1.309): Konstantinos Natsakis (patch mailed by Athanasios Kanaris, integration work done by me): Make it possible to use a separate driver instance per-card for multiple cards. Quote: For this reason, we wrote a patch, the "multiplicity" patch, that allows to load the driver just for one card, and even assign the desired wlan%d. insmod acx_pci -o acx100_pci.wlan0 card=1 interface=wlan0 which loads a module named acx100_pci.wlan0, completely for the 1st acx100 card found in PCI bus. The driver can be unloaded separately, and we can assign any name to the interface. The parameters are not mandatory, you can use the driver as before without "card" and "interface" module parameters, and nothing changes, it will behave like now. We can even load different version of the driver for each card, or different firmware for each card. 2005-04-21 14:51 andim2 * src/acx100_ioctl.c (1.245): Fix OOPS on set_rate invocation in case we're not associated yet. Doh! Thanks to Denis for providing a fix quickly. 2005-04-21 10:03 andim2 * src/idma.c (1.280): Fix compile issue with slightly older compilers (e.g. 3.2.3 20030422) 2005-04-21 00:50 andim2 * include/acx_func.h (1.6), include/acx_struct.h (1.6), src/acx100_helper.c (1.351), src/acx100_ioctl.c (1.244), src/idma.c (1.279), src/ihw.c (1.127): Almost exclusively signedness cleanup 53 (ACX111 WEP working. Hopefully fixes 2.4.x compile for good, many important fixes / updates, mainly by Denis Vlasenko): RELIABILITY FEEDBACK: NOT TESTED (and it showed...): OOPS in set_rate. Expect a pf54 soon. 2005-04-20 21:14 andim2 * README (1.127): Update to reflect current situation, relax wording a bit. 2005-04-20 20:57 andim2 * include/: acx_func.h (1.5), acx_inline.h (1.2), acx_struct.h (1.5): Fix 2.4.x compile (hopefully completely) 2005-04-20 09:02 andim2 * src/ihw.c (1.126): Fix USB link issues 2005-04-20 08:47 andim2 * src/acx100_helper2.c (1.250): Re-add duplicate packet detection that got thrown out by accident, hopefully fix compile warning on some newer gcc version. 2005-04-20 08:46 andim2 * src/Makefile (1.56): Remove V=1 parameter that slipped in. 2005-04-20 08:46 andim2 * src/acx100_usb.c (1.91): Adapt code to recent changes, fix typo. 2005-04-20 00:19 andim2 * src/ihw.c (1.125): Remove outdated include 2005-04-20 00:14 andim2 * include/acx_func.h (1.4), include/acx_struct.h (1.4), src/acx100_helper.c (1.350), src/acx100_helper2.c (1.249), src/acx100_ioctl.c (1.243), src/idma.c (1.278): Denis Vlasenko: This is the main patch in the series. Sorry, I can't separate it into smaller ones, client handling is rather involved in many parts of the driver... After all patches are applied, AP bridging is sort-of-works for the first time ever. :) 2005-04-20 00:08 andim2 * include/wlan_mgmt.h (1.3), src/acx100_conv.c (1.73), src/acx100_helper.c (1.349), src/acx100_helper2.c (1.248), src/acx80211frm.c (1.22): Denis Vlasenko: fix ext supp rates IE; fix acx_rxdesc_to_txdesc Handle ext supp rates IE properly, both on rx and on tx. Fix acx_rxdesc_to_txdesc, it had multiple bugs. 2005-04-20 00:05 andim2 * include/acx_func.h (1.3), include/acx_struct.h (1.3), include/wlan_hdr.h (1.2), include/wlan_mgmt.h (1.2), src/acx100_helper.c (1.348), src/acx100_helper2.c (1.247), src/acx100_ioctl.c (1.242), src/ihw.c (1.124), src/ihw_usb.c (1.33): Denis Vlasenko: trivial stuff Moving some inlines to .h files, removing 'static' from several functions (needed for next patches). Introduce acx_sta_list_del(). Add comments. IOW, simple stuff which I was able to separate from main patch which will follow. 2005-04-20 00:01 andim2 * include/acx.h (1.4), include/acx_config.h (1.1), include/acx_func.h (1.2), include/acx_struct.h (1.2), src/acx100.c (1.308), src/acx100_conv.c (1.72), src/acx100_helper.c (1.347), src/acx100_helper2.c (1.246), src/acx100_usb.c (1.90), src/idma.c (1.277), src/ihw.c (1.123): Denis Vlasenko: phy header These two are completely different "additional" headers: #define RX_CFG1_PLUS_ADDIT_HDR 0x2000 /* ACX100 only!! */ #define RX_CFG1_INCLUDE_ADDIT_HDR 0x0002 Rename them to more sensible names: RXBUF_HEADER, PHY_HEADER. Document them in comments. Code was not actually working okay if PHY header is enabled. Fix that. Make it so that PHY header can be compile-time disabled: #define WANT_PHY_HDR 0 ... #define RX_CFG1_INCLUDE_PHY_HDR (WANT_PHY_HDR ? 0x0002 : 0) ... static inline p80211_hdr_t *acx_get_p80211_hdr(wlandevice_t *priv, const +rxbuffer_t *rxbuf) { if (!(priv->rx_config_1 & RX_CFG1_INCLUDE_PHY_HDR)) return (p80211_hdr_t *)&rxbuf->hdr_a3; ... Thus inline gets much shorter - if() is always true. Move acx specific IE programming inside cx_initialize_rx_config(). Make ACX1xx_IE_FEATURE_CONFIG a bit easier to handle. 2005-04-19 23:49 andim2 * include/: acx.h (1.3), acx100.h (1.188), acx100_conv.h (1.13), acx100_helper.h (1.109), acx100_helper2.h (1.36), acx80211frm.h (1.5), acx_func.h (1.1), acx_inline.h (1.1), acx_ioreg.h (1.3), acx_struct.h (1.1), idma.h (1.64), ihw.h (1.40), ioregister.h (1.7), monitor.h (1.7), p80211hdr.h (1.10), p80211mgmt.h (1.13), wlan_compat.h (1.12), wlan_hdr.h (1.1), wlan_mgmt.h (1.1), wlan_monitor.h (1.1): Denis Vlasenko: reshuffle header files part 2 No code changes. Was: # ls -1 acx.h acx100.h acx100_conv.h acx100_helper.h acx100_helper2.h acx80211frm.h acx_ioreg.h idma.h ihw.h ioregister.h monitor.h p80211hdr.h p80211mgmt.h version.h wlan_compat.h Becomes: # ls -1 acx.h acx_func.h acx_inline.h acx_struct.h version.h wlan_compat.h wlan_hdr.h wlan_mgmt.h wlan_monitor.h 2005-04-19 23:10 andim2 * include/acx.h (1.2), include/acx100.h (1.187), include/acx100_conv.h (1.12), include/acx100_helper.h (1.108), include/acx_ioreg.h (1.2), include/ihw.h (1.39), include/monitor.h (1.6), include/p80211hdr.h (1.9), include/p80211mgmt.h (1.12), include/wlan_compat.h (1.11), src/Makefile (1.55), src/acx100.c (1.307), src/acx100_helper.c (1.346), src/acx100_helper2.c (1.245), src/acx100_usb.c (1.89), src/acx80211frm.c (1.21), src/idma.c (1.276), src/ihw.c (1.122), src/ihw_usb.c (1.32): Denis Vlasenko: reshuffle header files part 1 This patch is a rediffed one which removes lots of unused .h files contents. 2005-04-18 21:28 andim2 * src/acx100_helper.c (1.345): Fix compile problem reported to me. Remember to NEVER EVER put variables after the code start! 52 (ACX111 WEP working. Important fixes for Linux 2.4.x and also PPC/endianness): RELIABILITY FEEDBACK: NOT TESTED (and it shows...): 2.4.x compilation still broken, grrrr... 2005-04-11 19:25 andim2 * src/acx100_helper.c (1.344): Fix 2.4.x compile by adding the missing header. 2005-04-11 18:52 andim2 * README (1.126): Small update. 2005-04-08 23:35 andim2 * src/acx100_ioctl.c (1.241): Further endianness fixes. 2005-04-08 23:35 andim2 * src/idma.c (1.275): Rasmus Rohde: One important PPC endianness fix. 51 (ACX111 WEP NOW WORKING!!! thanks HEAPS to Luis Padilla Visdomine for magically pin-pointing it!!): Even more wonderful work by Denis Vlasenko. *** NOTE that Auto mode got removed, you need to explicitly configure Ad-Hoc or Managed now!!! *** RELIABILITY FEEDBACK: appears to work mostly fine for Linux 2.6.x and non-PPC people ("ACX111 WEP is nice"), but not too much testing happened. 2005-04-07 23:03 andim2 * include/acx100_helper2.h (1.35), src/acx100_helper.c (1.343), src/acx100_helper2.c (1.244): Move static variable out of inlined function, saves a couple 100 bytes. Constify (.rodata) yet another variable, revert variable from int to unsigned int (some architectures are said to work better on unsigned int), document resetting the scan count back to 0, some logging update. 2005-04-07 23:00 andim2 * README (1.125): Auto mode status update, mention firmware loading delay. 2005-04-07 22:56 andim2 * src/idma.c (1.274): Revert the number of ACX111 ring buffers back to 32, since that was a temporary debugging change. 2005-04-07 22:54 andim2 * scripts/start_net (1.38): Make sure people know that Auto mode isn't supported any more, try to modprobe the firmware_class module for 2.6.x hotplug firmware loader support. 2005-04-07 00:48 andim2 * src/acx100_usb.c (1.88): Make USB driver compile when ACX_DEBUG=0 2005-04-07 00:27 andim2 * README (1.124), include/acx100.h (1.186), src/acx100_helper.c (1.342), src/acx100_helper2.c (1.243): Add some comments, fix typos. 2005-04-06 23:21 andim2 * include/acx100.h (1.185), include/acx100_helper.h (1.107), src/acx100_helper.c (1.341), src/acx100_helper2.c (1.242): Fix problematic C++ comments 2005-04-06 22:45 andim2 * include/acx100_helper.h (1.106), include/p80211mgmt.h (1.11), src/acx100.c (1.306), src/acx100_conv.c (1.71), src/acx100_helper.c (1.340), src/idma.c (1.273): Denis Vlasenko: AP mode beacon problem sorted out + MONITOR mode can send +arbitrary 802.11 packets now! I figured out why there were huge AP beacons. We were not setting up TIM template! tx path: a) added (probably redundant) check that will prevent any tx in ACX_MODE_OFF. b) any 802.11 frame can be submitted to tx in monitor mode. I was able to simulate AP beacons via userspace. (Confirmed with sniffer) 2005-04-06 22:30 andim2 * include/acx.h (1.1), include/acx100.h (1.184), include/acx100_conv.h (1.11), include/acx100_helper.h (1.105), include/acx100_helper2.h (1.34), include/idma.h (1.63), include/p80211hdr.h (1.8), include/p80211mgmt.h (1.10), src/acx100.c (1.305), src/acx100_conv.c (1.70), src/acx100_helper.c (1.339), src/acx100_helper2.c (1.241), src/acx100_ioctl.c (1.240), src/acx100_usb.c (1.87), src/acx80211frm.c (1.20), src/idma.c (1.272), src/ihw.c (1.121), src/ihw_usb.c (1.31), src/ioregister.c (1.19): Denis Vlasenko: 1 bug + cleanups Fix wrong data copying in acx_rxdesc_to_txdesc() by correcting struct acx_addr3 . Kill several unused structures, #defines and so on, put all #includes in dedicated acx.h file. rename priv->macmode_wanted into just priv->mode, ISTATUS_xxx into ACX_STATUS_xxx acx_process_probe_response is reworked so that there is no open-coded IE handling. 2005-04-06 21:54 andim2 * README (1.123), doc/firmware_versions.txt (1.11), include/acx100_helper.h (1.104), scripts/start_net (1.37), src/acx100_conv.c (1.69), src/acx100_helper.c (1.338): This patch ***FINALLY*** makes ACX111 WEP work!! (many, many, many thanks go to Luis Padilla Visdomine for magically nailing down the incredibly obscure issue!!) Update documentation as well to tell people about the new Good Times. 2005-04-06 19:49 andim2 * include/acx100.h (1.183), include/acx100_helper.h (1.103), include/acx100_helper2.h (1.33), include/p80211mgmt.h (1.9), src/acx100.c (1.304), src/acx100_conv.c (1.68), src/acx100_helper.c (1.337), src/acx100_helper2.c (1.240), src/acx100_ioctl.c (1.239), src/idma.c (1.271): Denis Vlasenko: introduce MONITOR and OFF mode. This patch: a) Renames ACX_MODE_xxx consts so that they do not contain useless parts (we dont need MANAGED in ACX_MODE_3_MANAGED_AP), adds MONITOR and OFF, removes AUTO. b) Removes a bunch of priv->xxx members which do not seem to be needed. We already have far too many. Code is changed to work without them. In particular, we do not need macmode_wanted, macmode_chosen, macmode_joined triplet. We need macmode. Period. Auto mode is silly. User shall just make up his mind ad decide does he want ad-hoc or infrastructure mode. Thus macmode_wanted==macmode_chosen. Also we do not expect to want to join ad-hoc cell but suddenly find ourself in joined to an AP (that will be utterly strange), thus macmode_wanted==macmode_joined. (I plan to rename it it acx_mode, and status to acx_status for better grep. Later.) c) acx_scan_chan and acx_join_bssid got _cmd_ added to name (to make it clearer that they just submit a cmd to firmware) d) switched many places from if() to switch() to make code paths related to different iwconfig modes more visible e) made ah-hoc, ap, monitor, off modes work right at least in regard to emitting (or not emitting) proper beacons. Monitor mode tested for capture. This is the most important part of the patch. f) added and trimmed comments, WLAN_ defines, switched from numeric consts to symbolic, other minor work. 2005-04-05 23:49 andim2 * include/acx100.h (1.182), include/ihw.h (1.38), src/acx100_conv.c (1.67), src/acx100_helper2.c (1.239), src/acx100_ioctl.c (1.238), src/acx100_usb.c (1.86), src/idma.c (1.270): Denis Vlasenko: consolidate mac copy/compare functions This patch replaces MAC_XXX macros with inline functions and replaces acx_is_mac_address_XXX function with mac_is_XXX for three reasons: 1) names were just far too long 2) they have nothing to do specifically with acx, acx_prefix is unjustified 3) they did not follow TRUE=1,FALSE=0 convention. Compare this: - else if (OK == acx_is_mac_address_equal(priv->dev_addr, +hdr->a3.a1)) { + else if (mac_is_equal(priv->dev_addr, hdr->a3.a1)) { Some memcmp's and memcpy's were converted to new functions 2005-04-05 23:37 andim2 * include/acx100.h (1.181), include/acx100_helper.h (1.102), include/acx100_helper2.h (1.32), src/acx100_helper2.c (1.238): Denis Vlasenko: clean up client and mgmt packet handling This patch does the following: a) renames some previously unknown client_t structure members b) introduces and uses CLIENT_xxx constants for client.used c) fixes a place where code used totally unrelated variable for access to challenge IE (grep for "NB Andreas:") d) memcpy(clt->ratevec, ...) are commented out because they are OOPSable (we do initialize clt->ratevec nowhere). e) client lookups were open-coded in a number of places. Converted to use acx_sta_list_get(). Added acx_sta_list_get_or_add and used it in several places. f) struct alloc_p80211mgmt_req_t and it's the only usage in the form of global variable (alloc_p80211mgmt_req! ugggh) is reworked. struct is changed to a union and moved to the only place where it is used: acx_process_mgmt_frame(). Variable is placed on stack and renamed so that my head does not explode anymore. Comment is added. g) arg_0 parameters are renamed. 2005-04-04 22:45 andim2 * src/acx100_usb.c (1.85): Slightly change kernel version check to make sure it also hits Mandrake's botched "2.6.8.1" kernel version. 2005-04-03 23:22 andim2 * src/: acx100.c (1.303), acx100_helper.c (1.336): Further logging fixes 2005-04-03 23:19 andim2 * src/idma.c (1.269): Fix failure logging, fix dma_addr_t logging 2005-04-03 22:39 andim2 * README (1.122): Mention limited firmware filename checks, mention that update-modules is Debian-only. 2005-04-03 22:34 andim2 * src/idma.c (1.268): Better use unsigned loop variable, it's cleaner. 2005-04-03 22:32 andim2 * include/acx100_helper.h (1.101): Tiny spelling fix 2005-04-03 22:30 andim2 * src/ihw.c (1.120): Tiny change 2005-04-03 22:30 andim2 * include/ihw.h (1.37): Optimize acx_is_mac_address_broadcast() 2005-04-03 22:26 andim2 * src/: acx100.c (1.302), acx100_helper.c (1.335), acx100_helper2.c (1.237), acx100_ioctl.c (1.237): Constify some data structures to avoid needless paging. (.rodata vs .data seg, see objdump -x) 2005-04-03 21:23 andim2 * include/acx100_helper2.h (1.31), include/p80211hdr.h (1.7), include/p80211mgmt.h (1.8), include/wlan_compat.h (1.10), src/acx100_helper.c (1.334), src/acx100_helper2.c (1.236): Denis Vlasenko: sanitize mgmt packet generation This patch is large, please review. a) introduce wlan_hdr structure which documents 802.11 frame layout. (currently unused, but eliminates the need to reach for large .pdf file each time I forget it! :) Since it is still unconvenient to work with unions (hdr.addr.mgmt.da! ugggh...), I also added wlan_mgmt_hdr for use when header type is known. (hdr.da, joy joy). More will be added as needed. (Why I did not use existing types? I find it hard to work with types named acxp80211_hdr when they are not related specifically to acx, and p80211_hdr is only slightly better - too many numbers... I am thinking about using wlan_/WLAN_ prefix consistently for all 802.11 stuff (unless it's related to acx hardware)) b) WF_MGMT_CAP_INFO_xxx enums added (similarly to one of earlier patches) and used where appropriate. IEEE16 macro was moved. c) acx_transmit_XXXXX functions are reworked, renaming local variables with consistent names, using wlan_fill_ie_XXX to fill IEs instead of open-coding it, etc. d) TxData struct is dropped. It was misnamed: name emphasized the fact that frame was to be transmitted, while layout was about the fact that we are working with mgmt frame; also most of it's fields was never used. I am using wlan_mgmt_hdr instead. e) large no-content function comments trimmed down 2005-04-03 19:58 andim2 * include/acx100.h (1.180), include/acx100_helper2.h (1.30), src/acx100_helper2.c (1.235): Denis Vlasenko: rename client.valNNN A related bug is spotted/squashed. Client hash table usages was sanitized and commented. An unrelated inline was moved to .h file 2005-04-03 19:37 andim2 * include/acx100.h (1.179), src/acx100_helper.c (1.333), src/acx100_helper2.c (1.234), src/acx100_ioctl.c (1.236), src/ihw.c (1.119), src/ihw_usb.c (1.30): Denis Vlasenko: simplify logging of MAC addresses No actual logic changes, but now printks look much more compact 2005-04-03 19:24 andim2 * include/acx100_helper.h (1.100), include/p80211mgmt.h (1.7), src/acx100_helper.c (1.332): Denis Vlasenko: sanitize template initialization a) Template structures are grouped together and consistently named b) Missing structure members defined (I tried to preserve sizes of the structs, but please review...) c) Added lots of comments d) Added helper functions for setting IEs e) Template setting functions heavily reworked/simplified 2005-04-03 19:08 andim2 * src/: acx100_helper.c (1.331), acx100_helper2.c (1.233), acx100_ioctl.c (1.235): Denis Vlasenko: we don't need to zero out fields in scruct we just memset() to zero; kill stray ';;', etc... 2005-04-03 19:03 andim2 * include/acx100.h (1.178), include/p80211hdr.h (1.6), src/acx100_conv.c (1.66), src/acx100_helper.c (1.330), src/acx100_helper2.c (1.232), src/acx100_ioctl.c (1.234), src/idma.c (1.267): Denis Vlasenko: use better macros a) move VEC_SIZE into .h file b) use it where appropriate c) add WF_ macros which allow for more efficient code (bit shifts and ieee2host conversion can be avoided) and also their usage looks more compact and understandable. Old macros are retained. 2005-04-03 18:52 andim2 * include/acx100.h (1.177), src/acx100_helper.c (1.329), src/idma.c (1.266): Denis Vlasenko: cleanup: kill #ifdefs By defining some macros, we can eliminate pair of #ifdefs 2005-04-03 18:12 andim2 * Makefile (1.21), src/Makefile (1.54): Further fixes. This is not perfect, but hopefully it works. 2005-04-03 18:09 andim2 * Makefile (1.20): Doh, make distclean didn't actually do what we wanted... 2005-04-01 00:25 andim2 * include/p80211hdr.h (1.5), src/idma.c (1.265): Denis Vlasenko: untangle #ifdef forest a bit in dma alloc routines We have way too many #ifdefs, I'm working on reorganizing code to remedy that. 2005-04-01 00:21 andim2 * src/acx100_conv.c (1.65): Denis Vlasenko: sanitize eth<->wlan conversion routines: a) copying and comparing 3-byte arrays with constant contents is larger and slower than simply comparing with constants. do inline compares (wrap them into conveniently named inlines) b) rename acx_stt_findproto to (hopefully) more understandable name c) start moving tovards kernel convention: wlan_ethhdr_t -> struct wlan_ethhdr (although I prefer former form) d) reorganize if() expressions, they were hard to follow. kill redundant if() check. Comment: let's just hope he's right in explaining one difficult change in this patch - at this time of day I cannot really follow that any more ;-) 50 (ACX111 WEP still not functional, will work more on it soon): Many cool patches by Denis Vlasenko, but COMPLETELY UNTESTED. NOTE that within the new hotplug patch, some alternate ACX111 firmware filenames got removed. The driver now REQUIRES TIACX111.BIN RELIABILITY FEEDBACK: problematic behaviour with various kernel versions, use pf49 if you get compile errors. Otherwise seems to be fine. 2005-03-30 00:29 andim2 * include/acx100.h (1.176), src/acx100.c (1.301), src/acx100_helper.c (1.328), src/acx100_helper2.c (1.231), src/acx100_ioctl.c (1.233), src/idma.c (1.264): Fix invalid C++ comment style, fix 2.6 firmware loader to only be used in case it's compiled in kernel, change FW_xxx defines to USE_FW_xxx, spelling errors. 2005-03-30 00:09 andim2 * include/acx100.h (1.175), include/acx100_helper.h (1.99), src/acx100.c (1.300), src/acx100_helper.c (1.327), src/acx100_ioctl.c (1.232), src/acx100_usb.c (1.84), src/idma.c (1.263), src/ihw.c (1.118), src/ihw_usb.c (1.29): Denis Vlasenko: make it compile if ACX_DEBUG=0 in Makefile a) change #ifdef ACX_DEBUG into #if ACX_DEBUG so that ACX_DEBUG=0 in Makefile works as expected b) give debug and L_xxxx constant zero values, allowing gcc to optimize debug code out c) convert static string variables into #defines, allowing them to be optimized out d) style fixes 2005-03-30 00:04 andim2 * src/acx100_conv.c (1.64): Denis Vlasenko: Fix two grave bugs in ethernet header conversion: missing header->length assignment, fix payload->length = proto code a) reduce le_to_cpu'ing using temp variables b) do not doubly initialize local vars c) fix debug output 2005-03-29 23:44 andim2 * src/acx100_conv.c (1.63): Denis Vlasenko: fix debug output: Previous code would emit tons of "" in the middle of the line. 2005-03-29 23:43 andim2 * src/acx100_helper.c (1.326): Denis Vlasenko: sprintf here is a massive overkill While we're at it, add 'static' and use int for index. 2005-03-29 23:40 andim2 * src/acx100_helper.c (1.325): Denis Vlasenko: misplaced FN_ENTER 2005-03-29 23:39 andim2 * src/acx100_helper2.c (1.230): Denis Vlasenko: from_ds==to_ds==1 is a wds frame - Do not call it "rx error". 2005-03-29 23:37 andim2 * src/: acx100.c (1.299), acx100_helper.c (1.324), acx100_helper2.c (1.229), acx100_ioctl.c (1.231), idma.c (1.262), ihw.c (1.117): Denis Vlasenko: utterly trivial stuff: brace placement fixes and the like. 2005-03-29 22:26 andim2 * include/acx100_helper.h (1.98), include/ihw.h (1.36), src/acx100_helper.c (1.323), src/ihw.c (1.116), src/ihw_usb.c (1.28): Denis Vlasenko: move inlines to .h files ...where they belong 2005-03-29 22:19 andim2 * src/acx100_ioctl.c (1.230): Denis Vlasenko: simplify fill_txrate: let's be clever 2005-03-29 22:13 andim2 * src/acx100_ioctl.c (1.229): Denis Vlasenko: ioctl.c cleanup: a) many instances of - if (0 != (err = acx_lock(priv, &flags))) { - result = err; + result = acx_lock(priv, &flags); + if (result) { goto end; } b) deinline large functions c) reduce indent levels in acx_ioctl_set_ap d) random style cleanups 2005-03-29 22:01 andim2 * src/: acx100.c (1.298), acx100_helper.c (1.322), acx100_helper2.c (1.228), acx100_usb.c (1.83), idma.c (1.261), ihw.c (1.115): Denis Vlasenko: stop doing assignments in if() - it's unreadable and error prone 2005-03-29 21:53 andim2 * src/acx100_helper2.c (1.227): Denis Vlasenko: fix: switch(ftype)->switch(fstype) and reduce indenting depth there. 2005-03-29 21:50 andim2 * src/idma.c (1.260): Denis Vlasenko: small performance fix: a) convert runtime warning into compile-time b) don't be silly. We don't need to isolate highest bit of txrate in fixed rate mode, there is already only one nonzero bit. c) small speed up 2005-03-29 21:47 andim2 * include/acx100.h (1.174), include/acx100_helper.h (1.97), src/acx100.c (1.297), src/acx100_helper.c (1.321), src/acx100_usb.c (1.82): Denis Vlasenko: add 2.6-style hotplug firmware loader. Old way is retained so far, can be disabled with #define. 2005-03-29 21:08 andim2 * src/acx100.c (1.296): Denis Vlasenko: acx_cleanup_card_and_resources has exactly one callsite. Let's move it in there, fixing bugs on the way. 49 (ACX111 WEP still not functional, will work more on it soon): Many nice updates, such as e.g. new dupe packet detection code RELIABILITY FEEDBACK: no reports yet, very well-tested locally, should be working rather well 2005-03-28 01:14 andim2 * include/acx_ioreg.h (1.1): Doh, forgot that file. 2005-03-28 00:57 andim2 * include/acx100_helper.h (1.96): Remove bogus static variable reference in include file to fix compile error on certain compilers (reported by Steve Whine). 2005-03-27 13:53 andim2 * README (1.121): Mention firmware version issues. 2005-03-27 00:54 andim2 * include/ihw.h (1.35), src/acx100_helper2.c (1.226), src/idma.c (1.259): Fix grave bug with descr init that I introduced recently (caused 0x80 Tx errors). Improve some logging, fix some comment. 2005-03-26 16:14 andim2 * src/: acx100.c (1.295), acx100_helper.c (1.320), idma.c (1.258): Some small improvements 2005-03-25 00:15 andim2 * include/acx100_helper.h (1.95), src/acx100_helper.c (1.319): Much improved FeatureConfig mechanism, easily allows tweaking of individual bits, saves almost 1K of memory already. 2005-03-25 00:13 andim2 * include/ihw.h (1.34): Small correction 2005-03-25 00:12 andim2 * src/acx100_helper2.c (1.225): Smallish change 2005-03-24 20:45 andim2 * include/acx100.h (1.173), src/acx100_helper2.c (1.224): First attempt at providing duplicate packet detection. So far it really seems to work (when creating DUPs by pinging with low Tx power at 1Mbps), but not fully tested. 2005-03-24 19:50 andim2 * src/ihw.c (1.114): Fix horrible mistake of mine causing the driver to crash'n burn 2005-03-22 23:29 andim2 * include/acx100.h (1.172), include/idma.h (1.62), src/acx100_helper.c (1.318), src/acx100_helper2.c (1.223), src/idma.c (1.257): Mainly ring buffer preparation cleanup (ACX111 initializes on its own, no need to mess with buffer init there), some other cleanup 2005-03-22 23:27 andim2 * scripts/fetch_firmware (1.10): Mention firmware version issues at the end 2005-03-21 21:15 andim2 * include/acx100_helper.h (1.94), src/acx100.c (1.294), src/acx100_conv.c (1.62), src/acx100_helper.c (1.317), src/acx100_helper2.c (1.222), src/acx100_ioctl.c (1.228), src/acx100_usb.c (1.81), src/idma.c (1.256), src/ihw.c (1.113), src/ihw_usb.c (1.27): Denis Vlasenko: split FN_EXIT into FN_EXIT0 and FN_EXIT1 2005-03-21 20:59 andim2 * include/ihw.h (1.33), src/acx100.c (1.293), src/acx100_helper.c (1.316), src/acx100_ioctl.c (1.227), src/idma.c (1.255), src/ihw.c (1.112): Denis Vlasenko: Remove duplicate implementations of acx_read_reg and friends (one as #defines and other as functions). Single codebase can provide inline or non-inline variants now. 2005-03-21 20:54 andim2 * include/acx100_helper.h (1.93), src/acx100_helper.c (1.315), src/acx100_ioctl.c (1.226): Denis Vlasenko: hide acx100/111_scan_chan() differences from user 2005-03-21 20:51 andim2 * src/: acx100.c (1.292), acx100_conv.c (1.61), acx100_helper.c (1.314), acx100_helper2.c (1.221), acx100_ioctl.c (1.225), idma.c (1.254), ihw.c (1.111): Denis Vlasenko: remove obfuscating casts 2005-03-21 20:46 andim2 * src/acx100_helper2.c (1.220): Denis Vlasenko: reorganize code to avoid excessive indenting 2005-03-21 20:30 andim2 * src/: acx100.c (1.291), acx100_conv.c (1.60), acx100_helper.c (1.313), acx100_helper2.c (1.219), acx100_usb.c (1.80): Denis Vlasenko: Replace "if (0 != expr)" by "if (expr)" everywhere except acx100_ioctl.c 2005-03-18 09:32 andim2 * README (1.120): Fix ACX111 sensitivity status, more WEP details 2005-03-17 00:17 andim2 * include/acx100_helper.h (1.92), src/acx100_helper.c (1.312), src/idma.c (1.253): Further cleanup towards hopefully making ACX111 WEP work 2005-03-16 21:15 andim2 * include/acx100.h (1.171): Change some defines. 2005-03-16 21:15 andim2 * src/acx100_helper2.c (1.218): Small experimental optimization. 2005-03-16 21:14 andim2 * src/idma.c (1.252): Don't modify the whole set, only individual flags. 2005-03-16 21:07 andim2 * README (1.119): Add hint about OpenVPN 48 (ACX111 WEP still not functional yet, despite all attempts to force it to be): RELIABILITY FEEDBACK: appears to be fine, at least ACX111 2005-03-12 19:08 andim2 * include/acx100.h (1.170), include/acx100_helper.h (1.91), src/acx100.c (1.290), src/acx100_helper.c (1.311), src/idma.c (1.251): Huge WEP related update (no, I didn't manage to get ACX111 WEP to work, not even after 4 hours :-(((): Add more logging, add some disabled debug code for further testing, don't do ACX111 WEP stuff in acx_init_wep(), fix WEP change not causing a rescan, disable ACX111 ED and CCA configuration (unsupported), Change descriptor flag initialization. 2005-03-12 13:53 andim2 * src/idma.c (1.250): Enable new Tx descr cleanup locking, since it is faster. Hopefully there won't be any issues, but please report it if there are. 2005-03-12 13:51 andim2 * src/acx100.c (1.289): Fix grave problem: for some reason we didn't manage to get to the next tx descr cleanup counter value in time, so the whole descr was DONE and the net queue stopped, so no further cleanup taking place. Fixed by making sure we always clean up the ring buffer in case more than 50% of all descrs are done. To make sure this doesn't happen again in a severe way, call the normal tx descr cleanup handler in the timeout handler, too (doh, how could I have forgotten that when disabling the emergency cleanup handler there??). 2005-03-12 12:30 andim2 * include/acx100.h (1.169), src/acx100_helper.c (1.310), src/idma.c (1.249): Fix auto rate algorithm (it was choosing a wrong new rate), make it ignore descriptors with outdated rate bytes (i.e. rate settings which are older than the last range change), large Tx descr cleanup (speedup, locking improvements), large logging improvements. 2005-03-11 23:13 andim2 * src/idma.c (1.248): Disable TXPRC triggering, I don't think it's needed here. 2005-03-11 23:12 andim2 * include/acx100_helper.h (1.90), src/acx100_helper.c (1.309): Merge ACX100/ACX111 radio recalib functions. Saves some bytes ;) 2005-03-11 23:10 andim2 * doc/firmware_versions.txt (1.10): Small addition 2005-03-11 14:28 andim2 * doc/firmware_versions.txt (1.9): Add information about recalibration lockups in 0.1.0.11. 2005-03-11 10:40 andim2 * doc/firmware_versions.txt (1.8): Add new Safecom firmware. 2005-03-11 10:23 andim2 * include/acx100.h (1.168), src/acx100.c (1.288): Safecom driver hints at a new radio type 0x19... 2005-03-10 22:55 andim2 * include/idma.h (1.61), src/acx100_helper.c (1.308), src/acx100_helper2.c (1.217), src/idma.c (1.247), src/ihw.c (1.110): More detailed Tx logging, fix ACX111 CCA and ED requests, further cleanup. 2005-03-10 22:54 andim2 * doc/firmware_versions.txt (1.7): Document ACX111 1.2.1.34 2005-03-10 17:14 andim2 * TODO (1.34): Small update 47 (ACX111 WEP not functional yet, but might be soon): 46 had too many compile issues, thus a quick 47. RELIABILITY FEEDBACK: "first release that has successfully connected to my wireless AP" :-) Otherwise almost no reports yet, untested before release! Carlos Martin: fix pci_name() compatibility define In case of a broken peer that doesn't announce Ad-Hoc or Managed mode, don't assume it's Ad-Hoc, instead assume it's using whatever mode we configured locally. Fix endianness logging for older compilers. *sigh* Further cleanup, save some 500 bytes of executable size, too. Remove all function implementation state logging, it's not really needed any longer. 46 (ACX111 WEP not functional yet, but might be soon): NOTE: fails to compile for some kernel versions or very old gcc versions RELIABILITY FEEDBACK: appears to be very good, minus the compilation issues Rasmus Rohde: Even some more endianness fixes (can you believe it!?) Associating with AP is working now! Carlos Martin: Update the driver to also cope with the USB changes done in 2.6.11. 2.6.11-bk1 removes slot_name member, so we have to use pci_name() now. Fix descriptor Ctl_8 initialization in order to be able to remove Ctl_8 clearing hack in case of ACX111 (suggested by Rasmus Rohde). Indicate the CPU endianness on driver startup Configure: Relax SMP safety warning to reflect current status. README: Mention memory region change, multicast issues. 45 (ACX111 WEP not functional yet): Interim release, USB hang probably not fixed. I won't do further development for some smaller amount of time... RELIABILITY FEEDBACK: quite ok so far, possibly even better than pf44, but a crash on card eject slipped in somewhere after pf43 (didn't happen to me during testing!) Configure ACX111 to do "automatic" radio recalibration instead of "manual", since it seems as if the firmware default setting actually is to do automatic recalibration from time to time (exact default period length not known yet), so by setting up a manual recalibration we actually made things worse in some situations... Add /proc registration to USB driver, hopefully fix /proc unregistration issues with PCI driver. Unify duplicate CTL_xxx descr bits, improve/fix(?) CTL_xxx bit check in get_tx_descr(), add comments, display card query failure in /proc file. Change descriptor flag update position. Mainly cleanup: move logging functions to acx100_helper.c to be able to use one implementation in both PCI and USB drivers (not sure whether it's really a good idea yet, since some stuff remains in acx100.h and we now also need to include acx100_helper.h in some files). Some logging updates. Remove old power management code. Some cleanup in misc. places. Small power management updates/fixups Add optional Tx descriptor cleanup in task handler (too CPU intensive, so don't enable it by default), some more cleanup, reorder task handler entries (most often accessed ones first). Replace some code with new macro MAC_CNT_RCVD() Replace old integer value 5000 with ACX_CMD_TIMEOUT_DEFAULT define when calling acx_issue_cmd(). README: Add hint about missing fragmentation support Add lspci info Tell users to disable 4x mode support in the AP. 44 (USB still working, ACX111 WEP not functional yet): NOTE that ACX100 USB still has a nasty hang on unload if you don't do an ifconfig wlan0 down before unloading, so take care! (I plan to fix it soon) RELIABILITY FEEDBACK: at least one report that it works very well. Please report on AMD64 and PPC, since there were large important changes in that area and I didn't have any way to verify correctness! - fix potentially fatal bug with uninitialized Association ID during AP assoc. - Better don't set CCA and ED and antenna settings on initialization (and especially not with arbitrary values possibly not matching config EEPROM settings!) Doh, completely removing that initialization of CCA and ED with custom values broke traffic completely. It turned out that the card requires an initial query of those values to get initialized correctly, so do just that and nothing more. This important initialization improvement might fix 5 tons of communication problems... acx100_usb.c: - Many USB endianness fixes done together with Julien PERVILLE. - The dev->init function should DEFINITELY have a return value, otherwise an undefined return value can easily cause an error abort (as reported). - Add missing FN_EXIT() as reported by Julien PERVILLE. Inspired by bug #1098219 from Hugo Herbelin: fixed a large number of remaining endianness issues in the 802.11 protocol code. - Improve radio recalibration code to not eternally disable recalibration in case of too many consecutive radio recalibration failures (in tight loop). Instead, try another round of recalib attempts after one second has passed. Large work queue related cleanup (now ACX100 USB is using work queues, too), some general driver files cleanups, - Slightly modified patch by Luca Melette: we were announcing too many rates in case of extended rates present, put them into the extended rates area instead. Fix Tx power display to show fixed output, not auto power. - Fix one inversed return value check (argh!), better NEVER use OK/NON_OK for non-boolean return values. Don't clear all bits - this is what the debug output right after it is for!! - MUCH improved IRQ handler performance (haven't tested it, but an astonishing amount of optimizations was still possible), some other improvements. - Keep an external copy of descriptor Ctl bytes to be able to write back the modifications in one step, which is both more thread-safe and faster. - Slightly adapted patch by Luca Melette to get Master mode/HostAP a little further... Don't do /proc stuff in case CONFIG_PROC_FS isn't defined. Change IEEE 802.11g/b+ into IEEE 802.11b+/g+, since cards are often named in the 802.11a/b/g order (is this useful? I think it is, but maybe we should use a different protocol name??) - Change all UINTxx variable types into commonly used Linux kernel uxx types. - Don't forget proper macro bracketing - Constify and staticize two tons of parameters and variables, move loop variable initialization directly in front of loop, change loop counter to use 1 to 5, rename acx_load_radio() to acx_upload_radio(). Further variable type cleanup, remove some non-ACX1xx header file stuff. Improve init messages about documentation and 32bit/16bit I/O access. Make pause between recalibrations easily configurable. We don't support sensitivity for ACX100 USB yet, so don't offer it, too... Workaround for Linux <= 2.4.20 not having a generic dump_stack(). Change check to use 2.4.22, since it seems that 2.4.20 didn't add it yet. README: Mention EEPROM content backup copy, add Rx level blurb Mention that firmware upload is non-permanent, small depmod update Monitor mode additions. More detailed 32bit/16bit I/O explanation. All things considered, D-Link seems to care more about us than some other companies, so mention that properly. 43 (USB now working, ACX111 WEP not functional yet): RELIABILITY FEEDBACK: seems to work very well ("works like a charm") Don't assign brange_max_quality if parameter wasn't specified, in order to avoid division by zero OOPS. Largish acx_start_xmit() cleanup, some other cleanups. Move power LED link quality update to end of IRQ handler, add unlikely(), correct #ifdef, misc. stuff Use IEEE 802.11g/b+ protocol name for ACX111 (and fixed segfault caused by stupid mistake in this very change). Disable non-essential and potentially misleading features (EEPROM ID check) by default. Add another unlikely(), add #ifdef constify *_is_mac_address_*() "manufactor" -> "manufacturer" Remove obsolete comment, improve log message Replace memcmp() by acx_is_mac_address_equal() Add unlikely() USB: Remove obsolete functions README: Add depmod -a hint, More info about USB support status, update card status matrix, prefer Linux 2.6.x to 2.4.x. iwpriv.txt: Fix broken SetLEDPower/GetLEDPower information general_info: Add very detailed info about Radia radios. 42 (USB now working, ACX111 WEP not functional yet): RELIABILITY FEEDBACK: "very good" ACX100 USB really shouldn't try to set the power LED (as reported by akabeavis) Fix places with direct register access in USB case (will cause OOPS), undefine register functions to make sure people will get warnings if they add more register accesses which will be used in USB mode, too. Disable non-essential and potentially misleading features (EEPROM ID check) by default. start_net: Check for some other allowed firmware names, too. 41 (USB **FIXED** by Martin Wawro, ACX111 WEP not functional yet): RELIABILITY FEEDBACK: "very good" Martin Wawro: Corrected a bunch of bugs in the USB subsystem. Should work now (at least it does on my machines). Added support for multiple URBs to gain some speed, was able to get around 1MB/s transfer rate. Fixed USB support. Code is now able to handle fragmented packets from the USB bus (main source of error). I noticed that under 2.4.x kernels, it seems that the UHCI host controller drivers are buggy (both of them). The standard uhci driver simply trashes the host controller when confronted with queueing and the usb-uhci driver seems to have bug in its list handling (an entry appears more than once in the freespace list). The code runs well with EHCI and OHCI drivers on 2.4.x and also on UHCI under 2.6.9. Fixed USB support. Also introduced something like a "hard timeout" for control transfers (5.5s). Fixed USB support. Introduced several new defines to facilitate debugging of some of the USB resources. Also substantially extended some of the USB data structures in the wlandevice_t type. Andreas Mohr: Reenable USB compilation now that USB support is fixed. :) Merged LED link quality blinking into Get/SetLEDPower. Merged SetScanDelay/SetScanMode into much better Get/SetScanParams. Revert ill-committed re-enabling of Tx timeout ring buffer reinit. start_net: Reverse key and algorithm order, since the current order supposedly makes setting the key fail. (huh?? this is documented as working in either order; maybe specific iwconfig versions only have problems with this) A lot of cleanup to iwpriv code. Fix some return value documentation (UGH, don't you hate overly verbose documentation of simple facts that will then be faster out of date than you can say "outdated"??) Update USB code to use new module_param() stuff. 40 (USB still broken, ACX111 WEP not functional yet): Hopefully resolve those all too popular DMA memory alloc issues... (use a wrapper for both pci_alloc_consistent() and the improved dma_alloc_consistent()). Don't update the Rx config in atomic context, do it in after_interrupt_task part instead. Another endianness fix. Include linux/moduleparam.h as suggested for new module_param(). Small optimization of the link quality blinking code as suggested by Pierre Dumuid. Fix format string. README: Add missing "promiscuous" keyword. Transfer speed hint. Some changes. Some small updates. 39 (USB still broken, ACX111 WEP not functional yet): Readd asm/uaccess.h, since it's required for 2.4.x (doh!) Change ring buffer count for ACX111 from 32 down to 16 due to memory allocation issues. Add support for 2.6.10 module_param() change Change/improve some WIRELESS_EXT ifdefs 38 (USB still broken, ACX111 WEP not functional yet): ** NOTE ** grave slowdowns have been reported with pf35+ and 2.6.x, but I couldn't reproduce that with pf38 and 2.6.10-rc1-mm5... We were often allocating twice as much ring buffer memory as actually needed! This led to some frequent out of memory issues, especially with current kernels. (!?!?) Add some wmb() and rmb() memory barriers (maybe that helps to avoid ring buffer sync issues?). With default "easy" rate setup, make sure to not specify basic rates other than standard 802.11b, since otherwise 22Mbps settings or 802.11g rates won't be able to establish a proper Ad-Hoc "master" (other clients won't connect). Pierre Marc Dumuid: Patch to blinking the Power LED at a rate related to the quality (plus some changes of mine) Add some more missing endianness conversions required to get ARM big-endian to work. Set default rate stepup slightly higher, since we were too aggressive here. Fix firmware version parsing 2.4.7 doesn't even know __devexit_p, so attempt a workaround fetch_firmware: Add another ACX111 URL Rename acx100_power_led() to acx_power_led() as it should be, add another unlikely(), another rmb(), add comment about Tx ring buffer deadlock Reverse struct framehdr error message arguments, since it makes more sense that way. Add acx_ioctl_set_scan_mode invocation. Add some log messages, fix some comments. README: Detail kernel version requirements, small update. 37 (USB still broken, ACX111 WEP not functional yet): Remove iwpriv SetLowPkgRx, SetExLowPkgRx in favour of acx111 sensitivity ioctl setting (range 1 to 3). Add special radio recalibration support for ACX111, not tested! (please report). Reorder many ACX100/ACX111 chip type branches to have ACX111 first, since this is the dominant chip now market-wise. Tiny IRQ handler optimization. Add some unlikely(). Slightly stronger EEPROM writing warning message. Reorder some wlandevice_t members. 36 (USB still broken, ACX111 WEP not functional yet): Get rid of static variable to hopefully fix issues when using two cards with this driver. Update pci_save/restore_state check to assume that it will be changed in stock 2.6.10, since stock 2.6.9 didn't contain the update yet. Maciek Gajewski: fix off-by-1 error when setting current WEP key. Alessandro Suardi: Remove bogus inline's that gcc 3.4.2 is complaining about. The USB timeout member has been removed before 2.6.9. Make sure people won't try the broken USB driver any more... README: Add blurb about wireless-tools version issues. 35 (USB still broken, ACX111 WEP not functional yet): First attempt to fix promiscuous/multicast support in order to not always let the card capture all packets. Improve recalibration by only recalibrating in 5-minute intervals to avoid excessive recalibration which might perhaps lead to excessive temperature due to keeping the card running permanently. Completely revised net queue handling (use netif_carrier_xxx() functions, too). Not too much testing, seems to work for me. Fix firmware version parsing. scripts/start_net: Usability improvements by Craig Fields. Make power LED toggling work on acx111, too (PLEASE REPORT WHETHER IT STILL WORKS ON AN EXTERNAL ACX100 CARD!). Revise state handling, since it was broken. Fix error on "iwconfig rate auto" on acx100. On joining, the DTIM interval had been set slightly incorrectly. Clear CTL_OWN bit AFTER having set the Status field. Fix incorrect rx filter config bits. Remove queue task flushing, caused hang on shutdown by itself, and it was useless, too. Fix potential calculation error due to endianness conversion issues, add some missing endianness corrections. Disable setting of Master mode for now, since it's totally not working anyway. Add Short Preamble Tx logging for ACX111. IO_ACX_INT_TRIG should simply have individual bits set, not the ones read back from IO_ACX_INT_TRIG plus the one I want to notify. Introduce more aggressive locking possibility in clean_tx_desc, but this might break things, deactivated. Add a cond_resched() at some places when useful and supported. Shorten log messages. Comment out some struct members. Add some more unlikely()/likely(). Add notification about limited acx111 power level capability README: 5 tons of updates. TODO: Update. 34 (USB still broken, ACX111 WEP not functional yet): Free netdev at the very end only to avoid timeout handler OOPS due to invalid dev (appears to have fixed it!). Don't keep recalibrating endlessly, since it led to an endless loop. Calibrate the radio in the timeout handler, too. Make sure to use low rates initially on Tx rate auto in order to not have transfer problems with distant/slow peers. static'ize some functions and ifdef out several unused functions, thus saving 5kB file/memory size :-) Don't disable the radio Tx/Rx before enabling it, since I suspect it might confuse the firmware during packet handling. Fix struct packing to do the same as other kernel drivers do and to get rid of gcc 3.4.x warnings. More accurate PCI device ID defines. Add more diag output to /proc (struct TIWLAN_DC). Remove some bogus struct length initialization. Slight logging improvements. README update. 33 (USB still broken, ACX111 WEP not functional yet): Wake net queue on timeout if needed. Use an emergency Tx descriptor cleanup handler in Tx timeout handler, because the standard Tx descriptor cleanup handler expects the ring buffer to be in a certain state, which is a bad thing. Retry radio calibration in case a calib operation failed (e.g. Tx busy error) We forgot to remove the task scheduler, which caused an OOPS on unloading in case the task scheduler got called after vital resources had already been freed... Make acx_after_interrupt_task use dev instead of priv. Add FIXME for problematic mysterious OOPS. "failed" --> "FAILED" Log firmware_numver, too. 32 (USB still broken, ACX111 WEP not functional yet): [sorry, forgot cvs update, pf32 now updated to be the REAL pf32] Get rid of repeated calibration notification messages by disabling them after some time. Dynamic scaling of Tx cleanup period depending on number of Tx buffers (rather boring feature). Tell people to go to README on out of memory situations. Several README updates. Add some error text. Small logging fix. 31 (USB still broken): - do implement radio recalib on Tx error 0x20, since it much improves availability for me on acx100. Watch out for possible side-effects which *might* happen such as prolonged card operation into fatal temperature levels!! - fix *HORRIBLE* bug in host memory allocation for Rx buffers: we only allocated a struct size instead of sufficient space for many Rx packet bodies (who changed that for the worse?) - halted member of struct usb_device got removed in 2.6.9-rc1 - fix acx100_ie_memconfigoption_t reversed TxBlockNum/RxBlockNum - merge acxlog(), printk, sprintf into single statements(saves 5K(!) o f RAM) - much improved driver startup speed (improved scheduling) - Rename many functions from acx100_XXX to acx_XXX - Makefile: Don't pretend that compile succeeded when we don't actuall y know it for sure - add some more unlikely() - move some debug logs after the stuff has been done that they're talk ing about - changes in the acx100_dump_bytes area - slightly improve acx100_rxmonitor - add debugging of Rx data - add debugging to resume handler - remove some bogus casts 30 (AMD64 should work now, please test! USB still broken): andi: - Clean up structure naming and packing (should fix AMD64 problems). - Fix kernel version dependent __devinitdata problem, change radio status text. - default acx111 ring buffers to 32 entries, remove some bogus casts. - Improve beacon frame creation, improve error message - Fix my max_rate screwup. - fetch_firmware: Add 20 second timeout to avoid eternally hanging on first URL in list. - Makefile: Less confusing firmware directory message. - More accurate PCI device ID defines. - Remove some bogus struct length initialization. - README and docu updates. Fix variable naming: erate -> orate, emask -> omask, ... ("operational") Denis Vlasenko: - Remove ISTATUS_5_UNKNOWN and unknown0x2350. - add some comments and TODOs and rename fields to more understandable names. - fix cases where we print MAC addresses 'smashed together' like this: 00.E0.98.BA.20.C300.E0.98.BA.20.C300.04.E2.64.23.C200.04.E2.64.23.C200.04.E2.64.23.C2<4> 29 (mainly cleanup, some AMD64 fixes, USB still broken): andi: Clean up structure naming and packing (should fix AMD64 problems, too, hopefully). More accurate PCI device ID defines. Remove some bogus struct length initialization. Denis Vlasenko: Remove ISTATUS_5_UNKNOWN and unknown0x2350. acx100_probe_pci() has far too many error cases, cannot be handled by acx_cleanup_card_and_resources(). I actually hit a bug when fw upload fails due to missing file. I am sure there are other cases. Patch takes care of that by reworking error handling. 28 (this one should be much better; USB still broken): andi: Don't comment out card rate fallback activation, since we need it for proper auto rate support (otherwise e.g. we're stuck with the card staying at the same *unsupportedly* high rate during the same Tx attempt round, which is bad if we only attempt to send once, e.g. for MGMT frames...). in iwconfig rate, make sure to fill up all lower rates, too, since APs *expect* to have full support for all rates, not just the highest, and we cannot configure this aspect in iwconfig rate, only in iwpriv set_rates. This implies we need to restrict acx111 rate mask to highest rate on Tx if not in auto mode, so added support for that, too. Indicate proper acx111 Tx power levels (according to the two levels the card usually supports). Revert default safe 16bit I/O to faster 32bit and instead make sure that people notice the problem and know what to do then. start_net: Make sure to use auto rate by default. Fix configoptions output. Rename some variables to useful names, add some hopefully helpful comments. Denis Vlasenko: * Eliminate ACX_TXRATE (replace with RATE100) * Add an explanation about preambles * const char *str => const char str[] * untangle if (OK != (err = register_netdev(dev))) * missing FN_EXIT * 6 => ETH_ALEN Not so much trivial: * someone broke SET/GET convention, fix it. You may need to test that I didn't accidentally broke ENABLE_[EX_]LOW_POWER_PACKETS ioctl with this. 27 (USB still broken): andi: Revert to 16bit I/O access as default, since it appears to fix some firmware upload failure cases. Several cleanups, mainly towards better WEP support for ACX111 (not done yet!). Cleanup patch, e.g. to enable me to debug the rmmod OOPS a bit better: Move /proc handling to acx100_helper.c. Move some functions around, renaming. Shorten many log messages. Move more I/O register init stuff to ioregister.c Remove bogus netif_device_detach() capability is a 16bit value, so print it accordingly. 26 (USB still broken): andi: - hack to make acx111 actually attempt to authenticate with an AP in case we explicitly stop the scan (I've still got issues with connecting to my WRT54GS-DE, though, maybe spec compliance of auth frames?) When connecting, I get assoc req error 18 (invalid basic rate set). Seems we've got some fixup to do after the recent rate patch... 25 (USB still broken, sorry): Denis Vlasenko: - large Tx auto rate patch (improvements, work towards per-peer auto rate) andi: - AMD64 fixes (is it better now?) - add many more fields to /proc/driver/acx_wlanX_diag - Some acx111 scanning updates. Hopefully this will only improve stuff - more endianness fixes - TONS of cleanups in the driver - Makefile: clean up some temp files - README and TODO updates 24 (USB still fatally broken - no time AT ALL! this release took **WAY** too much time anyway...): csucsu: - init_wep cleanup. - fix (unify) return values - use CLEAR_BIT/SET_BIT macro olli: - acx111 features - (extremely) low power packet receive andi: - Fix an endless amount of buggy commits. - Reinit the templates whenever an important parameter changes (doh!). - Reopen netdev queue on assoc, hopefully fixes all remaining - NETDEV WATCHODG issues. - Unify acx100 and acx111 reset_dev code. - Correct /proc/driver/acx_wlanX output. - Remove "wrong" kmalloc result casts. Denis Vlasenko (sorry, didn't commit your enhanced 23.1 patch due to conflicts from previous commit): - moves logging code out of line - 50kb saved - speed optimizes it - removes return's at end of void functions - brings sanity to p802addr_to_str - As a bonus, it fixes a bug: '/* Driver defaults */' were defined inside #ifdef ACX_DEBUG. Benjamin Schrauwen: - some scripts/fetch_firmware fixes 23: Denis Vlasenko: improve acx100 auto rate support, interfacing to the acx111 auto rate layer. (ed. note: works beautifully!) Fix problem with leftover acx111 code causing acx111 oops 22 (note: acx111 still awkward for me - rate setting): DON'T reset Ctl field to 0, this caused ring buffer lockup after some 30 minutes or some hours due to timing issues and thus TxQueueFree drift down to 0 (note: will disrupt traffic for acx111, so don't do that here for now). Reset rts/ack counters in Tx clean handler, not during the precious time when we want to send something. Reset error byte, too. Improve ring buffer printout (also display Linux netdev queue status). Reset TxQueueFree in Tx timeout helper to original value to improve repair probability. Rename pDesc to pRxDesc/pTxDesc. Several endianness fixes (especially USB). Rename descriptors' Ctl values to x_8 and x_16 to directly indicate byte or word width (endianness!!). 21 (20 tons of new fixes, ChangeLog is... yawn... ok, sorry, too tired, will do tomorrow...) 20 (USB still not fixed, ACX111 is now (much?) more reliable, for me at least): Denis Vlasenko: - add support for 802.11g rates - Improve/fix info mailbox management - split buffer debugging into tx/rx Gabor Csuri: - Makefile clean target fix - add more WEP keys to start_net Small log change. Some README updates. 19 (USB still not fixed, ACX111 is still flaky, probably a bit less): Ring buffer improvements to fix recent fatal NETDEV WATCHDOG deadlock issue caused by a ring buffer weakness exposed by recent optimization. Peter 'p2' De Schrijver: Many endianness fixes for PPC. Partial AMD64 fixes. HUGE dma queue cleanup (much simplified, plugged several leaks, saves >= 1.5kB driver size!), rename GetPhyMediumBusy to GetPhyChanBusy (that name turned out to be too long for some very strange reason), try to prevent GetPhyChanBusy calculation overflow. Gabor Csuri: wep ioctl fixes, preparation for 802.11g rates Denis Vlasenko: add missing FN_EXIT statements 18 (USB still not fixed, ACX111 is quite flaky at least since pf13, will do more fixing/testing soon :-\): Sascha Sommer: brown paper bag fix (-> Andreas) breaking acx111 cards. (NOTE: acx111 still doesn't really work for me in any recent tar file for some reason, dma errors) Fix "IRQ xx: nobody cared" fatal card deactivation message with help from Denis Vlasenko (turned out we used a slightly wrong I/O register, so we had to do problematic IRQ activation). Cleaned up ACX111 reset procedure considerably (now basically identical to ACX100!). Implement iwpriv GetPhyMediumBusy (determine busy percentage of phy medium). Add priv->irq_mask_off to store the "all IRQs off" mask for ACX100/ACX111. Add position indicators to ring buffer printout in acx_wlan0_diag. The Rx descriptor full/empty flag (BIT31) was actually REVERSED! (tested, works, and maybe it even works better now...) Add some more hardware IDs. Optimization: Add unlikely(), clean Tx descriptor queue on Tx timeout, don't clean Tx descriptors on every IRQ, set dev->last_rx at the correct moment, use macros instead of memcpy() / memcmp(). Updated iwpriv docu doc/iwpriv.txt. 17 (doh!!! Not even ACX100 worked in plus_fixes_15!): (I disabled and re-enabled radio Rx/Tx, but this broke ACX100 Rx completely!) Huge ring buffer cleanup/speedup. Replace I/O register management by much more memory saving static version. Some ACX100/ACX111 Tx descriptor size differences fixup (not too important). Small descriptor speedup. Rename SetPHYAmpBias to SetPhyAmpBias. pci_free_consistent pTxHostDescQPool copy&paste(?) / USB support bug fix. General cleanup. Zero out issue_cmd result buffer on failure. 16 (the "embarrassing bug fix release"; sorry, USB still not fixed): Denis Vlasenko: fix fatal typo in acx111_get_io_register_array() killing all ACX111 cards dead (the box, that is...) 15 (sorry, USB still not fixed): Implement iwpriv SetPHYAmpBias. YAY! :) Fix USB compile on 2.4.x. My bad! (USB does NOT work currently...) Figure out exact chip names according to firmware ID. Make sure we don't list our own MAC when scanning. Proper documentation of antenna diversity settings. separate set_wepkey() Tried fixing ACX111 phy reg access, no luck. Disable Rx/Tx when modifying PHY stuff. Fix compiler warnings. Change acxlog() to use more sane syntax. Clean up TIWLAN_DC. Unify ACX100 USB and non-USB descriptor flag defines. Updated README, TODO. Add some firmware documentation. 14 (ACX100 USB does NOT work in this tar any more, will fix soon): Olli: ACX111 changes: - Added support to change tx power level - Added support to receive low power packets but not enabled yet. - Removed setting of WEP options (not available on ACX111) - Added ACX111_IE_RADIO_BAND - Added two structures: ACX111TxLevel, ACX111FeatureConfig Denis Vlasenko: Fixed my (Andreas's) 16-bit acx100_write_reg32() screwup. Fix compile for users attempting a make in src/ Fix two horrible WEP bugs: - two WEP config cmds were REVERSED! - off-by-1 struct addressing bug Do dump_stack in L_CTL case only. Allow set_ap in Auto mode, too (LinuxTag relevant ;-). Dr. Olaf Flebbe: The Ralink radio appears to have the same PHY register layout, so add support for Tx level and sensitivity for it. fix bug in acx100_write_cmd_type, unify to acx100_write_cmd_type_or_status unify ihw_usb.c into ihw.c (most likely broke USB operation, will fix soon, should also be able to achieve MUCH more unification) Finally found out that radio type 0x16 must be Radia! Add verbose message to explain set_ap failure reason. Add DbgGetIo and DbgSetIo to be able to debug lockups more closely fetch_firmware: Update yet again outdated URLs. Ask people to report any broken links. More detailed error message. Rename all commands to indicate their chip suitability (ACX100 / ACX111). Unify some redundant struct definitions into one authoritative one. Remove annoying log output. Add FW1130.BIN to the firmware names we attempt to find. Endianness fixes done on LinuxTag! :-) (not fully finished yet!) (with LOTS of help from Linux ports expert Peter De Schrijver using his Powerbook G3, a VERY capable guy :-) Memory access functions already do byte-swapping themselves!! (undid many changes, doh! :-\) Many fixes in 802.11 stack. Remove many non-acx defines. PowerPC fix: PPC seems to have char defined as unsigned. Fixup USB code to use more sane packet format, just like the normal ACX100 stuff does. Improve assoc logging, add comment about buggy code. More experiments with memory read/write via firmware. No luck. Remove oldish Makefile messages replace acx111 command numeric values by their names Small README update. 13: RENAME ALL IWPRIV COMMANDS TO Upper-Lower-Case TO MAKE THEM SHORTER. Added acx111 scan functions. Fix Ad-Hoc "master" mode (we were sending out Beacon frames with an outdated ESSID since we forgot to reinit Beacon templates on config change). Add iwpriv SetScanDelay to set the per-channel wait time. Use macros instead of inlined functions for I/O access (faster/smaller). Do dump_stack in L_CTL case only. Print jiffies for profiling. Set iwconfig name to "IEEE 802.11g+" for acx111 cards. Message fixes. removed unneeded parameter from acx111_init_packet_templates 12 (no acx111-specific fixes): Use standard default values for short and long retry limits (7 and 4 instead of 5 and 3). Reduce default Tx power level to 18dBm everywhere due to WRT54G radio damage stories... Fix iwlist scan to not output an error if we found 0 stations. Many optimizations: always log AFTER the dirty work, add likely/unlikely branch prediction tunings, slightly speed up IRQ handler. Fix WEP variable size bug. Fix slight auto increment bug. Fix use of incorrect size for wep_mgmt cmd transfer. Fix incorrect use of "1" parameter for 0 parameters at ACX100_CMD_DISABLE_TX. Add read/write memory access by firmware capability. README updates: warning about Tx power level, "link failed" issue. TODO updates. 11: ACX111 scanning fixes. Mention how to disable console flooding. 10 (aka the "where are the non-x86 architecture ports, dammit!?" version): More fixes for triggering a scan in Auto mode. Fix macro compile error with certain compilers. Small memory and speed fixes. Improve logging. Improve info mailbox support. Big README update. Fix Israel regulatory domain parameters. Makefile fix. 9: Fix scan broken in mode Auto. Fix sensitivity update (timing?) problem. Fix/improve bus access width log. README updates. At least do make clean for make distclean. 8: Fix gcc 2.95 c++ism screwups. Fix sensitivity setting failure. Thanks to Paisa Seeluangsawat. Document ACX100 USB status. 7: Merge final pieces of ACX111 support!!! (untested for lack of hardware, though) Disable power save mode again (broke scanning). Fix *.o/*.ko handling in scripts/start_net Another gcc 3.4.x fix. More endianness fixes. Much more user-friendly installation. USB updates, make driver load /usr/share/acx/ACX100_USB.bin. Add task handler (IRQ BH handling). Add iwpriv DbgSetMasks (for debugging only). Kill compiler warnings. Splint fixes. 6: Fix broken acx_signal_to_winlevel inlining breaking gcc 3.4.x compile. It looks a lot like wireless_send_event is actually only available with WIRELESS_EXT > 13. ACX USB should also use /usr/share/acx/ as default firmware directory. Fix another AMD64 issue. Reorder probe_pci failure cleanup, hopefully fix annoying "unregister_netdevice: device wlan0/XXXXXXXX never was registered" message. 5 (aka the "sorry, 4 was too broken" version): Fix problems caused by Linux 2.6.x define screwup. Fix SET_NETDEV_DEV symbol non-existing in 2.4.x. Fix some pointers to be real pointers, not integers (for AMD64). Fix variable defines in order to fix broken variable lengths. This causes > 100 bytes less memory use :) Should fix AMD64 firmware loading issue. Fix some USB compile warnings. All in all I'm a happy camper, should make AMD64 work a lot better now. :) 4: Fix DMA memory leak on suspend/resume. Improve locking (optimize for speed), some small locking fix. Actually install the acx_usb.ko module on 2.6.x, since it's compiling (and working!) properly now. Add the device and driver symlinks in /sys/class/net/ More detailed Tx error output. Many -pedantic fixes. Remove some foreign information from acx100.h. Remove wireless extension version info warning from acx100_ioctl.c. Update TODO. 3: Fix floating point use in driver, add warning infrastructure. Newer ACX111 firmware versions seem to have switched to using an external radio module, so reenable radio module loading for ACX111. inject_kernel_tree updates. README updates. 2: IMPLEMENT ACTUALLY RATHER WELL-WORKING POWER MANAGEMENT!! :-) Now I can fully suspend/resume the card and can actually continue with the OLD connection if it hasn't timed out yet :) Use default firmware directory /usr/share/acx in case no custom firmware_dir has been specified and tell the user we did that. Calling iwconfig commit before ifup led to OOPS since the timer wasn't initialized yet. Make sure we only update card settings if the interface is up. Increment initial scan time from 1.5s to 2.5s: short scan time missed some upper channels :-\ reg_domain_ids cleanup; hopefully fix array corruption. Fix screwed up wireless extensions version checks. Fix off-by-1 error in iwlist scan channel frequency calculation. Do some further ACX_IO_WIDTH work that I missed. Fix DEPMOD lookup for users lacking /sbin in PATH. Fix some small variable size issue. 1: Fix pci_name() screwup for kernels < 2.4.21. Doh, not again! Add define ACX_IO_WIDTH, use 32bit access everywhere per default now. Some small USB driver updates. More useful signal quality calculation.