summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ObsoleteFiles.inc6
-rw-r--r--share/man/man4/man4.i386/Makefile1
-rw-r--r--share/man/man4/man4.i386/arl.4115
-rw-r--r--sys/conf/files.i3862
-rw-r--r--sys/dev/arl/if_arl.c1307
-rw-r--r--sys/dev/arl/if_arl_isa.c344
-rw-r--r--sys/dev/arl/if_arlreg.h344
-rw-r--r--sys/i386/conf/NOTES5
-rw-r--r--sys/modules/Makefile2
-rw-r--r--sys/modules/arl/Makefile16
-rw-r--r--usr.sbin/Makefile2
-rw-r--r--usr.sbin/arlcontrol/Makefile10
-rw-r--r--usr.sbin/arlcontrol/arlcontrol.8166
-rw-r--r--usr.sbin/arlcontrol/arlcontrol.c430
14 files changed, 6 insertions, 2744 deletions
diff --git a/ObsoleteFiles.inc b/ObsoleteFiles.inc
index 8def4ea..c0a4dca 100644
--- a/ObsoleteFiles.inc
+++ b/ObsoleteFiles.inc
@@ -14,6 +14,12 @@
# The file is partitioned: OLD_FILES first, then OLD_LIBS and OLD_DIRS last.
#
+# 20080704: arl(4) removed
+.if ${TARGET_ARCH} == "i386"
+OLD_FILES+=usr/sbin/arlcontrol
+OLD_FILES+=usr/share/man/man4/arl.4.gz
+OLD_FILES+=usr/share/man/man8/arlcontrol.8.gz
+.endif
# 20080703: sunlabel only for sparc64
.if ${TARGET_ARCH} != "sparc64"
OLD_FILES+=sbin/sunlabel
diff --git a/share/man/man4/man4.i386/Makefile b/share/man/man4/man4.i386/Makefile
index bdd3bc3..bd25d63 100644
--- a/share/man/man4/man4.i386/Makefile
+++ b/share/man/man4/man4.i386/Makefile
@@ -12,7 +12,6 @@ MAN= acpi_aiboost.4 \
amdpm.4 \
apm.4 \
ar.4 \
- arl.4 \
ce.4 \
cp.4 \
CPU_ELAN.4 \
diff --git a/share/man/man4/man4.i386/arl.4 b/share/man/man4/man4.i386/arl.4
deleted file mode 100644
index d908c8a..0000000
--- a/share/man/man4/man4.i386/arl.4
+++ /dev/null
@@ -1,115 +0,0 @@
-.\" Copyright (c) 2004
-.\" Ivan Sharov <ivan.sharov@iname.com>. 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. All advertising materials mentioning features or use of this software
-.\" must display the following acknowledgement:
-.\" This product includes software developed by Ivan Sharov.
-.\" 4. Neither the name of the author nor the names of any co-contributors
-.\" may be used to endorse or promote products derived from this software
-.\" without specific prior written permission.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY Ivan Sharov 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 Ivan Sharov OR THE VOICES IN HIS HEAD
-.\" 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.
-.\"
-.\" $FreeBSD$
-.\"
-.Dd July 16, 2005
-.Dt ARL 4 i386
-.Os
-.Sh NAME
-.Nm arl
-.Nd "Aironet Arlan 655 wireless network adapter driver"
-.Sh SYNOPSIS
-To compile this driver into the kernel,
-place the following line in your
-kernel configuration file:
-.Bd -ragged -offset indent
-.Cd "device arl"
-.Ed
-.Pp
-Alternatively, to load the driver as a
-module at boot time, place the following line in
-.Xr loader.conf 5 :
-.Bd -literal -offset indent
-if_arl_load="YES"
-.Ed
-.Sh DESCRIPTION
-The
-.Nm
-driver provides support for Aironet Arlan 655
-wireless network adapters.
-The Arlan 655 series adapters operate at 354kbps, 512kbps, 1Mbps and 2Mbps.
-.Pp
-The Aironet Arlan 655 devices support Aironet TMA, Aironet Non-TMA
-and PSP operating modes.
-.Pp
-By default, the
-.Nm
-driver configures the Aironet Arlan 655 card for TMA operation.
-.Pp
-To set up Radio Network parameters, use
-.Xr arlcontrol 8 .
-.Sh SEE ALSO
-.Xr arp 4 ,
-.Xr netintro 4 ,
-.Xr arlcontrol 8 ,
-.Xr ifconfig 8
-.Sh LIMITATIONS
-When using
-.Xr ifconfig 8
-for setting
-.Va SSID
-you must use a 4-byte even hexadecimal digit value and it must start with
-00 or 02.
-.Pp
-You can change
-.Va channel
-for current
-.Va country
-only through
-.Xr ifconfig 8 .
-You must use
-.Xr arlcontrol 8
-for changing
-.Va country .
-.Pp
-Cannot change link-level address.
-.Sh HISTORY
-The
-.Nm
-device driver first appeared in
-.Fx 5.3 .
-.Sh AUTHORS
-.An -nosplit
-The
-.Nm
-driver was initially written by
-.An Ivan Sharov Aq ivan.sharov@iname.com .
-.Aq ran@styx.aic.net
-wrote the
-.Xr arlcontrol 8
-utility and added
-.Xr ioctl 2
-support to the driver.
-.An Stanislav Svirid Aq count@riss-telecom.ru
-ported this driver to the new ISA architecture, merged some al driver changes,
-fixed some bugs and made it a module.
-.An Yuri Kurenkov Aq y.kurenkov@init.ru
-wrote this manpage.
diff --git a/sys/conf/files.i386 b/sys/conf/files.i386
index e1349a5..3a1be06 100644
--- a/sys/conf/files.i386
+++ b/sys/conf/files.i386
@@ -153,8 +153,6 @@ dev/arcmsr/arcmsr.c optional arcmsr pci
dev/ar/if_ar.c optional ar
dev/ar/if_ar_isa.c optional ar isa
dev/ar/if_ar_pci.c optional ar pci
-dev/arl/if_arl.c optional arl
-dev/arl/if_arl_isa.c optional arl isa
dev/asmc/asmc.c optional asmc isa
dev/atkbdc/atkbd.c optional atkbd atkbdc
dev/atkbdc/atkbd_atkbdc.c optional atkbd atkbdc
diff --git a/sys/dev/arl/if_arl.c b/sys/dev/arl/if_arl.c
deleted file mode 100644
index 6ebf3bf..0000000
--- a/sys/dev/arl/if_arl.c
+++ /dev/null
@@ -1,1307 +0,0 @@
-/*-
- * Copyright (c) 1999-2001, Ivan Sharov, Vitaly Belekhov.
- * Copyright (c) 2004 Stanislav Svirid.
- * 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.
- *
- * THIS SOFTWARE IS PROVIDED BY AUTHOR 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 AUTHOR 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.
- *
- * $RISS: if_arl/dev/arl/if_arl.c,v 1.7 2004/03/16 04:43:27 count Exp $
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include "opt_inet.h"
-
-#ifdef INET
-#define ARLCACHE
-#endif
-
-#include <sys/param.h>
-#include <sys/kernel.h>
-#include <sys/systm.h>
-#include <sys/malloc.h>
-#include <sys/mbuf.h>
-#include <sys/socket.h>
-#include <sys/sockio.h>
-#include <sys/priv.h>
-#include <sys/proc.h>
-#include <sys/conf.h>
-
-#include <sys/module.h>
-#include <sys/bus.h>
-
-#include <machine/bus.h>
-#include <machine/resource.h>
-#include <sys/rman.h>
-
-#include <net/if.h>
-#include <net/if_dl.h>
-#include <net/if_media.h>
-#include <net/if_types.h>
-#include <net/ethernet.h>
-
-#include <net80211/ieee80211_var.h>
-
-#ifdef INET
-#include <netinet/in.h>
-#include <netinet/in_systm.h>
-#include <netinet/in_var.h>
-#include <netinet/ip.h>
-#endif
-
-#include <net/bpf.h>
-
-
-#include <dev/arl/if_arlreg.h>
-
-/*#define DEBUG */
-#ifdef DEBUG
-#define D(x) {device_printf(sc->arl_dev, "%s", ""); printf x; }
-#else
-#define D(x)
-#endif
-
-/*
- * channel attention
- */
-#define ARL_CHANNEL(sc) \
- { \
- D(("channel ctrl %x reg %x\n", sc->arl_control, ar->controlRegister)); \
- ar->controlRegister = (sc->arl_control ^= ARL_CHANNEL_ATTENTION); \
- }
-
-/*
- * Check registration
- */
-#define ARL_CHECKREG(sc) (ar->registrationMode && ar->registrationStatus == 0)
-
-#define GET_ARL_PARAM(name) (arcfg.name = ar->name)
-#define SET_ARL_PARAM(name) (ar->name = arcfg.name)
-
-#define BROADCASTADDR (sc->arl_ifp->if_broadcastaddr)
-#define _ARL_CURPROC (curthread)
-
-static void arl_hwreset (struct arl_softc *);
-static void arl_reset (struct arl_softc *);
-static int arl_ioctl (struct ifnet *, u_long, caddr_t);
-static void arl_init (void *);
-static void arl_init_locked (struct arl_softc *);
-static void arl_start (struct ifnet *);
-static void arl_start_locked(struct ifnet *);
-
-static void arl_watchdog (void *);
-static void arl_waitreg (void *);
-
-static void arl_enable (struct arl_softc *);
-static void arl_config (struct arl_softc *);
-static int arl_command (struct arl_softc *);
-static void arl_put (struct arl_softc *);
-
-static void arl_read (struct arl_softc *, caddr_t, int);
-static void arl_recv (struct arl_softc *);
-static struct mbuf* arl_get (caddr_t, int, int, struct ifnet *);
-
-#ifdef ARLCACHE
-static void arl_cache_store (struct arl_softc *, struct ether_header *,
- u_int8_t, u_int8_t, int);
-#endif
-
-static int arl_media_change (struct ifnet *);
-static void arl_media_status (struct ifnet *, struct ifmediareq *);
-static void arl_read_config (struct arl_softc *);
-
-devclass_t arl_devclass;
-
-u_int8_t rate2media[4] = {
- IFM_IEEE80211_DS354k,
- IFM_IEEE80211_DS512k,
- IFM_IEEE80211_DS1,
- IFM_IEEE80211_DS2
-};
-
-/*
- * Copy config values to local cache
- */
-static void
-arl_read_config(sc)
- struct arl_softc *sc;
-{
- bzero(&arcfg, sizeof(arcfg));
-
- bcopy(ar->lanCardNodeId, arcfg.lanCardNodeId,
- sizeof(ar->lanCardNodeId));
- bcopy(ar->specifiedRouter, arcfg.specifiedRouter,
- sizeof(ar->specifiedRouter));
- GET_ARL_PARAM(hardwareType);
- GET_ARL_PARAM(majorHardwareVersion);
- GET_ARL_PARAM(minorHardwareVersion);
- GET_ARL_PARAM(radioModule);
- GET_ARL_PARAM(channelSet);
- if (!arcfg.channelSet)
- arcfg.channelSet = ar->defaultChannelSet;
- GET_ARL_PARAM(channelNumber);
- GET_ARL_PARAM(spreadingCode);
- GET_ARL_PARAM(priority);
- GET_ARL_PARAM(receiveMode);
- arcfg.registrationMode = 1; /* set default TMA mode */
- arcfg.txRetry = 0;
-
- bcopy(ar->name, arcfg.name, ARLAN_NAME_SIZE);
- bcopy(ar->systemId, arcfg.sid, 4 * sizeof(arcfg.sid[0]));
-}
-
-/*
- * Attach device
- */
-int
-arl_attach(dev)
- device_t dev;
-{
- struct arl_softc* sc = device_get_softc(dev);
- struct ifnet *ifp;
- int configured = 0, error;
-
- D(("attach\n"));
-
- ifp = sc->arl_ifp = if_alloc(IFT_ETHER);
- if (ifp == NULL)
- return (ENOSPC);
-
- mtx_init(&sc->arl_lock, device_get_nameunit(dev), MTX_NETWORK_LOCK,
- MTX_DEF);
- callout_init_mtx(&sc->arl_timer, &sc->arl_lock, 0);
- ARL_LOCK(sc);
- configured = ar->configuredStatusFlag;
-
- if (!configured && bootverbose)
- device_printf(dev, "card is not configured\n");
- else
- arl_read_config(sc);
-
- arl_reset(sc);
-
- /* Read config for default values if card was not configured */
- if (!configured)
- arl_read_config(sc);
- ARL_UNLOCK(sc);
-
- /* Initialize ifnet structure. */
- ifp->if_softc = sc;
- if_initname(ifp, device_get_name(dev), device_get_unit(dev));
- ifp->if_mtu = ETHERMTU;
- ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
- ifp->if_start = arl_start;
- ifp->if_ioctl = arl_ioctl;
- ifp->if_init = arl_init;
- IFQ_SET_MAXLEN(&ifp->if_snd, IFQ_MAXLEN);
- ifp->if_baudrate = 2000000;
-
- ifmedia_init(&sc->arl_ifmedia, 0, arl_media_change, arl_media_status);
-#define ADD(s, o) ifmedia_add(&sc->arl_ifmedia, \
- IFM_MAKEWORD(IFM_IEEE80211, (s), (o), 0), 0, NULL)
- ADD(IFM_IEEE80211_DS354k, 0);
- ADD(IFM_IEEE80211_DS354k, IFM_IEEE80211_ADHOC);
- ADD(IFM_IEEE80211_DS512k, 0);
- ADD(IFM_IEEE80211_DS512k, IFM_IEEE80211_ADHOC);
- ADD(IFM_IEEE80211_DS1, 0);
- ADD(IFM_IEEE80211_DS1, IFM_IEEE80211_ADHOC);
- ADD(IFM_IEEE80211_DS2, 0);
- ADD(IFM_IEEE80211_DS2, IFM_IEEE80211_ADHOC);
- ifmedia_set(&sc->arl_ifmedia, IFM_MAKEWORD(IFM_IEEE80211,
- rate2media[arcfg.spreadingCode - 1], 0, 0));
-#undef ADD
-
- /*
- * Attach the interface
- */
- ether_ifattach(ifp, ar->lanCardNodeId);
-
- error = bus_setup_intr(dev, sc->irq_res, INTR_TYPE_NET | INTR_MPSAFE,
- NULL, arl_intr, sc, &sc->irq_handle);
- if (error) {
- ether_ifdetach(ifp);
- mtx_destroy(&sc->arl_lock);
- if_free(sc->arl_ifp);
- arl_release_resources(dev);
- return (error);
- }
-
- return (0);
-}
-
-/*
- * Hardware reset
- * reset all setting to default (setted ARLANDGS)
- */
-static void
-arl_hwreset(sc)
- struct arl_softc *sc;
-{
- D(("hw reset\n"));
-
- ARL_LOCK_ASSERT(sc);
- ar->controlRegister = 1;
- DELAY(ARDELAY1);
-
- if (arl_wait_reset(sc, 0x24, ARDELAY1))
- arl_stop(sc);
-
- ar->controlRegister = (sc->arl_control = 1);
- DELAY(ARDELAY1);
-}
-
-
-/*
- * wait arlan command
- */
-static int
-arl_command(sc)
- struct arl_softc *sc;
-{
- int i; /* long stuppid delay ??? */
-
- D(("commandByte %x\n", ar->commandByte));
-
- for (i = 100000; ar->commandByte && i; i--)
- ;
-
- if (i == 0)
- ar->commandByte = 0;
-
- return (i == 0);
-}
-
-/*
- * Enable for recieveng
- */
-static void
-arl_enable(sc)
- struct arl_softc *sc;
-{
- D(("enable\n"));
- sc->arl_control = (ARL_INTERRUPT_ENABLE | ARL_CLEAR_INTERRUPT);
- ar->controlRegister = sc->arl_control;
- arl_command(sc);
-
- ar->rxStatusVector = 0;
- ar->commandByte = 0x83;
- ar->commandParameter[0] = 1;
- ARL_CHANNEL(sc);
- arl_command(sc);
-}
-
-/*
- * reset and set user parameters
- */
-static void
-arl_reset(sc)
- struct arl_softc *sc;
-{
- D(("reset\n"));
- ARL_LOCK_ASSERT(sc);
- arl_hwreset(sc);
-
- ar->resetFlag1 = 1;
- bzero((ar), 0x1FF0); /* fill memory board with 0 */
- ar->resetFlag1 = 0;
-
- sc->arl_control = 0;
-
-/* if (arl_wait_reset(sc, 0x168, ARDELAY1))
- return;
- */
-#if 1
- {
- int cnt = 0x168;
- int delay = ARDELAY1;
-
- ar->resetFlag = 0xFF; /* wish reset */
- ar->controlRegister = 0; /* unreeze - do it */
-
- while (ar->resetFlag && cnt--)
- DELAY(delay);
-
- if (cnt == 0) {
- if_printf(sc->arl_ifp, "reset timeout\n");
- return;
- }
-
- D(("reset wait %d\n", 0x168 - cnt));
- }
-#endif
-
- if (ar->diagnosticInfo != 0xff) {
- if_printf(sc->arl_ifp, "reset error\n");
- return;
- }
- arl_config(sc);
-}
-
-/*
- * configure radio parameters
- */
-static void
-arl_config(sc)
- struct arl_softc *sc;
-{
- int i;
-
- D(("config\n"));
-
- SET_ARL_PARAM(spreadingCode);
- SET_ARL_PARAM(channelNumber);
- SET_ARL_PARAM(channelSet);
- SET_ARL_PARAM(registrationMode);
- SET_ARL_PARAM(priority);
- SET_ARL_PARAM(receiveMode);
-
- bcopy(arcfg.sid, ar->systemId, 4 * sizeof(ar->systemId[0]));
- bcopy(arcfg.specifiedRouter, ar->specifiedRouter, ETHER_ADDR_LEN);
- bcopy(arcfg.lanCardNodeId, ar->lanCardNodeId, ETHER_ADDR_LEN);
-
- bzero(ar->name, ARLAN_NAME_SIZE); /* clear name */
- strncpy(ar->name, arcfg.name, ARLAN_NAME_SIZE);
-
- ar->diagnosticInfo = 0;
- ar->commandByte = 1;
- ARL_CHANNEL(sc);
- DELAY(ARDELAY1);
-
- if (arl_command(sc)) {
- D(("config failed\n"));
- return;
- }
-
- for (i = 0x168; ar->diagnosticInfo == 0 && i; i--)
- DELAY(ARDELAY1);
-
- if (i == 0) {
- D(("config timeout\n"));
- return;
- }
-
- if (ar->diagnosticInfo != 0xff) {
- D(("config error\n"));
- return;
- }
-
- D(("config lanCardNodeId %6D\n", ar->lanCardNodeId, ":"));
- D(("config channel set %d, frequency %d, spread %d, mode %d\n",
- ar->channelSet,
- ar->channelNumber,
- ar->spreadingCode,
- ar->registrationMode));
- /* clear quality stat */
- bzero(sc->arl_sigcache, MAXARLCACHE * sizeof(struct arl_sigcache));
-}
-
-/*
- * Socket Ioctl's.
- */
-static int
-arl_ioctl(ifp, cmd, data)
- register struct ifnet *ifp;
- u_long cmd;
- caddr_t data;
-{
- struct arl_softc *sc = ifp->if_softc;
- struct ifreq *ifr = (struct ifreq *)data;
- struct ieee80211req *ireq = (struct ieee80211req *)data;
- d_thread_t *td = _ARL_CURPROC;
- struct arl_req arlan_io;
- int error = 0;
- struct arl_sigcache *arl_cache;
- struct arl_stats *arl_stats;
- u_int8_t tmpstr[IEEE80211_NWID_LEN*2];
- u_int8_t tmpname[ARLAN_NAME_SIZE];
- u_int8_t *tmpptr;
- u_int32_t newsid;
-
- D(("ioctl %lx\n", cmd));
-
- switch (cmd) {
- case SIOCSIFADDR:
- case SIOCGIFADDR:
- case SIOCSIFMTU:
- error = ether_ioctl(ifp, cmd, data);
- break;
-
- case SIOCSIFFLAGS:
- ARL_LOCK(sc);
- if (ifp->if_flags & IFF_UP) {
- if (!(ifp->if_drv_flags & IFF_DRV_RUNNING))
- arl_init_locked(sc);
- } else {
- if (ifp->if_drv_flags & IFF_DRV_RUNNING)
- arl_stop(sc);
- }
- ARL_UNLOCK(sc);
- break;
- case SIOCSIFMEDIA:
- case SIOCGIFMEDIA:
- error = ifmedia_ioctl(ifp, ifr, &sc->arl_ifmedia, cmd);
- break;
-
- case SIOCG80211:
- switch (ireq->i_type) {
- case IEEE80211_IOC_SSID:
- if (ireq->i_val != -1) {
- error = EINVAL;
- break;
- }
- bzero(tmpstr, IEEE80211_NWID_LEN);
- ARL_LOCK(sc);
- snprintf(tmpstr, IEEE80211_NWID_LEN - 1, "0x%08x",
- *(int *)arcfg.sid);
- ARL_UNLOCK(sc);
- ireq->i_len = IEEE80211_NWID_LEN;
- error = copyout(tmpstr, ireq->i_data,
- IEEE80211_NWID_LEN);
- break;
- case IEEE80211_IOC_STATIONNAME:
- ireq->i_len = sizeof(arcfg.name);
- ARL_LOCK(sc);
- tmpptr = arcfg.name;
- bzero(tmpstr, IEEE80211_NWID_LEN);
- bcopy(tmpptr, tmpstr, ireq->i_len);
- ARL_UNLOCK(sc);
- error = copyout(tmpstr, ireq->i_data,
- IEEE80211_NWID_LEN);
- break;
- case IEEE80211_IOC_CHANNEL:
- ARL_LOCK(sc);
- ireq->i_val = arcfg.channelNumber;
- ARL_UNLOCK(sc);
- break;
- case IEEE80211_IOC_POWERSAVE:
- ARL_LOCK(sc);
- ireq->i_val = (arcfg.registrationMode == 2 ?
- IEEE80211_POWERSAVE_PSP :
- IEEE80211_POWERSAVE_OFF);
- ARL_UNLOCK(sc);
- break;
- default:
- error = EINVAL;
- break;
- }
- break;
-
- case SIOCS80211:
- if ((error = priv_check(td, PRIV_NET80211_MANAGE)))
- break;
- switch (ireq->i_type) {
- case IEEE80211_IOC_SSID:
- if (ireq->i_len > 4) {
- error = EINVAL;
- break;
- }
- bzero(&newsid, sizeof(newsid));
- error = copyin(ireq->i_data,
- (u_char *)(&newsid) + 4 - ireq->i_len,
- ireq->i_len);
-
- if (error)
- break;
-
- newsid = htonl(newsid);
- if (newsid < 0 || newsid % 2) {
- error = EINVAL;
- break;
- }
-
- ARL_LOCK(sc);
- bcopy(&newsid, arcfg.sid, sizeof(arcfg.sid));
- break;
- case IEEE80211_IOC_STATIONNAME:
- if (ireq->i_len > ARLAN_NAME_SIZE) {
- error = EINVAL;
- break;
- }
- error = copyin(ireq->i_data, tmpname, ireq->i_len);
- if (error)
- break;
- ARL_LOCK(sc);
- bzero(arcfg.name, ARLAN_NAME_SIZE);
- bcopy(tmpname, arcfg.name, ireq->i_len);
- break;
- case IEEE80211_IOC_CHANNEL:
- if (ireq->i_val < 0 || ireq->i_val > 5) {
- error = EINVAL;
- break;
- }
- ARL_LOCK(sc);
- arcfg.channelNumber = ireq->i_val;
- break;
- case IEEE80211_IOC_POWERSAVE:
- switch (ireq->i_val) {
- case IEEE80211_POWERSAVE_OFF:
- ARL_LOCK(sc);
- if (arcfg.registrationMode == 2)
- arcfg.registrationMode = 1;
- break;
- case IEEE80211_POWERSAVE_ON:
- case IEEE80211_POWERSAVE_PSP:
- ARL_LOCK(sc);
- arcfg.registrationMode = 2;
- break;
- default:
- error = EINVAL;
- break;
- }
- break;
- default:
- error = EINVAL;
- break;
- }
-
- if (!error) {
- /*
- * XXX: Somewhat gross: we require that if the
- * clauses in the switch statement above
- * didn't encounter an error they leave the
- * softc locked.
- */
- arl_config(sc);
- ARL_UNLOCK(sc);
- }
-
- break;
-
-#define GET_PARAM(name) (arlan_io.cfg.name = arcfg.name)
-
-#define GET_COPY_PARAM(name) \
- { \
- bzero(arlan_io.cfg.name, sizeof(arlan_io.cfg.name)); \
- bcopy(arcfg.name, arlan_io.cfg.name, sizeof(arlan_io.cfg.name)); \
- }
- case SIOCGARLALL:
- bzero(&arlan_io, sizeof(arlan_io));
- ARL_LOCK(sc);
- if (!priv_check(td, PRIV_DRIVER)) {
- bcopy(ar->systemId, arlan_io.cfg.sid, 4);
- }
-
- GET_COPY_PARAM(name);
- GET_COPY_PARAM(lanCardNodeId);
- GET_COPY_PARAM(specifiedRouter);
- GET_PARAM(channelNumber);
- GET_PARAM(channelSet);
- GET_PARAM(spreadingCode);
- GET_PARAM(registrationMode);
- GET_PARAM(hardwareType);
- GET_PARAM(majorHardwareVersion);
- GET_PARAM(minorHardwareVersion);
- GET_PARAM(radioModule);
- GET_PARAM(priority);
- GET_PARAM(receiveMode);
- GET_PARAM(txRetry);
- ARL_UNLOCK(sc);
-
- error = copyout(&arlan_io, ifr->ifr_data, sizeof(arlan_io));
- break;
-
-#define SET_PARAM(name) \
- do { \
- if (arlan_io.what_set & ARLAN_SET_##name) \
- arcfg.name = arlan_io.cfg.name; \
- } while (0)
-#define SET_COPY_PARAM(name) \
- do { \
- if (arlan_io.what_set & ARLAN_SET_##name) { \
- bzero(arcfg.name, sizeof(arcfg.name)); \
- bcopy(arlan_io.cfg.name, arcfg.name, sizeof(arcfg.name)); \
- } \
- } while (0)
-
- case SIOCSARLALL:
- if (priv_check(td, PRIV_DRIVER))
- break;
-
- error = copyin(ifr->ifr_data, &arlan_io, sizeof(arlan_io));
- if (error)
- break;
-
- D(("need set 0x%04x\n", arlan_io.what_set));
-
- if (arlan_io.what_set) {
- ARL_LOCK(sc);
- SET_COPY_PARAM(name);
- SET_COPY_PARAM(sid);
- SET_COPY_PARAM(specifiedRouter);
- SET_COPY_PARAM(lanCardNodeId);
- SET_PARAM(channelSet);
- SET_PARAM(channelNumber);
- SET_PARAM(spreadingCode);
- SET_PARAM(registrationMode);
- SET_PARAM(priority);
- SET_PARAM(receiveMode);
- SET_PARAM(txRetry);
-
- arl_config(sc);
- ARL_UNLOCK(sc);
- }
-#undef SET_COPY_PARAM
-#undef SET_PARAM
-#undef GET_COPY_PARAM
-#undef GET_PARAM
- break;
-#ifdef ARLCACHE
- case SIOCGARLQLT:
- arl_cache = malloc(sizeof(sc->arl_sigcache), M_DEVBUF,
- M_WAITOK);
- ARL_LOCK(sc);
- while (ar->interruptInProgress) ; /* wait */
- bcopy(&(sc->arl_sigcache), arl_cache, sizeof(sc->arl_sigcache));
- ARL_UNLOCK(sc);
- error = copyout(arl_cache, ifr->ifr_data,
- sizeof(sc->arl_sigcache));
- free(arl_cache, M_DEVBUF);
- break;
-#endif
- case SIOCGARLSTB:
- arl_stats = malloc(sizeof(struct arl_stats), M_DEVBUF,
- M_WAITOK);
- ARL_LOCK(sc);
- while (ar->lancpuLock) ;
- ar->hostcpuLock = 1;
- bcopy(&(ar->stat), arl_stats, sizeof(struct arl_stats));
- ar->hostcpuLock = 0;
- ARL_UNLOCK(sc);
- error = copyout(arl_stats, ifr->ifr_data,
- sizeof(struct arl_stats));
- free(arl_stats, M_DEVBUF);
- break;
-
- default:
- error = EINVAL;
- }
-
- return (error);
-}
-
-/*
- * Wait registration
- */
-static void
-arl_waitreg(void *arg)
-{
- struct arl_softc *sc = arg;
-
- D(("wait reg\n"));
-
- ARL_LOCK_ASSERT(sc);
- if (sc->arl_ifp->if_drv_flags & IFF_DRV_RUNNING) {
- if (ARL_CHECKREG(sc)) {
- /* wait registration */
- D(("wait registration\n"));
- callout_reset(&sc->arl_timer, hz * 2, arl_waitreg, sc);
- } else {
- /* registration restored */
- D(("registration restored\n"));
- arl_init_locked(sc);
- }
- }
-}
-
-/*
- * Handle transmit timeouts.
- */
-static void
-arl_watchdog(void *arg)
-{
- struct arl_softc *sc = arg;
-
- ARL_LOCK_ASSERT(sc);
- if (!(sc->arl_ifp->if_drv_flags & IFF_DRV_RUNNING))
- return;
-
- D(("device timeout\n"));
-
- if (ARL_CHECKREG(sc)) {
- /* Lost registratoin */
- D(("timeout lost registration\n"));
- callout_reset(&sc->arl_timer, hz * 2, arl_waitreg, sc);
- }
-}
-
-/*
- * Initialize
- */
-static void
-arl_init(xsc)
- void *xsc;
-{
- struct arl_softc *sc = xsc;
-
- ARL_LOCK(sc);
- arl_init_locked(sc);
- ARL_UNLOCK(sc);
-}
-
-static void
-arl_init_locked(struct arl_softc *sc)
-{
- struct ifnet *ifp = sc->arl_ifp;
-
- D(("init\n"));
-
- if (ARL_CHECKREG(sc))
- arl_reset(sc);
-
- arl_enable(sc);
-
- /* set flags */
-
- ifp->if_drv_flags |= IFF_DRV_RUNNING;
- ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
-
- arl_start_locked(ifp);
-
- D(("init done\n"));
-}
-
-/*
- * Put buffer into arlan buffer and start transmit
- */
-static void
-arl_put(sc)
- struct arl_softc *sc;
-{
- struct arl_tx_param txp;
- int i;
-
- if (ARL_CHECKREG(sc))
- sc->arl_ifp->if_oerrors++;
-
- /* copy dst adr */
- for(i = 0; i < 6; i++)
- txp.dest[i] = sc->arl_tx[i];
- txp.clear = 0;
- txp.retries = arcfg.txRetry; /* use default value */
- txp.routing = 1;
- txp.scrambled = 0;
- txp.offset = (intptr_t)ar->txBuffer - (intptr_t)(ar);
- txp.length = sc->tx_len - ARLAN_HEADER_SIZE;
-
-#ifdef SEND_ARLAN_HEADER
- if (ar->registrationMode != 1)
- txp.length = sc->tx_len;
-#endif
-
- /* copy from internal buffer to adapter memory */
-#ifdef SEND_ARLAN_HEADER
- if (ar->registrationMode)
-#endif
- bcopy(sc->arl_tx + ARLAN_HEADER_SIZE,
- ar->txBuffer,
- sc->tx_len - ARLAN_HEADER_SIZE);
-#ifdef SEND_ARLAN_MODE
- else
- bcopy(sc->arl_tx, ar->txBuffer, sc->tx_len);
-#endif
-
- /* copy command parametr */
- bcopy(&txp, ar->commandParameter, 14);
- ar->commandByte = 0x85; /* send command */
- ARL_CHANNEL(sc);
- if (arl_command(sc))
- sc->arl_ifp->if_oerrors++;
-}
-
-/*
- * start output
- */
-static void
-arl_start(ifp)
- struct ifnet *ifp;
-{
- struct arl_softc *sc;
-
- sc = ifp->if_softc;
- ARL_LOCK(sc);
- arl_start_locked(ifp);
- ARL_UNLOCK(sc);
-}
-
-static void
-arl_start_locked(ifp)
- struct ifnet *ifp;
-{
- struct arl_softc *sc;
- struct mbuf *m;
- struct mbuf *m0 = NULL;
-
- sc = ifp->if_softc;
-
- D(("start\n"));
-
- /* Don't do anything if output is active */
- if (ifp->if_drv_flags & IFF_DRV_OACTIVE)
- return;
-
- /* Dequeue the next datagram */
- IF_DEQUEUE(&ifp->if_snd, m0);
-
- /* If there's nothing to send, return. */
- if (m0 != NULL) {
- ifp->if_drv_flags |= IFF_DRV_OACTIVE;
-
- /* Copy the datagram to the buffer. */
- sc->tx_len = 0;
- for(m = m0; m != NULL; m = m->m_next) {
- if (m->m_len == 0)
- continue;
- bcopy(mtod(m, caddr_t),
- sc->arl_tx + sc->tx_len, m->m_len);
- sc->tx_len += m->m_len;
- }
-
- /* if packet size is less than minimum ethernet frame size,
- * pad it with zeroes to that size */
- if (sc->tx_len < ETHER_MIN_LEN) {
- bzero(sc->arl_tx + sc->tx_len, ETHER_MIN_LEN - sc->tx_len);
- sc->tx_len = ETHER_MIN_LEN;
- }
-
- /* Give the packet to the bpf, if any */
- BPF_MTAP(ifp, m0);
-
- m_freem(m0);
-
- /* Now transmit the datagram */
- arl_put(sc);
-
- /* wait 1 sec */
- callout_reset(&sc->arl_timer, hz * 1, arl_watchdog, sc);
- }
-}
-
-/*
- * stop interface
- */
-void
-arl_stop(sc)
- struct arl_softc *sc;
-{
- struct ifnet *ifp;
-
- ifp = sc->arl_ifp;
-
- callout_stop(&sc->arl_timer); /* disable timer */
- ifp->if_drv_flags &= ~(IFF_DRV_RUNNING|IFF_DRV_OACTIVE);
- /* arl_hwreset(unit); */
- sc->rx_len = 0;
- sc->tx_len = 0;
- /* disable interrupt */
- ar->controlRegister = 0;
-}
-
-/*
- * Pull read data off a interface.
- * Len is length of data, with local net header stripped.
- */
-static struct mbuf*
-arl_get(buf, totlen, off0, ifp)
- caddr_t buf;
- int totlen;
- int off0;
- struct ifnet * ifp;
-{
- struct mbuf *top, **mp, *m;
- int off = off0, len;
- caddr_t cp = buf;
- char *epkt;
-
- cp = buf;
- epkt = cp + totlen;
-
- if (off) {
- cp += off + 2 * sizeof(u_short);
- totlen -= 2 * sizeof(u_short);
- }
-
- MGETHDR(m, M_DONTWAIT, MT_DATA);
- if (m == 0)
- return (0);
- m->m_pkthdr.rcvif = ifp;
- m->m_pkthdr.len = totlen;
- m->m_len = MHLEN;
- top = 0;
- mp = &top;
- while (totlen > 0) {
- if (top) {
- MGET(m, M_DONTWAIT, MT_DATA);
- if (m == 0) {
- m_freem(top);
- return (0);
- }
- m->m_len = MLEN;
- }
- len = min(totlen, epkt - cp);
- if (len >= MINCLSIZE) {
- MCLGET(m, M_DONTWAIT);
- if (m->m_flags & M_EXT)
- m->m_len = len = min(len, MCLBYTES);
- else
- len = m->m_len;
- } else {
- /*
- * * Place initial small packet/header at end of mbuf.
- * */
- if (len < m->m_len) {
- if (top == 0 && len + max_linkhdr <= m->m_len)
- m->m_data += max_linkhdr;
- m->m_len = len;
- } else
- len = m->m_len;
- }
- bcopy(cp, mtod(m, caddr_t), (unsigned)len);
- cp += len;
- *mp = m;
- mp = &m->m_next;
- totlen -= len;
- if (cp == epkt)
- cp = buf;
- }
-
- return (top);
-}
-
-/* ------------------------------------------------------------------
- * * Pass a packet up to the higher levels.
- * */
-static void
-arl_read(sc, buf, len)
- struct arl_softc *sc;
- caddr_t buf;
- int len;
-{
- register struct ether_header *eh;
- struct ifnet *ifp = sc->arl_ifp;
- struct mbuf *m;
-
- eh = (struct ether_header *)buf;
- /*
- * Check if there's a bpf filter listening on this interface.
- * If so, hand off the raw packet to bpf.
- */
- if (bpf_peers_present(ifp->if_bpf)) {
- /*
- * Note that the interface cannot be in promiscuous mode if
- * there are no bpf listeners. And if el are in promiscuous
- * mode, el have to check if this packet is really ours.
- *
- * This test does not support multicasts.
- */
- if ((ifp->if_flags & IFF_PROMISC)
- && bcmp(eh->ether_dhost, IF_LLADDR(sc->arl_ifp),
- sizeof(eh->ether_dhost)) != 0
- && bcmp(eh->ether_dhost, BROADCASTADDR,
- sizeof(eh->ether_dhost)) != 0)
- return;
- }
- /*
- * Pull packet off interface.
- */
- m = arl_get(buf, len, 0, ifp);
- if (m == 0)
- return;
-
-#ifdef ARLCACHE
- arl_cache_store(sc, eh, ar->rxQuality & 0x0f,
- (ar->rxQuality & 0xf0) >> 4, ARLCACHE_RX);
-#endif
-
- ARL_UNLOCK(sc);
- (*ifp->if_input)(ifp, m);
- ARL_LOCK(sc);
-}
-
-/*
- * get packet from adapter
- */
-static void
-arl_recv(sc)
- struct arl_softc *sc;
-{
- sc->rx_len = ar->rxLength;
-
- if (sc->rx_len) {
-#ifdef SEND_ARLAN_HEADER
- if (ar->registrationMode == 1) {
-#endif
- bcopy(ar->ultimateDestAddress, sc->arl_rx, 6);
- bcopy(ar->rxSrc, (char*)sc->arl_rx + 6, 6);
- bcopy((char *)(ar) + ar->rxOffset,
- (char *)sc->arl_rx + 12,
- sc->rx_len);
- sc->rx_len += ARLAN_HEADER_SIZE;
-#ifdef SEND_ARLAN_HEADER
- } else {
- bcopy((char *)(ar) + ar->rxOffset,
- (char *)sc->arl_rx, sc->rx_len);
- }
-#endif
- }
-}
-
-/*
- * Ethernet interface interrupt processor
- */
-void
-arl_intr(arg)
- void *arg;
-{
- register struct arl_softc *sc = (struct arl_softc *) arg;
- struct ifnet *ifp = sc->arl_ifp;
-
- ARL_LOCK(sc);
- /* enable interrupt */
- ar->controlRegister = (sc->arl_control & ~ARL_CLEAR_INTERRUPT);
- ar->controlRegister = (sc->arl_control | ARL_CLEAR_INTERRUPT);
-
- if (ar->txStatusVector) {
- if (ar->txStatusVector != 1)
- sc->arl_ifp->if_collisions++;
- callout_stop(&sc->arl_timer); /* disable timer */
- ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
- arl_start_locked(ifp);
- ar->txStatusVector = 0;
-#ifdef ARLCACHE
- arl_cache_store(sc,
- (struct ether_header *)(sc->arl_tx),
- ar->txAckQuality & 0x0f,
- (ar->txAckQuality & 0xf0) >> 4, ARLCACHE_TX);
-#endif
- }
-
- if (ar->rxStatusVector) {
- if (ar->rxStatusVector == 1) { /* it is data frame */
- arl_recv(sc);
- arl_read(sc, sc->arl_rx, sc->rx_len);
- ifp->if_opackets++;
- }
- ar->rxStatusVector = 0;
-
- ar->commandByte = 0x83;
- ar->commandParameter[0] = 1;
- ARL_CHANNEL(sc);
- if (arl_command(sc))
- ifp->if_ierrors++;
- }
- ARL_UNLOCK(sc);
-
- return;
-}
-
-/*
- * waiting for resetFlag dropped
- */
-int
-arl_wait_reset(sc, cnt, delay)
- struct arl_softc *sc;
- int cnt;
- int delay;
-{
- D(("wait_reset cnt=%d delay=%d\n", cnt, delay));
-
- ar->resetFlag = 1; /* wish reset */
- ar->controlRegister = 0; /* unreeze - do it */
-
- while (ar->resetFlag && cnt--)
- DELAY(delay);
-
- D(("reset done. %d cycles left\n", cnt));
-
- if (cnt == 0)
- if_printf(sc->arl_ifp, "reset failed\n");
-
- return (cnt == 0);
-}
-
-/*
- * Allocate an irq resource with the given resource id
- */
-int
-arl_alloc_irq(dev, rid, flags)
- device_t dev;
- int rid;
- int flags;
-{
- struct arl_softc *sc = device_get_softc(dev);
- struct resource *res;
-
- res = bus_alloc_resource_any(
- dev, SYS_RES_IRQ, &rid, (RF_ACTIVE | flags));
- if (res) {
- sc->irq_rid = rid;
- sc->irq_res = res;
- return (0);
- } else
- return (ENOENT);
-}
-
-/*
- * Allocate an memory resource with the given resource id
- */
-int
-arl_alloc_memory(dev, rid, size)
- device_t dev;
- int rid;
- int size;
-{
- struct arl_softc *sc = device_get_softc(dev);
- struct resource *res;
-
- res = bus_alloc_resource(dev, SYS_RES_MEMORY, &rid,
- 0ul, ~0ul, size, RF_ACTIVE);
- if (res) {
- sc->mem_rid = rid;
- sc->mem_res = res;
- return (0);
- } else
- return (ENOENT);
-}
-
-/*
- * Release all resources
- */
-void
-arl_release_resources(dev)
- device_t dev;
-{
- struct arl_softc *sc = device_get_softc(dev);
-
- if (sc->mem_res) {
- bus_release_resource(dev, SYS_RES_MEMORY,
- sc->mem_rid, sc->mem_res);
- sc->mem_res = 0;
- }
- if (sc->irq_res) {
- bus_release_resource(dev, SYS_RES_IRQ,
- sc->irq_rid, sc->irq_res);
- sc->irq_res = 0;
- }
-}
-
-#ifdef ARLCACHE
-static void
-arl_cache_store(sc, eh, level, quality, dir)
- struct arl_softc *sc;
- struct ether_header *eh;
- u_int8_t level;
- u_int8_t quality;
- int dir;
-{
- int i;
- static int cache_slot = 0;
- static int wrapindex = 0;
- u_int8_t zero[6] = {0, 0, 0, 0, 0, 0};
- u_char *mac;
-
- if ((ntohs(eh->ether_type) != ETHERTYPE_IP)) {
- return;
- }
-
- mac = (dir == ARLCACHE_RX ? eh->ether_shost : eh->ether_dhost);
-
- for (i = 0; i < MAXARLCACHE; i++) {
- if (!bcmp(zero, sc->arl_sigcache[i].macsrc, 6) ||
- !bcmp(mac, sc->arl_sigcache[i].macsrc, 6))
- break;
- }
-
- if (i < MAXARLCACHE)
- cache_slot = i;
- else {
- if (wrapindex == MAXARLCACHE)
- wrapindex = 0;
- cache_slot = wrapindex++;
- }
-
- bcopy(dir == ARLCACHE_RX ? eh->ether_shost : eh->ether_dhost,
- sc->arl_sigcache[cache_slot].macsrc, 6);
-
- sc->arl_sigcache[cache_slot].level[dir] = level;
- sc->arl_sigcache[cache_slot].quality[dir] = quality;
-}
-#endif
-
-static int
-arl_media_change(ifp)
- struct ifnet *ifp;
-{
- struct arl_softc *sc = ifp->if_softc;
- int otype = arcfg.registrationMode;
- int orate = arcfg.spreadingCode;
- int nrate, i;
-
- ARL_LOCK(sc);
- nrate = IFM_SUBTYPE(sc->arl_ifmedia.ifm_cur->ifm_media);
-
- for(i = 1; i <= 4; i++) {
- if (rate2media[i - 1] == nrate)
- break;
- }
-
- if (i == 5) {
- ARL_UNLOCK(sc);
- return (EINVAL);
- }
-
- arcfg.spreadingCode = i;
-
- /* XXX Need fix for PSP mode */
- if ((sc->arl_ifmedia.ifm_cur->ifm_media & IFM_IEEE80211_ADHOC) != 0)
- arcfg.registrationMode = 0;
- else
- arcfg.registrationMode = 1;
-
- if (otype != arcfg.registrationMode ||
- orate != arcfg.spreadingCode)
- arl_config(sc);
- ARL_UNLOCK(sc);
-
- return (0);
-}
-
-static void
-arl_media_status(ifp, imr)
- struct ifnet *ifp;
- struct ifmediareq *imr;
-{
- struct arl_softc *sc = ifp->if_softc;
-
- imr->ifm_active = IFM_IEEE80211;
-
- ARL_LOCK(sc);
- if (arcfg.registrationMode == 0)
- imr->ifm_active |= IFM_IEEE80211_ADHOC;
-
- imr->ifm_active |= IFM_MAKEWORD(IFM_IEEE80211,
- rate2media[arcfg.spreadingCode - 1], 0, 0);
- imr->ifm_status = IFM_AVALID;
- if (!ARL_CHECKREG(sc))
- imr->ifm_status |= IFM_ACTIVE;
- ARL_UNLOCK(sc);
-}
diff --git a/sys/dev/arl/if_arl_isa.c b/sys/dev/arl/if_arl_isa.c
deleted file mode 100644
index 91b6e41..0000000
--- a/sys/dev/arl/if_arl_isa.c
+++ /dev/null
@@ -1,344 +0,0 @@
-/*-
- * Copyright (c) 1999-2001, Ivan Sharov, Vitaly Belekhov.
- * Copyright (c) 2004 Stanislav Svirid.
- * 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.
- *
- * THIS SOFTWARE IS PROVIDED BY AUTHOR 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 AUTHOR 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.
- *
- * $RISS: if_arl/dev/arl/if_arl_isa.c,v 1.7 2004/03/16 05:30:38 count Exp $
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include "opt_inet.h"
-
-#ifdef INET
-#define ARLCACHE
-#endif
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/socket.h>
-#include <sys/kernel.h>
-#include <sys/malloc.h>
-
-#include <sys/module.h>
-#include <sys/bus.h>
-#include <machine/bus.h>
-#include <machine/resource.h>
-#include <sys/rman.h>
-
-#include <net/ethernet.h>
-#include <net/if.h>
-#include <net/if_arp.h>
-#include <net/if_mib.h>
-#include <net/if_media.h>
-
-#include <isa/isavar.h>
-#include <isa/pnpvar.h>
-#include <isa/isa_common.h>
-
-#include <machine/md_var.h>
-#include <vm/vm.h>
-#include <vm/pmap.h>
-#include <vm/vm_param.h>
-
-#include <dev/arl/if_arlreg.h>
-
-static void arl_isa_identify(driver_t *, device_t);
-static int arl_isa_probe (device_t);
-static int arl_isa_attach (device_t);
-static int arl_isa_detach (device_t);
-static char* arl_make_desc (u_int8_t, u_int8_t);
-
-#define ARL_MAX_ATYPE_LEN 10
-static struct arl_type {
- u_int8_t type;
- char* desc;
-}
-arl_type_list[] = {
- { 0, "450" },
- { 1, "650" },
- { 0xb, "670" },
- { 0xc, "670E" },
- { 0xd, "650E" },
- { 0xe, "440LT" },
- { 0x2e, "655" },
- { 0x6b, "IC2200" },
- { 0, 0 }
-};
-
-#define ARL_MAX_RTYPE_LEN 10
-struct radio_type {
- u_int8_t type;
- char* desc;
-} radio_type_list [] = {
- { 1, "092/094" },
- { 2, "020" },
- { 3, "092A" },
- { 4, "020B" },
- { 5, "095" },
- { 6, "024" },
- { 7, "025B" },
- { 8, "024B" },
- { 9, "024C" },
- {10, "025C" },
- {11, "024-1A" },
- {12, "025-1A" },
-};
-
-
-static char*
-arl_make_desc(hw_type, radio_mod)
- u_int8_t hw_type;
- u_int8_t radio_mod;
-{
- static char desc[80];
- char atype[ARL_MAX_ATYPE_LEN], rtype[ARL_MAX_RTYPE_LEN];
- int i;
-
- *atype = *rtype = 0;
-
- /* arl type */
- for(i = 0; arl_type_list[i].desc; i++) {
- if (arl_type_list[i].type == hw_type)
- break;
- }
-
- if (arl_type_list[i].desc)
- strncpy(atype, arl_type_list[i].desc, ARL_MAX_ATYPE_LEN);
- else
- snprintf(atype, ARL_MAX_ATYPE_LEN, "(0x%x)", hw_type);
-
- /* radio type */
- for(i = 0; radio_type_list[i].desc; i++)
- if (radio_type_list[i].type == radio_mod)
- break;
-
- if (radio_type_list[i].desc)
- strncpy(rtype, radio_type_list[i].desc, ARL_MAX_RTYPE_LEN);
- else
- snprintf(rtype, ARL_MAX_RTYPE_LEN, "(0x%x)", radio_mod);
-
- snprintf(desc, 80, "ArLan type %s, radio module %s", atype, rtype);
-
- return desc;
-}
-
-#define ARL_ADDR2VEC(addr) (1 << ((addr - ARL_BASE_START) / ARL_BASE_STEP))
-
-static void
-arl_isa_identify (driver_t *driver, device_t parent)
-{
- device_t child;
- struct arl_softc *sc;
- int chunk, found, i;
- u_int16_t free_mem = 0xFFFF;
-
- if (bootverbose)
- printf("arl: in identify\n");
-
- /* Try avoid already added devices */
- for (i = 0; (child = device_find_child(parent, "arl", i)) != NULL; i++) {
- chunk = bus_get_resource_start(child, SYS_RES_MEMORY, 0);
- if (bootverbose)
- device_printf(child, "found at iomem = 0x%0x\n", chunk);
- if (chunk >= ARL_BASE_START && chunk <= ARL_BASE_END)
- free_mem ^= ARL_ADDR2VEC(chunk);
- }
-
- if (bootverbose)
- printf("arl: free mem vector = 0x%x\n", free_mem);
-
- for (chunk = ARL_BASE_START; chunk <= ARL_BASE_END; chunk += ARL_BASE_STEP) {
- /* If device 'arl' with this chunk was found early - skip it */
- if ( !(free_mem & ARL_ADDR2VEC(chunk)) )
- continue;
-
- found = 0;
- child = BUS_ADD_CHILD(parent, ISA_ORDER_SPECULATIVE, "arl", -1);
- device_set_driver(child, driver);
- sc = device_get_softc(child);
- bzero(sc, sizeof(*sc));
-
- bus_set_resource(child, SYS_RES_MEMORY, sc->mem_rid, chunk,
- ARL_BASE_STEP);
-
- if (arl_alloc_memory(child, sc->mem_rid, ARL_BASE_STEP) == 0) {
- ar = (struct arl_private *) rman_get_virtual(sc->mem_res);
- if (!bcmp(ar->textRegion, ARLAN_SIGN, sizeof(ARLAN_SIGN) - 1))
- found++;
- }
-
- if (bootverbose)
- device_printf(child, "%sfound at 0x%x\n",
- !found ? "not " : "", chunk);
-
- arl_release_resources(child);
- if (!found) {
- bus_delete_resource(child, SYS_RES_MEMORY, sc->mem_rid);
- device_delete_child(parent, child);
- }
-
- }
-}
-
-static int
-arl_isa_probe (device_t dev)
-{
- struct arl_softc *sc = device_get_softc(dev);
- int error;
- u_char *ptr;
- u_int8_t irq;
-
- if (isa_get_vendorid(dev))
- return (ENXIO);
-
- sc->arl_dev = dev;
- if (bootverbose)
- device_printf(dev, "in probe\n");
-
- error = arl_alloc_memory(dev, 0, ARL_BASE_STEP);
- if (error) {
- if (bootverbose)
- device_printf(dev, "Error allocating memory (%d)\n", error);
- return (error);
- }
-
- ar = (struct arl_private *) rman_get_virtual(sc->mem_res);
- if (bcmp(ar->textRegion, ARLAN_SIGN, sizeof(ARLAN_SIGN) - 1)) {
- if (bootverbose)
- device_printf(dev, "not found\n");
- error = ENOENT;
- goto bad;
- }
-
- irq = ar->irqLevel;
- if (irq == 2)
- irq = 9;
-
- error = bus_set_resource(dev, SYS_RES_IRQ, 0, irq, 1);
- if (error)
- goto bad;
-
- error = arl_alloc_irq(dev, 0, 0);
- if (error) {
- if (bootverbose)
- device_printf(dev, "Can't allocate IRQ %d\n", irq);
- goto bad;
- }
-
- ar->controlRegister = 1; /* freeze board */
-
- /* Memory test */
- for (ptr = (u_char *) ar;
- ptr < ((u_char *) ar + ARL_BASE_STEP - 1); ptr++) {
- u_char c;
-
- c = *ptr; *ptr = ~(*ptr);
- if (*ptr != (u_char)~c) {
- device_printf(dev, "board memory failed at [%lx]\n",
- rman_get_start(sc->mem_res) + (ptr - (u_char *)ar));
- break; /* skip memory test */
- }
- }
-
- bzero((void *) ar, ARL_BASE_STEP - 1); /* clear board ram */
-
- if (arl_wait_reset(sc, 100, ARDELAY)) {
- error = ENXIO;
- goto bad;
- }
-
- if (ar->diagnosticInfo == 0xFF) {
- device_set_desc_copy(dev, arl_make_desc(ar->hardwareType,
- ar->radioModule));
- error = 0;
- } else {
- if (bootverbose)
- device_printf(dev, "board self-test failed (0x%x)!\n",
- ar->diagnosticInfo);
- error = ENXIO;
- }
-
-bad:
- arl_release_resources(dev);
-
- return (error);
-}
-
-static int
-arl_isa_attach (device_t dev)
-{
- struct arl_softc *sc = device_get_softc(dev);
-
- sc->arl_dev = dev;
- if (bootverbose)
- device_printf(dev, "in attach\n");
-
- arl_alloc_memory(dev, sc->mem_rid, ARL_BASE_STEP);
- arl_alloc_irq(dev, sc->irq_rid, 0);
-
- return arl_attach(dev);
-}
-
-static int
-arl_isa_detach(device_t dev)
-{
- struct arl_softc *sc = device_get_softc(dev);
-
- ARL_LOCK(sc);
- arl_stop(sc);
- ARL_UNLOCK(sc);
- callout_drain(&sc->arl_timer);
- ether_ifdetach(sc->arl_ifp);
- ifmedia_removeall(&sc->arl_ifmedia);
- bus_teardown_intr(dev, sc->irq_res, sc->irq_handle);
- if_free(sc->arl_ifp);
- arl_release_resources(dev);
- mtx_destroy(&sc->arl_lock);
-
- return (0);
-}
-
-static device_method_t arl_isa_methods[] = {
- /* Device interface */
- DEVMETHOD(device_identify, arl_isa_identify),
- DEVMETHOD(device_probe, arl_isa_probe),
- DEVMETHOD(device_attach, arl_isa_attach),
- DEVMETHOD(device_detach, arl_isa_detach),
-
- { 0, 0 }
-};
-
-static driver_t arl_isa_driver = {
- "arl",
- arl_isa_methods,
- sizeof(struct arl_softc)
-};
-
-extern devclass_t arl_devclass;
-
-DRIVER_MODULE(arl, isa, arl_isa_driver, arl_devclass, 0, 0);
-MODULE_DEPEND(arl, isa, 1, 1, 1);
-MODULE_DEPEND(arl, ether, 1, 1, 1);
diff --git a/sys/dev/arl/if_arlreg.h b/sys/dev/arl/if_arlreg.h
deleted file mode 100644
index 34f05a9..0000000
--- a/sys/dev/arl/if_arlreg.h
+++ /dev/null
@@ -1,344 +0,0 @@
-/*-
- * Copyright (c) 1999-2001, Ivan Sharov, Vitaly Belekhov.
- * Copyright (c) 2004 Stanislav Svirid.
- * 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.
- *
- * THIS SOFTWARE IS PROVIDED BY AUTHOR 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 AUTHOR 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.
- *
- * $RISS: if_arl/dev/arl/if_arlreg.h,v 1.4 2004/03/16 04:43:27 count Exp $
- * $FreeBSD$
- */
-
-#ifndef _IF_ARLREG_H
-#define _IF_ARLREG_H
-
-#define ARL_BASE_START 0xC0000
-#define ARL_BASE_END 0xDE000
-#define ARL_BASE_STEP 0x2000
-
-#define ARLAN_NAME_SIZE 16
-#define ARLAN_NAME "ArLan655-SCT"
-
-/*
- * Statistics
- */
-struct arl_stats {
- u_int32_t numDatagramsTransmitted;
- u_int32_t numReTransmissions;
- u_int32_t numFramesDiscarded;
- u_int32_t numDatagramsReceived;
- u_int32_t numDuplicateReceivedFrames;
- u_int32_t numDatagramsDiscarded;
- u_int16_t maxNumReTransmitDatagram;
- u_int16_t maxNumReTransmitFrames;
- u_int16_t maxNumConsecutiveDuplicateFrames;
- u_int32_t numBytesTransmitted;
- u_int32_t numBytesReceived;
- u_int32_t numCRCErrors;
- u_int32_t numLengthErrors;
- u_int32_t numAbortErrors;
- u_int32_t numTXUnderruns;
- u_int32_t numRXOverruns;
- u_int32_t numHoldOffs;
- u_int32_t numFramesTransmitted;
- u_int32_t numFramesReceived;
- u_int32_t numReceiveFramesLost;
- u_int32_t numRXBufferOverflows;
- u_int32_t numFramesDiscardedAddrMismatch;
- u_int32_t numFramesDiscardedSIDMismatch;
- u_int32_t numPollsTransmistted;
- u_int32_t numPollAcknowledges;
- u_int32_t numStatusVectorTimeouts;
- u_int32_t numNACKReceived;
-} __attribute__((packed));
-
-/*
- * Arlan private structure in memomory
- */
-struct arl_private {
- /* Header Signature */
- char textRegion[48];
- u_int8_t resetFlag;
- u_int8_t diagnosticInfo;
- u_int16_t diagnosticOffset;
- u_int8_t _1[12];
- u_int8_t lanCardNodeId[6];
- u_int8_t broadcastAddress[6];
- u_int8_t hardwareType;
- u_int8_t majorHardwareVersion;
- u_int8_t minorHardwareVersion;
- u_int8_t radioModule;
- u_int8_t defaultChannelSet;
- u_int8_t _2[47];
-
- /* Control/Status Block - 0x0080 */
- u_int8_t interruptInProgress;
- u_int8_t cntrlRegImage;
- u_int8_t _3[14];
- u_int8_t commandByte;
- u_int8_t commandParameter[15];
-
- /* Receive Status - 0x00a0 */
- u_int8_t rxStatusVector;
- u_int8_t rxFrmType;
- u_int16_t rxOffset;
- u_int16_t rxLength;
- u_int8_t rxSrc[6];
- u_int8_t rxBroadcastFlag;
- u_int8_t rxQuality;
- u_int8_t scrambled;
- u_int8_t _4[1];
-
- /* Transmit Status - 0x00b0 */
- u_int8_t txStatusVector;
- u_int8_t txAckQuality;
- u_int8_t numRetries;
- u_int8_t _5[14];
- u_int8_t registeredRouter[6];
- u_int8_t backboneRouter[6];
- u_int8_t registrationStatus;
- u_int8_t configuredStatusFlag;
- u_int8_t _6[1];
- u_int8_t ultimateDestAddress[6];
- u_int8_t immedDestAddress[6];
- u_int8_t immedSrcAddress[6];
- u_int16_t rxSequenceNumber;
- u_int8_t assignedLocaltalkAddress;
- u_int8_t _7[27];
-
- /* System Parameter Block */
-
- /* - Driver Parameters (Novell Specific) */
-
- u_int16_t txTimeout;
- u_int16_t transportTime;
- u_int8_t _8[4];
-
- /* - Configuration Parameters */
- u_int8_t irqLevel;
- u_int8_t spreadingCode;
- u_int8_t channelSet;
- u_int8_t channelNumber;
- u_int16_t radioNodeId;
- u_int8_t _9[2];
- u_int8_t scramblingDisable;
- u_int8_t radioType;
- u_int16_t routerId;
- u_int8_t _10[9];
- u_int8_t txAttenuation;
- u_int8_t systemId[4]; /* on an odd address for a long !!! */
- u_int16_t globalChecksum;
- u_int8_t _11[4];
- u_int16_t maxDatagramSize;
- u_int16_t maxFrameSize;
- u_int8_t maxRetries;
- u_int8_t receiveMode;
- u_int8_t priority;
- u_int8_t rootOrRepeater;
- u_int8_t specifiedRouter[6];
- u_int16_t fastPollPeriod;
- u_int8_t pollDecay;
- u_int8_t fastPollDelay[2];
- u_int8_t arlThreshold;
- u_int8_t arlDecay;
- u_int8_t _12[1];
- u_int16_t specRouterTimeout;
- u_int8_t _13[5];
-
- /* Scrambled Area */
- u_int8_t SID[4];
- u_int8_t encryptionKey[12];
- u_int8_t _14[2];
- u_int8_t waitTime[2];
- u_int8_t lParameter[2];
- u_int8_t _15[3];
- u_int16_t headerSize;
- u_int16_t sectionChecksum;
-
- u_int8_t registrationMode;
- u_int8_t registrationFill;
- u_int16_t pollPeriod;
- u_int16_t refreshPeriod;
- u_int8_t name[ARLAN_NAME_SIZE];
- u_int8_t NID[6];
- u_int8_t localTalkAddress;
- u_int8_t codeFormat;
- u_int8_t SSCode[64];
-
- u_int8_t _16[0x140];
-
- /* Statistics Block - 0x0300 */
- u_int8_t hostcpuLock;
- u_int8_t lancpuLock;
- u_int8_t resetTime[18];
-
- struct arl_stats stat;
-
- u_int8_t _17[0x86];
-
- u_int8_t txBuffer[0x800];
- u_int8_t rxBuffer[0x800];
-
- u_int8_t _18[0x0bfd];
- u_int8_t resetFlag1;
- u_int8_t _19;
- u_int8_t controlRegister;
-};
-
-/*
- * Transmit parametrs
- */
-struct arl_tx_param {
- u_int16_t offset;
- u_int16_t length;
- u_int8_t dest[6];
- u_int8_t clear;
- u_int8_t retries;
- u_int8_t routing;
- u_int8_t scrambled;
-};
-
-#define ARL_HARDWARE_RESET 0x01
-#define ARL_CHANNEL_ATTENTION 0x02
-#define ARL_INTERRUPT_ENABLE 0x04
-#define ARL_CLEAR_INTERRUPT 0x08
-
-/* additions for sys/sockio.h ( socket ioctl parameters for arlan card ) */
-
-#define SIOCGARLQLT _IOWR('i', 70, struct ifreq) /* get QUALITY */
-#define SIOCGARLALL _IOWR('i', 71, struct ifreq) /* get ALL */
-#define SIOCSARLALL _IOWR('i', 72, struct ifreq) /* set paramter (who_set) */
-#define SIOCGARLSTB _IOWR('i', 73, struct ifreq) /* get statistic block */
-
-/*
- * Arlan request struct via ioctl
- */
-struct arl_cfg_param {
- u_char name[ARLAN_NAME_SIZE];
- u_int8_t sid[4];
- u_int8_t channelSet;
- u_int8_t channelNumber;
- u_int8_t spreadingCode;
- u_int8_t registrationMode;
- u_int8_t lanCardNodeId[6];
- u_int8_t specifiedRouter[6];
- u_int8_t hardwareType;
- u_int8_t majorHardwareVersion;
- u_int8_t minorHardwareVersion;
- u_int8_t radioModule;
- u_int8_t priority;
- u_int8_t receiveMode;
- u_int8_t txRetry;
-};
-
-struct arl_req {
- u_int32_t what_set;
- struct arl_cfg_param cfg;
-};
-
-#ifdef ARLCACHE
-#define MAXARLCACHE 16
-#define ARLCACHE_RX 0
-#define ARLCACHE_TX 1
-
-struct arl_sigcache {
- u_int8_t macsrc[6]; /* unique MAC address for entry */
- u_int8_t level[2];
- u_int8_t quality[2];
-};
-#endif
-
-#define ARLAN_SET_name 0x0001
-#define ARLAN_SET_sid 0x0002
-#define ARLAN_SET_channelSet 0x0004
-#define ARLAN_SET_channelNumber 0x0008
-#define ARLAN_SET_spreadingCode 0x0010
-#define ARLAN_SET_registrationMode 0x0020
-#define ARLAN_SET_lanCardNodeId 0x0040
-#define ARLAN_SET_specifiedRouter 0x0080
-#define ARLAN_SET_priority 0x0100
-#define ARLAN_SET_receiveMode 0x0200
-#define ARLAN_SET_txRetry 0x0400
-
-#ifdef _KERNEL
-struct arl_softc {
- struct ifnet *arl_ifp;
- device_t arl_dev;
-
- struct arl_private * arl_mem; /* arlan data */
-
- struct arl_cfg_param arl_cfg; /* arlan vars in our mem */
- u_char arl_control;
-
- int mem_rid; /* resource id for mem */
- struct resource* mem_res; /* resource for mem */
- int irq_rid; /* resource id for irq */
- struct resource* irq_res; /* resource for irq */
- void* irq_handle; /* handle for irq handler */
-
- u_char arl_tx[2048];
- int tx_len;
- u_char arl_rx[2048];
- int rx_len;
-
-#ifdef ARLCACHE
- struct arl_sigcache arl_sigcache[MAXARLCACHE];
-#endif
- struct ifmedia arl_ifmedia;
- struct callout arl_timer;
- struct mtx arl_lock;
-};
-
-#define ARL_LOCK(sc) mtx_lock(&(sc)->arl_lock)
-#define ARL_UNLOCK(sc) mtx_unlock(&(sc)->arl_lock)
-#define ARL_LOCK_ASSERT(sc) mtx_assert(&(sc)->arl_lock, MA_OWNED)
-#endif
-
-#define ARLAN_SIGN "TELESYSTEM"
-#define ARLAN_HEADER_SIZE 0x0C
-
-#define ar sc->arl_mem
-#define arcfg sc->arl_cfg
-
-#define ARDELAY 10000
-#define ARDELAY1 50000
-
-#define WAIT_RESET(cnt, delay) \
- do { \
- int i; \
- for (i = cnt; i && ar->resetFlag; i--) { \
- DELAY(delay); \
- } \
- } while (0)
-
-#ifdef _KERNEL
-void arl_release_resources (device_t);
-int arl_alloc_memory (device_t, int, int);
-int arl_alloc_irq (device_t, int, int);
-int arl_attach (device_t);
-int arl_wait_reset (struct arl_softc *, int, int);
-void arl_stop (struct arl_softc *);
-
-driver_intr_t arl_intr;
-#endif
-
-#endif /* _IF_ARLREG_H */
diff --git a/sys/i386/conf/NOTES b/sys/i386/conf/NOTES
index b8c038d..06eff62 100644
--- a/sys/i386/conf/NOTES
+++ b/sys/i386/conf/NOTES
@@ -563,7 +563,6 @@ hint.mse.0.irq="5"
# ar: Arnet SYNC/570i hdlc sync 2/4 port V.35/X.21 serial driver
# (requires sppp)
-# arl: Aironet Arlan 655 wireless adapters.
# ath: Atheros a/b/g WiFi adapters (requires ath_hal and wlan)
# ce: Cronyx Tau-PCI/32 sync single/dual port G.703/E1 serial adaptor
# with 32 HDLC subchannels (requires sppp (default), or NETGRAPH if
@@ -605,10 +604,6 @@ hint.ar.0.at="isa"
hint.ar.0.port="0x300"
hint.ar.0.irq="10"
hint.ar.0.maddr="0xd0000"
-device arl
-hint.arl.0.at="isa"
-hint.arl.0.irq="9"
-hint.arl.0.maddr="0xd0000"
device ce
device cp
device cs
diff --git a/sys/modules/Makefile b/sys/modules/Makefile
index cb360ad..2d5439d 100644
--- a/sys/modules/Makefile
+++ b/sys/modules/Makefile
@@ -23,7 +23,6 @@ SUBDIR= ${_3dfx} \
${_ar} \
${_arcmsr} \
${_arcnet} \
- ${_arl} \
${_asmc} \
${_asr} \
ata \
@@ -452,7 +451,6 @@ _aac= aac
_acpi= acpi
_ahb= ahb
_arcmsr= arcmsr
-_arl= arl
_asmc= asmc
_asr= asr
_bios= bios
diff --git a/sys/modules/arl/Makefile b/sys/modules/arl/Makefile
deleted file mode 100644
index 011a66e..0000000
--- a/sys/modules/arl/Makefile
+++ /dev/null
@@ -1,16 +0,0 @@
-# $RISS: if_arl/modules/if_arl/Makefile,v 1.3 2003/01/13 08:05:29 frol Exp $
-# $FreeBSD$
-
-.PATH: ${.CURDIR}/../../dev/arl
-
-KMOD= if_arl
-SRCS= if_arl.c if_arl_isa.c
-SRCS+= opt_inet.h device_if.h bus_if.h isa_if.h
-CFLAGS+= -I${.CURDIR}/../..
-
-.if !defined(KERNBUILDDIR)
-opt_inet.h:
- echo "#define INET 1" > opt_inet.h
-.endif
-
-.include <bsd.kmod.mk>
diff --git a/usr.sbin/Makefile b/usr.sbin/Makefile
index d6a7fee..61f99c6 100644
--- a/usr.sbin/Makefile
+++ b/usr.sbin/Makefile
@@ -12,7 +12,6 @@ SUBDIR= ac \
ancontrol \
${_apm} \
${_apmd} \
- ${_arlcontrol} \
arp \
${_asf} \
${_atm} \
@@ -317,7 +316,6 @@ _zzz= zzz
.if ${MK_ACPI} != "no"
_acpi= acpi
.endif
-_arlcontrol= arlcontrol
_boot0cfg= boot0cfg
_wlconfig= wlconfig
.elif ${MACHINE} == "pc98"
diff --git a/usr.sbin/arlcontrol/Makefile b/usr.sbin/arlcontrol/Makefile
deleted file mode 100644
index dc95a93..0000000
--- a/usr.sbin/arlcontrol/Makefile
+++ /dev/null
@@ -1,10 +0,0 @@
-#
-# $RISS: if_arl/arlconfig/Makefile,v 1.5 2003/01/13 08:05:29 frol Exp $
-# $FreeBSD$
-#
-
-PROG= arlcontrol
-CFLAGS+= -I${.CURDIR}/../../sys -DARLCACHE
-MAN= arlcontrol.8
-
-.include <bsd.prog.mk>
diff --git a/usr.sbin/arlcontrol/arlcontrol.8 b/usr.sbin/arlcontrol/arlcontrol.8
deleted file mode 100644
index d0e5409..0000000
--- a/usr.sbin/arlcontrol/arlcontrol.8
+++ /dev/null
@@ -1,166 +0,0 @@
-.\" Copyright (c) 2004
-.\" <ran@styx.aic.net>. All right 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. All advertising materials mentioning features or use of this software
-.\" must display the following acknowledgement:
-.\" This product includes software developed by <ran@styx.aic.net>
-.\" 4. Neither the name of the author nor the names of any co-contributors
-.\" may be used to endorse or promote products derived from this software
-.\" without specific prior written permission.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY ran@styx.aic.net 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 <ran@styx.aic.net> OR THE VOICES IN HIS
-.\" HEAD 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.
-.\"
-.\" $FreeBSD$
-.\"
-.Dd March 15, 2004
-.Dt ARLCONTROL 8 i386
-.Os
-.Sh NAME
-.Nm arlcontrol
-.Nd configure Aironet Arlan 655 device
-.Sh SYNOPSIS
-.Nm
-.Ar iface
-.Nm
-.Ar iface Cm country Ar country Pq Cm 9 Ns - Ns Cm 15
-.Nm
-.Ar iface Cm priority Ar priority Pq Cm normal , high , highest
-.Nm
-.Ar iface Cm txretry Ar txretry
-.Nm
-.Ar iface Cm stat
-.Nm
-.Ar iface Cm quality
-.Sh DESCRIPTION
-The
-.Nm
-utility controls the operation of Aironet Arlan 655 wireless networking
-devices via the
-.Xr arl 4
-driver.
-Most of the parameters that can be changed are related to the
-Aironet protocol which the Aironet Arlan 655 card implements.
-The
-.Nm
-utility can also be used to view the current NIC status, configuration,
-and to dump out the values of the card's statistics counters.
-.Pp
-The
-.Ar iface
-argument given to
-.Nm
-should be the logical interface name associated with the Aironet Arlan 655
-device
-.Li ( arl0 , arl1 ,
-etc.) and must be specified.
-.Sh OPTIONS
-The options are as follows:
-.Bl -tag -width indent
-.It Ar iface
-Display current settings of the specified wireless interface.
-This retrieves current card settings from the driver and prints
-them out.
-.It Ar iface Cm country Ar country Pq Cm 9 Ns - Ns Cm 15
-Chose
-.Ar country , channel
-parameters that depend on the
-.Ar country
-according to the following table:
-.Bl -column ".No North America" ".Em Channel" ".Em MHz"
-.Em "Country Ch_Set MHz"
-.It "North America" Ta 9 Ta "2412, 2427, 2442, 2457, 2465"
-.It "U.S.A" Ta 9 Ta "2412, 2427, 2442, 2457, 2465"
-.It "Canada" Ta 9 Ta "2412, 2427, 2442, 2457, 2465"
-.It "Mexico" Ta 9 Ta "2412, 2427, 2442, 2457, 2465"
-.It "New Zealand" Ta 9 Ta "2412, 2427, 2442, 2457, 2465"
-.It "E.T.S.I" Ta 10 Ta "2412, 2427, 2442, 2457, 2472"
-.It "Japan" Ta 11 Ta "2484"
-.It "France" Ta 12 Ta "2457, 2465, 2475"
-.It "Australia" Ta 13 Ta "2411, 2425, 2439"
-.It "Germany" Ta 14 Ta "2427, 2442, 2457"
-.It "U.K.(MPT1349)" Ta 15 Ta "2460"
-.It "U.K." Ta 15 Ta "2460"
-.It "Spain" Ta 15 Ta "2460"
-.El
-.It Ar iface Cm priority Ar priority Pq Cm normal , high , highest
-Use the
-.Ar priority
-parameter to set the priority of the Arlan 655 Radio Media Access Control
-the values are
-.Cm normal , high
-or
-.Cm highest .
-The higher the priority is set, the more likely this unit will be the first
-to successfully transmit a packet when multiple units are trying
-to transmit at the same time.
-.Pp
-The percentage of units on your network that you set to values other than
-.Cm normal
-should be kept small - 10 percent or less.
-.It Ar iface Cm txretry Ar txretry
-Set transmit retries.
-Default is 0.
-.It Ar iface Cm stat
-Print internal Arlan 655 statistics block.
-.It Ar iface Cm quality
-Display the cached signal level and quality maintained by the
-.Xr arl 4
-driver.
-The driver retains information about quality and level for packets
-received from different hosts.
-Also the driver extracts values from ACK packets.
-.El
-.Sh EXAMPLES
-.Bd -literal -offset indent
-arlcontrol arl0 country 11 priority high
-arlcontrol arl0 quality
-arlcontrol arl0 stat
-arlcontrol arl0
-.Ed
-.Pp
-You can configure the Arlan 655 card from
-.Pa /etc/start_if.arl0 .
-For example:
-.Bd -literal -offset indent
-#!/bin/sh
-/usr/sbin/arlcontrol country 9 priority highest
-.Ed
-.Sh SEE ALSO
-.Xr arl 4
-.Rs
-.%T "Arlan 655 ISA Wireless LAN Client Card User Guide"
-.Re
-.Sh HISTORY
-The
-.Nm
-utility first appeared in
-.Fx 5.3 .
-.Sh AUTHORS
-.An -nosplit
-The
-.Nm
-utility was written by
-.Aq ran@styx.aic.net .
-This manpage was written by
-.An Yuri Kurenkov Aq y.kurenkov@init.ru .
-.Sh BUGS
-Aironet Arlan 640 bridges and Arlan 630 access points do not understand
-country codes other than 9.
diff --git a/usr.sbin/arlcontrol/arlcontrol.c b/usr.sbin/arlcontrol/arlcontrol.c
deleted file mode 100644
index cc45c37..0000000
--- a/usr.sbin/arlcontrol/arlcontrol.c
+++ /dev/null
@@ -1,430 +0,0 @@
-/*
- * $RISS: if_arl/arlconfig/arlconfig.c,v 1.5 2004/03/16 05:00:21 count Exp $
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <sys/param.h>
-#include <sys/socket.h>
-#include <sys/ioctl.h>
-
-#include <net/if.h>
-#include <net/ethernet.h>
-#include <netinet/in.h>
-#include <netinet/if_ether.h>
-
-#include <err.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-#include <unistd.h>
-#include <limits.h>
-
-#include <dev/arl/if_arlreg.h>
-
-struct freq_list {
- short fr_no;
- char* name;
-};
-
-struct freq_list freq_list_1[] = {
- { 0, "908.50" },
- { 1, "910.06" },
- { 2, "915.52" },
- { 3, "915.00" },
- { 4, "917.83" },
- { 5, "919.22" },
- { 6, "922.26" },
- { 7, "911.45" },
- { 8, "915.00" },
- { 9, "918.55" },
- { 10,"915.00" },
- { 11,"915.00" }
-};
-
-struct freq_list freq_list_6[] = {
- { 0, "920.31" },
- { 1, "920.33" },
- { 2, "921.55" },
- { 3, "922.17" },
- { 4, "922.79" },
- { 5, "921.46" },
- { 6, "921.55" }
-};
-
-struct freq_list freq_list_9[] = {
- { 0, "Bad" },
- { 1, "2412" },
- { 2, "2427" },
- { 3, "2442" },
- { 4, "2457" },
- { 5, "2465" }
-};
-
-
-struct freq_list freq_list_10[] = {
- { 0, "Bad" },
- { 1, "2412" },
- { 2, "2427" },
- { 3, "2442" },
- { 4, "2457" },
- { 5, "2472" }
-};
-
-struct freq_list freq_list_11[] = {
- { 0, "Bad" },
- { 1, "2484" }
-};
-
-struct freq_list freq_list_12[] = {
- { 0, "Bad" },
- { 1, "2457" },
- { 2, "2465" },
- { 3, "2472" },
-};
-
-struct freq_list freq_list_13[] = {
- { 0, "Bad" },
- { 1, "2411" },
- { 2, "2425" },
- { 3, "2439" }
-};
-
-struct freq_list freq_list_14[] = {
- { 0, "Bad" },
- { 1, "2427" },
- { 2, "2442" },
- { 3, "2457" }
-};
-
-struct freq_list freq_list_15[] = {
- { 0, "Bad" },
- { 1, "2460" }
-};
-
-#define MAXFREQ(a) sizeof(a)/sizeof(struct freq_list)
-
-struct rate_list {
- short rate_no;
- char* name;
-};
-
-struct rate_list rate_list_2400[] = {
- { 0, "Bad" },
- { 1, "354" },
- { 2, "512" },
- { 3, "1000" },
- { 4, "2000" }
-};
-
-struct radio_type {
- int id;
- char* name;
-} radio_type_list [] = {
- { 0, "No EPROM" },
- { 1, "092/094" },
- { 2, "020" },
- { 3, "092A" },
- { 4, "020B" },
- { 5, "095" },
- { 6, "024" },
- { 7, "025B" },
- { 8, "024B" },
- { 9, "024C" },
- {10, "025C" },
- {11, "024-1A" },
- {12, "025-1A" },
- {13, "Other" }
-};
-
-static struct ch_list {
- short chan;
- char* fr;
- char* country;
- struct rate_list* rate;
- struct freq_list* freq;
- int max_freq;
-} CHSET[] = {
- { 0, 0, 0, 0, 0, 0 },
- { 1, "900 Mhz", "Canada, U.S.A., Mexico", 0, freq_list_1, MAXFREQ(freq_list_1) },
- { 2, 0, 0, 0, 0, 0 },
- { 3, 0, 0, 0, 0, 0 },
- { 4, 0, 0, 0, 0, 0 },
- { 5, 0, 0, 0, 0, 0 },
- { 6, "900 Mhz", "Australia", 0, freq_list_6, MAXFREQ(freq_list_6) },
- { 7, 0, 0, 0, 0, 0 },
- { 8, 0, 0, 0, 0, 0 },
- { 9, "2400 Mhz", "North America", rate_list_2400, freq_list_9, MAXFREQ(freq_list_9) },
- { 10, "2400 Mhz", "E.T.S.I", rate_list_2400, freq_list_10, MAXFREQ(freq_list_10) },
- { 11, "2400 Mhz", "Japan", rate_list_2400, freq_list_11, MAXFREQ(freq_list_11) },
- { 12, "2400 Mhz", "France", rate_list_2400, freq_list_12, MAXFREQ(freq_list_12) },
- { 13, "2400 Mhz", "Australia", rate_list_2400, freq_list_13, MAXFREQ(freq_list_13) },
- { 14, "2400 Mhz", "Germany", rate_list_2400, freq_list_14, MAXFREQ(freq_list_14) },
- { 15, "2400 Mhz", "U.K.(MPT1349),Spain", rate_list_2400, freq_list_15, MAXFREQ(freq_list_15) }
-};
-
-char* registrationMode[] = {
- "NON-TMA",
- "TMA",
- "PSP"
-};
-
-char* priorityList[] = {
- "normal",
- "high",
- "highest"
-};
-
-void
-usage()
-{
- const char *progname = getprogname();
-
-#if 0
- fprintf(stderr, "\nArlan configuration utility.\n\n");
-#endif
- fprintf(stderr, "Usage: %s <ifname> [<param> <value> ...]\n", progname);
- fprintf(stderr, "\t<ifname>\tArlan interface name.\n");
- fprintf(stderr, "\t<param>\t\tParameter name (see below).\n");
- fprintf(stderr, "\t<value>\t\tNew value for parameter.\n");
- fprintf(stderr, "Parameter name:\t\tValue:\n");
- fprintf(stderr, "\tcountry\t\tset Country (9-15)\n");
- fprintf(stderr, "\tpriority\tset Priority (normal, high, highest)\n");
- fprintf(stderr, "\ttxretry\t\tset Arlan Tx retry.\n");
- fprintf(stderr, "or: %s <ifname> stat\n", progname);
- fprintf(stderr, "\tprint internal arlan statistics block\n");
-#ifdef ARLCACHE
- fprintf(stderr,"or: %s <ifname> quality\n", progname);
- fprintf(stderr,"\tprint receive packet level and quality\n");
-#endif
- exit(0);
-}
-
-void
-print_al(struct arl_cfg_param *arl_io)
-{
- printf("Arlan-655(IC2000) type 0x%x v%d.%d, radio module type %s\n",
- arl_io->hardwareType,
- arl_io->majorHardwareVersion,
- arl_io->minorHardwareVersion,
- (arl_io->radioModule < 13) ?
- radio_type_list[arl_io->radioModule].name : "Unknown" );
- printf("\tname %s, sid 0x%06x, mode %s, num tx retry %d\n",
- arl_io->name,
- *(int *)arl_io->sid,
- (arl_io->registrationMode < 3) ?
- registrationMode[arl_io->registrationMode]:"Unknown",
- arl_io->txRetry );
- printf("\tchannel set %d, %s, %s\n",
- arl_io->channelSet,
- CHSET[arl_io->channelSet].fr,
- CHSET[arl_io->channelSet].country);
- printf("\tfrequency %s Mhz, bitrate %s kb/s, priority %s, receive mode %d\n",
- (CHSET[arl_io->channelSet].freq &&
- CHSET[arl_io->channelSet].max_freq > arl_io->channelNumber) ?
- CHSET[arl_io->channelSet].freq[arl_io->channelNumber].name :
- "unknown",
- (CHSET[arl_io->channelSet].rate) ?
- CHSET[arl_io->channelSet].rate[arl_io->spreadingCode].name :
- "unknown",
- arl_io->priority <= 2 ?
- priorityList[arl_io->priority] : "unknown",
- arl_io->receiveMode);
- printf("\tether %s",
- (char *)ether_ntoa((struct ether_addr *)arl_io->lanCardNodeId));
- printf(" registered to %s\n",
- (char *)ether_ntoa((struct ether_addr *)arl_io->specifiedRouter));
-}
-
-void
-print_stb( struct arl_stats stb )
-{
- printf("Arlan internal statistics block\n\n");
- printf("%8u\tdatagrams transmitted\n",
- stb.numDatagramsTransmitted);
- printf("%8u\tre-transmitted\n",
- stb.numReTransmissions);
- printf("%8u\tframes discarded internally in a router\n",
- stb.numFramesDiscarded);
- printf("%8u\tdatagrams received\n",
- stb.numDatagramsReceived);
- printf("%8u\tduplicate received frame\n",
- stb.numDuplicateReceivedFrames);
- printf("%8u\tdatagrams discarded due to unavailable mail box buffer\n",
- stb.numDatagramsDiscarded);
- printf("%8d\tmaximum of re-transmissions datagram\n",
- stb.maxNumReTransmitDatagram);
- printf("%8d\tmaximum of re-transmissions frame\n",
- stb.maxNumReTransmitFrames);
- printf("%8d\tmaximum of consecutive duplicate received frames\n",
- stb.maxNumConsecutiveDuplicateFrames);
- printf("%8u\tbytes transmitted\n",
- stb.numBytesTransmitted);
- printf("%8u\tbytes received\n",
- stb.numBytesReceived);
- printf("%8u\tCRC errors\n",
- stb.numCRCErrors);
- printf("%8u\tlength errors\n",
- stb.numLengthErrors);
- printf("%8u\tabort errors\n",
- stb.numAbortErrors);
- printf("%8u\tTX underuns\n",
- stb.numTXUnderruns);
- printf("%8u\tRX overruns\n",
- stb.numRXOverruns);
- printf("%8u\tHold Offs (channel tested busy, tx delayed)\n",
- stb.numHoldOffs);
- printf("%8u\tframes transmitted\n",
- stb.numFramesTransmitted);
- printf("%8u\tframes received\n",
- stb.numFramesReceived);
- printf("%8u\treceive frames lost due unavailable buffer\n",
- stb.numReceiveFramesLost);
- printf("%8u\tRX buffer overflows \n",
- stb.numRXBufferOverflows);
- printf("%8u\tframes discarded due to Address mismatch\n",
- stb.numFramesDiscardedAddrMismatch);
- printf("%8u\tframes discarded due to SID mismatch\n",
- stb.numFramesDiscardedSIDMismatch);
- printf("%8u\tpolls transmitted\n",
- stb.numPollsTransmistted);
- printf("%8u\tpoll acknowledges received\n",
- stb.numPollAcknowledges);
- printf("%8u\tstatus vector timeout\n",
- stb.numStatusVectorTimeouts);
- printf("%8u\tNACK packets received\n",
- stb.numNACKReceived);
-}
-
-#ifdef ARLCACHE
-void
-print_qlt(struct arl_sigcache *qlt)
-{
- int i;
- u_int8_t zero[6] = {0, 0, 0, 0, 0, 0};
-
- for (i = 0; i < MAXARLCACHE && bcmp(qlt->macsrc, zero, 6); i++) {
- printf("[%d]:", i+1);
- printf(" %02x:%02x:%02x:%02x:%02x:%02x,",
- qlt->macsrc[0]&0xff,
- qlt->macsrc[1]&0xff,
- qlt->macsrc[2]&0xff,
- qlt->macsrc[3]&0xff,
- qlt->macsrc[4]&0xff,
- qlt->macsrc[5]&0xff);
- printf(" rx lvl/qlty: %d/%d,", qlt->level[ARLCACHE_RX],
- qlt->quality[ARLCACHE_RX]);
- printf(" tx lvl/qlty: %d/%d", qlt->level[ARLCACHE_TX],
- qlt->quality[ARLCACHE_TX]);
- printf("\n");
- qlt++;
- }
-}
-#endif
-
-int
-main(int argc, char *argv[])
-{
- struct ifreq ifr;
- struct arl_req arl_io;
- struct ether_addr *ea;
- struct arl_stats stb;
- struct arl_sigcache qlt[MAXARLCACHE];
- int sd, argind, val = -1;
- char *param, *value;
-
- if (argc < 2)
- usage();
-
- sd = socket(AF_INET, SOCK_DGRAM, 0);
- if (sd < 0)
- err(1,"socket");
- strncpy(ifr.ifr_name, argv[1], sizeof(ifr.ifr_name));
- ifr.ifr_addr.sa_family = AF_INET;
- bzero(&arl_io, sizeof(arl_io));
- ifr.ifr_data = (caddr_t)&arl_io;
-
- if (argc == 2) {
- if (ioctl(sd, SIOCGARLALL, (caddr_t)&ifr))
- err(1,"Get ALL");
- print_al(&arl_io.cfg);
- exit(0);
- }
-
- if (argc == 3) {
- if (!strcasecmp(argv[2], "stat")) {
- strncpy(ifr.ifr_name, argv[1], sizeof(ifr.ifr_name));
- ifr.ifr_addr.sa_family = AF_INET;
- ifr.ifr_data = (caddr_t)&stb;
- if (ioctl(sd, SIOCGARLSTB, (caddr_t)&ifr))
- err(1,"Get STB");
- print_stb(stb);
- exit(0);
- }
-#ifdef ARLCACHE
- if (!strcasecmp( argv[2],"quality")) {
- printf("\n");
- strncpy(ifr.ifr_name, argv[1], sizeof(ifr.ifr_name));
- ifr.ifr_addr.sa_family = AF_INET;
- ifr.ifr_data = (caddr_t)qlt;
- if (ioctl(sd, SIOCGARLQLT, (caddr_t)&ifr))
- err(1,"Get QLT");
- print_qlt(qlt);
- exit(0);
- }
-#endif
- }
-
- arl_io.what_set = 0;
-
- for (argind = 2; argind < argc; argind += 2) {
- param = argv[argind];
- value = argv[argind+1];
- val = -1;
-
- if (!strcasecmp(param, "priority")) {
- if (!strcasecmp(value, "normal"))
- val = 0;
- else if (!strcasecmp(value, "high"))
- val = 1;
- else if (!strcasecmp(value, "highest"))
- val = 2;
- if (val == -1)
- err( 1, "Bad priority - %s", value);
- arl_io.cfg.priority = val;
- arl_io.what_set |= ARLAN_SET_priority;
- }
-
- if (!strcasecmp(param, "parent")) {
- if ((ea = (struct ether_addr*) ether_aton(value)) == NULL)
- err (1, "Bad parent's MAC - %s", value);
- for (val = 0; val < 6; val++) {
- arl_io.cfg.specifiedRouter[val] =
- (int) ea->octet[val];
- }
- arl_io.what_set |= ARLAN_SET_specifiedRouter;
- }
-
- if (!strcasecmp(param, "country")) {
- arl_io.cfg.channelSet = atoi(value);
- arl_io.what_set |= ARLAN_SET_channelSet;
- }
-
- if (!strcasecmp(param, "txretry")) {
- arl_io.cfg.txRetry = atoi(value);
- arl_io.what_set |= ARLAN_SET_txRetry;
- }
- }
-
- if (arl_io.what_set) {
- if (ioctl(sd, SIOCSARLALL, (caddr_t)&ifr))
- err (1, "Set ALL" );
- if (ioctl(sd, SIOCGARLALL, (caddr_t)&ifr))
- err (1, "Get ALL");
- print_al(&arl_io.cfg);
- }
-
- return 0;
-}
OpenPOWER on IntegriCloud