Index: dev/sio/sio.c =================================================================== RCS file: /usr/cvs/src/sys/dev/sio/sio.c,v retrieving revision 1.377 diff -u -r1.377 sio.c --- dev/sio/sio.c 23 Jun 2002 18:57:53 -0000 1.377 +++ dev/sio/sio.c 1 Jul 2002 20:43:53 -0000 @@ -864,10 +864,11 @@ #endif /* COM_ESP */ int -sioattach(dev, xrid, rclk) +sioattach(dev, xrid, rclk, shareirq) device_t dev; int xrid; u_long rclk; + int shareirq; { struct com_s *com; #ifdef COM_ESP @@ -1112,16 +1113,17 @@ rid = 0; com->irqres = bus_alloc_resource(dev, SYS_RES_IRQ, &rid, 0ul, ~0ul, 1, - RF_ACTIVE); + shareirq ? RF_ACTIVE | RF_SHAREABLE : RF_ACTIVE); if (com->irqres) { - ret = BUS_SETUP_INTR(device_get_parent(dev), dev, com->irqres, - INTR_TYPE_TTY | INTR_FAST, - siointr, com, &com->cookie); - if (ret) { + if (!shareirq) + ret = BUS_SETUP_INTR(device_get_parent(dev), dev, + com->irqres, INTR_TYPE_TTY | INTR_FAST, siointr, + com, &com->cookie); + if (shareirq || ret) { ret = BUS_SETUP_INTR(device_get_parent(dev), dev, com->irqres, INTR_TYPE_TTY, siointr, com, &com->cookie); - if (ret == 0) + if (!shareirq && ret == 0) device_printf(dev, "unable to activate interrupt in fast mode - using normal mode\n"); } if (ret) Index: dev/sio/sio_ebus.c =================================================================== RCS file: /usr/cvs/src/sys/dev/sio/sio_ebus.c,v retrieving revision 1.3 diff -u -r1.3 sio_ebus.c --- dev/sio/sio_ebus.c 16 Jul 2002 16:20:44 -0000 1.3 +++ dev/sio/sio_ebus.c 17 Jul 2002 00:02:54 -0000 @@ -109,5 +109,5 @@ device_t dev; { - return (sioattach(dev, 0, 0UL)); + return (sioattach(dev, 0, 0UL, 0)); } Index: dev/sio/sio_isa.c =================================================================== RCS file: /usr/cvs/src/sys/dev/sio/sio_isa.c,v retrieving revision 1.9 diff -u -r1.9 sio_isa.c --- dev/sio/sio_isa.c 6 May 2002 09:02:55 -0000 1.9 +++ dev/sio/sio_isa.c 16 May 2002 14:33:29 -0000 @@ -159,7 +159,7 @@ sio_isa_attach(dev) device_t dev; { - return (sioattach(dev, 0, 0UL)); + return (sioattach(dev, 0, 0UL, 0)); } DRIVER_MODULE(sio, isa, sio_isa_driver, sio_devclass, 0, 0); Index: dev/sio/sio_pccard.c =================================================================== RCS file: /usr/cvs/src/sys/dev/sio/sio_pccard.c,v retrieving revision 1.6 diff -u -r1.6 sio_pccard.c --- dev/sio/sio_pccard.c 20 Mar 2002 02:07:41 -0000 1.6 +++ dev/sio/sio_pccard.c 2 May 2002 14:23:38 -0000 @@ -105,7 +105,7 @@ sio_pccard_attach(dev) device_t dev; { - return (sioattach(dev, 0, 0UL)); + return (sioattach(dev, 0, 0UL, 1)); } static int Index: dev/sio/sio_pci.c =================================================================== RCS file: /usr/cvs/src/sys/dev/sio/sio_pci.c,v retrieving revision 1.8 diff -u -r1.8 sio_pci.c --- dev/sio/sio_pci.c 10 Jul 2002 17:26:11 -0000 1.8 +++ dev/sio/sio_pci.c 11 Jul 2002 20:18:41 -0000 @@ -94,7 +94,7 @@ if (id->desc == NULL) return (ENXIO); sio_pci_kludge_unit(dev); - return (sioattach(dev, id->rid, 0UL)); + return (sioattach(dev, id->rid, 0UL, 1)); } /* Index: dev/sio/sio_puc.c =================================================================== RCS file: /usr/cvs/src/sys/dev/sio/sio_puc.c,v retrieving revision 1.3 diff -u -r1.3 sio_puc.c --- dev/sio/sio_puc.c 20 Mar 2002 02:07:41 -0000 1.3 +++ dev/sio/sio_puc.c 2 May 2002 14:24:09 -0000 @@ -71,7 +71,7 @@ if (BUS_READ_IVAR(device_get_parent(dev), dev, PUC_IVAR_FREQ, &rclk) != 0) rclk = DEFAULT_RCLK; - return (sioattach(dev, 0, rclk)); + return (sioattach(dev, 0, rclk, 1)); } static int Index: dev/sio/siovar.h =================================================================== RCS file: /usr/cvs/src/sys/dev/sio/siovar.h,v retrieving revision 1.5 diff -u -r1.5 siovar.h --- dev/sio/siovar.h 20 Mar 2002 02:07:41 -0000 1.5 +++ dev/sio/siovar.h 2 May 2002 14:20:21 -0000 @@ -63,7 +63,7 @@ #define CLR_FLAG(dev, bit) device_set_flags(dev, device_get_flags(dev) & ~(bit)) #endif /* PC98 */ -int sioattach(device_t dev, int xrid, u_long rclk); +int sioattach(device_t dev, int xrid, u_long rclk, int shareirq); int siodetach(device_t dev); int sioprobe(device_t dev, int xrid, u_long rclk, int noprobe); Index: pc98/pc98/sio.c =================================================================== RCS file: /usr/cvs/src/sys/pc98/pc98/sio.c,v retrieving revision 1.175 diff -u -r1.175 sio.c --- pc98/pc98/sio.c 24 Jun 2002 15:24:42 -0000 1.175 +++ pc98/pc98/sio.c 17 Jul 2002 00:04:07 -0000 @@ -1404,10 +1404,11 @@ #endif /* COM_ESP */ int -sioattach(dev, xrid, rclk) +sioattach(dev, xrid, rclk, shareirq) device_t dev; int xrid; u_long rclk; + int shareirq; { struct com_s *com; #ifdef COM_ESP @@ -1813,16 +1814,17 @@ rid = 0; com->irqres = bus_alloc_resource(dev, SYS_RES_IRQ, &rid, 0ul, ~0ul, 1, - RF_ACTIVE); + shareirq ? RF_ACTIVE | RF_SHAREABLE : RF_ACTIVE); if (com->irqres) { - ret = BUS_SETUP_INTR(device_get_parent(dev), dev, com->irqres, - INTR_TYPE_TTY | INTR_FAST, - siointr, com, &com->cookie); - if (ret) { + if (!shareirq) + ret = BUS_SETUP_INTR(device_get_parent(dev), dev, + com->irqres, INTR_TYPE_TTY | INTR_FAST, siointr, + com, &com->cookie); + if (shareirq || ret) { ret = BUS_SETUP_INTR(device_get_parent(dev), dev, com->irqres, INTR_TYPE_TTY, siointr, com, &com->cookie); - if (ret == 0) + if (!shareirq && ret == 0) device_printf(dev, "unable to activate interrupt in fast mode - using normal mode\n"); } if (ret) Index: pc98/pc98/sio_cbus.c =================================================================== RCS file: /usr/cvs/src/sys/pc98/pc98/sio_cbus.c,v retrieving revision 1.3 diff -u -r1.3 sio_cbus.c --- pc98/pc98/sio_cbus.c 20 Mar 2002 12:22:31 -0000 1.3 +++ pc98/pc98/sio_cbus.c 17 Jul 2002 00:03:29 -0000 @@ -89,7 +89,7 @@ sio_isa_attach(dev) device_t dev; { - return (sioattach(dev, 0, 0UL)); + return (sioattach(dev, 0, 0UL, 0)); } DRIVER_MODULE(sio, isa, sio_isa_driver, sio_devclass, 0, 0);