int pcccan_irq=-1;
unsigned long pcccan_base=0x0;
+static can_spinlock_t pcccan_port_lock=SPIN_LOCK_UNLOCKED;
+
/*
* IO_RANGE is the io-memory range that gets reserved, please adjust according
* your hardware. Example: #define IO_RANGE 0x100 for i82527 chips or
int pcccan_init_obj_data(struct chip_t *chip, int objnr)
{
chip->msgobj[objnr]->obj_base_addr=(objnr+1)*0x10;
- chip->msgobj[objnr]->flags=0;
return 0;
}
*/
void pcccan_write_register(unsigned char data, unsigned long address)
{
- disable_irq(pcccan_irq);
+ can_spin_irqflags_t flags;
+ can_spin_lock_irqsave(&pcccan_port_lock,flags);
outb(address - pcccan_base, pcccan_base+1);
outb(data, pcccan_base+6);
- enable_irq(pcccan_irq);
+ can_spin_unlock_irqrestore(&pcccan_port_lock,flags);
}
/**
unsigned pcccan_read_register(unsigned long address)
{
unsigned ret;
- disable_irq(pcccan_irq);
+ can_spin_irqflags_t flags;
+ can_spin_lock_irqsave(&pcccan_port_lock,flags);
outb(address - pcccan_base, pcccan_base+1);
ret=inb(pcccan_base+2);
- enable_irq(pcccan_irq);
+ can_spin_unlock_irqrestore(&pcccan_port_lock,flags);
return ret;
}