X-Git-Url: http://rtime.felk.cvut.cz/gitweb/lincan.git/blobdiff_plain/b0c3f8fe9cd795d00441487c690cf234065799b4..02003635287383cbe34c3da8107e9984ce4d894a:/lincan/src/setup.c diff --git a/lincan/src/setup.c b/lincan/src/setup.c index 564b3c0..394704c 100644 --- a/lincan/src/setup.c +++ b/lincan/src/setup.c @@ -14,6 +14,12 @@ #include "../include/setup.h" #include "../include/finish.h" +#ifdef CAN_ENABLE_VME_SUPPORT +#include "ca91c042.h" +/* Modified version of ca91c042 driver can be found in + * components/comm/contrib directory. */ +#endif + int init_hwspecops(struct candevice_t *candev, int *irqnum_p); int init_device_struct(int card, int *chan_param_idx_p, int *irq_param_idx_p); int init_chip_struct(struct candevice_t *candev, int chipnr, int irq, long baudrate); @@ -583,10 +589,15 @@ int can_chip_setup_irq(struct chip_t *chip) chip->flags |= CHIP_IRQ_SETUP; } } else { -#ifdef CAN_ENABLE_VME_SUPPORT - /* TODO: Move here the irq setup from - * unican_vme_request_io(). To do this, the VME bridge - * driver should be modified. */ +#ifdef CAN_ENABLE_VME_SUPPORT + if (chip->chip_irq < 1 || chip->chip_irq > 255) { + CANMSG("Bad irq parameter. (1 <= irq <= 255).\n"); + return -EINVAL; + } + + request_vmeirq(chip->chip_irq, chip->chipspecops->irq_handler, chip); + DEBUGMSG("Registered VME interrupt vector %d\n",chip->chip_irq); + chip->flags |= CHIP_IRQ_SETUP; #endif } return 1; @@ -604,9 +615,7 @@ void can_chip_free_irq(struct chip_t *chip) free_irq(chip->chip_irq, chip); else { #ifdef CAN_ENABLE_VME_SUPPORT - /* TODO: Move here the irq cleanup from - * unican_vme_release_io(). To do this, the VME bridge - * driver should be modified. */ + free_vmeirq(chip->chip_irq); #endif } chip->flags &= ~CHIP_IRQ_SETUP;