PageRenderTime 37ms CodeModel.GetById 12ms app.highlight 19ms RepoModel.GetById 1ms app.codeStats 1ms

/arch/mips/jmr3927/common/puts.c

https://bitbucket.org/evzijst/gittest
C | 168 lines | 111 code | 20 blank | 37 comment | 13 complexity | 9be28b9bb9080c0784cb3fc0ff49ebe6 MD5 | raw file
  1/*
  2 *
  3 * BRIEF MODULE DESCRIPTION
  4 *	Low level uart routines to directly access a TX[34]927 SIO.
  5 *
  6 * Copyright 2001 MontaVista Software Inc.
  7 * Author: MontaVista Software, Inc.
  8 *         	ahennessy@mvista.com or source@mvista.com
  9 *
 10 * Copyright (C) 2000-2001 Toshiba Corporation
 11 *
 12 * Based on arch/mips/au1000/common/puts.c
 13 *
 14 *  This program is free software; you can redistribute  it and/or modify it
 15 *  under  the terms of  the GNU General  Public License as published by the
 16 *  Free Software Foundation;  either version 2 of the  License, or (at your
 17 *  option) any later version.
 18 *
 19 *  THIS  SOFTWARE  IS PROVIDED   ``AS  IS'' AND   ANY  EXPRESS OR IMPLIED
 20 *  WARRANTIES,   INCLUDING, BUT NOT  LIMITED  TO, THE IMPLIED WARRANTIES OF
 21 *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN
 22 *  NO  EVENT  SHALL   THE AUTHOR  BE    LIABLE FOR ANY   DIRECT, INDIRECT,
 23 *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 24 *  NOT LIMITED   TO, PROCUREMENT OF  SUBSTITUTE GOODS  OR SERVICES; LOSS OF
 25 *  USE, DATA,  OR PROFITS; OR  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
 26 *  ANY THEORY OF LIABILITY, WHETHER IN  CONTRACT, STRICT LIABILITY, OR TORT
 27 *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 28 *  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 29 *
 30 *  You should have received a copy of the  GNU General Public License along
 31 *  with this program; if not, write  to the Free Software Foundation, Inc.,
 32 *  675 Mass Ave, Cambridge, MA 02139, USA.
 33 */
 34
 35#include <linux/types.h>
 36#include <asm/jmr3927/txx927.h>
 37#include <asm/jmr3927/tx3927.h>
 38#include <asm/jmr3927/jmr3927.h>
 39
 40#define TIMEOUT       0xffffff
 41#define SLOW_DOWN
 42
 43static const char digits[16] = "0123456789abcdef";
 44
 45#ifdef SLOW_DOWN
 46#define slow_down() { int k; for (k=0; k<10000; k++); }
 47#else
 48#define slow_down()
 49#endif
 50
 51void
 52putch(const unsigned char c)
 53{
 54        int i = 0;
 55
 56        do {
 57            slow_down();
 58            i++;
 59            if (i>TIMEOUT) {
 60                break;
 61            }
 62        } while (!(tx3927_sioptr(1)->cisr & TXx927_SICISR_TXALS));
 63	tx3927_sioptr(1)->tfifo = c;
 64	return;
 65}
 66
 67unsigned char getch(void)
 68{
 69        int i = 0;
 70	int dicr;
 71	char c;
 72
 73	/* diable RX int. */
 74	dicr = tx3927_sioptr(1)->dicr;
 75	tx3927_sioptr(1)->dicr = 0;
 76
 77        do {
 78            slow_down();
 79            i++;
 80            if (i>TIMEOUT) {
 81                break;
 82            }
 83        } while (tx3927_sioptr(1)->disr & TXx927_SIDISR_UVALID)
 84		;
 85	c = tx3927_sioptr(1)->rfifo;
 86
 87	/* clear RX int. status */
 88	tx3927_sioptr(1)->disr &= ~TXx927_SIDISR_RDIS;
 89	/* enable RX int. */
 90	tx3927_sioptr(1)->dicr = dicr;
 91
 92	return c;
 93}
 94void
 95do_jmr3927_led_set(char n)
 96{
 97    /* and with current leds */
 98    jmr3927_led_and_set(n);
 99}
100
101void
102puts(unsigned char *cp)
103{
104    int i = 0;
105
106    while (*cp) {
107        do {
108            slow_down();
109            i++;
110            if (i>TIMEOUT) {
111                break;
112            }
113        } while (!(tx3927_sioptr(1)->cisr & TXx927_SICISR_TXALS));
114	tx3927_sioptr(1)->tfifo = *cp++;
115    }
116    putch('\r');
117    putch('\n');
118}
119
120void
121fputs(unsigned char *cp)
122{
123    int i = 0;
124
125    while (*cp) {
126        do {
127             slow_down();
128            i++;
129            if (i>TIMEOUT) {
130                break;
131            }
132        } while (!(tx3927_sioptr(1)->cisr & TXx927_SICISR_TXALS));
133	tx3927_sioptr(1)->tfifo = *cp++;
134    }
135}
136
137
138void
139put64(uint64_t ul)
140{
141    int cnt;
142    unsigned ch;
143
144    cnt = 16;            /* 16 nibbles in a 64 bit long */
145    putch('0');
146    putch('x');
147    do {
148        cnt--;
149        ch = (unsigned char)(ul >> cnt * 4) & 0x0F;
150                putch(digits[ch]);
151    } while (cnt > 0);
152}
153
154void
155put32(unsigned u)
156{
157    int cnt;
158    unsigned ch;
159
160    cnt = 8;            /* 8 nibbles in a 32 bit long */
161    putch('0');
162    putch('x');
163    do {
164        cnt--;
165        ch = (unsigned char)(u >> cnt * 4) & 0x0F;
166                putch(digits[ch]);
167    } while (cnt > 0);
168}