1 1.3 takemura /* $NetBSD: systeminfo.c,v 1.3 2000/01/16 03:07:33 takemura Exp $ */ 2 1.3 takemura 3 1.3 takemura /* 4 1.3 takemura * Copyright (c) 1999, by UCHIYAMA Yasushi 5 1.3 takemura * All rights reserved. 6 1.3 takemura * 7 1.3 takemura * Redistribution and use in source and binary forms, with or without 8 1.3 takemura * modification, are permitted provided that the following conditions 9 1.3 takemura * are met: 10 1.3 takemura * 1. Redistributions of source code must retain the above copyright 11 1.3 takemura * notice, this list of conditions and the following disclaimer. 12 1.3 takemura * 2. The name of the developer may NOT be used to endorse or promote products 13 1.3 takemura * derived from this software without specific prior written permission. 14 1.3 takemura * 15 1.3 takemura * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 16 1.3 takemura * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17 1.3 takemura * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18 1.3 takemura * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 19 1.3 takemura * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20 1.3 takemura * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21 1.3 takemura * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22 1.3 takemura * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23 1.3 takemura * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24 1.3 takemura * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25 1.3 takemura * SUCH DAMAGE. 26 1.3 takemura * 27 1.3 takemura */ 28 1.3 takemura #include <pbsdboot.h> 29 1.3 takemura #include <machine/platid_mask.h> 30 1.3 takemura #if 0 31 1.3 takemura #define PROCESSOR_LEVEL_R4000 4 32 1.3 takemura #define PROCESSOR_LEVEL_R3000 3 33 1.3 takemura #define PROCESSOR_REVMAJOR_VR41XX 0x0c 34 1.3 takemura #define PROCESSOR_REVMAJOR_TX39XX 0x22 35 1.2 takemura #endif 36 1.3 takemura 37 1.3 takemura struct system_info system_info; 38 1.3 takemura 39 1.3 takemura static void dump_archinfo(SYSTEM_INFO*); 40 1.3 takemura 41 1.3 takemura int 42 1.3 takemura set_system_info(platid_t *platid) 43 1.3 takemura { 44 1.3 takemura SYSTEM_INFO info; 45 1.3 takemura /* 46 1.3 takemura * Set machine dependent information. 47 1.3 takemura */ 48 1.3 takemura GetSystemInfo(&info); 49 1.3 takemura if (platid_match(platid, &platid_mask_CPU_MIPS)) { 50 1.3 takemura if (platid_match(platid, &platid_mask_CPU_MIPS_VR_41XX)) { 51 1.3 takemura vr41xx_init(&info); 52 1.3 takemura } else 53 1.3 takemura if (platid_match(platid, &platid_mask_CPU_MIPS_TX)) { 54 1.3 takemura tx39xx_init(&info); 55 1.3 takemura } else { 56 1.3 takemura dump_archinfo(&info); 57 1.3 takemura return 0; 58 1.3 takemura } 59 1.3 takemura } else { 60 1.3 takemura dump_archinfo(&info); 61 1.3 takemura return 0; 62 1.3 takemura } 63 1.3 takemura 64 1.3 takemura #if 0 65 1.3 takemura switch (info.wProcessorArchitecture) { 66 1.3 takemura default: 67 1.3 takemura dump_archinfo(&info); 68 1.3 takemura return 0; 69 1.3 takemura break; 70 1.3 takemura case PROCESSOR_ARCHITECTURE_MIPS: 71 1.3 takemura switch (info.wProcessorLevel) { 72 1.3 takemura default: 73 1.3 takemura dump_archinfo(&info); 74 1.3 takemura return 0; 75 1.3 takemura break; 76 1.3 takemura case PROCESSOR_LEVEL_R4000: 77 1.3 takemura switch (info.wProcessorRevision >> 8) { 78 1.3 takemura default: 79 1.3 takemura dump_archinfo(&info); 80 1.3 takemura return 0; 81 1.3 takemura break; 82 1.3 takemura case PROCESSOR_REVMAJOR_VR41XX: 83 1.3 takemura vr41xx_init(&info); 84 1.3 takemura break; 85 1.3 takemura } 86 1.3 takemura break; 87 1.3 takemura case PROCESSOR_LEVEL_R3000: 88 1.3 takemura switch (info.wProcessorRevision >> 8) { 89 1.3 takemura default: 90 1.3 takemura dump_archinfo(&info); 91 1.3 takemura return 0; 92 1.3 takemura break; 93 1.3 takemura case PROCESSOR_REVMAJOR_TX39XX: 94 1.3 takemura tx39xx_init(&info); 95 1.3 takemura break; 96 1.3 takemura } 97 1.3 takemura break; 98 1.3 takemura } 99 1.3 takemura break; 100 1.3 takemura case PROCESSOR_ARCHITECTURE_SHx: 101 1.3 takemura dump_archinfo(&info); 102 1.3 takemura return 0; 103 1.3 takemura break; 104 1.3 takemura case PROCESSOR_ARCHITECTURE_ARM: 105 1.3 takemura dump_archinfo(&info); 106 1.3 takemura return 0; 107 1.3 takemura break; 108 1.3 takemura } 109 1.3 takemura #endif 110 1.3 takemura 111 1.3 takemura if (system_info.si_asmcodelen > (signed)system_info.si_pagesize) { 112 1.3 takemura msg_printf(MSG_ERROR, whoami, 113 1.3 takemura TEXT("asmcodelen=%d > pagesize=%d\n"), 114 1.3 takemura system_info.si_asmcodelen, 115 1.3 takemura system_info.si_pagesize); 116 1.3 takemura return 0; 117 1.3 takemura } 118 1.3 takemura 119 1.3 takemura return 1; 120 1.3 takemura } 121 1.3 takemura 122 1.3 takemura static void 123 1.3 takemura dump_archinfo(SYSTEM_INFO *info) 124 1.3 takemura { 125 1.3 takemura msg_printf(MSG_ERROR, whoami, TEXT("Unsupported CPU\n")); 126 1.3 takemura #if 0 127 1.3 takemura msg_printf(MSG_ERROR, whoami, 128 1.3 takemura TEXT("Unknown machine ARCHITECTURE %#x, LEVEL %#x REVISION %#x.\n LCD(%dx%d)\n"), 129 1.3 takemura info->wProcessorArchitecture, info->wProcessorLevel, 130 1.3 takemura info->wProcessorRevision, 131 1.3 takemura GetSystemMetrics(SM_CXSCREEN), 132 1.3 takemura GetSystemMetrics(SM_CYSCREEN)); 133 1.3 takemura #endif 134 1.3 takemura } 135