summaryrefslogtreecommitdiffstats
path: root/sys/dev/sio
diff options
context:
space:
mode:
authorambrisko <ambrisko@FreeBSD.org>2004-05-03 22:35:28 +0000
committerambrisko <ambrisko@FreeBSD.org>2004-05-03 22:35:28 +0000
commit15b2afd48d4fd4449a185be66041193f610303a5 (patch)
tree233941e7057256d325f2e3010220871fc4d82961 /sys/dev/sio
parentfaf8cf3425cc2d36d29a6229e68e8dc1e5d55b86 (diff)
downloadFreeBSD-src-15b2afd48d4fd4449a185be66041193f610303a5.zip
FreeBSD-src-15b2afd48d4fd4449a185be66041193f610303a5.tar.gz
Remove new options and my prevention of system freeze when the sio probe
returns okay when HW probe fails. This happens when comconsole flag is set but VGA console is used instead. Back out requested by: bde (He will be looking at other solutions from scratch)
Diffstat (limited to 'sys/dev/sio')
-rw-r--r--sys/dev/sio/sio.c125
1 files changed, 49 insertions, 76 deletions
diff --git a/sys/dev/sio/sio.c b/sys/dev/sio/sio.c
index 0cd3557..192973d 100644
--- a/sys/dev/sio/sio.c
+++ b/sys/dev/sio/sio.c
@@ -123,7 +123,6 @@ __FBSDID("$FreeBSD$");
#define COM_PPSCTS(flags) ((flags) & 0x10000)
#define COM_ST16650A(flags) ((flags) & 0x20000)
#define COM_TI16754(flags) ((flags) & 0x200000)
-#define COM_ALTCONSOLE(flags) ((flags) & 0x400000)
#define sio_getreg(com, off) \
(bus_space_read_1((com)->bst, (com)->bsh, (off)))
@@ -750,7 +749,7 @@ sioprobe(dev, xrid, rclk, noprobe)
sio_setreg(com, com_cfcr, CFCR_8BITS);
mtx_unlock_spin(&sio_lock);
bus_release_resource(dev, SYS_RES_IOPORT, rid, port);
- if (comconsole != -1 && iobase == siocniobase)
+ if (iobase == siocniobase)
result = 0;
if (result != 0) {
device_set_softc(dev, NULL);
@@ -796,7 +795,6 @@ sioprobe(dev, xrid, rclk, noprobe)
mtx_unlock_spin(&sio_lock);
- result = 0;
irqs = irqmap[1] & ~irqmap[0];
if (bus_get_resource(idev, SYS_RES_IRQ, 0, &xirq, NULL) == 0 &&
((1 << xirq) & irqs) == 0) {
@@ -806,14 +804,14 @@ sioprobe(dev, xrid, rclk, noprobe)
printf(
"sio%d: port may not be enabled\n",
device_get_unit(dev));
- result = ENXIO;
}
if (bootverbose)
printf("sio%d: irq maps: %#x %#x %#x %#x\n",
device_get_unit(dev),
irqmap[0], irqmap[1], irqmap[2], irqmap[3]);
- for (fn = 0; result == 0 && fn < sizeof failures; ++fn)
+ result = 0;
+ for (fn = 0; fn < sizeof failures; ++fn)
if (failures[fn]) {
sio_setreg(com, com_mcr, 0);
result = ENXIO;
@@ -828,7 +826,7 @@ sioprobe(dev, xrid, rclk, noprobe)
break;
}
bus_release_resource(dev, SYS_RES_IOPORT, rid, port);
- if (comconsole != -1 && iobase == siocniobase)
+ if (iobase == siocniobase)
result = 0;
if (result != 0) {
device_set_softc(dev, NULL);
@@ -2816,9 +2814,6 @@ siocngetspeed(iobase, rclk)
u_char cfcr;
cfcr = inb(iobase + com_cfcr);
- outb(iobase + com_cfcr, 0x0e);
- if (inb(iobase + com_cfcr) != 0x0e)
- return (0);
outb(iobase + com_cfcr, CFCR_DLAB | cfcr);
dlbl = inb(iobase + com_dlbl);
@@ -2831,12 +2826,7 @@ siocngetspeed(iobase, rclk)
/* XXX there should be more sanity checking. */
if (divisor == 0)
return (CONSPEED);
-
-#ifdef FORCECONSPEED
- return (CONSPEED);
-#else
return (rclk / (16UL * divisor));
-#endif
}
#endif
@@ -2917,7 +2907,7 @@ siocnprobe(cp)
speed_t boot_speed;
u_char cfcr;
u_int divisor;
- int s, unit, check_flags;
+ int s, unit;
struct siocnstate sp;
/*
@@ -2936,42 +2926,28 @@ siocnprobe(cp)
*/
cp->cn_pri = CN_DEAD;
- siocniobase = 0;
- for(check_flags = 1; check_flags >= 0 && !siocniobase; check_flags--) {
- for (unit = 0; unit < 16; unit++) { /* XXX need to know how
- many */
- int flags;
+ for (unit = 0; unit < 16; unit++) { /* XXX need to know how many */
+ int flags;
- if (resource_disabled("sio", unit))
- continue;
- if (resource_int_value("sio", unit, "flags", &flags))
- continue;
+ if (resource_disabled("sio", unit))
+ continue;
+ if (resource_int_value("sio", unit, "flags", &flags))
+ continue;
+ if (COM_CONSOLE(flags) || COM_DEBUGGER(flags)) {
+ int port;
+ Port_t iobase;
- if (!check_flags && COM_ALTCONSOLE(flags)
- && !siocniobase){
- flags |= 0x10;
+ if (resource_int_value("sio", unit, "port", &port))
+ continue;
+ iobase = port;
+ s = spltty();
+ if (boothowto & RB_SERIAL) {
+ boot_speed =
+ siocngetspeed(iobase, comdefaultrclk);
+ if (boot_speed)
+ comdefaultrate = boot_speed;
}
- if (COM_CONSOLE(flags) || COM_DEBUGGER(flags)) {
- int port;
- Port_t iobase;
-
- if (resource_int_value("sio", unit, "port",
- &port))
- continue;
- iobase = port;
- s = spltty();
- if (boothowto & RB_SERIAL) {
- boot_speed = siocngetspeed(iobase,
- comdefaultrclk);
- if (boot_speed)
- comdefaultrate = boot_speed;
- else {
- splx(s);
- continue;
- }
- }
-
/*
* Initialize the divisor latch. We can't rely on
* siocnopen() to do this the first time, since it
@@ -2981,37 +2957,34 @@ siocnprobe(cp)
* need to set the speed in hardware so that
* switching it later is null.
*/
- cfcr = inb(iobase + com_cfcr);
- outb(iobase + com_cfcr, CFCR_DLAB | cfcr);
- divisor = siodivisor(comdefaultrclk, comdefaultrate);
- outb(iobase + com_dlbl, divisor & 0xff);
- outb(iobase + com_dlbh, divisor >> 8);
- outb(iobase + com_cfcr, cfcr);
-
- siocnopen(&sp, iobase, comdefaultrate);
-
- splx(s);
- if (!siocniobase && COM_CONSOLE(flags)
- && !COM_LLCONSOLE(flags)) {
- siocnset(cp, unit);
- cp->cn_pri = COM_FORCECONSOLE(flags)
- || boothowto & RB_SERIAL
- ? CN_REMOTE : CN_NORMAL;
- siocniobase = iobase;
- siocnunit = unit;
- }
- if (COM_DEBUGGER(flags)) {
- printf("sio%d: gdb debugging port\n",
- unit);
- siogdbiobase = iobase;
- siogdbunit = unit;
+ cfcr = inb(iobase + com_cfcr);
+ outb(iobase + com_cfcr, CFCR_DLAB | cfcr);
+ divisor = siodivisor(comdefaultrclk, comdefaultrate);
+ outb(iobase + com_dlbl, divisor & 0xff);
+ outb(iobase + com_dlbh, divisor >> 8);
+ outb(iobase + com_cfcr, cfcr);
+
+ siocnopen(&sp, iobase, comdefaultrate);
+
+ splx(s);
+ if (COM_CONSOLE(flags) && !COM_LLCONSOLE(flags)) {
+ siocnset(cp, unit);
+ cp->cn_pri = COM_FORCECONSOLE(flags)
+ || boothowto & RB_SERIAL
+ ? CN_REMOTE : CN_NORMAL;
+ siocniobase = iobase;
+ siocnunit = unit;
+ }
+ if (COM_DEBUGGER(flags)) {
+ printf("sio%d: gdb debugging port\n", unit);
+ siogdbiobase = iobase;
+ siogdbunit = unit;
#if DDB > 0
- siocnset(&gdbconsdev, unit);
- gdb_arg = &gdbconsdev;
- gdb_getc = siocngetc;
- gdb_putc = siocnputc;
+ siocnset(&gdbconsdev, unit);
+ gdb_arg = &gdbconsdev;
+ gdb_getc = siocngetc;
+ gdb_putc = siocnputc;
#endif
- }
}
}
}
OpenPOWER on IntegriCloud