Date: Tue, 10 Mar 1998 19:54:51 +0200 (IST) From: Yuri Krichevsky <yury@nest.bistbn.com> To: hardware@FreeBSD.ORG Subject: solution to 'sio0 not found' problem on IWill (and maybe COMPAQ) Message-ID: <199803101754.TAA00605@nest.bistbn.com>
next in thread | raw e-mail | index | archive | help
Hi.
This is small patch for FreeBSD 2.2.5-RELEASE, that fixes
problem with detecting serial ports on IWill motherboards
(I hope, it will work for COMPAQ LTE Elite machines also).
I don't think it is right way to detect serial ports, so
please use my patch only if you have this problem.
P.S.
sorry for my english ;-)
P.P.S.
after reboot, you may get message like this
'sio0: 65 events for device without tp' - just ignore it.
*** /sys/i386/isa/sio.c.orig Thu Mar 5 19:44:34 1998
--- /sys/i386/isa/sio.c Tue Mar 10 19:23:06 1998
***************
*** 493,499 ****
struct isa_device *dev;
{
static bool_t already_init;
! bool_t failures[10];
int fn;
struct isa_device *idev;
Port_t iobase;
--- 493,499 ----
struct isa_device *dev;
{
static bool_t already_init;
! bool_t failures[12];
int fn;
struct isa_device *idev;
Port_t iobase;
***************
*** 664,677 ****
enable_intr();
result = IO_COMSIZE;
! for (fn = 0; fn < sizeof failures; ++fn)
! if (failures[fn]) {
! outb(iobase + com_mcr, 0);
result = 0;
! if (COM_VERBOSE(dev))
! printf("sio%d: probe test %d failed\n",
! dev->id_unit, fn);
}
return (result);
}
--- 664,726 ----
enable_intr();
result = IO_COMSIZE;
!
! /*
! * Patch (C) Yuri Krichevsky (yury@bistbn.com)
! *
! * If we have'nt found serial port yet, maybe it's strange
! * serial port... (like on IWill motherboard)
! *
! *
! * !WARNING! It's only temporary solution ! Use this patch only if
! * you have problems with serial ports !
! *
! */
! if (sizeof failures) {
! {
! result = IO_COMSIZE;
!
! /*
! * Probing port as described in article
! * 'The Serial Port' (C) Chris Blum (chris@phil.uni-sb.de)
! * http://colargol.tihlde.hist.no/~bardj/serial/
! */
!
! outb(iobase + com_mcr, 0x10);
! if ((inb(iobase + com_msr) & 0xf0)) {
! failures[10] = 1;
! result = 0;
! } else {
! outb(iobase + com_mcr, 0x1f);
! if ((inb(iobase + com_msr) & 0xf0) != 0xf0) {
! failures[11] = 1;
result = 0;
! } else {
! /*
! * UART detected (I hope, it's UART).
! */
! outb(iobase + com_cfcr, CFCR_8BITS);
! outb(iobase + com_ier, 0x0);
! outb(iobase + com_mcr, MCR_IENABLE);
! }
}
+
+ }
+ }
+ /*
+ * END of patch
+ */
+ if ( !result ) {
+ for (fn = 0; fn < sizeof failures; ++fn)
+ if (failures[fn]) {
+ outb(iobase + com_mcr, 0);
+ result = 0;
+ if (COM_VERBOSE(dev))
+ printf("sio%d: probe test %d failed\n",
+ dev->id_unit, fn);
+ }
+ }
+
return (result);
}
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hardware" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199803101754.TAA00605>
