Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Staging: wlags49_h2: add Agere driver for HERMES II and HERMES II.5 c…

…hipsets

WLAN driver for cards using the HERMES II and HERMES II.5 chipset

Based on Agere Systems Linux LKM Wireless Driver Source Code,
Version 7.22; complies with Open Source BSD License.

The software is a modified version of wl_lkm_722_abg.tar.gz from the
Agere Systems website, addapted for Ubuntu 9.04 and modified to
fit in the current Linux kernel (2.6.31).

Modified for kernel 2.6 by Henk de Groot <pe1dnn@amsat.org>
Based on 7.18 version by Andrey Borzenkov <arvidjaar@mail.ru> $Revision: 39 $

Signed-off-by: Henk de Groot <pe1dnn@amsat.org>
Cc: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
  • Loading branch information...
commit 68c0bdff7ac903421f224e080499c51cd5287f97 1 parent 349f535
Henk de Groot authored gregkh committed
Showing with 50,250 additions and 0 deletions.
  1. +4 −0 drivers/staging/Kconfig
  2. +2 −0  drivers/staging/Makefile
  3. +8 −0 drivers/staging/wlags49_h2/Kconfig
  4. +81 −0 drivers/staging/wlags49_h2/Makefile
  5. +180 −0 drivers/staging/wlags49_h2/README.ubuntu
  6. +641 −0 drivers/staging/wlags49_h2/README.wlags49
  7. +3 −0  drivers/staging/wlags49_h2/WARNING.txt
  8. +3,337 −0 drivers/staging/wlags49_h2/ap_h2.c
  9. +4,094 −0 drivers/staging/wlags49_h2/ap_h25.c
  10. +229 −0 drivers/staging/wlags49_h2/debug.h
  11. +390 −0 drivers/staging/wlags49_h2/dhf.c
  12. +226 −0 drivers/staging/wlags49_h2/dhf.h
  13. +175 −0 drivers/staging/wlags49_h2/dhfcfg.h
  14. +4,881 −0 drivers/staging/wlags49_h2/hcf.c
  15. +405 −0 drivers/staging/wlags49_h2/hcf.h
  16. +2,344 −0 drivers/staging/wlags49_h2/hcfcfg.h
  17. +809 −0 drivers/staging/wlags49_h2/hcfdef.h
  18. +734 −0 drivers/staging/wlags49_h2/man/wlags49.4
  19. +1,156 −0 drivers/staging/wlags49_h2/mdd.h
  20. +251 −0 drivers/staging/wlags49_h2/mmd.c
  21. +78 −0 drivers/staging/wlags49_h2/mmd.h
  22. +4,480 −0 drivers/staging/wlags49_h2/sta_h2.c
  23. +5,255 −0 drivers/staging/wlags49_h2/sta_h25.c
  24. +715 −0 drivers/staging/wlags49_h2/wl_cs.c
  25. +112 −0 drivers/staging/wlags49_h2/wl_cs.h
  26. +248 −0 drivers/staging/wlags49_h2/wl_enc.c
  27. +135 −0 drivers/staging/wlags49_h2/wl_enc.h
  28. +232 −0 drivers/staging/wlags49_h2/wl_if.h
  29. +1,073 −0 drivers/staging/wlags49_h2/wl_internal.h
  30. +3,878 −0 drivers/staging/wlags49_h2/wl_main.c
  31. +155 −0 drivers/staging/wlags49_h2/wl_main.h
  32. +2,085 −0 drivers/staging/wlags49_h2/wl_netdev.c
  33. +171 −0 drivers/staging/wlags49_h2/wl_netdev.h
  34. +1,596 −0 drivers/staging/wlags49_h2/wl_pci.c
  35. +126 −0 drivers/staging/wlags49_h2/wl_pci.h
  36. +2,095 −0 drivers/staging/wlags49_h2/wl_priv.c
  37. +138 −0 drivers/staging/wlags49_h2/wl_priv.h
  38. +1,128 −0 drivers/staging/wlags49_h2/wl_profile.c
  39. +104 −0 drivers/staging/wlags49_h2/wl_profile.h
  40. +135 −0 drivers/staging/wlags49_h2/wl_sysfs.c
  41. +7 −0 drivers/staging/wlags49_h2/wl_sysfs.h
  42. +1,604 −0 drivers/staging/wlags49_h2/wl_util.c
  43. +119 −0 drivers/staging/wlags49_h2/wl_util.h
  44. +193 −0 drivers/staging/wlags49_h2/wl_version.h
  45. +4,138 −0 drivers/staging/wlags49_h2/wl_wext.c
  46. +113 −0 drivers/staging/wlags49_h2/wl_wext.h
  47. +8 −0 drivers/staging/wlags49_h25/Kconfig
  48. +81 −0 drivers/staging/wlags49_h25/Makefile
  49. +30 −0 drivers/staging/wlags49_h25/README.txt
  50. +2 −0  drivers/staging/wlags49_h25/ap_h25.c
  51. +2 −0  drivers/staging/wlags49_h25/debug.h
  52. +2 −0  drivers/staging/wlags49_h25/dhf.c
  53. +2 −0  drivers/staging/wlags49_h25/dhf.h
  54. +2 −0  drivers/staging/wlags49_h25/dhfcfg.h
  55. +2 −0  drivers/staging/wlags49_h25/hcf.c
  56. +2 −0  drivers/staging/wlags49_h25/hcf.h
  57. +2 −0  drivers/staging/wlags49_h25/hcfcfg.h
  58. +2 −0  drivers/staging/wlags49_h25/hcfdef.h
  59. +2 −0  drivers/staging/wlags49_h25/mdd.h
  60. +2 −0  drivers/staging/wlags49_h25/mmd.c
  61. +2 −0  drivers/staging/wlags49_h25/mmd.h
  62. +2 −0  drivers/staging/wlags49_h25/sta_h25.c
  63. +2 −0  drivers/staging/wlags49_h25/wl_cs.c
  64. +2 −0  drivers/staging/wlags49_h25/wl_cs.h
  65. +2 −0  drivers/staging/wlags49_h25/wl_enc.c
  66. +2 −0  drivers/staging/wlags49_h25/wl_enc.h
  67. +2 −0  drivers/staging/wlags49_h25/wl_if.h
  68. +2 −0  drivers/staging/wlags49_h25/wl_internal.h
  69. +2 −0  drivers/staging/wlags49_h25/wl_main.c
  70. +2 −0  drivers/staging/wlags49_h25/wl_main.h
  71. +2 −0  drivers/staging/wlags49_h25/wl_netdev.c
  72. +2 −0  drivers/staging/wlags49_h25/wl_netdev.h
  73. +2 −0  drivers/staging/wlags49_h25/wl_priv.c
  74. +2 −0  drivers/staging/wlags49_h25/wl_priv.h
  75. +2 −0  drivers/staging/wlags49_h25/wl_profile.c
  76. +2 −0  drivers/staging/wlags49_h25/wl_profile.h
  77. +2 −0  drivers/staging/wlags49_h25/wl_sysfs.c
  78. +2 −0  drivers/staging/wlags49_h25/wl_sysfs.h
  79. +2 −0  drivers/staging/wlags49_h25/wl_util.c
  80. +2 −0  drivers/staging/wlags49_h25/wl_util.h
  81. +2 −0  drivers/staging/wlags49_h25/wl_version.h
  82. +2 −0  drivers/staging/wlags49_h25/wl_wext.c
  83. +2 −0  drivers/staging/wlags49_h25/wl_wext.h
View
4 drivers/staging/Kconfig
@@ -125,6 +125,10 @@ source "drivers/staging/iio/Kconfig"
source "drivers/staging/ramzswap/Kconfig"
+source "drivers/staging/wlags49_h2/Kconfig"
+
+source "drivers/staging/wlags49_h25/Kconfig"
+
source "drivers/staging/strip/Kconfig"
source "drivers/staging/arlan/Kconfig"
View
2  drivers/staging/Makefile
@@ -44,6 +44,8 @@ obj-$(CONFIG_RAR_REGISTER) += rar/
obj-$(CONFIG_DX_SEP) += sep/
obj-$(CONFIG_IIO) += iio/
obj-$(CONFIG_RAMZSWAP) += ramzswap/
+obj-$(CONFIG_WLAGS49_H2) += wlags49_h2/
+obj-$(CONFIG_WLAGS49_H25) += wlags49_h25/
obj-$(CONFIG_STRIP) += strip/
obj-$(CONFIG_ARLAN) += arlan/
obj-$(CONFIG_WAVELAN) += wavelan/
View
8 drivers/staging/wlags49_h2/Kconfig
@@ -0,0 +1,8 @@
+config WLAGS49_H2
+ tristate "Agere Systems HERMES II Wireless PC Card Model 0110"
+ depends on WLAN_80211 && WIRELESS_EXT
+ ---help---
+ Driver for wireless cards using Agere's HERMES II chipset
+ which are identified with Manufacture ID: 0156,0003
+ The software is a modified version of wl_lkm_722_abg.tar.gz
+ from the Agere Systems website, addapted for Ubuntu 9.04.
View
81 drivers/staging/wlags49_h2/Makefile
@@ -0,0 +1,81 @@
+#
+# Makefile for wlags49_h2_cs.ko and wlags49_h25_cs.ko
+#
+# Default build for Hermes-II base cards (possibly identified with
+# "manfid: 0x0156, 0x0003" in "pccardctl ident" output), comment
+# -DHERMES25 below
+#
+# If you want to build for Hermes-II.5 base cards (possibly identified with
+# "manfid: 0x0156, 0x0004" in "pccardctl ident" output), uncomment
+# -DHERMES25 below
+#
+# If you want to build AP support (untested), comment out -DSTA_ONLY
+
+INSTALLDIR := /lib/modules/$(shell uname -r)/kernel/drivers/net/wireless
+EXTRA_CFLAGS += -I$(KERNELDIR)/include
+EXTRA_CFLAGS += -I$(src) \
+ -DBUS_PCMCIA \
+ -DUSE_WPA \
+ -DUSE_WEXT \
+ -DSTA_ONLY \
+ -DWVLAN_49 \
+# -DHERMES25 \
+# -DDBG \
+# -DDBG_LVL=5 \
+# -DUSE_UIL \
+# -DUSE_PROFILE \
+
+ifeq ($(findstring HERMES25,$(EXTRA_CFLAGS)),)
+WLNAME := wlags49_h2_cs
+$(WLNAME)-y := sta_h2.o
+ifeq ($(findstring STA_ONLY,$(EXTRA_CFLAGS)),)
+$(WLNAME)-y += ap_h2.o
+endif
+else
+WLNAME=wlags49_h25_cs
+$(WLNAME)-y := sta_h25.o
+ifeq ($(findstring STA_ONLY,$(EXTRA_CFLAGS)),)
+$(WLNAME)-y += ap_h25.o
+endif
+endif
+
+# If KERNELRELEASE is defined, we've been invoked from the
+# kernel build system and can use its language.
+ifneq ($(KERNELRELEASE),)
+
+obj-m += $(WLNAME).o
+
+$(WLNAME)-y += wl_profile.o \
+ wl_wext.o \
+ wl_priv.o \
+ wl_main.o \
+ wl_enc.o \
+ wl_util.o \
+ wl_netdev.o \
+ wl_cs.o \
+ mmd.o \
+ hcf.o \
+ dhf.o
+
+$(WLNAME)-$(CONFIG_SYSFS) += wl_sysfs.o
+
+# Otherwise we were called directly from the command
+# line; invoke the kernel build system.
+else
+ KERNELDIR ?= /lib/modules/$(shell uname -r)/build
+ PWD := $(shell pwd)
+
+default:
+ $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
+endif
+
+clean:
+ rm -fr *.o *.ko *.mod.c *.mod.o .*.*.cmd Module.symvers \
+ Module.markers modules.order .tmp_versions
+
+install: default
+ -rmmod $(WLNAME)
+ install -d $(INSTALLDIR)
+ install -m 0644 -o root -g root $(WLNAME).ko $(INSTALLDIR)
+ /sbin/depmod -aq
+
View
180 drivers/staging/wlags49_h2/README.ubuntu
@@ -0,0 +1,180 @@
+=======================================================================
+WLAN driver for cards using the HERMES II and HERMES II.5 chipset
+
+HERMES II Card
+
+PCMCIA Info: "Agere Systems" "Wireless PC Card Model 0110"
+ Manufacture ID: 0156,0003
+
+HERMES II.5 Card
+
+PCMCIA Info: "Linksys" "WCF54G_Wireless-G_CompactFlash_Card"
+ Manufacture ID: 0156,0004
+
+Based on Agere Systems Linux LKM Wireless Driver Source Code,
+Version 7.22; complies with Open Source BSD License.
+=======================================================================
+
+DESCRIPTION
+
+The software is a modified version of wl_lkm_722_abg.tar.gz from the
+Agere Systems website, addapted for Ubuntu 9.04.
+
+Modified for kernel 2.6 by Henk de Groot <pe1dnn@amsat.org>
+Based on 7.18 version by Andrey Borzenkov <arvidjaar@mail.ru> $Revision: 39 $
+
+INSTALLATION
+
+Unpack in a new directory.
+
+Open a terminal screen.
+
+Change directory to the source directory
+
+Type command
+
+make
+
+and wait until it is finshed. Now you have build the module
+wlags49_h2_cs; this module is meant for a HERMES II card.
+
+The driver is tested with a Thomson SpeedTouch 110 Wireless PC Card.
+For the test Station mode was used with WEP. The driver is supposed
+to support WAP and as accesspoint that is NOT tested.
+
+If you have a card using the HERMES II.5 chip you have to make
+changes to the Makefile and uncomment -DHERMES25. This will build
+driver wlags49_h25_cs.
+
+Note: You can detemine the type with command "pccardctrl info"
+ MANIFID: 0156,0002 = HERMES - not supported by this driver
+ MANIFID: 0156,0003 = HERMES II (Wireless B)
+ MANIFID: 0156,0004 = HERMES II.5 (Wireless B/G)
+
+After succesfull compile type command
+
+sudo make install
+
+to install the module.
+
+Now the card should be recognized. It should be able to configure
+and use the card with NetworkManager. Wpa_supplicant also works, as does
+manual configuration using the iwconfig/iwlist programs.
+
+Note: I only tested Station mode with WEP but if I didn't break anything
+WPA and AP mode should also work; note however that WPA was experimental
+in the original Agere driver!
+
+Note: to compile as AP change the makefile and remove the line
+-DSTA_ONLY \
+
+(or comment it, but in that case make sure to move it after all the
+ flags you want to use)
+
+CHANGES
+
+The HCF functions to control the card are virtually unchanged, the only
+changes are meant to fix compiler warnings. The only real change is in
+HCF_WAIT_WHILE which now has a udelay(2) added to give a small delay.
+
+The linux driver files (wl_xxxx.c) are changed in the following ways:
+- Addaptations of Andrey Borzenkov applied to 7.22 source
+- Alterations to avoid most HCF_ASSERTs
+-- Switching interrupts off and on in the HCF
+-- Bugfixes, things that were aparently wrong like reporting link status
+ change which checked a variable that was not changed in HCF anymore.
+-- Used on WEP but setting keys via SIOCSIWENCODEEXT was not supported
+-- Recovery actions added
+
+The major problem was the order in which calls can be made. The original
+looks like a traditonal UNIX driver. To call an "ioctl" function you
+have to "open" the device first to get a handle and after "close" no
+"ioctl" function can be called anymore. With the 2.6 driver this all
+changed; the former ioctl functions are now called before "open" and
+after "close", which was not expected. One of the problems was enable/
+disable of interrupts in the HCF. Interrupt handling starts at "open"
+so if a former "ioctl" routinge is called before "open" or after "close"
+then nothing should be done with interrupt switching in the HCF. Once
+this was solved most HCF_ASSERTS went away.
+
+The last point, recovery actions added, needs some clarification.
+Starting the card works most of the time, but unfortunately not always.
+At a few times recovery code was added; when the card starts to
+misbehave or the communication between the HCF and the card is
+out of sync and the HCF enters DEFUNCT mode everything is reset and
+reinitialized. Note, hcf.c contains a lot of documentation. It takes
+some time but slowly some things become clear. Also some unresolved
+issues are mentioned in hcf.c, so there are still unknown bugs.
+
+The card problems are almost in all cases when starting up and before
+the first association with an AP, once the card is in operation it
+seems to stay that way; when debugging no HCF_ASSERTS appear anymore.
+Note: some HCF_ASSERTS still appear, in a number of cases it is a real
+error, for example at card removal the missing card is detected.
+
+LICENSE
+
+The Agere Systems license applies. This is why I include the original
+README.wlags49. The instructions in that file are bogus now. I also
+include the man page. Eventhough setting parameters on the module
+does not work anymore but it provides some information about all the
+settings.
+
+I have not have personal contact with Agere, but others have. Agere
+agreed to make their software available under the BSD licence.
+This driver is based on the 7.22 version.
+
+The following was mailed by Agere to Andrey Borzenkov about this:
+
+ --- Begin Message ---
+
+ * From: TJ <tj@xxxxxxxxxxx>
+ * Date: Mon, 05 Feb 2007 19:28:59 +0000
+
+ Hi Andrey,
+
+ I've got some good news for you/us/the world of Hermes :)
+
+ I got a reply from the legal representative at Agere confirming that
+ their source-code is BSD licensed, and I've included the contents of the
+ email here.
+
+ I hope this re-assures you so that your excellent work on the drivers
+ can be made widely available for other hackers to work with.
+
+ Regards,
+
+ TJ.
+
+ ---------
+ On Mon, 2007-02-05 at 13:54 -0500, Pathare, Viren M (Viren) wrote:
+
+
+ "I would like to confirm that the two drivers; Linux LKM Wireless Driver
+ Source Code, Version 7.18 and Linux LKM Wireless Driver Source Code,
+ Version 7.22 comply with Open Source BSD License. Therefore the source
+ code can be distributed in unmodified or modified form consistent with
+ the terms of the license.
+
+ The Linux driver architecture was based on two modules, the MSF (Module
+ specific functions) and the HCF (Hardware Control Functions). Included
+ in the HCF is run-time firmware (binary format) which is downloaded into
+ the RAM of the Hermes 1/2/2.5 WMAC.
+
+ This hex coded firmware is not based on any open source software and
+ hence it is not subject to any Open Source License. The firmware was
+ developed by Agere and runs on the DISC processor embedded within the
+ Hermes 1/2/2.5 Wireless MAC devices.
+
+ Hope this helps.
+
+ Sincerely,
+
+ Viren Pathare
+ Intellectual Property Licensing Manager
+ Agere"
+
+
+
+ --- End Message ---
+
View
641 drivers/staging/wlags49_h2/README.wlags49
@@ -0,0 +1,641 @@
+==============================================================================
+Agere Systems Inc. July 2004
+Readme for Linux Driver Source for Wavelan Version: 7.22-abg
+==============================================================================
+
+This text file includes update information, installation instructions,
+limitations to the current version of the product, and suggestions to solve
+known issues or problems.
+
+
+TABLE OF CONTENTS.
+
+1. DESCRIPTION
+2. SYSTEM REQUIREMENTS
+3. NEW IN THIS RELEASE
+4. INSTALLATION NOTES
+5. TECHNICAL CONSTRAINTS
+6. KNOWN ISSUES
+7. TECHNICAL SUPPORT
+
+------------------------------------------------------------------------------
+1. DESCRIPTION
+
+ With this package, you can build and install a Wireless driver for a
+ specific Linux kernel.
+
+ The driver in this package supports the network interface cards based on:
+ - WL60010, a.k.a. Hermes-II
+ - WL60040, a.k.a. Hermes-II.5
+
+ Although derived from the Hermes-I/II Linux driver, this release ONLY
+ Supports Hermes-II/II.5 chipsets. Hermes-I is no longer supported.
+
+ The software is distributed in a compressed source file archive:
+ - wl_lkm_7_22_abg.tar.gz
+
+ Because this release supports more than one Hermes CPU and bus
+ architecture, a naming convention is used for the resulting binaries that
+ can be built from this source code. Driver binaries are named as follows:
+
+ wlags49_<hermes_type>_<bus_arch>.o
+
+ where 'wlags49' denotes an Agere WaveLan Linux build,
+
+ <hermes_type> is: 'h2' for Hermes-II, 'h25' for Hermes-II.5
+
+ <bus_arch> is: 'cs' for Card Services (PCMCIA, Compact Flash), PCI for
+ PCI or MiniPCI.
+
+ For example, a driver built for Hermes-II Card Services (PCMCIA/Compact
+ Flash) is named wlags49_h2_cs.o, whereas a driver built for Hermes-II
+ MiniPCI is named wlags49_h2_pci.o.
+ The following software is included with this distribution:
+
+ General information:
+ * README.wlags49 This file
+ * LICENSE.wlags49 License
+ * wlags49.mk Top level Makefile
+ * Build Script to build driver
+ * Install Script to install driver
+
+ Driver source:
+ * wireless/ MSF source
+ * hcf/ HCF and F/W source
+ * wireless/wlags49_cs.mk Driver Makefile, PC Card
+ * wireless/wlags49_pci.mk Driver Makefile, PCI
+ * include/hcf/debug.h Driver debug support
+ * include/hcf/hcfcfg.h Header to configure HCF
+ * include/wireless/*.h Driver source headers
+
+ Driver online manual page:
+ * man/wlags49.4 Driver manual page
+
+ PCMCIA configuration update:
+ * etc/wlags49.conf Add-on config file
+ * etc/wlags49.mk config update Makefile
+ * etc/wlags49.patch config update patch file
+
+ The driver is build up of 2 modules:
+ - a higher module called Module Specific Functions (MSF), which contains
+ the functions of the driver that are network driver interface and
+ Operating System specific.
+ - a lower module called Hardware Control Functions (HCF), which contains
+ the functions to interface to the Network Interface Card (NIC). The HCF
+ provides for all WaveLAN NIC types one standard interface to the MSF.
+ This I/F is called the Wireless Connection Interface (WCI) and is the
+ subject of a seperate document (025726).
+
+ The HCF directory contains firmware images to allow the card to operate in
+ either station (STA) or Access Point (AP) mode. In the build process, the
+ files fw_h2.c and fw_h25.c are used for Hermes-II and Hermes-II.5
+ respectively. The firmware images in this release are identified as:
+ - HII Station F/W: fw_h2.c.sta
+ - HII.5 Station F/W: fw_h25.c.sta
+ - HII AccesPoint F/W: fw_h2.c.ap
+ - HII.5 AccesPoint F/W: fw_h25.c.ap
+ To build a STA or AP mode driver, the suffix .sta or .ap must be removed.
+ The files as distributed by this release build STA drivers by default.
+
+------------------------------------------------------------------------------
+2. SYSTEM REQUIREMENTS
+
+2.1 Operating System
+
+ This software can be compiled and installed with Linux kernel versions
+ 2.4.x. Although this driver should compile for other CPUs as well, as of
+ the date of this release, no CPU architectures other than x86 have been
+ verified.
+
+ wl_lkm_7_22_abg is tested with the following Linux Distributions:
+ * Red Hat version 9.0
+ * Suse version 9.0
+
+ If you're building for PC Card or Compact Flash, you need the Card Services
+ from David Hinds.
+
+ wl_lkm_7_22_abg is tested with:
+ * pcmcia-cs-3.2.7.tar.gz
+
+2.2 Free Disk Space
+
+ To compile the software you need to have the full set of Linux kernel
+ source files installed, as well as a sane build environment which includes
+ all tools necessary for compiling and linking code. Depending on the exact
+ version of the kernel, you need approximately 150 MB of free disk space.
+ Once compiled, the driver uses about 150-200 KB. Please note, this size is
+ approximate and can vary depending on which version of the driver is built.
+ In addition, adding debug tracing support increases this size.
+
+------------------------------------------------------------------------------
+3. NEW IN THIS RELEASE
+
+Version 7.22 abg - July 28, 2004
+
+------------------------------------------------------------------------------
+4. INSTALLATION NOTES
+
+ The driver files for the Linux driver are not "ready" for direct
+ installation onto any Linux computer. To build and install the driver you
+ need some expertise on the Linux operating system in general and the type
+ and version installed of the kernel installed on your computer. With this
+ knowledge you can use the driver source files provided to build your own
+ Linux driver for your specific computer and kernel.
+
+4.1 Before you start
+
+ 1) Determine the type and version of the Linux kernel of your computer and
+ check whether it meets the system requirements listed in section 2 of this
+ README.
+
+ 2) If you're building for PC Card or Compact Flash, read the Linux
+ PCMCIA-HOWTO by David Hinds. This document is probably provided on the
+ CD-ROM of your Linux distribution. You can download the latest version
+ from:
+
+ http://pcmcia-cs.sourceforge.net
+
+ Please read the section titled "Prerequisites and kernel setup" of the
+ PCMCIA-HOWTO.
+
+4.2 Build the driver for PC Card / Compact Flash
+
+ 1) Obtain a copy of the Linux PCMCIA package from a CD-ROM of your Linux
+ distribution or download the latest version.
+ For your convenience, the Agere Systems Wireless CD-ROM contains a copy of
+ the PCMCIA package in sub-directory: Xtras/Linux/PCMCIA
+
+ 2) To unpack the Linux PCMCIA package, copy it to the current working
+ directory and type:
+ % tar xzvf pcmcia-cs-x.y.z.tar.gz
+ % mv pcmcia-cs-x.y.z pcmcia-cs
+
+ Note: If you use the archive supplied on the CDROM, use archive name
+ "pc3_2_1.tgz" instead of "pcmcia-cs-3.2.7.tar.gz".
+
+ Note: even though PCMCIA code exists in the kernel source tree, the PCMCIA
+ Card Services package needs to be unpacked locally to build drivers based
+ on it.
+
+ 3) Extract the wlags49 distribution archive on top of the Linux PCMCIA
+ package.
+ % cd pcmcia-cs
+ % tar xzvf ../wl_lkm_7_22_abg.tar.gz
+
+ 4) To build and install the driver, follow the procedure below:
+ % ./Configure
+
+ Answer the presented questions. Usually the default answers are OK and
+ pressing "Enter" is enough.
+ On newer RedHat systems, however, you should specify "/usr/src/linux-2.4"
+ as the Linux source directory instead of the default "/usr/src/linux".
+
+ For more detailed information on configuration, building and installing,
+ see the PCMCIA-HOWTO.
+
+ To build the default drivers, which support Hermes-II in station mode, run
+ the Build script:
+ % ./Build
+
+ This script determines whether your system uses in-kernel PCMCIA and either
+ builds the full PCMCIA package or just the driver.
+
+ Before installing the driver with the Install script, you must become
+ 'root':
+ % su
+ ..
+ % ./Install
+
+ This script determines whether your system uses in-kernel PCMCIA and either
+ installs the full PCMCIA package or just the driver.
+
+ 5) If it becomes necessary to clean the build, issue the following
+ commands:
+ % make clean
+ % make -C lib clean
+
+4.3 Build the driver for PCI
+
+ 1) Extract the wlags49 to the current working directory.
+ % tar xzvf wl_lkm_7_22.tar.gz
+
+ Note: there is no need to unpack the driver source into a PCMCIA build
+ directory.
+
+ 2) To build the PCI driver:
+ % make -f wlags49.mk wlags49_h2_pci
+ or
+ % make -f wlags49.mk wlags49_h25_pci
+
+ 3) Install the driver.
+ % insmod ./wireless/wlags49_h25.o
+
+ 4) If it becomes necessary to clean the build.
+ % make -f wlags49.mk pci_clean
+
+4.4 Configure your Wireless PC Card
+
+ There are 3 ways to configure the driver
+ - module parameters (/etc/pcmcia/config.opts)
+ - wireless extension (/etc/pcmcia/wireless.opts)
+ - Agere configuration file (/etc/agere/iwconfig-eth#)
+
+
+4.4.1 Configure through /etc/pcmcia/config.opts
+
+ To use this method, make sure that /etc/pcmcia/wireless.opts file is either
+ absent or contains blank parameter values as shown below.
+
+ *,*,*,00:60:1D:*|*,*,*,00:02:2D:*)
+ INFO=""
+ ESSID=""
+ MODE=""
+ KEY=""
+ ;;
+
+ 1) To configure the Wireless PC Card, please refer to:
+ * The online manual page (wlags49.4)
+ % man wlags49
+ * The network adapter sections of the PCMCIA documentation.
+ % more PCMCIA-HOWTO
+
+ 2) Use an editor to configure the module parameters:
+ # vi /etc/pcmcia/config.opts
+
+ a) To connect your computer to a wireless infrastructure that includes
+ access points such as the AP-1000 or AP-500, you need to identify the
+ network name of the wireless infrastructure.
+
+ For example if your infrastructure uses the network name "My Network",
+ edit the config.opts file to include the following:
+
+ module "<driver_name>" opts "network_name=My\ Network"
+
+ Notice that the space character needs to be escaped with a backslash.
+
+ b) To connect your computer to a Residential Gateway RG-1000, you need
+ to know the RG ID (=network_name) and the encryption key. You can find
+ the RG ID on a small label on the rear of the unit.
+
+ For example if your RG-1000 has ID 225ccf and you did not change the
+ encryption key yet, edit the config.opts file to include the following:
+
+ module "<driver_name>" opts "network_name=\"225ccf\" key_1=\"25ccf\"
+ enable_encryption=Y"
+
+ If you changed your encryption key, you should specify this key as key_1
+ on the parameter line.
+
+ c) To connect your computer to a peer-to-peer network, in an environment
+ without access points, the IBSS mode is recommended.
+
+ For example to connect to a peer-to-peer network called "My Network",
+ enter the following in the config.opts file:
+
+ module "<driver_name>" opts "create_ibss=Y network_name=My\ Network"
+
+ d) Optionally you can also include a "Station Name" value that can be
+ used to indentify your computer on the wireless network.
+
+ For example if you wish to name your computer "Wave1" when connecting it
+ to a wireless infrastructure, edit the config.opts file to include the
+ following:
+
+ module "<driver_name>" opts "network_name=Ocean station_name=Wave1"
+
+ e) To connect your computer to an Ad-Hoc workgroup of wireless
+ computers, enter the following in the config.opts file:
+
+ module "<driver_name>" opts "port_type=3"
+
+ Note that the "Ad-Hoc Demo Mode" is not the recommended mode for a
+ peer-to-peer network. The configuration of this non-interoperable mode
+ is only explained here for special applications (e.g. research, or
+ compatibility with other / previous WaveLAN/IEEE products).
+
+ The IBSS mode described in c) is the preferred and interoperable mode
+ for creating a peer-to-peer network.
+
+ 3) Use an editor to modify the network options for your adapter.
+ # vi /etc/pcmcia/network.opts
+
+ The parameters need to be correct for the connected network. Check with
+ your system administrator for the correct network information. Refer to
+ the PCMCIA-HOWTO for more configuration information.
+
+ For example:
+ *,*,*,*)
+ IF_PORT=""
+ BOOTP="n"
+ IPADDR="10.0.0.5"
+ NETMASK="255.255.255.0"
+ NETWORK="10.0.0.0"
+ BROADCAST="10.0.0.255"
+ GATEWAY="10.0.0.1"
+ DOMAIN="domain.org"
+ DNS_1="dns1.domain.org"
+ ;;
+
+ RedHat and Suse do not use the network.opts to configure the driver.
+ Instead RedHat uses a GUI-based tool called 'neat' ('net.cfg' in older
+ versions) and SuSE Linux uses 'YaST'. These tools creates scripts, like
+ ifcfg-eth0, in the directory /etc/sysconfig/network-scripts. Using the
+ default GNOME menu, you can start netcfg from: Programs->System->Network
+ Configuration.
+
+ 4) Restart the PCMCIA services.
+ # /etc/rc.d/rc.pcmcia restart
+ or
+ # /etc/rc.d/init.d/pcmcia restart
+
+
+ For a more detailed description about the various configuration options and
+ definitions, please consult the Wireless documentation.
+
+4.4.2 Configure through /etc/pcmcia/wireless.opts
+
+ This driver has support for the "Wireless Extensions". This interface
+ allows the "Wireless Tools" to get statistics from the driver and allows to
+ change the configuration of the driver on the fly.
+
+ The latest versions of the PCMCIA package contain scripts that use the
+ wireless extension to configure the driver as an alternative to the
+ configuration through module parameters as described in section 4.4.1.
+ Read the /etc/pcmcia/wireless.opts file for the theory of operation. When
+ the driver is configured, go to section 4.4.1 step 3 to configure the
+ network parameters.
+
+ For more information, refer to the following WEB pages:
+ http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Linux.Wireless.Extensions.html
+ http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html
+
+4.4.3 Configure through /etc/agere/iwconfig-eth#
+
+ In addition to using either the module options or the wireless extensions
+ methods to configure a wireless device, this version of the software also
+ supports an Agere specific implementation. This was done because:
+ * Module options configures multiple devices the same.
+ * Wireless extensions parameters do not cover all of the available options
+ in the driver.
+
+ For each wireless ethernet device (identified by eth<n>, where n is a
+ positive integer), a file /etc/agere/iwconfig-eth<n> can be created which
+ contains configuration information for a wireless device. For example, the
+ file /etc/agere/iwconfig-eth1 is the config file for eth1. This file should
+ contain Key/Value pairs in the format:
+
+ <Key>=<Value>
+
+ where <Key> is the parameter to configure and <Value> is the value to
+ assign it. For example, if the config file /etc/agere/iwconfig-eth1
+ described above contains the following:
+
+ DesiredSSID=some_network
+ EnableEncryption=Y
+ Key1=net01
+ TxKey=1
+
+ this configures eth1 to associate to the ESSID 'some_network' with
+ encryption on, where the the first encryption key is 'net01' and the key to
+ use for encryption is Key 1.
+
+ Note that this only works on Agere hardware which uses this driver. For
+ other wireless drivers, or non-wireless devices, this file can be present,
+ but has no effect.
+
+ Please refer to the man page for more information on this configuration
+ file and the parameters that can be set.
+
+
+4.5 Configuring your Wireless PCI card
+
+ Note that the above method of configuring the card using
+ /etc/pcmcia/config.opts is only valid for PCMCIA/CF cards. For [mini]PCI
+ and CardBus cards, refer to your system's documentation on modules.conf to
+ load the driver with the proper options for a given wireless ethernet
+ interface. In addition, network configuration tools like 'netcfg', 'neat',
+ or 'YaST' (see Section 4.4.1, Step 3) can be used to configure the miniPCI
+ card. Lastly, the Agere configuration file described in Section 4.4.3 may
+ also be used for [mini]PCI and CardBus devices.
+
+4.6 Troubleshooting
+
+ When the Wireless PC Card is inserted, the card manager emit beeps in
+ different tones to indicate success or failure of particular configuration
+ steps.
+ a) Two high beeps
+ - The card was identified and configured successfully.
+ b) One high beep followed by a low beep
+ - The card was identified, but could not be configured.
+ - Examine the system log (dmesg) for PCMCIA error or warning messages.
+ c) One low beep
+ - The card could not be identified.
+ - Execute "cardctl ident" to display the adapter PnP information.
+ Verify the PnP information matches an entry in the PCMCIA
+ configuration file (/etc/pcmcia/config).
+ - Examine the system log (dmesg) for PCMCIA error or warning messages.
+
+ The Wireless PC Card has two LEDs that indicate the state of the adapter
+ and network.
+ * Power LED (toward the middle of the adapter)
+ - This LED indicates power has been applied, and the card is
+ functional. In normal operation mode with Card Power Management
+ disabled, it is steady-on. With Card Power Management enabled, it
+ blinks rapidly (several times per second).
+ * Transmit/Receive LED (closer to the edge of the adapter)
+ - This LED flashes when it detects transmit or receive packets.
+
+ * Both LEDs blink at the same time every 10 seconds.
+ - The adapter was unable to make contact with the named wireless
+ network. Verify the network_name, in the config.opts file matches the
+ network name of the access point.
+ * LEDs indicate normal operation with the Power LED
+ steady-on or blinking rapidly and Transmit/Receive LED flashing, but no
+ traffic.
+ - If the network is operating in normal mode (ie. port_type = 0 or not
+ specified), and a network_name has been specified, verify the
+ workstation network parameters (ifconfig, route, etc.) are correct
+ for the wireless network.
+ - If the network is operating in Ad-Hoc (peer-to-peer) mode (ie.
+ port_type = 3), the adapter needs another workstation/adapter to
+ communicate with. Verify the network parameters on both of the
+ workstations (ifconfig, route, etc.) are correct.
+
+ Refer to the online manual page for additional configuration, feature and
+ support information.
+ % man wlags49
+ or
+ % man 4 wlags49
+ or
+ % nroff -man wlags49.4 | more
+
+4.7 Identifying the software
+
+ This section explains how to identify the version of this software once it
+ is unpacked or installed.
+
+ The Linux Driver Source/Library distribution consist of two main
+ components, the driver source and the HCF module.
+
+ * To quickly identify the version of the source, type:
+ % grep DRV.*VERSION include/wireless/wl_version.h
+ #define DRV_MAJOR_VERSION 7
+ #define DRV_MINOR_VERSION 22
+
+ * To identify the revision of the HCF library contained in the driver,
+ type:
+ % grep HCF.Revision hcf/hcf.c
+ #define HCF_VERSION TEXT( "HCF$Revision: 1.8 $" )
+
+ To identify a compiled wlags49 driver, go to the directory where the driver
+ is located. Card Services drivers (wlags49_h2_cs.o and wlags49_h25_cs.o)
+ are located in:
+ /lib/modules/<kernel-version>/pcmcia
+
+ PCI drivers (wlags49_h2.o) are located in:
+ /lib/modules/<kernel-version>/kernel/drivers/net
+
+ * To retrieve the version of the source used to compile the driver, type:
+ % strings <driver_name>.o | grep Agere
+ <driver_name> v7.22-abg-Beta for PCMCIA
+ <driver_name> v7.22-abg-Beta for PCI
+
+ * Likewise, to retrieve the revision of the HCF used to compile the driver,
+ type:
+ % strings <driver_name>.o | grep Revision
+ HCF$Revision: 5.15
+
+ At startup the wlags49 driver reports its version in the system log file
+ (/var/log/messages).
+
+------------------------------------------------------------------------------
+5. TECHNICAL CONSTRAINTS
+
+ At the time of release of this software, the following constraints are
+ identified:
+
+5.1 Using the ISA adapter
+
+ Description: To allow operation in desktop computers Agere also provides an
+ optional ISA bus to PC Card adapter (also referred to as "swapbox").
+
+ This ISA Adapter can be configured for two different I/O Address values:
+ * 3E2 (factory-set default)
+ * 3E0
+
+ Impact: By default the i82365 module of the Linux pcmcia package only
+ probes at 3E0.
+
+ Actions:
+ 1) Read the manual page on the probing of the i82365 module, by typing the
+ command:
+ man i82365
+
+ 2) Apply one of the two following options:
+ a) Change the I/O address strapping of the ISA adapter by replacing the
+ jumper on the ISA adapter. The correct jumper setting is pictured in
+ the electronic "Wireless ISA Adapter, Getting Started Guide" provided
+ on the Wireless Software CD-ROM. This guide is provided in Adobe's
+ Acrobat PDF format.
+
+ b) Alternatively, you can load the i82365 module with the
+ "extra_sockets" parameter set to 1.
+
+ On a RedHat 5.x thru 7.x, system, put this in the file
+ "/etc/sysconfig/pcmcia":
+ PCMCIA=yes
+ PCIC=i82365
+ PCIC_OPTS="extra_sockets=1"
+ CORE_OPTS=
+ CARDMGR_OPTS=
+
+ For other Linux distributions, you are advised to consult the
+ "PCMCIA-HOWTO" notes for information about changing the I/O Address
+ probing.
+
+5.2 Using the PCI Adapter
+
+ Description: To allow operation in desktop computers Agere also provides an
+ optional PCI bus to PC Card adapter (also referred to as "swapbox").
+
+ For correct interrupt assignment, the system should support PCIBIOS 2.2.
+ It is recommended to use PCMCIA package version 3.2.7 or higher.
+
+ The default configuration of the interrupt routing method of the PCI
+ Adapter's TI CardBus Controller is incorrect.
+
+ Actions:
+ 1) Read the manual page on the "Options specific for TI CardBus
+ Controllers" of the i82365 module, by typing the command:
+ man i82365
+
+ 2) Load the i82365 module with the "irq_mode" parameter set to 0.
+ On a RedHat 5.x thru 7.x system, put this in the file
+ "/etc/sysconfig/pcmcia":
+ PCMCIA=yes
+ PCIC=i82365
+ PCIC_OPTS="irq_mode=0"
+ CORE_OPTS=
+ CARDMGR_OPTS=
+
+ For the location of the PCMCIA scripts on other Linux distributions, you
+ are advised to consult the "PCMCIA-HOWTO", "Notes about specific Linux
+ distributions".
+
+------------------------------------------------------------------------------
+6. KNOWN ISSUES
+
+ This is the current list of known issues for this release, and will be
+ addressed in the near future:
+
+ 1. This driver release contains a version of Hermes-II.5 firmware which
+ REQUIRES calibrated cards. If there is no calibration data present in the
+ PDA of the hardware, the firmware does not operate.
+
+ 2. WDS is not yet supported.
+
+ 3. DMA is not yet supported.
+
+ 4. WPA is not yet supported.
+
+ 5. 32-bits I/O is not yet supported.
+
+ 6. The current Build script also builds the PCI drivers.
+
+ 7. The current Install script also copies the PCI drivers to the lib
+ directory.
+
+ 8. If F/W files are required from outside this release, the entry points
+ inside these F/W files have to be renamed from "ap" and "station" to
+ "fw_image" and they have to be renamed to fw_h2.c and fw_h25.c for
+ Hermes-II and Hermes-II.5.
+
+------------------------------------------------------------------------------
+7. TECHNICAL SUPPORT
+
+7.1 Finding Information
+
+ On the Agere Systems Web Site you can find the most recent device drivers,
+ software updates and user documentation.
+
+ World Wide Web: http://www.agere.com
+
+7.2 Contact Technical Support
+
+ If you encounter problems when installing or using this product, or would
+ like information about our other "Wireless" products, please contact your
+ local Authorized "Wireless" Reseller or Agere Systems sales office.
+
+ Addresses and telephone numbers of the Agere Systems sales offices are
+ listed on our Agere Systems web site.
+
+ When contacting Technical Support, please use the Problem Report Form and
+ send it to us by Fax or E-Mail. The Problem Report Form 'REPORT.TXT'
+ (Plain text format) is included on the disk. Alternatively, you can
+ download the Problem Report Form from the Agere Systems web site.
+
+ Include Product Name, Serial Number and software version number with each
+ request to help the Support Group helping you.
+
+==============================================================================
+ END OF FILE
View
3  drivers/staging/wlags49_h2/WARNING.txt
@@ -0,0 +1,3 @@
+These sources are shared with the wlags49_h25 driver. Some files are even
+exclusively used by that driver. Do not delete them here without looking
+at that other driver.
View
3,337 drivers/staging/wlags49_h2/ap_h2.c
3,337 additions, 0 deletions not shown
View
4,094 drivers/staging/wlags49_h2/ap_h25.c
4,094 additions, 0 deletions not shown
View
229 drivers/staging/wlags49_h2/debug.h
@@ -0,0 +1,229 @@
+/*******************************************************************************
+ * Agere Systems Inc.
+ * Wireless device driver for Linux (wlags49).
+ *
+ * Copyright (c) 1998-2003 Agere Systems Inc.
+ * All rights reserved.
+ * http://www.agere.com
+ *
+ * Initially developed by TriplePoint, Inc.
+ * http://www.triplepoint.com
+ *
+ *------------------------------------------------------------------------------
+ *
+ * This file contains definitions and macros for debugging.
+ *
+ *------------------------------------------------------------------------------
+ *
+ * SOFTWARE LICENSE
+ *
+ * This software is provided subject to the following terms and conditions,
+ * which you should read carefully before using the software. Using this
+ * software indicates your acceptance of these terms and conditions. If you do
+ * not agree with these terms and conditions, do not use the software.
+ *
+ * Copyright © 2003 Agere Systems Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source or binary forms, with or without
+ * modifications, are permitted provided that the following conditions are met:
+ *
+ * . Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following Disclaimer as comments in the code as
+ * well as in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * . Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following Disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * . Neither the name of Agere Systems Inc. nor the names of the contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * Disclaimer
+ *
+ * THIS SOFTWARE IS PROVIDED “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, INFRINGEMENT AND THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ANY
+ * USE, MODIFICATION OR DISTRIBUTION OF THIS SOFTWARE IS SOLELY AT THE USERS OWN
+ * RISK. IN NO EVENT SHALL AGERE SYSTEMS INC. OR CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, INCLUDING, BUT NOT LIMITED TO, CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ ******************************************************************************/
+
+
+
+
+/*******************************************************************************
+ * VERSION CONTROL INFORMATION
+ *******************************************************************************
+ *
+ * $Author: nico $
+ * $Date: 2004/07/20 09:29:45 $
+ * $Revision: 1.3 $
+ * $Source: /usr/local/cvs/wl_lkm/include/hcf/debug.h,v $
+ *
+ ******************************************************************************/
+
+
+
+
+#ifndef _DEBUG_H
+#define _DEBUG_H
+
+
+
+
+/* Turn on debugging here if not done with a preprocessor define */
+#ifndef DBG
+#define DBG 0
+#else
+#undef DBG
+#define DBG 1
+#endif //DBG
+
+
+
+
+#if DBG
+/****************************************************************************/
+
+/* Set the level of debugging if not done with a preprocessor define. See
+ wl_main.c, init_module() for how the debug level translates into the
+ the types of messages displayed */
+#ifndef DBG_LVL
+#define DBG_LVL 5 /* yields nothing via init_module,
+ original value of 5 yields DBG_TRACE_ON and DBG_VERBOSE_ON */
+#endif // DBG_LVL
+
+
+#define DBG_ERROR_ON 0x00000001L
+#define DBG_WARNING_ON 0x00000002L
+#define DBG_NOTICE_ON 0x00000004L
+#define DBG_TRACE_ON 0x00000008L
+#define DBG_VERBOSE_ON 0x00000010L
+#define DBG_PARAM_ON 0x00000020L
+#define DBG_BREAK_ON 0x00000040L
+#define DBG_RX_ON 0x00000100L
+#define DBG_TX_ON 0x00000200L
+#define DBG_DS_ON 0x00000400L
+
+#define DBG_DEFAULTS (DBG_ERROR_ON | DBG_WARNING_ON | DBG_BREAK_ON)
+
+#define DBG_FLAGS(A) (A)->DebugFlag
+#define DBG_NAME(A) (A)->dbgName
+#define DBG_LEVEL(A) (A)->dbgLevel
+
+
+#ifndef PRINTK
+# define PRINTK(S...) printk(S)
+#endif // PRINTK
+
+
+#ifndef DBG_PRINT
+# define DBG_PRINT(S...) PRINTK(KERN_DEBUG S)
+#endif // DBG_PRINT
+
+
+#ifndef DBG_PRINTC
+# define DBG_PRINTC(S...) PRINTK(S)
+#endif // DBG_PRINTC
+
+
+#ifndef DBG_TRAP
+# define DBG_TRAP {}
+#endif // DBG_TRAP
+
+
+#define _ENTER_STR ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
+#define _LEAVE_STR "<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"
+
+
+#define _DBG_ENTER(A) DBG_PRINT("%s:%.*s:%s\n",DBG_NAME(A),++DBG_LEVEL(A),_ENTER_STR,__FUNC__)
+#define _DBG_LEAVE(A) DBG_PRINT("%s:%.*s:%s\n",DBG_NAME(A),DBG_LEVEL(A)--,_LEAVE_STR,__FUNC__)
+
+
+#define DBG_FUNC(F) static const char *__FUNC__ = F;
+
+#define DBG_ENTER(A) {if (DBG_FLAGS(A) & DBG_TRACE_ON) _DBG_ENTER(A);}
+
+#define DBG_LEAVE(A) {if (DBG_FLAGS(A) & DBG_TRACE_ON) _DBG_LEAVE(A);}
+
+#define DBG_PARAM(A,N,F,S...) {if (DBG_FLAGS(A) & DBG_PARAM_ON) \
+ DBG_PRINT(" %s -- "F"\n",N,S);}
+
+
+#define DBG_ERROR(A,S...) {if (DBG_FLAGS(A) & DBG_ERROR_ON) \
+ {DBG_PRINT("%s:ERROR:%s ",DBG_NAME(A),__FUNC__);DBG_PRINTC(S);DBG_TRAP;}}
+
+
+#define DBG_WARNING(A,S...) {if (DBG_FLAGS(A) & DBG_WARNING_ON) \
+ {DBG_PRINT("%s:WARNING:%s ",DBG_NAME(A),__FUNC__);DBG_PRINTC(S);}}
+
+
+#define DBG_NOTICE(A,S...) {if (DBG_FLAGS(A) & DBG_NOTICE_ON) \
+ {DBG_PRINT("%s:NOTICE:%s ",DBG_NAME(A),__FUNC__);DBG_PRINTC(S);}}
+
+
+#define DBG_TRACE(A,S...) do {if (DBG_FLAGS(A) & DBG_TRACE_ON) \
+ {DBG_PRINT("%s:%s ",DBG_NAME(A),__FUNC__);DBG_PRINTC(S);}} while (0)
+
+
+#define DBG_RX(A,S...) {if (DBG_FLAGS(A) & DBG_RX_ON) \
+ {DBG_PRINT(S);}}
+
+
+#define DBG_TX(A,S...) {if (DBG_FLAGS(A) & DBG_TX_ON) \
+ {DBG_PRINT(S);}}
+
+#define DBG_DS(A,S...) {if (DBG_FLAGS(A) & DBG_DS_ON) \
+ {DBG_PRINT(S);}}
+
+
+#define DBG_ASSERT(C) {if (!(C)) \
+ {DBG_PRINT("ASSERT(%s) -- %s#%d (%s)\n", \
+ #C,__FILE__,__LINE__,__FUNC__); \
+ DBG_TRAP;}}
+
+typedef struct {
+ char *dbgName;
+ int dbgLevel;
+ unsigned long DebugFlag;
+} dbg_info_t;
+
+
+/****************************************************************************/
+#else // DBG
+/****************************************************************************/
+
+#define DBG_DEFN
+#define DBG_TRAP
+#define DBG_FUNC(F)
+#define DBG_PRINT(S...)
+#define DBG_ENTER(A)
+#define DBG_LEAVE(A)
+#define DBG_PARAM(A,N,F,S...)
+#define DBG_ERROR(A,S...)
+#define DBG_WARNING(A,S...)
+#define DBG_NOTICE(A,S...)
+#define DBG_TRACE(A,S...)
+#define DBG_RX(A,S...)
+#define DBG_TX(A,S...)
+#define DBG_DS(A,S...)
+#define DBG_ASSERT(C)
+
+#endif // DBG
+/****************************************************************************/
+
+
+
+
+#endif // _DEBUG_H
+
View
390 drivers/staging/wlags49_h2/dhf.c
@@ -0,0 +1,390 @@
+
+// vim:tw=110:ts=4:
+/**************************************************************************************************************
+*
+* FILE : DHF.C
+*
+* DATE : $Date: 2004/07/19 08:16:14 $ $Revision: 1.2 $
+* Original : 2004/05/28 14:05:34 Revision: 1.36 Tag: hcf7_t20040602_01
+* Original : 2004/05/11 06:22:57 Revision: 1.32 Tag: hcf7_t7_20040513_01
+* Original : 2004/04/15 09:24:42 Revision: 1.28 Tag: hcf7_t7_20040415_01
+* Original : 2004/04/08 15:18:16 Revision: 1.27 Tag: t7_20040413_01
+* Original : 2004/04/01 15:32:55 Revision: 1.25 Tag: t7_20040401_01
+* Original : 2004/03/10 15:39:28 Revision: 1.21 Tag: t20040310_01
+* Original : 2004/03/04 11:03:37 Revision: 1.19 Tag: t20040304_01
+* Original : 2004/03/02 09:27:11 Revision: 1.17 Tag: t20040302_03
+* Original : 2004/02/24 13:00:28 Revision: 1.15 Tag: t20040224_01
+* Original : 2004/02/19 10:57:28 Revision: 1.14 Tag: t20040219_01
+* Original : 2003/11/27 09:00:09 Revision: 1.3 Tag: t20021216_01
+*
+* AUTHOR : John Meertens
+* Nico Valster
+*
+* SPECIFICATION: ........
+*
+* DESC : generic functions to handle the download of NIC firmware
+* Local Support Routines for above procedures
+*
+* Customizable via HCFCFG.H, which is included by HCF.H
+*
+*
+* DHF is (intended to be) platform-independent.
+* DHF is a module that provides a number of routines to download firmware
+* images (the names primary, station, access point, secondary and tertiary
+* are used or have been used) to volatile or nonvolatile memory
+* in WaveLAN/IEEE NICs. To achieve this DHF makes use of the WaveLAN/IEEE
+* WCI as implemented by the HCF-module.
+*
+* Download to non-volatile memory is used to update a WaveLAN/IEEE NIC to new
+* firmware. Normally this will be an upgrade to newer firmware, although
+* downgrading to older firmware is possible too.
+*
+* Note: relative to Asserts, the following can be observed:
+* Since the IFB is not known inside the routine, the macro HCFASSERT is replaced with MMDASSERT.
+* Also the line number reported in the assert is raised by FILE_NAME_OFFSET (10000) to discriminate the
+* DHF Asserts from HCF and MMD asserts.
+*
+***************************************************************************************************************
+*
+*
+* SOFTWARE LICENSE
+*
+* This software is provided subject to the following terms and conditions,
+* which you should read carefully before using the software. Using this
+* software indicates your acceptance of these terms and conditions. If you do
+* not agree with these terms and conditions, do not use the software.
+*
+* COPYRIGHT © 1999 - 2000 by Lucent Technologies. All Rights Reserved
+* COPYRIGHT © 2001 - 2004 by Agere Systems Inc. All Rights Reserved
+* All rights reserved.
+*
+* Redistribution and use in source or binary forms, with or without
+* modifications, are permitted provided that the following conditions are met:
+*
+* . Redistributions of source code must retain the above copyright notice, this
+* list of conditions and the following Disclaimer as comments in the code as
+* well as in the documentation and/or other materials provided with the
+* distribution.
+*
+* . Redistributions in binary form must reproduce the above copyright notice,
+* this list of conditions and the following Disclaimer in the documentation
+* and/or other materials provided with the distribution.
+*
+* . Neither the name of Agere Systems Inc. nor the names of the contributors
+* may be used to endorse or promote products derived from this software
+* without specific prior written permission.
+*
+* Disclaimer
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+* INCLUDING, BUT NOT LIMITED TO, INFRINGEMENT AND THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ANY
+* USE, MODIFICATION OR DISTRIBUTION OF THIS SOFTWARE IS SOLELY AT THE USERS OWN
+* RISK. IN NO EVENT SHALL AGERE SYSTEMS INC. OR CONTRIBUTORS BE LIABLE FOR ANY
+* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+* ON ANY THEORY OF LIABILITY, INCLUDING, BUT NOT LIMITED TO, CONTRACT, STRICT
+* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+* DAMAGE.
+*
+*
+**************************************************************************************************************/
+
+#include "hcf.h"
+#include "hcfdef.h"
+#include "dhf.h"
+#include "mmd.h"
+
+//to distinguish MMD from HCF asserts by means of line number
+#undef FILE_NAME_OFFSET
+#define FILE_NAME_OFFSET MMD_FILE_NAME_OFFSET
+/*-----------------------------------------------------------------------------
+ *
+ * Defines, data structures, and global variables
+ *
+ *---------------------------------------------------------------------------*/
+
+// 12345678901234
+char signature[14] = "FUPU7D37dhfwci";
+
+//The binary download function "relocates" the image using constructions like:
+// fw->identity = (CFG_IDENTITY_STRCT FAR *)((char FAR *)fw->identity + (hcf_32)fw );
+//under some of the memory models under MSVC 1.52 these constructions degrade to 16-bits pointer arithmetic.
+//fw->identity is limited, such that adding it to fw, does not need to carry over from offset to segment.
+//However the segment is not set at all.
+//As a workaround the PSEUDO_CHARP macro is introduced which is a char pointer except for MSVC 1.52, in
+//which case we know that a 32-bit quantity is adequate as a pointer.
+//Note that other platforms may experience comparable problems when using the binary download feature.
+#if defined(_MSC_VER) && _MSC_VER == 800 // Visual C++ 1.5
+#define PSEUDO_CHARP hcf_32
+#else
+#define PSEUDO_CHARP hcf_8*
+#endif
+
+/*-----------------------------------------------------------------------------
+ *
+ * LTV-records retrieved from the NIC to:
+ * - determine compatibility between NIC and image
+ * - ((setup the buffer size dynamically for non-volatile download (see note below) ))
+ * - supply plugging information contained in the PDA (H-I only)
+ *
+ *---------------------------------------------------------------------------*/
+
+// for USB/H1 we needed a smaller value than the CFG_DL_BUF_STRCT reported 8192
+// for the time being it seems simpler to always use 2000 for USB/H1 as well as all other cases rather than
+// using the "fixed anyway" CFG_DL_BUF_STRCT.
+#define DL_SIZE 2000
+
+//CFG_IDENTITY_STRCT pri_identity = { LOF(CFG_IDENTITY_STRCT), CFG_PRI_IDENTITY };
+CFG_SUP_RANGE_STRCT mfi_sup = { LOF(CFG_SUP_RANGE_STRCT), CFG_NIC_MFI_SUP_RANGE };
+CFG_SUP_RANGE_STRCT cfi_sup = { LOF(CFG_SUP_RANGE_STRCT), CFG_NIC_CFI_SUP_RANGE };
+/* Note: could be used rather than the above explained and defined DL_SIZE if need arises
+ * CFG_DL_BUF_STRCT dl_buf = { LOF(CFG_DL_BUF_STRCT), CFG_DL_BUF };
+*/
+
+/*-----------------------------------------------------------------------------
+ * Array ltv_info stores NIC information (in the form of LTV-records)
+ * needed for download. A NULL record indicates the end of the array.
+ *---------------------------------------------------------------------------*/
+
+/* The LTV_INFO_STRUCT is needed to save the sizes of the structs, because after a GET_INFO()
+ * the len field is changed to the real len of the RID by the called routine.
+ * This is only relevant if the DHF used without reloading the driver/utility.
+ */
+
+LTV_INFO_STRUCT ltv_info[] = {
+ { (LTVP)&mfi_sup, LOF(CFG_SUP_RANGE_STRCT) } ,
+ { (LTVP)&cfi_sup, LOF(CFG_SUP_RANGE_STRCT) } ,
+ { (LTVP) NULL, 0 }
+};
+
+
+/***********************************************************************************************************/
+/*************************************** PROTOTYPES ******************************************************/
+/***********************************************************************************************************/
+static int check_comp_fw( memimage *fw );
+
+
+/************************************************************************************************************
+*.SUBMODULE int check_comp_fw( memimage *fw )
+*.PURPOSE Checks compatibility of CFI and MFI, NIC as supplier, station/AP firmware image as supplier.
+*
+*.ARGUMENTS
+* fw F/W image to be downloaded
+*
+*.RETURNS
+* HFC_SUCCESS - firmware OK
+* DHF_ERR_INCOMP_FW
+*
+*.DESCRIPTION
+* This function uses compatibility and identity information that has been
+* retrieved from the card which is currently inserted to check whether the
+* station firmware image to be downloaded is compatible.
+*.ENDDOC END DOCUMENTATION
+*************************************************************************************************************/
+int
+check_comp_fw( memimage *fw )
+{
+CFG_RANGE20_STRCT *p;
+int rc = HCF_SUCCESS;
+CFG_RANGE_SPEC_STRCT* i;
+
+ switch( fw->identity->typ ) {
+ case CFG_FW_IDENTITY: //Station F/W
+ case COMP_ID_FW_AP_FAKE: //;?is this useful (used to be: CFG_AP_IDENTITY)
+ break;
+ default:
+ MMDASSERT( DO_ASSERT, fw->identity->typ ) //unknown/unsupported firmware_type:
+ rc = DHF_ERR_INCOMP_FW;
+ return rc; /* ;? how useful is this anyway,
+ * till that is sorted out might as well violate my own single exit principle
+ */
+ }
+ p = fw->compat;
+ i = NULL;
+ while( p->len && i == NULL ) { // check the MFI ranges
+ if ( p->typ == CFG_MFI_ACT_RANGES_STA ) {
+ i = mmd_check_comp( (void*)p, &mfi_sup );
+ }
+ p++;
+ }
+ MMDASSERT( i, 0 ) //MFI: NIC Supplier not compatible with F/W image Actor
+ if ( i ) {
+ p = fw->compat;
+ i = NULL;
+ while ( p->len && i == NULL ) { // check the CFI ranges
+ if ( p->typ == CFG_CFI_ACT_RANGES_STA ) {
+ i = mmd_check_comp( (void*)p, &cfi_sup );
+ }
+ p++;
+ }
+ MMDASSERT( i, 0 ) //CFI: NIC Supplier not compatible with F/W image Actor
+ }
+ if ( i == NULL ) {
+ rc = DHF_ERR_INCOMP_FW;
+ }
+ return rc;
+} // check_comp_fw
+
+
+
+
+
+/*-----------------------------------------------------------------------------
+ *
+ * Exported functions
+ *
+ *---------------------------------------------------------------------------*/
+
+
+
+/*************************************************************************************************************
+*
+*.MODULE int dhf_download_binary( void *ifbp, memimage *fw )
+*.PURPOSE Downloads a complete (primary, station, or access point) firmware image to the NIC.
+*
+*.ARGUMENTS
+* ifbp address of the Interface Block
+* fw F/W image to be downloaded
+*
+*.RETURNS
+* HCF_SUCCESS - download completed successfully.
+* DHF_ERR_INCOMP_FW - firmware not compatible
+*
+*.DESCRIPTION
+* Initialize global variables
+* Connect to the DHF
+* Check the compatibility of the image (For primary firmware images it is checked first
+* whether download is necessary).
+* If everything's download the firmware.
+* Disconnect from the DHF.
+*
+*
+*.DIAGRAM
+*
+*.NOTICE:
+ MMDASSERT is unacceptable because some drivers call dhf_download_binary before hcf_connect
+
+* The old comment was:
+*.ENDDOC END DOCUMENTATION
+*************************************************************************************************************/
+int
+dhf_download_binary( memimage *fw )
+{
+int rc = HCF_SUCCESS;
+CFG_PROG_STRCT *p;
+int i;
+
+ //validate the image
+ for ( i = 0; i < sizeof(signature) && fw->signature[i] == signature[i]; i++ ) /*NOP*/;
+ if ( i != sizeof(signature) ||
+ fw->signature[i] != 0x01 ||
+ //test for Little/Big Endian Binary flag
+ fw->signature[i+1] != ( /*HCF_BIG_ENDIAN ? 'B' : */ 'L' ) ) rc = DHF_ERR_INCOMP_FW;
+ else { //Little Endian Binary format
+ fw->codep = (CFG_PROG_STRCT FAR *)((PSEUDO_CHARP)fw->codep + (hcf_32)fw );
+ fw->identity = (CFG_IDENTITY_STRCT FAR *)((PSEUDO_CHARP)fw->identity + (hcf_32)fw );
+ fw->compat = (CFG_RANGE20_STRCT FAR *)((PSEUDO_CHARP)fw->compat + (hcf_32)fw );
+ for ( i = 0; fw->p[i]; i++ ) fw->p[i] = ((PSEUDO_CHARP)fw->p[i] + (hcf_32)fw );
+ p = fw->codep;
+ while ( p->len ) {
+ p->host_addr = (PSEUDO_CHARP)p->host_addr + (hcf_32)fw;
+ p++;
+ }
+ }
+ return rc;
+} // dhf_download_binary
+
+
+/*************************************************************************************************************
+*
+*.MODULE int dhf_download_fw( void *ifbp, memimage *fw )
+*.PURPOSE Downloads a complete (primary or tertiary) firmware image to the NIC.
+*
+*.ARGUMENTS
+* ifbp address of the Interface Block
+* fw F/W image to be downloaded
+*
+*.RETURNS
+* HCF_SUCCESS - download completed successfully.
+* HCF_ERR_NO_NIC - no NIC present
+* DHF_ERR_INCOMP_FW - firmware not compatible
+*
+*.DESCRIPTION
+* - check the signature of the image
+* - get the compatibility information from the components on the NIC
+* - Primary Firmware Identity
+* - Modem - Firmware I/F
+* - Controller - Firmware I/F
+*!! - if necessary ( i.e. H-I) get the PDA contents from the NIC
+* - check the compatibility of the MFI and CFI of the NIC with the F/W image
+* Note: the Primary F/W compatibility is only relevant for the "running" HCF and is already verified in
+* hcf_connect
+*!! - if necessary ( i.e. H-I)
+*!! - verify the sumcheck of the PDA
+*!! - plug the image (based on the PDA and the default plug records)
+* - loop over all the download LTVs in the image which consists of a sequence of
+* - CFG_PROG_VOLATILE/CFG_PROG_NON_VOLATILE
+* - 1 or more sequences of CFG_PROG_ADDR, CFG_PROG_DATA,....,CFG_PROG_DATA
+* - CFG_PROG_STOP
+*
+*.DIAGRAM
+*
+*.NOTICE
+* The old comment was:
+* // Download primary firmware if necessary and allowed. This is done silently (without telling
+* // the user) and only if the firmware in the download image is newer than the firmware in the
+* // card. In Major version 4 of the primary firmware functions of Hermes and Shark were
+* // combined. Prior to that two separate versions existed. We only have to download primary
+* // firmware if major version of primary firmware in the NIC < 4.
+* // download = pri_identity.version_major < 4;
+* // if ( download ) {
+* // rc = check_comp_primary( fw );
+* // }
+* It is my understanding that Pri Variant 1 must be updated by Pri Variant 2. The test on
+* major version < 4 should amount to the same result but be "principally" less correct
+* In deliberation with the Architecture team, it was decided that this upgrade for old H-I
+* NICs, is an aspect which belongs on the WSU level not on the DHF level
+*
+*.ENDDOC END DOCUMENTATION
+*************************************************************************************************************/
+int
+dhf_download_fw( void *ifbp, memimage *fw )
+{
+int rc = HCF_SUCCESS;
+LTV_INFO_STRUCT_PTR pp = ltv_info;
+CFG_PROG_STRCT *p = fw->codep;
+LTVP ltvp;
+int i;
+
+ MMDASSERT( fw != NULL, 0 )
+ //validate the image
+ for ( i = 0; i < sizeof(signature) && fw->signature[i] == signature[i]; i++ ) /*NOP*/;
+ if ( i != sizeof(signature) ||
+ fw->signature[i] != 0x01 ||
+ //check for binary image
+ ( fw->signature[i+1] != 'C' && fw->signature[i+1] != ( /*HCF_BIG_ENDIAN ? 'B' : */ 'L' ) ) )
+ rc = DHF_ERR_INCOMP_FW;
+
+// Retrieve all information needed for download from the NIC
+ while ( ( rc == HCF_SUCCESS ) && ( ( ltvp = pp->ltvp) != NULL ) ) {
+ ltvp->len = pp++->len; // Set len to original len. This len is changed to real len by GET_INFO()
+ rc = GET_INFO( ltvp );
+ MMDASSERT( rc == HCF_SUCCESS, rc )
+ MMDASSERT( rc == HCF_SUCCESS, ltvp->typ )
+ MMDASSERT( rc == HCF_SUCCESS, ltvp->len )
+ }
+ if ( rc == HCF_SUCCESS ) rc = check_comp_fw( fw );
+ if ( rc == HCF_SUCCESS ) {
+ while ( rc == HCF_SUCCESS && p->len ) {
+ rc = PUT_INFO( p );
+ p++;
+ }
+ }
+ MMDASSERT( rc == HCF_SUCCESS, rc )
+ return rc;
+} // dhf_download_fw
+
+
View
226 drivers/staging/wlags49_h2/dhf.h
@@ -0,0 +1,226 @@
+
+// vim:tw=110:ts=4:
+#ifndef DHF_H
+#define DHF_H
+
+/**************************************************************************************************************
+*
+* FILE : DHF.H
+*
+* DATE : $Date: 2004/07/19 08:16:14 $ $Revision: 1.2 $
+* Original : 2004/05/17 07:33:13 Revision: 1.25 Tag: hcf7_t20040602_01
+* Original : 2004/05/11 06:03:14 Revision: 1.24 Tag: hcf7_t7_20040513_01
+* Original : 2004/04/15 09:24:42 Revision: 1.22 Tag: hcf7_t7_20040415_01
+* Original : 2004/04/09 14:35:52 Revision: 1.21 Tag: t7_20040413_01
+* Original : 2004/04/01 15:32:55 Revision: 1.18 Tag: t7_20040401_01
+* Original : 2004/03/10 15:39:28 Revision: 1.15 Tag: t20040310_01
+* Original : 2004/03/04 11:03:38 Revision: 1.13 Tag: t20040304_01
+* Original : 2004/02/25 14:14:37 Revision: 1.11 Tag: t20040302_03
+* Original : 2004/02/24 13:00:28 Revision: 1.10 Tag: t20040224_01
+* Original : 2004/02/19 10:57:28 Revision: 1.8 Tag: t20040219_01
+*
+* AUTHOR : John Meertens
+* Nico Valster
+*
+* SPECIFICATION: .........
+*
+* DESC : structure definitions and function prototypes for unit DHF.
+*
+* Customizable via HCFCFG.H, which is included indirectly via HCF.H
+*
+***************************************************************************************************************
+*
+*
+* SOFTWARE LICENSE
+*
+* This software is provided subject to the following terms and conditions,
+* which you should read carefully before using the software. Using this
+* software indicates your acceptance of these terms and conditions. If you do
+* not agree with these terms and conditions, do not use the software.
+*
+* COPYRIGHT © 1994 - 1995 by AT&T. All Rights Reserved
+* COPYRIGHT © 1999 - 2000 by Lucent Technologies. All Rights Reserved
+* COPYRIGHT © 2001 - 2004 by Agere Systems Inc. All Rights Reserved
+* All rights reserved.
+*
+* Redistribution and use in source or binary forms, with or without
+* modifications, are permitted provided that the following conditions are met:
+*
+* . Redistributions of source code must retain the above copyright notice, this
+* list of conditions and the following Disclaimer as comments in the code as
+* well as in the documentation and/or other materials provided with the
+* distribution.
+*
+* . Redistributions in binary form must reproduce the above copyright notice,
+* this list of conditions and the following Disclaimer in the documentation
+* and/or other materials provided with the distribution.
+*
+* . Neither the name of Agere Systems Inc. nor the names of the contributors
+* may be used to endorse or promote products derived from this software
+* without specific prior written permission.
+*
+* Disclaimer
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+* INCLUDING, BUT NOT LIMITED TO, INFRINGEMENT AND THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ANY
+* USE, MODIFICATION OR DISTRIBUTION OF THIS SOFTWARE IS SOLELY AT THE USERS OWN
+* RISK. IN NO EVENT SHALL AGERE SYSTEMS INC. OR CONTRIBUTORS BE LIABLE FOR ANY
+* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+* ON ANY THEORY OF LIABILITY, INCLUDING, BUT NOT LIMITED TO, CONTRACT, STRICT
+* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+* DAMAGE.
+*
+*
+**************************************************************************************************************/
+
+
+#ifdef _WIN32_WCE
+#include <windef.h>
+#endif
+
+#include "hcf.h" // includes HCFCFG.H too
+
+#ifdef DHF_UIL
+#define GET_INFO( pp ) uil_get_info( (LTVP)pp )
+#define PUT_INFO( pp ) uil_put_info( (LTVP)pp )
+#else
+#define GET_INFO( pp ) hcf_get_info( ifbp, (LTVP)pp )
+#define PUT_INFO( pp ) hcf_put_info( ifbp, (LTVP)pp )
+#endif
+
+
+/*---- Defines --------------------------------------------------------------*/
+#define CODEMASK 0x0000FFFFL // Codemask for plug records
+
+/*---- Error numbers --------------------------------------------------------*/
+
+#define DHF_ERR_INCOMP_FW 0x40 //Image not compatible with NIC
+
+/*---- Type definitions -----------------------------------------------------*/
+//* needed by dhf_wrap.c
+//
+typedef struct {
+ LTVP ltvp;
+ hcf_16 len;
+} LTV_INFO_STRUCT , *LTV_INFO_STRUCT_PTR;
+
+
+/*
+ * Type: plugrecord
+ *
+ * Abstract: This structure represents a Plug Data Record.
+ *
+ * Description:
+ * This structure is used to overlay the plug records in the firmware memory image.
+ */
+
+typedef struct {
+ hcf_32 code; // Code to plug
+ hcf_32 addr; // Address within the memory image to plug it in
+ hcf_32 len; // The # of bytes which are available to store it
+} plugrecord;
+
+/*
+ * Type: stringrecord
+ *
+ * Abstract: This structure represents a Firmware debug/assert string
+ *
+ * Description:
+ * This structure is used to get assert and debug outputs in the driver and/or utility to be
+ * able to get more visability of the FW.
+ */
+
+#define MAX_DEBUGSTRINGS 1024
+#define MAX_DEBUGSTRING_LEN 82
+
+typedef struct {
+ hcf_32 id;
+ char str[MAX_DEBUGSTRING_LEN];
+} stringrecord;
+
+/*
+ * Type: exportrecord
+ *
+ * Abstract: This structure represents a Firmware export of a variable
+ *
+ * Description:
+ * This structure is used to get the address and name of a FW variable.
+ */
+
+#define MAX_DEBUGEXPORTS 2048
+#define MAX_DEBUGEXPORT_LEN 12
+
+typedef struct {
+ hcf_32 id;
+ char str[MAX_DEBUGEXPORT_LEN];
+} exportrecord;
+
+// Offsets in memimage array p[]
+#define FWSTRINGS_FUNCTION 0
+#define FWEXPORTS_FUNCTION 1
+
+/*
+ * Type: memimage
+ *
+ * Abstract: The "root" description of a complete memory image
+ *
+ * Description:
+ * This type represents an entire memory image. The image is built up of several
+ * segments. These segments need not be contiguous areas in memory, in other words
+ * the image may contain 'holes'.
+ *
+ * The 'codep' field points to an array of segment_descriptor structures.
+ * The end of the array is indicated by a segment_descriptor of which all fields are zero.
+ * The 'execution' field is a 32-bit address representing the execution address
+ * of the firmware within the memory image. This address is zero in case of non-volatile
+ * memory download.
+ * The 'compat' field points to an array of TODO
+ * The end of the array is indicated by a plug record of which all fields are zero.
+ * The 'identity' field points to an array of TODO
+ * The end of the array is indicated by a plug record of which all fields are zero.
+ * The Hermes-I specific 'pdaplug' field points to an array of Production Data Plug record structures.
+ * The end of the array is indicated by a plug record of which all fields are zero.
+ * The Hermes-I specific 'priplug' field points to an array of Primary Information Plug record structures.
+ * The end of the array is indicated by a plug record of which all fields are zero.
+ */
+typedef struct {
+ char signature[14+1+1]; // signature (see DHF.C) + C/LE-Bin/BE-Bin-flag + format version
+ CFG_PROG_STRCT FAR *codep; //
+ hcf_32 execution; // Execution address of the firmware
+ void FAR *place_holder_1;
+ void FAR *place_holder_2;
+ CFG_RANGE20_STRCT FAR *compat; // Pointer to the compatibility info records
+ CFG_IDENTITY_STRCT FAR *identity; // Pointer to the identity info records
+ void FAR *p[2]; /* (Up to 9) pointers for (future) expansion
+ * currently in use:
+ * - F/W printf information
+ */
+} memimage;
+
+
+
+/*-----------------------------------------------------------------------------
+ *
+ * DHF function prototypes
+ *
+ *---------------------------------------------------------------------------*/
+
+EXTERN_C int dhf_download_fw( void *ifbp, memimage *fw ); // ifbp, ignored when using the UIL
+EXTERN_C int dhf_download_binary( memimage *fw );
+
+
+/*-----------------------------------------------------------------------------
+ *
+ * Functions to be provided by the user of the DHF module.
+ *
+ *---------------------------------------------------------------------------*/
+
+// defined in DHF.C; see there for comments
+EXTERN_C hcf_16 *find_record_in_pda( hcf_16 *pdap, hcf_16 code );
+
+#endif // DHF_H
+
View
175 drivers/staging/wlags49_h2/dhfcfg.h
@@ -0,0 +1,175 @@
+/*******************************************************************************
+ * Agere Systems Inc.
+ * Wireless device driver for Linux (wlags49).
+ *
+ * Copyright (c) 1998-2003 Agere Systems Inc.
+ * All rights reserved.
+ * http://www.agere.com
+ *
+ * Initially developed by TriplePoint, Inc.
+ * http://www.triplepoint.com
+ *
+ *------------------------------------------------------------------------------
+ *
+ * This file contains DHF configuration info.
+ *
+ *------------------------------------------------------------------------------
+ *
+ * SOFTWARE LICENSE
+ *
+ * This software is provided subject to the following terms and conditions,
+ * which you should read carefully before using the software. Using this
+ * software indicates your acceptance of these terms and conditions. If you do
+ * not agree with these terms and conditions, do not use the software.
+ *
+ * Copyright © 2003 Agere Systems Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source or binary forms, with or without
+ * modifications, are permitted provided that the following conditions are met:
+ *
+ * . Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following Disclaimer as comments in the code as
+ * well as in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * . Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following Disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * . Neither the name of Agere Systems Inc. nor the names of the contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * Disclaimer
+ *
+ * THIS SOFTWARE IS PROVIDED “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, INFRINGEMENT AND THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ANY
+ * USE, MODIFICATION OR DISTRIBUTION OF THIS SOFTWARE IS SOLELY AT THE USERS OWN
+ * RISK. IN NO EVENT SHALL AGERE SYSTEMS INC. OR CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, INCLUDING, BUT NOT LIMITED TO, CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ ******************************************************************************/
+
+
+
+
+/*******************************************************************************
+ * VERSION CONTROL INFORMATION
+ *******************************************************************************
+ *
+ * $Author: nico $
+ * $Date: 2004/07/19 07:08:33 $
+ * $Revision: 1.1.1.1 $
+ * $Source: /usr/local/cvs/wl_lkm/include/hcf/dhfcfg.h,v $
+ *
+ ******************************************************************************/
+
+
+
+
+#ifndef DHFCFG_H
+#define DHFCFG_H
+/*-----------------------------------------------------------------------------
+ * File DHFCFG.H
+ *
+ * Contents: #defines for the DHF module
+ *
+ * Comments:
+ * Some combinations of the #defines in this file are illegal (as noted below).
+ * If an illegal combinations of #defines is specified a compile error is
+ * generated. See document DHFUG.DOC for more information.
+ *
+ * Author: John Meertens
+ * Date: 11-01-2000
+ *
+ * Change history:
+ *---------------------------------------------------------------------------*/
+
+
+// Define DHF_WCI if you want to use the WCI to access the ORiNOCO card.
+// Define DHF_UIL if you want to use the UIL to access the ORiNOCO card.
+// You must define either DHF_WCI or DHF_UIL. If neither of the two is defined
+// or both a compile error is generated.
+#define DHF_WCI
+//!!!#define DHF_UIL
+
+// Define DHF_BIG_ENDIAN if you are working on a big endian platform.
+// Define DHF_LITTLE_ENDIAN if you are working on a little endian platform.
+// You must define either DHF_BIG_ENDIAN or DHF_LITTLE_ENDIAN. If neither of
+// the two is defined or both a compile error is generated.
+#ifdef USE_BIG_ENDIAN
+#define DHF_BIG_ENDIAN
+#else
+#define DHF_LITTLE_ENDIAN
+#endif /* USE_BIG_ENDIAN */
+
+// Define DHF_WIN if you are working on Windows platform.
+// Define DHF_DOS if you are working on DOS.
+// You must define either DHF_WIN or DHF_DOS. If neither of
+// the two is defined or both a compile error is generated.
+//!!!#define DHF_WIN
+//!!!#define DHF_DOS
+
+// Define if you want the DHF to users. Not defining DHF_GET_RES_MSG
+// leads to a decrease in code size as message strings are not included.
+//!!!#define DHF_GET_RES_MSG
+
+// Linux driver specific
+// Prevent inclusion of stdlib.h and string.h
+#define _INC_STDLIB
+#define _INC_STRING
+
+//-----------------------------------------------------------------------------
+// Define one or more of the following DSF #defines if you want to implement
+// the related DSF-function. Function dsf_callback must allways be implemented.
+// See file DHF.H for prototypes of the functions.
+
+// Define DSF_ALLOC if you want to manage memory allocation and de-allocation
+// for the DHF. If DSF_ALLOC is defined you must implement dsf_alloc and dsf_free.
+//!!!#define DSF_ALLOC
+
+// Define DSF_CONFIRM if you want the DHF to ask the user for confirmation in a
+// number of situations. If DSF_CONFIRM is defined you must implement dsf_confirm.
+// Not defining DSF_CONFIRM leads to a decrease in code size as confirmation
+// strings are not included.
+//!!!#define DSF_CONFIRM
+
+// Define DSF_DEBUG_MESSAGE if you want debug messages added to your output.
+// If you define DSF_DEBUG_MESSAGE then you must implement function
+// dsf_debug_message.
+//#define DSF_DEBUG_MESSAGE
+
+// Define DSF_ASSERT if you want asserts to be activated.
+// If you define DSF_ASSERT then you must implement function dsf_assert.
+//#define DBG 1
+//#define DSF_ASSERT
+
+// Define DSF_DBWIN if you want asserts and debug messages to be send to a debug
+// window like SOFTICE or DebugView from SysInternals.
+//!!!#define DSF_DBWIN
+//!!! Not implemented yet!
+
+// Define DSF_VOLATILE_ONLY if you only wants to use valatile functions
+// This is a typical setting for a AP and a driver.
+#define DSF_VOLATILE_ONLY
+
+// Define DSF_HERMESII if you want to use the DHF for the Hermes-II
+#ifdef HERMES2
+#define DSF_HERMESII
+#else
+#undef DSF_HERMESII
+#endif // HERMES2
+
+// Define DSF_BINARY_FILE if you want to use the DHF in combination with
+// reading the Firmware from a separate binary file.
+//!!!#define DSF_BINARY_FILE
+
+#endif // DHFCFG_H
View
4,881 drivers/staging/wlags49_h2/hcf.c
4,881 additions, 0 deletions not shown
View
405 drivers/staging/wlags49_h2/hcf.h
@@ -0,0 +1,405 @@
+
+// vim:tw=110:ts=4:
+#ifndef HCF_H
+#define HCF_H 1
+
+/************************************************************************************************************
+*
+* FILE : hcf.h
+*
+* DATE : $Date: 2004/08/05 11:47:10 $ $Revision: 1.7 $
+* Original: 2004/05/19 07:26:01 Revision: 1.56 Tag: hcf7_t20040602_01
+* Original: 2004/05/12 08:47:23 Revision: 1.53 Tag: hcf7_t7_20040513_01
+* Original: 2004/04/15 09:24:42 Revision: 1.46 Tag: hcf7_t7_20040415_01
+* Original: 2004/04/08 15:18:16 Revision: 1.45 Tag: t7_20040413_01
+* Original: 2004/04/01 15:32:55 Revision: 1.43 Tag: t7_20040401_01
+* Original: 2004/03/10 15:39:28 Revision: 1.39 Tag: t20040310_01
+* Original: 2004/03/04 11:03:38 Revision: 1.37 Tag: t20040304_01
+* Original: 2004/03/02 14:51:21 Revision: 1.35 Tag: t20040302_03
+* Original: 2004/02/24 13:00:28 Revision: 1.28 Tag: t20040224_01
+* Original: 2004/02/09 14:50:14 Revision: 1.26 Tag: t20040219_01
+*
+* AUTHOR : Nico Valster
+*
+* SPECIFICATION: ..........
+*
+* DESC : Definitions and Prototypes for MSF as well as HCF sources
+*
+* Customizable via HCFCFG.H
+*
+*
+**************************************************************************************************************
+
+**************************************************************************************************************
+*
+*
+* SOFTWARE LICENSE
+*
+* This software is provided subject to the following terms and conditions,
+* which you should read carefully before using the software. Using this
+* software indicates your acceptance of these terms and conditions. If you do
+* not agree with these terms and conditions, do not use the software.
+*
+* COPYRIGHT © 1994 - 1995 by AT&T. All Rights Reserved
+* COPYRIGHT © 1996 - 2000 by Lucent Technologies. All Rights Reserved
+* COPYRIGHT © 2001 - 2004 by Agere Systems Inc. All Rights Reserved
+* All rights reserved.
+*
+* Redistribution and use in source or binary forms, with or without
+* modifications, are permitted provided that the following conditions are met:
+*
+* . Redistributions of source code must retain the above copyright notice, this
+* list of conditions and the following Disclaimer as comments in the code as
+* well as in the documentation and/or other materials provided with the
+* distribution.
+*
+* . Redistributions in binary form must reproduce the above copyright notice,
+* this list of conditions and the following Disclaimer in the documentation
+* and/or other materials provided with the distribution.
+*
+* . Neither the name of Agere Systems Inc. nor the names of the contributors
+* may be used to endorse or promote products derived from this software
+* without specific prior written permission.
+*
+* Disclaimer
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+* INCLUDING, BUT NOT LIMITED TO, INFRINGEMENT AND THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ANY
+* USE, MODIFICATION OR DISTRIBUTION OF THIS SOFTWARE IS SOLELY AT THE USERS OWN
+* RISK. IN NO EVENT SHALL AGERE SYSTEMS INC. OR CONTRIBUTORS BE LIABLE FOR ANY
+* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+* ON ANY THEORY OF LIABILITY, INCLUDING, BUT NOT LIMITED TO, CONTRACT, STRICT
+* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+* DAMAGE.
+*
+*
+*************************************************************************************************************/
+
+
+#include "hcfcfg.h" // System Constants to be defined by the MSF-programmer to tailor the HCF
+#include "mdd.h" // Include file common for HCF, MSF
+
+
+/************************************************************************************************/
+/************************************** MACROS ************************************************/
+/************************************************************************************************/
+
+#define LOF(x) (sizeof(x)/sizeof(hcf_16)-1)
+
+/* Endianess
+ * Little Endian (a.k.a. Intel), least significant byte first
+ * Big Endian (a.k.a. Motorola), most significant byte first
+ *
+ * The following macros are supplied
+ * o CNV_LITTLE_TO_SHORT(w) interprets the 16-bits input value as Little Endian, returns an hcf_16
+ * o CNV_BIG_TO_SHORT(w) interprets the 16-bits input value as Big Endian, returns an hcf_16
+ *
+ */
+
+/* To increase portability, use unsigned char and unsigned char * when accessing parts of larger
+ * types to convert their Endianess
+ */
+
+#define CNV_END_SHORT(w) (hcf_16)( ((hcf_16)(w) & 0x00FF) << 8 | ((hcf_16)(w) & 0xFF00) >> 8 )
+#define CNV_END_LONG(dw) (hcf_32)( (dw >> 24) | ((dw >> 8) & 0xff00) | ((dw << 8) & 0xff0000) | (dw << 24) )
+
+#if HCF_BIG_ENDIAN
+//******************************************** B I G E N D I A N *******************************************
+#define CNV_LITTLE_TO_SHORT(w) CNV_END_SHORT(w) // endianess conversion needed
+#define CNV_BIG_TO_SHORT(w) (w) // no endianess conversion needed
+#define CNV_LITTLE_TO_LONG(dw) CNV_END_LONG(dw)
+#define CNV_LONG_TO_LITTLE(dw) CNV_END_LONG(dw)
+#else
+//****************************************** L I T T L E E N D I A N ****************************************
+#define CNV_LITTLE_TO_SHORT(w) (w) // no endianess conversion needed
+#define CNV_BIG_TO_SHORT(w) CNV_END_SHORT(w) // endianess conversion needed
+#define CNV_LITTLE_TO_LONG(dw) (dw)
+#define CNV_LONG_TO_LITTLE(dw) (dw)
+
+#if defined HCF_ALIGN && HCF_ALIGN > 1
+#define CNV_SHORTP_TO_LITTLE(pw) ((hcf_16)(*(hcf_8 *)pw)) | ((hcf_16)(*((hcf_8 *)pw+1)) << 8)
+#define CNV_LONGP_TO_LITTLE(pdw) ((hcf_32)(*(hcf_8 *)pdw)) | ((hcf_32)(*((hcf_8 *)pdw+1)) << 8) | \
+ ((hcf_32)(*((hcf_8 *)pdw+2)) << 16) | ((hcf_32)(*((hcf_8 *)pdw+3)) << 24)
+#else
+#define CNV_LONGP_TO_LITTLE(pdw) (*(hcf_32 *)pdw)
+#define CNV_SHORTP_TO_LITTLE(pw) (*(hcf_16 *)pw)
+#endif
+
+#endif // HCF_BIG_ENDIAN
+
+// conversion macros which can be expressed in other macros
+#define CNV_SHORT_TO_LITTLE(w) CNV_LITTLE_TO_SHORT(w)
+#define CNV_SHORT_TO_BIG(w) CNV_BIG_TO_SHORT(w)
+
+/************************************************************************************************/
+/************************************** END OF MACROS *****************************************/
+/************************************************************************************************/
+
+/***********************************************************************************************************/
+/***************** ****************************************/
+/***********************************************************************************************************/
+
+// offsets Transmit/Receive Frame Structure
+#define HFS_STAT 0x0000
+#define HFS_SWSUP 0x0006 //SW Support
+#define HFS_Q_INFO 0x0006 //Signal/Silence level
+#define HFS_RATE 0x0008 //RxFlow/Rate
+#define HFS_STAT_ERR RX_STAT_ERR //link "natural" HCF name to "natural" MSF name
+#define HFS_TX_CNTL 0x0036
+ // H-I H-II
+#define HFS_DAT_LEN (HFS_ADDR_DEST - 2) // 0x002C 0x0038
+#define HFS_ADDR_DEST 0x003A // 0x002E 0x003A
+#define HFS_ADDR_SRC (HFS_ADDR_DEST + 6) // 0x0034 0x0040
+#define HFS_LEN (HFS_ADDR_SRC + 6) // 0x003A 0x0046
+#define HFS_DAT (HFS_LEN + 2) // 0x003C 0x0048
+#define HFS_TYPE (HFS_DAT + 6) // 0x0042 0x004E
+
+
+//============================= D E S C R I P T O R S T R U C T U R E ==============================
+//;?MDD.H stuff ;?
+
+#if HCF_BIG_ENDIAN
+#define DESC_STRCT_CNT 0
+#define DESC_STRCT_SIZE 1
+#else
+#define DESC_STRCT_CNT 1
+#define DESC_STRCT_SIZE 0
+#endif // HCF_BIG_ENDIAN
+
+#define BUF_CNT buf_dim[DESC_STRCT_CNT]
+#define BUF_SIZE buf_dim[DESC_STRCT_SIZE]
+
+typedef struct DESC_STRCT {
+ hcf_16 buf_dim[2];
+ hcf_32 buf_phys_addr;
+ hcf_32 next_desc_phys_addr; // physical address of next descriptor
+ hcf_32 desc_phys_addr; // physical address of this descriptor
+ struct DESC_STRCT *next_desc_addr;
+ hcf_8 FAR *buf_addr;
+#if (HCF_EXT) & HCF_EXT_DESC_STRCT
+ void FAR *DESC_MSFSup; // pointer for arbitrary use by the MSF
+#endif // HCF_DESC_STRCT_EXT
+} DESC_STRCT;
+
+#define HCF_DASA_SIZE 12 //size in bytes for DA/SA
+
+#define DESC_CNT_MASK 0x0FFF
+
+#define GET_BUF_SIZE(descp) ((descp)->BUF_SIZE)
+#define GET_BUF_CNT(descp) ((descp)->BUF_CNT)
+#define SET_BUF_SIZE(descp, size) (descp)->BUF_SIZE = size;
+#define SET_BUF_CNT(descp, count) (descp)->BUF_CNT = count;
+
+//========================================= T A L L I E S ===================================================
+
+typedef struct { //Hermes Tallies (IFB substructure)
+ hcf_32 TxUnicastFrames;
+ hcf_32 TxMulticastFrames;
+ hcf_32 TxFragments;
+ hcf_32 TxUnicastOctets;
+ hcf_32 TxMulticastOctets;
+ hcf_32 TxDeferredTransmissions;
+ hcf_32 TxSingleRetryFrames;
+ hcf_32 TxMultipleRetryFrames;
+ hcf_32 TxRetryLimitExceeded;
+ hcf_32 TxDiscards;
+ hcf_32 RxUnicastFrames;
+ hcf_32 RxMulticastFrames;
+ hcf_32 RxFragments;
+ hcf_32 RxUnicastOctets;
+ hcf_32 RxMulticastOctets;
+ hcf_32 RxFCSErrors;
+ hcf_32 RxDiscardsNoBuffer;
+ hcf_32 TxDiscardsWrongSA;
+ hcf_32 RxWEPUndecryptable;
+ hcf_32 RxMsgInMsgFragments;
+ hcf_32 RxMsgInBadMsgFragments;
+ hcf_32 RxDiscardsWEPICVError;
+ hcf_32 RxDiscardsWEPExcluded;
+#if (HCF_EXT) & HCF_EXT_TALLIES_FW
+ hcf_32 TalliesExtra[32];
+#endif // HCF_EXT_TALLIES_FW
+} CFG_HERMES_TALLIES_STRCT;
+
+typedef struct { //HCF Tallies (IFB substructure)
+ hcf_32 NoBufInfo; //No buffer available for unsolicited Notify frame
+ hcf_32 NoBufMB; //No space available in MailBox
+ hcf_32 MiscErr; /* Command errors
+ * - time out on completion synchronous part Hermes Command
+ * - completed Hermes Command doesn't match original command
+ * - status of completed Hermes Command contains error bits
+ */
+#if (HCF_EXT) & HCF_EXT_TALLIES_FW
+ hcf_32 EngCnt[8];
+#endif // HCF_EXT_TALLIES_FW
+} CFG_HCF_TALLIES_STRCT;
+
+//Note this way to define ..._TAL_CNT implies that all tallies must keep the same (hcf_32) size
+#if (HCF_TALLIES) & ( HCF_TALLIES_NIC | HCF_TALLIES_HCF )
+#if (HCF_TALLIES) & HCF_TALLIES_NIC //Hermes tally support
+#define HCF_NIC_TAL_CNT (sizeof(CFG_HERMES_TALLIES_STRCT)/ sizeof(hcf_32))
+#else
+#define HCF_NIC_TAL_CNT 0
+#endif // HCF_TALLIES
+#if (HCF_TALLIES) & HCF_TALLIES_HCF //HCF tally support
+#define HCF_HCF_TAL_CNT (sizeof(CFG_HCF_TALLIES_STRCT) / sizeof(hcf_32))
+#else
+#define HCF_HCF_TAL_CNT 0
+#endif // HCF_TALLIES
+#define HCF_TOT_TAL_CNT ( HCF_NIC_TAL_CNT + HCF_NIC_TAL_CNT )
+#endif // HCF_TALLIES_NIC / HCF_TALLIES_HCF
+
+
+/***********************************************************************************************************/
+/********************************** I N T E R F A C E B L O C K ******************************************/
+/***********************************************************************************************************/
+
+#define IFB_VERSION 0x0E // initially 0, to be incremented by every IFB layout change
+
+typedef struct {
+ hcf_io IFB_IOBase; // I/O address of Hermes chip as passed by MSF at hcf_connect call
+ hcf_16 IFB_IORange; // I/O Range used by Hermes chip
+ hcf_16 IFB_DLMode; // Download Mode state
+ hcf_16 IFB_Cmd; // cmd in progress flag, to be ack-ed before next cmd can be issued
+ hcf_16 IFB_RxFID; // FID of "current" RxFS (non-DMA mode)
+//;?#if tx_delay option
+ hcf_16 IFB_TxFID; // fid storage during "delayed" send
+//;?#endif tx_delay option
+ hcf_16 IFB_RxLen; //
+ hcf_16 IFB_DefunctStat; // BAP initialization or Cmd Completion failed
+ hcf_16 IFB_ErrCmd; // contents Status reg when error bits and/or mismatch in cmd_wait
+ hcf_16 IFB_ErrQualifier; // contents Resp0 reg when error bits and/or mismatch in cmd_wait
+ hcf_16 IFB_lal; // LookAhead Length
+ wci_bufp IFB_lap; // LookAhead Buffer pointer
+ hcf_16 IFB_LinkStat; // Link Status
+ hcf_16 IFB_DSLinkStat; // Link Status, new strategy introduced for DeepSleep
+ hcf_16 IFB_CarryIn; // carry and carry-flag to move 1 byte from one get_frag to the next
+ hcf_16 IFB_CarryOut; // carry and carry-flag to move 1 byte from one put_frag to the next
+ hcf_16 IFB_Version; // IFB_VERSION, incremented by every SIGNIFICANT IFB layout change
+ hcf_16 IFB_CardStat; // NIC error / F/W incompatibility status
+ hcf_16 IFB_RscInd; // non-DMA: TxFID available, DMA: always 1
+ hcf_16 IFB_CntlOpt; // flags: 32 bits I/O, DMA available, DMA enabled
+ hcf_16 IFB_BusType; // BusType, derived via CFG_NIC_BUS_TYPE
+ CFG_FW_IDENTITY_STRCT IFB_FWIdentity; /* keep FWIdentity/Sup and PRIIdentity/Sup in sequence
+ * because of the (dumb) copy in init() */
+#if defined MSF_COMPONENT_ID
+ CFG_SUP_RANGE_STRCT IFB_FWSup;
+ CFG_PRI_IDENTITY_STRCT IFB_PRIIdentity;
+ CFG_SUP_RANGE_STRCT IFB_PRISup;
+ CFG_SUP_RANGE_STRCT IFB_HSISup;
+#endif // MSF_COMPONENT_ID
+#if (HCF_EXT) & HCF_EXT_INFO_LOG
+ RID_LOGP IFB_RIDLogp; // pointer to RID_LOG structure
+#endif // HCF_EXT_INFO_LOG
+#if HCF_PROT_TIME
+ hcf_32 IFB_TickIni; // initialization of S/W counter based protection loop
+#endif // HCF_PROT_TIME
+#if (HCF_EXT) & HCF_EXT_INT_TICK
+ int IFB_TickCnt; // Hermes Timer Tick Counter
+#endif // HCF_EXT_INT_TICK
+#if (HCF_EXT) & HCF_EXT_MB
+ hcf_16 *IFB_MBp; // pointer to the MailBox
+ hcf_16 IFB_MBSize; // size of the MailBox
+ hcf_16 IFB_MBWp; // zero-based write index into the MailBox
+ hcf_16 IFB_MBRp; // zero-based read index into the MailBox
+ hcf_16 IFB_MBInfoLen; // contents of L-field of the oldest available MailBoxInfoBlock
+#endif // HCF_EXT_MB
+#if (HCF_TYPE) & HCF_TYPE_WPA
+ hcf_16 IFB_MICTxCntl; // MIC bit and Key index in TxControl field of TxFS
+ hcf_32 IFB_MICTxKey[2]; // calculating key
+ hcf_32 IFB_MICTx[2]; // Tx MIC calculation Engine state
+ hcf_16 IFB_MICTxCarry; // temp length, carries over from one Tx fragment to another
+ hcf_16 IFB_MICRxCarry; // temp length, carries over from one Rx fragment to another
+ hcf_32 IFB_MICRxKey[4*2]; // 4 checking keys
+ hcf_32 IFB_MICRx[2]; // Rx MIC calculation Engine state
+#endif // HCF_TYPE_WPA
+#if HCF_ASSERT
+#if (HCF_ASSERT) & HCF_ASSERT_MB
+ CFG_MB_INFO_RANGE1_STRCT IFB_AssertStrct; // Add some complication to the HCF as prize for the new MSF I/F
+#endif // HCF_ASSERT_MB
+ // target of above IFB_AssertStrct
+ hcf_16 IFB_AssertLine; // - line number ( + encoded module name )
+ hcf_16 IFB_AssertTrace; // - bit based trace of all hcf_.... invocations
+ hcf_32 IFB_AssertQualifier; // - qualifier
+ hcf_16 IFB_AssertLvl; // Assert Filtering, Not yet implemented
+ hcf_16 IFB_AssertWhere; // Where parameter of the Assert macro
+#if (HCF_ASSERT) & ( HCF_ASSERT_LNK_MSF_RTN | HCF_ASSERT_RT_MSF_RTN )
+ MSF_ASSERT_RTNP IFB_AssertRtn; // MSF Assert Call back routine (inspired by GEF, DrDobbs Nov 1998 )
+#endif // HCF_ASSERT_LNK_MSF_RTN
+#if (HCF_ASSERT) & HCF_ASSERT_PRINTF // engineering facilty intended as F/W debugging aid
+ hcf_16 IFB_DbgPrintF_Cnt;
+ CFG_FW_PRINTF_BUFFER_LOCATION_STRCT IFB_FwPfBuff;
+#endif // HCF_ASSERT_PRINTF
+#endif // HCF_ASSERT
+#if ! defined HCF_INT_OFF
+ hcf_16 volatile IFB_IntOffCnt; // 0xFFFF based HCF_ACT_INT_OFF nesting counter, DeepSleep flag
+#endif // HCF_INT_OFF
+#if (HCF_TYPE) & HCF_TYPE_CCX
+ hcf_16 IFB_CKIPStat; // CKIP Status flag
+#endif // HCF_TYPE_CCX
+#if (HCF_TALLIES) & ( HCF_TALLIES_NIC | HCF_TALLIES_HCF ) //Hermes and/or HCF tally support
+ hcf_32 IFB_Silly_you_should_align; //;?
+ hcf_16 IFB_TallyLen; // Tally length (to build an LTV)
+ hcf_16 IFB_TallyTyp; // Tally Type (to build an LTV)
+#endif // HCF_TALLIES_NIC / HCF_TALLIES_HCF
+#if (HCF_TALLIES) & HCF_TALLIES_NIC //Hermes tally support
+ CFG_HERMES_TALLIES_STRCT IFB_NIC_Tallies;
+#endif // HCF_TALLIES_NIC
+#if (HCF_TALLIES) & HCF_TALLIES_HCF //HCF tally support
+ CFG_HCF_TALLIES_STRCT IFB_HCF_Tallies;
+#endif // HCF_TALLIES_HCF
+#if HCF_DMA
+ //used for a pool of destination_address descriptor/buffers, used during tx encapsulation points to the
+ //first/last descriptor in the descriptor chain, so we can easily remove and append a packet.
+ DESC_STRCT *IFB_FirstDesc[2];
+ DESC_STRCT *IFB_LastDesc[2];
+ DESC_STRCT *IFB_ConfinedDesc[2]; // pointers to descriptor used for host reclaim purposes.
+ hcf_16 IFB_DmaPackets; // HREG_EV_[TX/RX]DMA_DONE flags, reports DMA Frame availability to MSF
+#endif // HCF_DMA
+#if (HCF_EXT) & HCF_EXT_INT_TX_EX
+ hcf_16 IFB_TxFsStat; // Tx message monitoring
+ hcf_16 IFB_TxFsGap[2]; //;?make this robust
+ hcf_16 IFB_TxFsSwSup;
+#endif // HCF_EXT_INT_TX_EX
+ hcf_16 IFB_Magic; /* "Magic" signature, to help the debugger interpret a memory dump
+ * also the last field cleared at hcf_connect
+ */
+#if (HCF_EXT) & HCF_EXT_IFB_STRCT // for usage by the MSF
+ void FAR *IFB_MSFSup; // pointer for arbitrary use by the MSF
+#endif // HCF_EXT_IFB_STRCT_EXT
+} IFB_STRCT;
+
+typedef IFB_STRCT* IFBP;
+
+
+/***********************************************************************************************************/
+/********************** W C I F U N C T I O N S P R O T O T Y P E S ******************************/
+/***********************************************************************************************************/
+
+EXTERN_C int hcf_action (IFBP ifbp, hcf_16 cmd );
+EXTERN_C int hcf_connect (IFBP ifbp, hcf_io io_base );
+#if (HCF_ENCAP) & HCF_ENC_SUP
+EXTERN_C hcf_8 hcf_encap (wci_bufp type );
+#endif // HCF_ENC_SUP
+EXTERN_C int hcf_get_info (IFBP ifbp, LTVP ltvp );
+EXTERN_C int hcf_service_nic (IFBP ifbp, wci_bufp bufp, unsigned int len );
+EXTERN_C int hcf_cntl (IFBP ifbp, hcf_16 cmd );
+EXTERN_C int hcf_put_info (IFBP ifbp, LTVP ltvp );
+EXTERN_C int hcf_rcv_msg (IFBP ifbp, DESC_STRCT *descp, unsigned int offset );
+EXTERN_C int hcf_send_msg (IFBP ifbp, DESC_STRCT *dp, hcf_16 tx_cntl );
+#if HCF_DMA
+EXTERN_C void hcf_dma_tx_put (IFBP ifbp, DESC_STRCT *d, hcf_16 tx_cntl );
+EXTERN_C DESC_STRCT* hcf_dma_tx_get (IFBP ifbp );
+EXTERN_C DESC_STRCT* hcf_dma_rx_get (IFBP ifbp );
+EXTERN_C void hcf_dma_rx_put (IFBP ifbp, DESC_STRCT *d );
+#endif // HCF_DMA
+#if (HCF_ASSERT) & HCF_ASSERT_LNK_MSF_RTN
+EXTERN_C void msf_assert (unsigned int line_number, hcf_16 trace, hcf_32 qual );
+#endif // HCF_ASSERT_LNK_MSF_RTN
+
+#endif // HCF_H
+
View
2,344 drivers/staging/wlags49_h2/hcfcfg.h
@@ -0,0 +1,2344 @@
+
+// vim:tw=110:ts=4:
+#ifndef HCFCFG_H
+#define HCFCFG_H 1
+
+/*************************************************************************************************************
+*
+* FILE : hcfcfg.tpl // hcfcfg.h
+*
+* DATE : $Date: 2004/08/05 11:47:10 $ $Revision: 1.6 $
+* Original: 2004/04/08 15:18:16 Revision: 1.40 Tag: t20040408_01
+* Original: 2004/04/01 15:32:55 Revision: 1.38 Tag: t7_20040401_01
+* Original: 2004/03/10 15:39:28 Revision: 1.34 Tag: t20040310_01
+* Original: 2004/03/03 14:10:12 Revision: 1.32 Tag: t20040304_01
+* Original: 2004/03/02 09:27:12 Revision: 1.30 Tag: t20040302_03
+* Original: 2004/02/24 13:00:28 Revision: 1.25 Tag: t20040224_01
+* Original: 2004/02/18 17:13:57 Revision: 1.23 Tag: t20040219_01
+*
+* AUTHOR : Nico Valster
+*
+* DESC : HCF Customization Macros
+* hcfcfg.tpl list all #defines which must be specified to:
+* adjust the HCF functions defined in HCF.C to the characteristics of a specific environment
+* o maximum sizes for messages
+* o Endianess
+* Compiler specific macros
+* o port I/O macros
+* o type definitions
+*
+* By copying HCFCFG.TPL to HCFCFG.H and -if needed- modifying the #defines the WCI functionality can be
+* tailored
+*
+* Supported environments:
+* WVLAN_41 Miniport NDIS 3.1
+* WVLAN_42 Packet Microsoft Visual C 1.5
+* WVLAN_43 16 bits DOS ODI Microsoft Visual C 1.5
+* WVLAN_44 32 bits ODI (__NETWARE_386__) WATCOM
+* WVLAN_45 MAC_OS MPW?, Symantec?
+* WVLAN_46 Windows CE (_WIN32_WCE) Microsoft ?
+* WVLAN_47 LINUX (__LINUX__) GCC, discarded, based on GPL'ed HCF-light
+* WVLAN_48 Miniport NDIS 5
+* WVLAN_49 LINUX (__LINUX__) GCC, originally based on pre-compiled HCF_library
+* migrated to use the HCF sources when Lucent Technologies
+* brought the HCF module under GPL
+* WVLAN_51 Miniport USB NDIS 5
+* WVLAN_52 Miniport NDIS 4
+* WVLAN_53 VxWorks END Station driver
+* WVLAN_54 VxWorks END Access Point driver
+