PERFORCE change 53440 for review

Robert Watson rwatson at FreeBSD.org
Mon May 24 18:26:12 PDT 2004


http://perforce.freebsd.org/chv.cgi?CH=53440

Change 53440 by rwatson at rwatson_paprika on 2004/05/24 18:25:23

	Integrate netperf_socket forward to FreeBSD CVS HEAD.  Changes
	include:
	
	- bde fixes more of amd64 profiling
	- PCI changes to avoid writing to read-only registers.
	- ISP driver grows target mode.

Affected files ...

.. //depot/projects/netperf_socket/sys/amd64/amd64/apic_vector.S#4 integrate
.. //depot/projects/netperf_socket/sys/amd64/amd64/exception.S#4 integrate
.. //depot/projects/netperf_socket/sys/amd64/ia32/ia32_exception.S#3 integrate
.. //depot/projects/netperf_socket/sys/amd64/isa/atpic_vector.S#4 integrate
.. //depot/projects/netperf_socket/sys/conf/files.amd64#8 integrate
.. //depot/projects/netperf_socket/sys/dev/bge/if_bge.c#6 integrate
.. //depot/projects/netperf_socket/sys/dev/bge/if_bgereg.h#2 integrate
.. //depot/projects/netperf_socket/sys/dev/cp/if_cp.c#2 integrate
.. //depot/projects/netperf_socket/sys/dev/fxp/if_fxp.c#8 integrate
.. //depot/projects/netperf_socket/sys/dev/isp/isp.c#3 integrate
.. //depot/projects/netperf_socket/sys/dev/isp/isp_freebsd.c#3 integrate
.. //depot/projects/netperf_socket/sys/dev/isp/isp_inline.h#2 integrate
.. //depot/projects/netperf_socket/sys/dev/isp/isp_pci.c#4 integrate
.. //depot/projects/netperf_socket/sys/dev/isp/isp_target.c#3 integrate
.. //depot/projects/netperf_socket/sys/dev/isp/ispvar.h#4 integrate
.. //depot/projects/netperf_socket/sys/dev/musycc/musycc.c#3 integrate
.. //depot/projects/netperf_socket/sys/dev/pcf/pcf.c#1 branch
.. //depot/projects/netperf_socket/sys/dev/pci/pci.c#7 integrate
.. //depot/projects/netperf_socket/sys/dev/re/if_re.c#7 integrate
.. //depot/projects/netperf_socket/sys/i386/i386/mptable.c#3 integrate
.. //depot/projects/netperf_socket/sys/net/if_ef.c#2 integrate
.. //depot/projects/netperf_socket/sys/netgraph/ng_hole.c#3 integrate
.. //depot/projects/netperf_socket/sys/pci/if_rl.c#9 integrate
.. //depot/projects/netperf_socket/sys/pci/if_rlreg.h#2 integrate
.. //depot/projects/netperf_socket/sys/sys/mbuf.h#9 integrate

Differences ...

==== //depot/projects/netperf_socket/sys/amd64/amd64/apic_vector.S#4 (text+ko) ====

@@ -28,7 +28,7 @@
  * SUCH DAMAGE.
  *
  *	from: vector.s, 386BSD 0.1 unknown origin
- * $FreeBSD: src/sys/amd64/amd64/apic_vector.S,v 1.99 2004/05/23 16:23:29 bde Exp $
+ * $FreeBSD: src/sys/amd64/amd64/apic_vector.S,v 1.100 2004/05/24 12:08:56 bde Exp $
  */
 
 /*
@@ -129,7 +129,6 @@
 
 	iretq
 
-MCOUNT_LABEL(bintr2)
 	ISR_VEC(1, apic_isr1)
 	ISR_VEC(2, apic_isr2)
 	ISR_VEC(3, apic_isr3)
@@ -137,7 +136,6 @@
 	ISR_VEC(5, apic_isr5)
 	ISR_VEC(6, apic_isr6)
 	ISR_VEC(7, apic_isr7)
-MCOUNT_LABEL(eintr2)
 
 #ifdef SMP
 /*

==== //depot/projects/netperf_socket/sys/amd64/amd64/exception.S#4 (text+ko) ====

@@ -27,9 +27,12 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/amd64/amd64/exception.S,v 1.117 2004/05/23 17:18:48 bde Exp $
+ * $FreeBSD: src/sys/amd64/amd64/exception.S,v 1.119 2004/05/24 12:42:16 bde Exp $
  */
 
+#include "opt_atpic.h"
+#include "opt_ia32.h"
+
 #include <machine/asmacros.h>
 #include <machine/psl.h>
 #include <machine/trap.h>
@@ -294,8 +297,44 @@
 	MEXITCOUNT
 	jmp	doreti			/* Handle any ASTs */
 
+/*
+ * To efficiently implement classification of trap and interrupt handlers
+ * for profiling, there must be only trap handlers between the labels btrap
+ * and bintr, and only interrupt handlers between the labels bintr and
+ * eintr.  This is implemented (partly) by including files that contain
+ * some of the handlers.  Before including the files, set up a normal asm
+ * environment so that the included files doen't need to know that they are
+ * included.
+ */
+
+#ifdef IA32
+	.data
+	.p2align 4
+	.text
+	SUPERALIGN_TEXT
+
+#include <amd64/ia32/ia32_exception.S>
+#endif
+
+	.data
+	.p2align 4
+	.text
+	SUPERALIGN_TEXT
+MCOUNT_LABEL(bintr)
+
+#include <amd64/amd64/apic_vector.S>
+
+#ifdef DEV_ATPIC
 	.data
-	ALIGN_DATA
+	.p2align 4
+	.text
+	SUPERALIGN_TEXT
+
+#include <amd64/isa/atpic_vector.S>
+#endif
+
+	.text
+MCOUNT_LABEL(eintr)
 
 /*
  * void doreti(struct trapframe)
@@ -304,7 +343,6 @@
  */
 	.text
 	SUPERALIGN_TEXT
-	.globl	doreti
 	.type	doreti, at function
 doreti:
 	FAKE_MCOUNT($bintr)		/* init "from" bintr -> doreti */

==== //depot/projects/netperf_socket/sys/amd64/ia32/ia32_exception.S#3 (text+ko) ====

@@ -23,16 +23,13 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/amd64/ia32/ia32_exception.S,v 1.3 2004/05/23 19:06:15 bde Exp $
+ * $FreeBSD: src/sys/amd64/ia32/ia32_exception.S,v 1.4 2004/05/24 11:28:11 bde Exp $
  */
 
 #include <machine/asmacros.h>
 
 #include "assym.s"
 
-#define	IDTVEC(name)	ALIGN_TEXT; .globl __CONCAT(X,name); \
-			.type __CONCAT(X,name), at function; __CONCAT(X,name):
-
 	.text
 /*
  * Call gate entry for FreeBSD ELF and Linux/NetBSD syscall (int 0x80)

==== //depot/projects/netperf_socket/sys/amd64/isa/atpic_vector.S#4 (text+ko) ====

@@ -28,7 +28,7 @@
  * SUCH DAMAGE.
  *
  *	from: vector.s, 386BSD 0.1 unknown origin
- * $FreeBSD: src/sys/amd64/isa/atpic_vector.S,v 1.44 2004/05/23 16:23:29 bde Exp $
+ * $FreeBSD: src/sys/amd64/isa/atpic_vector.S,v 1.45 2004/05/24 12:08:56 bde Exp $
  */
 
 /*
@@ -72,7 +72,6 @@
 	MEXITCOUNT ;							\
 	jmp	doreti
 
-MCOUNT_LABEL(bintr)
 	INTR(0, atpic_intr0)
 	INTR(1, atpic_intr1)
 	INTR(2, atpic_intr2)
@@ -89,4 +88,3 @@
 	INTR(13, atpic_intr13)
 	INTR(14, atpic_intr14)
 	INTR(15, atpic_intr15)
-MCOUNT_LABEL(eintr)

==== //depot/projects/netperf_socket/sys/conf/files.amd64#8 (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.amd64,v 1.35 2004/05/23 18:38:27 bde Exp $
+# $FreeBSD: src/sys/conf/files.amd64,v 1.37 2004/05/24 12:08:56 bde Exp $
 #
 # The long compile-with and dependency lines are required because of
 # limitations in config: backslash-newline doesn't work in strings, and
@@ -41,7 +41,7 @@
 amd64/acpica/madt.c		optional	acpi
 amd64/amd64/amd64-gdbstub.c	optional	ddb
 amd64/amd64/amd64_mem.c		standard
-amd64/amd64/apic_vector.S	standard
+#amd64/amd64/apic_vector.S	standard
 amd64/amd64/atomic.c		standard
 amd64/amd64/autoconf.c		standard
 amd64/amd64/busdma_machdep.c	standard
@@ -69,8 +69,8 @@
 amd64/amd64/mptable.c		optional	mptable
 amd64/amd64/mptable_pci.c	optional	mptable pci
 amd64/amd64/nexus.c		standard
+amd64/amd64/pmap.c		standard
 amd64/amd64/prof_machdep.c	optional	profiling-routine
-amd64/amd64/pmap.c		standard
 amd64/amd64/sigtramp.S		standard
 amd64/amd64/support.S		standard
 amd64/amd64/sys_machdep.c	standard
@@ -80,7 +80,7 @@
 amd64/amd64/uma_machdep.c	standard
 amd64/amd64/vm_machdep.c	standard
 amd64/isa/atpic.c		optional	atpic isa
-amd64/isa/atpic_vector.S	optional	atpic isa
+#amd64/isa/atpic_vector.S	optional	atpic isa
 amd64/isa/clock.c		standard
 amd64/isa/elcr.c		standard
 amd64/isa/isa.c			standard
@@ -88,11 +88,11 @@
 amd64/isa/nmi.c			standard
 amd64/pci/pci_bus.c		optional	pci
 amd64/pci/pci_cfgreg.c		optional	pci
+crypto/blowfish/bf_enc.c	optional	crypto
 crypto/blowfish/bf_enc.c	optional	ipsec ipsec_esp
+crypto/des/des_ecb.c		optional	netsmbcrypto
+crypto/des/des_enc.c		optional	crypto
 crypto/des/des_enc.c		optional	ipsec ipsec_esp
-crypto/blowfish/bf_enc.c	optional	crypto
-crypto/des/des_enc.c		optional	crypto
-crypto/des/des_ecb.c		optional	netsmbcrypto
 crypto/des/des_enc.c		optional	netsmbcrypto
 crypto/des/des_setkey.c		optional	netsmbcrypto
 dev/fb/fb.c			optional	fb
@@ -140,7 +140,7 @@
 #
 # IA32 binary support
 #
-amd64/ia32/ia32_exception.S	optional	ia32
+#amd64/ia32/ia32_exception.S	optional	ia32
 amd64/ia32/ia32_signal.c	optional	ia32
 amd64/ia32/ia32_sigtramp.S	optional	ia32
 amd64/ia32/ia32_syscall.c	optional	ia32

==== //depot/projects/netperf_socket/sys/dev/bge/if_bge.c#6 (text+ko) ====

@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/bge/if_bge.c,v 1.67 2004/05/23 16:11:45 mux Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/bge/if_bge.c,v 1.68 2004/05/24 04:46:54 ps Exp $");
 
 /*
  * Broadcom BCM570x family gigabit ethernet driver for FreeBSD.
@@ -148,6 +148,8 @@
 		"Broadcom BCM5704S Dual Gigabit Ethernet" },
 	{ BCOM_VENDORID, BCOM_DEVICEID_BCM5705,
 		"Broadcom BCM5705 Gigabit Ethernet" },
+	{ BCOM_VENDORID, BCOM_DEVICEID_BCM5705K,
+		"Broadcom BCM5705K Gigabit Ethernet" },
 	{ BCOM_VENDORID, BCOM_DEVICEID_BCM5705M,
 		"Broadcom BCM5705M Gigabit Ethernet" },
 	{ BCOM_VENDORID, BCOM_DEVICEID_BCM5705M_ALT,

==== //depot/projects/netperf_socket/sys/dev/bge/if_bgereg.h#2 (text+ko) ====

@@ -30,7 +30,7 @@
  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
  * THE POSSIBILITY OF SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/dev/bge/if_bgereg.h,v 1.26 2004/01/08 17:19:11 wpaul Exp $
+ * $FreeBSD: src/sys/dev/bge/if_bgereg.h,v 1.27 2004/05/24 04:46:54 ps Exp $
  */
 
 /*
@@ -1819,6 +1819,7 @@
 #define BCOM_DEVICEID_BCM5704C		0x1648
 #define BCOM_DEVICEID_BCM5704S		0x16A8
 #define BCOM_DEVICEID_BCM5705		0x1653
+#define BCOM_DEVICEID_BCM5705K		0x1654
 #define BCOM_DEVICEID_BCM5705M		0x165D
 #define BCOM_DEVICEID_BCM5705M_ALT	0x165E
 #define BCOM_DEVICEID_BCM5782		0x1696

==== //depot/projects/netperf_socket/sys/dev/cp/if_cp.c#2 (text+ko) ====

@@ -22,7 +22,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/cp/if_cp.c,v 1.1 2004/05/05 16:11:45 rik Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/cp/if_cp.c,v 1.2 2004/05/24 19:39:56 jhb Exp $");
 
 #include <sys/param.h>
 
@@ -368,7 +368,7 @@
 #else
 	bd->board = b;
 	b->sys = bd;
-	rid = PCIR_MAPS;
+	rid = PCIR_BAR(0);
 	bd->cp_res = bus_alloc_resource (dev, SYS_RES_MEMORY, &rid,
 			0, ~0, 1, RF_ACTIVE);
 	if (! bd->cp_res) {
@@ -384,7 +384,7 @@
 	if (res) {
 		printf ("cp%d: can't init, error code:%x\n", unit, res);
 #if __FreeBSD_version >= 400000
-		bus_release_resource (dev, SYS_RES_MEMORY, PCIR_MAPS, bd->cp_res);
+		bus_release_resource (dev, SYS_RES_MEMORY, PCIR_BAR(0), bd->cp_res);
 #endif
 		free (b, M_DEVBUF);
 		splx (s);
@@ -418,7 +418,7 @@
        	if (! bd->cp_irq) {
 		printf ("cp%d: cannot map interrupt\n", unit);
 		bus_release_resource (dev, SYS_RES_MEMORY,
-				PCIR_MAPS, bd->cp_res);
+				PCIR_BAR(0), bd->cp_res);
 		free (b, M_DEVBUF);
 		splx (s);
 		return (ENXIO);
@@ -428,7 +428,7 @@
 	if (error) {
 		printf ("cp%d: cannot set up irq\n", unit);
 		bus_release_resource (dev, SYS_RES_MEMORY,
-				PCIR_MAPS, bd->cp_res);
+				PCIR_BAR(0), bd->cp_res);
 		bus_release_resource (dev, SYS_RES_IRQ, 0, bd->cp_irq);
 		free (b, M_DEVBUF);
 		splx (s);
@@ -601,7 +601,7 @@
 	bus_teardown_intr (dev, bd->cp_irq, bd->cp_intrhand);
 	bus_deactivate_resource (dev, SYS_RES_IRQ, 0, bd->cp_irq);
 	bus_release_resource (dev, SYS_RES_IRQ, 0, bd->cp_irq);
-	bus_release_resource (dev, SYS_RES_MEMORY, PCIR_MAPS, bd->cp_res);
+	bus_release_resource (dev, SYS_RES_MEMORY, PCIR_BAR(0), bd->cp_res);
 	cp_led_off (b);
 	if (led_timo[b->num].callout)
 		untimeout (cp_led_off, b, led_timo[b->num]);

==== //depot/projects/netperf_socket/sys/dev/fxp/if_fxp.c#8 (text+ko) ====

@@ -28,7 +28,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/fxp/if_fxp.c,v 1.207 2004/05/23 21:05:07 yar Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/fxp/if_fxp.c,v 1.208 2004/05/24 18:31:56 mux Exp $");
 
 /*
  * Intel EtherExpress Pro/100B PCI Fast Ethernet driver
@@ -864,8 +864,8 @@
 	int i;
 
 	mtx_assert(&sc->sc_mtx, MA_NOTOWNED);
-	if (sc->ih)
-		panic("fxp_release() called with intr handle still active");
+	KASSERT(sc->ih == NULL,
+	    ("fxp_release() called with intr handle still active"));
 	if (sc->miibus)
 		device_delete_child(sc->dev, sc->miibus);
 	bus_generic_detach(sc->dev);

==== //depot/projects/netperf_socket/sys/dev/isp/isp.c#3 (text+ko) ====

@@ -1,4 +1,4 @@
-/* $FreeBSD: src/sys/dev/isp/isp.c,v 1.110 2004/02/07 03:42:17 mjacob Exp $ */
+/* $FreeBSD: src/sys/dev/isp/isp.c,v 1.111 2004/05/24 07:02:24 njl Exp $ */
 /*
  * Machine and OS Independent (well, as best as possible)
  * code for the Qlogic ISP SCSI adapters.
@@ -5843,7 +5843,7 @@
 isp_reinit(struct ispsoftc *isp)
 {
 	XS_T *xs;
-	u_int16_t handle;
+	int i;
 
 	if (IS_FC(isp)) {
 		isp_mark_getpdb_all(isp);
@@ -5863,11 +5863,13 @@
 	}
 	isp->isp_nactive = 0;
 
-	for (handle = 1; (int) handle <= isp->isp_maxcmds; handle++) {
-		xs = isp_find_xs(isp, handle);
+	for (i = 0; i < isp->isp_maxcmds; i++) {
+		u_int16_t handle;
+		xs = isp->isp_xflist[i];
 		if (xs == NULL) {
 			continue;
 		}
+		handle = isp_index_handle(i);
 		isp_destroy_handle(isp, handle);
 		if (XS_XFRLEN(xs)) {
 			ISP_DMAFREE(isp, xs, handle);

==== //depot/projects/netperf_socket/sys/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.100 2004/02/21 21:10:43 phk Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/isp/isp_freebsd.c,v 1.101 2004/05/24 07:02:25 njl Exp $");
 
 #include <dev/isp/isp_freebsd.h>
 #include <sys/unistd.h>
@@ -545,6 +545,7 @@
 static int isp_handle_platform_atio(struct ispsoftc *, at_entry_t *);
 static int isp_handle_platform_atio2(struct ispsoftc *, at2_entry_t *);
 static int isp_handle_platform_ctio(struct ispsoftc *, void *);
+static void isp_handle_platform_ctio_fastpost(struct ispsoftc *, u_int32_t);
 static int isp_handle_platform_notify_scsi(struct ispsoftc *, in_entry_t *);
 static int isp_handle_platform_notify_fc(struct ispsoftc *, in_fcentry_t *);
 
@@ -1272,7 +1273,7 @@
 		hp = &cto->ct_syshandle;
 	}
 
-	if (isp_save_xs(isp, (XS_T *)ccb, hp)) {
+	if (isp_save_xs_tgt(isp, ccb, hp)) {
 		xpt_print_path(ccb->ccb_h.path);
 		printf("No XFLIST pointers for isp_target_start_ctio\n");
 		return (CAM_RESRC_UNAVAIL);
@@ -1297,11 +1298,11 @@
 
 	case CMD_EAGAIN:
 		ccb->ccb_h.status = CAM_RESRC_UNAVAIL;
-		isp_destroy_handle(isp, save_handle);
+		isp_destroy_tgt_handle(isp, save_handle);
 		return (CAM_RESRC_UNAVAIL);
 
 	default:
-		isp_destroy_handle(isp, save_handle);
+		isp_destroy_tgt_handle(isp, save_handle);
 		return (XS_ERR(ccb));
 	}
 }
@@ -1637,9 +1638,9 @@
 	 * CTIO and CTIO2 are close enough....
 	 */
 
-	ccb = (union ccb *) isp_find_xs(isp, ((ct_entry_t *)arg)->ct_syshandle);
+	ccb = isp_find_xs_tgt(isp, ((ct_entry_t *)arg)->ct_syshandle);
 	KASSERT((ccb != NULL), ("null ccb in isp_handle_platform_ctio"));
-	isp_destroy_handle(isp, ((ct_entry_t *)arg)->ct_syshandle);
+	isp_destroy_tgt_handle(isp, ((ct_entry_t *)arg)->ct_syshandle);
 
 	if (IS_FC(isp)) {
 		ct2_entry_t *ct = arg;
@@ -1734,6 +1735,19 @@
 	return (0);
 }
 
+static void
+isp_handle_platform_ctio_fastpost(struct ispsoftc *isp, u_int32_t token)
+{
+	union ccb *ccb;
+	ccb = isp_find_xs_tgt(isp, token & 0xffff);
+	KASSERT((ccb != NULL),
+	    ("null ccb in isp_handle_platform_ctio_fastpost"));
+	isp_destroy_tgt_handle(isp, token & 0xffff);
+	isp_prt(isp, ISP_LOGTDEBUG1, "CTIOx[%x] fastpost complete",
+	    token & 0xffff);
+	isp_complete_ctio(ccb);
+}
+
 static int
 isp_handle_platform_notify_scsi(struct ispsoftc *isp, in_entry_t *inp)
 {
@@ -3019,6 +3033,15 @@
 	case ISPASYNC_TARGET_EVENT:
 	{
 		tmd_event_t *ep = arg;
+		if (ep->ev_event == ASYNC_CTIO_DONE) {
+			/*
+			 * ACK the interrupt first
+			 */
+			ISP_WRITE(isp, BIU_SEMA, 0);
+			ISP_WRITE(isp, HCCR, HCCR_CMD_CLEAR_RISC_INT);
+			isp_handle_platform_ctio_fastpost(isp, ep->ev_bus);
+			break;
+		}
 		isp_prt(isp, ISP_LOGALL,
 		    "bus %d event code 0x%x", ep->ev_bus, ep->ev_event);
 		break;

==== //depot/projects/netperf_socket/sys/dev/isp/isp_inline.h#2 (text+ko) ====

@@ -1,4 +1,4 @@
-/* $FreeBSD: src/sys/dev/isp/isp_inline.h,v 1.29 2003/09/13 01:57:31 mjacob Exp $ */
+/* $FreeBSD: src/sys/dev/isp/isp_inline.h,v 1.30 2004/05/24 07:02:25 njl Exp $ */
 /*
  * Qlogic Host Adapter Inline Functions
  *
@@ -43,8 +43,8 @@
 static INLINE XS_T *isp_find_xs(struct ispsoftc *, u_int16_t);
 static INLINE u_int16_t isp_find_handle(struct ispsoftc *, XS_T *);
 static INLINE int isp_handle_index(u_int16_t);
+static INLINE u_int16_t isp_index_handle(int);
 static INLINE void isp_destroy_handle(struct ispsoftc *, u_int16_t);
-static INLINE void isp_remove_handle(struct ispsoftc *, XS_T *);
 
 static INLINE int
 isp_save_xs(struct ispsoftc *isp, XS_T *xs, u_int16_t *handlep)
@@ -100,19 +100,76 @@
 	return (handle-1);
 }
 
+static INLINE u_int16_t
+isp_index_handle(int index)
+{
+	return (index+1);
+}
+
 static INLINE void
 isp_destroy_handle(struct ispsoftc *isp, u_int16_t handle)
 {
 	if (handle > 0 && handle <= (u_int16_t) isp->isp_maxcmds) {
-		isp->isp_xflist[isp_handle_index(handle)] = NULL;
+		isp->isp_xflist[handle - 1] = NULL;
+	}
+}
+
+#ifdef	ISP_TARGET_MODE
+static INLINE int isp_save_xs_tgt(struct ispsoftc *, void *, u_int16_t *);
+static INLINE void *isp_find_xs_tgt(struct ispsoftc *, u_int16_t);
+static INLINE void isp_destroy_tgt_handle(struct ispsoftc *, u_int16_t);
+
+static INLINE int
+isp_save_xs_tgt(struct ispsoftc *isp, void *xs, u_int16_t *handlep)
+{
+	int i;
+
+	for (i = 0; i < (int) isp->isp_maxcmds; i++) {
+		if (isp->isp_tgtlist[i] == NULL) {
+			break;
+		}
+	}
+	if (i == isp->isp_maxcmds) {
+		return (-1);
+	}
+	isp->isp_tgtlist[i] = xs;
+	*handlep = i+1;
+	return (0);
+}
+
+static INLINE void *
+isp_find_xs_tgt(struct ispsoftc *isp, u_int16_t handle)
+{
+	if (handle < 1 || handle > (u_int16_t) isp->isp_maxcmds) {
+		return (NULL);
+	} else {
+		return (isp->isp_tgtlist[handle - 1]);
+	}
+}
+
+static INLINE u_int16_t
+isp_find_tgt_handle(struct ispsoftc *isp, void *xs)
+{
+	int i;
+	if (xs != NULL) {
+		for (i = 0; i < isp->isp_maxcmds; i++) {
+			if (isp->isp_tgtlist[i] == xs) {
+				return ((u_int16_t) i+1);
+			}
+		}
 	}
+	return (0);
 }
 
 static INLINE void
-isp_remove_handle(struct ispsoftc *isp, XS_T *xs)
+isp_destroy_tgt_handle(struct ispsoftc *isp, u_int16_t handle)
 {
-	isp_destroy_handle(isp, isp_find_handle(isp, xs));
+	if (handle > 0 && handle <= (u_int16_t) isp->isp_maxcmds) {
+		isp->isp_tgtlist[handle - 1] = NULL;
+	}
 }
+#endif
+
 
 static INLINE int
 isp_getrqentry(struct ispsoftc *, u_int16_t *, u_int16_t *, void **);

==== //depot/projects/netperf_socket/sys/dev/isp/isp_pci.c#4 (text+ko) ====

@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/isp/isp_pci.c,v 1.97 2004/03/17 17:50:36 njl Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/isp/isp_pci.c,v 1.98 2004/05/24 07:02:25 njl Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -1113,11 +1113,23 @@
 		ISP_LOCK(isp);
 		return (1);
 	}
+#ifdef	ISP_TARGET_MODE
+	len = sizeof (void **) * isp->isp_maxcmds;
+	isp->isp_tgtlist = (void **) malloc(len, M_DEVBUF, M_WAITOK | M_ZERO);
+	if (isp->isp_tgtlist == NULL) {
+		isp_prt(isp, ISP_LOGERR, "cannot alloc tgtlist array");
+		ISP_LOCK(isp);
+		return (1);
+	}
+#endif
 	len = sizeof (bus_dmamap_t) * isp->isp_maxcmds;
 	pcs->dmaps = (bus_dmamap_t *) malloc(len, M_DEVBUF,  M_WAITOK);
 	if (pcs->dmaps == NULL) {
 		isp_prt(isp, ISP_LOGERR, "can't alloc dma map storage");
 		free(isp->isp_xflist, M_DEVBUF);
+#ifdef	ISP_TARGET_MODE
+		free(isp->isp_tgtlist, M_DEVBUF);
+#endif
 		ISP_LOCK(isp);
 		return (1);
 	}
@@ -1139,6 +1151,9 @@
 		    "cannot create a dma tag for control spaces");
 		free(pcs->dmaps, M_DEVBUF);
 		free(isp->isp_xflist, M_DEVBUF);
+#ifdef	ISP_TARGET_MODE
+		free(isp->isp_tgtlist, M_DEVBUF);
+#endif
 		ISP_LOCK(isp);
 		return (1);
 	}
@@ -1149,6 +1164,9 @@
 		    "cannot allocate %d bytes of CCB memory", len);
 		bus_dma_tag_destroy(isp->isp_cdmat);
 		free(isp->isp_xflist, M_DEVBUF);
+#ifdef	ISP_TARGET_MODE
+		free(isp->isp_tgtlist, M_DEVBUF);
+#endif
 		free(pcs->dmaps, M_DEVBUF);
 		ISP_LOCK(isp);
 		return (1);
@@ -1189,6 +1207,9 @@
 	bus_dmamem_free(isp->isp_cdmat, base, isp->isp_cdmap);
 	bus_dma_tag_destroy(isp->isp_cdmat);
 	free(isp->isp_xflist, M_DEVBUF);
+#ifdef	ISP_TARGET_MODE
+	free(isp->isp_tgtlist, M_DEVBUF);
+#endif
 	free(pcs->dmaps, M_DEVBUF);
 	ISP_LOCK(isp);
 	isp->isp_rquest = NULL;

==== //depot/projects/netperf_socket/sys/dev/isp/isp_target.c#3 (text+ko) ====

@@ -1,4 +1,4 @@
-/* $FreeBSD: src/sys/dev/isp/isp_target.c,v 1.29 2004/01/29 06:36:30 mjacob Exp $ */
+/* $FreeBSD: src/sys/dev/isp/isp_target.c,v 1.30 2004/05/24 07:02:25 njl Exp $ */
 /*
  * Machine and OS Independent Target Mode Code for the Qlogic SCSI/FC adapters.
  *
@@ -882,7 +882,7 @@
 	char *fmsg = NULL;
 
 	if (ct->ct_syshandle) {
-		xs = isp_find_xs(isp, ct->ct_syshandle);
+		xs = isp_find_xs_tgt(isp, ct->ct_syshandle);
 		if (xs == NULL)
 			pl = ISP_LOGALL;
 	} else {
@@ -1042,7 +1042,7 @@
 	char *fmsg = NULL;
 
 	if (ct->ct_syshandle) {
-		xs = isp_find_xs(isp, ct->ct_syshandle);
+		xs = isp_find_xs_tgt(isp, ct->ct_syshandle);
 		if (xs == NULL)
 			pl = ISP_LOGALL;
 	} else {

==== //depot/projects/netperf_socket/sys/dev/isp/ispvar.h#4 (text+ko) ====

@@ -1,4 +1,4 @@
-/* $FreeBSD: src/sys/dev/isp/ispvar.h,v 1.65 2004/03/12 21:45:27 trhodes Exp $ */
+/* $FreeBSD: src/sys/dev/isp/ispvar.h,v 1.66 2004/05/24 07:02:25 njl Exp $ */
 /*
  * Soft Definitions for for Qlogic ISP SCSI adapters.
  *
@@ -54,7 +54,7 @@
 #endif
 
 #define	ISP_CORE_VERSION_MAJOR	2
-#define	ISP_CORE_VERSION_MINOR	7
+#define	ISP_CORE_VERSION_MINOR	8
 
 /*
  * Vector for bus specific code to provide specific services.
@@ -426,6 +426,13 @@
 	 */
 	XS_T **isp_xflist;
 
+#ifdef	ISP_TARGET_MODE
+	/*
+	 * Active target commands are stored here, indexed by handle function.
+	 */
+	void **isp_tgtlist;
+#endif
+
 	/*
 	 * request/result queue pointers and DMA handles for them.
 	 */

==== //depot/projects/netperf_socket/sys/dev/musycc/musycc.c#3 (text+ko) ====

@@ -8,7 +8,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/musycc/musycc.c,v 1.31 2004/03/17 17:50:37 njl Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/musycc/musycc.c,v 1.32 2004/05/24 20:45:53 julian Exp $");
 
 /*
  * Card state machine:
@@ -222,7 +222,7 @@
 	struct mdesc *mdt[NHDLC];
 	struct mdesc *mdr[NHDLC];
 	node_p node;			/* NG node */
-	char nodename[NG_NODELEN + 1];	/* NG nodename */
+	char nodename[NG_NODESIZ];	/* NG nodename */
 	struct schan *chan[NHDLC];
 	u_long		cnt_ferr;
 	u_long		cnt_cerr;

==== //depot/projects/netperf_socket/sys/dev/pci/pci.c#7 (text+ko) ====

@@ -25,7 +25,7 @@
  * (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: src/sys/dev/pci/pci.c,v 1.259 2004/05/21 19:47:55 imp Exp $
+ * $FreeBSD: src/sys/dev/pci/pci.c,v 1.261 2004/05/24 17:41:05 imp Exp $
  *
  */
 
@@ -183,15 +183,6 @@
     "Power down devices into D3 state when no driver attaches to them.\n\
 Otherwise, leave the device in D0 state when no driver attaches.");
 
-/*
- * Enable restoring all the registers, even the ones that are nominally
- * read-only.  If this causes problems for you, please report them to
- * imp at freebsd.org and remove this line in your local tree.  The problems
- * would be seen if the device is transitioning from D3 to D0 or has ever
- * made that transition under FreeBSD this boot.
- */
-#define PCI_RESTORE_EXTRA
-
 /* Find a device_t by bus/slot/function */
 
 device_t
@@ -1843,14 +1834,8 @@
 		pci_set_powerstate(dev, PCI_POWERSTATE_D0);
 	}
 	for (i = 0; i < dinfo->cfg.nummaps; i++)
-		pci_write_config(dev, PCIR_MAPS + i * 4, dinfo->cfg.bar[i], 4);
+		pci_write_config(dev, PCIR_BAR(i), dinfo->cfg.bar[i], 4);
 	pci_write_config(dev, PCIR_BIOS, dinfo->cfg.bios, 4);
-#ifdef PCI_RESTORE_EXTRA
-	pci_write_config(dev, PCIR_SUBVEND_0, dinfo->cfg.subvendor, 2);
-	pci_write_config(dev, PCIR_SUBDEV_0, dinfo->cfg.subdevice, 2);
-	pci_write_config(dev, PCIR_VENDOR, dinfo->cfg.vendor, 2);
-	pci_write_config(dev, PCIR_DEVICE, dinfo->cfg.device, 2);
-#endif
 	pci_write_config(dev, PCIR_COMMAND, dinfo->cfg.cmdreg, 2);
 	pci_write_config(dev, PCIR_INTLINE, dinfo->cfg.intline, 1);
 	pci_write_config(dev, PCIR_INTPIN, dinfo->cfg.intpin, 1);
@@ -1858,11 +1843,7 @@
 	pci_write_config(dev, PCIR_MAXLAT, dinfo->cfg.maxlat, 1);
 	pci_write_config(dev, PCIR_CACHELNSZ, dinfo->cfg.cachelnsz, 1);
 	pci_write_config(dev, PCIR_LATTIMER, dinfo->cfg.lattimer, 1);
-#ifdef PCI_RESTORE_EXTRA
-	pci_write_config(dev, PCIR_CLASS, dinfo->cfg.baseclass, 1);
-	pci_write_config(dev, PCIR_SUBCLASS, dinfo->cfg.subclass, 1);
 	pci_write_config(dev, PCIR_PROGIF, dinfo->cfg.progif, 1);
-#endif
 	pci_write_config(dev, PCIR_REVID, dinfo->cfg.revid, 1);
 }
 
@@ -1883,7 +1864,7 @@
 	if (dinfo->cfg.hdrtype != 0)
 		return;
 	for (i = 0; i < dinfo->cfg.nummaps; i++)
-		dinfo->cfg.bar[i] = pci_read_config(dev, PCIR_MAPS + i * 4, 4);
+		dinfo->cfg.bar[i] = pci_read_config(dev, PCIR_BAR(i), 4);
 	dinfo->cfg.bios = pci_read_config(dev, PCIR_BIOS, 4);
 
 	/*

==== //depot/projects/netperf_socket/sys/dev/re/if_re.c#7 (text+ko) ====

@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/re/if_re.c,v 1.22 2004/05/23 21:05:08 yar Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/re/if_re.c,v 1.23 2004/05/24 19:39:23 jhb Exp $");
 
 /*
  * RealTek 8139C+/8169/8169S/8110S PCI NIC driver
@@ -2420,19 +2420,23 @@
 re_suspend(dev)
 	device_t		dev;
 {
+#ifndef BURN_BRIDGES
 	register int		i;
+#endif
 	struct rl_softc		*sc;
 
 	sc = device_get_softc(dev);
 
 	re_stop(sc);
 
+#ifndef BURN_BRIDGES
 	for (i = 0; i < 5; i++)
 		sc->saved_maps[i] = pci_read_config(dev, PCIR_MAPS + i * 4, 4);
 	sc->saved_biosaddr = pci_read_config(dev, PCIR_BIOS, 4);
 	sc->saved_intline = pci_read_config(dev, PCIR_INTLINE, 1);
 	sc->saved_cachelnsz = pci_read_config(dev, PCIR_CACHELNSZ, 1);
 	sc->saved_lattimer = pci_read_config(dev, PCIR_LATTIMER, 1);
+#endif
 
 	sc->suspended = 1;
 
@@ -2448,13 +2452,16 @@
 re_resume(dev)
 	device_t		dev;
 {
+#ifndef BURN_BRIDGES
 	register int		i;
+#endif
 	struct rl_softc		*sc;
 	struct ifnet		*ifp;
 
 	sc = device_get_softc(dev);
 	ifp = &sc->arpcom.ac_if;
 
+#ifndef BURN_BRIDGES
 	/* better way to do this? */
 	for (i = 0; i < 5; i++)
 		pci_write_config(dev, PCIR_MAPS + i * 4, sc->saved_maps[i], 4);
@@ -2466,6 +2473,7 @@
 	/* reenable busmastering */
 	pci_enable_busmaster(dev);
 	pci_enable_io(dev, RL_RES);
+#endif
 
 	/* reinitialize interface if necessary */
 	if (ifp->if_flags & IFF_UP)

==== //depot/projects/netperf_socket/sys/i386/i386/mptable.c#3 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/i386/i386/mptable.c,v 1.232 2004/05/10 18:49:58 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/i386/i386/mptable.c,v 1.233 2004/05/24 15:51:46 jhb Exp $");
 
 #include "opt_mptable_force_htt.h"
 #include <sys/param.h>
@@ -549,17 +549,10 @@
 	KASSERT(src_bus <= mptable_maxbusid, ("bus id %d too large", src_bus));
 	switch (busses[src_bus].bus_type) {
 	case ISA:
+	case EISA:
 		return (INTR_POLARITY_HIGH);
 	case PCI:
 		return (INTR_POLARITY_LOW);
-#ifndef PC98
-	case EISA:
-		KASSERT(src_bus_irq < 16, ("Invalid EISA IRQ %d", src_bus_irq));
-		if (elcr_read_trigger(src_bus_irq) == INTR_TRIGGER_LEVEL)
-			return (INTR_POLARITY_LOW);
-		else
-			return (INTR_POLARITY_HIGH);
-#endif
 	default:
 		panic("%s: unknown bus type %d", __func__,
 		    busses[src_bus].bus_type);

==== //depot/projects/netperf_socket/sys/net/if_ef.c#2 (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/net/if_ef.c,v 1.28 2003/12/28 03:55:59 sam Exp $
+ * $FreeBSD: src/sys/net/if_ef.c,v 1.29 2004/05/24 11:01:45 mux Exp $
  */
 
 #include "opt_inet.h"
@@ -120,7 +120,6 @@
 	struct ifaddr *ifa2;
 	struct sockaddr_dl *sdl2;
 
-	ifp->if_output = ether_output;
 	ifp->if_start = ef_start;
 	ifp->if_watchdog = NULL;
 	ifp->if_init = ef_init;

==== //depot/projects/netperf_socket/sys/netgraph/ng_hole.c#3 (text+ko) ====

@@ -36,7 +36,7 @@
  *
  * Author: Julian Elisher <julian at freebsd.org>
  *
- * $FreeBSD: src/sys/netgraph/ng_hole.c,v 1.11 2004/05/19 11:26:33 ru Exp $
+ * $FreeBSD: src/sys/netgraph/ng_hole.c,v 1.12 2004/05/24 20:41:40 julian Exp $
  * $Whistle: ng_hole.c,v 1.10 1999/11/01 09:24:51 julian Exp $
  */
 
@@ -162,7 +162,7 @@
 		case NGM_HOLE_CLR_STATS:
 		case NGM_HOLE_GETCLR_STATS:
 			/* Sanity check. */
-			if (msg->header.arglen != NG_HOOKLEN + 1) {
+			if (msg->header.arglen != NG_HOOKSIZ) {
 				error = EINVAL;
 				break;
 			}

==== //depot/projects/netperf_socket/sys/pci/if_rl.c#9 (text+ko) ====

@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/pci/if_rl.c,v 1.136 2004/05/23 21:05:07 yar Exp $");
+__FBSDID("$FreeBSD: src/sys/pci/if_rl.c,v 1.137 2004/05/24 19:39:23 jhb Exp $");
 
 /*
  * RealTek 8129/8139 PCI NIC driver
@@ -1916,19 +1916,23 @@
 rl_suspend(dev)
 	device_t		dev;
 {
+#ifndef BURN_BRIDGES
 	register int		i;
+#endif
 	struct rl_softc		*sc;
 
 	sc = device_get_softc(dev);
 
 	rl_stop(sc);
 
+#ifndef BURN_BRIDGES
 	for (i = 0; i < 5; i++)
 		sc->saved_maps[i] = pci_read_config(dev, PCIR_MAPS + i * 4, 4);
 	sc->saved_biosaddr = pci_read_config(dev, PCIR_BIOS, 4);
 	sc->saved_intline = pci_read_config(dev, PCIR_INTLINE, 1);
 	sc->saved_cachelnsz = pci_read_config(dev, PCIR_CACHELNSZ, 1);
 	sc->saved_lattimer = pci_read_config(dev, PCIR_LATTIMER, 1);
+#endif
 
 	sc->suspended = 1;
 
@@ -1944,13 +1948,16 @@
 rl_resume(dev)
 	device_t		dev;
 {
+#ifndef BURN_BRIDGES
 	register int		i;
+#endif
 	struct rl_softc		*sc;
 	struct ifnet		*ifp;
 
 	sc = device_get_softc(dev);
 	ifp = &sc->arpcom.ac_if;
 
+#ifndef BURN_BRIDGES
 	/* better way to do this? */
 	for (i = 0; i < 5; i++)
 		pci_write_config(dev, PCIR_MAPS + i * 4, sc->saved_maps[i], 4);
@@ -1962,6 +1969,7 @@
 	/* reenable busmastering */
 	pci_enable_busmaster(dev);
 	pci_enable_io(dev, RL_RES);
+#endif
 
 	/* reinitialize interface if necessary */
 	if (ifp->if_flags & IFF_UP)

==== //depot/projects/netperf_socket/sys/pci/if_rlreg.h#2 (text+ko) ====


>>> TRUNCATED FOR MAIL (1000 lines) <<<


More information about the p4-projects mailing list