Date: Thu, 4 Aug 2005 11:21:29 +0400 (MSD) From: "Felix-KM" <Felix-KM@yandex.ru> To: freebsd-hackers@freebsd.org Subject: (no subject) Message-ID: <42F1C1F9.000001.17496@ariel.yandex.ru>
next in thread | raw e-mail | index | archive | help
Hello.
Help me please to understand how the function bus_teardown_intr() works.
I have a device driver containing following code:
#define DEVICE2SOFTC(device) ((struct dev_softc *)device_get_softc(device))
static void dev_intr(void *arg);
struct dev_softc {
...
int rid_irq;
struct resource* res_irq;
void *intr_cookie;
...
};
static int
dev_attach(device_t device)
{
...
dev_sc->rid_irq = 0;
dev_sc->res_irq = bus_alloc_resource_any(device, SYS_RES_IRQ,
&(dev_sc->rid_irq), RF_SHAREABLE|RF_ACTIVE);
if (dev_sc->res_irq == NULL)
{
uprintf("!!! Could not map interrupt !!!\n");
goto fail;
}
if (bus_setup_intr(device, dev_sc->res_irq, INTR_TYPE_TTY,
dev_intr, dev_sc, &dev_sc->intr_cookie))
{
uprintf("!!! Could not setup irq !!!\n");
goto fail;
}
...
fail:
return ENXIO;
}
static int
dev_detach(device_t device)
{
struct dev_softc *dev_sc = DEVICE2SOFTC(device);
destroy_dev(dev_sc->device);
if (bus_teardown_intr(device, dev_sc->res_irq, dev_sc->intr_cookie) != 0);
printf("bus_teardown_intr ERROR !!!\n");
bus_release_resource(device, SYS_RES_IRQ, dev_sc->rid_irq,
dev_sc->res_irq);
...
return 0;
}
static void
dev_intr(void *arg)
{
struct dev_softc *dev_sc = (struct dev_softc *)arg;
...
}
When the driver is loaded the following message is shown:
dev0 port 0x9800-0x980f,0x9400-0x947f irq 16 at device 10.0 on pci1
i.e., as I understand, resourses are allocated normally.
But when the driver is being unloaded the following message appear:
bus_teardown_intr ERROR !!!
What have I done wrong? Hint me please how to use bus_teardown_intr()
function correctly?
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?42F1C1F9.000001.17496>
