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