void pre_init(void) { morecore_area = core_buf; morecore_size = SERVER_CORE_SIZE; serial_lock(); // Initialize the serial port set_dlab(0); // we always assume the dlab is 0 unless we explicitly change it disable_interrupt(); disable_fifo(); reset_lcr(); reset_mcr(); clear_iir(); set_baud_rate(BAUD_RATE); reset_state(); enable_fifo(); enable_interrupt(); clear_iir(); // all done init_colours(); /* query what getchar clients exist */ num_getchar_clients = getchar_num_badges(); getchar_clients = calloc(num_getchar_clients, sizeof(getchar_client_t)); for (int i = 0; i < num_getchar_clients; i++) { unsigned int badge = getchar_enumerate_badge(i); assert(badge <= num_getchar_clients); getchar_clients[badge].client_id = badge; getchar_clients[badge].buf = getchar_buf(badge); getchar_clients[badge].last_head = -1; } set_putchar(serial_putchar); serial_irq_reg_callback(serial_irq, 0); /* Start regular heartbeat of 500ms */ timeout_periodic(0, 500000000); serial_unlock(); }
serial::err serial_port_x86::open(void) { disable_interrupt_mode(); set_baud_rate(m_baud); set_parity_mode(m_parity); set_data_size(m_data_size); set_stop_bits(m_stop_bits); enable_fifo(); enable_interrupt_mode(m_interrupt_mode); return serial::success; }
void serial_init(gdb_state_t *gdb) { // Initialize the serial port int UNUSED error; error = serial_lock(); gdb_state = gdb; set_dlab(0); // we always assume the dlab is 0 unless we explicitly change it disable_interrupt(); disable_fifo(); reset_lcr(); reset_mcr(); clear_iir(); set_baud_rate(BAUD_RATE); reset_state(); enable_fifo(); enable_interrupt(); clear_iir(); initialise_buffer(); error = serial_unlock(); }
struct port *__libnet_internal__serial_open(int portnum) { struct port *p; int uart, baudrate, cfg; if ((portnum < 0) || (portnum >= MAX_PORT)) return NULL; p = port_table[portnum]; memset(p, 0, sizeof *p); if (config[portnum].baseaddr == -1) { dosmemget(0x400 + portnum * 2, 2, &p->baseaddr); if (p->baseaddr == 0) p->baseaddr = fallback_baseaddr[portnum]; } else { p->baseaddr = config[portnum].baseaddr; } uart = detect_uart(p->baseaddr); if (!uart) return NULL; if (uart == UART_16550A) enable_fifo(p); else disable_fifo(p); install_isr(portnum, p, config[portnum].irq); set_config(p->baseaddr, config[portnum].baudrate, (config[portnum].bits | config[portnum].parity | config[portnum].stopbits)); return p; }