diff --git a/CHANGES b/CHANGES index 8213f17..3e3b168 100644 --- a/CHANGES +++ b/CHANGES @@ -41,6 +41,7 @@ * Intersil Corporation as part of PRISM(R) chipset product development. * * -------------------------------------------------------------------- + - Added man pages contributed by Joey Hess - Add ident info for the Z-Com 725/726 USB Widgets. - Fixes to silence GCC3.2 warnings. (Pavel Roskin) -pre7 diff --git a/man/Makefile b/man/Makefile index acc5821..9da3d18 100644 --- a/man/Makefile +++ b/man/Makefile @@ -48,7 +48,8 @@ all: @echo "Nothing to do..." install: - @echo "Nothing to do..." + cp nwepgen.man wlancfg.man wlanctl-ng.man wland.man \ + /usr/local/man/man1 clean: rm -f core core.* *.o .*.o *.s *.a .depend tmp_make *~ tags diff --git a/man/nwepgen.man b/man/nwepgen.man new file mode 100644 index 0000000..3c17115 --- /dev/null +++ b/man/nwepgen.man @@ -0,0 +1,13 @@ +.TH NEWPGEN 8 +.SH NAME +nwepgen \- generates Neesus Datacom compatible WEP keys +.SH SYNOPSIS +.B newpgen genstr length +.SH DESCRIPTION +.B nwepgen +generates Neesus Datacom compatible WEP keys from a string. You will +typically not run it by hand, but it is called by the linux-wlan-ng +initialization scripts if you specify a WEP key string in the config file. +.P +.SH AUTHOR +This minimal man page was written by Joey Hess. diff --git a/man/wlancfg.man b/man/wlancfg.man new file mode 100644 index 0000000..257ccd8 --- /dev/null +++ b/man/wlancfg.man @@ -0,0 +1,54 @@ +.TH WLANCFG 8 +.SH NAME +wlancfg \- manupulate linux-wlan-ng MIB values +.SH SYNOPSIS +.B wlancfg query dev +.P +.B wlancfg show dev [all] +.P +.B wlancfg set dev +.P +.B wlancfg list +.P +.B wlancfg version +.SH DESCRIPTION +The wlancfg utility program provides an alternative method to +.B wlanctl-ng (1) +, for manipulating MIB values. It was designed to provide +an easier mechanism for saving and restoring the complete wireless +configuration (i.e. when re-starting the device driver) and to provide +a more efficient mechanism for GUI's to query multiple MIB's. +.SH OPTIONS +.TP +.B dev +The name of the device (e.g., wlan0). +.TP +.B query +Read MIB names (separated by whitespace) from stdin +and output their values (separated by carriage returns) +to stdout. The MIB's may be either read/write or +read-only. +.TP +.B show +Query the values of all supported read/write MIB's and +output their values (separated by carriage returns) to +stdout. The syntax of the output will be: + name=value +.RS +If the "all" parameter is specified, then all supported +MIB's (i.e. read-only MIB's as well) are output. +.RE +.TP +.B set +Read MIB name/value pairs (separated by carriage returns) +from stdin and set the values of the specified MIB's. The +pairs must have the same syntax as above. The MIB's must +be read/write. +.TP +.B list +Display a list of all supported MIB's. +.TP +.B version +Display the compiled version of wlancfg. +.SH AUTHOR +This minimal man page was written by Joey Hess. diff --git a/man/wlanctl-ng.man b/man/wlanctl-ng.man new file mode 100644 index 0000000..4c6186a --- /dev/null +++ b/man/wlanctl-ng.man @@ -0,0 +1,27 @@ +.TH WLANCTL-NG 8 +.SH NAME +wlanctl-ng \- control utility for linux-wlan-ng 802.11 devices +.SH SYNOPSIS +.B wlanctl-ng interface|verson|commands|mibs cmd cmdarg [cmdarg..] +.SH DESCRIPTION +The wlanctl-ng utility program is used to set up linux-wlan-ng 802.11 +devices. linux-wlan-ng devices are configured using a MIB. +.P +Only experts will want to use this program, as it is quite complicated. +Everyone else edits a config file and uses a script that runs this program +as necessary. +.SH OPTIONS +.TP +.B commands +Output a list of all available commands. +.TP +.B mibs +Outputs a list of available mibs. +.TP +.B version +Outputs the version of the program. +.TP +.B interface +The name of a wireless network interface, such as wlan0. +.SH AUTHOR +This minimal man page was written by Joey Hess. diff --git a/man/wland.man b/man/wland.man new file mode 100644 index 0000000..02250e1 --- /dev/null +++ b/man/wland.man @@ -0,0 +1,23 @@ +.TH WLAND 8 +.SH NAME +wland \- linux-wlan-ng daemon +.SH SYNOPSIS +.B wland [-V|-v] [-d wlandpath] [-u] +.SH DESCRIPTION +.B wland +is a daemon for receiving and handling events from 802.11 services and +MAC-specific linux-wlan-ng drivers. It is not currently used. +.SH OPTIONS +.TP +.B -V +.TP +.B -v +Display version number. +.TP +.B -d wlandpath +Specify the directory to run in. +.TP +.B -u +Do not daemonize; run in foreground. +.SH AUTHOR +This minimal man page was written by Joey Hess. diff --git a/src/prism2/driver/prism2sta.c b/src/prism2/driver/prism2sta.c index ae47c2d..71e3ba8 100644 --- a/src/prism2/driver/prism2sta.c +++ b/src/prism2/driver/prism2sta.c @@ -450,6 +450,459 @@ static struct usb_device_id usb_prism_tbl[] = { {PRISM_USB_DEVICE(0x045e, 0x006e, "Microsoft MN510 Wireless USB Adapter")}, {PRISM_USB_DEVICE(0x0967, 0x0204, "Acer Warplink USB Adapter")}, {PRISM_USB_DEVICE(0x0cde, 0x0002, "Z-Com 725/726 Prism2.5 USB/USB Integrated")}, +/* src/prism2/driver/prism2sta.c +* +* Implements the station functionality for prism2 +* +* Copyright (C) 1999 AbsoluteValue Systems, Inc. All Rights Reserved. +* -------------------------------------------------------------------- +* +* linux-wlan +* +* The contents of this file are subject to the Mozilla Public +* License Version 1.1 (the "License"); you may not use this file +* except in compliance with the License. You may obtain a copy of +* the License at http://www.mozilla.org/MPL/ +* +* Software distributed under the License is distributed on an "AS +* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or +* implied. See the License for the specific language governing +* rights and limitations under the License. +* +* Alternatively, the contents of this file may be used under the +* terms of the GNU Public License version 2 (the "GPL"), in which +* case the provisions of the GPL are applicable instead of the +* above. If you wish to allow the use of your version of this file +* only under the terms of the GPL and not to allow others to use +* your version of this file under the MPL, indicate your decision +* by deleting the provisions above and replace them with the notice +* and other provisions required by the GPL. If you do not delete +* the provisions above, a recipient may use your version of this +* file under either the MPL or the GPL. +* +* -------------------------------------------------------------------- +* +* Inquiries regarding the linux-wlan Open Source project can be +* made directly to: +* +* AbsoluteValue Systems Inc. +* info@linux-wlan.com +* http://www.linux-wlan.com +* +* -------------------------------------------------------------------- +* +* Portions of the development of this software were funded by +* Intersil Corporation as part of PRISM(R) chipset product development. +* +* -------------------------------------------------------------------- +* +* This file implements the module and linux pcmcia routines for the +* prism2 driver. +* +* -------------------------------------------------------------------- +*/ + +/*================================================================*/ +/* System Includes */ + +#include +#define WLAN_DBVAR prism2_debug +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#if (WLAN_HOSTIF == WLAN_PCMCIA) +#include +#include +#include +#include +#include +#include +#include +#endif + +#if ((WLAN_HOSTIF == WLAN_PLX) || (WLAN_HOSTIF == WLAN_PCI)) +#include +#include +#endif + +#if (WLAN_HOSTIF == WLAN_USB) +#include +#endif + +/*================================================================*/ +/* Project Includes */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/*================================================================*/ +/* Local Constants */ + +#if (WLAN_HOSTIF == WLAN_PLX) +#define PLX_ATTR_SIZE 0x1000 /* Attribute memory size - 4K bytes */ +#define COR_OFFSET 0x3e0 /* COR attribute offset of Prism2 PC card */ +#define COR_VALUE 0x41 /* Enable PC card with irq in level trigger */ +#define PLX_INTCSR 0x4c /* Interrupt Control and Status Register */ +#define PLX_INTCSR_INTEN (1<<6) /* Interrupt Enable bit */ +#define PLX_MIN_ATTR_LEN 512 /* at least 2 x 256 is needed for CIS */ + +/* 3Com 3CRW777A (PLX) board ID */ +#define PCIVENDOR_3COM 0x10B7 +#define PCIDEVICE_AIRCONNECT 0x7770 + +/* Eumitcom PCI WL11000 PCI Adapter (PLX) board device+vendor ID */ +#define PCIVENDOR_EUMITCOM 0x1638UL +#define PCIDEVICE_WL11000 0x1100UL + +/* Global Sun Tech GL24110P PCI Adapter (PLX) board device+vendor ID */ +#define PCIVENDOR_GLOBALSUN 0x16abUL +#define PCIDEVICE_GL24110P 0x1101UL +#define PCIDEVICE_GL24110P_ALT 0x1102UL + +/* Netgear MA301 PCI Adapter (PLX) board device+vendor ID */ +#define PCIVENDOR_NETGEAR 0x1385UL +#define PCIDEVICE_MA301 0x4100UL + +/* US Robotics USR2410 PCI Adapter (PLX) board device+vendor ID */ +#define PCIVENDOR_USROBOTICS 0x16ecUL +#define PCIDEVICE_USR2410 0x3685UL + +/* Linksys WPC11 card with the WDT11 adapter (PLX) board device+vendor ID */ +#define PCIVENDOR_Linksys 0x16abUL +#define PCIDEVICE_Wpc11Wdt11 0x1102UL + +/* National Datacomm Corp SOHOware Netblaster II PCI */ +#define PCIVENDOR_NDC 0x15e8UL +#define PCIDEVICE_NCP130_PLX 0x0130UL +#define PCIDEVICE_NCP130_ASIC 0x0131UL + +/* NDC NCP130_PLX is also sold by Corega. Their name is CGWLPCIA11 */ +#define PCIVENDOR_COREGA PCIVENDOR_NDC +#define PCIDEVICE_CGWLPCIA11 PCIDEVICE_NCP130_PLX + +/* PCI Class & Sub-Class code, Network-'Other controller' */ +#define PCI_CLASS_NETWORK_OTHERS 0x280 +#endif /* WLAN_PLX */ + +#if (WLAN_HOSTIF == WLAN_PCI) +#define PCI_TYPE (PCI_USES_MEM | PCI_ADDR0 | PCI_NO_ACPI_WAKE) +#define PCI_SIZE 0x1000 /* Memory size - 4K bytes */ + +/* ISL3874A 11Mb/s WLAN controller */ +#define PCIVENDOR_INTERSIL 0x1260UL +#define PCIDEVICE_ISL3874 0x3873UL /* [MSM] yeah I know...the ID says + 3873. Trust me, it's a 3874. */ + +/* PCI Class & Sub-Class code, Network-'Other controller' */ +#define PCI_CLASS_NETWORK_OTHERS 0x280 + +#endif /* WLAN_PCI */ + + +/*================================================================*/ +/* Local Macros */ + +/*================================================================*/ +/* Local Types */ + +/*================================================================*/ +/* Local Static Definitions */ + +#if (WLAN_HOSTIF == WLAN_PCMCIA) +#define DRIVER_SUFFIX "_cs" +#elif (WLAN_HOSTIF == WLAN_PLX) +#define DRIVER_SUFFIX "_plx" +typedef char* dev_info_t; +#elif (WLAN_HOSTIF == WLAN_PCI) +#define DRIVER_SUFFIX "_pci" +typedef char* dev_info_t; +#elif (WLAN_HOSTIF == WLAN_USB) +#define DRIVER_SUFFIX "_usb" +typedef char* dev_info_t; +#else +#error "HOSTIF unsupported or undefined!" +#endif + +static char *version = "prism2" DRIVER_SUFFIX ".o: " WLAN_RELEASE; +static dev_info_t dev_info = "prism2" DRIVER_SUFFIX; + +#if (WLAN_HOSTIF == WLAN_PCMCIA) + +static dev_link_t *dev_list = NULL; /* head of instance list */ + +#endif + +/*-----------------------------------------------------------------*/ +#if (WLAN_HOSTIF == WLAN_PLX || WLAN_HOSTIF == WLAN_PCI) +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0)) +/* NOTE: The pci code in this driver is written to the + * 2.4.x (or some 2.3.x and newer) pci support. The declarations + * inside this #if block are to provide backward compatibility to 2.2.x. + * NOTE2: If you want to modify the pci support, please make sure you do + * it in a 2.4.x compliant way. + */ + +struct pci_driver_mapping { + struct pci_dev *dev; + struct pci_driver *drv; + void *driver_data; +}; + +struct pci_device_id +{ + unsigned int vendor, device; + unsigned int subvendor, subdevice; + unsigned int class, class_mask; + unsigned long driver_data; +}; + +struct pci_driver +{ + struct {int a;} dummy; + char *name; + const struct pci_device_id *id_table; /* NULL if wants all devices */ + int (*probe) (struct pci_dev *dev, const struct pci_device_id *id); + void (*remove) (struct pci_dev *dev); + int (*save_state) (struct pci_dev *dev, u32 state); + int (*suspend)(struct pci_dev *dev, u32 state); + int (*resume) (struct pci_dev *dev); + int (*enable_wake) (struct pci_dev *dev, u32 state, int enable); +}; + +#define PCI_MAX_MAPPINGS 16 +static struct pci_driver_mapping drvmap [PCI_MAX_MAPPINGS] = { { NULL, } , }; + +#define PCI_ANY_ID 0xffff + +static int pci_register_driver(struct pci_driver *drv); +static void pci_unregister_driver(struct pci_driver *drv); +static int pci_populate_drvmap (struct pci_dev *dev, struct pci_driver *drv); +static void *pci_get_drvdata (struct pci_dev *dev); +static void pci_set_drvdata (struct pci_dev *dev, void *driver_data); + +/* no-ops */ +#define pci_enable_device(a) 0 +#define pci_disable_device(a) 0 +#define request_mem_region(x,y,z) (1) +#define release_mem_region(x,y) do {} while (0) + +#ifndef pci_resource_start +static unsigned long pci_resource_len (struct pci_dev *dev, int n_base) +{ + u32 l, sz; + int reg = PCI_BASE_ADDRESS_0 + (n_base << 2); + + /* XXX temporarily disable I/O and memory decoding for this device? */ + + pci_read_config_dword (dev, reg, &l); + if (l == 0xffffffff) + return 0; + + pci_write_config_dword (dev, reg, ~0); + pci_read_config_dword (dev, reg, &sz); + pci_write_config_dword (dev, reg, l); + + if (!sz || sz == 0xffffffff) + return 0; + if ((l & PCI_BASE_ADDRESS_SPACE) == PCI_BASE_ADDRESS_SPACE_MEMORY) { + sz = ~(sz & PCI_BASE_ADDRESS_MEM_MASK); + } else { + sz = ~(sz & PCI_BASE_ADDRESS_IO_MASK) & 0xffff; + } + + return sz + 1; +} +#define pci_resource_start(dev, i) \ + (((dev)->base_address[i] & PCI_BASE_ADDRESS_SPACE) ? \ + ((dev)->base_address[i] & PCI_BASE_ADDRESS_IO_MASK) : \ + ((dev)->base_address[i] & PCI_BASE_ADDRESS_MEM_MASK)) +#define pci_resource_end(dev,bar) \ + (pci_resource_len((dev),(bar)) == 0 ? \ + pci_resource_start(dev,bar) : \ + (pci_resource_start(dev,bar) + pci_resource_len((dev),(bar)) - 1) +#define pci_resource_flags(dev, i) \ + (dev->base_address[i] & IORESOURCE_IO) +#endif + +#endif /* (WLAN_HOSTIF == WLAN_PLX || WLAN_HOSTIF == WLAN_PCI) */ +#endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0)) */ +/*-----------------------------------------------------------------*/ + +#if (WLAN_HOSTIF == WLAN_PLX || WLAN_HOSTIF == WLAN_PCI) +static int prism2sta_suspend_pci(struct pci_dev *pdev, u32 state); +static int prism2sta_resume_pci(struct pci_dev *pdev); +#endif + +#if (WLAN_HOSTIF == WLAN_PLX) +static struct pci_device_id plx_id_tbl[] = { + { + PCIVENDOR_EUMITCOM, PCIDEVICE_WL11000, + PCI_ANY_ID, PCI_ANY_ID, + 0, 0, + /* Driver data, we just put the name here */ + (unsigned long)"Eumitcom WL11000 PCI(PLX) card" + }, + { + PCIVENDOR_GLOBALSUN, PCIDEVICE_GL24110P, + PCI_ANY_ID, PCI_ANY_ID, + 0, 0, + /* Driver data, we just put the name here */ + (unsigned long)"Global Sun Tech GL24110P PCI(PLX) card" + }, + { + PCIVENDOR_GLOBALSUN, PCIDEVICE_GL24110P_ALT, + PCI_ANY_ID, PCI_ANY_ID, + 0, 0, + /* Driver data, we just put the name here */ + (unsigned long)"Global Sun Tech GL24110P PCI(PLX) card" + }, + { + PCIVENDOR_NETGEAR, PCIDEVICE_MA301, + PCI_ANY_ID, PCI_ANY_ID, + 0, 0, + /* Driver data, we just put the name here */ + (unsigned long)"Global Sun Tech GL24110P PCI(PLX) card" + }, + { + PCIVENDOR_USROBOTICS, PCIDEVICE_USR2410, + PCI_ANY_ID, PCI_ANY_ID, + 0, 0, + /* Driver data, we just put the name here */ + (unsigned long)"US Robotics USR2410 PCI(PLX) card" + }, + { + PCIVENDOR_Linksys, PCIDEVICE_Wpc11Wdt11, + PCI_ANY_ID, PCI_ANY_ID, + 0, 0, + /* Driver data, we just put the name here */ + (unsigned long)"Linksys WPC11 with WDT11 PCI(PLX) adapter" + }, + { + PCIVENDOR_NDC, PCIDEVICE_NCP130_PLX, + PCI_ANY_ID, PCI_ANY_ID, + 0, 0, + /* Driver data, we just put the name here */ + (unsigned long)"NDC Netblaster II PCI(PLX)" + }, + { + PCIVENDOR_NDC, PCIDEVICE_NCP130_ASIC, + PCI_ANY_ID, PCI_ANY_ID, + 0, 0, + /* Driver data, we just put the name here */ + (unsigned long)"NDC Netblaster II PCI(TMC7160)" + }, + { + PCIVENDOR_3COM, PCIDEVICE_AIRCONNECT, + PCI_ANY_ID, PCI_ANY_ID, + 0, 0, + /* Driver data, we just put the name here */ + (unsigned long)"3Com AirConnect PCI 802.11b 11Mb/s WLAN Controller" + }, + { + 0, 0, 0, 0, 0, 0, 0 + } +}; + +MODULE_DEVICE_TABLE(pci, plx_id_tbl); + +/* Function declared here because of ptr reference below */ +static int prism2sta_probe_plx(struct pci_dev *pdev, + const struct pci_device_id *id); +static void prism2sta_remove_plx(struct pci_dev *pdev); + +struct pci_driver prism2_plx_drv_id = { + name: "prism2_plx", + id_table: plx_id_tbl, + probe: prism2sta_probe_plx, + remove: prism2sta_remove_plx, +#ifdef CONFIG_PM + suspend: prism2sta_suspend_pci, + resume: prism2sta_resume_pci, +#endif +}; + +#endif /* WLAN_PLX */ + +#if (WLAN_HOSTIF == WLAN_PCI) + +static struct pci_device_id pci_id_tbl[] = { + { + PCIVENDOR_INTERSIL, PCIDEVICE_ISL3874, + PCI_ANY_ID, PCI_ANY_ID, + 0, 0, + /* Driver data, we just put the name here */ + (unsigned long)"Intersil Prism2.5 ISL3874 11Mb/s WLAN Controller" + }, + { + 0, 0, 0, 0, 0, 0, 0 + } +}; + +MODULE_DEVICE_TABLE(pci, pci_id_tbl); + +/* Function declared here because of ptr reference below */ +static int prism2sta_probe_pci(struct pci_dev *pdev, + const struct pci_device_id *id); +static void prism2sta_remove_pci(struct pci_dev *pdev); + +struct pci_driver prism2_pci_drv_id = { + name: "prism2_pci", + id_table: pci_id_tbl, + probe: prism2sta_probe_pci, + remove: prism2sta_remove_pci, +#ifdef CONFIG_PM + suspend: prism2sta_suspend_pci, + resume: prism2sta_resume_pci, +#endif +}; + +#endif /* WLAN_PCI */ + +#if (WLAN_HOSTIF == WLAN_USB) + +#define PRISM_USB_DEVICE(vid, pid, name) \ + USB_DEVICE(vid, pid), \ + driver_info: (unsigned long) name + +static struct usb_device_id usb_prism_tbl[] = { + {PRISM_USB_DEVICE(0x09aa, 0x3642, "Prism2.x 11Mbps WLAN USB Adapter")}, + {PRISM_USB_DEVICE(0x1668, 0x0408, "Actiontec Prism2.5 11Mbps WLAN USB Adapter")}, + {PRISM_USB_DEVICE(0x1668, 0x0421, "Actiontec Prism2.5 11Mbps WLAN USB Adapter")}, + {PRISM_USB_DEVICE(0x066b, 0x2212, "Linksys WUSB11v2.5 11Mbps WLAN USB Adapter")}, + {PRISM_USB_DEVICE(0x067c, 0x1022, "Siemens SpeedStream 1022 11Mbps WLAN USB Adapter")}, + {PRISM_USB_DEVICE(0x049f, 0x0033, "Compaq/Intel W100 PRO/Wireless 11Mbps multiport WLAN Adapter")}, + {PRISM_USB_DEVICE(0x049f, 0x0076, "Compaq/Intel W200 PRO/Wireless 11Mbps multiport WLAN Adapter")}, + {PRISM_USB_DEVICE(0x0411, 0x0016, "Melco WLI-USB-S11 11Mbps WLAN Adapter")}, + {PRISM_USB_DEVICE(0x08de, 0x7a01, "PRISM25 IEEE 802.11 Mini USB Adapter")}, + {PRISM_USB_DEVICE(0x8086, 0x1111, "Intel PRO/Wireless 2011B LAN USB Adapter")}, + {PRISM_USB_DEVICE(0x0d8e, 0x7a01, "PRISM25 IEEE 802.11 Mini USB Adapter")}, + {PRISM_USB_DEVICE(0x045e, 0x006e, "Microsoft MN510 Wireless USB Adapter")}, + {PRISM_USB_DEVICE(0x0967, 0x0204, "Acer Warplink USB Adapter")}, + {PRISM_USB_DEVICE(0x0cde, 0x0002, "Z-Com 725/726 Prism2.5 USB/USB Integrated")}, + { /* terminator */ } };