sh_console.cpp revision 1.2 1 1.2 uch /* $NetBSD: sh_console.cpp,v 1.2 2001/03/13 16:31:31 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.1 uch SHConsole *SHConsole::_instance = 0;
43 1.1 uch
44 1.2 uch struct SHConsole::console_info
45 1.2 uch SHConsole::_console_info[] = {
46 1.2 uch { PLATID_CPU_SH_3_7709 , PLATID_MACH_HP_LX_620 , SCIFPrint },
47 1.2 uch { PLATID_CPU_SH_3_7709 , PLATID_MACH_HP_LX_620JP , SCIFPrint },
48 1.2 uch { PLATID_CPU_SH_3_7709A , PLATID_MACH_HP_JORNADA_680 , SCIFPrint },
49 1.2 uch { PLATID_CPU_SH_3_7709A , PLATID_MACH_HP_JORNADA_680JP , SCIFPrint },
50 1.2 uch { PLATID_CPU_SH_3_7709A , PLATID_MACH_HP_JORNADA_690 , SCIFPrint },
51 1.2 uch { PLATID_CPU_SH_3_7709A , PLATID_MACH_HP_JORNADA_690JP , SCIFPrint },
52 1.2 uch { PLATID_CPU_SH_3_7709 , PLATID_MACH_HITACHI_PERSONA_HPW230JC , 0 }, // HD64461 Serial module
53 1.2 uch { 0, 0, 0 } // terminator.
54 1.2 uch };
55 1.2 uch
56 1.2 uch SHConsole::SHConsole()
57 1.2 uch {
58 1.2 uch _print = 0;
59 1.2 uch }
60 1.2 uch
61 1.2 uch SHConsole::~SHConsole()
62 1.2 uch {
63 1.2 uch }
64 1.2 uch
65 1.2 uch SHConsole *
66 1.2 uch SHConsole::Instance()
67 1.2 uch {
68 1.2 uch if (!_instance)
69 1.2 uch _instance = new SHConsole();
70 1.2 uch
71 1.2 uch return _instance;
72 1.2 uch }
73 1.2 uch
74 1.2 uch BOOL
75 1.2 uch SHConsole::init()
76 1.2 uch {
77 1.2 uch HpcMenuInterface &menu = HpcMenuInterface::Instance();
78 1.2 uch struct console_info *tab = _console_info;
79 1.2 uch u_int32_t cpu, machine;
80 1.2 uch
81 1.2 uch _kmode = SetKMode(1);
82 1.2 uch
83 1.2 uch cpu = menu._pref.platid_hi;
84 1.2 uch machine = menu._pref.platid_lo;
85 1.2 uch
86 1.2 uch for (; tab->cpu; tab++) {
87 1.2 uch if (tab->cpu == cpu && tab->machine == machine) {
88 1.2 uch _print = tab->print;
89 1.2 uch break;
90 1.2 uch }
91 1.2 uch }
92 1.2 uch
93 1.2 uch /*
94 1.2 uch * always open COM1 to supply clock and power for the
95 1.2 uch * sake of kernel serial driver
96 1.2 uch */
97 1.2 uch return openCOM1();
98 1.2 uch }
99 1.2 uch
100 1.1 uch void
101 1.1 uch SHConsole::print(const TCHAR *fmt, ...)
102 1.1 uch {
103 1.2 uch if (_print == 0)
104 1.2 uch return;
105 1.2 uch
106 1.1 uch va_list ap;
107 1.1 uch va_start(ap, fmt);
108 1.1 uch wvsprintf(_bufw, fmt, ap);
109 1.1 uch va_end(ap);
110 1.1 uch
111 1.1 uch if (!setupBuffer())
112 1.1 uch return;
113 1.1 uch
114 1.2 uch _print(_bufm);
115 1.1 uch }
116 1.2 uch
117 1.2 uch void
118 1.2 uch SHConsole::SCIFPrint(const char *buf)
119 1.2 uch {
120 1.2 uch SCIF_PRINT(buf);
121 1.2 uch }
122 1.2 uch
123