#define uartwrreg(u,r,v) outb((u)->port + (r), (u)->sticky[r] | (v)) #define uartrdreg(u,r) inb((u)->port + (r)) #define uartpower(x, y) void ns16552setup(ulong, ulong, char*, int); void ns16552intr(int); void uartclock(void); /* * handle an interrupt to a single uart */ static void ns16552intrx(Ureg*, void* arg) { ns16552intr((ulong)arg); } void ns16552install(void) { static int already; if(already) return; already = 1; ns16552setup(Uart0, UartFREQ, "eia0", Ns550); intrenable(VectorUART0, ns16552intrx, (void*)0, BUSUNKNOWN); ns16552setup(Uart1, UartFREQ, "eia1", Ns550); intrenable(VectorUART1, ns16552intrx, (void*)0, BUSUNKNOWN); addclock0link(uartclock); } #define RD(r) inb(Uart0+(r)) static void ns16552iputc(char c) { mb(); while((RD(5) & (1<<5)) == 0) mb(); outb(Uart0, c); mb(); while((RD(5) & (1<<5)) == 0) mb(); }