Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 30 Mar 2005 20:29:01 GMT
From:      Sam Leffler <sam@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 74119 for review
Message-ID:  <200503302029.j2UKT1K7060210@repoman.freebsd.org>

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

Change 74119 by sam@sam_ebb on 2005/03/30 20:28:19

	IFC @ 74118

Affected files ...

.. //depot/projects/wifi/etc/periodic/weekly/330.catman#2 integrate
.. //depot/projects/wifi/lib/libdisk/change.c#2 integrate
.. //depot/projects/wifi/libexec/rtld-elf/rtld.c#6 integrate
.. //depot/projects/wifi/sbin/atacontrol/atacontrol.c#2 integrate
.. //depot/projects/wifi/sbin/sunlabel/sunlabel.8#2 integrate
.. //depot/projects/wifi/sbin/sunlabel/sunlabel.c#3 integrate
.. //depot/projects/wifi/sys/compat/ndis/subr_ntoskrnl.c#11 integrate
.. //depot/projects/wifi/sys/conf/files#21 integrate
.. //depot/projects/wifi/sys/conf/kmod.mk#10 integrate
.. //depot/projects/wifi/sys/conf/options#13 integrate
.. //depot/projects/wifi/sys/dev/acpi_support/acpi_asus.c#4 integrate
.. //depot/projects/wifi/sys/dev/ata/ata-all.c#4 integrate
.. //depot/projects/wifi/sys/dev/ata/ata-all.h#3 integrate
.. //depot/projects/wifi/sys/dev/ata/ata-card.c#4 integrate
.. //depot/projects/wifi/sys/dev/ata/ata-cbus.c#2 integrate
.. //depot/projects/wifi/sys/dev/ata/ata-chipset.c#5 integrate
.. //depot/projects/wifi/sys/dev/ata/ata-commands.h#2 integrate
.. //depot/projects/wifi/sys/dev/ata/ata-disk.c#4 integrate
.. //depot/projects/wifi/sys/dev/ata/ata-disk.h#2 integrate
.. //depot/projects/wifi/sys/dev/ata/ata-dma.c#3 integrate
.. //depot/projects/wifi/sys/dev/ata/ata-isa.c#2 integrate
.. //depot/projects/wifi/sys/dev/ata/ata-lowlevel.c#6 integrate
.. //depot/projects/wifi/sys/dev/ata/ata-pci.c#3 integrate
.. //depot/projects/wifi/sys/dev/ata/ata-pci.h#3 integrate
.. //depot/projects/wifi/sys/dev/ata/ata-queue.c#4 integrate
.. //depot/projects/wifi/sys/dev/ata/ata-raid.c#2 integrate
.. //depot/projects/wifi/sys/dev/ata/ata-raid.h#2 integrate
.. //depot/projects/wifi/sys/dev/ata/ata_if.m#1 branch
.. //depot/projects/wifi/sys/dev/ata/atapi-cd.c#4 integrate
.. //depot/projects/wifi/sys/dev/ata/atapi-cd.h#2 integrate
.. //depot/projects/wifi/sys/dev/ata/atapi-fd.c#2 integrate
.. //depot/projects/wifi/sys/dev/ata/atapi-fd.h#2 integrate
.. //depot/projects/wifi/sys/dev/ata/atapi-tape.c#3 integrate
.. //depot/projects/wifi/sys/dev/ata/atapi-tape.h#2 integrate
.. //depot/projects/wifi/sys/dev/ath/ath_rate/amrr/amrr.c#10 integrate
.. //depot/projects/wifi/sys/dev/ath/ath_rate/onoe/onoe.c#10 integrate
.. //depot/projects/wifi/sys/dev/ath/if_ath.c#79 integrate
.. //depot/projects/wifi/sys/dev/ath/if_athioctl.h#8 integrate
.. //depot/projects/wifi/sys/dev/ath/if_athrate.h#5 integrate
.. //depot/projects/wifi/sys/dev/ath/if_athvar.h#31 integrate
.. //depot/projects/wifi/sys/dev/usb/ukbd.c#4 integrate
.. //depot/projects/wifi/sys/geom/geom_pc98.c#4 integrate
.. //depot/projects/wifi/sys/geom/geom_sunlabel_enc.c#3 integrate
.. //depot/projects/wifi/sys/modules/Makefile#16 integrate
.. //depot/projects/wifi/sys/modules/ata/Makefile#1 branch
.. //depot/projects/wifi/sys/modules/ata/Makefile.inc#1 branch
.. //depot/projects/wifi/sys/modules/ata/ata/Makefile#1 branch
.. //depot/projects/wifi/sys/modules/ata/atacam/Makefile#1 branch
.. //depot/projects/wifi/sys/modules/ata/atacard/Makefile#1 branch
.. //depot/projects/wifi/sys/modules/ata/atacbus/Makefile#1 branch
.. //depot/projects/wifi/sys/modules/ata/atadisk/Makefile#1 branch
.. //depot/projects/wifi/sys/modules/ata/ataisa/Makefile#1 branch
.. //depot/projects/wifi/sys/modules/ata/atapci/Makefile#1 branch
.. //depot/projects/wifi/sys/modules/ata/atapicd/Makefile#1 branch
.. //depot/projects/wifi/sys/modules/ata/atapifd/Makefile#1 branch
.. //depot/projects/wifi/sys/modules/ata/atapist/Makefile#1 branch
.. //depot/projects/wifi/sys/modules/ata/ataraid/Makefile#1 branch
.. //depot/projects/wifi/sys/netinet/ip_carp.c#4 integrate
.. //depot/projects/wifi/sys/pc98/conf/GENERIC#6 integrate
.. //depot/projects/wifi/sys/sys/ata.h#2 integrate
.. //depot/projects/wifi/sys/sys/sun_disklabel.h#3 integrate
.. //depot/projects/wifi/sys/vm/vm_object.c#10 integrate
.. //depot/projects/wifi/tools/tools/ath/80211watch.c#3 integrate
.. //depot/projects/wifi/usr.bin/make/cond.c#9 integrate
.. //depot/projects/wifi/usr.bin/make/cond.h#2 integrate
.. //depot/projects/wifi/usr.bin/make/globals.h#3 integrate
.. //depot/projects/wifi/usr.bin/make/parse.c#12 integrate
.. //depot/projects/wifi/usr.bin/make/parse.h#2 integrate
.. //depot/projects/wifi/usr.bin/make/var.c#12 integrate
.. //depot/projects/wifi/usr.sbin/sysinstall/disks.c#2 integrate

Differences ...

==== //depot/projects/wifi/etc/periodic/weekly/330.catman#2 (text+ko) ====

@@ -1,6 +1,6 @@
 #!/bin/sh -
 #
-# $FreeBSD: src/etc/periodic/weekly/330.catman,v 1.9 2002/03/05 19:13:05 cjc Exp $
+# $FreeBSD: src/etc/periodic/weekly/330.catman,v 1.10 2005/03/30 18:02:49 ru Exp $
 #
 
 # If there is a global system configuration file, suck it in.
@@ -34,7 +34,7 @@
 		    rc=0
          
 		    # Preformat original, non-localized manpages  
-		    echo /usr/libexec/catman.local "$MANPATH" |
+		    echo /usr/libexec/catman.local -r "$MANPATH" |
 			su -fm man || rc=3
 
 		    # Preformat localized manpages.
@@ -42,7 +42,7 @@
 		    then
 			for i in $man_locales
 			do
-			    echo /usr/libexec/catman.local -L \
+			    echo /usr/libexec/catman.local -Lr \
 				"$MANPATH" | LC_ALL=$i su -fm man || rc=3
 			done
 		    fi

==== //depot/projects/wifi/lib/libdisk/change.c#2 (text+ko) ====

@@ -8,7 +8,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/lib/libdisk/change.c,v 1.25 2004/01/27 15:25:33 nyan Exp $");
+__FBSDID("$FreeBSD: src/lib/libdisk/change.c,v 1.26 2005/03/30 13:03:33 nyan Exp $");
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -40,7 +40,11 @@
 	if (disk->bios_cyl > 1024)
 #endif
 		sane = 0;
+#ifdef PC98
+	if (disk->bios_hd >= 256)
+#else
 	if (disk->bios_hd > 16)
+#endif
 		sane = 0;
 #ifdef PC98
 	if (disk->bios_sect >= 256)
@@ -68,8 +72,8 @@
 		return;
 
 	/* Hmm, try harder... */
+	/* Assume standard SCSI parameter */
 #ifdef PC98
-	/* Assume standard SCSI parameter */
 	disk->bios_sect = 128;
 	disk->bios_hd = 8;
 #else
@@ -77,6 +81,25 @@
 #endif
 	disk->bios_cyl = disk->chunks->size /
 		(disk->bios_sect * disk->bios_hd);
+
+#ifdef PC98
+	if (disk->bios_cyl < 65536)
+		return;
+
+	/* Assume UIDE-133/98-A Challenger BIOS 0.9821C parameter */
+	disk->bios_sect = 255;
+	disk->bios_hd = 16;
+	disk->bios_cyl = disk->chunks->size /
+		(disk->bios_sect * disk->bios_hd);
+
+	if (disk->bios_cyl < 65536)
+		return;
+
+	/* BIG-na-Drive? */
+	disk->bios_hd = 255;
+	disk->bios_cyl = disk->chunks->size /
+		(disk->bios_sect * disk->bios_hd);
+#endif
 }
 
 void

==== //depot/projects/wifi/libexec/rtld-elf/rtld.c#6 (text+ko) ====

@@ -23,7 +23,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/libexec/rtld-elf/rtld.c,v 1.105 2005/03/24 10:12:29 cperciva Exp $
+ * $FreeBSD: src/libexec/rtld-elf/rtld.c,v 1.106 2005/03/30 08:28:26 dfr Exp $
  */
 
 /*
@@ -2560,7 +2560,7 @@
     size = tls_static_space;
 
     tls = malloc(size);
-    dtv = malloc((tls_max_index + 2) * sizeof(Elf_Addr));
+    dtv = calloc(1, (tls_max_index + 2) * sizeof(Elf_Addr));
 
     *(Elf_Addr**) tls = dtv;
 
@@ -2601,8 +2601,6 @@
 		    memcpy((void*) addr, obj->tlsinit,
 			   obj->tlsinitsize);
 		dtv[obj->tlsindex + 1] = addr;
-	    } else if (obj->tlsindex) {
-		dtv[obj->tlsindex + 1] = 0;
 	    }
 	}
     }
@@ -2629,7 +2627,7 @@
     tlsstart = (Elf_Addr) tls;
     tlsend = tlsstart + size;
     for (i = 0; i < dtvsize; i++) {
-	if (dtv[i+2] < tlsstart || dtv[i+2] > tlsend) {
+	if (dtv[i+2] && (dtv[i+2] < tlsstart || dtv[i+2] > tlsend)) {
 	    free((void*) dtv[i+2]);
 	}
     }
@@ -2659,7 +2657,7 @@
 
     assert(tcbsize >= 2*sizeof(Elf_Addr));
     tls = malloc(size + tcbsize);
-    dtv = malloc((tls_max_index + 2) * sizeof(Elf_Addr));
+    dtv = calloc(1, (tls_max_index + 2) * sizeof(Elf_Addr));
 
     segbase = (Elf_Addr)(tls + size);
     ((Elf_Addr*)segbase)[0] = segbase;
@@ -2703,8 +2701,6 @@
 		if (obj->tlsinit)
 		    memcpy((void*) addr, obj->tlsinit, obj->tlsinitsize);
 		dtv[obj->tlsindex + 1] = addr;
-	    } else if (obj->tlsindex) {
-		dtv[obj->tlsindex + 1] = 0;
 	    }
 	}
     }
@@ -2731,7 +2727,7 @@
     tlsend = (Elf_Addr) tls;
     tlsstart = tlsend - size;
     for (i = 0; i < dtvsize; i++) {
-	if (dtv[i+2] < tlsstart || dtv[i+2] > tlsend) {
+	if (dtv[i+2] && (dtv[i+2] < tlsstart || dtv[i+2] > tlsend)) {
 	    free((void*) dtv[i+2]);
 	}
     }

==== //depot/projects/wifi/sbin/atacontrol/atacontrol.c#2 (text+ko) ====

@@ -1,5 +1,5 @@
 /*-
- * Copyright (c) 2000 - 2004 Søren Schmidt <sos@FreeBSD.org>
+ * Copyright (c) 2000 - 2005 Søren Schmidt <sos@FreeBSD.org>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -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/sbin/atacontrol/atacontrol.c,v 1.32 2004/09/15 11:22:05 sos Exp $
+ * $FreeBSD: src/sbin/atacontrol/atacontrol.c,v 1.33 2005/03/30 12:03:40 sos Exp $
  */
 
 #include <sys/types.h>
@@ -373,17 +373,21 @@
 
 		iocmd.cmd = ATARAIDCREATE;
 		if (argc > 2) {
-			if (!strcmp(argv[2], "RAID0") ||
-			    !strcmp(argv[2], "stripe"))
-				iocmd.u.raid_setup.type = 1;
-			if (!strcmp(argv[2], "RAID1") ||
-			    !strcmp(argv[2],"mirror"))
-				iocmd.u.raid_setup.type = 2;
-			if (!strcmp(argv[2], "RAID0+1"))
-				iocmd.u.raid_setup.type = 3;
-			if (!strcmp(argv[2], "SPAN") ||
-			    !strcmp(argv[2], "JBOD"))
-				iocmd.u.raid_setup.type = 4;
+			if (!strcasecmp(argv[2], "RAID0") ||
+			    !strcasecmp(argv[2], "stripe"))
+				iocmd.u.raid_setup.type = AR_RAID0;
+			if (!strcasecmp(argv[2], "RAID1") ||
+			    !strcasecmp(argv[2],"mirror"))
+				iocmd.u.raid_setup.type = AR_RAID1;
+			if (!strcasecmp(argv[2], "RAID0+1") ||
+			    !strcasecmp(argv[2],"RAID10"))
+				iocmd.u.raid_setup.type = AR_RAID01;
+			if (!strcasecmp(argv[2], "RAID5"))
+				iocmd.u.raid_setup.type = AR_RAID5;
+			if (!strcasecmp(argv[2], "SPAN"))
+				iocmd.u.raid_setup.type = AR_SPAN;
+			if (!strcasecmp(argv[2], "JBOD"))
+				iocmd.u.raid_setup.type = AR_JBOD;
 		}
 		if (!iocmd.u.raid_setup.type) {
 			fprintf(stderr, "atacontrol: Invalid RAID type\n");
@@ -393,7 +397,9 @@
 			exit(EX_USAGE);
 		}
 
-		if (iocmd.u.raid_setup.type & 1) {
+		if (iocmd.u.raid_setup.type == AR_RAID0 ||
+		    iocmd.u.raid_setup.type == AR_RAID01 ||
+		    iocmd.u.raid_setup.type == AR_RAID5) {
 			if (argc < 4 ||
 			    !sscanf(argv[3], "%d",
 				    &iocmd.u.raid_setup.interleave) == 1) {
@@ -451,6 +457,14 @@
 		iocmd.cmd = ATARAIDREBUILD;
 		if (ioctl(fd, IOCATA, &iocmd) < 0)
 			warn("ioctl(ATARAIDREBUILD)");
+		else {
+			char buffer[128];
+			sprintf(buffer, "/usr/bin/nice -n 20 /bin/dd "
+				"if=/dev/ar%d of=/dev/null bs=1m &",
+				iocmd.channel);
+			if (system(buffer))
+				warn("background dd");
+		}
 	}
 	else if (!strcmp(argv[1], "status") && argc == 3) {
 		int i;
@@ -467,10 +481,16 @@
 		case AR_RAID1:
 			printf("RAID1");
 			break;
-		case AR_RAID0 | AR_RAID1:
+		case AR_RAID01:
 			printf("RAID0+1 stripesize=%d",
 				iocmd.u.raid_status.interleave);
 			break;
+		case AR_RAID5:
+			printf("RAID5 stripesize=%d",
+				iocmd.u.raid_status.interleave);
+			break;
+		case AR_JBOD:
+			printf("JBOD");
 		case AR_SPAN:
 			printf("SPAN");
 			break;

==== //depot/projects/wifi/sbin/sunlabel/sunlabel.8#2 (text+ko) ====

@@ -1,6 +1,6 @@
 .\" Copyright (c) 2004
 .\"	David E. O'Brien.  All rights reserved.
-.\" Copyright (c) 2004
+.\" Copyright (c) 2004, 2005
 .\"	Joerg Wunsch.  All rights reserved.
 .\"
 .\" Redistribution and use in source and binary forms, with or without
@@ -24,9 +24,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $FreeBSD: src/sbin/sunlabel/sunlabel.8,v 1.4 2004/06/02 20:21:28 joerg Exp $
+.\" $FreeBSD: src/sbin/sunlabel/sunlabel.8,v 1.6 2005/03/30 18:54:41 joerg Exp $
 .\"
-.Dd June 1, 2004
+.Dd March 30, 2005
 .Dt SUNLABEL 8
 .Os
 .Sh NAME
@@ -238,7 +238,7 @@
 The label presented for editing is the same as the standard
 printout, with some added hints about the possible options to
 specify the sector size and starting cylinder.
-There are two areas in the template that can be edited:
+The following areas in the template can be edited:
 .Bl -tag -width indent
 .It Sy Textual label, geometry emulation
 The line
@@ -266,6 +266,15 @@
 .D1 Em (CC + 2) * HH * SS
 must be less than or equal to the total number of sectors of the
 disk (which is given as a hint in a comment field).
+.It Sy Volume name
+The volume name (if present) is introduced by the string
+.Dq "volume name:" .
+It can be up to 8 characters long, and might be useful to distinguish
+different disks in a system.
+Note that volume names require the VTOC elements to be present, so
+any of the VTOC constraints described below need to be obeyed as well
+if a volume name is to be set.
+Setting an empty volume name will delete it from the label.
 .It Sy Partition entries
 Partition entries start with a letter from
 .Ql a

==== //depot/projects/wifi/sbin/sunlabel/sunlabel.c#3 (text+ko) ====

@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2003 Jake Burkholder.
- * Copyright (c) 2004 Joerg Wunsch.
+ * Copyright (c) 2004,2005 Joerg Wunsch.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -67,7 +67,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sbin/sunlabel/sunlabel.c,v 1.12 2005/02/15 22:31:05 obrien Exp $");
+__FBSDID("$FreeBSD: src/sbin/sunlabel/sunlabel.c,v 1.13 2005/03/30 09:33:09 joerg Exp $");
 
 #include <sys/types.h>
 #include <sys/param.h>
@@ -541,6 +541,7 @@
 	char tag[32];
 	char buf[128];
 	char text[128];
+	char volname[SUN_VOLNAME_LEN + 1];
 	struct sun_disklabel sl1;
 	char *bp;
 	const char *what;
@@ -631,6 +632,33 @@
 			    text, cyl, alt, hd, sec);
 			continue;
 		}
+		if (strncmp(bp, "volume name:", strlen("volume name:")) == 0) {
+			wantvtoc = 1; /* Volume name requires VTOC. */
+			bp += strlen("volume name:");
+#if SUN_VOLNAME_LEN != 8
+# error "scanf field width does not match SUN_VOLNAME_LEN"
+#endif
+			/*
+			 * We set the field length to one more than
+			 * SUN_VOLNAME_LEN to allow detecting an
+			 * overflow.
+			 */
+			memset(volname, 0, sizeof volname);
+			rv = sscanf(bp, " %9[^\n]", volname);
+			if (rv != 1) {
+				/* Clear the volume name. */
+				memset(sl1.sl_vtoc_volname, 0,
+				    SUN_VOLNAME_LEN);
+			} else {
+				memcpy(sl1.sl_vtoc_volname, volname,
+				    SUN_VOLNAME_LEN);
+				if (volname[SUN_VOLNAME_LEN] != '\0')
+					warnx(
+"%s, line %d: volume name longer than %d characters, truncating",
+					    file, line + 1, SUN_VOLNAME_LEN);
+			}
+			continue;
+		}
 		if (strlen(bp) < 2 || bp[1] != ':') {
 			line++;
 			continue;
@@ -742,9 +770,11 @@
 static void
 print_label(struct sun_disklabel *sl, const char *disk, FILE *out)
 {
-	int i;
+	int i, j;
 	int havevtoc;
 	uintmax_t secpercyl;
+	/* Long enough to hex-encode each character. */
+	char volname[4 * SUN_VOLNAME_LEN + 1];
 
 	havevtoc = sl->sl_vtoc_sane == SUN_VTOC_SANE;
 	secpercyl = sl->sl_nsectors * sl->sl_ntracks;
@@ -763,11 +793,25 @@
 		    "# max sectors/unit (including alt cylinders): %ju\n",
 		    (uintmax_t)mediasize / sectorsize);
 	fprintf(out,
-"sectors/unit: %ju\n"
+"sectors/unit: %ju\n",
+	    secpercyl * sl->sl_ncylinders);
+	if (havevtoc && sl->sl_vtoc_volname[0] != '\0') {
+		for (i = j = 0; i < SUN_VOLNAME_LEN; i++) {
+			if (sl->sl_vtoc_volname[i] == '\0')
+				break;
+			if (isprint(sl->sl_vtoc_volname[i]))
+				volname[j++] = sl->sl_vtoc_volname[i];
+			else
+				j += sprintf(volname + j, "\\x%02X",
+				    sl->sl_vtoc_volname[i]);
+		}
+		volname[j] = '\0';
+		fprintf(out, "volume name: %s\n", volname);
+	}
+	fprintf(out,
 "\n"
 "%d partitions:\n"
 "#\n",
-	    secpercyl * sl->sl_ncylinders,
 	    SUN_NPART);
 	if (!hflag) {
 		fprintf(out, "# Size is in %s.", cflag? "cylinders": "sectors");

==== //depot/projects/wifi/sys/compat/ndis/subr_ntoskrnl.c#11 (text+ko) ====

@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/compat/ndis/subr_ntoskrnl.c,v 1.62 2005/03/28 20:46:08 wpaul Exp $");
+__FBSDID("$FreeBSD: src/sys/compat/ndis/subr_ntoskrnl.c,v 1.63 2005/03/30 16:22:48 wpaul Exp $");
 
 #include <sys/ctype.h>
 #include <sys/unistd.h>
@@ -2575,11 +2575,11 @@
 	uint64_t		curtime;
 	uint8_t			pending;
 
-	mtx_lock(&ntoskrnl_dispatchlock);
-
 	if (timer == NULL)
 		return(FALSE);
 
+	mtx_lock(&ntoskrnl_dispatchlock);
+
 	if (timer->k_header.dh_inserted == TRUE) {
 		untimeout(ntoskrnl_timercall, timer, timer->k_handle);
 		timer->k_header.dh_inserted = FALSE;

==== //depot/projects/wifi/sys/conf/files#21 (text+ko) ====

@@ -1,4 +1,4 @@
-# $FreeBSD: src/sys/conf/files,v 1.1010 2005/03/22 14:52:37 sobomax Exp $
+# $FreeBSD: src/sys/conf/files,v 1.1011 2005/03/30 12:03:37 sos Exp $
 #
 # The long compile-with and dependency lines are required because of
 # limitations in config: backslash-newline doesn't work in strings, and
@@ -387,6 +387,7 @@
 dev/an/if_an_pccard.c		optional an pccard
 dev/an/if_an_pci.c		optional an pci
 dev/asr/asr.c			optional asr pci
+dev/ata/ata_if.m		optional ata
 dev/ata/ata-all.c		optional ata
 dev/ata/ata-card.c		optional ata pccard
 dev/ata/ata-cbus.c		optional ata pc98

==== //depot/projects/wifi/sys/conf/kmod.mk#10 (text+ko) ====

@@ -1,5 +1,5 @@
 #	From: @(#)bsd.prog.mk	5.26 (Berkeley) 6/25/91
-# $FreeBSD: src/sys/conf/kmod.mk,v 1.185 2005/02/11 21:04:20 ru Exp $
+# $FreeBSD: src/sys/conf/kmod.mk,v 1.186 2005/03/30 12:03:37 sos Exp $
 #
 # The include file <bsd.kmod.mk> handles building and installing loadable
 # kernel modules.
@@ -298,8 +298,9 @@
 .endfor
 .endif
 
-MFILES?= dev/acpica/acpi_if.m dev/eisa/eisa_if.m dev/iicbus/iicbb_if.m \
-	dev/iicbus/iicbus_if.m dev/mii/miibus_if.m dev/ofw/ofw_bus_if.m \
+MFILES?= dev/acpica/acpi_if.m dev/ata/ata_if.m dev/eisa/eisa_if.m \
+	dev/iicbus/iicbb_if.m dev/iicbus/iicbus_if.m \
+	dev/mii/miibus_if.m dev/ofw/ofw_bus_if.m \
 	dev/pccard/card_if.m dev/pccard/power_if.m dev/pci/pci_if.m \
 	dev/pci/pcib_if.m dev/ppbus/ppbus_if.m dev/smbus/smbus_if.m \
 	dev/sound/pcm/ac97_if.m dev/sound/pcm/channel_if.m \

==== //depot/projects/wifi/sys/conf/options#13 (text+ko) ====

@@ -1,4 +1,4 @@
-# $FreeBSD: src/sys/conf/options,v 1.496 2005/03/14 16:04:26 des Exp $
+# $FreeBSD: src/sys/conf/options,v 1.497 2005/03/30 12:03:37 sos Exp $
 #
 #        On the handling of kernel options
 #
@@ -303,12 +303,6 @@
 # Options used in the 'ata' ATA/ATAPI driver
 ATA_STATIC_ID		opt_ata.h
 ATA_NOPCI		opt_ata.h
-DEV_ATADISK		opt_ata.h
-DEV_ATAPICD		opt_ata.h
-DEV_ATAPIST		opt_ata.h
-DEV_ATAPIFD		opt_ata.h
-DEV_ATAPICAM		opt_ata.h
-DEV_ATARAID		opt_ata.h
 
 # Net stuff.
 ACCEPT_FILTER_DATA

==== //depot/projects/wifi/sys/dev/acpi_support/acpi_asus.c#4 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/acpi_support/acpi_asus.c,v 1.21 2005/03/24 21:07:55 pjd Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/acpi_support/acpi_asus.c,v 1.22 2005/03/30 15:06:11 philip Exp $");
 
 /*
  * Driver for extra ACPI-controlled gadgets (hotkeys, leds, etc) found on
@@ -79,8 +79,10 @@
 };
 
 struct acpi_asus_led {
+	struct acpi_asus_softc *sc;
 	struct cdev	*cdev;
-	device_t	dev;
+	int		busy;
+	int		state;
 	enum {
 		ACPI_ASUS_LED_MLED,
 		ACPI_ASUS_LED_TLED,
@@ -255,6 +257,7 @@
 static int	acpi_asus_detach(device_t dev);
 
 static void	acpi_asus_led(struct acpi_asus_led *led, int state);
+static void	acpi_asus_led_task(struct acpi_asus_led *led, int pending __unused);
 
 static int	acpi_asus_sysctl(SYSCTL_HANDLER_ARGS);
 static int	acpi_asus_sysctl_init(struct acpi_asus_softc *sc, int method);
@@ -401,21 +404,24 @@
 
 	/* Attach leds */
 	if (sc->model->mled_set) {
-		sc->s_mled.dev = dev;
+		sc->s_mled.busy = 0;
+		sc->s_mled.sc = sc;
 		sc->s_mled.type = ACPI_ASUS_LED_MLED;
 		sc->s_mled.cdev =
 		    led_create((led_t *)acpi_asus_led, &sc->s_mled, "mled");
 	}
 
 	if (sc->model->tled_set) {
-		sc->s_tled.dev = dev;
+		sc->s_tled.busy = 0;
+		sc->s_tled.sc = sc;
 		sc->s_tled.type = ACPI_ASUS_LED_TLED;
 		sc->s_tled.cdev =
 		    led_create((led_t *)acpi_asus_led, &sc->s_tled, "tled");
 	}
 
 	if (sc->model->wled_set) {
-		sc->s_wled.dev = dev;
+		sc->s_wled.busy = 0;
+		sc->s_wled.sc = sc;
 		sc->s_wled.type = ACPI_ASUS_LED_WLED;
 		sc->s_wled.cdev =
 		    led_create((led_t *)acpi_asus_led, &sc->s_wled, "wled");
@@ -461,27 +467,30 @@
 }
 
 static void
-acpi_asus_led(struct acpi_asus_led *led, int state)
+acpi_asus_led_task(struct acpi_asus_led *led, int pending __unused)
 {
 	struct acpi_asus_softc	*sc;
 	char			*method;
-
+	int			state;
+	
 	ACPI_FUNCTION_TRACE((char *)(uintptr_t)__func__);
 
-	sc = device_get_softc(led->dev);
+	sc = led->sc;
 
 	switch (led->type) {
 	case ACPI_ASUS_LED_MLED:
 		method = sc->model->mled_set;
 
 		/* Note: inverted */
-		state = !state;
+		state = !led->state;
 		break;
 	case ACPI_ASUS_LED_TLED:
 		method = sc->model->tled_set;
+		state = led->state;
 		break;
 	case ACPI_ASUS_LED_WLED:
 		method = sc->model->wled_set;
+		state = led->state;
 		break;
 	default:
 		printf("acpi_asus_led: invalid LED type %d\n",
@@ -490,6 +499,23 @@
 	}
 
 	acpi_SetInteger(sc->handle, method, state);
+	led->busy = 0;
+}
+	
+static void
+acpi_asus_led(struct acpi_asus_led *led, int state)
+{
+
+	ACPI_FUNCTION_TRACE((char *)(uintptr_t)__func__);
+
+	if (led->busy)
+		return;
+
+	led->busy = 1;
+	led->state = state;
+
+	AcpiOsQueueForExecution(OSD_PRIORITY_LO,
+	    (void *)acpi_asus_led_task, led);
 }
 
 static int

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

@@ -1,5 +1,5 @@
 /*-
- * Copyright (c) 1998 - 2004 Søren Schmidt <sos@FreeBSD.org>
+ * Copyright (c) 1998 - 2005 Søren Schmidt <sos@FreeBSD.org>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -27,13 +27,14 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/ata/ata-all.c,v 1.235 2005/02/07 17:14:42 mdodd Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/ata/ata-all.c,v 1.236 2005/03/30 12:03:37 sos Exp $");
 
 #include "opt_ata.h"
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/ata.h>
 #include <sys/kernel.h>
+#include <sys/module.h>
 #include <sys/endian.h>
 #include <sys/ctype.h>
 #include <sys/conf.h>
@@ -51,33 +52,27 @@
 #ifdef __alpha__
 #include <machine/md_var.h>
 #endif
-#include <geom/geom_disk.h>
 #include <dev/ata/ata-all.h>
-#include <dev/ata/ata-disk.h>
-#include <dev/ata/ata-raid.h>
+#include <dev/ata/ata-commands.h>
+#include <ata_if.h>
 
-/* device structures */
-static	d_ioctl_t	ata_ioctl;
+/* device structure */
+static  d_ioctl_t       ata_ioctl;
 static struct cdevsw ata_cdevsw = {
-	.d_version =	D_VERSION,
-	.d_flags =	D_NEEDGIANT,
-	.d_ioctl =	ata_ioctl,
-	.d_name =	"ata",
+	.d_version =    D_VERSION,
+	.d_flags =      D_NEEDGIANT, /* we need this as newbus isn't safe */
+	.d_ioctl =      ata_ioctl,
+	.d_name =       "ata",
 };
 
 /* prototypes */
-static void ata_shutdown(void *, int);
 static void ata_interrupt(void *);
-static int ata_getparam(struct ata_device *, u_int8_t);
-static void ata_identify_devices(struct ata_channel *);
 static void ata_boot_attach(void);
-static void bswap(int8_t *, int);
-static void btrim(int8_t *, int);
-static void bpack(int8_t *, int8_t *, int);
-static void ata_init(void);
+device_t ata_add_child(driver_t *driver, device_t parent, struct ata_device *atadev, const char *name, int unit);
 
 /* global vars */
 MALLOC_DEFINE(M_ATA, "ATA generic", "ATA driver generic layer");
+int (*ata_ioctl_func)(struct ata_cmd *iocmd) = NULL;
 devclass_t ata_devclass;
 uma_zone_t ata_zone;
 int ata_wc = 1;
@@ -86,19 +81,18 @@
 static struct intr_config_hook *ata_delayed_attach = NULL;
 static int ata_dma = 1;
 static int atapi_dma = 1;
-static int ata_resuming = 0;
 
 /* sysctl vars */
 SYSCTL_NODE(_hw, OID_AUTO, ata, CTLFLAG_RD, 0, "ATA driver parameters");
 TUNABLE_INT("hw.ata.ata_dma", &ata_dma);
 SYSCTL_INT(_hw_ata, OID_AUTO, ata_dma, CTLFLAG_RDTUN, &ata_dma, 0,
 	   "ATA disk DMA mode control");
+TUNABLE_INT("hw.ata.atapi_dma", &atapi_dma);
+SYSCTL_INT(_hw_ata, OID_AUTO, atapi_dma, CTLFLAG_RDTUN, &atapi_dma, 0,
+	   "ATAPI device DMA mode control");
 TUNABLE_INT("hw.ata.wc", &ata_wc);
 SYSCTL_INT(_hw_ata, OID_AUTO, wc, CTLFLAG_RDTUN, &ata_wc, 0,
 	   "ATA disk write caching");
-TUNABLE_INT("hw.ata.atapi_dma", &atapi_dma);
-SYSCTL_INT(_hw_ata, OID_AUTO, atapi_dma, CTLFLAG_RDTUN, &atapi_dma, 0,
-	   "ATAPI device DMA mode control");
 
 /*
  * newbus device interface related functions
@@ -106,231 +100,147 @@
 int
 ata_probe(device_t dev)
 {
-    struct ata_channel *ch;
-
-    if (!dev || !(ch = device_get_softc(dev)))
-	return ENXIO;
-
-    if (ch->r_irq)
-	return EEXIST;
-
     return 0;
 }
 
 int
 ata_attach(device_t dev)
 {
-    struct ata_channel *ch;
+    struct ata_channel *ch = device_get_softc(dev);
     int error, rid;
 
-    if (!dev || !(ch = device_get_softc(dev)))
-	return ENXIO;
+    /* check that we have a virgin channel to attach */
+    if (ch->r_irq)
+	return EEXIST;
 
     /* initialize the softc basics */
-    ch->device[MASTER].channel = ch;
-    ch->device[MASTER].unit = ATA_MASTER;
-    ch->device[MASTER].mode = ATA_PIO;
-    ch->device[SLAVE].channel = ch;
-    ch->device[SLAVE].unit = ATA_SLAVE;
-    ch->device[SLAVE].mode = ATA_PIO;
     ch->dev = dev;
     ch->state = ATA_IDLE;
     bzero(&ch->state_mtx, sizeof(struct mtx));
     mtx_init(&ch->state_mtx, "ATA state lock", NULL, MTX_DEF);
+    bzero(&ch->queue_mtx, sizeof(struct mtx));
+    mtx_init(&ch->queue_mtx, "ATA queue lock", NULL, MTX_DEF);
+    TAILQ_INIT(&ch->ata_queue);
 
     /* initialise device(s) on this channel */
-    while (ch->locking(ch, ATA_LF_LOCK) != ch->unit)
+    while (ATA_LOCKING(device_get_parent(dev), dev, ATA_LF_LOCK) != ch->unit)
 	tsleep(&error, PRIBIO, "ataatch", 1);
     ch->hw.reset(ch);
-    ch->locking(ch, ATA_LF_UNLOCK);
+    ATA_LOCKING(device_get_parent(dev), dev, ATA_LF_UNLOCK);
 
+    /* setup interrupt delivery */
     rid = ATA_IRQ_RID;
     ch->r_irq = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid,
 				       RF_SHAREABLE | RF_ACTIVE);
     if (!ch->r_irq) {
-	ata_printf(ch, -1, "unable to allocate interrupt\n");
+	device_printf(dev, "unable to allocate interrupt\n");
 	return ENXIO;
     }
     if ((error = bus_setup_intr(dev, ch->r_irq, ATA_INTR_FLAGS,
 				ata_interrupt, ch, &ch->ih))) {
-	ata_printf(ch, -1, "unable to setup interrupt\n");
+	device_printf(dev, "unable to setup interrupt\n");
 	return error;
     }
 
-    /* initialize queue and associated lock */
-    bzero(&ch->queue_mtx, sizeof(struct mtx));
-    mtx_init(&ch->queue_mtx, "ATA queue lock", NULL, MTX_DEF);
-    TAILQ_INIT(&ch->ata_queue);
-
     /* do not attach devices if we are in early boot */
     if (ata_delayed_attach)
 	return 0;
 
-    ata_identify_devices(ch);
-
-    if (ch->device[MASTER].attach)
-	ch->device[MASTER].attach(&ch->device[MASTER]);
-    if (ch->device[SLAVE].attach)
-	ch->device[SLAVE].attach(&ch->device[SLAVE]);
-#ifdef DEV_ATAPICAM
-    atapi_cam_attach_bus(ch);
-#endif
+    /* probe and attach devices on this channel */
+    bus_generic_probe(dev);
+    bus_generic_attach(dev);
     return 0;
 }
 
 int
 ata_detach(device_t dev)
 {
-    struct ata_channel *ch;
+    struct ata_channel *ch = device_get_softc(dev);
+    device_t *children;
+    int nchildren, i;
 
-    if (!dev || !(ch = device_get_softc(dev)) || !ch->r_irq)
+    /* check that we have a vaild channel to detach */
+    if (!ch->r_irq)
 	return ENXIO;
 
-    /* mark devices on this channel as detaching */
-    ch->device[MASTER].flags |= ATA_D_DETACHING;
-    ch->device[SLAVE].flags |= ATA_D_DETACHING;
+    /* detach & delete all children */
+    if (!device_get_children(dev, &children, &nchildren)) {
+	for (i = 0; i < nchildren; i++)
+	    if (children[i])
+		device_delete_child(dev, children[i]);
+	free(children, M_TEMP);
+    } 
 
-    /* fail outstanding requests on this channel */
+    /* fail outstanding requests on this channel (SOS shouldn't be any XXX ) */
     ata_fail_requests(ch, NULL);
 
-    /* unlock the channel */
-    mtx_lock(&ch->state_mtx);
-    ch->state = ATA_IDLE;
-    mtx_unlock(&ch->state_mtx);
-    ch->locking(ch, ATA_LF_UNLOCK);
-
-    /* detach devices on this channel */
-    if (ch->device[MASTER].detach)
-	ch->device[MASTER].detach(&ch->device[MASTER]);
-    if (ch->device[SLAVE].detach)
-	ch->device[SLAVE].detach(&ch->device[SLAVE]);
-#ifdef DEV_ATAPICAM
-    atapi_cam_detach_bus(ch);
-#endif
-
-    /* flush cache and powerdown device */
-    if (ch->device[MASTER].param) {
-	if (ch->device[MASTER].param->support.command2 & ATA_SUPPORT_FLUSHCACHE)
-	    ata_controlcmd(&ch->device[MASTER], ATA_FLUSHCACHE, 0, 0, 0);
-	ata_controlcmd(&ch->device[MASTER], ATA_SLEEP, 0, 0, 0);
-	free(ch->device[MASTER].param, M_ATA);
-	ch->device[MASTER].param = NULL;
-    }
-    if (ch->device[SLAVE].param) {
-	if (ch->device[SLAVE].param->support.command2 & ATA_SUPPORT_FLUSHCACHE)
-	    ata_controlcmd(&ch->device[SLAVE], ATA_FLUSHCACHE, 0, 0, 0);
-	ata_controlcmd(&ch->device[SLAVE], ATA_SLEEP, 0, 0, 0);
-	free(ch->device[SLAVE].param, M_ATA);
-	ch->device[SLAVE].param = NULL;
-    }
-    ch->device[MASTER].mode = ATA_PIO;
-    ch->device[SLAVE].mode = ATA_PIO;
-    ch->devices = 0;
-
+    /* release resources */
     bus_teardown_intr(dev, ch->r_irq, ch->ih);
     bus_release_resource(dev, SYS_RES_IRQ, ATA_IRQ_RID, ch->r_irq);
     ch->r_irq = NULL;
+    mtx_destroy(&ch->state_mtx);
     mtx_destroy(&ch->queue_mtx);
     return 0;
 }
 
 int
-ata_reinit(struct ata_channel *ch)
+ata_reinit(device_t dev)
 {
-    int devices, misdev, newdev;
+    struct ata_channel *ch = device_get_softc(dev);
+    device_t *children;
+    int nchildren, i;
 
-    if (!ch->r_irq)
+    if (!ch || !ch->r_irq)
 	return ENXIO;
 
     if (bootverbose)
-	ata_printf(ch, -1, "reiniting channel ..\n");
+	device_printf(dev, "reiniting channel ..\n");
 
-    /* poll for locking of this channel */
-    while (ch->locking(ch, ATA_LF_LOCK) != ch->unit)
-	tsleep(&devices, PRIBIO, "atarint", 1);
+    /* poll for locking the channel */
+    while (ATA_LOCKING(device_get_parent(dev), dev, ATA_LF_LOCK) != ch->unit)
+	tsleep(&dev, PRIBIO, "atarini", 1);
 
-    ata_catch_inflight(ch);
-
-    /* grap the channel lock no matter what */
+    /* grap the channel lock */
     mtx_lock(&ch->state_mtx);
-    ch->state = ATA_ACTIVE;
+    ch->state = ATA_STALL_QUEUE;
     mtx_unlock(&ch->state_mtx);
 
-    if (ch->flags & ATA_IMMEDIATE_MODE)
-	return EIO;
-    else
-	ch->flags |= ATA_IMMEDIATE_MODE;
-
-    devices = ch->devices;
-
+    /* reset the channel and devices */
     ch->hw.reset(ch);
 
-    if (bootverbose)
-	ata_printf(ch, -1, "resetting done ..\n");
-
-    /* detach what left the channel during reset */
-    if ((misdev = devices & ~ch->devices)) {
-	if ((misdev & (ATA_ATA_MASTER | ATA_ATAPI_MASTER)) &&
-	    ch->device[MASTER].detach) {
-	    ata_fail_requests(ch, &ch->device[MASTER]);
-	    ch->device[MASTER].detach(&ch->device[MASTER]);
-	    free(ch->device[MASTER].param, M_ATA);
-	    ch->device[MASTER].param = NULL;
+    /* reinit the children and delete any that fails */
+    if (!device_get_children(dev, &children, &nchildren)) {
+	mtx_lock(&Giant);       /* newbus suckage it needs Giant */
+	for (i = 0; i < nchildren; i++) {
+	    if (children[i] && device_is_attached(children[i]))

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



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