Esempio n. 1
0
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(&regs);

	if ((error = bus_space_map(regs.cr_iot, regs.cr_iobase, regs.cr_nports,
	    0, &regs.cr_ioh)) != 0) {
		return;
	}

	/* Ralink UART has a 16-bit rate latch (like the AU1x00) */
	comcnattach1(&regs, 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(&regs, 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;
}
Esempio n. 3
0
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(&regs);

	if (bus_space_map(regs.cr_iot, regs.cr_iobase, regs.cr_nports, 0,
		&regs.cr_ioh))
		return;

	comcnattach1(&regs, com_arbus_baud, freq, COM_TYPE_NORMAL, CONMODE);
}