/* * Read a single byte from the serial port. */ SPL_STATIC_FUNC int serial_getc(void) { unsigned char ch; /* Wait till character is placed in fifo */ while((readl(P_UART_STATUS(UART_PORT_CONS)) & UART_STAT_MASK_RFIFO_CNT)==0) ; /* Also check for overflow errors */ if (readl(P_UART_STATUS(UART_PORT_CONS)) & (UART_STAT_MASK_PRTY_ERR | UART_STAT_MASK_FRAM_ERR)) { setbits_le32(P_UART_CONTROL(UART_PORT_CONS),UART_CNTL_MASK_CLR_ERR); clrbits_le32(P_UART_CONTROL(UART_PORT_CONS),UART_CNTL_MASK_CLR_ERR); } ch = readl(P_UART_RFIFO(UART_PORT_CONS)) & 0x00ff; return ((int)ch); }
/* * Read a single byte from the serial port. */ int serial_getc_port (int port) { unsigned char ch; unsigned port_base = port_base_addrs[port]; /* Wait till character is placed in fifo */ while((readl(P_UART_STATUS(port_base)) & UART_STAT_MASK_RFIFO_CNT)==0) ; ch = readl(P_UART_RFIFO(port_base)) & 0x00ff; /* Also check for overflow errors */ if (readl(P_UART_STATUS(port_base)) & (UART_STAT_MASK_PRTY_ERR | UART_STAT_MASK_FRAM_ERR)) { writel(readl(P_UART_CONTROL(port_base)) |UART_CNTL_MASK_CLR_ERR,P_UART_CONTROL(port_base));//clear errors writel(readl(P_UART_CONTROL(port_base)) & (~UART_CNTL_MASK_CLR_ERR),P_UART_CONTROL(port_base)); } return ((int)ch); }