PERFORCE change 101818 for review
Warner Losh
imp at FreeBSD.org
Mon Jul 17 23:12:37 UTC 2006
http://perforce.freebsd.org/chv.cgi?CH=101818
Change 101818 by imp at imp_harmony on 2006/07/17 23:12:09
IFC @101815
Affected files ...
.. //depot/projects/arm/src/sys/amd64/amd64/pmap.c#19 integrate
.. //depot/projects/arm/src/sys/arm/arm/vm_machdep.c#7 integrate
.. //depot/projects/arm/src/sys/arm/at91/if_ate.c#53 integrate
.. //depot/projects/arm/src/sys/arm/at91/kb920x_machdep.c#32 integrate
.. //depot/projects/arm/src/sys/arm/conf/KB920X#38 integrate
.. //depot/projects/arm/src/sys/conf/NOTES#27 integrate
.. //depot/projects/arm/src/sys/conf/files#38 integrate
.. //depot/projects/arm/src/sys/conf/files.ia64#7 integrate
.. //depot/projects/arm/src/sys/conf/kern.pre.mk#5 integrate
.. //depot/projects/arm/src/sys/conf/options#25 integrate
.. //depot/projects/arm/src/sys/dev/acpica/acpi_perf.c#6 integrate
.. //depot/projects/arm/src/sys/dev/amr/amr.c#11 integrate
.. //depot/projects/arm/src/sys/dev/isp/isp.c#8 integrate
.. //depot/projects/arm/src/sys/dev/isp/isp_freebsd.c#12 integrate
.. //depot/projects/arm/src/sys/dev/isp/isp_library.c#4 integrate
.. //depot/projects/arm/src/sys/dev/isp/isp_pci.c#11 integrate
.. //depot/projects/arm/src/sys/dev/isp/isp_sbus.c#7 integrate
.. //depot/projects/arm/src/sys/dev/isp/isp_target.c#6 integrate
.. //depot/projects/arm/src/sys/dev/lmc/if_lmc.c#4 integrate
.. //depot/projects/arm/src/sys/dev/mpt/mpt.c#17 integrate
.. //depot/projects/arm/src/sys/dev/mpt/mpt.h#17 integrate
.. //depot/projects/arm/src/sys/dev/mpt/mpt_cam.c#20 integrate
.. //depot/projects/arm/src/sys/dev/mpt/mpt_raid.c#8 integrate
.. //depot/projects/arm/src/sys/dev/mpt/mpt_raid.h#5 integrate
.. //depot/projects/arm/src/sys/dev/mxge/if_mxge.c#3 integrate
.. //depot/projects/arm/src/sys/dev/sio/sio.c#7 integrate
.. //depot/projects/arm/src/sys/dev/sound/driver.c#5 integrate
.. //depot/projects/arm/src/sys/dev/sound/pci/cmi.c#7 integrate
.. //depot/projects/arm/src/sys/dev/sound/pci/emu10k1.c#6 integrate
.. //depot/projects/arm/src/sys/dev/sound/pci/emu10kx-midi.c#1 branch
.. //depot/projects/arm/src/sys/dev/sound/pci/emu10kx-pcm.c#1 branch
.. //depot/projects/arm/src/sys/dev/sound/pci/emu10kx.c#1 branch
.. //depot/projects/arm/src/sys/dev/sound/pci/emu10kx.h#1 branch
.. //depot/projects/arm/src/sys/dev/sound/pcm/buffer.c#3 integrate
.. //depot/projects/arm/src/sys/dev/sound/pcm/buffer.h#2 integrate
.. //depot/projects/arm/src/sys/dev/sound/pcm/mixer.h#2 integrate
.. //depot/projects/arm/src/sys/dev/sound/pcm/sound.c#8 integrate
.. //depot/projects/arm/src/sys/dev/sound/pcm/sound.h#7 integrate
.. //depot/projects/arm/src/sys/dev/spibus/spi.h#3 integrate
.. //depot/projects/arm/src/sys/dev/spibus/spibusvar.h#3 integrate
.. //depot/projects/arm/src/sys/fs/devfs/devfs_devs.c#5 integrate
.. //depot/projects/arm/src/sys/fs/devfs/devfs_rule.c#5 integrate
.. //depot/projects/arm/src/sys/fs/devfs/devfs_vfsops.c#4 integrate
.. //depot/projects/arm/src/sys/fs/devfs/devfs_vnops.c#8 integrate
.. //depot/projects/arm/src/sys/fs/smbfs/smbfs_vfsops.c#5 integrate
.. //depot/projects/arm/src/sys/gnu/dev/sound/pci/emu10k1-ac97.h#2 delete
.. //depot/projects/arm/src/sys/gnu/dev/sound/pci/emu10k1-alsa.h#2 integrate
.. //depot/projects/arm/src/sys/gnu/dev/sound/pci/emu10k1.h#2 delete
.. //depot/projects/arm/src/sys/gnu/dev/sound/pci/p16v-alsa.h#1 branch
.. //depot/projects/arm/src/sys/gnu/dev/sound/pci/p17v-alsa.h#1 branch
.. //depot/projects/arm/src/sys/i386/i386/pmap.c#15 integrate
.. //depot/projects/arm/src/sys/ia64/conf/DEFAULTS#5 integrate
.. //depot/projects/arm/src/sys/kern/kern_mac.c#4 integrate
.. //depot/projects/arm/src/sys/kern/kern_uuid.c#3 integrate
.. //depot/projects/arm/src/sys/kern/uipc_socket.c#16 integrate
.. //depot/projects/arm/src/sys/kern/vfs_subr.c#21 integrate
.. //depot/projects/arm/src/sys/modules/sound/driver/Makefile#5 integrate
.. //depot/projects/arm/src/sys/modules/sound/driver/emu10kx/Makefile#1 branch
.. //depot/projects/arm/src/sys/net/if_spppsubr.c#4 integrate
.. //depot/projects/arm/src/sys/net/if_tap.c#6 integrate
.. //depot/projects/arm/src/sys/net80211/ieee80211_input.c#9 integrate
.. //depot/projects/arm/src/sys/net80211/ieee80211_ioctl.c#9 integrate
.. //depot/projects/arm/src/sys/netsmb/smb_conn.c#3 integrate
.. //depot/projects/arm/src/sys/security/mac/mac_vfs.c#4 integrate
.. //depot/projects/arm/src/sys/sys/libkern.h#3 integrate
.. //depot/projects/arm/src/sys/sys/mbuf.h#11 integrate
.. //depot/projects/arm/src/sys/sys/param.h#13 integrate
.. //depot/projects/arm/src/sys/vm/uma_core.c#7 integrate
.. //depot/projects/arm/src/sys/vm/vm_object.c#9 integrate
Differences ...
==== //depot/projects/arm/src/sys/amd64/amd64/pmap.c#19 (text+ko) ====
@@ -77,7 +77,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.565 2006/07/06 06:17:08 alc Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.566 2006/07/17 03:10:17 alc Exp $");
/*
* Manages physical address maps.
@@ -1627,6 +1627,7 @@
int idx, field, bit;
mtx_assert(&vm_page_queue_mtx, MA_OWNED);
+ PMAP_LOCK_ASSERT(pmap, MA_OWNED);
PV_STAT(pv_entry_frees++);
PV_STAT(pv_entry_spare++);
pv_entry_count--;
@@ -2015,8 +2016,8 @@
TAILQ_REMOVE(&m->md.pv_list, pv, pv_list);
m->md.pv_list_count--;
pmap_unuse_pt(pmap, pv->pv_va, ptepde);
+ free_pv_entry(pmap, pv);
PMAP_UNLOCK(pmap);
- free_pv_entry(pmap, pv);
}
vm_page_flag_clear(m, PG_WRITEABLE);
}
==== //depot/projects/arm/src/sys/arm/arm/vm_machdep.c#7 (text+ko) ====
@@ -41,7 +41,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/arm/vm_machdep.c,v 1.24 2006/06/05 23:42:47 cognet Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/arm/vm_machdep.c,v 1.26 2006/07/15 23:15:31 cognet Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -512,7 +512,7 @@
void *ret;
struct arm_small_page *sp, *tmp;
TAILQ_HEAD(,arm_small_page) *head;
- static int in_alloc;
+ static struct thread *in_alloc;
static int in_sleep;
int should_wakeup = 0;
@@ -532,12 +532,13 @@
if (!sp) {
/* No more free pages, need to alloc more. */
- if (!(wait & M_WAITOK)) {
+ if (!(wait & M_WAITOK) ||
+ in_alloc == curthread) {
mtx_unlock(&smallalloc_mtx);
*flags = UMA_SLAB_KMEM;
return ((void *)kmem_malloc(kmem_map, bytes, M_NOWAIT));
}
- if (in_alloc) {
+ if (in_alloc != NULL) {
/* Somebody else is already doing the allocation. */
in_sleep++;
msleep(&in_alloc, &smallalloc_mtx, PWAIT,
@@ -545,14 +546,14 @@
in_sleep--;
goto retry;
}
- in_alloc = 1;
+ in_alloc = curthread;
mtx_unlock(&smallalloc_mtx);
/* Try to alloc 1MB of contiguous memory. */
ret = arm_uma_do_alloc(&sp, bytes, zone == l2zone ?
SECTION_PT : SECTION_CACHE);
mtx_lock(&smallalloc_mtx);
- in_alloc = 0;
- if (in_sleep)
+ in_alloc = NULL;
+ if (in_sleep > 0)
should_wakeup = 1;
if (sp) {
for (int i = 0; i < (0x100000 / PAGE_SIZE) - 1;
==== //depot/projects/arm/src/sys/arm/at91/if_ate.c#53 (text+ko) ====
@@ -33,7 +33,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/at91/if_ate.c,v 1.8 2006/06/17 23:24:35 imp Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/at91/if_ate.c,v 1.9 2006/07/17 21:36:08 cognet Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -764,7 +764,7 @@
}
mdefrag = m_defrag(m, M_DONTWAIT);
if (mdefrag == NULL) {
- m_freem(m);
+ IFQ_DRV_PREPEND(&ifp->if_snd, m);
return;
}
m = mdefrag;
==== //depot/projects/arm/src/sys/arm/at91/kb920x_machdep.c#32 (text+ko) ====
@@ -48,7 +48,7 @@
#include "opt_at91.h"
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/at91/kb920x_machdep.c,v 1.10 2006/07/14 22:22:57 imp Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/at91/kb920x_machdep.c,v 1.12 2006/07/17 21:20:00 cognet Exp $");
#define _ARM32_BUS_DMA_PRIVATE
#include <sys/param.h>
@@ -159,6 +159,15 @@
VM_PROT_READ|VM_PROT_WRITE,
PTE_NOCACHE,
},
+ /*
+ * We can't just map the OHCI registers VA == PA, because
+ * AT91RM92_OHCI_BASE belongs to the userland address space.
+ * We could just choose a different virtual address, but a better
+ * solution would probably be to just use pmap_mapdev() to allocate
+ * KVA, as we don't need the OHCI controller before the vm
+ * initialization is done. However, the AT91 resource allocation
+ * system doesn't know how to use pmap_mapdev() yet.
+ */
#if 0
{
/*
@@ -225,7 +234,7 @@
/* PIOA's B periph: Turn USART 3's TX/RX pins */
at91_pio_use_periph_b(AT91RM92_PIOA_BASE, AT91C_PA6_RXD3, 0);
at91_pio_use_periph_b(AT91RM92_PIOA_BASE, AT91C_PA5_TXD3, 1);
-#if AT91_TSC
+#ifdef AT91_TSC
/* We're using TC0's A1 and A2 input */
at91_pio_use_periph_b(AT91RM92_PIOA_BASE,
AT91C_PA19_TIOA1 | AT91C_PA21_TIOA2, 0);
@@ -235,7 +244,7 @@
at91_pio_use_periph_a(AT91RM92_PIOB_BASE, AT91C_PB20_TXD1, 1);
/* Pin assignment */
-#if AT91_TSC
+#ifdef AT91_TSC
/* Assert PA24 low -- talk to rubidium */
at91_pio_use_gpio(AT91RM92_PIOA_BASE, AT91C_PIO_PA24);
at91_pio_gpio_output(AT91RM92_PIOA_BASE, AT91C_PIO_PA24, 0);
==== //depot/projects/arm/src/sys/arm/conf/KB920X#38 (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/arm/conf/KB920X,v 1.8 2006/07/14 15:20:31 imp Exp $
+# $FreeBSD: src/sys/arm/conf/KB920X,v 1.9 2006/07/17 21:17:20 cognet Exp $
machine arm
ident KB920X
@@ -95,6 +95,7 @@
device md
device at91_twi # TWI: Two Wire Interface
device at91_spi # SPI:
+device spibus
device at91_ssc
# iic
device iic
==== //depot/projects/arm/src/sys/conf/NOTES#27 (text+ko) ====
@@ -1,4 +1,4 @@
-# $FreeBSD: src/sys/conf/NOTES,v 1.1371 2006/07/10 05:25:18 thompsa Exp $
+# $FreeBSD: src/sys/conf/NOTES,v 1.1374 2006/07/17 09:07:01 phk Exp $
#
# NOTES -- Lines that can be cut/pasted into kernel and hints configs.
#
@@ -1787,8 +1787,7 @@
# the D-Link DFE-550TX.
# ti: Support for PCI gigabit ethernet NICs based on the Alteon Networks
# Tigon 1 and Tigon 2 chipsets. This includes the Alteon AceNIC, the
-# 3Com 3c985, the Netgear GA620 and various others. Note that you will
-# probably want to bump up NMBCLUSTERS a lot to use this driver.
+# 3Com 3c985, the Netgear GA620 and various others.
# tl: Support for the Texas Instruments TNETE100 series 'ThunderLAN'
# cards and integrated ethernet controllers. This includes several
# Compaq Netelligent 10/100 cards and the built-in ethernet controllers
@@ -1962,6 +1961,7 @@
# 4281)
# snd_ds1: Yamaha DS-1 PCI.
# snd_emu10k1: Creative EMU10K1 PCI and EMU10K2 (Audigy) PCI.
+# snd_emu10kx: Creative SoundBlaster Live! and Audigy
# snd_es137x: Ensoniq AudioPCI ES137x PCI.
# snd_ess: Ensoniq ESS ISA PnP/non-PnP, to be used in
# conjunction with snd_sbc.
@@ -1998,6 +1998,8 @@
device snd_csa
device snd_ds1
device snd_emu10k1
+device snd_emu10kx
+options SND_EMU10KX_MULTICHANNEL
device snd_es137x
device snd_ess
device snd_fm801
@@ -2594,8 +2596,6 @@
options NBUF=512 # Number of buffer headers
-options NMBCLUSTERS=1024 # Number of mbuf clusters
-
options SCSI_NCR_DEBUG
options SCSI_NCR_MAX_SYNC=10000
options SCSI_NCR_MAX_WIDE=1
@@ -2625,8 +2625,6 @@
##options BKTR_ALLOC_PAGES=(217*4+1)
options BROOKTREE_ALLOC_PAGES=(217*4+1)
options MAXFILES=999
-options NDEVFSINO=1025
-options NDEVFSOVERFLOW=32769
# Yet more undocumented options for linting.
options VGA_DEBUG
==== //depot/projects/arm/src/sys/conf/files#38 (text+ko) ====
@@ -1,4 +1,4 @@
-# $FreeBSD: src/sys/conf/files,v 1.1129 2006/07/14 22:50:46 imp Exp $
+# $FreeBSD: src/sys/conf/files,v 1.1130 2006/07/15 20:22:40 netchild Exp $
#
# The long compile-with and dependency lines are required because of
# limitations in config: backslash-newline doesn't work in strings, and
@@ -55,6 +55,21 @@
compile-with "CC='${CC}' AWK=${AWK} sh $S/tools/emu10k1-mkalsa.sh $S/gnu/dev/sound/pci/emu10k1-alsa.h emu10k1-alsa%diked.h" \
no-obj no-implicit-rule before-depend \
clean "emu10k1-alsa%diked.h"
+emu10k1-alsa%diked.h optional snd_emu10kx pci \
+ dependency "$S/tools/emu10k1-mkalsa.sh $S/gnu/dev/sound/pci/emu10k1-alsa.h" \
+ compile-with "CC='${CC}' AWK=${AWK} sh $S/tools/emu10k1-mkalsa.sh $S/gnu/dev/sound/pci/emu10k1-alsa.h emu10k1-alsa%diked.h" \
+ no-obj no-implicit-rule before-depend \
+ clean "emu10k1-alsa%diked.h"
+p16v-alsa%diked.h optional snd_emu10kx pci \
+ dependency "$S/tools/emu10k1-mkalsa.sh $S/gnu/dev/sound/pci/p16v-alsa.h" \
+ compile-with "CC='${CC}' AWK=${AWK} sh $S/tools/emu10k1-mkalsa.sh $S/gnu/dev/sound/pci/p16v-alsa.h p16v-alsa%diked.h" \
+ no-obj no-implicit-rule before-depend \
+ clean "p16v-alsa%diked.h"
+p17v-alsa%diked.h optional snd_emu10kx pci \
+ dependency "$S/tools/emu10k1-mkalsa.sh $S/gnu/dev/sound/pci/p17v-alsa.h" \
+ compile-with "CC='${CC}' AWK=${AWK} sh $S/tools/emu10k1-mkalsa.sh $S/gnu/dev/sound/pci/p17v-alsa.h p17v-alsa%diked.h" \
+ no-obj no-implicit-rule before-depend \
+ clean "p17v-alsa%diked.h"
miidevs.h optional miibus | mii \
dependency "$S/tools/miidevs2h.awk $S/dev/mii/miidevs" \
compile-with "${AWK} -f $S/tools/miidevs2h.awk $S/dev/mii/miidevs" \
@@ -873,6 +888,19 @@
dev/sound/pci/emu10k1.c optional snd_emu10k1 pci \
dependency "emu10k1-alsa%diked.h" \
warning "kernel contains GPL contaminated emu10k1 headers"
+dev/sound/pci/emu10kx.c optional snd_emu10kx pci \
+ dependency "emu10k1-alsa%diked.h" \
+ dependency "p16v-alsa%diked.h" \
+ dependency "p17v-alsa%diked.h" \
+ warning "kernel contains GPL contaminated emu10kx headers"
+dev/sound/pci/emu10kx-pcm.c optional snd_emu10kx pci \
+ dependency "emu10k1-alsa%diked.h" \
+ dependency "p16v-alsa%diked.h" \
+ dependency "p17v-alsa%diked.h" \
+ warning "kernel contains GPL contaminated emu10kx headers"
+dev/sound/pci/emu10kx-midi.c optional snd_emu10kx pci \
+ dependency "emu10k1-alsa%diked.h" \
+ warning "kernel contains GPL contaminated emu10kx headers"
dev/sound/pci/es137x.c optional snd_es137x pci
dev/sound/pci/fm801.c optional snd_fm801 pci
dev/sound/pci/ich.c optional snd_ich pci
==== //depot/projects/arm/src/sys/conf/files.ia64#7 (text+ko) ====
@@ -1,7 +1,7 @@
# This file tells config what files go into building a kernel,
# files marked standard are always included.
#
-# $FreeBSD: src/sys/conf/files.ia64,v 1.87 2006/06/29 19:59:16 marcel Exp $
+# $FreeBSD: src/sys/conf/files.ia64,v 1.88 2006/07/17 20:02:50 marcel Exp $
#
# The long compile-with and dependency lines are required because of
# limitations in config: backslash-newline doesn't work in strings, and
@@ -69,11 +69,6 @@
dev/syscons/syscons.c optional sc
dev/syscons/sysmouse.c optional sc
dev/uart/uart_cpu_ia64.c optional uart
-geom/geom_bsd.c standard
-geom/geom_bsd_enc.c standard
-geom/geom_gpt.c standard
-geom/geom_mbr.c standard
-geom/geom_mbr_enc.c standard
dev/acpica/acpi_if.m standard
ia64/acpica/OsdEnvironment.c optional acpi
ia64/acpica/acpi_machdep.c optional acpi
==== //depot/projects/arm/src/sys/conf/kern.pre.mk#5 (text+ko) ====
@@ -1,8 +1,13 @@
-# $FreeBSD: src/sys/conf/kern.pre.mk,v 1.75 2006/06/29 21:15:25 obrien Exp $
+# $FreeBSD: src/sys/conf/kern.pre.mk,v 1.76 2006/07/17 18:43:16 obrien Exp $
# Part of a unified Makefile for building kernels. This part contains all
# of the definitions that need to be before %BEFORE_DEPEND.
+SRCCONF?= /etc/src.conf
+.if exists(${SRCCONF})
+.include "${SRCCONF}"
+.endif
+
# Can be overridden by makeoptions or /etc/make.conf
KERNEL_KO?= kernel
KERNEL?= kernel
==== //depot/projects/arm/src/sys/conf/options#25 (text+ko) ====
@@ -1,4 +1,4 @@
-# $FreeBSD: src/sys/conf/options,v 1.550 2006/06/27 12:45:27 glebius Exp $
+# $FreeBSD: src/sys/conf/options,v 1.553 2006/07/17 09:07:01 phk Exp $
#
# On the handling of kernel options
#
@@ -257,7 +257,6 @@
HZ opt_param.h
MAXFILES opt_param.h
NBUF opt_param.h
-NMBCLUSTERS opt_param.h
NSFBUFS opt_param.h
VM_BCACHE_SIZE_MAX opt_param.h
VM_SWZONE_SIZE_MAX opt_param.h
@@ -624,10 +623,6 @@
DEV_ISA opt_isa.h
ISAPNP opt_isa.h
-# options for DEVFS, see sys/fs/devfs/devfs.h
-NDEVFSINO opt_devfs.h
-NDEVFSOVERFLOW opt_devfs.h
-
# various 'device presence' options.
DEV_BPF opt_bpf.h
DEV_MCA opt_mca.h
@@ -727,3 +722,6 @@
# XFS
XFS
+
+# snd_emu10kx sound driver options
+SND_EMU10KX_MULTICHANNEL opt_emu10kx.h
==== //depot/projects/arm/src/sys/dev/acpica/acpi_perf.c#6 (text+ko) ====
@@ -25,7 +25,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/acpica/acpi_perf.c,v 1.23 2005/12/12 11:15:20 bruno Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/acpica/acpi_perf.c,v 1.24 2006/07/15 17:34:03 bruno Exp $");
#include "opt_acpi.h"
#include <sys/param.h>
@@ -299,6 +299,12 @@
sc->px_states[count].core_freq >= 0xffff)
continue;
+ /* Check for duplicate entries */
+ if (count > 0 &&
+ sc->px_states[count - 1].core_freq ==
+ sc->px_states[count].core_freq)
+ continue;
+
count++;
}
sc->px_count = count;
==== //depot/projects/arm/src/sys/dev/amr/amr.c#11 (text+ko) ====
@@ -56,7 +56,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/amr/amr.c,v 1.78 2006/05/03 16:45:15 ambrisko Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/amr/amr.c,v 1.79 2006/07/17 19:45:47 jhb Exp $");
/*
* Driver for the AMI MegaRaid family of controllers.
@@ -1785,13 +1785,44 @@
}
}
+static void
+amr_setup_dmamap_cb(void *arg, bus_dma_segment_t *segs, int nsegments,
+ int error)
+{
+ struct amr_command *ac = (struct amr_command *)arg;
+ struct amr_softc *sc = ac->ac_sc;
+
+ amr_setup_dmamap(arg, segs, nsegments, error);
+
+ if (bus_dmamap_load(sc->amr_buffer_dmat, ac->ac_ccb_dmamap,
+ ac->ac_ccb_data, ac->ac_ccb_length, amr_setup_ccbmap, ac,
+ 0) == EINPROGRESS) {
+ sc->amr_state |= AMR_STATE_QUEUE_FRZN;
+ }
+}
+
+static void
+amr_setup_dma64map_cb(void *arg, bus_dma_segment_t *segs, int nsegments,
+ int error)
+{
+ struct amr_command *ac = (struct amr_command *)arg;
+ struct amr_softc *sc = ac->ac_sc;
+
+ amr_setup_dma64map(arg, segs, nsegments, error);
+
+ if (bus_dmamap_load(sc->amr_buffer64_dmat, ac->ac_ccb_dma64map,
+ ac->ac_ccb_data, ac->ac_ccb_length, amr_setup_ccb64map, ac,
+ 0) == EINPROGRESS) {
+ sc->amr_state |= AMR_STATE_QUEUE_FRZN;
+ }
+}
+
static int
amr_mapcmd(struct amr_command *ac)
{
bus_dma_tag_t tag;
- bus_dmamap_t datamap, ccbmap;
+ bus_dmamap_t datamap;
bus_dmamap_callback_t *cb;
- bus_dmamap_callback_t *ccb_cb;
struct amr_softc *sc = ac->ac_sc;
debug_called(3);
@@ -1799,35 +1830,22 @@
if (AC_IS_SG64(ac)) {
tag = sc->amr_buffer64_dmat;
datamap = ac->ac_dma64map;
- ccbmap = ac->ac_ccb_dma64map;
- cb = amr_setup_dma64map;
- ccb_cb = amr_setup_ccb64map;
+ cb = amr_setup_dma64map_cb;
} else {
tag = sc->amr_buffer_dmat;
datamap = ac->ac_dmamap;
- ccbmap = ac->ac_ccb_dmamap;
- cb = amr_setup_dmamap;
- ccb_cb = amr_setup_ccbmap;
+ cb = amr_setup_dmamap_cb;
}
/* if the command involves data at all, and hasn't been mapped */
if ((ac->ac_flags & AMR_CMD_MAPPED) == 0 && (ac->ac_data != NULL)) {
- if (ac->ac_ccb_data == NULL) {
- /* map the data buffers into bus space and build the s/g list */
- if (bus_dmamap_load(tag, datamap, ac->ac_data, ac->ac_length,
- amr_setup_data_dmamap, ac, 0) == EINPROGRESS) {
- sc->amr_state |= AMR_STATE_QUEUE_FRZN;
- }
- } else {
- if (bus_dmamap_load(tag, datamap, ac->ac_data, ac->ac_length,
- cb, ac, BUS_DMA_NOWAIT) != 0) {
- return (ENOMEM);
- }
- if (bus_dmamap_load(tag, ccbmap, ac->ac_ccb_data,
- ac->ac_ccb_length, ccb_cb, ac, 0) == EINPROGRESS) {
- sc->amr_state |= AMR_STATE_QUEUE_FRZN;
- }
- }
+ if (ac->ac_ccb_data == NULL)
+ cb = amr_setup_data_dmamap;
+ /* map the data buffers into bus space and build the s/g list */
+ if (bus_dmamap_load(tag, datamap, ac->ac_data, ac->ac_length,
+ cb, ac, 0) == EINPROGRESS) {
+ sc->amr_state |= AMR_STATE_QUEUE_FRZN;
+ }
} else {
if (sc->amr_submit_command(ac) == EBUSY) {
amr_freeslot(ac);
==== //depot/projects/arm/src/sys/dev/isp/isp.c#8 (text+ko) ====
@@ -1,7 +1,4 @@
/*-
- * Machine and OS Independent (well, as best as possible)
- * code for the Qlogic ISP SCSI adapters.
- *
* Copyright (c) 1997-2006 by Matthew Jacob
* All rights reserved.
*
@@ -28,14 +25,14 @@
*/
/*
+ * Machine and OS Independent (well, as best as possible)
+ * code for the Qlogic ISP SCSI adapters.
+ */
+/*
* Inspiration and ideas about this driver are from Erik Moe's Linux driver
* (qlogicisp.c) and Dave Miller's SBus version of same (qlogicisp.c). Some
* ideas dredged from the Solaris driver.
*/
-#ifdef __FreeBSD__
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/isp/isp.c,v 1.122 2006/07/14 05:14:48 mjacob Exp $");
-#endif
/*
* Include header file appropriate for platform we're building on.
@@ -44,6 +41,8 @@
#include <dev/ic/isp_netbsd.h>
#endif
#ifdef __FreeBSD__
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD: src/sys/dev/isp/isp.c,v 1.123 2006/07/16 20:11:49 mjacob Exp $");
#include <dev/isp/isp_freebsd.h>
#endif
#ifdef __OpenBSD__
@@ -166,7 +165,6 @@
char *btype = "????";
isp->isp_state = ISP_NILSTATE;
- MEMZERO(&mbs, sizeof (mbs));
/*
* Basic types (SCSI, FibreChannel and PCI or SBus)
@@ -205,6 +203,7 @@
* Just in case it was paused...
*/
ISP_WRITE(isp, HCCR, HCCR_CMD_RELEASE);
+ MEMZERO(&mbs, sizeof (mbs));
mbs.param[0] = MBOX_ABOUT_FIRMWARE;
isp_mboxcmd(isp, &mbs, MBLOGNONE);
if (mbs.param[0] == MBOX_COMMAND_COMPLETE) {
@@ -596,6 +595,7 @@
/*
* Do some sanity checking.
*/
+ MEMZERO(&mbs, sizeof (mbs));
mbs.param[0] = MBOX_NO_OP;
isp_mboxcmd(isp, &mbs, MBLOGALL);
if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
@@ -603,6 +603,7 @@
}
if (IS_SCSI(isp)) {
+ MEMZERO(&mbs, sizeof (mbs));
mbs.param[0] = MBOX_MAILBOX_REG_TEST;
mbs.param[1] = 0xdead;
mbs.param[2] = 0xbeef;
@@ -650,6 +651,7 @@
isp->isp_mbxworkp = &ptr[1];
isp->isp_mbxwrk0 = ptr[3] - 1;
isp->isp_mbxwrk1 = code_org + 1;
+ MEMZERO(&mbs, sizeof (mbs));
mbs.param[0] = MBOX_WRITE_RAM_WORD;
mbs.param[1] = code_org;
mbs.param[2] = ptr[0];
@@ -665,6 +667,7 @@
/*
* Verify that it downloaded correctly.
*/
+ MEMZERO(&mbs, sizeof (mbs));
mbs.param[0] = MBOX_VERIFY_CHECKSUM;
mbs.param[1] = code_org;
isp_mboxcmd(isp, &mbs, MBLOGNONE);
@@ -687,10 +690,11 @@
isp->isp_mbxwrk0 = ptr[3] - 1;
isp->isp_mbxwrk1 = ptr[5] + 1;
isp->isp_mbxwrk8 = ptr[4];
+ MEMZERO(&mbs, sizeof (mbs));
mbs.param[0] = MBOX_WRITE_RAM_WORD_EXTENDED;
- mbs.param[8] = ptr[4];
mbs.param[1] = ptr[5];
mbs.param[2] = ptr[0];
+ mbs.param[8] = ptr[4];
isp_mboxcmd(isp, &mbs, MBLOGNONE);
if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
isp_prt(isp, ISP_LOGERR,
@@ -703,10 +707,11 @@
isp->isp_mbxwrk0 = ptr[3] - 1;
isp->isp_mbxwrk1 = ptr[5] + 1;
isp->isp_mbxwrk8 = ptr[4];
+ MEMZERO(&mbs, sizeof (mbs));
mbs.param[0] = MBOX_WRITE_RAM_WORD_EXTENDED;
- mbs.param[8] = ptr[4];
mbs.param[1] = ptr[5];
mbs.param[2] = ptr[0];
+ mbs.param[8] = ptr[4];
isp_mboxcmd(isp, &mbs, MBLOGNONE);
if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
isp_prt(isp, ISP_LOGERR,
@@ -729,6 +734,7 @@
*/
+ MEMZERO(&mbs, sizeof (mbs));
mbs.param[0] = MBOX_EXEC_FIRMWARE;
mbs.param[1] = code_org;
if (IS_2322(isp) || IS_24XX(isp)) {
@@ -739,8 +745,8 @@
}
mbs.obits |= 2;
}
+ isp_mboxcmd(isp, &mbs, MBLOGNONE);
- isp_mboxcmd(isp, &mbs, MBLOGNONE);
/*
* Give it a chance to start.
*/
@@ -758,6 +764,7 @@
}
}
+ MEMZERO(&mbs, sizeof (mbs));
mbs.param[0] = MBOX_ABOUT_FIRMWARE;
isp_mboxcmd(isp, &mbs, MBLOGALL);
if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
@@ -785,6 +792,7 @@
isp->isp_fwrev[1] = mbs.param[2];
isp->isp_fwrev[2] = mbs.param[3];
}
+
isp_prt(isp, ISP_LOGCONFIG,
"Board Type %s, Chip Revision 0x%x, %s F/W Revision %d.%d.%d",
btype, isp->isp_revision, dodnld? "loaded" : "resident",
@@ -821,6 +829,7 @@
isp->isp_romfw_rev[2]);
}
+ MEMZERO(&mbs, sizeof (mbs));
mbs.param[0] = MBOX_GET_FIRMWARE_STATUS;
isp_mboxcmd(isp, &mbs, MBLOGALL);
if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
@@ -946,6 +955,7 @@
/*
* Set ASYNC DATA SETUP time. This is very important.
*/
+ MEMZERO(&mbs, sizeof (mbs));
mbs.param[0] = MBOX_SET_ASYNC_DATA_SETUP_TIME;
mbs.param[1] = sdp_chan0->isp_async_data_setup;
mbs.param[2] = sdp_chan1->isp_async_data_setup;
@@ -957,6 +967,7 @@
/*
* Set ACTIVE Negation State.
*/
+ MEMZERO(&mbs, sizeof (mbs));
mbs.param[0] = MBOX_SET_ACT_NEG_STATE;
mbs.param[1] =
(sdp_chan0->isp_req_ack_active_neg << 4) |
@@ -965,6 +976,7 @@
(sdp_chan1->isp_req_ack_active_neg << 4) |
(sdp_chan1->isp_data_line_active_neg << 5);
+ MEMZERO(&mbs, sizeof (mbs));
isp_mboxcmd(isp, &mbs, MBLOGNONE);
if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
isp_prt(isp, ISP_LOGERR,
@@ -981,6 +993,7 @@
/*
* Set the Tag Aging limit
*/
+ MEMZERO(&mbs, sizeof (mbs));
mbs.param[0] = MBOX_SET_TAG_AGE_LIMIT;
mbs.param[1] = sdp_chan0->isp_tag_aging;
mbs.param[2] = sdp_chan1->isp_tag_aging;
@@ -994,6 +1007,7 @@
/*
* Set selection timeout.
*/
+ MEMZERO(&mbs, sizeof (mbs));
mbs.param[0] = MBOX_SET_SELECT_TIMEOUT;
mbs.param[1] = sdp_chan0->isp_selection_timeout;
mbs.param[2] = sdp_chan1->isp_selection_timeout;
@@ -1012,6 +1026,7 @@
*/
if (IS_ULTRA2(isp) || IS_1240(isp)) {
+ MEMZERO(&mbs, sizeof (mbs));
mbs.param[0] = MBOX_INIT_RES_QUEUE_A64;
mbs.param[1] = RESULT_QUEUE_LEN(isp);
mbs.param[2] = DMA_WD1(isp->isp_result_dma);
@@ -1025,6 +1040,7 @@
}
isp->isp_residx = mbs.param[5];
+ MEMZERO(&mbs, sizeof (mbs));
mbs.param[0] = MBOX_INIT_REQ_QUEUE_A64;
mbs.param[1] = RQUEST_QUEUE_LEN(isp);
mbs.param[2] = DMA_WD1(isp->isp_rquest_dma);
@@ -1038,6 +1054,7 @@
}
isp->isp_reqidx = isp->isp_reqodx = mbs.param[4];
} else {
+ MEMZERO(&mbs, sizeof (mbs));
mbs.param[0] = MBOX_INIT_RES_QUEUE;
mbs.param[1] = RESULT_QUEUE_LEN(isp);
mbs.param[2] = DMA_WD1(isp->isp_result_dma);
@@ -1049,6 +1066,7 @@
}
isp->isp_residx = mbs.param[5];
+ MEMZERO(&mbs, sizeof (mbs));
mbs.param[0] = MBOX_INIT_REQ_QUEUE;
mbs.param[1] = RQUEST_QUEUE_LEN(isp);
mbs.param[2] = DMA_WD1(isp->isp_rquest_dma);
@@ -1070,6 +1088,7 @@
* to assume not for them.
*/
+ MEMZERO(&mbs, sizeof (mbs));
mbs.param[0] = MBOX_SET_FW_FEATURES;
mbs.param[1] = 0;
if (IS_ULTRA2(isp))
@@ -1153,6 +1172,7 @@
*/
sdp->isp_devparam[tgt].goal_flags = sdf = DPARM_DEFAULT;
#endif
+ MEMZERO(&mbs, sizeof (mbs));
mbs.param[0] = MBOX_SET_TARGET_PARAMS;
mbs.param[1] = (channel << 15) | (tgt << 8);
mbs.param[2] = sdf;
@@ -1170,6 +1190,7 @@
isp_mboxcmd(isp, &mbs, MBLOGNONE);
if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
sdf = DPARM_SAFE_DFLT;
+ MEMZERO(&mbs, sizeof (mbs));
mbs.param[0] = MBOX_SET_TARGET_PARAMS;
mbs.param[1] = (tgt << 8) | (channel << 15);
mbs.param[2] = sdf;
@@ -1193,6 +1214,7 @@
*/
sdp->isp_devparam[tgt].actv_flags = sdf & ~DPARM_TQING;
for (lun = 0; lun < (int) isp->isp_maxluns; lun++) {
+ MEMZERO(&mbs, sizeof (mbs));
mbs.param[0] = MBOX_SET_DEV_QUEUE_PARAMS;
mbs.param[1] = (channel << 15) | (tgt << 8) | lun;
mbs.param[2] = sdp->isp_max_queue_depth;
@@ -1395,7 +1417,6 @@
}
}
- MEMZERO(&mbs, sizeof (mbs));
/*
* For 22XX > 2.1.26 && 23XX, set some options.
@@ -1407,6 +1428,7 @@
* Turn on generate AE 8013 on all LIP Resets (2)
* Disable LIP F7 switching (8)
*/
+ MEMZERO(&mbs, sizeof (mbs));
mbs.param[0] = MBOX_SET_FIRMWARE_OPTIONS;
mbs.param[1] = 0xb;
mbs.param[2] = 0;
@@ -1466,14 +1488,15 @@
/*
* Init the firmware
*/
+ MEMZERO(&mbs, sizeof (mbs));
mbs.param[0] = MBOX_INIT_FIRMWARE;
- mbs.param[1] = 0;
mbs.param[2] = DMA_WD1(fcp->isp_scdma);
mbs.param[3] = DMA_WD0(fcp->isp_scdma);
- mbs.param[4] = 0;
- mbs.param[5] = 0;
mbs.param[6] = DMA_WD3(fcp->isp_scdma);
mbs.param[7] = DMA_WD2(fcp->isp_scdma);
+ isp_prt(isp, ISP_LOGDEBUG0, "INIT F/W from %p (%08x%08x)",
+ fcp->isp_scratch, (uint32_t) ((uint64_t)fcp->isp_scdma >> 32),
+ (uint32_t) fcp->isp_scdma);
MEMORYBARRIER(isp, SYNC_SFORDEV, 0, sizeof (*icbp));
isp_mboxcmd(isp, &mbs, MBLOGALL);
FC_SCRATCH_RELEASE(isp);
@@ -1505,16 +1528,8 @@
MEMZERO(&mbs, sizeof (mbs));
mbs.param[0] = MBOX_GET_FC_AL_POSITION_MAP;
- mbs.param[1] = 0;
mbs.param[2] = DMA_WD1(fcp->isp_scdma);
mbs.param[3] = DMA_WD0(fcp->isp_scdma);
- /*
- * Unneeded. For the 2100, except for initializing f/w, registers
- * 4/5 have to not be written to.
- * mbs.param[4] = 0;
- * mbs.param[5] = 0;
- *
- */
mbs.param[6] = DMA_WD3(fcp->isp_scdma);
mbs.param[7] = DMA_WD2(fcp->isp_scdma);
FC_SCRATCH_ACQUIRE(isp);
@@ -1556,13 +1571,6 @@
}
mbs.param[2] = DMA_WD1(fcp->isp_scdma);
mbs.param[3] = DMA_WD0(fcp->isp_scdma);
- /*
- * Unneeded. For the 2100, except for initializing f/w, registers
- * 4/5 have to not be written to.
- * mbs.param[4] = 0;
- * mbs.param[5] = 0;
- *
- */
mbs.param[6] = DMA_WD3(fcp->isp_scdma);
mbs.param[7] = DMA_WD2(fcp->isp_scdma);
FC_SCRATCH_ACQUIRE(isp);
@@ -1821,6 +1829,7 @@
fcp->isp_gbspeed = 1;
if (IS_23XX(isp)) {
+ MEMZERO(&mbs, sizeof (mbs));
mbs.param[0] = MBOX_GET_SET_DATA_RATE;
mbs.param[1] = MBGSD_GET_RATE;
/* mbs.param[2] undefined if we're just getting rate */
@@ -2056,8 +2065,6 @@
} else {
mbs.param[1] = lp->loopid << 8;
}
- mbs.param[2] = 0;
- mbs.param[3] = 0;
isp_mboxcmd(isp, &mbs, MBLOGNONE);
isp_prt(isp, ISP_LOGINFO, plogout,
(int) (lp - fcp->portdb), lp->loopid,
@@ -2505,6 +2512,7 @@
static int
isp_fabric_mbox_cmd(ispsoftc_t *isp, mbreg_t *mbp)
{
+ /* the caller sets up the mailbox */
isp_mboxcmd(isp, mbp, MBLOGNONE);
if (mbp->param[0] != MBOX_COMMAND_COMPLETE) {
if (FCPARAM(isp)->isp_loopstate == LOOP_SCANNING_FABRIC) {
@@ -3466,7 +3474,6 @@
* Issue a bus reset.
*/
mbs.param[0] = MBOX_BUS_RESET;
- mbs.param[2] = 0;
if (IS_SCSI(isp)) {
mbs.param[1] =
((sdparam *) isp->isp_param)->isp_bus_reset_delay;
@@ -3532,8 +3539,6 @@
} else {
mbs.param[1] = tgt << 8;
}
- mbs.param[4] = 0;
- mbs.param[5] = 0;
mbs.param[6] = XS_LUN(xs);
} else {
mbs.param[1] = tgt << 8 | XS_LUN(xs);
@@ -3542,7 +3547,6 @@
mbs.param[1] =
(bus << 15) | (XS_TGT(xs) << 8) | XS_LUN(xs);
}
- mbs.param[3] = 0;
mbs.param[2] = handle;
isp_mboxcmd(isp, &mbs, MBLOGALL & ~MBOX_COMMAND_ERROR);
if (mbs.param[0] == MBOX_COMMAND_COMPLETE) {
@@ -5316,7 +5320,7 @@
ISPOPMAP(0x07, 0x03), /* 0x5d: MBOX_GET_SET_DATA_RATE */
ISPOPMAP(0x00, 0x00), /* 0x5e: */
ISPOPMAP(0x00, 0x00), /* 0x5f: */
- ISPOPMAP(0xfd, 0x31), /* 0x60: MBOX_INIT_FIRMWARE */
+ ISPOPMAP(0xcd, 0x31), /* 0x60: MBOX_INIT_FIRMWARE */
ISPOPMAP(0x00, 0x00), /* 0x61: */
ISPOPMAP(0x01, 0x01), /* 0x62: MBOX_INIT_LIP */
ISPOPMAP(0xcd, 0x03), /* 0x63: MBOX_GET_FC_AL_POSITION_MAP */
@@ -5572,6 +5576,8 @@
for (box = 0; box < MAX_MAILBOX(isp); box++) {
if (ibits & (1 << box)) {
+ isp_prt(isp, ISP_LOGDEBUG1, "IN mbox %d = 0x%x", box,
+ mbp->param[box]);
ISP_WRITE(isp, MBOX_OFF(box), mbp->param[box]);
}
isp->isp_mboxtmp[box] = mbp->param[box] = 0;
@@ -5610,6 +5616,8 @@
for (box = 0; box < MAX_MAILBOX(isp); box++) {
if (obits & (1 << box)) {
mbp->param[box] = isp->isp_mboxtmp[box];
+ isp_prt(isp, ISP_LOGDEBUG1, "OUT mbox %d = 0x%x", box,
+ mbp->param[box]);
}
}
@@ -5734,7 +5742,6 @@
}
sdp = isp->isp_param;
sdp += bus;
- MEMZERO(&mbs, sizeof (mbs));
for (tgt = 0; tgt < MAX_TARGETS; tgt++) {
uint16_t flags, period, offset;
@@ -5754,6 +5761,8 @@
* current device state, get the current parameters.
*/
+ MEMZERO(&mbs, sizeof (mbs));
+
/*
* Refresh overrides set
*/
@@ -5780,9 +5789,7 @@
mbs.param[2] |= DPARM_PARITY;
}
- if ((mbs.param[2] & DPARM_SYNC) == 0) {
- mbs.param[3] = 0;
- } else {
+ if (mbs.param[2] & DPARM_SYNC) {
mbs.param[3] =
(sdp->isp_devparam[tgt].goal_offset << 8) |
(sdp->isp_devparam[tgt].goal_period);
@@ -5847,10 +5854,8 @@
isp_setdfltparm(ispsoftc_t *isp, int channel)
{
int tgt;
- mbreg_t mbs;
sdparam *sdp;
- MEMZERO(&mbs, sizeof (mbs));
if (IS_FC(isp)) {
fcparam *fcp = (fcparam *) isp->isp_param;
>>> TRUNCATED FOR MAIL (1000 lines) <<<
More information about the p4-projects
mailing list