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