void ralink_com_early(int silent) { struct com_regs regs; uint32_t r; int error; /* reset */ r = sysctl_read(RA_SYSCTL_RST); r |= RST_UARTL; sysctl_write(RA_SYSCTL_RST, r); r ^= RST_UARTL; sysctl_write(RA_SYSCTL_RST, r); if (silent) { /* * put us in PIO mode, * effectively tri-stating the UARTL block */ r = sysctl_read(RA_SYSCTL_GPIOMODE); r |= GPIOMODE_UARTL; sysctl_write(RA_SYSCTL_GPIOMODE, r); } else { /* make sure we are in UART mode */ r = sysctl_read(RA_SYSCTL_GPIOMODE); r &= ~GPIOMODE_UARTL; sysctl_write(RA_SYSCTL_GPIOMODE, r); } uart_write(RA_UART_IER, 0); /* disable interrupts */ uart_write(RA_UART_FCR, 0); /* disable fifos */ /* set baud rate */ uart_write(RA_UART_LCR, UART_LCR_WLS0 | UART_LCR_WLS1 | UART_LCR_DLAB); uart_write(RA_UART_DLL, (RA_UART_FREQ / RA_SERIAL_CLKDIV / RA_BAUDRATE) & 0xffff); uart_write(RA_UART_LCR, UART_LCR_WLS0 | UART_LCR_WLS1); regs.cr_iot = &ra_bus_memt; regs.cr_iobase = RA_UART_LITE_BASE; regs.cr_nports = 0x1000; ralink_com_initmap(®s); if ((error = bus_space_map(regs.cr_iot, regs.cr_iobase, regs.cr_nports, 0, ®s.cr_ioh)) != 0) { return; } /* Ralink UART has a 16-bit rate latch (like the AU1x00) */ comcnattach1(®s, RA_BAUDRATE, RA_UART_FREQ, COM_TYPE_AU1x00, CONMODE); }
void hd64461uartcninit(struct consdev *cp) { struct com_regs regs; hd64461uart_init(); HD64461UART_INIT_REGS(regs, hd64461uart_chip.io_tag, 0x0, 0x0); comcnattach1(®s, COMCN_SPEED, COM_FREQ, COM_TYPE_NORMAL, CONMODE); hd64461uart_chip.console = 1; /* Don't stop to suply AFECK */ if (platid_match(&platid, &platid_mask_MACH_HITACHI_PERSONA)) use_afeck = 1; }
int eumbcnattach(bus_space_tag_t tag, int conaddr, int conspeed, int confreq, int contype, int conmode) { static int attached = 0; if (attached) return 0; attached = 1; cnregs.cr_iot = tag; cnregs.cr_iobase = conaddr; cnregs.cr_nports = COM_NPORTS; /* cnregs.ioh is initialized by comcnattach */ return comcnattach1(&cnregs, conspeed, confreq, contype, conmode); }
void com_arbus_cnattach(bus_addr_t addr, uint32_t freq) { struct com_regs regs; regs.cr_iot = arbus_get_bus_space_tag(); regs.cr_iobase = addr; regs.cr_nports = 0x1000; com_arbus_initmap(®s); if (bus_space_map(regs.cr_iot, regs.cr_iobase, regs.cr_nports, 0, ®s.cr_ioh)) return; comcnattach1(®s, com_arbus_baud, freq, COM_TYPE_NORMAL, CONMODE); }