Subversion Repositories HelenOS-historic

Rev

Rev 534 | Rev 606 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 534 Rev 575
Line 24... Line 24...
24
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
 */
27
 */
28
 
28
 
29
#include <putchar.h>
-
 
30
#include <arch/types.h>
-
 
31
#include <arch/cp0.h>
29
#include <console/console.h>
32
#include <arch/console.h>
30
#include <arch/console.h>
33
#include <arch.h>
-
 
34
#include <arch/drivers/arc.h>
31
#include <arch/drivers/arc.h>
35
#include <arch/arch.h>
32
#include <arch/drivers/serial.h>
36
 
-
 
37
/** Putchar that works with MSIM & gxemul */
-
 
38
static void cons_putchar(const char ch)
-
 
39
{
-
 
40
    *((char *) VIDEORAM) = ch;
-
 
41
}
-
 
42
 
-
 
43
/** Putchar that works with simics */
33
#include <arch/drivers/msim.h>
44
static void serial_putchar(const char ch)
-
 
45
{
-
 
46
    int i;
-
 
47
 
-
 
48
    if (ch=='\n')
-
 
49
        putchar('\r');
-
 
50
 
-
 
51
    /* Wait until transmit buffer empty */
-
 
52
    while (! ((*SERIAL_LSR) & (1<<TRANSMIT_EMPTY_BIT)))
-
 
53
        ;
-
 
54
    *(SERIAL_PORT_BASE) = ch;
-
 
55
}
-
 
56
 
-
 
57
static void (*putchar_func)(const char ch) = cons_putchar;
-
 
58
 
34
 
59
void console_init(void)
35
void console_init(void)
60
{
36
{
61
    if (arc_enabled())
-
 
62
        putchar_func = arc_putchar;
-
 
63
    /* The LSR on the start usually contains this value */
-
 
64
    else if (*SERIAL_LSR == 0x60)
-
 
65
        putchar_func = serial_putchar;
-
 
66
    else
-
 
67
        putchar_func = cons_putchar;
37
    chardev_t *console;
68
}
-
 
69
 
38
 
-
 
39
    if (arc_enabled()) {
70
void putchar(const char ch)
40
        console = arc_console();
-
 
41
    } else if (serial_init()) {
-
 
42
        console = serial_console();
-
 
43
    } else
-
 
44
        console = msim_console();
71
{
45
 
72
    putchar_func(ch);
46
    stdin = console;
-
 
47
    stdout = console;
73
}
48
}