Module Name: src
Committed By: phx
Date: Wed Jun 8 18:06:02 UTC 2011
Modified Files:
src/sys/arch/sandpoint/stand/altboot: dsk.c
Log Message:
Support disk units from multiple IDE/SATA PCI controllers.
To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 src/sys/arch/sandpoint/stand/altboot/dsk.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/sandpoint/stand/altboot/dsk.c
diff -u src/sys/arch/sandpoint/stand/altboot/dsk.c:1.5 src/sys/arch/sandpoint/stand/altboot/dsk.c:1.6
--- src/sys/arch/sandpoint/stand/altboot/dsk.c:1.5 Sun Mar 6 13:55:12 2011
+++ src/sys/arch/sandpoint/stand/altboot/dsk.c Wed Jun 8 18:06:02 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: dsk.c,v 1.5 2011/03/06 13:55:12 phx Exp $ */
+/* $NetBSD: dsk.c,v 1.6 2011/06/08 18:06:02 phx Exp $ */
/*-
* Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -69,7 +69,7 @@
};
static int ndskdv = sizeof(ldskdv)/sizeof(ldskdv[0]);
-static int disk_scan(void *);
+static void disk_scan(void *);
static int probe_drive(struct dkdev_ata *, int);
static void drive_ident(struct disk *, char *);
static char *mkident(char *, int);
@@ -80,7 +80,8 @@
static void issue28(struct dvata_chan *, int64_t, int);
static struct disk *lookup_disk(int);
-static struct disk ldisk[4];
+#define MAX_UNITS 8
+static struct disk ldisk[MAX_UNITS];
int
dskdv_init(void *self)
@@ -103,15 +104,15 @@
return 1;
}
-static int
+static void
disk_scan(void *drv)
{
struct dkdev_ata *l = drv;
struct disk *d;
- int n, ndrive;
+ static int ndrive = 0;
+ int n;
- ndrive = 0;
- for (n = 0; n < 4; n++) {
+ for (n = 0; n < 4 && ndrive < MAX_UNITS; n++) {
if (l->presense[n] == 0)
continue;
if (probe_drive(l, n) == 0) {
@@ -127,7 +128,6 @@
decode_dlabel(d, l->iobuf);
ndrive += 1;
}
- return ndrive;
}
int