static void comc_setup(int speed) { OUTB(com_cfcr, CFCR_DLAB | g_com_port.comc_fmt); OUTB(com_dlbl, COMC_BPS(speed) & 0xff); OUTB(com_dlbh, COMC_BPS(speed) >> 8); OUTB(com_cfcr, g_com_port.comc_fmt); OUTB(com_mcr, MCR_RTS | MCR_DTR); for ( int wait = COMC_TXWAIT; wait > 0; wait-- ) { INB(com_data); if ( !(INB(com_lsr) & LSR_RXRDY) ) break; } }
static void comc_setup(int speed) { comc_curspeed = speed; outb(COMPORT + com_cfcr, CFCR_DLAB | COMC_FMT); outb(COMPORT + com_dlbl, COMC_BPS(speed) & 0xff); outb(COMPORT + com_dlbh, COMC_BPS(speed) >> 8); outb(COMPORT + com_cfcr, COMC_FMT); outb(COMPORT + com_mcr, MCR_RTS | MCR_DTR); do inb(COMPORT + com_data); while (inb(COMPORT + com_lsr) & LSR_RXRDY); }
static int comc_init(int arg) { if (comc_started && arg == 0) return 0; comc_started = 1; outb(COMPORT + com_cfcr, CFCR_DLAB | COMC_FMT); outb(COMPORT + com_dlbl, COMC_BPS(COMSPEED) & 0xff); outb(COMPORT + com_dlbh, COMC_BPS(COMSPEED) >> 8); outb(COMPORT + com_cfcr, COMC_FMT); outb(COMPORT + com_mcr, MCR_RTS | MCR_DTR); do inb(COMPORT + com_data); while (inb(COMPORT + com_lsr) & LSR_RXRDY); return(0); }