sh_console.cpp revision 1.3 1 1.3 uch /* $NetBSD: sh_console.cpp,v 1.3 2001/03/15 17:24:47 uch Exp $ */
2 1.1 uch
3 1.1 uch /*-
4 1.1 uch * Copyright (c) 2001 The NetBSD Foundation, Inc.
5 1.1 uch * All rights reserved.
6 1.1 uch *
7 1.1 uch * This code is derived from software contributed to The NetBSD Foundation
8 1.1 uch * by UCHIYAMA Yasushi.
9 1.1 uch *
10 1.1 uch * Redistribution and use in source and binary forms, with or without
11 1.1 uch * modification, are permitted provided that the following conditions
12 1.1 uch * are met:
13 1.1 uch * 1. Redistributions of source code must retain the above copyright
14 1.1 uch * notice, this list of conditions and the following disclaimer.
15 1.1 uch * 2. Redistributions in binary form must reproduce the above copyright
16 1.1 uch * notice, this list of conditions and the following disclaimer in the
17 1.1 uch * documentation and/or other materials provided with the distribution.
18 1.1 uch * 3. All advertising materials mentioning features or use of this software
19 1.1 uch * must display the following acknowledgement:
20 1.1 uch * This product includes software developed by the NetBSD
21 1.1 uch * Foundation, Inc. and its contributors.
22 1.1 uch * 4. Neither the name of The NetBSD Foundation nor the names of its
23 1.1 uch * contributors may be used to endorse or promote products derived
24 1.1 uch * from this software without specific prior written permission.
25 1.1 uch *
26 1.1 uch * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
27 1.1 uch * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
28 1.1 uch * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
29 1.1 uch * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
30 1.1 uch * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
31 1.1 uch * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
32 1.1 uch * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
33 1.1 uch * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
34 1.1 uch * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
35 1.1 uch * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36 1.1 uch * POSSIBILITY OF SUCH DAMAGE.
37 1.1 uch */
38 1.1 uch
39 1.2 uch #include <hpcmenu.h>
40 1.1 uch #include <sh3/sh_console.h>
41 1.1 uch
42 1.3 uch #define BI_CNUSE_SCI 2
43 1.3 uch #define BI_CNUSE_SCIF 3
44 1.3 uch #define BI_CNUSE_HD64461COM 4
45 1.3 uch
46 1.1 uch SHConsole *SHConsole::_instance = 0;
47 1.1 uch
48 1.2 uch struct SHConsole::console_info
49 1.2 uch SHConsole::_console_info[] = {
50 1.3 uch { PLATID_CPU_SH_3_7709 , PLATID_MACH_HP_LX_620 , SCIFPrint, BI_CNUSE_SCIF },
51 1.3 uch { PLATID_CPU_SH_3_7709 , PLATID_MACH_HP_LX_620JP , SCIFPrint, BI_CNUSE_SCIF },
52 1.3 uch { PLATID_CPU_SH_3_7709A , PLATID_MACH_HP_JORNADA_680 , SCIFPrint, BI_CNUSE_SCIF },
53 1.3 uch { PLATID_CPU_SH_3_7709A , PLATID_MACH_HP_JORNADA_680JP , SCIFPrint, BI_CNUSE_SCIF },
54 1.3 uch { PLATID_CPU_SH_3_7709A , PLATID_MACH_HP_JORNADA_690 , SCIFPrint, BI_CNUSE_SCIF },
55 1.3 uch { PLATID_CPU_SH_3_7709A , PLATID_MACH_HP_JORNADA_690JP , SCIFPrint, BI_CNUSE_SCIF },
56 1.3 uch { PLATID_CPU_SH_3_7709 , PLATID_MACH_HITACHI_PERSONA_HPW230JC , 0 , BI_CNUSE_HD64461COM },
57 1.2 uch { 0, 0, 0 } // terminator.
58 1.2 uch };
59 1.2 uch
60 1.2 uch SHConsole::SHConsole()
61 1.2 uch {
62 1.2 uch _print = 0;
63 1.2 uch }
64 1.2 uch
65 1.2 uch SHConsole::~SHConsole()
66 1.2 uch {
67 1.2 uch }
68 1.2 uch
69 1.2 uch SHConsole *
70 1.2 uch SHConsole::Instance()
71 1.2 uch {
72 1.2 uch if (!_instance)
73 1.2 uch _instance = new SHConsole();
74 1.2 uch
75 1.2 uch return _instance;
76 1.2 uch }
77 1.2 uch
78 1.2 uch BOOL
79 1.2 uch SHConsole::init()
80 1.2 uch {
81 1.2 uch HpcMenuInterface &menu = HpcMenuInterface::Instance();
82 1.2 uch struct console_info *tab = _console_info;
83 1.2 uch u_int32_t cpu, machine;
84 1.2 uch
85 1.2 uch _kmode = SetKMode(1);
86 1.2 uch
87 1.2 uch cpu = menu._pref.platid_hi;
88 1.2 uch machine = menu._pref.platid_lo;
89 1.2 uch
90 1.2 uch for (; tab->cpu; tab++) {
91 1.2 uch if (tab->cpu == cpu && tab->machine == machine) {
92 1.2 uch _print = tab->print;
93 1.3 uch _boot_console = tab->boot_console;
94 1.2 uch break;
95 1.2 uch }
96 1.2 uch }
97 1.2 uch
98 1.2 uch /*
99 1.2 uch * always open COM1 to supply clock and power for the
100 1.2 uch * sake of kernel serial driver
101 1.2 uch */
102 1.2 uch return openCOM1();
103 1.2 uch }
104 1.2 uch
105 1.1 uch void
106 1.1 uch SHConsole::print(const TCHAR *fmt, ...)
107 1.1 uch {
108 1.2 uch if (_print == 0)
109 1.2 uch return;
110 1.2 uch
111 1.1 uch va_list ap;
112 1.1 uch va_start(ap, fmt);
113 1.1 uch wvsprintf(_bufw, fmt, ap);
114 1.1 uch va_end(ap);
115 1.1 uch
116 1.1 uch if (!setupBuffer())
117 1.1 uch return;
118 1.1 uch
119 1.2 uch _print(_bufm);
120 1.1 uch }
121 1.2 uch
122 1.2 uch void
123 1.2 uch SHConsole::SCIFPrint(const char *buf)
124 1.2 uch {
125 1.2 uch SCIF_PRINT(buf);
126 1.2 uch }
127 1.2 uch
128