bus_teardown_intr()

Felix-KM Felix-KM at yandex.ru
Thu Aug 4 07:29:09 GMT 2005


Sorry, I forgot to indicate the theme.
>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?
>_______________________________________________
>freebsd-hackers at freebsd.org mailing list
>http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
>To unsubscribe, send any mail to "freebsd-hackers-unsubscribe at freebsd.org"


-- 
Яндекс.Лента - любимые блоги и новости на одном сайте http://lenta.yandex.ru/


More information about the freebsd-hackers mailing list