char *hwname; /* text board type */
int candev_idx; /* board index in canhardware_t.candevice[] */
unsigned long io_addr; /* IO/physical MEM address */
- unsigned long res_addr; /* optional seset register port */
+ unsigned long res_addr; /* optional reset register port */
unsigned long dev_base_addr; /* CPU translated IO/virtual MEM address */
unsigned int flags;
int nr_all_chips;
int nr_82527_chips;
int nr_sja1000_chips;
+ can_spinlock_t device_lock;
struct canchip_t *chip[MAX_HW_CHIPS];
struct hwspecops_t *hwspecops;
* @enable_configuration: enable chip configuration mode
* @disable_configuration: disable chip configuration mode
* @set_btregs: configures bitrate registers
+ * @attach_to_chip: attaches to the chip, setups registers and possibly state informations
+ * @release_chip: called before chip structure removal if %CHIP_ATTACHED is set
* @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);
int (*disable_configuration)(struct canchip_t *chip);
int (*set_btregs)(struct canchip_t *chip, unsigned short btr0,
unsigned short btr1);
+ int (*attach_to_chip)(struct canchip_t *chip);
+ int (*release_chip)(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);
};
struct mem_addr {