uint8_t serial_recv(uint8_t ch) { (void) ch; mutex_lock(&serial_lock); while(mmio_r32(UART_FR(UART0)) & (1 << 4)) ; register uint8_t t = (uint8_t) mmio_r32(UART_DR(UART0)); mutex_lock(&serial_lock); return t; }
void serial_send(uint8_t ch, uint8_t v) { (void) ch; mutex_lock(&serial_lock); while(mmio_r32(UART_FR(UART0)) & (1 << 5)) ; mmio_w32(UART_DR(UART0), v); mutex_unlock(&serial_lock); }
int lfb_init() { int i; uint32_t* p = (uint32_t*) &lfbio; for(i = 0; i < sizeof(lfbio); i += sizeof(uint32_t)) mmio_w32(LFBIO_BASE + i, *p++); mail_send(LFBIO_BASE, LFBIO_BOX); mail_recv(LFBIO_BOX); mbd->lfb.width = mmio_r32(LFBIO_BASE + 0); mbd->lfb.height = mmio_r32(LFBIO_BASE + 4); mbd->lfb.pitch = mmio_r32(LFBIO_BASE + 16); mbd->lfb.depth = mmio_r32(LFBIO_BASE + 20); mbd->lfb.base = mmio_r32(LFBIO_BASE + 32); mbd->lfb.size = mmio_r32(LFBIO_BASE + 36); #ifdef DEBUG memset((void*) mbd->lfb.base, 0xFF, mbd->lfb.size); #endif kprintf(LOG "lfb: %dx%dx%d at 0x%x\n", mbd->lfb.width, mbd->lfb.height, mbd->lfb.depth, mbd->lfb.base); return 0; }
long timer_getticks() { return mmio_r32(TIMER_BASE + TIMER_TICK); }