summaryrefslogtreecommitdiffstats
path: root/sys/pc98
diff options
context:
space:
mode:
authornyan <nyan@FreeBSD.org>2000-11-05 14:31:19 +0000
committernyan <nyan@FreeBSD.org>2000-11-05 14:31:19 +0000
commitc62b300d458a141bac5c88c6865ccb36d5a67486 (patch)
treeee23e4096e2c2072e3251d9f664279096b6e8b9d /sys/pc98
parent48503b7c5c0457713d7787367598c6e68425e6f7 (diff)
downloadFreeBSD-src-c62b300d458a141bac5c88c6865ccb36d5a67486.zip
FreeBSD-src-c62b300d458a141bac5c88c6865ccb36d5a67486.tar.gz
Merged from the following changes.
sys/conf/Makefile.i386 1.211 sys/conf/files.i386 1.329 sys/isa/fd.c 1.186, 1.188 and 1.189 sys/isa/sio.c 1.305 and 1.317 sys/i386/conf/GENERIC 1.270, 1.281, 1.282 and 1.284 sys/i386/i386/machdep.c 1.419 sys/i386/i386/userconfig.c 1.184
Diffstat (limited to 'sys/pc98')
-rw-r--r--sys/pc98/cbus/fdc.c91
-rw-r--r--sys/pc98/cbus/sio.c19
-rw-r--r--sys/pc98/conf/GENERIC7
-rw-r--r--sys/pc98/i386/machdep.c3
-rw-r--r--sys/pc98/i386/userconfig.c5
-rw-r--r--sys/pc98/pc98/fd.c91
-rw-r--r--sys/pc98/pc98/machdep.c3
-rw-r--r--sys/pc98/pc98/sio.c19
8 files changed, 184 insertions, 54 deletions
diff --git a/sys/pc98/cbus/fdc.c b/sys/pc98/cbus/fdc.c
index e1f2923..7a635b4 100644
--- a/sys/pc98/cbus/fdc.c
+++ b/sys/pc98/cbus/fdc.c
@@ -91,6 +91,8 @@
#include <isa/rtc.h>
#endif
+/* misuse a flag to identify format operation */
+
/* configuration flags */
#define FDC_PRETEND_D0 (1 << 0) /* pretend drive 0 to be there */
#define FDC_NO_FIFO (1 << 2) /* do not enable FIFO */
@@ -393,12 +395,14 @@ fdctl_wr_isa(fdc_p fdc, u_int8_t v)
bus_space_write_1(fdc->ctlt, fdc->ctlh, 0, v);
}
+#if NCARD > 0
static void
fdctl_wr_pcmcia(fdc_p fdc, u_int8_t v)
{
bus_space_write_1(fdc->portt, fdc->porth, FDCTL+fdc->port_off, v);
}
#endif
+#endif /* PC98 */
#if 0
@@ -956,6 +960,7 @@ fdc_pccard_probe(device_t dev)
#ifndef PC98
fdc->fdctl_wr = fdctl_wr_pcmcia;
#endif
+
fdc->flags |= FDC_ISPCMCIA | FDC_NODMA;
/* Attempt to allocate our resources for the duration of the probe */
@@ -1155,6 +1160,69 @@ DRIVER_MODULE(fdc, pccard, fdc_pccard_driver, fdc_devclass, 0, 0);
#endif /* NCARD > 0 */
+static void fd_clone __P((void *arg, char *name, int namelen, dev_t *dev));
+
+static struct {
+ char *match;
+ int minor;
+ int link;
+} fd_suffix[] = {
+ { "a", 0, 1 },
+ { "b", 0, 1 },
+ { "c", 0, 1 },
+ { "d", 0, 1 },
+ { "e", 0, 1 },
+ { "f", 0, 1 },
+ { "g", 0, 1 },
+ { "h", 0, 1 },
+ { ".1720", 1, 0 },
+ { ".1480", 2, 0 },
+ { ".1440", 3, 0 },
+ { ".1200", 4, 0 },
+ { ".820", 5, 0 },
+ { ".800", 6, 0 },
+ { ".720", 7, 0 },
+ { ".360", 8, 0 },
+ { ".640", 9, 0 },
+ { ".1232", 10, 0 },
+#ifdef PC98
+ { ".1280", 11, 0 },
+ { ".1476", 12, 0 },
+#endif
+ { 0, 0 }
+};
+static void
+fd_clone(arg, name, namelen, dev)
+ void *arg;
+ char *name;
+ int namelen;
+ dev_t *dev;
+{
+ int u, d, i;
+ char *n;
+ dev_t pdev;
+
+ if (*dev != NODEV)
+ return;
+ if (dev_stdclone(name, &n, "fd", &u) != 2)
+ return;
+ for (i = 0; ; i++) {
+ if (fd_suffix[i].match == NULL)
+ return;
+ if (strcmp(n, fd_suffix[i].match))
+ continue;
+ d = fd_suffix[i].minor;
+ break;
+ }
+ if (fd_suffix[i].link == 0) {
+ *dev = make_dev(&fd_cdevsw, (u << 6) + d,
+ UID_ROOT, GID_OPERATOR, 0640, name);
+ } else {
+ pdev = makedev(fd_cdevsw.d_maj, (u << 6) + d);
+ *dev = make_dev_alias(pdev, name);
+ }
+}
+
/******************************************************************/
/*
* devices attached to the controller section.
@@ -1390,26 +1458,17 @@ static int
fd_attach(device_t dev)
{
struct fd_data *fd;
-#if 0
- int i;
- int mynor;
- int typemynor;
- int typesize;
-#endif
static int cdevsw_add_done = 0;
fd = device_get_softc(dev);
if (!cdevsw_add_done) {
- cdevsw_add(&fd_cdevsw); /* XXX */
- cdevsw_add_done++;
+ cdevsw_add(&fd_cdevsw); /* XXX */
+ cdevsw_add_done++;
}
+ EVENTHANDLER_REGISTER(dev_clone, fd_clone, 0, 1000);
make_dev(&fd_cdevsw, (fd->fdu << 6),
- UID_ROOT, GID_OPERATOR, 0640, "rfd%d", fd->fdu);
-
-#if 0
- /* Other make_dev() go here. */
-#endif
+ UID_ROOT, GID_OPERATOR, 0640, "fd%d", fd->fdu);
/*
* Export the drive to the devstat interface.
@@ -2575,7 +2634,7 @@ fdstate(fdc_p fdc)
static int
retrier(struct fdc_data *fdc)
{
- register struct bio *bp;
+ struct bio *bp;
struct fd_data *fd;
int fdu;
@@ -2602,14 +2661,14 @@ retrier(struct fdc_data *fdc)
default:
fail:
{
- dev_t sav_b_dev = bp->bio_dev;
+ dev_t sav_bio_dev = bp->bio_dev;
/* Trick diskerr */
bp->bio_dev = makedev(major(bp->bio_dev),
(FDUNIT(minor(bp->bio_dev))<<3)|RAW_PART);
diskerr(bp, "hard error", LOG_PRINTF,
fdc->fd->skip / DEV_BSIZE,
(struct disklabel *)NULL);
- bp->bio_dev = sav_b_dev;
+ bp->bio_dev = sav_bio_dev;
if (fdc->flags & FDC_STAT_VALID)
{
printf(
diff --git a/sys/pc98/cbus/sio.c b/sys/pc98/cbus/sio.c
index fa0320a..66a73e8 100644
--- a/sys/pc98/cbus/sio.c
+++ b/sys/pc98/cbus/sio.c
@@ -391,6 +391,7 @@ struct com_s {
struct resource *irqres;
struct resource *ioportres;
void *cookie;
+ dev_t devs[6];
/*
* Data area for output buffers. Someday we should build the output
@@ -962,6 +963,7 @@ sio_pccard_detach(dev)
device_t dev;
{
struct com_s *com;
+ int i;
com = (struct com_s *) device_get_softc(dev);
if (com == NULL) {
@@ -969,6 +971,8 @@ sio_pccard_detach(dev)
return (0);
}
com->gone = 1;
+ for (i = 0 ; i < 6; i++)
+ destroy_dev(com->devs[i]);
if (com->irqres) {
bus_teardown_intr(dev, com->irqres, com->cookie);
bus_release_resource(dev, SYS_RES_IRQ, 0, com->irqres);
@@ -2090,17 +2094,19 @@ determined_type: ;
sio_slow_ih = sinthand_add("tty:sio", &clk_ithd, siopoll,
NULL, SWI_TTY, 0);
}
- make_dev(&sio_cdevsw, unit,
+ com->devs[0] = make_dev(&sio_cdevsw, unit,
UID_ROOT, GID_WHEEL, 0600, "ttyd%r", unit);
- make_dev(&sio_cdevsw, unit | CONTROL_INIT_STATE,
+ com->devs[1] = make_dev(&sio_cdevsw, unit | CONTROL_INIT_STATE,
UID_ROOT, GID_WHEEL, 0600, "ttyid%r", unit);
- make_dev(&sio_cdevsw, unit | CONTROL_LOCK_STATE,
+ com->devs[2] = make_dev(&sio_cdevsw, unit | CONTROL_LOCK_STATE,
UID_ROOT, GID_WHEEL, 0600, "ttyld%r", unit);
- make_dev(&sio_cdevsw, unit | CALLOUT_MASK,
+ com->devs[3] = make_dev(&sio_cdevsw, unit | CALLOUT_MASK,
UID_UUCP, GID_DIALER, 0660, "cuaa%r", unit);
- make_dev(&sio_cdevsw, unit | CALLOUT_MASK | CONTROL_INIT_STATE,
+ com->devs[4] = make_dev(&sio_cdevsw,
+ unit | CALLOUT_MASK | CONTROL_INIT_STATE,
UID_UUCP, GID_DIALER, 0660, "cuaia%r", unit);
- make_dev(&sio_cdevsw, unit | CALLOUT_MASK | CONTROL_LOCK_STATE,
+ com->devs[5] = make_dev(&sio_cdevsw,
+ unit | CALLOUT_MASK | CONTROL_LOCK_STATE,
UID_UUCP, GID_DIALER, 0660, "cuala%r", unit);
com->flags = flags;
com->pps.ppscap = PPS_CAPTUREASSERT | PPS_CAPTURECLEAR;
@@ -2928,7 +2934,6 @@ more_intr:
if (com->do_timestamp)
microtime(&com->timestamp);
++com_events;
-/* XXX - needs to go away when alpha gets ithreads */
sched_swi(sio_slow_ih, SWI_DELAY);
#if 0 /* for testing input latency vs efficiency */
if (com->iptr - com->ibuf == 8)
diff --git a/sys/pc98/conf/GENERIC b/sys/pc98/conf/GENERIC
index 235a56c..211c9f0 100644
--- a/sys/pc98/conf/GENERIC
+++ b/sys/pc98/conf/GENERIC
@@ -38,6 +38,7 @@ options FFS #Berkeley Fast Filesystem
options FFS_ROOT #FFS usable as root device [keep this!]
options SOFTUPDATES #Enable FFS soft updates support
options MFS #Memory Filesystem
+#options DEVFS #Device Filesystem
options MD_ROOT #MD is a potential root device
options NFS #Network Filesystem
options NFS_ROOT #NFS usable as root device, NFS required
@@ -97,6 +98,10 @@ device bs 1
# PC-9801-100
device aic
+device ncv # NCR 53C500
+device nsp # Workbit Ninja SCSI-3
+device stg # TMC 18C30/18C50
+
# SCSI peripherals
device scbus # SCSI bus (required)
device da # Direct Access (disks)
@@ -156,6 +161,7 @@ device vx # 3Com 3c590, 3c595 (``Vortex'')
device wx # Intel Gigabit Ethernet Card (``Wiseman'')
# PCI Ethernet NICs that use the common MII bus controller code.
+# NOTE: Be sure to keep the 'device miibus' line in order to use these NICs!
device miibus # MII bus support
device dc # DEC/Intel 21143 and various workalikes
device pcn # AMD Am79C79x PCI 10/100 NICs
@@ -251,6 +257,7 @@ device bpf # Berkeley packet filter
#device umass # Disks/Mass storage - Requires scbus and da
#device ums # Mouse
#device urio # Diamond Rio 500 MP3 player
+#device uscanner # Scanners
# USB Ethernet, requires mii
#device aue # ADMtek USB ethernet
#device cue # CATC USB ethernet
diff --git a/sys/pc98/i386/machdep.c b/sys/pc98/i386/machdep.c
index 1918878..caa579c 100644
--- a/sys/pc98/i386/machdep.c
+++ b/sys/pc98/i386/machdep.c
@@ -1168,9 +1168,6 @@ union descriptor ldt[NLDT]; /* local descriptor table */
struct region_descriptor r_gdt, r_idt;
#endif
-#ifndef SMP
-extern struct segment_descriptor common_tssd, *tss_gdt;
-#endif
int private_tss; /* flag indicating private tss */
#if defined(I586_CPU) && !defined(NO_F00F_HACK)
diff --git a/sys/pc98/i386/userconfig.c b/sys/pc98/i386/userconfig.c
index e4f5f08..0d53c0e 100644
--- a/sys/pc98/i386/userconfig.c
+++ b/sys/pc98/i386/userconfig.c
@@ -337,7 +337,8 @@ static DEVCLASS_INFO devclass_names[] = {
static DEV_INFO device_info[] = {
/*---Name----- ---Description---------------------------------------------- */
#ifdef PC98
-{"bs", "PC-9801-55 SCSI Interface", 0, CLS_STORAGE},
+{"bs", "PC-9801-55 SCSI Interface", 0, CLS_STORAGE},
+{"wdc", "IDE/ESDI/MFM disk controller", 0, CLS_STORAGE},
#endif
{"adv", "AdvanSys SCSI narrow controller", 0, CLS_STORAGE},
{"bt", "Buslogic SCSI controller", 0, CLS_STORAGE},
@@ -345,7 +346,7 @@ static DEV_INFO device_info[] = {
{"aic", "Adaptec 152x SCSI and compatible SCSI cards", 0, CLS_STORAGE},
{"nca", "ProAudio Spectrum SCSI and compatibles", 0, CLS_STORAGE},
{"sea", "Seagate ST01/ST02 SCSI and compatibles", 0, CLS_STORAGE},
-{"wdc", "IDE/ESDI/MFM disk controller", 0, CLS_STORAGE},
+{"stg", "TMC 18C30/18C50 based SCSI cards", 0, CLS_STORAGE},
{"ata", "ATA/ATAPI compatible disk controller", 0, CLS_STORAGE},
{"fdc", "Floppy disk controller", FLG_FIXED, CLS_STORAGE},
{"mcd", "Mitsumi CD-ROM", 0, CLS_STORAGE},
diff --git a/sys/pc98/pc98/fd.c b/sys/pc98/pc98/fd.c
index e1f2923..7a635b4 100644
--- a/sys/pc98/pc98/fd.c
+++ b/sys/pc98/pc98/fd.c
@@ -91,6 +91,8 @@
#include <isa/rtc.h>
#endif
+/* misuse a flag to identify format operation */
+
/* configuration flags */
#define FDC_PRETEND_D0 (1 << 0) /* pretend drive 0 to be there */
#define FDC_NO_FIFO (1 << 2) /* do not enable FIFO */
@@ -393,12 +395,14 @@ fdctl_wr_isa(fdc_p fdc, u_int8_t v)
bus_space_write_1(fdc->ctlt, fdc->ctlh, 0, v);
}
+#if NCARD > 0
static void
fdctl_wr_pcmcia(fdc_p fdc, u_int8_t v)
{
bus_space_write_1(fdc->portt, fdc->porth, FDCTL+fdc->port_off, v);
}
#endif
+#endif /* PC98 */
#if 0
@@ -956,6 +960,7 @@ fdc_pccard_probe(device_t dev)
#ifndef PC98
fdc->fdctl_wr = fdctl_wr_pcmcia;
#endif
+
fdc->flags |= FDC_ISPCMCIA | FDC_NODMA;
/* Attempt to allocate our resources for the duration of the probe */
@@ -1155,6 +1160,69 @@ DRIVER_MODULE(fdc, pccard, fdc_pccard_driver, fdc_devclass, 0, 0);
#endif /* NCARD > 0 */
+static void fd_clone __P((void *arg, char *name, int namelen, dev_t *dev));
+
+static struct {
+ char *match;
+ int minor;
+ int link;
+} fd_suffix[] = {
+ { "a", 0, 1 },
+ { "b", 0, 1 },
+ { "c", 0, 1 },
+ { "d", 0, 1 },
+ { "e", 0, 1 },
+ { "f", 0, 1 },
+ { "g", 0, 1 },
+ { "h", 0, 1 },
+ { ".1720", 1, 0 },
+ { ".1480", 2, 0 },
+ { ".1440", 3, 0 },
+ { ".1200", 4, 0 },
+ { ".820", 5, 0 },
+ { ".800", 6, 0 },
+ { ".720", 7, 0 },
+ { ".360", 8, 0 },
+ { ".640", 9, 0 },
+ { ".1232", 10, 0 },
+#ifdef PC98
+ { ".1280", 11, 0 },
+ { ".1476", 12, 0 },
+#endif
+ { 0, 0 }
+};
+static void
+fd_clone(arg, name, namelen, dev)
+ void *arg;
+ char *name;
+ int namelen;
+ dev_t *dev;
+{
+ int u, d, i;
+ char *n;
+ dev_t pdev;
+
+ if (*dev != NODEV)
+ return;
+ if (dev_stdclone(name, &n, "fd", &u) != 2)
+ return;
+ for (i = 0; ; i++) {
+ if (fd_suffix[i].match == NULL)
+ return;
+ if (strcmp(n, fd_suffix[i].match))
+ continue;
+ d = fd_suffix[i].minor;
+ break;
+ }
+ if (fd_suffix[i].link == 0) {
+ *dev = make_dev(&fd_cdevsw, (u << 6) + d,
+ UID_ROOT, GID_OPERATOR, 0640, name);
+ } else {
+ pdev = makedev(fd_cdevsw.d_maj, (u << 6) + d);
+ *dev = make_dev_alias(pdev, name);
+ }
+}
+
/******************************************************************/
/*
* devices attached to the controller section.
@@ -1390,26 +1458,17 @@ static int
fd_attach(device_t dev)
{
struct fd_data *fd;
-#if 0
- int i;
- int mynor;
- int typemynor;
- int typesize;
-#endif
static int cdevsw_add_done = 0;
fd = device_get_softc(dev);
if (!cdevsw_add_done) {
- cdevsw_add(&fd_cdevsw); /* XXX */
- cdevsw_add_done++;
+ cdevsw_add(&fd_cdevsw); /* XXX */
+ cdevsw_add_done++;
}
+ EVENTHANDLER_REGISTER(dev_clone, fd_clone, 0, 1000);
make_dev(&fd_cdevsw, (fd->fdu << 6),
- UID_ROOT, GID_OPERATOR, 0640, "rfd%d", fd->fdu);
-
-#if 0
- /* Other make_dev() go here. */
-#endif
+ UID_ROOT, GID_OPERATOR, 0640, "fd%d", fd->fdu);
/*
* Export the drive to the devstat interface.
@@ -2575,7 +2634,7 @@ fdstate(fdc_p fdc)
static int
retrier(struct fdc_data *fdc)
{
- register struct bio *bp;
+ struct bio *bp;
struct fd_data *fd;
int fdu;
@@ -2602,14 +2661,14 @@ retrier(struct fdc_data *fdc)
default:
fail:
{
- dev_t sav_b_dev = bp->bio_dev;
+ dev_t sav_bio_dev = bp->bio_dev;
/* Trick diskerr */
bp->bio_dev = makedev(major(bp->bio_dev),
(FDUNIT(minor(bp->bio_dev))<<3)|RAW_PART);
diskerr(bp, "hard error", LOG_PRINTF,
fdc->fd->skip / DEV_BSIZE,
(struct disklabel *)NULL);
- bp->bio_dev = sav_b_dev;
+ bp->bio_dev = sav_bio_dev;
if (fdc->flags & FDC_STAT_VALID)
{
printf(
diff --git a/sys/pc98/pc98/machdep.c b/sys/pc98/pc98/machdep.c
index 1918878..caa579c 100644
--- a/sys/pc98/pc98/machdep.c
+++ b/sys/pc98/pc98/machdep.c
@@ -1168,9 +1168,6 @@ union descriptor ldt[NLDT]; /* local descriptor table */
struct region_descriptor r_gdt, r_idt;
#endif
-#ifndef SMP
-extern struct segment_descriptor common_tssd, *tss_gdt;
-#endif
int private_tss; /* flag indicating private tss */
#if defined(I586_CPU) && !defined(NO_F00F_HACK)
diff --git a/sys/pc98/pc98/sio.c b/sys/pc98/pc98/sio.c
index fa0320a..66a73e8 100644
--- a/sys/pc98/pc98/sio.c
+++ b/sys/pc98/pc98/sio.c
@@ -391,6 +391,7 @@ struct com_s {
struct resource *irqres;
struct resource *ioportres;
void *cookie;
+ dev_t devs[6];
/*
* Data area for output buffers. Someday we should build the output
@@ -962,6 +963,7 @@ sio_pccard_detach(dev)
device_t dev;
{
struct com_s *com;
+ int i;
com = (struct com_s *) device_get_softc(dev);
if (com == NULL) {
@@ -969,6 +971,8 @@ sio_pccard_detach(dev)
return (0);
}
com->gone = 1;
+ for (i = 0 ; i < 6; i++)
+ destroy_dev(com->devs[i]);
if (com->irqres) {
bus_teardown_intr(dev, com->irqres, com->cookie);
bus_release_resource(dev, SYS_RES_IRQ, 0, com->irqres);
@@ -2090,17 +2094,19 @@ determined_type: ;
sio_slow_ih = sinthand_add("tty:sio", &clk_ithd, siopoll,
NULL, SWI_TTY, 0);
}
- make_dev(&sio_cdevsw, unit,
+ com->devs[0] = make_dev(&sio_cdevsw, unit,
UID_ROOT, GID_WHEEL, 0600, "ttyd%r", unit);
- make_dev(&sio_cdevsw, unit | CONTROL_INIT_STATE,
+ com->devs[1] = make_dev(&sio_cdevsw, unit | CONTROL_INIT_STATE,
UID_ROOT, GID_WHEEL, 0600, "ttyid%r", unit);
- make_dev(&sio_cdevsw, unit | CONTROL_LOCK_STATE,
+ com->devs[2] = make_dev(&sio_cdevsw, unit | CONTROL_LOCK_STATE,
UID_ROOT, GID_WHEEL, 0600, "ttyld%r", unit);
- make_dev(&sio_cdevsw, unit | CALLOUT_MASK,
+ com->devs[3] = make_dev(&sio_cdevsw, unit | CALLOUT_MASK,
UID_UUCP, GID_DIALER, 0660, "cuaa%r", unit);
- make_dev(&sio_cdevsw, unit | CALLOUT_MASK | CONTROL_INIT_STATE,
+ com->devs[4] = make_dev(&sio_cdevsw,
+ unit | CALLOUT_MASK | CONTROL_INIT_STATE,
UID_UUCP, GID_DIALER, 0660, "cuaia%r", unit);
- make_dev(&sio_cdevsw, unit | CALLOUT_MASK | CONTROL_LOCK_STATE,
+ com->devs[5] = make_dev(&sio_cdevsw,
+ unit | CALLOUT_MASK | CONTROL_LOCK_STATE,
UID_UUCP, GID_DIALER, 0660, "cuala%r", unit);
com->flags = flags;
com->pps.ppscap = PPS_CAPTUREASSERT | PPS_CAPTURECLEAR;
@@ -2928,7 +2934,6 @@ more_intr:
if (com->do_timestamp)
microtime(&com->timestamp);
++com_events;
-/* XXX - needs to go away when alpha gets ithreads */
sched_swi(sio_slow_ih, SWI_DELAY);
#if 0 /* for testing input latency vs efficiency */
if (com->iptr - com->ibuf == 8)
OpenPOWER on IntegriCloud