1 1.10 rin /* $NetBSD: sysinfo.c,v 1.10 2024/09/25 08:32:44 rin Exp $ */ 2 1.1 leo 3 1.1 leo /*- 4 1.1 leo * Copyright (c) 1998 The NetBSD Foundation, Inc. 5 1.1 leo * All rights reserved. 6 1.1 leo * 7 1.1 leo * This code is derived from software contributed to The NetBSD Foundation 8 1.1 leo * by Leo Weppelman. 9 1.1 leo * 10 1.1 leo * Redistribution and use in source and binary forms, with or without 11 1.1 leo * modification, are permitted provided that the following conditions 12 1.1 leo * are met: 13 1.1 leo * 1. Redistributions of source code must retain the above copyright 14 1.1 leo * notice, this list of conditions and the following disclaimer. 15 1.1 leo * 2. Redistributions in binary form must reproduce the above copyright 16 1.1 leo * notice, this list of conditions and the following disclaimer in the 17 1.1 leo * documentation and/or other materials provided with the distribution. 18 1.1 leo * 19 1.1 leo * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 20 1.1 leo * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 21 1.1 leo * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 22 1.1 leo * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 23 1.1 leo * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24 1.1 leo * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25 1.1 leo * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26 1.1 leo * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27 1.1 leo * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28 1.1 leo * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29 1.1 leo * POSSIBILITY OF SUCH DAMAGE. 30 1.1 leo */ 31 1.1 leo 32 1.2 leo #ifdef TOSTOOLS 33 1.1 leo #include <stdio.h> 34 1.1 leo #include <sys/types.h> 35 1.2 leo #else 36 1.2 leo 37 1.5 junyoung #include <lib/libsa/stand.h> 38 1.2 leo #include <atari_stand.h> 39 1.2 leo #include <libkern.h> 40 1.2 leo #include <machine/cpu.h> 41 1.2 leo #endif /* TOSTOOLS */ 42 1.2 leo 43 1.3 leo #include "libtos.h" 44 1.1 leo #include "tosdefs.h" 45 1.1 leo #include "kparamb.h" 46 1.10 rin 47 1.10 rin /* 48 1.10 rin * ADDR_* defined in tosdefs.h are in the 0-th page, even if 4KB page, 49 1.10 rin * i.e., [0, 0x1000). This causes -Warray-bounds for GCC12 and later. 50 1.10 rin */ 51 1.10 rin #pragma GCC diagnostic push 52 1.10 rin #pragma GCC diagnostic ignored "-Warray-bounds" 53 1.10 rin 54 1.1 leo /* 55 1.4 wiz * Extract memory and CPU/FPU info from system. 56 1.1 leo */ 57 1.1 leo void 58 1.9 dsl sys_info(osdsc_t *od) 59 1.1 leo { 60 1.1 leo long *jar; 61 1.1 leo OSH *oshdr; 62 1.1 leo 63 1.1 leo od->cputype = 0; 64 1.1 leo 65 1.1 leo /* 66 1.1 leo * Some GEMDOS versions use a different year-base in the RTC. 67 1.1 leo */ 68 1.1 leo oshdr = *ADDR_OSHEAD; 69 1.1 leo oshdr = oshdr->os_beg; 70 1.1 leo if ((oshdr->os_version > 0x0300) && (oshdr->os_version < 0x0306)) 71 1.1 leo od->cputype |= ATARI_CLKBROKEN; 72 1.1 leo 73 1.1 leo /* 74 1.1 leo * Auto configure memory sizes when they are not pre-set. 75 1.1 leo */ 76 1.1 leo if (od->stmem_size <= 0) 77 1.1 leo od->stmem_size = *ADDR_PHYSTOP; 78 1.1 leo 79 1.1 leo if (od->ttmem_size) 80 1.1 leo od->ttmem_start = TTRAM_BASE; 81 1.1 leo else { 82 1.1 leo if (*ADDR_CHKRAMTOP == RAMTOP_MAGIC) { 83 1.1 leo od->ttmem_size = *ADDR_RAMTOP; 84 1.1 leo if (od->ttmem_size > TTRAM_BASE) { 85 1.1 leo od->ttmem_size -= TTRAM_BASE; 86 1.1 leo od->ttmem_start = TTRAM_BASE; 87 1.1 leo } 88 1.1 leo else od->ttmem_size = 0; 89 1.1 leo } 90 1.1 leo } 91 1.1 leo 92 1.1 leo /* 93 1.4 wiz * Scan cookiejar for CPU types, accellerator boards, etc. 94 1.1 leo */ 95 1.1 leo jar = *ADDR_P_COOKIE; 96 1.1 leo if (jar != NULL) { 97 1.1 leo do { 98 1.1 leo if (jar[0] == 0x5f435055) { /* _CPU */ 99 1.1 leo switch (jar[1]) { 100 1.1 leo case 0: 101 1.1 leo od->cputype |= ATARI_68000; 102 1.1 leo break; 103 1.1 leo case 10: 104 1.1 leo od->cputype |= ATARI_68010; 105 1.1 leo break; 106 1.1 leo case 20: 107 1.1 leo od->cputype |= ATARI_68020; 108 1.1 leo break; 109 1.1 leo case 30: 110 1.1 leo od->cputype |= ATARI_68030; 111 1.1 leo break; 112 1.1 leo case 40: 113 1.1 leo od->cputype |= ATARI_68040; 114 1.1 leo break; 115 1.1 leo case 60: 116 1.1 leo od->cputype |= ATARI_68060; 117 1.1 leo break; 118 1.1 leo default: 119 1.1 leo /* This error is caught later on */ 120 1.1 leo break; 121 1.1 leo } 122 1.1 leo } 123 1.1 leo if (jar[0] == 0x42504658) { /* BPFX */ 124 1.1 leo unsigned long *p; 125 1.1 leo 126 1.1 leo p = (unsigned long*)jar[1]; 127 1.1 leo 128 1.1 leo od->ttmem_start = p[1]; 129 1.1 leo od->ttmem_size = p[2]; 130 1.1 leo } 131 1.1 leo if (jar[0] == 0x5f435432) { /* _CT2 */ 132 1.1 leo /* 133 1.1 leo * The CT2 board has a different physical base address! 134 1.1 leo */ 135 1.1 leo od->ttmem_start = CTRAM_BASE; 136 1.1 leo } 137 1.1 leo jar = &jar[2]; 138 1.1 leo } while (jar[-2]); 139 1.1 leo } 140 1.1 leo } 141 1.10 rin 142 1.10 rin #pragma GCC diagnostic pop 143