71,8 → 71,6 |
BYTE b; |
unsigned i; |
|
cprintf("(IRQ:%d)",no); |
|
for(i=0;i<4;i++) |
if (com_irq[i] == no) break; |
|
79,7 → 77,7 |
b = DECODE(com_read(i, IIR)); |
|
switch (b) |
{ |
{ |
case LS_CHANGED: |
LSR_handler(i); |
break; |
97,7 → 95,7 |
void com_irq_enable(unsigned port, unsigned irq) |
{ |
SYS_FLAGS f; |
|
|
f = kern_fsave(); |
|
com_read(port, LSR); |
171,12 → 169,8 |
{ |
SYS_FLAGS f; |
|
cprintf("(SEND:COM%d:%d)",port,len); |
|
f = kern_fsave(); |
|
com_irq_disable(port, ALL_IRQ); /* Disable interrupts */ |
|
/* Transmit first byte of message */ |
SCom_TX_data.ptr = 0; |
SCom_TX_data.len = len; |
183,7 → 177,7 |
if (len < 100) { |
memcpy(SCom_TX_data.buf, m, len); |
com_write(port, THR, SCom_TX_data.buf[SCom_TX_data.ptr++]); |
com_irq_enable(port, THRE_IRQ); /* Enable THRE */ |
com_irq_enable(port, THRE_IRQ); |
} |
|
kern_frestore(f); |
210,7 → 204,8 |
|
void RBRF_handler (unsigned port) /* Receive Data Register Full */ |
{ |
SCom_Access.indication(port, com_read(port, RBR)); |
while ((com_read(port,LSR) & 1) != 0) |
SCom_Access.indication(port, com_read(port, RBR)); |
} |
|
void LSR_handler (unsigned port) /* break = 8, frame = 4, parity = 2, RBR overrun = 1*/ |