]> rtime.felk.cvut.cz Git - lincan.git/blobdiff - lincan/src/nsi.c
Structured comments updated.
[lincan.git] / lincan / src / nsi.c
index 9f6bdefd46b61caea13c6804e278c098106fd8af..03ba230bc761348d3785eef043e07f5ddbeecc70 100644 (file)
@@ -16,6 +16,8 @@
 int nsican_irq=-1;
 unsigned long nsican_base=0x0;
 
+static can_spinlock_t nsican_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
  * #define IO_RANGE 0x20 for sja1000 chips.
@@ -190,13 +192,14 @@ unsigned nsi_read_register(unsigned long address)
        We use the two register, we write the address where we 
        want to read in a first time. In a second time we read the
        data */
-    unsigned char ret;
+       unsigned char ret;
+       can_spin_irqflags_t flags;
     
-    can_disable_irq(nsican_irq); 
-    outb(address-nsican_base, nsican_base);
-    ret=inb(nsican_base+1);
-    can_enable_irq(nsican_irq); 
-    return ret;
+       can_spin_lock_irqsave(&nsican_port_lock,flags);
+       outb(address-nsican_base, nsican_base);
+       ret=inb(nsican_base+1);
+       can_spin_unlock_irqrestore(&nsican_port_lock,flags);
+       return ret;
 }