Required to prepare space for solution of problem with multiple VME Unican
cards used with RT-Linux enabled LinCAN driver.
/**
* canque_edge_incref - increments edge reference count
/**
* canque_edge_incref - increments edge reference count
- * @qedg: pointer to the edge structure
+ * @edge: pointer to the edge structure
*/
static inline
void canque_edge_incref(struct canque_edge_t *edge)
*/
static inline
void canque_edge_incref(struct canque_edge_t *edge)
#ifndef CAN_HAVE_ARCH_CMPXCHG
/**
* canque_edge_decref - decrements edge reference count
#ifndef CAN_HAVE_ARCH_CMPXCHG
/**
* canque_edge_decref - decrements edge reference count
- * @qedg: pointer to the edge structure
+ * @edge: pointer to the edge structure
*
* This function has to be called without lock held for both ends of edge.
* If reference count drops to 0, function canque_edge_do_dead()
*
* This function has to be called without lock held for both ends of edge.
* If reference count drops to 0, function canque_edge_do_dead()
* @start_chip: starts chip message processing
* @stop_chip: stops chip message processing
* @irq_handler: interrupt service routine
* @start_chip: starts chip message processing
* @stop_chip: stops chip message processing
* @irq_handler: interrupt service routine
+ * @irq_accept: optional fast irq accept routine responsible for blocking further interrupts
*/
struct chipspecops_t {
int (*chip_config)(struct canchip_t *chip);
*/
struct chipspecops_t {
int (*chip_config)(struct canchip_t *chip);
int (*start_chip)(struct canchip_t *chip);
int (*stop_chip)(struct canchip_t *chip);
int (*irq_handler)(int irq, struct canchip_t *chip);
int (*start_chip)(struct canchip_t *chip);
int (*stop_chip)(struct canchip_t *chip);
int (*irq_handler)(int irq, struct canchip_t *chip);
+ int (*irq_accept)(int irq, struct canchip_t *chip);
chipspecops->start_chip=c_can_start_chip;
chipspecops->stop_chip=c_can_stop_chip;
chipspecops->irq_handler=c_can_irq_handler;
chipspecops->start_chip=c_can_start_chip;
chipspecops->stop_chip=c_can_stop_chip;
chipspecops->irq_handler=c_can_irq_handler;
+ chipspecops->irq_accept = NULL;
chipspecops->start_chip = i82527_start_chip;
chipspecops->stop_chip = i82527_stop_chip;
chipspecops->irq_handler = i82527_irq_handler;
chipspecops->start_chip = i82527_start_chip;
chipspecops->stop_chip = i82527_stop_chip;
chipspecops->irq_handler = i82527_irq_handler;
+ chipspecops->irq_accept = NULL;
+/**
+ * can_default_irq_dispatch - the first level interrupt dispatch handler
+ * @irq: interrupt vector number, this value is system specific
+ * @dev_id: driver private pointer registered at time of request_irq() call.
+ * The CAN driver uses this pointer to store relationship of interrupt
+ * to chip state structure - @struct canchip_t
+ * @regs: system dependent value pointing to registers stored in exception frame
+ *
+ * File: src/setup.c
+ */
can_irqreturn_t can_default_irq_dispatch(int irq, void *dev_id, struct pt_regs *regs)
{
int retval;
can_irqreturn_t can_default_irq_dispatch(int irq, void *dev_id, struct pt_regs *regs)
{
int retval;
chipspecops->start_chip = sja1000_start_chip;
chipspecops->stop_chip = sja1000_stop_chip;
chipspecops->irq_handler = sja1000_irq_handler;
chipspecops->start_chip = sja1000_start_chip;
chipspecops->stop_chip = sja1000_stop_chip;
chipspecops->irq_handler = sja1000_irq_handler;
+ chipspecops->irq_handler = NULL;
/**
* sja1000p_irq_handler: - interrupt service routine
* @irq: interrupt vector number, this value is system specific
/**
* sja1000p_irq_handler: - interrupt service routine
* @irq: interrupt vector number, this value is system specific
- * @dev_id: driver private pointer registered at time of request_irq() call.
- * The CAN driver uses this pointer to store relationship of interrupt
- * to chip state structure - @struct canchip_t
- * @regs: system dependent value pointing to registers stored in exception frame
+ * @chip: pointer to chip state structure
*
* Interrupt handler is activated when state of CAN controller chip changes,
* there is message to be read or there is more space for new messages or
*
* Interrupt handler is activated when state of CAN controller chip changes,
* there is message to be read or there is more space for new messages or
chipspecops->start_chip=sja1000p_start_chip;
chipspecops->stop_chip=sja1000p_stop_chip;
chipspecops->irq_handler=sja1000p_irq_handler;
chipspecops->start_chip=sja1000p_start_chip;
chipspecops->stop_chip=sja1000p_stop_chip;
chipspecops->irq_handler=sja1000p_irq_handler;
+ chipspecops->irq_accept=NULL;
chip->chipspecops->start_chip=unican_start_chip;
chip->chipspecops->stop_chip=unican_stop_chip;
chip->chipspecops->irq_handler=unican_irq_handler;
chip->chipspecops->start_chip=unican_start_chip;
chip->chipspecops->stop_chip=unican_stop_chip;
chip->chipspecops->irq_handler=unican_irq_handler;
+ chip->chipspecops->irq_accept=NULL;
unican_init_chip_data(candev, chipnr);
chip->flags |= CHIP_IRQ_VME;
unican_init_chip_data(candev, chipnr);
chip->flags |= CHIP_IRQ_VME;
- chip->chipspecops->irq_handler=unican_irq_handler;
+ /*chip->chipspecops->irq_handler=unican_irq_handler;*/
chip->chipspecops->start_chip=virtual_start_chip;
chip->chipspecops->stop_chip=virtual_stop_chip;
chip->chipspecops->irq_handler=NULL;
chip->chipspecops->start_chip=virtual_start_chip;
chip->chipspecops->stop_chip=virtual_stop_chip;
chip->chipspecops->irq_handler=NULL;
+ chip->chipspecops->irq_accept=NULL;