1*1378df79SJean-Christophe PLAGNIOL-VILLARD /* 2*1378df79SJean-Christophe PLAGNIOL-VILLARD * (C) Copyright 2004 Atmark Techno, Inc. 3*1378df79SJean-Christophe PLAGNIOL-VILLARD * 4*1378df79SJean-Christophe PLAGNIOL-VILLARD * Yasushi SHOJI <yashi@atmark-techno.com> 5*1378df79SJean-Christophe PLAGNIOL-VILLARD * 6*1378df79SJean-Christophe PLAGNIOL-VILLARD * See file CREDITS for list of people who contributed to this 7*1378df79SJean-Christophe PLAGNIOL-VILLARD * project. 8*1378df79SJean-Christophe PLAGNIOL-VILLARD * 9*1378df79SJean-Christophe PLAGNIOL-VILLARD * This program is free software; you can redistribute it and/or 10*1378df79SJean-Christophe PLAGNIOL-VILLARD * modify it under the terms of the GNU General Public License as 11*1378df79SJean-Christophe PLAGNIOL-VILLARD * published by the Free Software Foundation; either version 2 of 12*1378df79SJean-Christophe PLAGNIOL-VILLARD * the License, or (at your option) any later version. 13*1378df79SJean-Christophe PLAGNIOL-VILLARD * 14*1378df79SJean-Christophe PLAGNIOL-VILLARD * This program is distributed in the hope that it will be useful, 15*1378df79SJean-Christophe PLAGNIOL-VILLARD * but WITHOUT ANY WARRANTY; without even the implied warranty of 16*1378df79SJean-Christophe PLAGNIOL-VILLARD * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17*1378df79SJean-Christophe PLAGNIOL-VILLARD * GNU General Public License for more details. 18*1378df79SJean-Christophe PLAGNIOL-VILLARD * 19*1378df79SJean-Christophe PLAGNIOL-VILLARD * You should have received a copy of the GNU General Public License 20*1378df79SJean-Christophe PLAGNIOL-VILLARD * along with this program; if not, write to the Free Software 21*1378df79SJean-Christophe PLAGNIOL-VILLARD * Foundation, Inc., 59 Temple Place, Suite 330, Boston, 22*1378df79SJean-Christophe PLAGNIOL-VILLARD * MA 02111-1307 USA 23*1378df79SJean-Christophe PLAGNIOL-VILLARD */ 24*1378df79SJean-Christophe PLAGNIOL-VILLARD 25*1378df79SJean-Christophe PLAGNIOL-VILLARD #include <config.h> 26*1378df79SJean-Christophe PLAGNIOL-VILLARD 27*1378df79SJean-Christophe PLAGNIOL-VILLARD #ifdef CONFIG_XILINX_UARTLITE 28*1378df79SJean-Christophe PLAGNIOL-VILLARD 29*1378df79SJean-Christophe PLAGNIOL-VILLARD #include <asm/serial_xuartlite.h> 30*1378df79SJean-Christophe PLAGNIOL-VILLARD 31*1378df79SJean-Christophe PLAGNIOL-VILLARD /* FIXME: we should convert these to in32 and out32 */ 32*1378df79SJean-Christophe PLAGNIOL-VILLARD #define IO_WORD(offset) (*(volatile unsigned long *)(offset)) 33*1378df79SJean-Christophe PLAGNIOL-VILLARD #define IO_SERIAL(offset) IO_WORD(CONFIG_SERIAL_BASE + (offset)) 34*1378df79SJean-Christophe PLAGNIOL-VILLARD 35*1378df79SJean-Christophe PLAGNIOL-VILLARD #define IO_SERIAL_RX_FIFO IO_SERIAL(XUL_RX_FIFO_OFFSET) 36*1378df79SJean-Christophe PLAGNIOL-VILLARD #define IO_SERIAL_TX_FIFO IO_SERIAL(XUL_TX_FIFO_OFFSET) 37*1378df79SJean-Christophe PLAGNIOL-VILLARD #define IO_SERIAL_STATUS IO_SERIAL(XUL_STATUS_REG_OFFSET) 38*1378df79SJean-Christophe PLAGNIOL-VILLARD #define IO_SERIAL_CONTROL IO_SERIAL(XUL_CONTROL_REG_OFFSET) 39*1378df79SJean-Christophe PLAGNIOL-VILLARD 40*1378df79SJean-Christophe PLAGNIOL-VILLARD int serial_init(void) 41*1378df79SJean-Christophe PLAGNIOL-VILLARD { 42*1378df79SJean-Christophe PLAGNIOL-VILLARD /* FIXME: Nothing for now. We should initialize fifo, etc */ 43*1378df79SJean-Christophe PLAGNIOL-VILLARD return 0; 44*1378df79SJean-Christophe PLAGNIOL-VILLARD } 45*1378df79SJean-Christophe PLAGNIOL-VILLARD 46*1378df79SJean-Christophe PLAGNIOL-VILLARD void serial_setbrg(void) 47*1378df79SJean-Christophe PLAGNIOL-VILLARD { 48*1378df79SJean-Christophe PLAGNIOL-VILLARD /* FIXME: what's this for? */ 49*1378df79SJean-Christophe PLAGNIOL-VILLARD } 50*1378df79SJean-Christophe PLAGNIOL-VILLARD 51*1378df79SJean-Christophe PLAGNIOL-VILLARD void serial_putc(const char c) 52*1378df79SJean-Christophe PLAGNIOL-VILLARD { 53*1378df79SJean-Christophe PLAGNIOL-VILLARD if (c == '\n') serial_putc('\r'); 54*1378df79SJean-Christophe PLAGNIOL-VILLARD while (IO_SERIAL_STATUS & XUL_SR_TX_FIFO_FULL); 55*1378df79SJean-Christophe PLAGNIOL-VILLARD IO_SERIAL_TX_FIFO = (unsigned char) (c & 0xff); 56*1378df79SJean-Christophe PLAGNIOL-VILLARD } 57*1378df79SJean-Christophe PLAGNIOL-VILLARD 58*1378df79SJean-Christophe PLAGNIOL-VILLARD void serial_puts(const char * s) 59*1378df79SJean-Christophe PLAGNIOL-VILLARD { 60*1378df79SJean-Christophe PLAGNIOL-VILLARD while (*s) { 61*1378df79SJean-Christophe PLAGNIOL-VILLARD serial_putc(*s++); 62*1378df79SJean-Christophe PLAGNIOL-VILLARD } 63*1378df79SJean-Christophe PLAGNIOL-VILLARD } 64*1378df79SJean-Christophe PLAGNIOL-VILLARD 65*1378df79SJean-Christophe PLAGNIOL-VILLARD int serial_getc(void) 66*1378df79SJean-Christophe PLAGNIOL-VILLARD { 67*1378df79SJean-Christophe PLAGNIOL-VILLARD while (!(IO_SERIAL_STATUS & XUL_SR_RX_FIFO_VALID_DATA)); 68*1378df79SJean-Christophe PLAGNIOL-VILLARD return IO_SERIAL_RX_FIFO & 0xff; 69*1378df79SJean-Christophe PLAGNIOL-VILLARD } 70*1378df79SJean-Christophe PLAGNIOL-VILLARD 71*1378df79SJean-Christophe PLAGNIOL-VILLARD int serial_tstc(void) 72*1378df79SJean-Christophe PLAGNIOL-VILLARD { 73*1378df79SJean-Christophe PLAGNIOL-VILLARD return (IO_SERIAL_STATUS & XUL_SR_RX_FIFO_VALID_DATA); 74*1378df79SJean-Christophe PLAGNIOL-VILLARD } 75*1378df79SJean-Christophe PLAGNIOL-VILLARD 76*1378df79SJean-Christophe PLAGNIOL-VILLARD #endif /* CONFIG_MICROBLZE */ 77