Date: Sat, 15 Nov 1997 19:10:05 +0100 (CET) From: J.Bredemeyer@tu-bs.de To: freebsd-hackers <freebsd-hackers@freebsd.org> Cc: Jochen Bredemeyer <dj5ba@amsat.org> Subject: LKM and interrupts: it works! Message-ID: <Pine.BSF.3.96.971115185200.3502B-100000@reb2.ivev.bau.tu-bs.de>
next in thread | raw e-mail | index | archive | help
Hello,
I recently posted a question concerning the usage of interrupts within
Loadable Kernel Modules (LKM).
After scanning several sources, especially "/sys/i386/isa/isa.c" and
its included files, I found a working solution - here is an extract of my
device driver:
-------------------------------------------------------------------------
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/conf.h>
#include <sys/kernel.h>
#include <i386/isa/isa.h>
#include <i386/isa/isa_device.h>
#include <i386/isa/icu.h>
#define _IRQ    IRQ12   /* Interrupt number */
[...]
/* not really necessary */
static struct isa_device dev =3D {0, &hexdriver, BASEADDR, 12, -1, (caddr_t)0,
                                  0,&hexintr, 0, 0, 0, 1, 0, 0, 1, 0, 0};
int hex_load (struct lkm_table *lkmtp, int cmd)
{
    if (!hexprobe(&dev))
    {
        uprintf ("Hexlink driver: probe failed\n");
        return 1;
    }
    /* register_intr() from "isa.c" */
    if(register_intr(ffs(_IRQ)-1,0,0,(inthand2_t *)hexintr,&tty_imask,0))
    {
        uprintf ("Hexlink driver: register_intr() failed\n");
        return 1;
    }
    INTREN(_IRQ);       /* Enable Interrupt, see "icu.h" */
    uprintf ("Hexlink driver loaded\n");
    hexattach(&dev);
    return 0;
}
int hex_unload (struct lkm_table *lkmtp, int cmd)
{
    INTRDIS(_IRQ); /* Disable IRQ */
    unregister_intr(ffs(_IRQ)-1,(inthand2_t *)hexintr); /* Release IRQ */
    uprintf ("Hexlink driver unloaded\n");
    return 0;
}
void hexintr (int unit)
{
    printf("\nInterrupt occured!\n");
}
[...]
-------------------------------------------------------------------------
I hope this helps!
Bye,
Jochen
DJ 5 BA
J.Bredemeyer@tu-bs.de
dj5ba@amsat.org
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.3.96.971115185200.3502B-100000>
