void kbdenable(int mode) /* 1: interrupt, 0: poll */ { intio_set_sysport_keyctrl(8); mfp_bit_clear_iera(MFP_INTR_RCV_FULL | MFP_INTR_TIMER_B); mfp_set_tbcr(MFP_TIMERB_RESET | MFP_TIMERB_STOP); mfp_set_tbdr(13); /* Timer B interrupt interval */ mfp_set_tbcr(1); /* 1/4 delay mode */ mfp_set_ucr(MFP_UCR_CLKX16 | MFP_UCR_RW_8 | MFP_UCR_ONESB); mfp_set_rsr(MFP_RSR_RE); /* USART receive enable */ mfp_set_tsr(MFP_TSR_TE); /* USART transmit enable */ if (mode) { mfp_bit_set_iera(MFP_INTR_RCV_FULL); /* * Perform null read in case that an input byte is in the * receiver buffer, which prevents further interrupts. * We could save the input, but probably not so valuable. */ (void) mfp_get_udr(); } kbdled = 0; /* all keyboard LED turn off. */ kbd_setLED(); if (!(intio_get_sysport_keyctrl() & 8)) aprint_normal(" (no connected keyboard)"); }
static void mfp_init(void) { mfp_set_vr(MFP_INTR); /* stop all interrupts */ mfp_set_iera(0); mfp_set_ierb(0); /* make MSCTRL 'High', XXX where should I do it? */ mfp_send_usart(0x41); /* Timer A settings */ mfp_set_tacr(MFP_TIMERA_RESET | MFP_TIMERA_STOP); /* Timer B settings: used for USART clock */ mfp_set_tbcr(MFP_TIMERB_RESET | MFP_TIMERB_STOP); /* Timer C/D settings */ mfp_set_tcdcr(0); }