PERFORCE change 38101 for review
Marcel Moolenaar
marcel at FreeBSD.org
Mon Sep 15 16:32:29 PDT 2003
http://perforce.freebsd.org/chv.cgi?CH=38101
Change 38101 by marcel at marcel_nfs on 2003/09/15 16:32:13
IFC @38099
Affected files ...
.. //depot/projects/uart/amd64/amd64/pmap.c#16 integrate
.. //depot/projects/uart/amd64/conf/GENERIC#4 integrate
.. //depot/projects/uart/boot/forth/beastie.4th#2 integrate
.. //depot/projects/uart/cam/scsi/scsi_sa.c#2 integrate
.. //depot/projects/uart/coda/coda_vfsops.c#3 integrate
.. //depot/projects/uart/conf/files#24 integrate
.. //depot/projects/uart/dev/acpica/acpi.c#10 integrate
.. //depot/projects/uart/dev/acpica/acpi_acad.c#4 integrate
.. //depot/projects/uart/dev/acpica/acpi_cmbat.c#5 integrate
.. //depot/projects/uart/dev/acpica/acpi_ec.c#9 integrate
.. //depot/projects/uart/dev/acpica/acpiio.h#4 integrate
.. //depot/projects/uart/dev/ath/if_ath.c#10 integrate
.. //depot/projects/uart/dev/ath/if_athvar.h#6 integrate
.. //depot/projects/uart/dev/isp/isp.c#4 integrate
.. //depot/projects/uart/dev/isp/isp_freebsd.c#3 integrate
.. //depot/projects/uart/dev/isp/isp_freebsd.h#2 integrate
.. //depot/projects/uart/dev/isp/isp_inline.h#2 integrate
.. //depot/projects/uart/dev/isp/isp_target.c#2 integrate
.. //depot/projects/uart/dev/isp/isp_target.h#2 integrate
.. //depot/projects/uart/dev/isp/isp_tpublic.h#2 integrate
.. //depot/projects/uart/dev/isp/ispvar.h#2 integrate
.. //depot/projects/uart/dev/pci/pci.c#10 integrate
.. //depot/projects/uart/dev/pci/pcireg.h#6 integrate
.. //depot/projects/uart/dev/pci/pcivar.h#3 integrate
.. //depot/projects/uart/dev/re/if_re.c#3 integrate
.. //depot/projects/uart/dev/sio/sio.c#6 integrate
.. //depot/projects/uart/dev/sound/pci/ich.c#9 integrate
.. //depot/projects/uart/dev/uart/uart_bus_pccard.c#1 branch
.. //depot/projects/uart/dev/uart/uart_dev_ns8250.c#28 integrate
.. //depot/projects/uart/i386/i386/pmap.c#17 integrate
.. //depot/projects/uart/kern/kern_prot.c#4 integrate
.. //depot/projects/uart/kern/kern_xxx.c#3 integrate
.. //depot/projects/uart/kern/vfs_bio.c#6 integrate
.. //depot/projects/uart/modules/uart/Makefile#8 integrate
.. //depot/projects/uart/net/if_iso88025subr.c#2 integrate
.. //depot/projects/uart/net80211/ieee80211.c#5 integrate
.. //depot/projects/uart/net80211/ieee80211.h#2 integrate
.. //depot/projects/uart/net80211/ieee80211_input.c#5 integrate
.. //depot/projects/uart/net80211/ieee80211_ioctl.c#4 integrate
.. //depot/projects/uart/net80211/ieee80211_node.c#6 integrate
.. //depot/projects/uart/net80211/ieee80211_output.c#5 integrate
.. //depot/projects/uart/net80211/ieee80211_var.h#4 integrate
.. //depot/projects/uart/netinet6/in6_ifattach.c#2 integrate
.. //depot/projects/uart/netinet6/nd6.c#3 integrate
.. //depot/projects/uart/netinet6/nd6_nbr.c#2 integrate
.. //depot/projects/uart/pc98/pc98/fd.c#4 integrate
.. //depot/projects/uart/pci/if_rlreg.h#8 integrate
.. //depot/projects/uart/pci/if_xl.c#8 integrate
.. //depot/projects/uart/pci/if_xlreg.h#3 integrate
.. //depot/projects/uart/posix4/ksched.c#2 integrate
.. //depot/projects/uart/vm/vm_kern.c#6 integrate
.. //depot/projects/uart/vm/vm_object.c#5 integrate
Differences ...
==== //depot/projects/uart/amd64/amd64/pmap.c#16 (text+ko) ====
@@ -73,7 +73,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.436 2003/09/12 07:07:48 alc Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.437 2003/09/13 21:57:38 alc Exp $");
/*
* Manages physical address maps.
@@ -986,10 +986,6 @@
if (va >= VM_MAXUSER_ADDRESS)
return 0;
- if (mpte == NULL) {
- mpte = PHYS_TO_VM_PAGE(*pmap_pde(pmap, va));
- }
-
return pmap_unwire_pte_hold(pmap, va, mpte);
}
@@ -1467,7 +1463,7 @@
pmap_remove_pte(pmap_t pmap, pt_entry_t *ptq, vm_offset_t va)
{
pt_entry_t oldpte;
- vm_page_t m;
+ vm_page_t m, mpte;
oldpte = pte_load_clear(ptq);
if (oldpte & PG_W)
@@ -1496,10 +1492,9 @@
vm_page_flag_set(m, PG_REFERENCED);
return pmap_remove_entry(pmap, m, va);
} else {
- return pmap_unuse_pt(pmap, va, NULL);
+ mpte = PHYS_TO_VM_PAGE(*pmap_pde(pmap, va));
+ return pmap_unuse_pt(pmap, va, mpte);
}
-
- return 0;
}
/*
==== //depot/projects/uart/amd64/conf/GENERIC#4 (text+ko) ====
@@ -16,7 +16,7 @@
# If you are in doubt as to the purpose or necessity of a line, check first
# in NOTES.
#
-# $FreeBSD: src/sys/amd64/conf/GENERIC,v 1.394 2003/09/10 18:54:58 obrien Exp $
+# $FreeBSD: src/sys/amd64/conf/GENERIC,v 1.395 2003/09/15 22:40:00 obrien Exp $
machine amd64
cpu HAMMER
@@ -249,3 +249,5 @@
device firewire # FireWire bus code
device sbp # SCSI over FireWire (Requires scbus and da)
device fwe # Ethernet over FireWire (non-standard!)
+
+device pcm # Sound
==== //depot/projects/uart/boot/forth/beastie.4th#2 (text+ko) ====
@@ -1,4 +1,5 @@
\ Copyright (c) 2003 Scott Long <scottl at freebsd.org>
+\ Copyright (c) 2003 Aleksander Fafula <alex at fafula.com>
\ All rights reserved.
\
\ Redistribution and use in source and binary forms, with or without
@@ -22,7 +23,7 @@
\ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
\ SUCH DAMAGE.
\
-\ $FreeBSD: src/sys/boot/forth/beastie.4th,v 1.4 2003/06/10 22:04:09 scottl Exp $
+\ $FreeBSD: src/sys/boot/forth/beastie.4th,v 1.5 2003/09/13 18:35:01 scottl Exp $
marker task-beastie.4th
@@ -48,7 +49,29 @@
46 constant dot
\ The BSD Daemon. He is 19 rows high and 34 columns wide
-: print-beastie ( x y -- )
+: technicolor-beastie ( x y -- )
+2dup at-xy ." [1;31m, ," 1+
+2dup at-xy ." /( )`" 1+
+2dup at-xy ." \ \___ / |" 1+
+2dup at-xy ." /- [37m_[31m `-/ '" 1+
+2dup at-xy ." ([37m/\/ \[31m \ /\" 1+
+2dup at-xy ." [37m/ / |[31m ` \" 1+
+2dup at-xy ." [34mO O [37m) [31m/ |" 1+
+2dup at-xy ." [37m`-^--'[31m`< '" 1+
+2dup at-xy ." (_.) _ ) /" 1+
+2dup at-xy ." `.___/` / " 1+
+2dup at-xy ." `-----' /" 1+
+2dup at-xy ." [33m<----.[31m __ / __ \" 1+
+2dup at-xy ." [33m<----|====[31mO)))[33m==[31m) \) /[33m====|" 1+
+2dup at-xy ." [33m<----'[31m `--' `.__,' \" 1+
+2dup at-xy ." | |" 1+
+2dup at-xy ." \ / /\" 1+
+2dup at-xy ." [36m______[31m( (_ / \______/" 1+
+2dup at-xy ." [36m,' ,-----' |" 1+
+at-xy ." `--{__________) [0m" 1+
+;
+
+: boring-beastie ( x y -- )
2dup at-xy ." , ," 1+
2dup at-xy ." /( )`" 1+
2dup at-xy ." \ \___ / |" 1+
@@ -70,6 +93,20 @@
at-xy ." `--{__________)"
;
+: print-beastie ( x y -- )
+ s" loader_color" getenv
+ dup -1 = if
+ drop
+ boring-beastie
+ exit
+ then
+ s" YES" compare-insensitive 0<> if
+ boring-beastie
+ exit
+ then
+ technicolor-beastie
+;
+
: acpienabled? ( -- flag )
s" acpi_load" getenv
dup -1 = if
==== //depot/projects/uart/cam/scsi/scsi_sa.c#2 (text+ko) ====
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/cam/scsi/scsi_sa.c,v 1.96 2003/06/10 18:14:05 obrien Exp $");
+__FBSDID("$FreeBSD: src/sys/cam/scsi/scsi_sa.c,v 1.97 2003/09/13 02:01:56 mjacob Exp $");
#include <sys/param.h>
#include <sys/queue.h>
@@ -2765,8 +2765,10 @@
/* set the speed to the current value */
mode_hdr->dev_spec = current_speed;
- /* set single-initiator buffering mode */
- mode_hdr->dev_spec |= SMH_SA_BUF_MODE_SIBUF;
+ /* if set, set single-initiator buffering mode */
+ if (softc->buffer_mode == SMH_SA_BUF_MODE_SIBUF) {
+ mode_hdr->dev_spec |= SMH_SA_BUF_MODE_SIBUF;
+ }
if (mode_blk)
mode_hdr->blk_desc_len = sizeof(struct scsi_mode_blk_desc);
==== //depot/projects/uart/coda/coda_vfsops.c#3 (text+ko) ====
@@ -41,7 +41,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/coda/coda_vfsops.c,v 1.46 2003/09/07 07:43:09 tjr Exp $");
+__FBSDID("$FreeBSD: src/sys/coda/coda_vfsops.c,v 1.47 2003/09/13 01:13:56 tjr Exp $");
#include <vcoda.h>
@@ -253,7 +253,9 @@
ASSERT_VOP_LOCKED(mi->mi_rootvp, "coda_unmount");
mi->mi_rootvp->v_vflag &= ~VV_ROOT;
error = vflush(mi->mi_vfsp, 0, FORCECLOSE);
+#ifdef CODA_VERBOSE
printf("coda_unmount: active = %d, vflush active %d\n", active, error);
+#endif
error = 0;
/* I'm going to take this out to allow lookups to go through. I'm
* not sure it's important anyway. -- DCS 2/2/94
==== //depot/projects/uart/conf/files#24 (text+ko) ====
@@ -1,4 +1,4 @@
-# $FreeBSD: src/sys/conf/files,v 1.824 2003/09/11 03:53:46 wpaul Exp $
+# $FreeBSD: src/sys/conf/files,v 1.825 2003/09/14 17:02:59 takawata Exp $
#
# The long compile-with and dependency lines are required because of
# limitations in config: backslash-newline doesn't work in strings, and
@@ -790,6 +790,7 @@
dev/uart/uart_bus_ebus.c optional uart ebus
dev/uart/uart_bus_isa.c optional uart isa
#dev/uart/uart_bus_cbus.c optional uart cbus
+dev/uart/uart_bus_pccard.c optional uart pccard
dev/uart/uart_bus_pci.c optional uart cardbus
dev/uart/uart_bus_pci.c optional uart pci
dev/uart/uart_bus_puc.c optional uart puc
==== //depot/projects/uart/dev/acpica/acpi.c#10 (text+ko) ====
@@ -26,7 +26,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: src/sys/dev/acpica/acpi.c,v 1.99 2003/09/09 04:09:25 njl Exp $
+ * $FreeBSD: src/sys/dev/acpica/acpi.c,v 1.100 2003/09/15 06:29:31 njl Exp $
*/
#include "opt_acpi.h"
@@ -431,7 +431,6 @@
*/
sc->acpi_sleep_delay = 5;
sc->acpi_disable_on_poweroff = 1;
- sc->acpi_s4bios = 1;
if (bootverbose)
sc->acpi_verbose = 1;
if ((env = getenv("hw.acpi.verbose")) && strcmp(env, "0")) {
@@ -439,6 +438,10 @@
freeenv(env);
}
+ /* Only enable S4BIOS by default if the FACS says it is available. */
+ if (AcpiGbl_FACS->S4Bios_f != 0)
+ sc->acpi_s4bios = 1;
+
/*
* Dispatch the default sleep state to devices.
* TBD: should be configured from userland policy manager.
@@ -1980,10 +1983,12 @@
break;
}
state = *(int *)addr;
- if (state >= ACPI_STATE_S0 && state <= ACPI_S_STATES_MAX)
- acpi_SetSleepState(sc, state);
- else
+ if (state >= ACPI_STATE_S0 && state <= ACPI_S_STATES_MAX) {
+ if (ACPI_FAILURE(acpi_SetSleepState(sc, state)))
+ error = EINVAL;
+ } else {
error = EINVAL;
+ }
break;
default:
if (error == 0)
==== //depot/projects/uart/dev/acpica/acpi_acad.c#4 (text+ko) ====
@@ -23,7 +23,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: src/sys/dev/acpica/acpi_acad.c,v 1.17 2003/08/15 06:33:11 njl Exp $
+ * $FreeBSD: src/sys/dev/acpica/acpi_acad.c,v 1.18 2003/09/14 17:47:44 njl Exp $
*/
#include "opt_acpi.h"
@@ -117,7 +117,7 @@
device_t dev = context;
ACPI_VPRINT(dev, acpi_device_get_parent_softc(dev),
- "Notify %d\n", notify);
+ "Notify 0x%x\n", notify);
switch (notify) {
case ACPI_DEVICE_CHECK_PNP:
==== //depot/projects/uart/dev/acpica/acpi_cmbat.c#5 (text+ko) ====
@@ -25,7 +25,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: src/sys/dev/acpica/acpi_cmbat.c,v 1.23 2003/09/11 03:17:33 njl Exp $
+ * $FreeBSD: src/sys/dev/acpica/acpi_cmbat.c,v 1.24 2003/09/13 20:13:01 njl Exp $
*/
#include "opt_acpi.h"
@@ -264,7 +264,7 @@
goto end;
}
- PKG_GETINT(res, tmp, 0, sc->bif.unit, end);
+ PKG_GETINT(res, tmp, 0, sc->bif.units, end);
PKG_GETINT(res, tmp, 1, sc->bif.dcap, end);
PKG_GETINT(res, tmp, 2, sc->bif.lfcap, end);
PKG_GETINT(res, tmp, 3, sc->bif.btech, end);
@@ -404,7 +404,7 @@
case ACPIIO_CMBAT_GET_BIF:
acpi_cmbat_get_bif(dev);
bifp = &ioctl_arg->bif;
- bifp->unit = sc->bif.unit;
+ bifp->units = sc->bif.units;
bifp->dcap = sc->bif.dcap;
bifp->lfcap = sc->bif.lfcap;
bifp->btech = sc->bif.btech;
==== //depot/projects/uart/dev/acpica/acpi_ec.c#9 (text+ko) ====
@@ -25,7 +25,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: src/sys/dev/acpica/acpi_ec.c,v 1.39 2003/08/24 17:48:01 obrien Exp $
+ * $FreeBSD: src/sys/dev/acpica/acpi_ec.c,v 1.40 2003/09/15 21:20:55 njl Exp $
*/
/******************************************************************************
*
@@ -137,7 +137,7 @@
*****************************************************************************/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/acpica/acpi_ec.c,v 1.39 2003/08/24 17:48:01 obrien Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/acpica/acpi_ec.c,v 1.40 2003/09/15 21:20:55 njl Exp $");
#include "opt_acpi.h"
#include <sys/param.h>
@@ -283,7 +283,7 @@
#define EC_POLL_DELAY 1
/* Total time in ms spent in the poll loop waiting for a response. */
-#define EC_POLL_TIMEOUT 50
+#define EC_POLL_TIMEOUT 100
#define EVENT_READY(event, status) \
(((event) == EC_EVENT_OUTPUT_BUFFER_FULL && \
==== //depot/projects/uart/dev/acpica/acpiio.h#4 (text+ko) ====
@@ -24,7 +24,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: src/sys/dev/acpica/acpiio.h,v 1.8 2003/08/28 16:06:30 njl Exp $
+ * $FreeBSD: src/sys/dev/acpica/acpiio.h,v 1.9 2003/09/13 20:13:01 njl Exp $
*/
/*
@@ -50,10 +50,10 @@
#define ACPI_CMBAT_MAXSTRLEN 32
struct acpi_bif {
- u_int32_t unit; /* 0 for mWh, 1 for mAh */
+ u_int32_t units; /* 0 for mWh, 1 for mAh */
u_int32_t dcap; /* Design Capacity */
u_int32_t lfcap; /* Last Full capacity */
- u_int32_t btech; /* Battery Technorogy */
+ u_int32_t btech; /* Battery Technology */
u_int32_t dvol; /* Design voltage (mV) */
u_int32_t wcap; /* WARN capacity */
u_int32_t lcap; /* Low capacity */
==== //depot/projects/uart/dev/ath/if_ath.c#10 (text+ko) ====
@@ -35,7 +35,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/ath/if_ath.c,v 1.14 2003/09/05 22:22:49 sam Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/ath/if_ath.c,v 1.18 2003/09/15 22:34:46 sam Exp $");
/*
* Driver for the Atheros Wireless LAN controller.
@@ -114,6 +114,8 @@
static void ath_node_free(struct ieee80211com *, struct ieee80211_node *);
static void ath_node_copy(struct ieee80211com *,
struct ieee80211_node *, const struct ieee80211_node *);
+static u_int8_t ath_node_getrssi(struct ieee80211com *,
+ struct ieee80211_node *);
static int ath_rxbuf_init(struct ath_softc *, struct ath_buf *);
static void ath_rx_proc(void *, int);
static int ath_tx_start(struct ath_softc *, struct ieee80211_node *,
@@ -279,10 +281,7 @@
ic->ic_phytype = IEEE80211_T_OFDM;
ic->ic_opmode = IEEE80211_M_STA;
ic->ic_caps = IEEE80211_C_WEP | IEEE80211_C_IBSS | IEEE80211_C_HOSTAP
- | IEEE80211_C_MONITOR;
- /* NB: 11g support is identified when we fetch the channel set */
- if (sc->sc_have11g)
- ic->ic_caps |= IEEE80211_C_SHPREAMBLE;
+ | IEEE80211_C_MONITOR | IEEE80211_C_SHPREAMBLE;
/* get mac address from hardware */
ath_hal_getmac(ah, ic->ic_myaddr);
@@ -293,6 +292,7 @@
ic->ic_node_alloc = ath_node_alloc;
ic->ic_node_free = ath_node_free;
ic->ic_node_copy = ath_node_copy;
+ ic->ic_node_getrssi = ath_node_getrssi;
sc->sc_newstate = ic->ic_newstate;
ic->ic_newstate = ath_newstate;
/* complete initialization */
@@ -406,6 +406,7 @@
ath_hal_dumpstate(ah);
}
#endif /* AR_DEBUG */
+ status &= sc->sc_imask; /* discard unasked for bits */
if (status & HAL_INT_FATAL) {
sc->sc_stats.ast_hardware++;
ath_hal_intrset(ah, 0); /* disable intr's until reset */
@@ -765,13 +766,6 @@
}
}
- /*
- * TODO:
- * The duration field of 802.11 header should be filled.
- * XXX This may be done in the ieee80211 layer, but the upper
- * doesn't know the detail of parameters such as IFS
- * for now..
- */
if (ath_tx_start(sc, ni, bf, m)) {
bad:
mtx_lock(&sc->sc_txbuflock);
@@ -931,7 +925,8 @@
if (ic->ic_opmode != IEEE80211_M_HOSTAP &&
(ifp->if_flags & IFF_PROMISC))
rfilt |= HAL_RX_FILTER_PROM;
- if (ic->ic_state == IEEE80211_S_SCAN)
+ if (ic->ic_opmode == IEEE80211_M_STA ||
+ ic->ic_state == IEEE80211_S_SCAN)
rfilt |= HAL_RX_FILTER_BEACON;
ath_hal_setrxfilter(ah, rfilt);
@@ -1045,7 +1040,8 @@
capinfo = IEEE80211_CAPINFO_ESS;
if (ic->ic_flags & IEEE80211_F_WEPON)
capinfo |= IEEE80211_CAPINFO_PRIVACY;
- if (ic->ic_flags & IEEE80211_F_SHPREAMBLE)
+ if ((ic->ic_flags & IEEE80211_F_SHPREAMBLE) &&
+ IEEE80211_IS_CHAN_2GHZ(ni->ni_chan))
capinfo |= IEEE80211_CAPINFO_SHORT_PREAMBLE;
if (ic->ic_flags & IEEE80211_F_SHSLOT)
capinfo |= IEEE80211_CAPINFO_SHORT_SLOTTIME;
@@ -1395,7 +1391,14 @@
{
struct ath_node *an =
malloc(sizeof(struct ath_node), M_DEVBUF, M_NOWAIT | M_ZERO);
- return an ? &an->an_node : NULL;
+ if (an) {
+ int i;
+ for (i = 0; i < ATH_RHIST_SIZE; i++)
+ an->an_rx_hist[i].arh_ticks = ATH_RHIST_NOTIME;
+ an->an_rx_hist_next = ATH_RHIST_SIZE-1;
+ return &an->an_node;
+ } else
+ return NULL;
}
static void
@@ -1418,6 +1421,41 @@
*(struct ath_node *)dst = *(const struct ath_node *)src;
}
+
+static u_int8_t
+ath_node_getrssi(struct ieee80211com *ic, struct ieee80211_node *ni)
+{
+ struct ath_node *an = ATH_NODE(ni);
+ int i, now, nsamples, rssi;
+
+ /*
+ * Calculate the average over the last second of sampled data.
+ */
+ now = ticks;
+ nsamples = 0;
+ rssi = 0;
+ i = an->an_rx_hist_next;
+ do {
+ struct ath_recv_hist *rh = &an->an_rx_hist[i];
+ if (rh->arh_ticks == ATH_RHIST_NOTIME)
+ goto done;
+ if (now - rh->arh_ticks > hz)
+ goto done;
+ rssi += rh->arh_rssi;
+ nsamples++;
+ if (i == 0)
+ i = ATH_RHIST_SIZE-1;
+ else
+ i--;
+ } while (i != an->an_rx_hist_next);
+done:
+ /*
+ * Return either the average or the last known
+ * value if there is no recent data.
+ */
+ return (nsamples ? rssi / nsamples : an->an_rx_hist[i].arh_rssi);
+}
+
static int
ath_rxbuf_init(struct ath_softc *sc, struct ath_buf *bf)
{
@@ -1486,6 +1524,8 @@
struct mbuf *m;
struct ieee80211_frame *wh, whbuf;
struct ieee80211_node *ni;
+ struct ath_node *an;
+ struct ath_recv_hist *rh;
int len;
u_int phyerr;
HAL_STATUS status;
@@ -1528,7 +1568,7 @@
}
len = ds->ds_rxstat.rs_datalen;
- if (len < sizeof(struct ieee80211_frame)) {
+ if (len < IEEE80211_MIN_LEN) {
DPRINTF(("ath_rx_proc: short packet %d\n", len));
sc->sc_stats.ast_rx_tooshort++;
goto rx_next;
@@ -1537,18 +1577,6 @@
bus_dmamap_sync(sc->sc_dmat, bf->bf_dmamap,
BUS_DMASYNC_POSTREAD);
- wh = mtod(m, struct ieee80211_frame *);
- if ((wh->i_fc[0] & IEEE80211_FC0_TYPE_MASK) ==
- IEEE80211_FC0_TYPE_CTL &&
- ic->ic_opmode != IEEE80211_M_MONITOR) {
- /*
- * Discard control frame when not in monitor mode.
- */
- DPRINTF(("ath_rx_proc: control frame\n"));
- sc->sc_stats.ast_rx_ctl++;
- goto rx_next;
- }
-
bus_dmamap_unload(sc->sc_dmat, bf->bf_dmamap);
bf->bf_m = NULL;
m->m_pkthdr.rcvif = ifp;
@@ -1579,6 +1607,7 @@
}
m_adj(m, -IEEE80211_CRC_LEN);
+ wh = mtod(m, struct ieee80211_frame *);
if (wh->i_fc[1] & IEEE80211_FC1_WEP) {
/*
* WEP is decrypted by hardware. Clear WEP bit
@@ -1607,12 +1636,24 @@
ni = ieee80211_ref_node(ic->ic_bss);
} else
ni = ieee80211_ref_node(ic->ic_bss);
- ATH_NODE(ni)->an_rx_antenna = ds->ds_rxstat.rs_antenna;
+
+ /*
+ * Record driver-specific state.
+ */
+ an = ATH_NODE(ni);
+ if (++(an->an_rx_hist_next) == ATH_RHIST_SIZE)
+ an->an_rx_hist_next = 0;
+ rh = &an->an_rx_hist[an->an_rx_hist_next];
+ rh->arh_ticks = ticks;
+ rh->arh_rssi = ds->ds_rxstat.rs_rssi;
+ rh->arh_antenna = ds->ds_rxstat.rs_antenna;
+
/*
* Send frame up for processing.
*/
ieee80211_input(ifp, m, ni,
ds->ds_rxstat.rs_rssi, ds->ds_rxstat.rs_tstamp);
+
/*
* The frame may have caused the node to be marked for
* reclamation (e.g. in response to a DEAUTH message)
@@ -1797,7 +1838,8 @@
* use short preamble based on the current mode and
* negotiated parameters.
*/
- if (ic->ic_flags & IEEE80211_F_SHPREAMBLE) {
+ if ((ic->ic_flags & IEEE80211_F_SHPREAMBLE) &&
+ (ni->ni_capinfo & IEEE80211_CAPINFO_SHORT_PREAMBLE)) {
txrate = rt->info[rix].rateCode | rt->info[rix].shortPreamble;
shortPreamble = AH_TRUE;
sc->sc_stats.ast_tx_shortpre++;
@@ -1819,6 +1861,21 @@
}
/*
+ * Calculate duration. This logically belongs in the 802.11
+ * layer but it lacks sufficient information to calculate it.
+ */
+ if ((flags & HAL_TXDESC_NOACK) == 0 &&
+ (wh->i_fc[0] & IEEE80211_FC0_TYPE_MASK) != IEEE80211_FC0_TYPE_CTL) {
+ u_int16_t dur;
+ /*
+ * XXX not right with fragmentation.
+ */
+ dur = ath_hal_computetxtime(ah, rt, IEEE80211_ACK_SIZE,
+ rix, shortPreamble);
+ *((u_int16_t*) wh->i_dur) = htole16(dur);
+ }
+
+ /*
* Calculate RTS/CTS rate and duration if needed.
*/
ctsduration = 0;
@@ -1862,7 +1919,7 @@
if (an->an_tx_antenna)
antenna = an->an_tx_antenna;
else
- antenna = an->an_rx_antenna;
+ antenna = an->an_rx_hist[an->an_rx_hist_next].arh_antenna;
/*
* Formulate first tx descriptor with tx controls.
@@ -2291,11 +2348,13 @@
if (ic->ic_opmode != IEEE80211_M_HOSTAP &&
(ifp->if_flags & IFF_PROMISC))
rfilt |= HAL_RX_FILTER_PROM;
+ if (ic->ic_opmode == IEEE80211_M_STA ||
+ ic->ic_state == IEEE80211_S_SCAN)
+ rfilt |= HAL_RX_FILTER_BEACON;
if (nstate == IEEE80211_S_SCAN) {
callout_reset(&sc->sc_scan_ch, (hz * ath_dwelltime) / 1000,
ath_next_scan, sc);
bssid = ifp->if_broadcastaddr;
- rfilt |= HAL_RX_FILTER_BEACON;
} else {
callout_stop(&sc->sc_scan_ch);
bssid = ni->ni_bssid;
@@ -2395,7 +2454,6 @@
HAL_CHANNEL *chans;
int i, ix, nchan;
- sc->sc_have11g = 0;
chans = malloc(IEEE80211_CHAN_MAX * sizeof(HAL_CHANNEL),
M_TEMP, M_NOWAIT);
if (chans == NULL) {
@@ -2429,8 +2487,6 @@
/* channels overlap; e.g. 11g and 11b */
ic->ic_channels[ix].ic_flags |= c->channelFlags;
}
- if ((c->channelFlags & CHANNEL_G) == CHANNEL_G)
- sc->sc_have11g = 1;
}
free(chans, M_TEMP);
return 0;
==== //depot/projects/uart/dev/ath/if_athvar.h#6 (text+ko) ====
@@ -33,7 +33,7 @@
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGES.
*
- * $FreeBSD: src/sys/dev/ath/if_athvar.h,v 1.6 2003/09/05 22:22:49 sam Exp $
+ * $FreeBSD: src/sys/dev/ath/if_athvar.h,v 1.8 2003/09/15 22:34:46 sam Exp $
*/
/*
@@ -54,6 +54,14 @@
#define ATH_TXBUF 60 /* number of TX buffers */
#define ATH_TXDESC 8 /* number of descriptors per buffer */
+struct ath_recv_hist {
+ int arh_ticks; /* sample time by system clock */
+ u_int8_t arh_rssi; /* rssi */
+ u_int8_t arh_antenna; /* antenna */
+};
+#define ATH_RHIST_SIZE 16 /* number of samples */
+#define ATH_RHIST_NOTIME (~0)
+
/* driver-specific node */
struct ath_node {
struct ieee80211_node an_node; /* base class */
@@ -63,6 +71,8 @@
int an_tx_upper; /* tx upper rate req cnt */
u_int an_tx_antenna; /* antenna for last good frame */
u_int an_rx_antenna; /* antenna for last rcvd frame */
+ struct ath_recv_hist an_rx_hist[ATH_RHIST_SIZE];
+ u_int an_rx_hist_next;/* index of next ``free entry'' */
};
#define ATH_NODE(_n) ((struct ath_node *)(_n))
@@ -90,7 +100,6 @@
struct mtx sc_mtx; /* master lock (recursive) */
struct ath_hal *sc_ah; /* Atheros HAL */
unsigned int sc_invalid : 1,/* disable hardware accesses */
- sc_have11g : 1,/* have 11g support */
sc_doani : 1,/* dynamic noise immunity */
sc_probing : 1;/* probing AP on beacon miss */
/* rate tables */
==== //depot/projects/uart/dev/isp/isp.c#4 (text+ko) ====
@@ -1,4 +1,4 @@
-/* $FreeBSD: src/sys/dev/isp/isp.c,v 1.107 2003/08/25 17:58:23 mjacob Exp $ */
+/* $FreeBSD: src/sys/dev/isp/isp.c,v 1.108 2003/09/13 01:55:44 mjacob Exp $ */
/*
* Machine and OS Independent (well, as best as possible)
* code for the Qlogic ISP SCSI adapters.
@@ -1249,6 +1249,17 @@
icbp->icb_retry_delay = fcp->isp_retry_delay;
icbp->icb_retry_count = fcp->isp_retry_count;
icbp->icb_hardaddr = loopid;
+ if (icbp->icb_hardaddr >= 125) {
+ /*
+ * We end up with a Loop ID of 255 for F-Port topologies
+ */
+ if (icbp->icb_hardaddr != 255) {
+ isp_prt(isp, ISP_LOGERR,
+ "bad hard address %u- resetting to zero",
+ icbp->icb_hardaddr);
+ }
+ icbp->icb_hardaddr = 0;
+ }
/*
* Right now we just set extended options to prefer point-to-point
* over loop based upon some soft config options.
@@ -1371,7 +1382,13 @@
icbp->icb_fwoptions &= ~(ICBOPT_BOTH_WWNS|ICBOPT_FULL_LOGIN);
}
icbp->icb_rqstqlen = RQUEST_QUEUE_LEN(isp);
+ if (icbp->icb_rqstqlen < 1) {
+ isp_prt(isp, ISP_LOGERR, "bad request queue length");
+ }
icbp->icb_rsltqlen = RESULT_QUEUE_LEN(isp);
+ if (icbp->icb_rsltqlen < 1) {
+ isp_prt(isp, ISP_LOGERR, "bad result queue length");
+ }
icbp->icb_rqstaddr[RQRSP_ADDR0015] = DMA_WD0(isp->isp_rquest_dma);
icbp->icb_rqstaddr[RQRSP_ADDR1631] = DMA_WD1(isp->isp_rquest_dma);
icbp->icb_rqstaddr[RQRSP_ADDR3247] = DMA_WD2(isp->isp_rquest_dma);
@@ -3859,7 +3876,7 @@
}
/*
- * Free any dma resources. As a side effect, this may
+ * Free any DMA resources. As a side effect, this may
* also do any cache flushing necessary for data coherence. */
if (XS_XFRLEN(xs)) {
ISP_DMAFREE(isp, xs, sp->req_handle);
==== //depot/projects/uart/dev/isp/isp_freebsd.c#3 (text+ko) ====
@@ -26,7 +26,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/isp/isp_freebsd.c,v 1.91 2003/08/24 17:49:14 obrien Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/isp/isp_freebsd.c,v 1.93 2003/09/15 06:41:33 markm Exp $");
#include <dev/isp/isp_freebsd.h>
#include <sys/unistd.h>
@@ -39,6 +39,7 @@
MODULE_VERSION(isp, 1);
+MODULE_DEPEND(isp, cam, 1, 1, 1);
int isp_announced = 0;
ispfwfunc *isp_get_firmware_p = NULL;
@@ -399,8 +400,10 @@
hba->fc_scsi_supported = 1;
hba->fc_topology = FCPARAM(isp)->isp_topo + 1;
hba->fc_loopid = FCPARAM(isp)->isp_loopid;
- hba->active_node_wwn = FCPARAM(isp)->isp_nodewwn;
- hba->active_port_wwn = FCPARAM(isp)->isp_portwwn;
+ hba->nvram_node_wwn = FCPARAM(isp)->isp_nodewwn;
+ hba->nvram_port_wwn = FCPARAM(isp)->isp_portwwn;
+ hba->active_node_wwn = ISP_NODEWWN(isp);
+ hba->active_port_wwn = ISP_PORTWWN(isp);
ISP_UNLOCK(isp);
retval = 0;
break;
==== //depot/projects/uart/dev/isp/isp_freebsd.h#2 (text+ko) ====
@@ -1,4 +1,4 @@
-/* $FreeBSD: src/sys/dev/isp/isp_freebsd.h,v 1.71 2002/09/23 05:00:14 mjacob Exp $ */
+/* $FreeBSD: src/sys/dev/isp/isp_freebsd.h,v 1.72 2003/09/13 01:56:45 mjacob Exp $ */
/*
* Qlogic ISP SCSI Host Adapter FreeBSD Wrapper Definitions
* Copyright (c) 1997, 1998, 1999, 2000, 2001, 2002 by Matthew Jacob
@@ -76,8 +76,7 @@
#endif
#define HANDLE_LOOPSTATE_IN_OUTER_LAYERS 1
-/* turn this off for now */
-/* #define ISP_SMPLOCK 1 */
+#define ISP_SMPLOCK 1
#ifdef ISP_SMPLOCK
#define ISP_IFLAGS INTR_TYPE_CAM | INTR_ENTROPY | INTR_MPSAFE
==== //depot/projects/uart/dev/isp/isp_inline.h#2 (text+ko) ====
@@ -1,4 +1,4 @@
-/* $FreeBSD: src/sys/dev/isp/isp_inline.h,v 1.28 2002/09/23 05:00:37 mjacob Exp $ */
+/* $FreeBSD: src/sys/dev/isp/isp_inline.h,v 1.29 2003/09/13 01:57:31 mjacob Exp $ */
/*
* Qlogic Host Adapter Inline Functions
*
@@ -975,7 +975,7 @@
ISP_IOXPUT_16(isp, atsrc->at_rxid, &atdst->at_rxid);
ISP_IOXPUT_16(isp, atsrc->at_flags, &atdst->at_flags);
ISP_IOXPUT_16(isp, atsrc->at_status, &atdst->at_status);
- ISP_IOXPUT_8(isp, atsrc->at_reserved1, &atdst->at_reserved1);
+ ISP_IOXPUT_8(isp, atsrc->at_crn, &atdst->at_crn);
ISP_IOXPUT_8(isp, atsrc->at_taskcodes, &atdst->at_taskcodes);
ISP_IOXPUT_8(isp, atsrc->at_taskflags, &atdst->at_taskflags);
ISP_IOXPUT_8(isp, atsrc->at_execodes, &atdst->at_execodes);
@@ -1005,7 +1005,7 @@
ISP_IOXGET_16(isp, &atsrc->at_rxid, atdst->at_rxid);
ISP_IOXGET_16(isp, &atsrc->at_flags, atdst->at_flags);
ISP_IOXGET_16(isp, &atsrc->at_status, atdst->at_status);
- ISP_IOXGET_8(isp, &atsrc->at_reserved1, atdst->at_reserved1);
+ ISP_IOXGET_8(isp, &atsrc->at_crn, atdst->at_crn);
ISP_IOXGET_8(isp, &atsrc->at_taskcodes, atdst->at_taskcodes);
ISP_IOXGET_8(isp, &atsrc->at_taskflags, atdst->at_taskflags);
ISP_IOXGET_8(isp, &atsrc->at_execodes, atdst->at_execodes);
@@ -1193,7 +1193,6 @@
static INLINE void
isp_get_ctio2(struct ispsoftc *isp, ct2_entry_t *ctsrc, ct2_entry_t *ctdst)
{
- int i;
isp_copy_in_hdr(isp, &ctsrc->ct_header, &ctdst->ct_header);
ISP_IOXGET_16(isp, &ctsrc->ct_reserved, ctdst->ct_reserved);
ISP_IOXGET_16(isp, &ctsrc->ct_fwhandle, ctdst->ct_fwhandle);
@@ -1206,16 +1205,6 @@
ISP_IOXGET_16(isp, &ctsrc->ct_seg_count, ctdst->ct_seg_count);
ISP_IOXGET_32(isp, &ctsrc->ct_reloff, ctdst->ct_reloff);
ISP_IOXGET_32(isp, &ctsrc->ct_resid, ctdst->ct_resid);
- for (i = 0; i < 4; i++) {
- ISP_IOXGET_32(isp, &ctsrc->rsp.fw._reserved[i],
- ctdst->rsp.fw._reserved[i]);
- }
- ISP_IOXGET_16(isp, &ctsrc->rsp.fw.ct_scsi_status,
- ctdst->rsp.fw.ct_scsi_status);
- for (i = 0; i < QLTM_SENSELEN; i++) {
- ISP_IOXGET_8(isp, &ctsrc->rsp.fw.ct_sense[i],
- ctdst->rsp.fw.ct_sense[i]);
- }
}
static INLINE void
==== //depot/projects/uart/dev/isp/isp_target.c#2 (text+ko) ====
@@ -1,4 +1,4 @@
-/* $FreeBSD: src/sys/dev/isp/isp_target.c,v 1.26 2003/05/31 19:49:49 phk Exp $ */
+/* $FreeBSD: src/sys/dev/isp/isp_target.c,v 1.27 2003/09/13 01:58:26 mjacob Exp $ */
/*
* Machine and OS Independent Target Mode Code for the Qlogic SCSI/FC adapters.
*
@@ -363,7 +363,7 @@
return (-1);
}
- ISP_TDQE(isp, "isp_target_put_entry", (int) optr, ap);;
+ ISP_TDQE(isp, "isp_target_put_entry", (int) optr, ap);
ISP_ADD_REQUEST(isp, nxti);
return (0);
}
@@ -539,6 +539,11 @@
msg.nt_msg[0] = MSG_BUS_DEV_RESET;
(void) isp_async(isp, ISPASYNC_TARGET_MESSAGE, &msg);
break;
+ case ASYNC_CTIO_DONE:
+ evt.ev_bus = bus;
+ evt.ev_event = event;
+ (void) isp_async(isp, ISPASYNC_TARGET_EVENT, &evt);
+ return (0);
default:
isp_prt(isp, ISP_LOGERR,
"isp_target_async: unknown event 0x%x", event);
@@ -611,14 +616,18 @@
msg.nt_tagval = inp->in_seqid;
msg.nt_lun = lun;
- if (inp->in_task_flags & TASK_FLAGS_ABORT_TASK) {
- isp_prt(isp, ISP_LOGINFO, f1, "ABORT TASK",
+ if (inp->in_task_flags & TASK_FLAGS_ABORT_TASK_SET) {
+ isp_prt(isp, ISP_LOGINFO, f1, "ABORT TASK SET",
inp->in_iid, lun, inp->in_seqid);
- msg.nt_msg[0] = MSG_ABORT_TAG;
+ msg.nt_msg[0] = MSG_ABORT;
} else if (inp->in_task_flags & TASK_FLAGS_CLEAR_TASK_SET) {
isp_prt(isp, ISP_LOGINFO, f1, "CLEAR TASK SET",
inp->in_iid, lun, inp->in_seqid);
msg.nt_msg[0] = MSG_CLEAR_QUEUE;
+ } else if (inp->in_task_flags & TASK_FLAGS_LUN_RESET) {
+ isp_prt(isp, ISP_LOGINFO, f1, "LUN RESET",
+ inp->in_iid, lun, inp->in_seqid);
+ msg.nt_msg[0] = MSG_LUN_RESET;
} else if (inp->in_task_flags & TASK_FLAGS_TARGET_RESET) {
isp_prt(isp, ISP_LOGINFO, f1, "TARGET RESET",
inp->in_iid, lun, inp->in_seqid);
@@ -626,12 +635,7 @@
} else if (inp->in_task_flags & TASK_FLAGS_CLEAR_ACA) {
isp_prt(isp, ISP_LOGINFO, f1, "CLEAR ACA",
inp->in_iid, lun, inp->in_seqid);
- /* ???? */
msg.nt_msg[0] = MSG_REL_RECOVERY;
- } else if (inp->in_task_flags & TASK_FLAGS_TERMINATE_TASK) {
- isp_prt(isp, ISP_LOGINFO, f1, "TERMINATE TASK",
- inp->in_iid, lun, inp->in_seqid);
- msg.nt_msg[0] = MSG_TERM_IO_PROC;
} else {
isp_prt(isp, ISP_LOGWARN, f2, "task flag",
inp->in_status, lun, inp->in_iid,
@@ -1091,7 +1095,7 @@
/*
* CTIO rejected by the firmware - invalid data direction.
*/
- isp_prt(isp, ISP_LOGERR, "CTIO2 had wrong data directiond");
+ isp_prt(isp, ISP_LOGERR, "CTIO2 had wrong data direction");
break;
case CT_RSELTMO:
==== //depot/projects/uart/dev/isp/isp_target.h#2 (text+ko) ====
@@ -1,4 +1,4 @@
-/* $FreeBSD: src/sys/dev/isp/isp_target.h,v 1.20 2002/06/16 04:54:46 mjacob Exp $ */
+/* $FreeBSD: src/sys/dev/isp/isp_target.h,v 1.21 2003/09/13 01:58:26 mjacob Exp $ */
/*
* Qlogic Target Mode Structure and Flag Definitions
*
@@ -36,11 +36,8 @@
#ifndef _ISP_TARGET_H
#define _ISP_TARGET_H
-/*
- * Defines for all entry types
- */
+#define QLTM_SENSELEN 18 /* non-FC cards only */
#define QLTM_SVALID 0x80
-#define QLTM_SENSELEN 18
/*
* Structure for Enable Lun and Modify Lun queue entries
@@ -141,28 +138,33 @@
/*
* Values for the in_task_flags field- should only get one at a time!
*/
-#define TASK_FLAGS_ABORT_TASK (1<<9)
+#define TASK_FLAGS_CLEAR_ACA (1<<14)
+#define TASK_FLAGS_TARGET_RESET (1<<13)
+#define TASK_FLAGS_LUN_RESET (1<<12)
#define TASK_FLAGS_CLEAR_TASK_SET (1<<10)
-#define TASK_FLAGS_TARGET_RESET (1<<13)
-#define TASK_FLAGS_CLEAR_ACA (1<<14)
>>> TRUNCATED FOR MAIL (1000 lines) <<<
More information about the p4-projects
mailing list