Add upgt(4), a driver for Conexant/Intersil PrismGT SoftMAC USB
IEEE 802.11b/g WLAN device, ported from OpenBSD by FUKAUMI Naoki: http://mail-index.NetBSD.org/current-users/2010/05/28/msg013570.html Slightly modified by me to use recently added config_mountroot(9) to defer some device initialization until mountroot for firmload(9). Tested on Sharp W-ZERO3 WS003SH with internal WLAN. Note currently we cannot redistribute firmware files for upgt(4) so they have to be downloaded and copied into /libdata/firmware/upgt manually. See upgt(4) man page about firmware details.
This commit is contained in:
parent
d2c2528c3b
commit
c3e7f27703
|
@ -1,4 +1,4 @@
|
|||
# $NetBSD: mi,v 1.1223 2010/07/03 08:16:51 jmmv Exp $
|
||||
# $NetBSD: mi,v 1.1224 2010/07/04 15:21:57 tsutsui Exp $
|
||||
#
|
||||
# Note: don't delete entries from here - mark them as "obsolete" instead.
|
||||
#
|
||||
|
@ -1609,6 +1609,7 @@
|
|||
./usr/share/man/cat4/umodem.0 man-sys-catman .cat
|
||||
./usr/share/man/cat4/ums.0 man-sys-catman .cat
|
||||
./usr/share/man/cat4/unix.0 man-sys-catman .cat
|
||||
./usr/share/man/cat4/upgt.0 man-sys-catman .cat
|
||||
./usr/share/man/cat4/upl.0 man-sys-catman .cat
|
||||
./usr/share/man/cat4/uplcom.0 man-sys-catman .cat
|
||||
./usr/share/man/cat4/urandom.0 man-sys-catman .cat
|
||||
|
@ -4204,6 +4205,7 @@
|
|||
./usr/share/man/html4/umodem.html man-sys-htmlman html
|
||||
./usr/share/man/html4/ums.html man-sys-htmlman html
|
||||
./usr/share/man/html4/unix.html man-sys-htmlman html
|
||||
./usr/share/man/html4/upgt.html man-sys-htmlman html
|
||||
./usr/share/man/html4/upl.html man-sys-htmlman html
|
||||
./usr/share/man/html4/uplcom.html man-sys-htmlman html
|
||||
./usr/share/man/html4/urandom.html man-sys-htmlman html
|
||||
|
@ -6729,6 +6731,7 @@
|
|||
./usr/share/man/man4/umodem.4 man-sys-man .man
|
||||
./usr/share/man/man4/ums.4 man-sys-man .man
|
||||
./usr/share/man/man4/unix.4 man-sys-man .man
|
||||
./usr/share/man/man4/upgt.4 man-sys-man .man
|
||||
./usr/share/man/man4/upl.4 man-sys-man .man
|
||||
./usr/share/man/man4/uplcom.4 man-sys-man .man
|
||||
./usr/share/man/man4/urandom.4 man-sys-man .man
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# $NetBSD: Makefile,v 1.520 2010/06/29 14:10:04 kefren Exp $
|
||||
# $NetBSD: Makefile,v 1.521 2010/07/04 15:21:58 tsutsui Exp $
|
||||
# @(#)Makefile 8.1 (Berkeley) 6/18/93
|
||||
|
||||
MAN= aac.4 ac97.4 acardide.4 aceride.4 acphy.4 \
|
||||
|
@ -73,7 +73,7 @@ MAN+= stuirda.4 u3g.4 uaudio.4 uberry.4 ubsa.4 ubt.4 uchcom.4 ucom.4 ucycom.4 \
|
|||
uhidev.4 uhmodem.4 uhso.4 uipaq.4 uirda.4 ukbd.4 ukyopon.4 ulpt.4 \
|
||||
umass.4 umct.4 umidi.4 umodem.4 ums.4 uplcom.4 urio.4 usb.4 \
|
||||
uscanner.4 uslsa.4 usscanner.4 ustir.4 uvisor.4 uvscom.4 uyap.4 \
|
||||
aue.4 atu.4 axe.4 cdce.4 cue.4 kue.4 upl.4 url.4 udav.4 \
|
||||
aue.4 atu.4 axe.4 cdce.4 cue.4 kue.4 upgt.4 upl.4 url.4 udav.4 \
|
||||
ehci.4 ohci.4 slhci.4 uhci.4 uthum.4 utoppy.4 uvideo.4 uyurex.4
|
||||
|
||||
# Ir devices
|
||||
|
|
|
@ -0,0 +1,237 @@
|
|||
.\" $NetBSD: upgt.4,v 1.1 2010/07/04 15:21:58 tsutsui Exp $
|
||||
.\" $OpenBSD: upgt.4,v 1.14 2010/04/29 09:20:17 jmc Exp $
|
||||
.\"
|
||||
.\" Copyright (c) 2007 Marcus Glocker <mglocker@openbsd.org>
|
||||
.\" Copyright (c) 2005-2007
|
||||
.\" Damien Bergamini <damien.bergamini@free.fr>
|
||||
.\"
|
||||
.\" Permission to use, copy, modify, and distribute this software for any
|
||||
.\" purpose with or without fee is hereby granted, provided that the above
|
||||
.\" copyright notice and this permission notice appear in all copies.
|
||||
.\"
|
||||
.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
.\"
|
||||
.\"
|
||||
.\"
|
||||
.\" Copyright (c) 2006 Theo de Raadt.
|
||||
.\" Copyright (c) 2006 The DragonFly Project. All rights reserved.
|
||||
.\"
|
||||
.\" Redistribution and use in source and binary forms, with or without
|
||||
.\" modification, are permitted provided that the following conditions
|
||||
.\" are met:
|
||||
.\"
|
||||
.\" 1. Redistributions of source code must retain the above copyright
|
||||
.\" notice, this list of conditions and the following disclaimer.
|
||||
.\" 2. 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.
|
||||
.\" 3. Neither the name of The DragonFly Project nor the names of its
|
||||
.\" contributors may be used to endorse or promote products derived
|
||||
.\" from this software without specific, prior written permission.
|
||||
.\"
|
||||
.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
.\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
.\" FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
.\" COPYRIGHT HOLDERS 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, WHETHER IN 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.
|
||||
.\"
|
||||
.Dd July 4, 2010
|
||||
.Dt UPGT 4
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm upgt
|
||||
.Nd Conexant/Intersil PrismGT SoftMAC USB IEEE 802.11b/g wireless network
|
||||
device
|
||||
.Sh SYNOPSIS
|
||||
.Cd "upgt* at uhub? port ?"
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Nm
|
||||
driver supports the USB 2.0 Conexant/Intersil PrismGT series wireless
|
||||
adapters based on the GW3887 chipset.
|
||||
.Pp
|
||||
These are the modes the
|
||||
.Nm
|
||||
driver can operate in:
|
||||
.Bl -tag -width "IBSS-masterXX"
|
||||
.It BSS mode
|
||||
Also known as
|
||||
.Em infrastructure
|
||||
mode, this is used when associating with an access point, through
|
||||
which all traffic passes.
|
||||
This mode is the default.
|
||||
.\" .It IBSS mode
|
||||
.\" Also known as
|
||||
.\" .Em IEEE ad-hoc
|
||||
.\" mode or
|
||||
.\" .Em peer-to-peer
|
||||
.\" mode.
|
||||
.\" This is the standardized method of operating without an access point.
|
||||
.\" Stations associate with a service set.
|
||||
.\" However, actual connections between stations are peer-to-peer.
|
||||
.\" .It Host AP
|
||||
.\" In this mode the driver acts as an access point (base station)
|
||||
.\" for other cards.
|
||||
.It monitor mode
|
||||
In this mode the driver is able to receive packets without
|
||||
associating with an access point.
|
||||
This disables the internal receive filter and enables the card to
|
||||
capture packets from networks which it wouldn't normally have access to,
|
||||
or to scan for access points.
|
||||
.El
|
||||
.Pp
|
||||
The
|
||||
.Nm
|
||||
driver can be configured to use
|
||||
Wired Equivalent Privacy (WEP) or
|
||||
Wi-Fi Protected Access (WPA-PSK and WPA2-PSK).
|
||||
WPA is the de facto encryption standard for wireless networks.
|
||||
It is strongly recommended that WEP
|
||||
not be used as the sole mechanism
|
||||
to secure wireless communication,
|
||||
due to serious weaknesses in it.
|
||||
The
|
||||
.Nm
|
||||
driver relies on the software 802.11 stack for both encryption and decryption
|
||||
of data frames.
|
||||
.Pp
|
||||
The
|
||||
.Nm
|
||||
driver can be configured at runtime with
|
||||
.Xr ifconfig 8
|
||||
or on boot with
|
||||
.Xr ifconfig.if 5 .
|
||||
.Sh FILES
|
||||
The driver needs a firmware file which is loaded when an interface is
|
||||
brought up:
|
||||
.Pp
|
||||
.Bl -tag -width Ds -offset indent -compact
|
||||
.It Pa /libdata/firmware/upgt/upgt-gw3887
|
||||
.El
|
||||
.Pp
|
||||
Currently these firmware files can not be included in
|
||||
.Nx
|
||||
base system.
|
||||
Please download these files and put them into
|
||||
the above firwmware directory.
|
||||
.Pp
|
||||
A tar archive file that includes
|
||||
.Pa upgt-gw3887
|
||||
firmware can be found at:
|
||||
.Pp
|
||||
.Bd -literal -offset 3n
|
||||
http://www.nazgul.ch/upgt/upgt-firmware-1.1.tar.gz
|
||||
.Ed
|
||||
.Sh HARDWARE
|
||||
The following adapters should work:
|
||||
.Pp
|
||||
.Bl -tag -width Ds -offset indent -compact
|
||||
.It Belkin F5D7050 (version 1000)
|
||||
.It Cohiba Proto Board
|
||||
.It D-Link DWL-G120 Cohiba
|
||||
.It D-Link DWL-G122 rev A2
|
||||
.It FSC Connect2Air E-5400 USB D1700
|
||||
.It Gigaset USB Adapter 54
|
||||
.It Inventel UR045G
|
||||
.It IOGear GWU513
|
||||
.It Linksys WUSB54AG
|
||||
.It Linksys WUSB54G ver 2
|
||||
.It Medion MD40900
|
||||
.It Philips CPWUA054
|
||||
.It SMC EZ ConnectG SMC2862W-G
|
||||
.It Sagem XG703A
|
||||
.It Spinnaker DUT
|
||||
.It Spinnaker Proto Board
|
||||
.It Thomson SpeedTouch 121g
|
||||
.It Willcom / Sharp WS003SH/WS004SH smart phone internal wireless LAN
|
||||
.El
|
||||
.Sh EXAMPLES
|
||||
The following
|
||||
.Xr hostname.if 5
|
||||
example configures upgt0 to join whatever network is available on boot,
|
||||
using WEP key
|
||||
.Dq 0x1deadbeef1 ,
|
||||
channel 11, obtaining an IP address using
|
||||
.Xr dhcpcd 8 :
|
||||
.Bd -literal -offset indent
|
||||
ssid 'my network' nwkey 0x1deadbeef1 chan 11
|
||||
dhcp
|
||||
.Ed
|
||||
.\".Pp
|
||||
.\"The following
|
||||
.\".Xr ifconfig.if 5
|
||||
.\"example creates a host-based access point on boot:
|
||||
.\".Bd -literal -offset indent
|
||||
.\"inet 192.168.1.1 255.255.255.0 NONE media autoselect \e
|
||||
.\" mediaopt hostap nwid my_net chan 11
|
||||
.Ed
|
||||
.\".Pp
|
||||
.\"Configure upgt0 to join network
|
||||
.\".Dq my_net
|
||||
.\"using WPA-PSK with passphrase
|
||||
.\".Dq my_passphrase :
|
||||
.\".Bd -literal -offset indent
|
||||
.\"# ifconfig upgt0 nwid my_net wpa wpapsk \e
|
||||
.\" `wpa-psk my_net my_passphrase`
|
||||
.\".Ed
|
||||
.\".Pp
|
||||
.\"Return upgt0 to its default settings:
|
||||
.\".Bd -literal -offset indent
|
||||
.\"# ifconfig upgt0 -bssid -chan media autoselect \e
|
||||
.\" nwid "" -nwkey -wpa -wpapsk
|
||||
.\".Ed
|
||||
.Pp
|
||||
Join an existing BSS network,
|
||||
.Dq my_net :
|
||||
.Bd -literal -offset indent
|
||||
# ifconfig upgt0 192.168.1.1 netmask 0xffffff00 nwid my_net
|
||||
.Ed
|
||||
.Sh SEE ALSO
|
||||
.Xr arp 4 ,
|
||||
.Xr ifmedia 4 ,
|
||||
.Xr intro 4 ,
|
||||
.Xr netintro 4 ,
|
||||
.Xr usb 4 ,
|
||||
.Xr ifconfig.if 5 ,
|
||||
.\".Xr hostapd 8 ,
|
||||
.Xr ifconfig 8
|
||||
.\".Xr wpa-psk 8
|
||||
.Sh HISTORY
|
||||
The
|
||||
.Nm
|
||||
driver first appeared in
|
||||
.Ox 4.3 .
|
||||
It was ported to
|
||||
.Nx
|
||||
by FUKAUMI Naoki and first appeared in
|
||||
.Nx 6.0 .
|
||||
.Sh AUTHORS
|
||||
.An -nosplit
|
||||
The
|
||||
.Nm
|
||||
driver was written by
|
||||
.An Marcus Glocker Aq mglocker@openbsd.org .
|
||||
.Pp
|
||||
The hardware specification was reverse engineered by the people at
|
||||
.Li http://www.prism54.org/ .
|
||||
.Sh BUGS
|
||||
The
|
||||
.Nm
|
||||
driver just supports the USB 2.0 devices (GW3887 chipset) but not the
|
||||
USB 1.0 devices containing the NET2280, ISL3880, and ISL3886 chipsets.
|
||||
Some further efforts would be necessary to add USB 1.0 support to the
|
||||
driver.
|
|
@ -1,4 +1,4 @@
|
|||
# $NetBSD: files.usb,v 1.99 2010/05/29 17:39:41 martin Exp $
|
||||
# $NetBSD: files.usb,v 1.100 2010/07/04 15:21:58 tsutsui Exp $
|
||||
#
|
||||
# Config file and device description for machine-independent USB code.
|
||||
# Included by ports that need it. Ports that use it must provide
|
||||
|
@ -320,6 +320,11 @@ device atu: ether, ifnet, arp, wlan
|
|||
attach atu at usbdevif
|
||||
file dev/usb/if_atu.c atu
|
||||
|
||||
# Intersil PrismGT
|
||||
device upgt: ether, ifnet, arp, wlan, firmload
|
||||
attach upgt at usbdevif
|
||||
file dev/usb/if_upgt.c upgt
|
||||
|
||||
# Ralink Technology RT2500USB
|
||||
attach ral at usbdevif with ural
|
||||
file dev/usb/if_ural.c ural
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,464 @@
|
|||
/* $NetBSD: if_upgtvar.h,v 1.1 2010/07/04 15:21:58 tsutsui Exp $ */
|
||||
/* $OpenBSD: if_upgtvar.h,v 1.15 2009/08/10 20:02:19 deraadt Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2007 Marcus Glocker <mglocker@openbsd.org>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
struct upgt_softc;
|
||||
|
||||
/*
|
||||
* Radio tap.
|
||||
*/
|
||||
struct upgt_rx_radiotap_header {
|
||||
struct ieee80211_radiotap_header wr_ihdr;
|
||||
uint8_t wr_flags;
|
||||
uint8_t wr_rate;
|
||||
uint16_t wr_chan_freq;
|
||||
uint16_t wr_chan_flags;
|
||||
uint8_t wr_antsignal;
|
||||
} __packed;
|
||||
|
||||
#define UPGT_RX_RADIOTAP_PRESENT \
|
||||
((1 << IEEE80211_RADIOTAP_FLAGS) | \
|
||||
(1 << IEEE80211_RADIOTAP_RATE) | \
|
||||
(1 << IEEE80211_RADIOTAP_CHANNEL) | \
|
||||
(1 << IEEE80211_RADIOTAP_DB_ANTSIGNAL))
|
||||
|
||||
struct upgt_tx_radiotap_header {
|
||||
struct ieee80211_radiotap_header wt_ihdr;
|
||||
uint8_t wt_flags;
|
||||
uint8_t wt_rate;
|
||||
uint16_t wt_chan_freq;
|
||||
uint16_t wt_chan_flags;
|
||||
} __packed;
|
||||
|
||||
#define UPGT_TX_RADIOTAP_PRESENT \
|
||||
((1 << IEEE80211_RADIOTAP_FLAGS) | \
|
||||
(1 << IEEE80211_RADIOTAP_RATE) | \
|
||||
(1 << IEEE80211_RADIOTAP_CHANNEL))
|
||||
|
||||
/*
|
||||
* General values.
|
||||
*/
|
||||
#define UPGT_IFACE_INDEX 0
|
||||
#define UPGT_CONFIG_NO 1
|
||||
#define UPGT_USB_TIMEOUT 1000
|
||||
#define UPGT_FIRMWARE_TIMEOUT 10
|
||||
|
||||
#define UPGT_MEMADDR_FIRMWARE_START 0x00020000 /* 512 bytes large */
|
||||
#define UPGT_MEMSIZE_FRAME_HEAD 0x0070
|
||||
#define UPGT_MEMSIZE_RX 0x3500
|
||||
|
||||
#define UPGT_TX_COUNT 6
|
||||
|
||||
/* device flags */
|
||||
#define UPGT_DEVICE_ATTACHED (1 << 0)
|
||||
|
||||
/* leds */
|
||||
#define UPGT_LED_OFF 0
|
||||
#define UPGT_LED_ON 1
|
||||
#define UPGT_LED_BLINK 2
|
||||
|
||||
/*
|
||||
* USB xfers.
|
||||
*/
|
||||
struct upgt_data {
|
||||
struct upgt_softc *sc;
|
||||
usbd_xfer_handle xfer;
|
||||
uint8_t *buf;
|
||||
struct ieee80211_node *ni;
|
||||
struct mbuf *m;
|
||||
uint32_t addr;
|
||||
};
|
||||
|
||||
/*
|
||||
* Firmware.
|
||||
*/
|
||||
#define UPGT_FW_BLOCK_SIZE 512
|
||||
|
||||
#define UPGT_BRA_FWTYPE_SIZE 4
|
||||
#define UPGT_BRA_FWTYPE_LM86 "LM86"
|
||||
#define UPGT_BRA_FWTYPE_LM87 "LM87"
|
||||
#define UPGT_BRA_FWTYPE_FMAC "FMAC"
|
||||
enum upgt_fw_type {
|
||||
UPGT_FWTYPE_LM86,
|
||||
UPGT_FWTYPE_LM87,
|
||||
UPGT_FWTYPE_FMAC
|
||||
};
|
||||
|
||||
#define UPGT_BRA_TYPE_FW 0x80000001
|
||||
#define UPGT_BRA_TYPE_VERSION 0x80000002
|
||||
#define UPGT_BRA_TYPE_DEPIF 0x80000003
|
||||
#define UPGT_BRA_TYPE_EXPIF 0x80000004
|
||||
#define UPGT_BRA_TYPE_DESCR 0x80000101
|
||||
#define UPGT_BRA_TYPE_END 0xff0000ff
|
||||
struct upgt_fw_bra_option {
|
||||
uint32_t type;
|
||||
uint32_t len;
|
||||
uint8_t data[];
|
||||
} __packed;
|
||||
|
||||
struct upgt_fw_bra_descr {
|
||||
uint32_t unknown1;
|
||||
uint32_t memaddr_space_start;
|
||||
uint32_t memaddr_space_end;
|
||||
uint32_t unknown2;
|
||||
uint32_t unknown3;
|
||||
uint8_t rates[20];
|
||||
} __packed;
|
||||
|
||||
#define UPGT_X2_SIGNATURE_SIZE 4
|
||||
#define UPGT_X2_SIGNATURE "x2 "
|
||||
struct upgt_fw_x2_header {
|
||||
uint8_t signature[4];
|
||||
uint32_t startaddr;
|
||||
uint32_t len;
|
||||
uint32_t crc;
|
||||
} __packed;
|
||||
|
||||
/*
|
||||
* EEPROM.
|
||||
*/
|
||||
#define UPGT_EEPROM_SIZE 8192
|
||||
#define UPGT_EEPROM_BLOCK_SIZE 1020
|
||||
|
||||
struct upgt_eeprom_header {
|
||||
/* 14 bytes */
|
||||
uint32_t magic;
|
||||
uint16_t pad1;
|
||||
uint16_t preamble_len;
|
||||
uint32_t pad2;
|
||||
/* data */
|
||||
} __packed;
|
||||
|
||||
#define UPGT_EEPROM_TYPE_END 0x0000
|
||||
#define UPGT_EEPROM_TYPE_NAME 0x0001
|
||||
#define UPGT_EEPROM_TYPE_SERIAL 0x0003
|
||||
#define UPGT_EEPROM_TYPE_MAC 0x0101
|
||||
#define UPGT_EEPROM_TYPE_HWRX 0x1001
|
||||
#define UPGT_EEPROM_TYPE_CHIP 0x1002
|
||||
#define UPGT_EEPROM_TYPE_FREQ3 0x1903
|
||||
#define UPGT_EEPROM_TYPE_FREQ4 0x1904
|
||||
#define UPGT_EEPROM_TYPE_FREQ5 0x1905
|
||||
#define UPGT_EEPROM_TYPE_FREQ6 0x1906
|
||||
#define UPGT_EEPROM_TYPE_OFF 0xffff
|
||||
struct upgt_eeprom_option {
|
||||
uint16_t len;
|
||||
uint16_t type;
|
||||
uint8_t data[];
|
||||
/* data */
|
||||
} __packed;
|
||||
|
||||
#define UPGT_EEPROM_RX_CONST 0x88
|
||||
struct upgt_eeprom_option_hwrx {
|
||||
uint32_t pad1;
|
||||
uint8_t rxfilter;
|
||||
uint8_t pad2[15];
|
||||
} __packed;
|
||||
|
||||
struct upgt_eeprom_freq3_header {
|
||||
uint8_t flags;
|
||||
uint8_t elements;
|
||||
} __packed;
|
||||
|
||||
struct upgt_eeprom_freq4_header {
|
||||
uint8_t flags;
|
||||
uint8_t elements;
|
||||
uint8_t settings;
|
||||
uint8_t type;
|
||||
} __packed;
|
||||
|
||||
struct upgt_eeprom_freq4_1 {
|
||||
uint16_t freq;
|
||||
uint8_t data[50];
|
||||
} __packed;
|
||||
|
||||
struct upgt_eeprom_freq4_2 {
|
||||
uint16_t head;
|
||||
uint8_t subtails[4];
|
||||
uint8_t tail;
|
||||
} __packed;
|
||||
|
||||
/*
|
||||
* LMAC protocol.
|
||||
*/
|
||||
struct upgt_lmac_mem {
|
||||
uint32_t addr;
|
||||
uint32_t chksum;
|
||||
} __packed;
|
||||
|
||||
#define UPGT_H1_FLAGS_TX_MGMT 0x00 /* for TX: mgmt frame */
|
||||
#define UPGT_H1_FLAGS_TX_NO_CALLBACK 0x01 /* for TX: no USB callback */
|
||||
#define UPGT_H1_FLAGS_TX_DATA 0x10 /* for TX: data frame */
|
||||
#define UPGT_H1_TYPE_RX_DATA 0x00 /* 802.11 RX data frame */
|
||||
#define UPGT_H1_TYPE_RX_DATA_MGMT 0x04 /* 802.11 RX mgmt frame */
|
||||
#define UPGT_H1_TYPE_TX_DATA 0x40 /* 802.11 TX data frame */
|
||||
#define UPGT_H1_TYPE_CTRL 0x80 /* control frame */
|
||||
struct upgt_lmac_h1 {
|
||||
/* 4 bytes */
|
||||
uint8_t flags;
|
||||
uint8_t type;
|
||||
uint16_t len;
|
||||
} __packed;
|
||||
|
||||
#define UPGT_H2_TYPE_TX_ACK_NO 0x0000
|
||||
#define UPGT_H2_TYPE_TX_ACK_YES 0x0001
|
||||
#define UPGT_H2_TYPE_MACFILTER 0x0000
|
||||
#define UPGT_H2_TYPE_CHANNEL 0x0001
|
||||
#define UPGT_H2_TYPE_TX_DONE 0x0008
|
||||
#define UPGT_H2_TYPE_STATS 0x000a
|
||||
#define UPGT_H2_TYPE_EEPROM 0x000c
|
||||
#define UPGT_H2_TYPE_LED 0x000d
|
||||
#define UPGT_H2_FLAGS_TX_ACK_NO 0x0101
|
||||
#define UPGT_H2_FLAGS_TX_ACK_YES 0x0707
|
||||
struct upgt_lmac_h2 {
|
||||
/* 8 bytes */
|
||||
uint32_t reqid;
|
||||
uint16_t type;
|
||||
uint16_t flags;
|
||||
} __packed;
|
||||
|
||||
struct upgt_lmac_header {
|
||||
/* 12 bytes */
|
||||
struct upgt_lmac_h1 header1;
|
||||
struct upgt_lmac_h2 header2;
|
||||
} __packed;
|
||||
|
||||
struct upgt_lmac_eeprom {
|
||||
/* 16 bytes */
|
||||
struct upgt_lmac_h1 header1;
|
||||
struct upgt_lmac_h2 header2;
|
||||
uint16_t offset;
|
||||
uint16_t len;
|
||||
/* data */
|
||||
} __packed;
|
||||
|
||||
#define UPGT_FILTER_TYPE_NONE 0x0000
|
||||
#define UPGT_FILTER_TYPE_STA 0x0001
|
||||
#define UPGT_FILTER_TYPE_IBSS 0x0002
|
||||
#define UPGT_FILTER_TYPE_HOSTAP 0x0004
|
||||
#define UPGT_FILTER_TYPE_MONITOR 0x0010
|
||||
#define UPGT_FILTER_TYPE_RESET 0x0020
|
||||
#define UPGT_FILTER_UNKNOWN1 0x0002
|
||||
#define UPGT_FILTER_UNKNOWN2 0x0ca8
|
||||
#define UPGT_FILTER_UNKNOWN3 0xffff
|
||||
struct upgt_lmac_filter {
|
||||
struct upgt_lmac_h1 header1;
|
||||
struct upgt_lmac_h2 header2;
|
||||
/* 32 bytes */
|
||||
uint16_t type;
|
||||
uint8_t dst[IEEE80211_ADDR_LEN];
|
||||
uint8_t src[IEEE80211_ADDR_LEN];
|
||||
uint16_t unknown1;
|
||||
uint32_t rxaddr;
|
||||
uint16_t unknown2;
|
||||
uint32_t rxhw;
|
||||
uint16_t unknown3;
|
||||
uint32_t unknown4;
|
||||
} __packed;
|
||||
|
||||
/* frequence 3 data */
|
||||
struct upgt_lmac_freq3 {
|
||||
uint16_t freq;
|
||||
uint8_t data[6];
|
||||
} __packed;
|
||||
|
||||
/* frequence 4 data */
|
||||
struct upgt_lmac_freq4 {
|
||||
struct upgt_eeprom_freq4_2 cmd;
|
||||
uint8_t pad;
|
||||
};
|
||||
|
||||
/* frequence 6 data */
|
||||
struct upgt_lmac_freq6 {
|
||||
uint16_t freq;
|
||||
uint8_t data[8];
|
||||
} __packed;
|
||||
|
||||
#define UPGT_CHANNEL_UNKNOWN1 0x0001
|
||||
#define UPGT_CHANNEL_UNKNOWN2 0x0000
|
||||
#define UPGT_CHANNEL_UNKNOWN3 0x48
|
||||
struct upgt_lmac_channel {
|
||||
struct upgt_lmac_h1 header1;
|
||||
struct upgt_lmac_h2 header2;
|
||||
/* 112 bytes */
|
||||
uint16_t unknown1;
|
||||
uint16_t unknown2;
|
||||
uint8_t pad1[20];
|
||||
struct upgt_lmac_freq6 freq6;
|
||||
uint8_t settings;
|
||||
uint8_t unknown3;
|
||||
uint8_t freq3_1[4];
|
||||
struct upgt_lmac_freq4 freq4[8];
|
||||
uint8_t freq3_2[4];
|
||||
uint32_t pad2;
|
||||
} __packed;
|
||||
|
||||
#define UPGT_LED_MODE_SET 0x0003
|
||||
#define UPGT_LED_ACTION_OFF 0x0002
|
||||
#define UPGT_LED_ACTION_ON 0x0003
|
||||
#define UPGT_LED_ACTION_TMP_DUR 100 /* ms */
|
||||
struct upgt_lmac_led {
|
||||
struct upgt_lmac_h1 header1;
|
||||
struct upgt_lmac_h2 header2;
|
||||
uint16_t mode;
|
||||
uint16_t action_fix;
|
||||
uint16_t action_tmp;
|
||||
uint16_t action_tmp_dur;
|
||||
} __packed;
|
||||
|
||||
struct upgt_lmac_stats {
|
||||
struct upgt_lmac_h1 header1;
|
||||
struct upgt_lmac_h2 header2;
|
||||
uint8_t data[76];
|
||||
} __packed;
|
||||
|
||||
struct upgt_lmac_rx_desc {
|
||||
struct upgt_lmac_h1 header1;
|
||||
/* 16 bytes */
|
||||
uint16_t freq;
|
||||
uint8_t unknown1;
|
||||
uint8_t rate;
|
||||
uint8_t rssi;
|
||||
uint8_t pad;
|
||||
uint16_t unknown2;
|
||||
uint32_t timestamp;
|
||||
uint32_t unknown3;
|
||||
uint8_t data[];
|
||||
} __packed;
|
||||
|
||||
#define UPGT_TX_DESC_KEY_EXISTS 0x01
|
||||
struct upgt_lmac_tx_desc_wep {
|
||||
uint8_t key_exists;
|
||||
uint8_t key_len;
|
||||
uint8_t key_val[16];
|
||||
} __packed;
|
||||
|
||||
#define UPGT_TX_DESC_TYPE_BEACON 0x00000000
|
||||
#define UPGT_TX_DESC_TYPE_PROBE 0x00000001
|
||||
#define UPGT_TX_DESC_TYPE_MGMT 0x00000002
|
||||
#define UPGT_TX_DESC_TYPE_DATA 0x00000004
|
||||
#define UPGT_TX_DESC_PAD3_SIZE 2
|
||||
struct upgt_lmac_tx_desc {
|
||||
struct upgt_lmac_h1 header1;
|
||||
struct upgt_lmac_h2 header2;
|
||||
uint8_t rates[8];
|
||||
uint16_t pad1;
|
||||
struct upgt_lmac_tx_desc_wep wep_key;
|
||||
uint32_t type;
|
||||
uint32_t pad2;
|
||||
uint32_t unknown1;
|
||||
uint32_t unknown2;
|
||||
uint8_t pad3[2];
|
||||
/* 802.11 frame data */
|
||||
} __packed;
|
||||
|
||||
#define UPGT_TX_DONE_DESC_STATUS_OK 0x0001
|
||||
struct upgt_lmac_tx_done_desc {
|
||||
struct upgt_lmac_h1 header1;
|
||||
struct upgt_lmac_h2 header2;
|
||||
uint16_t status;
|
||||
uint16_t rssi;
|
||||
uint16_t seq;
|
||||
uint16_t unknown;
|
||||
} __packed;
|
||||
|
||||
/*
|
||||
* Prism memory.
|
||||
*/
|
||||
struct upgt_memory_page {
|
||||
uint8_t used;
|
||||
uint32_t addr;
|
||||
} __packed;
|
||||
|
||||
#define UPGT_MEMORY_MAX_PAGES 8
|
||||
struct upgt_memory {
|
||||
uint8_t pages;
|
||||
struct upgt_memory_page page[UPGT_MEMORY_MAX_PAGES];
|
||||
} __packed;
|
||||
|
||||
/*
|
||||
* Softc.
|
||||
*/
|
||||
struct upgt_softc {
|
||||
device_t sc_dev;
|
||||
struct ethercom sc_ec;
|
||||
#define sc_if sc_ec.ec_if
|
||||
|
||||
usbd_device_handle sc_udev;
|
||||
usbd_interface_handle sc_iface;
|
||||
int sc_rx_no;
|
||||
int sc_tx_no;
|
||||
struct usb_task sc_task_newstate;
|
||||
struct usb_task sc_task_tx;
|
||||
usbd_pipe_handle sc_rx_pipeh;
|
||||
usbd_pipe_handle sc_tx_pipeh;
|
||||
|
||||
struct upgt_data tx_data[UPGT_TX_COUNT];
|
||||
struct upgt_data rx_data;
|
||||
struct upgt_data cmd_data;
|
||||
int tx_queued;
|
||||
kmutex_t sc_mtx;
|
||||
|
||||
uint8_t sc_device_type;
|
||||
struct ieee80211com sc_ic;
|
||||
enum ieee80211_state sc_state;
|
||||
int sc_arg;
|
||||
int (*sc_newstate)(struct ieee80211com *,
|
||||
enum ieee80211_state, int);
|
||||
callout_t scan_to;
|
||||
callout_t led_to;
|
||||
int sc_led_blink;
|
||||
uint8_t sc_cur_rateset[8];
|
||||
|
||||
int sc_flags;
|
||||
uint8_t *sc_fw;
|
||||
size_t sc_fw_size;
|
||||
int sc_fw_type;
|
||||
|
||||
/* memory addresses on device */
|
||||
uint32_t sc_memaddr_frame_start;
|
||||
uint32_t sc_memaddr_frame_end;
|
||||
uint32_t sc_memaddr_rx_start;
|
||||
struct upgt_memory sc_memory;
|
||||
|
||||
/* data which we found in the EEPROM */
|
||||
uint8_t sc_eeprom[UPGT_EEPROM_SIZE];
|
||||
uint16_t sc_eeprom_hwrx;
|
||||
struct upgt_lmac_freq3 sc_eeprom_freq3[IEEE80211_CHAN_MAX];
|
||||
struct upgt_lmac_freq4 sc_eeprom_freq4[IEEE80211_CHAN_MAX][8];
|
||||
struct upgt_lmac_freq6 sc_eeprom_freq6[IEEE80211_CHAN_MAX];
|
||||
uint8_t sc_eeprom_freq6_settings;
|
||||
|
||||
/* radio tap */
|
||||
struct bpf_if *sc_drvbpf;
|
||||
|
||||
/* RX */
|
||||
union {
|
||||
struct upgt_rx_radiotap_header th;
|
||||
uint8_t pad[64];
|
||||
} sc_rxtapu;
|
||||
#define sc_rxtap sc_rxtapu.th
|
||||
int sc_rxtap_len;
|
||||
|
||||
/* TX */
|
||||
union {
|
||||
struct upgt_tx_radiotap_header th;
|
||||
uint8_t pad[64];
|
||||
} sc_txtapu;
|
||||
#define sc_txtap sc_txtapu.th
|
||||
int sc_txtap_len;
|
||||
};
|
Loading…
Reference in New Issue