Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 13 Nov 2002 10:23:00 -0800 (PST)
From:      John Baldwin <jhb@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 21038 for review
Message-ID:  <200211131823.gADIN0PM052839@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=21038

Change 21038 by jhb@jhb_laptop on 2002/11/13 10:22:11

	IFC @21020.  I had to use p4 integ w/o @xxxx because bluetooth
	wasn't getting deleted otherwise.

Affected files ...

.. //depot/projects/smpng/sys/bluetooth/Makefile#2 delete
.. //depot/projects/smpng/sys/bluetooth/common/Makefile#2 delete
.. //depot/projects/smpng/sys/bluetooth/common/ng_bluetooth.c#2 delete
.. //depot/projects/smpng/sys/bluetooth/drivers/Makefile#2 delete
.. //depot/projects/smpng/sys/bluetooth/drivers/bt3c/Makefile#2 delete
.. //depot/projects/smpng/sys/bluetooth/drivers/bt3c/ng_bt3c.4#2 delete
.. //depot/projects/smpng/sys/bluetooth/drivers/bt3c/ng_bt3c_firmware.h#2 delete
.. //depot/projects/smpng/sys/bluetooth/drivers/bt3c/ng_bt3c_pccard.c#2 delete
.. //depot/projects/smpng/sys/bluetooth/drivers/bt3c/ng_bt3c_var.h#2 delete
.. //depot/projects/smpng/sys/bluetooth/drivers/h4/Makefile#2 delete
.. //depot/projects/smpng/sys/bluetooth/drivers/h4/TODO#2 delete
.. //depot/projects/smpng/sys/bluetooth/drivers/h4/ng_h4.4#2 delete
.. //depot/projects/smpng/sys/bluetooth/drivers/h4/ng_h4.c#2 delete
.. //depot/projects/smpng/sys/bluetooth/drivers/h4/ng_h4_prse.h#2 delete
.. //depot/projects/smpng/sys/bluetooth/drivers/h4/ng_h4_var.h#2 delete
.. //depot/projects/smpng/sys/bluetooth/drivers/ubt/Makefile#2 delete
.. //depot/projects/smpng/sys/bluetooth/drivers/ubt/TODO#2 delete
.. //depot/projects/smpng/sys/bluetooth/drivers/ubt/ng_ubt.4#2 delete
.. //depot/projects/smpng/sys/bluetooth/drivers/ubt/ng_ubt.c#2 delete
.. //depot/projects/smpng/sys/bluetooth/drivers/ubt/ng_ubt_var.h#2 delete
.. //depot/projects/smpng/sys/bluetooth/hci/Makefile#2 delete
.. //depot/projects/smpng/sys/bluetooth/hci/TODO#2 delete
.. //depot/projects/smpng/sys/bluetooth/hci/ng_hci.4#2 delete
.. //depot/projects/smpng/sys/bluetooth/hci/ng_hci_cmds.c#2 delete
.. //depot/projects/smpng/sys/bluetooth/hci/ng_hci_cmds.h#2 delete
.. //depot/projects/smpng/sys/bluetooth/hci/ng_hci_evnt.c#2 delete
.. //depot/projects/smpng/sys/bluetooth/hci/ng_hci_evnt.h#2 delete
.. //depot/projects/smpng/sys/bluetooth/hci/ng_hci_main.c#2 delete
.. //depot/projects/smpng/sys/bluetooth/hci/ng_hci_misc.c#2 delete
.. //depot/projects/smpng/sys/bluetooth/hci/ng_hci_misc.h#2 delete
.. //depot/projects/smpng/sys/bluetooth/hci/ng_hci_prse.h#2 delete
.. //depot/projects/smpng/sys/bluetooth/hci/ng_hci_ulpi.c#2 delete
.. //depot/projects/smpng/sys/bluetooth/hci/ng_hci_ulpi.h#2 delete
.. //depot/projects/smpng/sys/bluetooth/hci/ng_hci_var.h#2 delete
.. //depot/projects/smpng/sys/bluetooth/include/ng_bluetooth.h#2 delete
.. //depot/projects/smpng/sys/bluetooth/include/ng_bt3c.h#2 delete
.. //depot/projects/smpng/sys/bluetooth/include/ng_btsocket.h#2 delete
.. //depot/projects/smpng/sys/bluetooth/include/ng_btsocket_hci_raw.h#2 delete
.. //depot/projects/smpng/sys/bluetooth/include/ng_btsocket_l2cap.h#2 delete
.. //depot/projects/smpng/sys/bluetooth/include/ng_h4.h#2 delete
.. //depot/projects/smpng/sys/bluetooth/include/ng_hci.h#2 delete
.. //depot/projects/smpng/sys/bluetooth/include/ng_l2cap.h#2 delete
.. //depot/projects/smpng/sys/bluetooth/include/ng_ubt.h#2 delete
.. //depot/projects/smpng/sys/bluetooth/l2cap/Makefile#2 delete
.. //depot/projects/smpng/sys/bluetooth/l2cap/TODO#2 delete
.. //depot/projects/smpng/sys/bluetooth/l2cap/ng_l2cap.4#2 delete
.. //depot/projects/smpng/sys/bluetooth/l2cap/ng_l2cap_cmds.c#2 delete
.. //depot/projects/smpng/sys/bluetooth/l2cap/ng_l2cap_cmds.h#2 delete
.. //depot/projects/smpng/sys/bluetooth/l2cap/ng_l2cap_evnt.c#2 delete
.. //depot/projects/smpng/sys/bluetooth/l2cap/ng_l2cap_evnt.h#2 delete
.. //depot/projects/smpng/sys/bluetooth/l2cap/ng_l2cap_llpi.c#2 delete
.. //depot/projects/smpng/sys/bluetooth/l2cap/ng_l2cap_llpi.h#2 delete
.. //depot/projects/smpng/sys/bluetooth/l2cap/ng_l2cap_main.c#2 delete
.. //depot/projects/smpng/sys/bluetooth/l2cap/ng_l2cap_misc.c#2 delete
.. //depot/projects/smpng/sys/bluetooth/l2cap/ng_l2cap_misc.h#2 delete
.. //depot/projects/smpng/sys/bluetooth/l2cap/ng_l2cap_prse.h#2 delete
.. //depot/projects/smpng/sys/bluetooth/l2cap/ng_l2cap_ulpi.c#2 delete
.. //depot/projects/smpng/sys/bluetooth/l2cap/ng_l2cap_ulpi.h#2 delete
.. //depot/projects/smpng/sys/bluetooth/l2cap/ng_l2cap_var.h#2 delete
.. //depot/projects/smpng/sys/bluetooth/socket/Makefile#2 delete
.. //depot/projects/smpng/sys/bluetooth/socket/TODO#2 delete
.. //depot/projects/smpng/sys/bluetooth/socket/ng_btsocket.4#2 delete
.. //depot/projects/smpng/sys/bluetooth/socket/ng_btsocket.c#2 delete
.. //depot/projects/smpng/sys/bluetooth/socket/ng_btsocket_hci_raw.c#2 delete
.. //depot/projects/smpng/sys/bluetooth/socket/ng_btsocket_l2cap.c#2 delete
.. //depot/projects/smpng/sys/bluetooth/socket/ng_btsocket_l2cap_raw.c#2 delete
.. //depot/projects/smpng/sys/conf/files#56 integrate
.. //depot/projects/smpng/sys/conf/majors#18 integrate
.. //depot/projects/smpng/sys/dev/aic7xxx/aic79xx.c#4 integrate
.. //depot/projects/smpng/sys/dev/cardbus/cardbus_cis.c#9 integrate
.. //depot/projects/smpng/sys/dev/firewire/firewire.c#4 integrate
.. //depot/projects/smpng/sys/dev/firewire/firewirereg.h#2 integrate
.. //depot/projects/smpng/sys/dev/firewire/fwdev.c#1 branch
.. //depot/projects/smpng/sys/dev/firewire/fwmem.c#2 integrate
.. //depot/projects/smpng/sys/dev/firewire/fwmem.h#2 integrate
.. //depot/projects/smpng/sys/dev/firewire/fwohci.c#3 integrate
.. //depot/projects/smpng/sys/dev/firewire/fwohci_pci.c#4 integrate
.. //depot/projects/smpng/sys/kern/kern_mac.c#9 integrate
.. //depot/projects/smpng/sys/modules/firewire/firewire/Makefile#3 integrate
.. //depot/projects/smpng/sys/netinet/in_pcb.h#16 integrate
.. //depot/projects/smpng/sys/security/mac_biba/mac_biba.c#9 integrate
.. //depot/projects/smpng/sys/security/mac_mls/mac_mls.c#9 integrate
.. //depot/projects/smpng/sys/security/mac_none/mac_none.c#6 integrate
.. //depot/projects/smpng/sys/security/mac_test/mac_test.c#6 integrate
.. //depot/projects/smpng/sys/sys/mac.h#8 integrate
.. //depot/projects/smpng/sys/sys/mac_policy.h#8 integrate

Differences ...

==== //depot/projects/smpng/sys/conf/files#56 (text+ko) ====

@@ -1,4 +1,4 @@
-# $FreeBSD: src/sys/conf/files,v 1.733 2002/11/08 22:33:14 jhb Exp $
+# $FreeBSD: src/sys/conf/files,v 1.734 2002/11/12 15:22:18 simokawa Exp $
 #
 # The long compile-with and dependency lines are required because of
 # limitations in config: backslash-newline doesn't work in strings, and
@@ -385,6 +385,7 @@
 dev/firewire/fwohci.c	optional firewire
 dev/firewire/fwohci_pci.c	optional firewire pci
 dev/firewire/fwmem.c	optional firewire
+dev/firewire/fwdev.c	optional firewire
 dev/firewire/if_fwe.c	optional fwe
 dev/firewire/sbp.c	optional sbp
 dev/fxp/if_fxp.c	optional fxp

==== //depot/projects/smpng/sys/conf/majors#18 (text+ko) ====

@@ -1,4 +1,4 @@
-$FreeBSD: src/sys/conf/majors,v 1.148 2002/11/06 02:19:28 rwatson Exp $
+$FreeBSD: src/sys/conf/majors,v 1.150 2002/11/13 01:42:59 peter Exp $
 
 Hopefully, this list will one day be obsoleted by DEVFS, but for now
 this is the current allocation of device major numbers.
@@ -63,6 +63,7 @@
 43	vn		vnode "disk" device (retired)
 44	gp		GPIB
 45	scd		Sony CDROM interface
+46	-		-
 47	gsc		Genius Scanner
 48	cy		Cyclades
 49	??		was ssc
@@ -117,6 +118,7 @@
 98	loe		Loopback pseudo-ethernet (sbabkin@dcn.att.com)
 99	ct		Cronyx/Tau serial adaptor
 100	xrpu		Xilinx Reprogrammable Processing Unit
+101	was:dgm		was: Digiboard PC/Xem in <= RELENG_4
 102	fla		M-Systems DiskOnChip(r)
 103	streams		SVR4 Streams emulation <newton@atdot.dotat.org>
 104	xpt		CAM Transport Layer Services
@@ -184,8 +186,9 @@
 166	ciss		Compaq SmartArray 5* adapter <msmith>
 167	ufm		USB Fm Radio
 168	sab		Siemens SAB82532 serial chip <jake>
+168	XXX		used by pst in RELENG_4
 169	ofwd		OpenFirmware disk <benno>
-170	pst		Promise SuperTrak
+170	pst		Promise SuperTrak (uses 168 in RELENG_4)
 171	mide		LSI MegaRAID IDE (control device)
 172	mided		LSI MegaRAID IDE (disk device)
 173	devctl		Devd control device <imp>
@@ -200,5 +203,6 @@
 182	mdsio		RS-485 driver for 8250-family UARTs <doconnor@gsoft.com.au>
 200	??		entries from 200-252 are reserved for local use
 252	??		entries from 200-252 are reserved for local use
+253	was:MFS		was: used by MFS in <= RELENG_4
 254	internal	Used internally by the kernel
 255	bad choice	-1 is 255 which has magic meanings internally

==== //depot/projects/smpng/sys/dev/aic7xxx/aic79xx.c#4 (text+ko) ====

@@ -39,7 +39,7 @@
  *
  * $Id: //depot/aic7xxx/aic7xxx/aic79xx.c#113 $
  *
- * $FreeBSD: src/sys/dev/aic7xxx/aic79xx.c,v 1.4 2002/09/26 22:53:59 gibbs Exp $
+ * $FreeBSD: src/sys/dev/aic7xxx/aic79xx.c,v 1.5 2002/11/12 10:22:49 scottl Exp $
  */
 
 #ifdef __linux__
@@ -181,8 +181,8 @@
 					       struct scb *scb);
 #endif
 
-static bus_size_t	ahd_sglist_size(struct ahd_softc *ahd);
-static bus_size_t	ahd_sglist_allocsize(struct ahd_softc *ahd);
+static u_int		ahd_sglist_size(struct ahd_softc *ahd);
+static u_int		ahd_sglist_allocsize(struct ahd_softc *ahd);
 static bus_dmamap_callback_t
 			ahd_dmamap_cb; 
 static void		ahd_initialize_hscbs(struct ahd_softc *ahd);
@@ -4096,7 +4096,7 @@
 }
 #endif
 /**************************** Initialization **********************************/
-static bus_size_t
+static u_int
 ahd_sglist_size(struct ahd_softc *ahd)
 {
 	bus_size_t list_size;
@@ -4113,7 +4113,7 @@
  * OS will allocate full pages to us, so it doesn't make sense to request
  * less than a page.
  */
-static bus_size_t
+static u_int
 ahd_sglist_allocsize(struct ahd_softc *ahd)
 {
 	bus_size_t sg_list_increment;
@@ -4203,9 +4203,9 @@
 	}
 #ifdef AHD_DEBUG
 	if ((ahd_debug & AHD_SHOW_MEMORY) != 0) {
-		printf("%s: scb size = 0x%x, hscb size - 0x%x\n",
-		       ahd_name(ahd), sizeof(struct scb),
-		       sizeof(struct hardware_scb));
+		printf("%s: scb size = 0x%x, hscb size = 0x%x\n",
+		       ahd_name(ahd), (u_int)sizeof(struct scb),
+		       (u_int)sizeof(struct hardware_scb));
 	}
 #endif
 	return (ahd);

==== //depot/projects/smpng/sys/dev/cardbus/cardbus_cis.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/cardbus/cardbus_cis.c,v 1.22 2002/11/06 20:40:29 jhb Exp $
+ * $FreeBSD: src/sys/dev/cardbus/cardbus_cis.c,v 1.24 2002/11/12 09:45:59 scottl Exp $
  */
 
 /*
@@ -265,51 +265,48 @@
 
 DECODE_PROTOTYPE(bar)
 {
+	struct cardbus_devinfo *dinfo = device_get_ivars(child);
+	int type;
+	int reg;
+	u_int32_t bar;
+
 	if (len != 6) {
 		printf("*** ERROR *** BAR length not 6 (%d)\n", len);
 		return (EINVAL);
+	}
+	reg = *(u_int16_t*)tupledata;
+	len = *(u_int32_t*)(tupledata + 2);
+	if (reg & TPL_BAR_REG_AS) {
+		type = SYS_RES_IOPORT;
 	} else {
-		struct cardbus_devinfo *dinfo = device_get_ivars(child);
-		int type;
-		int reg;
-		u_int32_t bar;
+		type = SYS_RES_MEMORY;
+	}
+	bar = (reg & TPL_BAR_REG_ASI_MASK) - 1;
+	if (bar < 0 || bar > 5 ||
+	    (type == SYS_RES_IOPORT && bar == 5)) {
+		device_printf(cbdev, "Invalid BAR number: %02x(%02x)\n",
+		    reg, bar);
+		return (0);
+	}
+	bar = CARDBUS_BASE0_REG + bar * 4;
+	if (type == SYS_RES_MEMORY) {
+		if (bar & TPL_BAR_REG_PREFETCHABLE)
+			dinfo->mprefetchable |= BARBIT(bar);
+		if (bar & TPL_BAR_REG_BELOW1MB)
+			dinfo->mbelow1mb |= BARBIT(bar);
+	} else if (type == SYS_RES_IOPORT) {
+		if (bar & TPL_BAR_REG_BELOW1MB)
+			dinfo->ibelow1mb |= BARBIT(bar);
+	}
+	DEVPRINTF((cbdev, "Opening BAR: type=%s, bar=%02x, len=%04x%s%s\n",
+	    (type == SYS_RES_MEMORY) ? "MEM" : "IO", bar, len,
+	    (type == SYS_RES_MEMORY && dinfo->mprefetchable & BARBIT(bar)) ?
+	    " (Prefetchable)" : "", type == SYS_RES_MEMORY ?
+	    ((dinfo->mbelow1mb & BARBIT(bar)) ? " (Below 1Mb)" : "") :
+	    (dinfo->ibelow1mb & BARBIT(bar)) ? " (Below 1Mb)" : "" ));
 
-		reg = *(u_int16_t*)tupledata;
-		len = *(u_int32_t*)(tupledata + 2);
-		if (reg & TPL_BAR_REG_AS) {
-			type = SYS_RES_IOPORT;
-		} else {
-			type = SYS_RES_MEMORY;
-		}
-		bar = (reg & TPL_BAR_REG_ASI_MASK) - 1;
-		if (bar < 0 || bar > 5 ||
-		    (type == SYS_RES_IOPORT && bar == 5)) {
-			device_printf(cbdev, "Invalid BAR number: %02x(%02x)\n",
-			    reg, bar);
-			return (0);
-		}
-		bar = CARDBUS_BASE0_REG + bar * 4;
-		if (type == SYS_RES_MEMORY) {
-			if (bar & TPL_BAR_REG_PREFETCHABLE)
-				dinfo->mprefetchable |= BARBIT(bar);
-			if (bar & TPL_BAR_REG_BELOW1MB)
-				dinfo->mbelow1mb |= BARBIT(bar);
-		} else if (type == SYS_RES_IOPORT) {
-			if (bar & TPL_BAR_REG_BELOW1MB)
-				dinfo->ibelow1mb |= BARBIT(bar);
-		}
-		DEVPRINTF((cbdev, "Opening BAR: type=%s, bar=%02x, "
-		    "len=%04x%s%s\n",
-		    (type==SYS_RES_MEMORY)?"MEM":"IO", bar, len,
-		    (type==SYS_RES_MEMORY&&dinfo->mprefetchable&BARBIT(bar))?
-		    " (Prefetchable)":"",
-		    type==SYS_RES_MEMORY?
-		    ((dinfo->mbelow1mb&BARBIT(bar))?" (Below 1Mb)":"")
-		    :(dinfo->ibelow1mb&BARBIT(bar))?" (Below 1Mb)":""
-		    ));
+	resource_list_add(&dinfo->pci.resources, type, bar, 0UL, ~0UL, len);
 
-		resource_list_add(&dinfo->pci.resources, type, bar, 0UL, ~0UL, len);
-	}
 	return (0);
 }
 
@@ -412,7 +409,7 @@
 
 	switch (CARDBUS_CIS_SPACE(*start)) {
 	case CARDBUS_CIS_ASI_TUPLE:
-		/* CIS in tuple space need no initialization */
+		/* CIS in PCI config space need no initialization */
 		return ((struct resource*)~0UL);
 	case CARDBUS_CIS_ASI_BAR0:
 	case CARDBUS_CIS_ASI_BAR1:
@@ -421,11 +418,16 @@
 	case CARDBUS_CIS_ASI_BAR4:
 	case CARDBUS_CIS_ASI_BAR5:
 		*rid = CARDBUS_BASE0_REG + (CARDBUS_CIS_SPACE(*start) - 1) * 4;
-		pci_write_config(child, *rid, 0xffffffff, 4);
 		break;
 	case CARDBUS_CIS_ASI_ROM:
 		*rid = CARDBUS_ROM_REG;
+#if 0
+		/*
+		 * This mask doesn't contain the bit that actually enables
+		 * the Option ROM.
+		 */
 		pci_write_config(child, *rid, CARDBUS_ROM_ADDRMASK, 4);
+#endif
 		break;
 	default:
 		device_printf(cbdev, "Unable to read CIS: Unknown space: %d\n",
@@ -434,12 +436,20 @@
 	}
 
 	/* figure out how much space we need */
+	pci_write_config(child, *rid, 0xffffffff, 4);
 	testval = pci_read_config(child, *rid, 4);
-	if (testval & 1) {
+
+	/*
+	 * This bit has a different meaning depending if we are dealing
+	 * with a normal BAR or an Option ROM BAR.
+	 */
+	if (((testval & 0x1) == 0x1) && (*rid != CARDBUS_ROM_REG)) {
 		device_printf(cbdev, "CIS Space is IO, expecting memory.\n");
 		return (NULL);
 	}
+
 	size = CARDBUS_MAPREG_MEM_SIZE(testval);
+	/* XXX Is this some kind of hack? */
 	if (size < 4096)
 		size = 4096;
 	/* allocate the memory space to read CIS */
@@ -460,57 +470,73 @@
 	if (CARDBUS_CIS_SPACE(*start) == CARDBUS_CIS_ASI_ROM) {
 		bus_space_tag_t bt;
 		bus_space_handle_t bh;
-		int imagenum;
 		u_int32_t imagesize;
-		int mystart = 0;
+		u_int32_t imagebase = 0;
+		u_int32_t pcidata;
+		u_int16_t romsig;
 		int romnum = 0;
-		int dataptr;
+		int imagenum;
 
 		bt = rman_get_bustag(res);
 		bh = rman_get_bushandle(res);
 
 		imagenum = CARDBUS_CIS_ASI_ROM_IMAGE(*start);
 		for (romnum = 0;; romnum++) {
-			if (bus_space_read_2(bt, bh,
-			    mystart+CARDBUS_EXROM_SIGNATURE) != 0xaa55) {
+			romsig = bus_space_read_2(bt, bh,
+			    imagebase + CARDBUS_EXROM_SIGNATURE);
+			if (romsig != 0xaa55) {
 				device_printf(cbdev, "Bad header in rom %d: "
-				    "[%x] %04x\n", romnum, mystart + 
-				    CARDBUS_EXROM_SIGNATURE,
-				    bus_space_read_2(bt, bh,
-				    mystart+CARDBUS_EXROM_SIGNATURE));
+				    "[%x] %04x\n", romnum, imagebase + 
+				    CARDBUS_EXROM_SIGNATURE, romsig);
 				bus_release_resource(cbdev, SYS_RES_MEMORY,
 				    *rid, res);
 				*rid = 0;
 				return (NULL);
 			}
-			dataptr = mystart + bus_space_read_2(bt, bh,
-			    mystart + CARDBUS_EXROM_DATA_PTR);
+
+			/*
+			 * If this was the Option ROM image that we were
+			 * looking for, then we are done.
+			 */
+			if (romnum == imagenum)
+				break;
+
+			/* Find out where the next Option ROM image is */
+			pcidata = imagebase + bus_space_read_2(bt, bh,
+			    imagebase + CARDBUS_EXROM_DATA_PTR);
 			imagesize = bus_space_read_2(bt, bh,
-			    dataptr + CARDBUS_EXROM_DATA_IMAGE_LENGTH);
+			    pcidata + CARDBUS_EXROM_DATA_IMAGE_LENGTH);
 
 			if (imagesize == 0) {
 				/*
 				 * XXX some ROMs seem to have this as zero,
 				 * can we assume this means 1 block?
 				 */
+				device_printf(cbdev, "Warning, size of Option "
+				    "ROM image %d is 0 bytes, assuming 512 "
+				    "bytes.\n", romnum);
 				imagesize = 1;
 			}
+
+			/* Image size is in 512 byte units */
 			imagesize <<= 9;
 
-			if (romnum == imagenum)
-				break;
-			if ((bus_space_read_1(bt, bh, mystart + 
-			    CARDBUS_EXROM_DATA_INDICATOR) & 0x80) == 0) {
-				device_printf(cbdev, "Cannot read CIS: "
-				    "Not enough images of rom\n");
+			if ((bus_space_read_1(bt, bh, pcidata + 
+			    CARDBUS_EXROM_DATA_INDICATOR) & 0x80) != 0) {
+				device_printf(cbdev, "Cannot find CIS in "
+				    "Option ROM\n");
+				bus_release_resource(cbdev, SYS_RES_MEMORY,
+				    *rid, res);
+				*rid = 0;
 				return (NULL);
 			}
-			mystart += imagesize;
+			imagebase += imagesize;
 		}
-		*start = mystart + CARDBUS_CIS_ADDR(*start);
+		*start = imagebase + CARDBUS_CIS_ADDR(*start);
 	} else {
-		*start = CARDBUS_CIS_SPACE(*start);
+		*start = CARDBUS_CIS_ADDR(*start);
 	}
+
 	return (res);
 }
 
@@ -553,7 +579,8 @@
 
 	bzero(tupledata, MAXTUPLESIZE);
 	expect_linktarget = TRUE;
-	start = pci_read_config(child, CARDBUS_CIS_REG, 4);
+	if ((start = pci_read_config(child, CARDBUS_CIS_REG, 4)) == 0)
+		return (ENXIO);
 	off = 0;
 	res = cardbus_read_tuple_init(cbdev, child, &start, &rid);
 	if (res == NULL)

==== //depot/projects/smpng/sys/dev/firewire/firewire.c#4 (text+ko) ====

@@ -30,7 +30,7 @@
  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  * POSSIBILITY OF SUCH DAMAGE.
  * 
- * $FreeBSD: src/sys/dev/firewire/firewire.c,v 1.4 2002/11/07 02:13:40 simokawa Exp $
+ * $FreeBSD: src/sys/dev/firewire/firewire.c,v 1.8 2002/11/12 17:16:20 simokawa Exp $
  *
  */
 
@@ -46,30 +46,14 @@
 #include <sys/conf.h>
 #include <sys/uio.h>
 #include <sys/sysctl.h>
-#include <sys/poll.h>
 
 #include <machine/cpufunc.h>    /* for rdtsc proto for clock.h below */
 #include <machine/clock.h>
-#include <pci/pcivar.h>
-#include <pci/pcireg.h>
 
-#include <vm/vm.h>
-#include <vm/pmap.h>            /* for vtophys proto */
-#include <vm/vm_extern.h> 
-
 #include <sys/bus.h>		/* used by smbus and newbus */
 
-#include <machine/bus.h>	/* used by newbus */
-#include <sys/rman.h>		/* used by newbus */
-#include <machine/resource.h>	/* used by newbus */
-
-#include <sys/signal.h>
-#include <sys/mman.h>
-#include <sys/ioccom.h>
-
 #include <dev/firewire/firewire.h>
 #include <dev/firewire/firewirereg.h>
-#include <dev/firewire/fwmem.h>
 #include <dev/firewire/iec13213.h>
 #include <dev/firewire/iec68113.h>
 
@@ -78,24 +62,13 @@
 SYSCTL_INT(_debug, OID_AUTO, firewire_debug, CTLFLAG_RW, &firewire_debug, 0,
 	"Firewire driver debug flag");
 
-#define CDEV_MAJOR 127
 #define FW_MAXASYRTY 4
 #define FW_MAXDEVRCNT 4
-#define	FWNODE_INVAL 0xffff
 
 #define XFER_TIMEOUT 0
 
-static	d_open_t	fw_open;
-static	d_close_t	fw_close;
-static	d_ioctl_t	fw_ioctl;
-static	d_poll_t	fw_poll;
-static	d_read_t	fw_read;	/* for Isochronous packet */
-static	d_write_t	fw_write;
-static	d_mmap_t	fw_mmap;
-
 devclass_t firewire_devclass;
 
-
 static int firewire_match      __P((device_t));
 static int firewire_attach      __P((device_t));
 static int firewire_detach      __P((device_t));
@@ -103,10 +76,8 @@
 static int firewire_shutdown    __P((device_t));
 #endif
 static device_t firewire_add_child   __P((device_t, int, const char *, int));
-static struct fw_bind *fw_bindlookup __P((struct firewire_comm *, u_int32_t, u_int32_t));
 static void fw_try_bmr __P((void *));
 static void fw_try_bmr_callback __P((struct fw_xfer *));
-static u_int16_t fw_noderesolve __P((struct firewire_comm *, struct fw_eui64));
 static void fw_asystart __P((struct fw_xfer *));
 static int fw_get_tlabel __P((struct firewire_comm *, struct fw_xfer *));
 static void fw_bus_probe __P((struct firewire_comm *));
@@ -138,442 +109,16 @@
 #define MAX_GAPHOP  16
 u_int gap_cnt[] = {1, 1, 4, 6, 9, 12, 14, 17,
 			20, 23, 25, 28, 31, 33, 36, 39, 42};
-/*
- * The probe routine.
- */
-struct cdevsw firewire_cdevsw = 
-{
-	fw_open, fw_close, fw_read, fw_write, fw_ioctl,
-	fw_poll, fw_mmap, nostrategy, "fw", CDEV_MAJOR, nodump, nopsize, D_MEM
-};
+
+extern struct cdevsw firewire_cdevsw;
+
 static driver_t firewire_driver = {
 	"firewire",
 	firewire_methods,
 	sizeof(struct firewire_softc),
 };
 
-static int
-fw_open (dev_t dev, int flags, int fmt, fw_proc *td)
-{
-	struct firewire_softc *sc;
-	int unit = DEV2UNIT(dev);
-	int sub = DEV2DMACH(dev);
-
-	int err = 0;
-
-	if (DEV_FWMEM(dev))
-		return fwmem_open(dev, flags, fmt, td);
-
-	sc = devclass_get_softc(firewire_devclass, unit);
-	if(sc->fc->ir[sub]->flag & FWXFERQ_OPEN){
-		err = EBUSY;
-		return err;
-	}
-	if(sc->fc->it[sub]->flag & FWXFERQ_OPEN){
-		err = EBUSY;
-		return err;
-	}
-	if(sc->fc->ir[sub]->flag & FWXFERQ_MODEMASK){
-		err = EBUSY;
-		return err;
-	}
-/* Default is per packet mode */
-	sc->fc->ir[sub]->flag |= FWXFERQ_OPEN;
-	sc->fc->it[sub]->flag |= FWXFERQ_OPEN;
-	sc->fc->ir[sub]->flag |= FWXFERQ_PACKET;
-	return err;
-}
-static int
-fw_close (dev_t dev, int flags, int fmt, fw_proc *td)
-{
-	struct firewire_softc *sc;
-	int unit = DEV2UNIT(dev);
-	int sub = DEV2DMACH(dev);
-	struct fw_xfer *xfer;
-	struct fw_dvbuf *dvbuf;
-	struct fw_bind *fwb;
-	int err = 0;
-
-	if (DEV_FWMEM(dev))
-		return fwmem_close(dev, flags, fmt, td);
-
-	sc = devclass_get_softc(firewire_devclass, unit);
-	if(!(sc->fc->ir[sub]->flag & FWXFERQ_OPEN)){
-		err = EINVAL;
-		return err;
-	}
-	sc->fc->ir[sub]->flag &= ~FWXFERQ_OPEN;
-	if(!(sc->fc->it[sub]->flag & FWXFERQ_OPEN)){
-		err = EINVAL;
-		return err;
-	}
-	sc->fc->it[sub]->flag &= ~FWXFERQ_OPEN;
-
-	if(sc->fc->ir[sub]->flag & FWXFERQ_RUNNING){
-		sc->fc->irx_disable(sc->fc, sub);
-	}
-	if(sc->fc->it[sub]->flag & FWXFERQ_RUNNING){
-		sc->fc->it[sub]->flag &= ~FWXFERQ_RUNNING;
-		sc->fc->itx_disable(sc->fc, sub);
-	}
-	if(sc->fc->it[sub]->flag & FWXFERQ_DV){
-		if((dvbuf = sc->fc->it[sub]->dvproc) != NULL){
-			free(dvbuf->buf, M_DEVBUF);
-			sc->fc->it[sub]->dvproc = NULL;
-		}
-		if((dvbuf = sc->fc->it[sub]->dvdma) != NULL){
-			free(dvbuf->buf, M_DEVBUF);
-			sc->fc->it[sub]->dvdma = NULL;
-		}
-		while((dvbuf = STAILQ_FIRST(&sc->fc->it[sub]->dvvalid)) != NULL){
-			STAILQ_REMOVE_HEAD(&sc->fc->it[sub]->dvvalid, link);
-			free(dvbuf->buf, M_DEVBUF);
-		}
-		while((dvbuf = STAILQ_FIRST(&sc->fc->it[sub]->dvfree)) != NULL){
-			STAILQ_REMOVE_HEAD(&sc->fc->it[sub]->dvfree, link);
-			free(dvbuf->buf, M_DEVBUF);
-		}
-		free(sc->fc->it[sub]->dvbuf, M_DEVBUF);
-		sc->fc->it[sub]->dvbuf = NULL;
-	}
-	if(sc->fc->ir[sub]->flag & FWXFERQ_EXTBUF){
-		free(sc->fc->ir[sub]->buf, M_DEVBUF);
-		sc->fc->ir[sub]->buf = NULL;
-		free(sc->fc->ir[sub]->bulkxfer, M_DEVBUF);
-		sc->fc->ir[sub]->bulkxfer = NULL;
-		sc->fc->ir[sub]->flag &= ~FWXFERQ_EXTBUF;
-		sc->fc->ir[sub]->psize = FWPMAX_S400;
-		sc->fc->ir[sub]->maxq = FWMAXQUEUE;
-	}
-	if(sc->fc->it[sub]->flag & FWXFERQ_EXTBUF){
-		free(sc->fc->it[sub]->buf, M_DEVBUF);
-		sc->fc->it[sub]->buf = NULL;
-		free(sc->fc->it[sub]->bulkxfer, M_DEVBUF);
-		sc->fc->it[sub]->bulkxfer = NULL;
-		sc->fc->it[sub]->dvbuf = NULL;
-		sc->fc->it[sub]->flag &= ~FWXFERQ_EXTBUF;
-		sc->fc->it[sub]->psize = FWPMAX_S400;
-		sc->fc->it[sub]->maxq = FWMAXQUEUE;
-	}
-	for(xfer = STAILQ_FIRST(&sc->fc->ir[sub]->q);
-		xfer != NULL; xfer = STAILQ_FIRST(&sc->fc->ir[sub]->q)){
-		sc->fc->ir[sub]->queued--;
-		STAILQ_REMOVE_HEAD(&sc->fc->ir[sub]->q, link);
-
-		xfer->resp = 0;
-		switch(xfer->act_type){
-		case FWACT_XFER:
-			fw_xfer_done(xfer);
-			break;
-		default:
-			break;
-		}
-		fw_xfer_free(xfer);
-	}
-	for(fwb = STAILQ_FIRST(&sc->fc->ir[sub]->binds); fwb != NULL;
-		fwb = STAILQ_FIRST(&sc->fc->ir[sub]->binds)){
-		STAILQ_REMOVE(&sc->fc->binds, fwb, fw_bind, fclist);
-		STAILQ_REMOVE_HEAD(&sc->fc->ir[sub]->binds, chlist);
-		free(fwb, M_DEVBUF);
-	}
-	sc->fc->ir[sub]->flag &= ~FWXFERQ_MODEMASK;
-	sc->fc->it[sub]->flag &= ~FWXFERQ_MODEMASK;
-	return err;
-}
 /*
- * read request.
- */
-static int
-fw_read (dev_t dev, struct uio *uio, int ioflag)
-{
-	struct firewire_softc *sc;
-	struct fw_xferq *ir;
-	struct fw_xfer *xfer;
-	int err = 0, s, slept = 0;
-	int unit = DEV2UNIT(dev);
-	int sub = DEV2DMACH(dev);
-	struct fw_pkt *fp;
-
-	if (DEV_FWMEM(dev))
-		return fwmem_read(dev, uio, ioflag);
-
-	sc = devclass_get_softc(firewire_devclass, unit);
-
-	ir = sc->fc->ir[sub];
-
-	if(ir->flag & FWXFERQ_PACKET){
-		ir->stproc = NULL;
-	}
-readloop:
-	xfer = STAILQ_FIRST(&ir->q);
-	if(!(ir->flag & FWXFERQ_PACKET) && ir->stproc == NULL){
-		ir->stproc = STAILQ_FIRST(&ir->stvalid);
-		if(ir->stproc != NULL){
-			s = splfw();
-			STAILQ_REMOVE_HEAD(&ir->stvalid, link);
-			splx(s);
-			ir->queued = 0;
-		}
-	}
-
-	if(xfer == NULL && ir->stproc == NULL){
-		if(slept == 0){
-			slept = 1;
-			if(!(ir->flag & FWXFERQ_RUNNING)
-				&& (ir->flag & FWXFERQ_PACKET)){
-				err = sc->fc->irx_enable(sc->fc, sub);
-			}
-			if(err){
-				return err;
-			}
-			ir->flag |= FWXFERQ_WAKEUP;
-			err = tsleep((caddr_t)ir, FWPRI, "fw_read", hz);
-			if(err){
-				ir->flag &= ~FWXFERQ_WAKEUP;
-				return err;
-			}
-			goto readloop;
-		}else{
-			err = EIO;
-			return err;
-		}
-	}else if(xfer != NULL){
-		s = splfw();
-		ir->queued --;
-		STAILQ_REMOVE_HEAD(&ir->q, link);
-		splx(s);
-		fp = (struct fw_pkt *)(xfer->recv.buf + xfer->recv.off);
-		if(sc->fc->irx_post != NULL)
-			sc->fc->irx_post(sc->fc, fp->mode.ld);
-		err = uiomove(xfer->recv.buf + xfer->recv.off, xfer->recv.len, uio);
-		fw_xfer_free( xfer);
-	}else if(ir->stproc != NULL){
-		fp = (struct fw_pkt *)(ir->stproc->buf + ir->queued * ir->psize);
-		if(sc->fc->irx_post != NULL)
-			sc->fc->irx_post(sc->fc, fp->mode.ld);
-		if(ntohs(fp->mode.stream.len) == 0){
-			err = EIO;
-			return err;
-		}
-		err = uiomove((caddr_t)fp, ntohs(fp->mode.stream.len) + sizeof(u_int32_t), uio);
-		fp->mode.stream.len = 0;
-		ir->queued ++;
-		if(ir->queued >= ir->bnpacket){
-			s = splfw();
-			ir->stproc->flag = 0;
-			STAILQ_INSERT_TAIL(&ir->stfree, ir->stproc, link);
-			splx(s);
-			ir->stproc = NULL;
-		}
-	}
-#if 0
-	if(STAILQ_FIRST(&ir->q) == NULL &&
-		(ir->flag & FWXFERQ_RUNNING) && (ir->flag & FWXFERQ_PACKET)){
-		err = sc->fc->irx_enable(sc->fc, sub);
-	}
-#endif
-#if 0
-	if(STAILQ_FIRST(&ir->stvalid) == NULL &&
-		(ir->flag & FWXFERQ_RUNNING) && !(ir->flag & FWXFERQ_PACKET)){
-		err = sc->fc->irx_enable(sc->fc, sub);
-	}
-#endif
-	return err;
-}
-static int
-fw_write (dev_t dev, struct uio *uio, int ioflag)
-{
-	int err = 0;
-	struct firewire_softc *sc;
-	int unit = DEV2UNIT(dev);
-	int sub = DEV2DMACH(dev);
-	int tl, s, slept = 0;
-	struct fw_pkt *fp;
-	struct fw_xfer *xfer;
-	struct fw_xferq *xferq;
-	struct firewire_comm *fc;
-	struct fw_xferq *it;
-
-	if (DEV_FWMEM(dev))
-		return fwmem_write(dev, uio, ioflag);
-
-	sc = devclass_get_softc(firewire_devclass, unit);
-	fc = sc->fc;
-	it = sc->fc->it[sub];
-
-	fp = (struct fw_pkt *)uio->uio_iov->iov_base;
-	switch(fp->mode.common.tcode){
-	case FWTCODE_RREQQ:
-	case FWTCODE_RREQB:
-	case FWTCODE_LREQ:
-		err = EINVAL;
-		return err;
-	case FWTCODE_WREQQ:
-	case FWTCODE_WREQB:
-		xferq = fc->atq;
-		break;
-	case FWTCODE_STREAM:
-		if(it->flag & FWXFERQ_PACKET){
-			xferq = fc->atq;
-		}else{
-			xferq = NULL;
-		}
-		break;
-	case FWTCODE_WRES:
-	case FWTCODE_RRESQ:
-	case FWTCODE_RRESB:
-	case FWTCODE_LRES:
-		xferq = fc->ats;
-		break;
-	default:
-		err = EINVAL;
-		return err;
-	}
-	/* Discard unsent buffered stream packet, when sending Asyrequrst */
-	if(xferq != NULL && it->stproc != NULL){
-		s = splfw();
-		it->stproc->flag = 0;
-		STAILQ_INSERT_TAIL(&it->stfree, it->stproc, link);
-		splx(s);
-		it->stproc = NULL;
-	}
-	if(xferq == NULL && !(it->flag & FWXFERQ_DV)){
-isoloop:
-		if(it->stproc == NULL){
-			it->stproc = STAILQ_FIRST(&it->stfree);
-			if(it->stproc != NULL){
-				s = splfw();
-				STAILQ_REMOVE_HEAD(&it->stfree, link);
-				splx(s);
-				it->queued = 0;
-			}else if(slept == 0){
-				slept = 1;
-				err = sc->fc->itx_enable(sc->fc, sub);
-				if(err){
-					return err;
-				}
-				err = tsleep((caddr_t)it, FWPRI, "fw_write", hz);
-				if(err){
-					return err;
-				}
-				goto isoloop;
-			}else{
-				err = EIO;
-				return err;
-			}
-		}
-		fp = (struct fw_pkt *)(it->stproc->buf + it->queued * it->psize);
-		fp->mode.stream.len = htons(uio->uio_resid - sizeof(u_int32_t));
-		err = uiomove(it->stproc->buf + it->queued * it->psize,
-							uio->uio_resid, uio);
-		it->queued ++;
-		if(it->queued >= it->btpacket){
-			s = splfw();
-			STAILQ_INSERT_TAIL(&it->stvalid, it->stproc, link);
-			splx(s);
-			it->stproc = NULL;
-			fw_tbuf_update(sc->fc, sub, 0);
-			err = sc->fc->itx_enable(sc->fc, sub);
-		}
-		return err;
-	} if(xferq == NULL && it->flag & FWXFERQ_DV){
-dvloop:
-		if(it->dvproc == NULL){
-			it->dvproc = STAILQ_FIRST(&it->dvfree);
-			if(it->dvproc != NULL){
-				s = splfw();
-				STAILQ_REMOVE_HEAD(&it->dvfree, link);
-				splx(s);
-				it->dvptr = 0;
-			}else if(slept == 0){
-				slept = 1;
-				err = sc->fc->itx_enable(sc->fc, sub);
-				if(err){
-					return err;
-				}
-				err = tsleep((caddr_t)it, FWPRI, "fw_write", hz);
-				if(err){
-					return err;
-				}
-				goto dvloop;
-			}else{
-				err = EIO;
-				return err;
-			}
-		}
-		fp = (struct fw_pkt *)(it->dvproc->buf + it->queued * it->psize);
-		fp->mode.stream.len = htons(uio->uio_resid - sizeof(u_int32_t));
-		err = uiomove(it->dvproc->buf + it->dvptr,
-							uio->uio_resid, uio);
-		it->dvptr += it->psize;
-		if(err){
-			return err;
-		}
-		if(it->dvptr >= it->psize * it->dvpacket){
-			s = splfw();
-			STAILQ_INSERT_TAIL(&it->dvvalid, it->dvproc, link);
-			splx(s);
-			it->dvproc = NULL;
-			err = fw_tbuf_update(sc->fc, sub, 0);
-			if(err){
-				return err;
-			}
-			err = sc->fc->itx_enable(sc->fc, sub);
-		}
-		return err;
-	}
-	if(xferq != NULL){
-		xfer = fw_xfer_alloc();
-		if(xfer == NULL){
-			err = ENOMEM;
-			return err;
-		}
-		xfer->send.buf = malloc(uio->uio_resid, M_DEVBUF, M_NOWAIT);
-		if(xfer->send.buf == NULL){
-			fw_xfer_free( xfer);
-			err = ENOBUFS;
-			return err;
-		}
-		xfer->dst = ntohs(fp->mode.hdr.dst);
-	
-		switch(fp->mode.common.tcode){
-		case FWTCODE_WREQQ:
-		case FWTCODE_WREQB:
-			if((tl = fw_get_tlabel(fc, xfer)) == -1 ){
-				fw_xfer_free( xfer);
-				err = EAGAIN;
-				return err;
-			}
-			fp->mode.hdr.tlrt = tl << 2;
-		default:
-			break;
-		}
-	
-		xfer->tl = fp->mode.hdr.tlrt >> 2;
-		xfer->send.len = uio->uio_resid; 
-		xfer->send.off = 0; 
-		xfer->tcode = fp->mode.common.tcode;
-		xfer->spd = 0;/* XXX: how to setup it */
-		xfer->fc = fc; 
-		xfer->q = xferq;
-		xfer->act_type = FWACT_XFER;
-		xfer->act.hand = fw_asy_callback;
-		xfer->retry_req = fw_asybusy;
-			
-		err = uiomove(xfer->send.buf, uio->uio_resid, uio);
-		if(err){
-			return err;
-		}
-		fw_asystart(xfer);
-		err = tsleep((caddr_t)xfer, FWPRI, "fw_write", hz);
-		if(xfer->resp == EBUSY)
-			return EBUSY;
-		fw_xfer_free( xfer);
-		return err;
-	}
-	return EINVAL;
-}
-/*
  * transmitter buffer update.
  */
 int
@@ -752,409 +297,12 @@
 	ir->stdma2 = bulkxfer2;
 	return err;
 }
-/*
- * ioctl support.
- */
-int
-fw_ioctl (dev_t dev, u_long cmd, caddr_t data, int flag, fw_proc *td)
-{
-	struct firewire_softc *sc;
-	int unit = DEV2UNIT(dev);

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

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe p4-projects" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200211131823.gADIN0PM052839>