PERFORCE change 74119 for review
Sam Leffler
sam at FreeBSD.org
Wed Mar 30 12:29:07 PST 2005
http://perforce.freebsd.org/chv.cgi?CH=74119
Change 74119 by sam at 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 at FreeBSD.org>
+ * Copyright (c) 2000 - 2005 Søren Schmidt <sos at 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 at FreeBSD.org>
+ * Copyright (c) 1998 - 2005 Søren Schmidt <sos at 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) <<<
More information about the p4-projects
mailing list