From df88297cad3e438e774e13137af8eaff53c0fc7f Mon Sep 17 00:00:00 2001 From: bde Date: Thu, 22 Oct 1998 05:58:45 +0000 Subject: Initialize isa_devtab entries for interrupt handlers in individual device drivers, not in ioconf.c. Use a different hack in isa_device.h so that a new config(8) is not required yet. pc98 parts approved by: kato --- sys/i386/isa/aic6360.c | 6 +- sys/i386/isa/alog.c | 4 +- sys/i386/isa/asc.c | 7 +- sys/i386/isa/bs/bsif.c | 4 +- sys/i386/isa/cy.c | 4 +- sys/i386/isa/fd.c | 6 +- sys/i386/isa/if_ar.c | 6 +- sys/i386/isa/if_cs.c | 6 +- sys/i386/isa/if_cx.c | 5 +- sys/i386/isa/if_ed.c | 6 +- sys/i386/isa/if_eg.c | 6 +- sys/i386/isa/if_el.c | 6 +- sys/i386/isa/if_ep.c | 6 +- sys/i386/isa/if_ex.c | 7 +- sys/i386/isa/if_fe.c | 7 +- sys/i386/isa/if_ie.c | 7 +- sys/i386/isa/if_le.c | 6 +- sys/i386/isa/if_lnc.c | 9 ++- sys/i386/isa/if_sr.c | 5 +- sys/i386/isa/if_wl.c | 8 ++- sys/i386/isa/if_ze.c | 7 +- sys/i386/isa/if_zp.c | 7 +- sys/i386/isa/isa.c | 9 ++- sys/i386/isa/isa_device.h | 134 +++++++++++++++++++-------------------- sys/i386/isa/labpc.c | 4 +- sys/i386/isa/loran.c | 7 +- sys/i386/isa/lpt.c | 6 +- sys/i386/isa/mcd.c | 6 +- sys/i386/isa/mse.c | 6 +- sys/i386/isa/ncr5380.c | 5 +- sys/i386/isa/npx.c | 5 +- sys/i386/isa/pcf.c | 6 +- sys/i386/isa/pcvt/pcvt_drv.c | 2 + sys/i386/isa/pcvt/pcvt_hdr.h | 1 + sys/i386/isa/pnp.c | 4 +- sys/i386/isa/ppc.c | 7 +- sys/i386/isa/psm.c | 7 +- sys/i386/isa/rc.c | 6 +- sys/i386/isa/seagate.c | 7 +- sys/i386/isa/sio.c | 6 +- sys/i386/isa/snd/sound.c | 2 + sys/i386/isa/snd/sound.h | 2 + sys/i386/isa/sound/sound_calls.h | 7 +- sys/i386/isa/sound/soundcard.c | 25 +++++++- sys/i386/isa/spigot.c | 5 +- sys/i386/isa/stallion.c | 7 +- sys/i386/isa/syscons.c | 6 +- sys/i386/isa/tw.c | 4 +- sys/i386/isa/ultra14f.c | 8 ++- sys/i386/isa/wd.c | 4 +- sys/i386/isa/wd7000.c | 4 +- sys/i386/isa/wdreg.h | 4 +- sys/i386/isa/wt.c | 6 +- 53 files changed, 293 insertions(+), 154 deletions(-) (limited to 'sys/i386') diff --git a/sys/i386/isa/aic6360.c b/sys/i386/isa/aic6360.c index 2b28abc..7b0e583 100644 --- a/sys/i386/isa/aic6360.c +++ b/sys/i386/isa/aic6360.c @@ -32,7 +32,7 @@ */ /* - * $Id: aic6360.c,v 1.40 1998/04/15 17:45:12 bde Exp $ + * $Id: aic6360.c,v 1.41 1998/06/21 14:53:09 bde Exp $ * * Acknowledgements: Many of the algorithms used in this driver are * inspired by the work of Julian Elischer (julian@tfs.com) and @@ -663,6 +663,7 @@ static int aic_find __P((struct aic_data *)); static void aic_done __P((struct acb *)); static void aic_dataout __P((struct aic_data *aic)); static void aic_datain __P((struct aic_data *aic)); +static ointhand2_t aicintr; static int32_t aic_scsi_cmd __P((struct scsi_xfer *)); static int aic_poll __P((struct aic_data *aic, struct acb *)); void aic_add_timeout __P((struct acb *, int)); @@ -967,6 +968,7 @@ aicattach(dev) struct scsibus_data *scbus; AIC_TRACE(("aicattach\n")); + dev->id_ointr = aicintr; aic->state = 0; aic_scsi_reset(aic); aic_init(aic); /* Init chip and driver */ @@ -2135,7 +2137,7 @@ aic_datain(aic) * 2) doesn't support synchronous transfers properly (yet) */ -void +static void aicintr(int unit) { struct aic_data *aic = aicdata[unit]; diff --git a/sys/i386/isa/alog.c b/sys/i386/isa/alog.c index 8fbe576..b01d2dc 100644 --- a/sys/i386/isa/alog.c +++ b/sys/i386/isa/alog.c @@ -189,6 +189,7 @@ typedef struct static int alog_probe (struct isa_device *idp); /* Check for alog board */ static int alog_attach (struct isa_device *idp); /* Take alog board */ +static ointhand2_t alogintr; static int sync_clock2 (int unit, long period); /* setup clock 2 period */ static int putfifo (talog_chan *pchan, u_short fifoent); static int alog_open (dev_t dev, int oflags, int devtype, struct proc *p); @@ -525,6 +526,7 @@ static int alog_attach (struct isa_device *idp) talog_unit *info; /* pointer to driver specific info for unit */ int chan; /* the channel used for creating devfs nodes */ + idp->id_ointr = alogintr; if (!(info = malloc(sizeof(*info), M_DEVBUF, M_NOWAIT))) { printf ("alog%d: cannot allocate driver storage\n", unit); @@ -555,7 +557,7 @@ static int alog_attach (struct isa_device *idp) /* Unit interrupt handling routine (interrupts generated by clock 2) */ -void alogintr (int unit) +static void alogintr (int unit) { talog_unit *info = alog_unit[unit]; int iobase = info->isaunit->id_iobase; diff --git a/sys/i386/isa/asc.c b/sys/i386/isa/asc.c index fe8dba6..1a801b0 100644 --- a/sys/i386/isa/asc.c +++ b/sys/i386/isa/asc.c @@ -34,7 +34,7 @@ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* - * $Id: asc.c,v 1.30 1998/06/07 17:10:13 dfr Exp $ + * $Id: asc.c,v 1.31 1998/08/12 18:16:38 bde Exp $ */ #include "asc.h" @@ -188,6 +188,8 @@ static int ascprobe (struct isa_device *isdp); static int ascattach(struct isa_device *isdp); struct isa_driver ascdriver = { ascprobe, ascattach, "asc" }; +static ointhand2_t ascintr; + static d_open_t ascopen; static d_close_t ascclose; static d_read_t ascread; @@ -448,6 +450,7 @@ ascattach(struct isa_device *isdp) int unit = isdp->id_unit; struct asc_unit *scu = unittab + unit; + isdp->id_ointr = ascintr; scu->flags |= FLAG_DEBUG; printf("asc%d: [GI1904/Trust Ami-Scan Grey/Color]\n", unit); @@ -497,7 +500,7 @@ ascattach(struct isa_device *isdp) *** ascintr *** the interrupt routine, at the end of DMA... ***/ -void +static void ascintr(int unit) { struct asc_unit *scu = unittab + unit; diff --git a/sys/i386/isa/bs/bsif.c b/sys/i386/isa/bs/bsif.c index d9a8210..58e7203 100644 --- a/sys/i386/isa/bs/bsif.c +++ b/sys/i386/isa/bs/bsif.c @@ -70,6 +70,7 @@ struct scsi_adapter pc98texa55bs = { #ifdef __FreeBSD__ static int bsprobe __P((struct isa_device *)); static int bsattach __P((struct isa_device *)); +static inthand2_t bsintr; static int bsprint __P((void *, const char *)); static void bs_scsi_minphys __P((struct buf *)); static int bs_dmarangecheck __P((caddr_t, unsigned)); @@ -220,6 +221,7 @@ bsattach(dev) struct bs_softc *bsc = bscdata[unit]; struct scsibus_data *scbus; + dev->id_ointr = bsintr; bsc->sc_link.adapter_unit = unit; bsc->sc_link.adapter_targ = bsc->sc_hostid; bsc->sc_link.flags = SDEV_BOUNCE; @@ -256,7 +258,7 @@ bsintr(arg) #endif /* __NetBSD__ */ #ifdef __FreeBSD__ -void +static void bsintr(unit) int unit; { diff --git a/sys/i386/isa/cy.c b/sys/i386/isa/cy.c index 3f76567..f6388b1 100644 --- a/sys/i386/isa/cy.c +++ b/sys/i386/isa/cy.c @@ -27,7 +27,7 @@ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $Id: cy.c,v 1.70 1998/08/20 05:21:50 bde Exp $ + * $Id: cy.c,v 1.71 1998/08/23 08:26:40 bde Exp $ */ #include "opt_compat.h" @@ -335,6 +335,7 @@ struct com_s { /* PCI driver entry point. */ int cyattach_common __P((cy_addr cy_iobase, int cy_align)); +ointhand2_t siointr; static int cy_units __P((cy_addr cy_iobase, int cy_align)); static int sioattach __P((struct isa_device *dev)); @@ -506,6 +507,7 @@ sioattach(isdp) printf("cy%d: attached as cy%d\n", isdp->id_unit, adapter); isdp->id_unit = adapter; /* XXX */ } + isdp->id_ointr = siointr; isdp->id_ri_flags |= RI_FAST; return (1); } diff --git a/sys/i386/isa/fd.c b/sys/i386/isa/fd.c index d04f98a..d6a7659 100644 --- a/sys/i386/isa/fd.c +++ b/sys/i386/isa/fd.c @@ -43,7 +43,7 @@ * SUCH DAMAGE. * * from: @(#)fd.c 7.4 (Berkeley) 5/25/91 - * $Id: fd.c,v 1.122 1998/09/15 08:15:28 gibbs Exp $ + * $Id: fd.c,v 1.123 1998/09/15 22:07:24 gibbs Exp $ * */ @@ -221,6 +221,7 @@ static int fd_in(fdcu_t, int *); static void fdstart(fdcu_t); static timeout_t fd_iotimeout; static timeout_t fd_pseudointr; +static ointhand2_t fdintr; static int fdstate(fdcu_t, fdc_p); static int retrier(fdcu_t); static int fdformat(dev_t, struct fd_formb *, struct proc *); @@ -540,6 +541,7 @@ fdattach(struct isa_device *dev) int typesize; #endif + dev->id_ointr = fdintr; fdc->fdcu = fdcu; fdc->flags |= FDC_ATTACHED; fdc->dmachan = dev->id_drq; @@ -1275,7 +1277,7 @@ fd_pseudointr(void *arg1) * keep calling the state machine until it returns a 0 * * ALWAYS called at SPLBIO * \***********************************************************************/ -void +static void fdintr(fdcu_t fdcu) { fdc_p fdc = fdc_data + fdcu; diff --git a/sys/i386/isa/if_ar.c b/sys/i386/isa/if_ar.c index adebd22..374aed9 100644 --- a/sys/i386/isa/if_ar.c +++ b/sys/i386/isa/if_ar.c @@ -28,7 +28,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: if_ar.c,v 1.21 1998/06/21 14:53:10 bde Exp $ + * $Id: if_ar.c,v 1.22 1998/08/24 02:28:15 bde Exp $ */ /* @@ -178,6 +178,7 @@ static int irqtable[16] = { struct isa_driver ardriver = {arprobe, arattach, "arc"}; +static ointhand2_t arintr; static void ar_xmit(struct ar_softc *sc); static void arstart(struct ifnet *ifp); static int arioctl(struct ifnet *ifp, u_long cmd, caddr_t data); @@ -296,6 +297,7 @@ arattach(struct isa_device *id) int unit; char *iface; + id->id_ointr = arintr; switch(hc->interface) { default: iface = "UNKNOWN"; break; case AR_IFACE_EIA_232: iface = "EIA-232"; break; @@ -378,7 +380,7 @@ arattach(struct isa_device *id) * See if there is other interrupts pending. * Repeat until there is no more interrupts. */ -void +static void arintr(int unit) { struct ar_hardc *hc = &ar_hardc[unit]; diff --git a/sys/i386/isa/if_cs.c b/sys/i386/isa/if_cs.c index 1d044de..3b63f4d 100644 --- a/sys/i386/isa/if_cs.c +++ b/sys/i386/isa/if_cs.c @@ -27,7 +27,7 @@ */ /* - * $Id: if_cs.c,v 1.4 1998/08/27 22:41:18 msmith Exp $ + * $Id: if_cs.c,v 1.5 1998/10/04 02:11:15 msmith Exp $ * * Device driver for Crystal Semiconductor CS8920 based ethernet * adapters. By Maxim Bolotin and Oleg Sharoiko, 27-April-1997 @@ -108,6 +108,7 @@ SYSCTL_INT(_machdep, OID_AUTO, cs_recv_delay, CTLFLAG_RW, &cs_recv_delay, 0, "") static int cs_attach __P((struct cs_softc *, int, int)); static int cs_attach_isa __P((struct isa_device *)); static void cs_init __P((void *)); +static ointhand2_t csintr; static int cs_ioctl __P((struct ifnet *, u_long, caddr_t)); static int cs_probe __P((struct isa_device *)); static int cs_cs89x0_probe __P((struct cs_softc *, @@ -633,6 +634,7 @@ cs_attach_isa(struct isa_device *dev) struct cs_softc *sc=&cs_softc[unit]; int flags=dev->id_flags; + dev->id_ointr = csintr; return cs_attach(sc, unit, flags); } @@ -871,7 +873,7 @@ csintr_sc(struct cs_softc *sc, int unit) /* * Handle interrupts */ -void +static void csintr(int unit) { struct cs_softc *sc = &cs_softc[unit]; diff --git a/sys/i386/isa/if_cx.c b/sys/i386/isa/if_cx.c index ded05ec..26ff1bc 100644 --- a/sys/i386/isa/if_cx.c +++ b/sys/i386/isa/if_cx.c @@ -62,6 +62,7 @@ static int cxattach __P((struct isa_device *id)); static void cxput __P((cx_chan_t *c, char b)); static void cxsend __P((cx_chan_t *c)); static void cxrinth __P((cx_chan_t *c)); +static ointhand2_t cxintr; static int cxtinth __P((cx_chan_t *c)); #ifdef DEBUG @@ -230,6 +231,8 @@ cxattach (struct isa_device *id) int i; struct sppp *sp; + id->id_ointr = cxintr; + /* Initialize the board structure. */ cx_init (b, unit, iobase, ffs(irq)-1, drq); @@ -707,7 +710,7 @@ cxtinth (cx_chan_t *c) return (teoir); } -void +static void cxintr (int bnum) { cx_board_t *b = cxboard + bnum; diff --git a/sys/i386/isa/if_ed.c b/sys/i386/isa/if_ed.c index 0fed19a..5309327 100644 --- a/sys/i386/isa/if_ed.c +++ b/sys/i386/isa/if_ed.c @@ -24,7 +24,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: if_ed.c,v 1.144 1998/08/24 02:28:15 bde Exp $ + * $Id: if_ed.c,v 1.145 1998/09/13 22:15:44 eivind Exp $ */ /* @@ -138,6 +138,7 @@ static int ed_attach __P((struct ed_softc *, int, int)); static int ed_attach_isa __P((struct isa_device *)); static void ed_init __P((void *)); +static ointhand2_t edintr; static int ed_ioctl __P((struct ifnet *, u_long, caddr_t)); static int ed_probe __P((struct isa_device *)); static void ed_start __P((struct ifnet *)); @@ -1739,6 +1740,7 @@ ed_attach_isa(isa_dev) struct ed_softc *sc = &ed_softc[unit]; int flags = isa_dev->id_flags; + isa_dev->id_ointr = edintr; return ed_attach(sc, unit, flags); } @@ -2567,7 +2569,7 @@ edintr_sc(sc) } } -void +static void edintr(unit) int unit; { diff --git a/sys/i386/isa/if_eg.c b/sys/i386/isa/if_eg.c index 7f68aa6..f0ee1a2 100644 --- a/sys/i386/isa/if_eg.c +++ b/sys/i386/isa/if_eg.c @@ -27,7 +27,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $Id: if_eg.c,v 1.27 1998/03/28 13:23:56 bde Exp $ + * $Id: if_eg.c,v 1.28 1998/06/07 17:10:27 dfr Exp $ * * Support for 3Com 3c505 Etherlink+ card. */ @@ -107,6 +107,7 @@ static void eginit __P((struct eg_softc *sc)); static int egioctl (struct ifnet *, u_long, caddr_t); static void egrecv(struct eg_softc *); static void egstart(struct ifnet *); +static ointhand2_t egintr; static void egread __P((struct eg_softc *, caddr_t, int)); static void egstop __P((struct eg_softc *)); @@ -326,6 +327,7 @@ egattach(struct isa_device *id) struct eg_softc *sc = &eg_softc[id->id_unit]; struct ifnet *ifp = &sc->sc_arpcom.ac_if; + id->id_ointr = egintr; egstop(sc); sc->eg_pcb[0] = EG_CMD_GETEADDR; /* Get Station address */ @@ -526,7 +528,7 @@ loop: m_freem(m0); } -void +static void egintr(int unit) { register struct eg_softc *sc = &eg_softc[unit]; diff --git a/sys/i386/isa/if_el.c b/sys/i386/isa/if_el.c index 6a3c32d..a7520d7 100644 --- a/sys/i386/isa/if_el.c +++ b/sys/i386/isa/if_el.c @@ -6,7 +6,7 @@ * * Questions, comments, bug reports and fixes to kimmel@cs.umass.edu. * - * $Id: if_el.c,v 1.36 1998/06/07 17:10:28 dfr Exp $ + * $Id: if_el.c,v 1.37 1998/06/21 15:54:11 bde Exp $ */ /* Except of course for the portions of code lifted from other FreeBSD * drivers (mainly elread, elget and el_ioctl) @@ -82,6 +82,7 @@ static void el_watchdog(struct ifnet *); static void el_stop(int); static int el_xmit(struct el_softc *,int); +static ointhand2_t elintr; static __inline void elread(struct el_softc *,caddr_t,int); static struct mbuf *elget(caddr_t,int,int,struct ifnet *); static __inline void el_hardreset(int); @@ -161,6 +162,7 @@ el_attach(struct isa_device *idev) dprintf(("Attaching el%d...\n",idev->id_unit)); /* Get things pointing to the right places. */ + idev->id_ointr = elintr; sc = &el_softc[idev->id_unit]; ifp = &sc->arpcom.ac_if; base = sc->el_base; @@ -428,7 +430,7 @@ static int el_xmit(struct el_softc *sc,int len) } /* controller interrupt */ -void elintr(int unit) +static void elintr(int unit) { register struct el_softc *sc; register int base; diff --git a/sys/i386/isa/if_ep.c b/sys/i386/isa/if_ep.c index 80b8db4..8ca0272 100644 --- a/sys/i386/isa/if_ep.c +++ b/sys/i386/isa/if_ep.c @@ -38,7 +38,7 @@ */ /* - * $Id: if_ep.c,v 1.75 1998/06/07 17:10:28 dfr Exp $ + * $Id: if_ep.c,v 1.76 1998/06/21 18:02:38 bde Exp $ * * Promiscuous mode added and interrupt logic slightly changed * to reduce the number of adapter failures. Transceiver select @@ -118,6 +118,7 @@ static int ep_isa_attach __P((struct isa_device *)); static int epioctl __P((struct ifnet * ifp, u_long, caddr_t)); static void epinit __P((struct ep_softc *)); +static ointhand2_t epintr; static void epread __P((struct ep_softc *)); void epreset __P((int)); static void epstart __P((struct ifnet *)); @@ -538,6 +539,7 @@ ep_isa_attach(is) u_short config; int irq; + is->id_ointr = epintr; sc->ep_connectors = 0; config = inw(IS_BASE + EP_W0_CONFIG_CTRL); if (config & IS_AUI) { @@ -900,7 +902,7 @@ readcheck: goto startagain; } -void +static void epintr(unit) int unit; { diff --git a/sys/i386/isa/if_ex.c b/sys/i386/isa/if_ex.c index f64ef74..2508bd7 100644 --- a/sys/i386/isa/if_ex.c +++ b/sys/i386/isa/if_ex.c @@ -24,7 +24,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: if_ex.c,v 1.11 1998/03/28 13:24:06 bde Exp $ + * $Id: if_ex.c,v 1.12 1998/06/07 17:10:30 dfr Exp $ */ /* @@ -119,6 +119,7 @@ static int ex_attach __P((struct isa_device *)); static void ex_init __P((void *)); static void ex_start __P((struct ifnet *)); static void ex_stop __P((int)); +static ointhand2_t exintr; static int ex_ioctl __P((struct ifnet *, u_long, caddr_t)); static void ex_reset __P((int)); static void ex_watchdog __P((struct ifnet *)); @@ -254,6 +255,8 @@ int ex_attach(struct isa_device *dev) DODEBUG(Start_End, printf("ex_attach%d: start\n", unit);); + dev->id_ointr = exintr; + /* * Initialize the ifnet structure. */ @@ -565,7 +568,7 @@ void ex_stop(int unit) } -void exintr(int unit) +static void exintr(int unit) { struct ex_softc *sc = &ex_sc[unit]; struct ifnet *ifp = &sc->arpcom.ac_if; diff --git a/sys/i386/isa/if_fe.c b/sys/i386/isa/if_fe.c index 85e948d..ae8613a 100644 --- a/sys/i386/isa/if_fe.c +++ b/sys/i386/isa/if_fe.c @@ -21,7 +21,7 @@ */ /* - * $Id: if_fe.c,v 1.41 1998/06/07 17:10:31 dfr Exp $ + * $Id: if_fe.c,v 1.42 1998/06/21 16:51:06 bde Exp $ * * Device driver for Fujitsu MB86960A/MB86965A based Ethernet cards. * To be used with FreeBSD 2.x @@ -236,6 +236,7 @@ static struct fe_softc { static int fe_probe ( struct isa_device * ); static int fe_attach ( struct isa_device * ); static void fe_init ( int ); +static ointhand2_t feintr; static int fe_ioctl ( struct ifnet *, u_long, caddr_t ); static void fe_start ( struct ifnet * ); static void fe_reset ( int ); @@ -1447,6 +1448,8 @@ fe_attach ( DEVICE * dev ) #endif struct fe_softc *sc = &fe_softc[dev->id_unit]; + dev->id_ointr = feintr; + /* * Initialize ifnet structure */ @@ -2365,7 +2368,7 @@ fe_rint ( struct fe_softc * sc, u_char rstat ) /* * Ethernet interface interrupt processor */ -void +static void feintr ( int unit ) { struct fe_softc *sc = &fe_softc[unit]; diff --git a/sys/i386/isa/if_ie.c b/sys/i386/isa/if_ie.c index f894dc5..3f1ed13 100644 --- a/sys/i386/isa/if_ie.c +++ b/sys/i386/isa/if_ie.c @@ -47,7 +47,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: if_ie.c,v 1.55 1998/08/10 14:27:32 bde Exp $ + * $Id: if_ie.c,v 1.56 1998/08/10 17:21:48 bde Exp $ */ /* @@ -176,6 +176,7 @@ static struct mbuf *last_not_for_us; static int ieprobe(struct isa_device * dvp); static int ieattach(struct isa_device * dvp); +static ointhand2_t ieintr; static int sl_probe(struct isa_device * dvp); static int el_probe(struct isa_device * dvp); static int ni_probe(struct isa_device * dvp); @@ -789,6 +790,8 @@ ieattach(struct isa_device *dvp) struct ifnet *ifp = &ie->arpcom.ac_if; size_t allocsize; + dvp->id_ointr = ieintr; + /* * based on the amount of memory we have, allocate our tx and rx * resources. @@ -851,7 +854,7 @@ ieattach(struct isa_device *dvp) /* * What to do upon receipt of an interrupt. */ -void +static void ieintr(int unit) { register struct ie_softc *ie = &ie_softc[unit]; diff --git a/sys/i386/isa/if_le.c b/sys/i386/isa/if_le.c index f6b89ed..667b710 100644 --- a/sys/i386/isa/if_le.c +++ b/sys/i386/isa/if_le.c @@ -21,7 +21,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $Id: if_le.c,v 1.46 1998/07/15 09:38:09 bde Exp $ + * $Id: if_le.c,v 1.47 1998/08/12 18:32:42 bde Exp $ */ /* @@ -236,6 +236,7 @@ struct le_softc { static int le_probe(struct isa_device *dvp); static int le_attach(struct isa_device *dvp); +static ointhand2_t le_intr; static int le_ioctl(struct ifnet *ifp, u_long command, caddr_t data); static void le_input(le_softc_t *sc, caddr_t seg1, size_t total_len, size_t len2, caddr_t seg2); @@ -354,6 +355,7 @@ le_attach( le_softc_t *sc = &le_softc[dvp->id_unit]; struct ifnet *ifp = &sc->le_if; + dvp->id_ointr = le_intr; ifp->if_softc = sc; ifp->if_mtu = ETHERMTU; printf("%s%d: %s ethernet address %6D\n", @@ -378,7 +380,7 @@ le_attach( return 1; } -void +static void le_intr( int unit) { diff --git a/sys/i386/isa/if_lnc.c b/sys/i386/isa/if_lnc.c index e31c600..e5f6c73 100644 --- a/sys/i386/isa/if_lnc.c +++ b/sys/i386/isa/if_lnc.c @@ -30,7 +30,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: if_lnc.c,v 1.45 1998/08/24 02:28:15 bde Exp $ + * $Id: if_lnc.c,v 1.46 1998/09/17 13:09:16 jkh Exp $ */ /* @@ -177,6 +177,7 @@ static int pcnet_probe __P((struct lnc_softc *sc)); static int lnc_attach_sc __P((struct lnc_softc *sc, int unit)); static int lnc_attach __P((struct isa_device *isa_dev)); static void lnc_init __P((struct lnc_softc *sc)); +static ointhand2_t lncintr; static __inline int mbuf_to_buffer __P((struct mbuf *m, char *buffer)); static __inline struct mbuf *chain_to_cluster __P((struct mbuf *m)); static void lnc_start __P((struct ifnet *ifp)); @@ -1273,8 +1274,10 @@ lnc_attach(struct isa_device * isa_dev) { int unit = isa_dev->id_unit; struct lnc_softc *sc = &lnc_softc[unit]; + int result; - int result = lnc_attach_sc (sc, unit); + isa_dev->id_ointr = lncintr; + result = lnc_attach_sc (sc, unit); if (result == 0) return (0); @@ -1592,7 +1595,7 @@ lncintr_sc(struct lnc_softc *sc) } } -void +static void lncintr(int unit) { struct lnc_softc *sc = &lnc_softc[unit]; diff --git a/sys/i386/isa/if_sr.c b/sys/i386/isa/if_sr.c index 236bb42..85cbb70 100644 --- a/sys/i386/isa/if_sr.c +++ b/sys/i386/isa/if_sr.c @@ -27,7 +27,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: if_sr.c,v 1.14 1998/06/17 13:54:56 bde Exp $ + * $Id: if_sr.c,v 1.15 1998/06/21 14:53:12 bde Exp $ */ /* @@ -270,6 +270,7 @@ struct sr_hardc *srattach_pci(int unit, vm_offset_t plx_vaddr, void srintr_hc(struct sr_hardc *hc); static int srattach(struct sr_hardc *hc); +static ointhand2_t srintr; static void sr_xmit(struct sr_softc *sc); static void srstart(struct ifnet *ifp); static int srioctl(struct ifnet *ifp, u_long cmd, caddr_t data); @@ -864,7 +865,7 @@ srattach(struct sr_hardc *hc) * See if there is other interrupts pending. * Repeat until there no interrupts remain. */ -void +static void srintr(int unit) { struct sr_hardc *hc; diff --git a/sys/i386/isa/if_wl.c b/sys/i386/isa/if_wl.c index 66dbffd..31f7c31 100644 --- a/sys/i386/isa/if_wl.c +++ b/sys/i386/isa/if_wl.c @@ -1,4 +1,4 @@ -/* $Id: if_wl.c,v 1.14 1998/08/20 05:49:59 msmith Exp $ */ +/* $Id: if_wl.c,v 1.15 1998/08/24 02:28:15 bde Exp $ */ /* * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -81,7 +81,7 @@ * * sample config: * - * device wl0 at isa? port 0x300 net irq ? vector wlintr + * device wl0 at isa? port 0x300 net irq ? * * Ifdefs: * 1. WLDEBUG. (off) - if turned on enables IFF_DEBUG set via ifconfig debug @@ -302,6 +302,7 @@ static void wlstart(struct ifnet *ifp); static void wlinit(void *xsc); static int wlioctl(struct ifnet *ifp, u_long cmd, caddr_t data); static timeout_t wlwatchdog; +static ointhand2_t wlintr; static void wlxmt(int unt, struct mbuf *m); static int wldiag(int unt); static int wlconfig(int unit); @@ -443,6 +444,7 @@ wlattach(struct isa_device *id) #ifdef WLDEBUG printf("wlattach: base %x, unit %d\n", base, unit); #endif + id->id_ointr = wlintr; sc->base = base; sc->unit = unit; sc->flags = 0; @@ -1472,7 +1474,7 @@ wlwatchdog(void *vsc) * output : either a packet is received, or a packet is transfered * */ -void +static void wlintr(unit) int unit; { diff --git a/sys/i386/isa/if_ze.c b/sys/i386/isa/if_ze.c index 2821470..4900804 100644 --- a/sys/i386/isa/if_ze.c +++ b/sys/i386/isa/if_ze.c @@ -47,7 +47,7 @@ */ /* - * $Id: if_ze.c,v 1.53 1998/06/07 17:10:39 dfr Exp $ + * $Id: if_ze.c,v 1.54 1998/06/21 17:08:08 bde Exp $ */ /* XXX don't mix different PCCARD support code. */ @@ -168,6 +168,7 @@ static void ze_init __P((int unit)); static __inline void ze_xmit __P((struct ifnet *ifp)); static void ze_start __P((struct ifnet *ifp)); static __inline void ze_rint __P((int unit)); +static ointhand2_t zeintr; static int ze_ioctl __P((struct ifnet *ifp, u_long command, caddr_t data)); static void ze_get_packet __P((struct ze_softc *sc, char *buf, int len)); static __inline char *ze_ring_copy __P((struct ze_softc *sc, char *src, @@ -586,6 +587,8 @@ ze_attach(isa_dev) struct ifnet *ifp = &sc->arpcom.ac_if; int pl; + isa_dev->id_ointr = zeintr; + /* PCMCIA card can be offlined. Reconfiguration is required */ if (isa_dev->id_reconfig) { ze_reset(isa_dev->id_unit); @@ -1145,7 +1148,7 @@ ze_rint(unit) /* * Ethernet interface interrupt processor */ -void +static void zeintr(unit) int unit; { diff --git a/sys/i386/isa/if_zp.c b/sys/i386/isa/if_zp.c index b2e9ad8..11e562c 100644 --- a/sys/i386/isa/if_zp.c +++ b/sys/i386/isa/if_zp.c @@ -34,7 +34,7 @@ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * From: if_ep.c,v 1.9 1994/01/25 10:46:29 deraadt Exp $ - * $Id: if_zp.c,v 1.47 1998/05/26 02:28:18 jmb Exp $ + * $Id: if_zp.c,v 1.48 1998/06/07 17:10:40 dfr Exp $ */ /*- * TODO: @@ -198,6 +198,7 @@ static int zpioctl __P((struct ifnet * ifp, u_long, caddr_t)); static u_short read_eeprom_data __P((int, int)); static void zpinit __P((int)); +static ointhand2_t zpintr; static void zpmbuffill __P((void *)); static void zpmbufempty __P((struct zp_softc *)); static void zpread __P((struct zp_softc *)); @@ -484,6 +485,8 @@ zpattach(isa_dev) u_short i; int pl; + isa_dev->id_ointr = zpintr; + /* PCMCIA card can be offlined. Reconfiguration is required */ if (isa_dev->id_reconfig) { if (!isa_dev->id_alive && sc->last_alive) { @@ -774,7 +777,7 @@ readcheck: } goto startagain; } -void +static void zpintr(unit) int unit; { diff --git a/sys/i386/isa/isa.c b/sys/i386/isa/isa.c index eb28093..fe686e1 100644 --- a/sys/i386/isa/isa.c +++ b/sys/i386/isa/isa.c @@ -34,7 +34,7 @@ * SUCH DAMAGE. * * from: @(#)isa.c 7.2 (Berkeley) 5/13/91 - * $Id: isa.c,v 1.114 1998/10/12 13:12:45 bde Exp $ + * $Id: isa.c,v 1.115 1998/10/13 08:24:38 dg Exp $ */ /* @@ -557,7 +557,10 @@ config_isadev_c(isdp, mp, reconfig) isdp->id_alive = id_alive; } (*dp->attach)(isdp); - if (isdp->id_irq) { + if (isdp->id_irq != 0 && isdp->id_intr == NULL) + printf("%s%d: irq with no handler\n", + dp->name, isdp->id_unit); + if (isdp->id_irq != 0 && isdp->id_intr != NULL) { #ifdef APIC_IO /* * Some motherboards use upper IRQs for traditional @@ -594,7 +597,7 @@ config_isadev_c(isdp, mp, reconfig) } else { #if 0 /* This code has not been tested.... */ - if (isdp->id_irq) { + if (isdp->id_irq != 0 && isdp->id_intr != NULL) { icu_unset(ffs(isdp->id_irq) - 1, isdp->id_intr); if (mp) diff --git a/sys/i386/isa/isa_device.h b/sys/i386/isa/isa_device.h index 17aad1d..7092a3f 100644 --- a/sys/i386/isa/isa_device.h +++ b/sys/i386/isa/isa_device.h @@ -31,7 +31,7 @@ * SUCH DAMAGE. * * from: @(#)isa_device.h 7.1 (Berkeley) 5/9/91 - * $Id: isa_device.h,v 1.54 1998/09/15 10:04:08 gibbs Exp $ + * $Id: isa_device.h,v 1.55 1998/10/12 11:32:35 bde Exp $ */ #ifndef _I386_ISA_ISA_DEVICE_H_ @@ -41,6 +41,8 @@ * ISA Bus Autoconfiguration */ +typedef void ointhand2_t __P((int unit)); + /* * Per device structure. * @@ -57,7 +59,12 @@ struct isa_device { int id_drq; /* DMA request */ caddr_t id_maddr; /* physical i/o memory address on bus (if any)*/ int id_msize; /* size of i/o memory */ - inthand2_t *id_intr; /* interrupt interface routine */ + union { + inthand2_t *id_i; + ointhand2_t *id_oi; + } id_iu; /* interrupt interface routine */ +#define id_intr id_iu.id_i +#define id_ointr id_iu.id_oi int id_unit; /* unit number */ int id_flags; /* flags */ int id_scsiid; /* scsi id if needed */ @@ -123,75 +130,64 @@ int isa_dmastatus __P((int chan)); int isa_dmastop __P((int chan)); void reconfig_isadev __P((struct isa_device *isdp, u_int *mp)); -typedef void ointhand2_t __P((int unit)); - -/* - * The "old" interrupt handlers really have type ointhand2_t although they - * appear to be declared as having type inthand2_t. However, if this - * header is included by ioconf.c, pretend that the handlers really have - * type inthand_t. Assume that `C' is defined only by ioconf.c. - */ -#ifndef C -#define inthand2_t ointhand2_t -#endif - -inthand2_t adintr; -inthand2_t ahaintr; -inthand2_t aicintr; -inthand2_t alogintr; -inthand2_t arintr; -inthand2_t ascintr; +/* XXX temporary hack for old config files. */ +#ifdef C +#define adintr NULL +#define ahaintr NULL +#define aicintr NULL +#define alogintr NULL +#define arintr NULL +#define ascintr NULL #ifdef PC98 -inthand2_t bsintr; +#define bsintr NULL #endif -inthand2_t csintr; -inthand2_t cxintr; -inthand2_t cyintr; -inthand2_t edintr; -inthand2_t egintr; -inthand2_t elintr; -inthand2_t epintr; -inthand2_t exintr; -inthand2_t fdintr; -inthand2_t feintr; -inthand2_t gusintr; -inthand2_t ieintr; -inthand2_t labpcintr; -inthand2_t le_intr; -inthand2_t lncintr; -inthand2_t loranintr; -inthand2_t lptintr; -inthand2_t m6850intr; -inthand2_t mcdintr; -inthand2_t mseintr; -inthand2_t ncaintr; -inthand2_t npxintr; -inthand2_t pasintr; -inthand2_t pcmintr; -inthand2_t pcrint; -inthand2_t ppcintr; -inthand2_t pcfintr; -inthand2_t psmintr; -inthand2_t rcintr; -inthand2_t sbintr; -inthand2_t scintr; -inthand2_t seaintr; -inthand2_t siointr; -inthand2_t sndintr; -inthand2_t spigintr; -inthand2_t srintr; -inthand2_t sscapeintr; -inthand2_t stlintr; -inthand2_t twintr; -inthand2_t uhaintr; -inthand2_t wdintr; -inthand2_t wdsintr; -inthand2_t wlintr; -inthand2_t wtintr; -inthand2_t zeintr; -inthand2_t zpintr; - -#undef inthand2_t +#define csintr NULL +#define cxintr NULL +#define cyintr NULL +#define edintr NULL +#define egintr NULL +#define elintr NULL +#define epintr NULL +#define exintr NULL +#define fdintr NULL +#define feintr NULL +#define gusintr NULL +#define ieintr NULL +#define labpcintr NULL +#define le_intr NULL +#define lncintr NULL +#define loranintr NULL +#define lptintr NULL +#define m6850intr NULL +#define mcdintr NULL +#define mseintr NULL +#define ncaintr NULL +#define npxintr NULL +#define pasintr NULL +#define pcmintr NULL +#define pcrint NULL +#define ppcintr NULL +#define pcfintr NULL +#define psmintr NULL +#define rcintr NULL +#define sbintr NULL +#define scintr NULL +#define seaintr NULL +#define siointr NULL +#define sndintr NULL +#define spigintr NULL +#define srintr NULL +#define sscapeintr NULL +#define stlintr NULL +#define twintr NULL +#define uhaintr NULL +#define wdintr NULL +#define wdsintr NULL +#define wlintr NULL +#define wtintr NULL +#define zeintr NULL +#define zpintr NULL +#endif /* C */ #endif /* KERNEL */ diff --git a/sys/i386/isa/labpc.c b/sys/i386/isa/labpc.c index 4e19b64..aa2adce 100644 --- a/sys/i386/isa/labpc.c +++ b/sys/i386/isa/labpc.c @@ -296,6 +296,7 @@ static struct cdevsw labpc_cdevsw = labpcioctl, nostop, nullreset, nodevtotty, seltrue, nommap, labpcstrategy, "labpc", NULL, -1 }; +static ointhand2_t labpcintr; static void start(struct ctlr *ctlr); static void @@ -473,6 +474,7 @@ labpcattach(struct isa_device *dev) { struct ctlr *ctlr = labpcs[dev->id_unit]; + dev->id_ointr = labpcintr; callout_handle_init(&ctlr->ch); ctlr->sample_us = (1000000.0 / (double)LABPC_DEFAULT_HERZ) + .50; reset(ctlr); @@ -692,7 +694,7 @@ static void ad_intr(struct ctlr *ctlr) } } -void labpcintr(int unit) +static void labpcintr(int unit) { struct ctlr *ctlr = labpcs[unit]; (*ctlr->intr)(ctlr); diff --git a/sys/i386/isa/loran.c b/sys/i386/isa/loran.c index e92d793..ee34511 100644 --- a/sys/i386/isa/loran.c +++ b/sys/i386/isa/loran.c @@ -6,7 +6,7 @@ * this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp * ---------------------------------------------------------------------------- * - * $Id: loran.c,v 1.7 1998/08/17 18:47:36 bde Exp $ + * $Id: loran.c,v 1.8 1998/08/17 19:09:36 bde Exp $ * * This device-driver helps the userland controlprogram for a LORAN-C * receiver avoid monopolizing the CPU. @@ -213,6 +213,7 @@ static d_open_t loranopen; static d_close_t loranclose; static d_read_t loranread; static d_write_t loranwrite; +static ointhand2_t loranintr; extern struct timecounter loran_timecounter[]; /**********************************************************************/ @@ -257,6 +258,8 @@ loranattach(struct isa_device *isdp) { int i; + isdp->id_ointr = loranintr; + /* We need to be a "fast-intr" */ isdp->id_ri_flags |= RI_FAST; @@ -403,7 +406,7 @@ loranwrite(dev_t dev, struct uio * uio, int ioflag) return(err); } -void +static void loranintr(int unit) { u_long ef; diff --git a/sys/i386/isa/lpt.c b/sys/i386/isa/lpt.c index d9e1592..a2907cf 100644 --- a/sys/i386/isa/lpt.c +++ b/sys/i386/isa/lpt.c @@ -46,7 +46,7 @@ * SUCH DAMAGE. * * from: unknown origin, 386BSD 0.1 - * $Id: lpt.c,v 1.69 1998/06/07 17:10:44 dfr Exp $ + * $Id: lpt.c,v 1.70 1998/08/17 01:05:23 bde Exp $ */ /* @@ -259,6 +259,7 @@ static struct lpt_softc { static timeout_t lptout; static int lptprobe (struct isa_device *dvp); static int lptattach (struct isa_device *isdp); +static ointhand2_t lptintr; #ifdef INET @@ -422,6 +423,7 @@ lptattach(struct isa_device *isdp) struct lpt_softc *sc; int unit; + isdp->id_ointr = lptintr; unit = isdp->id_unit; sc = lpt_sc + unit; sc->sc_port = isdp->id_iobase; @@ -749,7 +751,7 @@ lptwrite(dev_t dev, struct uio * uio, int ioflag) * do checking for interrupted write call. */ -void +static void lptintr(int unit) { struct lpt_softc *sc = lpt_sc + unit; diff --git a/sys/i386/isa/mcd.c b/sys/i386/isa/mcd.c index 0e3bd17..a24a79f 100644 --- a/sys/i386/isa/mcd.c +++ b/sys/i386/isa/mcd.c @@ -40,7 +40,7 @@ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $Id: mcd.c,v 1.99 1998/07/04 22:30:17 julian Exp $ + * $Id: mcd.c,v 1.100 1998/07/13 09:53:01 bde Exp $ */ static const char COPYRIGHT[] = "mcd-driver (C)1993 by H.Veit & B.Moore"; @@ -178,6 +178,7 @@ static int mcd_send(int unit, int cmd,int nretrys); static void hsg2msf(int hsg, bcd_t *msf); static int msf2hsg(bcd_t *msf, int relative); static int mcd_volinfo(int unit); +static ointhand2_t mcdintr; static int mcd_waitrdy(int port,int dly); static timeout_t mcd_timeout; static void mcd_doread(int state, struct mcd_mbx *mbxin); @@ -249,6 +250,7 @@ int mcd_attach(struct isa_device *dev) int unit = dev->id_unit; struct mcd_data *cd = mcd_data + unit; + dev->id_ointr = mcdintr; cd->iobase = dev->id_iobase; cd->flags |= MCDINIT; mcd_soft_reset(unit); @@ -977,7 +979,7 @@ mcd_volinfo(int unit) return EINVAL; } -void +static void mcdintr(unit) int unit; { diff --git a/sys/i386/isa/mse.c b/sys/i386/isa/mse.c index d907e4c..6579de2 100644 --- a/sys/i386/isa/mse.c +++ b/sys/i386/isa/mse.c @@ -11,7 +11,7 @@ * this software for any purpose. It is provided "as is" * without express or implied warranty. * - * $Id: mse.c,v 1.37 1998/01/24 02:54:22 eivind Exp $ + * $Id: mse.c,v 1.38 1998/06/07 17:10:47 dfr Exp $ */ /* * Driver for the Logitech and ATI Inport Bus mice for use with 386bsd and @@ -87,6 +87,7 @@ static struct cdevsw mse_cdevsw = mseioctl, nostop, nullreset, nodevtotty,/* mse */ msepoll, nommap, NULL, "mse", NULL, -1 }; +static ointhand2_t mseintr; /* * Software control structure for mouse. The sc_enablemouse(), @@ -257,6 +258,7 @@ mseattach(idp) int unit = idp->id_unit; struct mse_softc *sc = &mse_sc[unit]; + idp->id_ointr = mseintr; sc->sc_port = idp->id_iobase; sc->mode.accelfactor = (idp->id_flags & MSE_CONFIG_ACCEL) >> 4; #ifdef DEVFS @@ -546,7 +548,7 @@ msepoll(dev, events, p) /* * mseintr: update mouse status. sc_deltax and sc_deltay are accumulative. */ -void +static void mseintr(unit) int unit; { diff --git a/sys/i386/isa/ncr5380.c b/sys/i386/isa/ncr5380.c index e897837..cb01305 100644 --- a/sys/i386/isa/ncr5380.c +++ b/sys/i386/isa/ncr5380.c @@ -217,6 +217,7 @@ static void nca_start (adapter_t *z); static void nca_information_transfer (adapter_t *z, scb_t *scb); static int nca_poll (adapter_t *z, scb_t *scb); static int nca_init (adapter_t *z); +static ointhand2_t ncaintr; static int nca_reselect (adapter_t *z); static int nca_select (adapter_t *z, scb_t *scb); static int nca_abort (adapter_t *z, scb_t *scb); @@ -476,6 +477,8 @@ int nca_attach (struct isa_device *dev) printf ("nca%d: type %s%s\n", unit, z->name, (dev->id_flags & FLAG_NOPARITY) ? ", no parity" : ""); + dev->id_ointr = ncaintr; + /* fill in the prototype scsi_link */ z->sc_link.adapter_unit = unit; z->sc_link.adapter_targ = z->scsi_addr; @@ -514,7 +517,7 @@ void ncaminphys (struct buf *bp) /* * Catch an interrupt from the adaptor. */ -void ncaintr (int unit) +static void ncaintr (int unit) { adapter_t *z = &ncadata[unit]; diff --git a/sys/i386/isa/npx.c b/sys/i386/isa/npx.c index 869111f..2ec330a 100644 --- a/sys/i386/isa/npx.c +++ b/sys/i386/isa/npx.c @@ -32,7 +32,7 @@ * SUCH DAMAGE. * * from: @(#)npx.c 7.2 (Berkeley) 5/12/91 - * $Id: npx.c,v 1.60 1998/04/19 15:39:26 bde Exp $ + * $Id: npx.c,v 1.61 1998/06/21 18:02:39 bde Exp $ */ #include "npx.h" @@ -95,6 +95,7 @@ void i586_bcopy __P((const void *from, void *to, size_t len)); void i586_bzero __P((void *buf, size_t len)); int i586_copyin __P((const void *udaddr, void *kaddr, size_t len)); int i586_copyout __P((const void *kaddr, void *udaddr, size_t len)); +ointhand2_t npxintr; #ifdef __GNUC__ @@ -384,6 +385,8 @@ int npxattach(dvp) struct isa_device *dvp; { + dvp->id_ointr = npxintr; + /* The caller has printed "irq 13" for the npx_irq13 case. */ if (!npx_irq13) { printf("npx%d: ", dvp->id_unit); diff --git a/sys/i386/isa/pcf.c b/sys/i386/isa/pcf.c index 7b498d7..bee0e15 100644 --- a/sys/i386/isa/pcf.c +++ b/sys/i386/isa/pcf.c @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: pcf.c,v 1.1.1.17 1998/08/29 17:04:23 son Exp $ + * $Id: pcf.c,v 1.1 1998/09/03 21:01:22 nsouch Exp $ * */ #include @@ -108,6 +108,7 @@ static int pcf_start(device_t, u_char); static int pcf_stop(device_t); static int pcf_write(device_t, char *, int, int *); static int pcf_read(device_t, char *, int, int *); +static ointhand2_t pcfintr; static int pcf_rst_card(device_t, u_char); static device_method_t pcf_methods[] = { @@ -179,6 +180,7 @@ error: static int pcfattach_isa(struct isa_device *isdp) { + isdp->id_ointr = pcfintr; return (1); /* ok */ } @@ -358,7 +360,7 @@ error: return (error); } -void +static void pcfintr(unit) { struct pcf_softc *pcf = diff --git a/sys/i386/isa/pcvt/pcvt_drv.c b/sys/i386/isa/pcvt/pcvt_drv.c index 90758b2..0fd7e84 100644 --- a/sys/i386/isa/pcvt/pcvt_drv.c +++ b/sys/i386/isa/pcvt/pcvt_drv.c @@ -384,6 +384,8 @@ pcattach(struct isa_device *dev) #else /* PCVT_NETBSD > 9 */ + dev->id_ointr = pcrint; + return 1; #endif /* PCVT_NETBSD > 9 */ diff --git a/sys/i386/isa/pcvt/pcvt_hdr.h b/sys/i386/isa/pcvt/pcvt_hdr.h index 70c2891..11adc9c 100644 --- a/sys/i386/isa/pcvt/pcvt_hdr.h +++ b/sys/i386/isa/pcvt/pcvt_hdr.h @@ -1223,6 +1223,7 @@ int pccncheckc ( Dev_t dev ); int pccnputc ( Dev_t dev, U_char c ); #endif +ointhand2_t pcrint; void pcstart ( struct tty *tp ); void pcstop ( struct tty *tp, int flag ); diff --git a/sys/i386/isa/pnp.c b/sys/i386/isa/pnp.c index 9b4bb55..70be3c8 100644 --- a/sys/i386/isa/pnp.c +++ b/sys/i386/isa/pnp.c @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: pnp.c,v 1.5 1998/02/09 06:08:38 eivind Exp $ + * $Id: pnp.c,v 1.6 1998/09/13 22:15:44 eivind Exp $ */ #include @@ -456,7 +456,7 @@ config_pnp_device(pnp_id *p, int csn) nod->dev.id_driver->name ? nod->dev.id_driver->name : "unknown", unit, dvp->pd_name, name, p->serial); if (nod->dev.id_alive) { - if (nod->dev.id_irq) { + if (nod->dev.id_irq != 0 && nod->dev.id_intr != NULL) { /* the board uses interrupts. Register it. */ if (dvp->imask) INTRMASK( *(dvp->imask), nod->dev.id_irq ); diff --git a/sys/i386/isa/ppc.c b/sys/i386/isa/ppc.c index 4dc6a44..39f4b4e 100644 --- a/sys/i386/isa/ppc.c +++ b/sys/i386/isa/ppc.c @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: ppc.c,v 1.8 1998/09/13 20:57:06 nsouch Exp $ + * $Id: ppc.c,v 1.9 1998/09/20 14:47:01 nsouch Exp $ * */ #include "ppc.h" @@ -124,6 +124,7 @@ static void ppc_wfifo(int unit, char byte) { w_fifo(ppcdata[unit], byte); } static void ppc_reset_epp_timeout(int); static void ppc_ecp_sync(int); +static ointhand2_t ppcintr; static int ppc_exec_microseq(int, struct ppb_microseq **); static int ppc_generic_setmode(int, int); @@ -189,7 +190,7 @@ ppc_ecp_sync(int unit) { return; } -void +static void ppcintr(int unit) { /* call directly upper code */ @@ -1276,6 +1277,8 @@ ppcattach(struct isa_device *isdp) ppc_modes[ppc->ppc_mode], (PPB_IS_EPP(ppc->ppc_mode)) ? ppc_epp_protocol[ppc->ppc_epp] : ""); + isdp->id_ointr = ppcintr; + /* * Prepare ppbus data area for upper level code. */ diff --git a/sys/i386/isa/psm.c b/sys/i386/isa/psm.c index 389b1b8..6f7f6ab 100644 --- a/sys/i386/isa/psm.c +++ b/sys/i386/isa/psm.c @@ -20,7 +20,7 @@ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $Id: psm.c,v 1.54 1998/07/06 16:10:06 eivind Exp $ + * $Id: psm.c,v 1.55 1998/10/13 07:56:38 yokota Exp $ */ /* @@ -246,6 +246,7 @@ static int restore_controller __P((KBDC, int)); static int reinitialize __P((int, mousemode_t *)); static int doopen __P((int, int)); static char *model_name(int); +static ointhand2_t psmintr; /* vendor specific features */ typedef int probefunc_t __P((struct psm_softc *)); @@ -977,6 +978,8 @@ psmattach(struct isa_device *dvp) int unit = dvp->id_unit; struct psm_softc *sc = psm_softc[unit]; + dvp->id_ointr = psmintr; + if (sc == NULL) /* shouldn't happen */ return (0); @@ -1662,7 +1665,7 @@ psmioctl(dev_t dev, u_long cmd, caddr_t addr, int flag, struct proc *p) return error; } -void +static void psmintr(int unit) { /* diff --git a/sys/i386/isa/rc.c b/sys/i386/isa/rc.c index e946c58..ae1108a 100644 --- a/sys/i386/isa/rc.c +++ b/sys/i386/isa/rc.c @@ -172,6 +172,7 @@ static int rc_rcsrt[16] = { }; /* Static prototypes */ +static ointhand2_t rcintr; static void rc_hwreset __P((int, int, unsigned int)); static int rc_test __P((int, int)); static void rc_discard_output __P((struct rc_chans *)); @@ -231,6 +232,8 @@ rcattach(dvp) static int rc_started = 0; struct tty *tp; + dvp->id_ointr = rcintr; + /* Thorooughly test the device */ if (rcb->rcb_probed != RC_PROBED) return 0; @@ -278,7 +281,8 @@ rcattach(dvp) } /* RC interrupt handling */ -void rcintr(unit) +static void +rcintr(unit) int unit; { register struct rc_softc *rcb = &rc_softc[unit]; diff --git a/sys/i386/isa/seagate.c b/sys/i386/isa/seagate.c index 8b2be3f..30ca28c 100644 --- a/sys/i386/isa/seagate.c +++ b/sys/i386/isa/seagate.c @@ -60,7 +60,7 @@ * that category, with the possible exception of scanners and * some of the older MO drives. * - * $Id: seagate.c,v 1.30 1998/07/15 09:38:10 bde Exp $ + * $Id: seagate.c,v 1.31 1998/08/11 17:22:42 bde Exp $ */ /* @@ -337,6 +337,7 @@ static void sea_start (adapter_t *z); static void sea_information_transfer (adapter_t *z, scb_t *scb); static int sea_poll (adapter_t *z, scb_t *scb); static int sea_init (adapter_t *z); +static ointhand2_t seaintr; static int sea_reselect (adapter_t *z); static int sea_select (volatile adapter_t *z, scb_t *scb); static int sea_abort (adapter_t *z, scb_t *scb); @@ -532,6 +533,8 @@ int sea_attach (struct isa_device *dev) printf ("\nsea%d: type %s%s\n", unit, z->name, (dev->id_flags & FLAG_NOPARITY) ? ", no parity" : ""); + dev->id_ointr = seaintr; + /* fill in the prototype scsi_link */ z->sc_link.adapter_unit = unit; z->sc_link.adapter_targ = z->scsi_addr; @@ -570,7 +573,7 @@ void seaminphys (struct buf *bp) /* * Catch an interrupt from the adaptor. */ -void seaintr (int unit) +static void seaintr (int unit) { adapter_t *z = &seadata[unit]; diff --git a/sys/i386/isa/sio.c b/sys/i386/isa/sio.c index b0ad5fc..8a6f603 100644 --- a/sys/i386/isa/sio.c +++ b/sys/i386/isa/sio.c @@ -31,7 +31,7 @@ * SUCH DAMAGE. * * from: @(#)com.c 7.5 (Berkeley) 5/16/91 - * $Id: sio.c,v 1.214 1998/08/23 10:16:26 bde Exp $ + * $Id: sio.c,v 1.215 1998/09/13 22:15:44 eivind Exp $ */ #include "opt_comconsole.h" @@ -310,6 +310,7 @@ static int sioattach __P((struct isa_device *dev)); static timeout_t siobusycheck; static timeout_t siodtrwakeup; static void comhardclose __P((struct com_s *com)); +static ointhand2_t siointr; static void siointr1 __P((struct com_s *com)); static int commctl __P((struct com_s *com, int bits, int how)); static int comparam __P((struct tty *tp, struct termios *t)); @@ -881,6 +882,7 @@ sioattach(isdp) int s; int unit; + isdp->id_ointr = siointr; isdp->id_ri_flags |= RI_FAST; iobase = isdp->id_iobase; unit = isdp->id_unit; @@ -1469,7 +1471,7 @@ siodtrwakeup(chan) wakeup(&com->dtr_wait); } -void +static void siointr(unit) int unit; { diff --git a/sys/i386/isa/snd/sound.c b/sys/i386/isa/snd/sound.c index ef724cd..58b4b08 100644 --- a/sys/i386/isa/snd/sound.c +++ b/sys/i386/isa/snd/sound.c @@ -241,6 +241,8 @@ pcmattach(struct isa_device * dev) dev_t isadev; void *cookie; + dev->id_ointr = pcmintr; + if ( (dev->id_unit >= NPCM_MAX) || /* too many devs */ (snddev_last_probed == NULL) || /* last probe failed */ (snddev_last_probed->attach==NULL) ) /* no attach routine */ diff --git a/sys/i386/isa/snd/sound.h b/sys/i386/isa/snd/sound.h index eea64c6..e6d1eb9 100644 --- a/sys/i386/isa/snd/sound.h +++ b/sys/i386/isa/snd/sound.h @@ -434,6 +434,8 @@ int pcmattach(struct isa_device * dev); int midiattach(struct isa_device * dev); int synthattach(struct isa_device * dev); +ointhand2_t pcmintr; + /* * DMA buffer calls */ diff --git a/sys/i386/isa/sound/sound_calls.h b/sys/i386/isa/sound/sound_calls.h index 62d9548..cb00e30 100644 --- a/sys/i386/isa/sound/sound_calls.h +++ b/sys/i386/isa/sound/sound_calls.h @@ -99,6 +99,7 @@ int sb_dsp_detect (struct address_info *hw_config); void sb_dsp_init (struct address_info *hw_config); void sb_dsp_disable_midi(void); int sb_dsp_command (u_char val); +ointhand2_t sbintr; int sb_reset_dsp (void); /* From sb16_dsp.c */ @@ -140,6 +141,7 @@ int probe_adlib(struct address_info *hw_config); /* From pas_card.c */ void attach_pas_card(struct address_info *hw_config); int probe_pas(struct address_info *hw_config); +ointhand2_t pasintr; int pas_set_intr(int mask); int pas_remove_intr(int mask); u_char pas_read(int ioaddr); @@ -160,7 +162,7 @@ void pas_midi_interrupt(void); void attach_gus_card(struct address_info * hw_config); int probe_gus(struct address_info *hw_config); int gus_set_midi_irq(int num); -/*void gusintr(int irq); */ +ointhand2_t gusintr; void attach_gus_db16(struct address_info * hw_config); int probe_gus_db16(struct address_info *hw_config); @@ -186,6 +188,7 @@ void mpuintr(int irq); /* From uart6850.c */ void attach_uart6850(struct address_info * hw_config); +ointhand2_t m6850intr; int probe_uart6850(struct address_info *hw_config); /* From opl3.c */ @@ -209,6 +212,7 @@ void sound_timer_syncinterval(u_int new_usecs); /* From ad1848.c */ void ad1848_init (char *name, int io_base, int irq, int dma_playback, int dma_capture, int share_dma, sound_os_info *osp); +ointhand2_t adintr; int ad1848_detect (int io_base, int *flags, sound_os_info *osp); #define AD_F_CS4231 0x0001 /* Returned if a CS4232 (or compatible) detected */ @@ -233,6 +237,7 @@ int probe_sscape (struct address_info *hw_config); void attach_sscape (struct address_info *hw_config); int probe_ss_mss(struct address_info *hw_config); void attach_ss_mss(struct address_info * hw_config); +ointhand2_t sscapeintr; int pss_read (int dev, struct fileinfo *file, snd_rw_buf *buf, int count); int pss_write (int dev, struct fileinfo *file, snd_rw_buf *buf, int count); diff --git a/sys/i386/isa/sound/soundcard.c b/sys/i386/isa/sound/soundcard.c index 52428b4..43649c0 100644 --- a/sys/i386/isa/sound/soundcard.c +++ b/sys/i386/isa/sound/soundcard.c @@ -130,6 +130,8 @@ struct isa_driver sscape_mssdriver = {sndprobe, sndattach, "sscape_mss"}; short ipri_to_irq(u_short ipri); +static ointhand2_t sndintr; + u_long get_time(void) { @@ -396,8 +398,27 @@ sndattach(struct isa_device * dev) static int midi_initialized = 0; static int seq_initialized = 0; struct address_info hw_config; + char *dname; void *tmp; - + + /* XXX this is probably incomplete. */ + dname = dev->id_driver->name; + if (strcmp(dname, "css") == 0 || strcmp(dname, "gusxvi") == 0 || + strcmp(dname, "mss") == 0) + dev->id_ointr = adintr; + if (strcmp(dname, "gus") == 0) + dev->id_ointr = gusintr; + if (strcmp(dname, "pas") == 0) + dev->id_ointr = pasintr; + if (strcmp(dname, "sb") == 0) + dev->id_ointr = sbintr; + if (strcmp(dname, "sscape_mss") == 0) + dev->id_ointr = sndintr; + if (strcmp(dname, "sscape") == 0 || strcmp(dname, "trix") == 0) + dev->id_ointr = sscapeintr; + if (strcmp(dname, "uart0") == 0) + dev->id_ointr = m6850intr; + unit = driver_to_voxunit(dev->id_driver); hw_config.io_base = dev->id_iobase; hw_config.irq = ipri_to_irq(dev->id_irq); @@ -576,7 +597,7 @@ snd_set_irq_handler(int int_lvl, void (*hndlr) (int), sound_os_info * osp) return 1; } -void +static void sndintr(int unit) { if ( (unit >= MAX_UNIT) || (irq_proc[unit] == NULL) ) diff --git a/sys/i386/isa/spigot.c b/sys/i386/isa/spigot.c index 50aebba..2f7c4ab 100644 --- a/sys/i386/isa/spigot.c +++ b/sys/i386/isa/spigot.c @@ -107,6 +107,8 @@ static struct cdevsw spigot_cdevsw = spigot_ioctl, nostop, nullreset, nodevtotty,/* Spigot */ seltrue, spigot_mmap, NULL, "spigot", NULL, -1 }; +static ointhand2_t spigintr; + static int spigot_probe(struct isa_device *devp) { @@ -133,6 +135,7 @@ spigot_attach(struct isa_device *devp) int unit; struct spigot_softc *ss= &spigot_softc[unit = devp->id_unit]; + devp->id_ointr = spigintr; ss->maddr = kvtop(devp->id_maddr); ss->irq = devp->id_irq; #ifdef DEVFS @@ -246,7 +249,7 @@ struct spigot_info *info; * Interrupt procedure. * Just call a user level interrupt routine. */ -void +static void spigintr(int unit) { struct spigot_softc *ss = (struct spigot_softc *)&spigot_softc[unit]; diff --git a/sys/i386/isa/stallion.c b/sys/i386/isa/stallion.c index f85ae2e..3fde903 100644 --- a/sys/i386/isa/stallion.c +++ b/sys/i386/isa/stallion.c @@ -33,7 +33,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: stallion.c,v 1.21 1998/08/23 08:26:41 bde Exp $ + * $Id: stallion.c,v 1.22 1998/08/23 09:57:09 bde Exp $ */ /*****************************************************************************/ @@ -467,6 +467,7 @@ static int stl_brdinit(stlbrd_t *brdp); static int stl_initeio(stlbrd_t *brdp); static int stl_initech(stlbrd_t *brdp); static int stl_initports(stlbrd_t *brdp, stlpanel_t *panelp); +static ointhand2_t stlintr; static __inline void stl_txisr(stlpanel_t *panelp, int ioaddr); static __inline void stl_rxisr(stlpanel_t *panelp, int ioaddr); static __inline void stl_mdmisr(stlpanel_t *panelp, int ioaddr); @@ -634,6 +635,8 @@ static int stlattach(struct isa_device *idp) idp->id_unit, idp->id_iobase); #endif + idp->id_ointr = stlintr; + brdp = (stlbrd_t *) malloc(sizeof(stlbrd_t), M_TTYS, M_NOWAIT); if (brdp == (stlbrd_t *) NULL) { printf("STALLION: failed to allocate memory (size=%d)\n", @@ -1758,7 +1761,7 @@ static __inline void stl_mdmisr(stlpanel_t *panelp, int ioaddr) * io register. */ -void stlintr(int unit) +static void stlintr(int unit) { stlbrd_t *brdp; stlpanel_t *panelp; diff --git a/sys/i386/isa/syscons.c b/sys/i386/isa/syscons.c index eba0d36..caf072a 100644 --- a/sys/i386/isa/syscons.c +++ b/sys/i386/isa/syscons.c @@ -25,7 +25,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $Id: syscons.c,v 1.283 1998/10/01 11:39:18 yokota Exp $ + * $Id: syscons.c,v 1.284 1998/10/01 21:04:52 ache Exp $ */ #include "sc.h" @@ -239,6 +239,7 @@ static const int nsccons = MAXCONS+2; /* prototypes */ static int scattach(struct isa_device *dev); +static ointhand2_t scintr; static int scparam(struct tty *tp, struct termios *t); static int scprobe(struct isa_device *dev); static int scvidprobe(int unit, int flags); @@ -645,6 +646,7 @@ scattach(struct isa_device *dev) int vc; #endif + dev->id_ointr = scintr; scinit(); sc_flags = dev->id_flags; if (!ISFONTAVAIL(adp_flags)) @@ -851,7 +853,7 @@ scwrite(dev_t dev, struct uio *uio, int flag) return((*linesw[tp->t_line].l_write)(tp, uio, flag)); } -void +static void scintr(int unit) { static struct tty *cur_tty; diff --git a/sys/i386/isa/tw.c b/sys/i386/isa/tw.c index 5c2a661..07d4023 100644 --- a/sys/i386/isa/tw.c +++ b/sys/i386/isa/tw.c @@ -274,6 +274,7 @@ static void twdelayn(int n); static void twsetuptimes(int *a); static int wait_for_zero(struct tw_sc *sc); static int twputpkt(struct tw_sc *sc, u_char *p); +static ointhand2_t twintr; static int twgetbytes(struct tw_sc *sc, u_char *p, int cnt); static timeout_t twabortrcv; static int twsend(struct tw_sc *sc, int h, int k, int cnt); @@ -391,6 +392,7 @@ static int twattach(idp) struct tw_sc *sc; int unit; + idp->id_ointr = twintr; sc = &tw_sc[unit = idp->id_unit]; sc->sc_port = idp->id_iobase; sc->sc_state = 0; @@ -918,7 +920,7 @@ tw_is_within(int value, int expected, int tolerance) * reconstruct the transmission without having to poll. */ -void twintr(unit) +static void twintr(unit) int unit; { struct tw_sc *sc = &tw_sc[unit]; diff --git a/sys/i386/isa/ultra14f.c b/sys/i386/isa/ultra14f.c index 8d01bef..1687811 100644 --- a/sys/i386/isa/ultra14f.c +++ b/sys/i386/isa/ultra14f.c @@ -22,7 +22,7 @@ * today: Fri Jun 2 17:21:03 EST 1994 * added 24F support ++sg * - * $Id: ultra14f.c,v 1.60 1998/06/08 09:47:37 bde Exp $ + * $Id: ultra14f.c,v 1.61 1998/06/21 15:49:39 bde Exp $ */ #ifdef KERNEL /* don't laugh.. this compiles to a program too.. look */ @@ -271,6 +271,8 @@ static struct mscp * uha_get_mscp __P((struct uha_data *uha, int flags)); static int uha_init __P((struct uha_data *uha)); static int uha24_init __P((struct uha_data *uha)); +static ointhand2_t + uhaintr; static void uhaminphys __P((struct buf *bp)); static struct mscp * uha_mscp_phys_kv __P((struct uha_data *uha, long mscp_phys)); @@ -520,6 +522,8 @@ uha_attach(dev) struct uha_data *uha = uhadata[unit]; struct scsibus_data *scbus; + dev->id_ointr = uhaintr; + /* * fill in the prototype scsi_link. */ @@ -561,7 +565,7 @@ uha_adapter_info(unit) /* * Catch an interrupt from the adaptor */ -void +static void uhaintr(unit) int unit; { diff --git a/sys/i386/isa/wd.c b/sys/i386/isa/wd.c index 6a5f730..5c17abf 100644 --- a/sys/i386/isa/wd.c +++ b/sys/i386/isa/wd.c @@ -34,7 +34,7 @@ * SUCH DAMAGE. * * from: @(#)wd.c 7.2 (Berkeley) 5/9/91 - * $Id: wd.c,v 1.176 1998/09/15 08:15:30 gibbs Exp $ + * $Id: wd.c,v 1.177 1998/10/13 08:24:39 dg Exp $ */ /* TODO: @@ -422,6 +422,8 @@ wdattach(struct isa_device *dvp) struct disk *du; struct wdparams *wp; + dvp->id_ointr = wdintr; + if (dvp->id_unit >= NWDC) return (0); diff --git a/sys/i386/isa/wd7000.c b/sys/i386/isa/wd7000.c index 5722aee..3da995f 100644 --- a/sys/i386/isa/wd7000.c +++ b/sys/i386/isa/wd7000.c @@ -210,6 +210,7 @@ static void wds_minphys(struct buf *); static struct wds_req *wdsr_alloc(int); static int32_t wds_scsi_cmd(struct scsi_xfer *); static u_int32_t wds_adapter_info(int); +static ointhand2_t wdsintr; static int wds_done(int, struct wds_cmd *, u_char); static int wdsattach(struct isa_device *); static int wds_init(struct isa_device *); @@ -420,7 +421,7 @@ wds_adapter_info(int unit) return 1; } -void +static void wdsintr(int unit) { struct wds_cmd *pc, *vc; @@ -589,6 +590,7 @@ wdsattach(struct isa_device *dev) int unit = dev->id_unit; struct scsibus_data *scbus; + dev->id_ointr = wdsintr; masunit = dev->id_unit; if( !(versprobe & (1<id_unit; + id->id_ointr = wtintr; if (t->type == ARCHIVE) { printf ("wt%d: type \n", t->unit); outb (t->RDMAPORT, 0); /* reset dma */ @@ -603,7 +605,7 @@ xit: biodone (bp); /* * Interrupt routine. */ -void +static void wtintr (int u) { wtinfo_t *t = wttab + u; -- cgit v1.1