Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 22 Sep 2003 09:20:21 -0700 (PDT)
From:      Sam Leffler <sam@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 38424 for review
Message-ID:  <200309221620.h8MGKL4c011980@repoman.freebsd.org>

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

Change 38424 by sam@sam_ebb on 2003/09/22 09:19:38

	IFC @ 38423

Affected files ...

.. //depot/projects/netperf/sys/alpha/conf/GENERIC#2 integrate
.. //depot/projects/netperf/sys/amd64/conf/GENERIC#4 integrate
.. //depot/projects/netperf/sys/cam/cam_periph.c#3 integrate
.. //depot/projects/netperf/sys/cam/scsi/scsi_all.c#2 integrate
.. //depot/projects/netperf/sys/compat/linprocfs/linprocfs.c#5 integrate
.. //depot/projects/netperf/sys/conf/NOTES#9 integrate
.. //depot/projects/netperf/sys/conf/files.ia64#6 integrate
.. //depot/projects/netperf/sys/contrib/dev/acpica/rsaddr.c#2 integrate
.. //depot/projects/netperf/sys/contrib/dev/acpica/rsirq.c#2 integrate
.. //depot/projects/netperf/sys/crypto/rijndael/rijndael-api-fst.c#3 integrate
.. //depot/projects/netperf/sys/dev/acpica/acpi.c#7 integrate
.. //depot/projects/netperf/sys/dev/acpica/acpi_button.c#4 integrate
.. //depot/projects/netperf/sys/dev/ata/ata-lowlevel.c#4 integrate
.. //depot/projects/netperf/sys/dev/ata/ata-queue.c#3 integrate
.. //depot/projects/netperf/sys/dev/ata/atapi-cam.c#6 integrate
.. //depot/projects/netperf/sys/dev/ata/atapi-cd.c#6 integrate
.. //depot/projects/netperf/sys/dev/ata/atapi-cd.h#5 integrate
.. //depot/projects/netperf/sys/dev/ed/if_ed_pccard.c#4 integrate
.. //depot/projects/netperf/sys/dev/ips/ips_disk.c#3 integrate
.. //depot/projects/netperf/sys/dev/mii/e1000phy.c#3 integrate
.. //depot/projects/netperf/sys/dev/mii/e1000phyreg.h#2 integrate
.. //depot/projects/netperf/sys/dev/mii/miidevs#3 integrate
.. //depot/projects/netperf/sys/dev/pccard/pccarddevs#6 integrate
.. //depot/projects/netperf/sys/dev/pccard/pccarddevs.h#6 integrate
.. //depot/projects/netperf/sys/dev/pccard/pccardvar.h#3 integrate
.. //depot/projects/netperf/sys/dev/puc/pucdata.c#6 integrate
.. //depot/projects/netperf/sys/dev/re/if_re.c#2 integrate
.. //depot/projects/netperf/sys/dev/sio/sio.c#6 integrate
.. //depot/projects/netperf/sys/dev/usb/if_aue.c#3 integrate
.. //depot/projects/netperf/sys/dev/usb/umass.c#5 integrate
.. //depot/projects/netperf/sys/dev/usb/usbdevs#3 integrate
.. //depot/projects/netperf/sys/dev/usb/usbdevs.h#3 integrate
.. //depot/projects/netperf/sys/dev/usb/usbdevs_data.h#3 integrate
.. //depot/projects/netperf/sys/dev/wi/if_wi_pccard.c#7 integrate
.. //depot/projects/netperf/sys/fs/nwfs/nwfs_io.c#3 integrate
.. //depot/projects/netperf/sys/fs/smbfs/smbfs_io.c#3 integrate
.. //depot/projects/netperf/sys/i386/conf/GENERIC#4 integrate
.. //depot/projects/netperf/sys/i386/conf/NOTES#4 integrate
.. //depot/projects/netperf/sys/i386/i386/pmap.c#9 integrate
.. //depot/projects/netperf/sys/i386/i386/trap.c#3 integrate
.. //depot/projects/netperf/sys/i386/include/pci_cfgreg.h#2 integrate
.. //depot/projects/netperf/sys/ia64/ia64/genassym.c#4 integrate
.. //depot/projects/netperf/sys/ia64/ia64/machdep.c#9 integrate
.. //depot/projects/netperf/sys/ia64/ia64/pmap.c#6 integrate
.. //depot/projects/netperf/sys/ia64/ia64/trap.c#5 integrate
.. //depot/projects/netperf/sys/ia64/ia64/uma_machdep.c#1 branch
.. //depot/projects/netperf/sys/ia64/include/cpu.h#7 integrate
.. //depot/projects/netperf/sys/kern/kern_malloc.c#2 integrate
.. //depot/projects/netperf/sys/kern/kern_proc.c#3 integrate
.. //depot/projects/netperf/sys/kern/linker_if.m#2 integrate
.. //depot/projects/netperf/sys/kern/sched_ule.c#5 integrate
.. //depot/projects/netperf/sys/kern/vfs_bio.c#6 integrate
.. //depot/projects/netperf/sys/kern/vfs_subr.c#3 integrate
.. //depot/projects/netperf/sys/netinet/ip_fw2.c#9 integrate
.. //depot/projects/netperf/sys/nfsclient/nfs_bio.c#2 integrate
.. //depot/projects/netperf/sys/pc98/pc98/fd.c#3 integrate
.. //depot/projects/netperf/sys/pci/if_rlreg.h#6 integrate
.. //depot/projects/netperf/sys/pci/if_sk.c#3 integrate
.. //depot/projects/netperf/sys/pci/if_skreg.h#2 integrate
.. //depot/projects/netperf/sys/pci/yukonreg.h#1 branch
.. //depot/projects/netperf/sys/powerpc/powermac/ata_macio.c#2 integrate
.. //depot/projects/netperf/sys/powerpc/powerpc/pmap.c#4 integrate
.. //depot/projects/netperf/sys/powerpc/psim/ata_iobus.c#2 integrate
.. //depot/projects/netperf/sys/sparc64/sparc64/pmap.c#6 integrate
.. //depot/projects/netperf/sys/sys/lock.h#3 integrate
.. //depot/projects/netperf/sys/sys/mutex.h#2 integrate
.. //depot/projects/netperf/sys/vm/uma.h#2 integrate
.. //depot/projects/netperf/sys/vm/uma_core.c#7 integrate
.. //depot/projects/netperf/sys/vm/uma_dbg.c#2 integrate
.. //depot/projects/netperf/sys/vm/uma_int.h#4 integrate
.. //depot/projects/netperf/sys/vm/vm_fault.c#3 integrate
.. //depot/projects/netperf/sys/vm/vm_page.c#5 integrate
.. //depot/projects/netperf/sys/vm/vm_pageout.c#6 integrate
.. //depot/projects/netperf/sys/vm/vnode_pager.c#7 integrate

Differences ...

==== //depot/projects/netperf/sys/alpha/conf/GENERIC#2 (text+ko) ====

@@ -18,7 +18,7 @@
 #
 # For hardware specific information check HARDWARE.TXT
 #
-# $FreeBSD: src/sys/alpha/conf/GENERIC,v 1.162 2003/07/21 19:15:25 ticso Exp $
+# $FreeBSD: src/sys/alpha/conf/GENERIC,v 1.163 2003/09/19 20:04:55 joerg Exp $
 
 machine		alpha
 cpu		EV4
@@ -139,6 +139,11 @@
 device		ppi		# Parallel port interface device
 #device		vpo		# Requires scbus and da
  
+# If you've got a "dumb" serial or parallel PCI card that is
+# supported by the puc(4) glue driver, uncomment the following
+# line to enable it (connects to the sio and/or ppc drivers):
+#device         puc
+ 
 # PCI Ethernet NICs.
 device		de		# DEC/Intel DC21x4x (``Tulip'')
 device		txp		# 3Com 3cR990 (``Typhoon'')

==== //depot/projects/netperf/sys/amd64/conf/GENERIC#4 (text+ko) ====

@@ -16,7 +16,7 @@
 # If you are in doubt as to the purpose or necessity of a line, check first 
 # in NOTES.
 #
-# $FreeBSD: src/sys/amd64/conf/GENERIC,v 1.395 2003/09/15 22:40:00 obrien Exp $
+# $FreeBSD: src/sys/amd64/conf/GENERIC,v 1.396 2003/09/19 20:04:55 joerg Exp $
 
 machine		amd64
 cpu		HAMMER
@@ -158,6 +158,10 @@
 device		ppi		# Parallel port interface device
 #device		vpo		# Requires scbus and da
 
+# If you've got a "dumb" serial or parallel PCI card that is
+# supported by the puc(4) glue driver, uncomment the following
+# line to enable it (connects to the sio and/or ppc drivers):
+#device         puc
 
 # PCI Ethernet NICs.
 device		de		# DEC/Intel DC21x4x (``Tulip'')

==== //depot/projects/netperf/sys/cam/cam_periph.c#3 (text+ko) ====

@@ -28,7 +28,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/cam/cam_periph.c,v 1.52 2003/09/10 18:23:43 alc Exp $");
+__FBSDID("$FreeBSD: src/sys/cam/cam_periph.c,v 1.53 2003/09/21 08:42:32 thomas Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -975,7 +975,7 @@
 				sense_key = saved_ccb->csio.sense_data.flags;
 				sense_key &= SSD_KEY;
 				if (sense_key != SSD_KEY_NO_SENSE) {
-					saved_ccb->ccb_h.flags |=
+					saved_ccb->ccb_h.status |=
 					    CAM_AUTOSNS_VALID;
 					xpt_print_path(saved_ccb->ccb_h.path);
 					printf("Recovered Sense\n");

==== //depot/projects/netperf/sys/cam/scsi/scsi_all.c#2 (text+ko) ====

@@ -28,7 +28,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/cam/scsi/scsi_all.c,v 1.42 2003/06/10 18:14:04 obrien Exp $");
+__FBSDID("$FreeBSD: src/sys/cam/scsi/scsi_all.c,v 1.43 2003/09/21 08:45:36 thomas Exp $");
 
 #include <sys/param.h>
 
@@ -2408,6 +2408,7 @@
 	scsi_cmd = (struct scsi_request_sense *)&csio->cdb_io.cdb_bytes;
 	bzero(scsi_cmd, sizeof(*scsi_cmd));
 	scsi_cmd->opcode = REQUEST_SENSE;
+	scsi_cmd->length = dxfer_len;
 }
 
 void

==== //depot/projects/netperf/sys/compat/linprocfs/linprocfs.c#5 (text+ko) ====

@@ -40,7 +40,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/compat/linprocfs/linprocfs.c,v 1.72 2003/09/09 19:22:55 des Exp $");
+__FBSDID("$FreeBSD: src/sys/compat/linprocfs/linprocfs.c,v 1.73 2003/09/22 15:52:32 des Exp $");
 
 #include <sys/param.h>
 #include <sys/queue.h>
@@ -413,18 +413,31 @@
 static int
 linprocfs_dostat(PFS_FILL_ARGS)
 {
+	int name[2], olen, plen;
+	int i, ncpu;
+
+	name[0] = CTL_HW;
+	name[1] = HW_NCPU;
+	if (kernel_sysctl(td, name, 2, &ncpu, &olen, NULL, 0, &plen) != 0)
+		ncpu = 0;
+	sbuf_printf(sb, "cpu %ld %ld %ld %ld\n",
+	    T2J(cp_time[CP_USER]),
+	    T2J(cp_time[CP_NICE]),
+	    T2J(cp_time[CP_SYS] /*+ cp_time[CP_INTR]*/),
+	    T2J(cp_time[CP_IDLE]));
+	for (i = 0; i < ncpu; ++i)
+		sbuf_printf(sb, "cpu%d %ld %ld %ld %ld\n", i,
+		    T2J(cp_time[CP_USER]) / ncpu,
+		    T2J(cp_time[CP_NICE]) / ncpu,
+		    T2J(cp_time[CP_SYS]) / ncpu,
+		    T2J(cp_time[CP_IDLE]) / ncpu);
 	sbuf_printf(sb,
-	    "cpu %ld %ld %ld %ld\n"
 	    "disk 0 0 0 0\n"
 	    "page %u %u\n"
 	    "swap %u %u\n"
 	    "intr %u\n"
 	    "ctxt %u\n"
 	    "btime %lld\n",
-	    T2J(cp_time[CP_USER]),
-	    T2J(cp_time[CP_NICE]),
-	    T2J(cp_time[CP_SYS] /*+ cp_time[CP_INTR]*/),
-	    T2J(cp_time[CP_IDLE]),
 	    cnt.v_vnodepgsin,
 	    cnt.v_vnodepgsout,
 	    cnt.v_swappgsin,

==== //depot/projects/netperf/sys/conf/NOTES#9 (text+ko) ====

@@ -1,4 +1,4 @@
-# $FreeBSD: src/sys/conf/NOTES,v 1.1175 2003/09/11 23:06:41 marcel Exp $
+# $FreeBSD: src/sys/conf/NOTES,v 1.1176 2003/09/19 19:04:30 jhb Exp $
 #
 # NOTES -- Lines that can be cut/pasted into kernel and hints configs.
 #
@@ -167,6 +167,13 @@
 # CPU.
 options 	ADAPTIVE_MUTEXES
 
+# MUTEX_NOINLINE forces mutex operations to call functions to perform each
+# operation rather than inlining the simple cases.  This can be used to
+# shrink the size of the kernel text segment.  Note that this behavior is
+# already implied by the INVARIANT_SUPPORT, INVARIANTS, MUTEX_PROFILING,
+# and WITNESS options.
+options 	MUTEX_NOINLINE
+
 # SMP Debugging Options:
 #
 # MUTEX_DEBUG enables various extra assertions in the mutex code.

==== //depot/projects/netperf/sys/conf/files.ia64#6 (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.58 2003/09/06 23:23:25 marcel Exp $
+# $FreeBSD: src/sys/conf/files.ia64,v 1.59 2003/09/20 19:27:48 marcel Exp $
 #
 # The long compile-with and dependency lines are required because of
 # limitations in config: backslash-newline doesn't work in strings, and
@@ -118,6 +118,7 @@
 ia64/ia64/sys_machdep.c		standard
 ia64/ia64/syscall.S		standard
 ia64/ia64/trap.c		standard
+ia64/ia64/uma_machdep.c		standard
 ia64/ia64/unaligned.c		standard
 ia64/ia64/unwind.c		standard
 ia64/ia64/vm_machdep.c		standard

==== //depot/projects/netperf/sys/contrib/dev/acpica/rsaddr.c#2 (text+ko) ====

@@ -168,6 +168,10 @@
     Buffer += 1;
     ACPI_MOVE_16_TO_16 (&Temp16, Buffer);
 
+    /* Check for the minimum length. */
+    if (Temp16 < 13)
+        return_ACPI_STATUS (AE_AML_INVALID_RESOURCE_TYPE);
+
     *BytesConsumed = Temp16 + 3;
     OutputStruct->Id = ACPI_RSTYPE_ADDRESS16;
 
@@ -275,11 +279,13 @@
     /*
      * This will leave us pointing to the Resource Source Index
      * If it is present, then save it off and calculate the
-     * pointer to where the null terminated string goes:
-     * Each Interrupt takes 32-bits + the 5 bytes of the
-     * stream that are default.
+     * pointer to where the null terminated string goes.
+     *
+     * Note that some buggy resources have a length that indicates the
+     * Index byte is present even though it isn't (since there is no
+     * following Resource String.)  We add one to catch these.
      */
-    if (*BytesConsumed > 16)
+    if (*BytesConsumed > 16 + 1)
     {
         /* Dereference the Index */
 
@@ -555,6 +561,10 @@
      */
     Buffer += 1;
     ACPI_MOVE_16_TO_16 (&Temp16, Buffer);
+
+    /* Check for the minimum length. */
+    if (Temp16 < 23)
+        return_ACPI_STATUS (AE_AML_INVALID_RESOURCE_TYPE);
     *BytesConsumed = Temp16 + 3;
 
     OutputStruct->Id = ACPI_RSTYPE_ADDRESS32;
@@ -667,9 +677,13 @@
     /*
      * This will leave us pointing to the Resource Source Index
      * If it is present, then save it off and calculate the
-     * pointer to where the null terminated string goes:
+     * pointer to where the null terminated string goes.
+     *
+     * Note that some buggy resources have a length that indicates the
+     * Index byte is present even though it isn't (since there is no
+     * following Resource String.)  We add one to catch these.
      */
-    if (*BytesConsumed > 26)
+    if (*BytesConsumed > 26 + 1)
     {
         /* Dereference the Index */
 
@@ -944,7 +958,11 @@
     Buffer += 1;
     ACPI_MOVE_16_TO_16 (&Temp16, Buffer);
 
+    /* Check for the minimum length. */
+    if (Temp16 < 43)
+        return_ACPI_STATUS (AE_AML_INVALID_RESOURCE_TYPE);
     *BytesConsumed = Temp16 + 3;
+
     OutputStruct->Id = ACPI_RSTYPE_ADDRESS64;
 
     /*
@@ -1056,11 +1074,13 @@
     /*
      * This will leave us pointing to the Resource Source Index
      * If it is present, then save it off and calculate the
-     * pointer to where the null terminated string goes:
-     * Each Interrupt takes 32-bits + the 5 bytes of the
-     * stream that are default.
+     * pointer to where the null terminated string goes.
+     *
+     * Note that some buggy resources have a length that indicates the
+     * Index byte is present even though it isn't (since there is no
+     * following Resource String.)  We add one to catch these.
      */
-    if (*BytesConsumed > 46)
+    if (*BytesConsumed > 46 + 1)
     {
         /* Dereference the Index */
 

==== //depot/projects/netperf/sys/contrib/dev/acpica/rsirq.c#2 (text+ko) ====

@@ -408,7 +408,11 @@
     Buffer += 1;
     ACPI_MOVE_16_TO_16 (&Temp16, Buffer);
 
+    /* Check for the minimum length. */
+    if (Temp16 < 6)
+        return_ACPI_STATUS (AE_AML_INVALID_RESOURCE_TYPE);
     *BytesConsumed = Temp16 + 3;
+
     OutputStruct->Id = ACPI_RSTYPE_EXT_IRQ;
 
     /*
@@ -446,6 +450,12 @@
     Buffer += 1;
     Temp8 = *Buffer;
 
+    /* Minimum number of IRQs is one. */
+    if (Temp8 < 1) {
+        *BytesConsumed = 0;
+        return_ACPI_STATUS (AE_AML_INVALID_RESOURCE_TYPE);
+    }
+
     OutputStruct->Data.ExtendedIrq.NumberOfInterrupts = Temp8;
 
     /*
@@ -480,7 +490,8 @@
      * stream that are default.
      */
     if (*BytesConsumed >
-        ((ACPI_SIZE) OutputStruct->Data.ExtendedIrq.NumberOfInterrupts * 4) + 5)
+        ((ACPI_SIZE) OutputStruct->Data.ExtendedIrq.NumberOfInterrupts * 4)
+        + 5 + 1)
     {
         /* Dereference the Index */
 

==== //depot/projects/netperf/sys/crypto/rijndael/rijndael-api-fst.c#3 (text+ko) ====

@@ -16,7 +16,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/crypto/rijndael/rijndael-api-fst.c,v 1.6 2003/09/17 08:51:43 ume Exp $");
+__FBSDID("$FreeBSD: src/sys/crypto/rijndael/rijndael-api-fst.c,v 1.7 2003/09/18 17:26:56 ume Exp $");
 
 #include <sys/param.h>
 #include <sys/types.h>
@@ -246,7 +246,7 @@
 			outBuffer += 16;
 		}
 		padLen = 16 - (inputOctets - 16*numBlocks);
-		if (padLen > 0 && padLen <= 16)
+		if (padLen <= 0 || padLen > 16)
 			return BAD_CIPHER_STATE;
 		for (i = 0; i < 16 - padLen; i++) {
 			block[i] = input[i] ^ iv[i];

==== //depot/projects/netperf/sys/dev/acpica/acpi.c#7 (text+ko) ====

@@ -26,7 +26,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- *	$FreeBSD: src/sys/dev/acpica/acpi.c,v 1.100 2003/09/15 06:29:31 njl Exp $
+ *	$FreeBSD: src/sys/dev/acpica/acpi.c,v 1.102 2003/09/18 05:12:45 njl Exp $
  */
 
 #include "opt_acpi.h"
@@ -1027,7 +1027,6 @@
 acpi_enable_fixed_events(struct acpi_softc *sc)
 {
     static int	first_time = 1;
-#define MSGFORMAT "%s button is handled as a fixed feature programming model.\n"
 
     ACPI_ASSERTLOCK;
 
@@ -1039,7 +1038,7 @@
 				     acpi_eventhandler_power_button_for_sleep,
 				     sc);
 	if (first_time)
-	    device_printf(sc->acpi_dev, MSGFORMAT, "power");
+	    device_printf(sc->acpi_dev, "Power Button (fixed)\n");
     }
     if (AcpiGbl_FADT != NULL && AcpiGbl_FADT->SleepButton == 0) {
 	AcpiEnableEvent(ACPI_EVENT_SLEEP_BUTTON, 0);
@@ -1048,7 +1047,7 @@
 				     acpi_eventhandler_sleep_button_for_sleep,
 				     sc);
 	if (first_time)
-	    device_printf(sc->acpi_dev, MSGFORMAT, "sleep");
+	    device_printf(sc->acpi_dev, "Sleep Button (fixed)\n");
     }
 
     first_time = 0;

==== //depot/projects/netperf/sys/dev/acpica/acpi_button.c#4 (text+ko) ====

@@ -25,7 +25,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- *	$FreeBSD: src/sys/dev/acpica/acpi_button.c,v 1.13 2003/08/11 15:34:43 njl Exp $
+ *	$FreeBSD: src/sys/dev/acpica/acpi_button.c,v 1.16 2003/09/22 04:50:29 njl Exp $
  */
 
 #include "opt_acpi.h"
@@ -43,9 +43,10 @@
 struct acpi_button_softc {
     device_t	button_dev;
     ACPI_HANDLE	button_handle;
-    boolean_t	button_type;	/* Power or Sleep Button */
+    boolean_t	button_type;
 #define		ACPI_POWER_BUTTON	0
 #define		ACPI_SLEEP_BUTTON	1
+    boolean_t	fixed;
 };
 
 #define		ACPI_NOTIFY_BUTTON_PRESSED_FOR_SLEEP	0x80
@@ -57,6 +58,8 @@
 static int	acpi_button_resume(device_t dev);
 static void 	acpi_button_notify_handler(ACPI_HANDLE h, UINT32 notify,
 					   void *context);
+static ACPI_STATUS
+		acpi_button_fixed_handler(void *context);
 static void	acpi_button_notify_pressed_for_sleep(void *arg);
 static void	acpi_button_notify_pressed_for_wakeup(void *arg);
 
@@ -85,23 +88,31 @@
 acpi_button_probe(device_t dev)
 {
     struct acpi_button_softc	*sc;
+    int ret = ENXIO;
 
     sc = device_get_softc(dev);
-    if (acpi_get_type(dev) == ACPI_TYPE_DEVICE) {
-	if (!acpi_disabled("button")) {
-	    if (acpi_MatchHid(dev, "PNP0C0C")) {
-		device_set_desc(dev, "Power Button");
-		sc->button_type = ACPI_POWER_BUTTON;
-		return (0);
-	    }
-	    if (acpi_MatchHid(dev, "PNP0C0E")) {
-		device_set_desc(dev, "Sleep Button");
-		sc->button_type = ACPI_SLEEP_BUTTON;
-		return (0);
-	    }
+    if (acpi_get_type(dev) == ACPI_TYPE_DEVICE && !acpi_disabled("button")) {
+	if (acpi_MatchHid(dev, "PNP0C0C")) {
+	    device_set_desc(dev, "Power Button");
+	    sc->button_type = ACPI_POWER_BUTTON;
+	    ret = 0;
+	} else if (acpi_MatchHid(dev, "ACPI_FPB")) {
+	    device_set_desc(dev, "Power Button (fixed)");
+	    sc->button_type = ACPI_POWER_BUTTON;
+	    sc->fixed = 1;
+	    ret = 0;
+	} else if (acpi_MatchHid(dev, "PNP0C0E")) {
+	    device_set_desc(dev, "Sleep Button");
+	    sc->button_type = ACPI_SLEEP_BUTTON;
+	    ret = 0;
+	} else if (acpi_MatchHid(dev, "ACPI_FSB")) {
+	    device_set_desc(dev, "Sleep Button (fixed)");
+	    sc->button_type = ACPI_SLEEP_BUTTON;
+	    sc->fixed = 1;
+	    ret = 0;
 	}
     }
-    return (ENXIO);
+    return (ret);
 }
 
 static int
@@ -109,6 +120,7 @@
 {
     struct acpi_button_softc	*sc;
     ACPI_STATUS			status;
+    int event;
 
     ACPI_FUNCTION_TRACE((char *)(uintptr_t)__func__);
 
@@ -116,10 +128,17 @@
     sc->button_dev = dev;
     sc->button_handle = acpi_get_handle(dev);
 
-    status = AcpiInstallNotifyHandler(sc->button_handle, ACPI_DEVICE_NOTIFY, 
-				      acpi_button_notify_handler, sc);
+    if (sc->fixed) {
+	event = (sc->button_type == ACPI_SLEEP_BUTTON) ?
+		ACPI_EVENT_SLEEP_BUTTON : ACPI_EVENT_POWER_BUTTON;
+	status = AcpiInstallFixedEventHandler(event,
+			acpi_button_fixed_handler, sc);
+    } else {
+	status = AcpiInstallNotifyHandler(sc->button_handle,
+			ACPI_DEVICE_NOTIFY, acpi_button_notify_handler, sc);
+    }
     if (ACPI_FAILURE(status)) {
-	device_printf(sc->button_dev, "couldn't install Notify handler - %s\n",
+	device_printf(sc->button_dev, "couldn't install notify handler - %s\n",
 		      AcpiFormatException(status));
 	return_VALUE (ENXIO);
     }
@@ -217,3 +236,18 @@
 	break;		/* unknown notification value */
     }
 }
+
+static ACPI_STATUS 
+acpi_button_fixed_handler(void *context)
+{
+    struct acpi_button_softc	*sc = (struct acpi_button_softc *)context;
+
+    ACPI_FUNCTION_TRACE_PTR((char *)(uintptr_t)__func__, context);
+
+    if (context == NULL)
+	return_ACPI_STATUS (AE_BAD_PARAMETER);
+
+    acpi_button_notify_handler(sc->button_handle,
+			       ACPI_NOTIFY_BUTTON_PRESSED_FOR_SLEEP, sc);
+    return_ACPI_STATUS (AE_OK);
+}

==== //depot/projects/netperf/sys/dev/ata/ata-lowlevel.c#4 (text+ko) ====

@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/ata/ata-lowlevel.c,v 1.13 2003/09/16 15:21:37 sos Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/ata/ata-lowlevel.c,v 1.16 2003/09/20 08:38:33 sos Exp $");
 
 #include "opt_ata.h"
 #include <sys/param.h>
@@ -329,6 +329,7 @@
 
 	    /* if data write command, output the data */
 	    if (request->flags & ATA_R_WRITE) {
+
 		/* if we get an error here we are done with the HW */
 		if (ata_wait(request->device,
 			     (ATA_S_READY | ATA_S_DSC | ATA_S_DRQ)) < 0) {
@@ -336,11 +337,10 @@
 		    request->status = ATA_IDX_INB(ch, ATA_STATUS);
 		    break;
 		}
-		else {
-		    /* output data and return waiting for new interrupt */
-		    ata_pio_write(request, request->transfersize);
-		    return;
-		}
+
+		/* output data and return waiting for new interrupt */
+		ata_pio_write(request, request->transfersize);
+		return;
 	    }
 
 	    /* if data read command, return & wait for interrupt */
@@ -543,7 +543,7 @@
 			   "stat=0x%02x err=0x%02x lsb=0x%02x msb=0x%02x\n",
 			   stat0, err, lsb, msb);
 	    if (!(stat0 & ATA_S_BUSY)) {
-		if (err == ATA_E_ILI) {
+		if ((err & 0x7f) == ATA_E_ILI) {
 		    if (lsb == ATAPI_MAGIC_LSB && msb == ATAPI_MAGIC_MSB) {
 			ch->devices |= ATA_ATAPI_MASTER;
 		    }
@@ -551,11 +551,8 @@
 			ch->devices |= ATA_ATA_MASTER;
 		    }
 		}
-		else if (err == lsb && err == msb) {
-		    ATA_IDX_OUTB(ch, ATA_ERROR, 0xff);
-		    DELAY(10);
-    	    	    if (stat0 == ATA_IDX_INB(ch, ATA_STATUS))
-			stat0 |= ATA_S_BUSY;
+		else if ((stat0 & 0x4f) && err == lsb && err == msb) {
+		    stat0 |= ATA_S_BUSY;
 		}
 	    }
 	}
@@ -571,7 +568,7 @@
 			   " stat=0x%02x err=0x%02x lsb=0x%02x msb=0x%02x\n",
 			   stat1, err, lsb, msb);
 	    if (!(stat1 & ATA_S_BUSY)) {
-		if (err == ATA_E_ILI) {
+		if ((err & 0x7f) == ATA_E_ILI) {
 		    if (lsb == ATAPI_MAGIC_LSB && msb == ATAPI_MAGIC_MSB) {
 			ch->devices |= ATA_ATAPI_SLAVE;
 		    }
@@ -579,11 +576,8 @@
 			ch->devices |= ATA_ATA_SLAVE;
 		    }
 		}
-		else if (err == lsb && err == msb) {
-		    ATA_IDX_OUTB(ch, ATA_ERROR, 0xff);
-		    DELAY(10);
-    	    	    if (stat1 == ATA_IDX_INB(ch, ATA_STATUS))
-			stat1 |= ATA_S_BUSY;
+		else if ((stat1 & 0x4f) && err == lsb && err == msb) {
+		    stat1 |= ATA_S_BUSY;
 		}
 	    }
 	}

==== //depot/projects/netperf/sys/dev/ata/ata-queue.c#3 (text+ko) ====

@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/ata/ata-queue.c,v 1.4 2003/08/28 08:22:53 sos Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/ata/ata-queue.c,v 1.6 2003/09/19 12:46:12 sos Exp $");
 
 #include "opt_ata.h"
 #include <sys/param.h>
@@ -47,7 +47,7 @@
 /* prototypes */
 static void ata_completed(void *, int);
 static void ata_timeout(struct ata_request *);
-static char *ata_sensekey2str(u_int8_t);
+static char *ata_skey2str(u_int8_t);
 
 /* local vars */
 static MALLOC_DEFINE(M_ATA_REQ, "ATA request", "ATA request");
@@ -260,12 +260,12 @@
 
     /* ATAPI errors */
     case ATA_R_ATAPI:
-	/* is result already set return */
+	/* skip if result already set */
 	if (request->result)
 	    break;
 
-	if (request->error & ATA_E_MASK) {
-	    switch ((request->result & ATA_SK_MASK)) {
+	if (request->error) {
+	    switch ((request->error & ATA_SK_MASK)) {
 	    case ATA_SK_RECOVERED_ERROR:
 		ata_prtdev(request->device, "WARNING - %s recovered error\n",
 			   ata_cmd2str(request));
@@ -285,18 +285,20 @@
 		break;
 
 	    default:
+		if (!(request->flags & ATA_R_QUIET))
+		    ata_prtdev(request->device,
+			       "FAILURE - %s status=%b sensekey=%s error=%b\n",
+			       ata_cmd2str(request),
+			       request->status, "\20\10BUSY\7READY\6DMA"
+			       "\5DSC\4DRQ\3CORRECTABLE\2INDEX\1ERROR",
+			       ata_skey2str((request->error & ATA_SK_MASK)>>4),
+			       (request->error & ATA_E_MASK),
+			       "\20\4MEDIA_CHANGE_REQUEST\3ABORTED"
+			       "\2NO_MEDIA\1ILLEGAL_LENGTH");
 		request->result = EIO;
 	    }
-	    if (request->result && !(request->flags & ATA_R_QUIET))
-		ata_prtdev(request->device,
-			   "FAILURE - %s status=%b sensekey=%s error=%b\n",
-			   ata_cmd2str(request),
-			   request->status, "\20\10BUSY\7READY\6DMA"
-			   "\5DSC\4DRQ\3CORRECTABLE\2INDEX\1ERROR",
-			   ata_sensekey2str((request->error & ATA_SK_MASK)>>4),
-			   (request->error & ATA_E_MASK),
-			   "\20\4MEDIA_CHANGE_REQUEST\3ABORTED"
-			   "\2NO_MEDIA\1ILLEGAL_LENGTH");
+	    if (request->error & ATA_E_MASK)
+		request->result = EIO;
 	}
 	break;
     }
@@ -369,6 +371,7 @@
 	case 0x0a: return ("WRITE");
 	case 0x10: return ("WEOF");
 	case 0x11: return ("SPACE");
+	case 0x12: return ("INQUIRY");
 	case 0x15: return ("MODE_SELECT");
 	case 0x19: return ("ERASE");
 	case 0x1a: return ("MODE_SENSE");
@@ -449,7 +452,7 @@
 }
 
 static char *
-ata_sensekey2str(u_int8_t skey)
+ata_skey2str(u_int8_t skey)
 {
     switch (skey) {
     case 0x00: return ("NO SENSE");

==== //depot/projects/netperf/sys/dev/ata/atapi-cam.c#6 (text+ko) ====

@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/ata/atapi-cam.c,v 1.22 2003/09/11 17:34:47 thomas Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/ata/atapi-cam.c,v 1.25 2003/09/21 16:49:53 thomas Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -59,7 +59,7 @@
     int			lun;
     union ccb		*ccb;
     int			flags;
-#define DOING_AUTOSENSE 1
+#define QUEUED		0x0001
 
     char		*dxfer_alloc;
     TAILQ_ENTRY(atapi_hcb) chain;
@@ -346,8 +346,8 @@
 	struct ccb_trans_settings *cts = &ccb->cts;
 
 	/*
-	 * XXX The default CAM transport code is very scsi specific and
-	 * doesn't understand IDE speeds very well.  Be silent about it
+	 * XXX The default CAM transport code is very SCSI-specific and
+	 * doesn't understand IDE speeds very well. Be silent about it
 	 * here and let it default to what is set in XPT_PATH_INQ
 	 */
 	CAM_DEBUG(ccb->ccb_h.path, CAM_DEBUG_SUBTRACE, ("GET_TRAN_SETTINGS\n"));
@@ -369,6 +369,7 @@
 	struct ccb_scsiio *csio = &ccb->csio;
 	int tid = ccb_h->target_id, lid = ccb_h->target_lun;
 	struct ata_device *dev = get_ata_device(softc, tid);
+	int request_flags = ATA_R_QUIET | ATA_R_ATAPI;
 
 	CAM_DEBUG(ccb_h->path, CAM_DEBUG_SUBTRACE, ("XPT_SCSI_IO\n"));
 
@@ -397,9 +398,24 @@
 	    /* scatter-gather not supported */
 	    xpt_print_path(ccb_h->path);
 	    printf("ATAPI/CAM does not support scatter-gather yet!\n");
-	    break;
+	    goto action_invalid;
 	}
 
+	switch (ccb_h->flags & CAM_DIR_MASK) {
+	case CAM_DIR_IN:
+	     request_flags |= ATA_R_READ;
+	     break;
+	case CAM_DIR_OUT:
+	     request_flags |= ATA_R_WRITE;
+	     break;
+	case CAM_DIR_NONE:
+	     request_flags |= ATA_R_CONTROL;
+	     break;
+	default:
+	     ata_prtdev(dev, "unknown IO operation\n");
+	     goto action_invalid;
+	 }
+
 	if ((hcb = allocate_hcb(softc, unit, bus, ccb)) == NULL) {
 	    printf("cannot allocate ATAPI/CAM hcb\n");
 	    goto action_oom;
@@ -409,8 +425,6 @@
 	    goto action_oom;
 	}
 
-	ccb_h->status |= CAM_SIM_QUEUED;
-
 	bcopy((ccb_h->flags & CAM_CDB_POINTER) ?
 	      csio->cdb_io.cdb_ptr : csio->cdb_io.cdb_bytes,
 	      request->u.atapi.ccb, csio->cdb_len);
@@ -467,8 +481,8 @@
 
 	if ((ccb_h->flags & CAM_DIR_MASK) == CAM_DIR_IN && (len & 1)) {
 	    /* ATA always transfers an even number of bytes */
-	    if (!(buf = hcb->dxfer_alloc = malloc(++len, M_ATACAM,
-						  M_NOWAIT | M_ZERO))) {
+	    if ((buf = hcb->dxfer_alloc
+                 = malloc(++len, M_ATACAM, M_NOWAIT | M_ZERO)) == NULL) {
 		printf("cannot allocate ATAPI/CAM buffer\n");
 		goto action_oom;
 	    }
@@ -481,23 +495,11 @@
 	request->timeout = ccb_h->timeout;
 	request->retries = 2;
 	request->callback = &atapi_cb;
-	request->flags = (ATA_R_QUIET | ATA_R_ATAPI);
-	switch (ccb_h->flags & CAM_DIR_MASK) {
-	case CAM_DIR_IN:
-	     request->flags |= ATA_R_READ;
-	     break;
-	case CAM_DIR_OUT:
-	     request->flags |= ATA_R_WRITE;
-	     break;
-	case CAM_DIR_NONE:
-	     request->flags |= ATA_R_CONTROL;
-	     break;
-	default:
-	     ata_prtdev(dev, "unknown IO operation\n");
-	     goto action_invalid;
-	 }
+	request->flags = request_flags;
 
 	TAILQ_INSERT_TAIL(&softc->pending_hcbs, hcb, chain);
+	hcb->flags |= QUEUED;
+	ccb_h->status |= CAM_SIM_QUEUED;
 
 	ata_queue_request(request);
 	return;
@@ -509,6 +511,8 @@
 	goto action_invalid;
     }
 
+    /* NOTREACHED */
+
 action_oom:
     if (request != NULL)
 	ata_free_request(request);
@@ -523,9 +527,9 @@
     return;
 
 action_invalid:
-   ccb_h->status = CAM_REQ_INVALID;
-   xpt_done(ccb);
-   return;
+    ccb_h->status = CAM_REQ_INVALID;
+    xpt_done(ccb);
+    return;
 }
 
 static void
@@ -540,23 +544,31 @@
 {
     struct atapi_hcb *hcb = (struct atapi_hcb *) request->driver;
     struct ccb_scsiio *csio = &hcb->ccb->csio;
-    int hcb_status = request->result;
+    u_int32_t rc;
 
     mtx_lock(&Giant);
-
 #ifdef CAMDEBUG
-	if (CAM_DEBUGGED(csio->ccb_h.path, CAM_DEBUG_CDB)) {
-		printf("atapi_cb: hcb@%p status = %02x: (sk = %02x%s%s%s)\n",
-		       hcb, hcb_status, hcb_status >> 4,
-		       (hcb_status & 4) ? " ABRT" : "",
-		       (hcb_status & 2) ? " EOM" : "",
-		       (hcb_status & 1) ? " ILI" : "");
-		printf("    %s: cmd %02x\n",
-		    request->device->name, request->u.atapi.ccb[0]);
-	}
+# define err (request->error)
+    if (CAM_DEBUGGED(csio->ccb_h.path, CAM_DEBUG_CDB)) {
+	printf("atapi_cb: hcb@%p error = %02x: (sk = %02x%s%s%s)\n",
+	       hcb, err, err >> 4,
+	       (err & 4) ? " ABRT" : "",
+	       (err & 2) ? " EOM" : "",
+	       (err & 1) ? " ILI" : "");
+	printf("dev %s: cmd %02x status %02x result %02x\n",
+	    request->device->name, request->u.atapi.ccb[0],
+	    request->status, request->result);
+    }
 #endif
-    if (hcb_status != 0) {
+
+    if (request->result != 0) {
+	rc = CAM_SCSI_STATUS_ERROR;
 	csio->scsi_status = SCSI_STATUS_CHECK_COND;
+#if 0
+	/*
+         * XXX Temporarily disable autosense, as this seems to cause
+	 * a missed ATA interrupt.
+	 */
 	if ((csio->ccb_h.flags & CAM_DIS_AUTOSENSE) == 0) {
 	    int8_t ccb[16] = { ATAPI_REQUEST_SENSE, 0, 0, 0,
 		sizeof(struct atapi_sense), 0, 0, 0, 0, 0, 0,
@@ -568,17 +580,17 @@
 		csio->ccb_h.status |= CAM_AUTOSNS_VALID;
 	    }
 	}
-	free_hcb_and_ccb_done(hcb, CAM_SCSI_STATUS_ERROR);
-    }
-    else {
+#endif
+    } else {
+	rc = CAM_REQ_CMP;
+	csio->scsi_status = SCSI_STATUS_OK;
 	if (((csio->ccb_h.flags & CAM_DIR_MASK) == CAM_DIR_IN) &&
 	    hcb->dxfer_alloc != NULL)
 	{
 	    bcopy(hcb->dxfer_alloc, csio->data_ptr, csio->dxfer_len);
 	}
-	csio->scsi_status = SCSI_STATUS_OK;
-	free_hcb_and_ccb_done(hcb, CAM_REQ_CMP);
     }
+    free_hcb_and_ccb_done(hcb, rc);
     mtx_unlock(&Giant);
 }
 
@@ -690,7 +702,8 @@
 static void
 free_hcb(struct atapi_hcb *hcb)
 {
-    TAILQ_REMOVE(&hcb->softc->pending_hcbs, hcb, chain);
+    if ((hcb->flags & QUEUED) != 0)
+	TAILQ_REMOVE(&hcb->softc->pending_hcbs, hcb, chain);
     if (hcb->dxfer_alloc != NULL)
 	free(hcb->dxfer_alloc, M_ATACAM);
     free(hcb, M_ATACAM);

==== //depot/projects/netperf/sys/dev/ata/atapi-cd.c#6 (text+ko) ====

@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/ata/atapi-cd.c,v 1.145 2003/09/16 14:41:44 sos Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/ata/atapi-cd.c,v 1.146 2003/09/21 18:57:12 phk Exp $");
 
 #include "opt_ata.h"
 #include <sys/param.h>
@@ -243,7 +243,7 @@
 	free(entry, M_ACD);
     }
     destroy_dev(cdp->dev);
-#ifdef GONE_IN_5
+#ifdef BURN_BRIDGES
     EVENTHANDLER_DEREGISTER(dev_clone, cdp->clone_evh);
 #endif
     devstat_remove_entry(cdp->stats);
@@ -276,7 +276,7 @@
     return cdp;
 }
 
-#ifdef GONE_IN_5
+#ifdef BURN_BRIDGES
 static void
 acd_clone(void *arg, char *name, int namelen, dev_t *dev)
 {
@@ -288,8 +288,13 @@
 	return;
     if (!dev_stdclone(name, &p, "acd", &unit))
 	return;
+#ifdef GONE_IN_5
+    if (*p != '\0')
+	return;
+#else
     if (*p != '\0' && strcmp(p, "a") != 0 && strcmp(p, "c") != 0)
 	return;
+#endif
     if (unit == cdp->lun)
 	*dev = makedev(acd_cdevsw.d_maj, cdp->lun);
 }
@@ -305,7 +310,7 @@
     dev->si_drv1 = cdp;
     cdp->dev = dev;

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



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