1193326Sed/* $NetBSD: systeminfo.c,v 1.2 1999/09/26 12:46:58 takemura Exp $ */ 2193326Sed 3193326Sed/* 4193326Sed * Copyright (c) 1999, by UCHIYAMA Yasushi 5193326Sed * All rights reserved. 6193326Sed * 7193326Sed * Redistribution and use in source and binary forms, with or without 8193326Sed * modification, are permitted provided that the following conditions 9193326Sed * are met: 10193326Sed * 1. Redistributions of source code must retain the above copyright 11193326Sed * notice, this list of conditions and the following disclaimer. 12193326Sed * 2. The name of the developer may NOT be used to endorse or promote products 13193326Sed * derived from this software without specific prior written permission. 14193326Sed * 15193326Sed * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 16193326Sed * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17193326Sed * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18193326Sed * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 19193326Sed * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20193326Sed * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21193326Sed * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22193326Sed * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23193326Sed * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24193326Sed * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25193326Sed * SUCH DAMAGE. 26193326Sed * 27193326Sed */ 28193326Sed#include <pbsdboot.h> 29193326Sed#include <machine/platid_mask.h> 30193326Sed#if 0 31193326Sed#define PROCESSOR_LEVEL_R4000 4 32193326Sed#define PROCESSOR_LEVEL_R3000 3 33193326Sed#define PROCESSOR_REVMAJOR_VR41XX 0x0c 34198092Srdivacky#define PROCESSOR_REVMAJOR_TX39XX 0x22 35193326Sed#endif 36193326Sed 37193326Sedstruct system_info system_info; 38193326Sed 39193326Sedstatic void dump_archinfo(SYSTEM_INFO*); 40193326Sed 41193326Sedint 42193326Sedset_system_info(platid_t *platid) 43193326Sed{ 44193326Sed SYSTEM_INFO info; 45193326Sed /* 46193326Sed * Set machine dependent information. 47193326Sed */ 48193326Sed GetSystemInfo(&info); 49193326Sed if (platid_match(platid, &platid_mask_CPU_MIPS)) { 50198092Srdivacky if (platid_match(platid, &platid_mask_CPU_MIPS_VR_41XX)) { 51193326Sed vr41xx_init(&info); 52193326Sed } else 53193326Sed if (platid_match(platid, &platid_mask_CPU_MIPS_TX)) { 54193326Sed tx39xx_init(&info); 55193326Sed } else { 56193326Sed dump_archinfo(&info); 57193326Sed return 0; 58193326Sed } 59193326Sed } else { 60193326Sed dump_archinfo(&info); 61193326Sed return 0; 62193326Sed } 63193326Sed 64193326Sed#if 0 65193326Sed switch (info.wProcessorArchitecture) { 66199990Srdivacky default: 67199990Srdivacky dump_archinfo(&info); 68193326Sed return 0; 69193326Sed break; 70198092Srdivacky case PROCESSOR_ARCHITECTURE_MIPS: 71193326Sed switch (info.wProcessorLevel) { 72193326Sed default: 73193326Sed dump_archinfo(&info); 74193326Sed return 0; 75199990Srdivacky break; 76199990Srdivacky case PROCESSOR_LEVEL_R4000: 77199990Srdivacky switch (info.wProcessorRevision >> 8) { 78199990Srdivacky default: 79193326Sed dump_archinfo(&info); 80199990Srdivacky return 0; 81199990Srdivacky break; 82199990Srdivacky case PROCESSOR_REVMAJOR_VR41XX: 83199990Srdivacky vr41xx_init(&info); 84199990Srdivacky break; 85199990Srdivacky } 86199990Srdivacky break; 87199990Srdivacky case PROCESSOR_LEVEL_R3000: 88198092Srdivacky switch (info.wProcessorRevision >> 8) { 89193326Sed default: 90193326Sed dump_archinfo(&info); 91193326Sed return 0; 92198092Srdivacky break; 93193326Sed case PROCESSOR_REVMAJOR_TX39XX: 94198092Srdivacky tx39xx_init(&info); 95193326Sed break; 96193326Sed } 97193326Sed break; 98193326Sed } 99193326Sed break; 100193326Sed case PROCESSOR_ARCHITECTURE_SHx: 101193326Sed dump_archinfo(&info); 102198092Srdivacky return 0; 103193326Sed break; 104193326Sed case PROCESSOR_ARCHITECTURE_ARM: 105193326Sed dump_archinfo(&info); 106193326Sed return 0; 107198092Srdivacky break; 108193326Sed } 109193326Sed#endif 110193326Sed 111193326Sed if (system_info.si_asmcodelen > (signed)system_info.si_pagesize) { 112193326Sed msg_printf(MSG_ERROR, whoami, 113193326Sed TEXT("asmcodelen=%d > pagesize=%d\n"), 114193326Sed system_info.si_asmcodelen, 115198092Srdivacky system_info.si_pagesize); 116193326Sed return 0; 117198092Srdivacky } 118193326Sed 119193326Sed return 1; 120193326Sed} 121193326Sed 122193326Sedstatic void 123193326Seddump_archinfo(SYSTEM_INFO *info) 124193326Sed{ 125193326Sed msg_printf(MSG_ERROR, whoami, TEXT("Unsupported CPU\n")); 126193326Sed#if 0 127193326Sed msg_printf(MSG_ERROR, whoami, 128193326Sed TEXT("Unknown machine ARCHITECTURE %#x, LEVEL %#x REVISION %#x.\n LCD(%dx%d)\n"), 129193326Sed info->wProcessorArchitecture, info->wProcessorLevel, 130193326Sed info->wProcessorRevision, 131193326Sed GetSystemMetrics(SM_CXSCREEN), 132193326Sed GetSystemMetrics(SM_CYSCREEN)); 133193326Sed#endif 134193326Sed} 135193326Sed