summaryrefslogtreecommitdiffstats
path: root/qemu/roms/openhackware/src/bootinfos.c
diff options
context:
space:
mode:
Diffstat (limited to 'qemu/roms/openhackware/src/bootinfos.c')
-rw-r--r--qemu/roms/openhackware/src/bootinfos.c282
1 files changed, 0 insertions, 282 deletions
diff --git a/qemu/roms/openhackware/src/bootinfos.c b/qemu/roms/openhackware/src/bootinfos.c
deleted file mode 100644
index 60f85a6bc..000000000
--- a/qemu/roms/openhackware/src/bootinfos.c
+++ /dev/null
@@ -1,282 +0,0 @@
-/*
- * <bootinfos.c>
- *
- * Generate boot informations (bootinfos for Linux and residual data).
- *
- * Copyright (c) 2004-2005 Jocelyn Mayer
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License V2
- * as published by the Free Software Foundation
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#include <stdlib.h>
-#include "bios.h"
-
-#define BI_FIRST 0x1010 /* first record - marker */
-#define BI_LAST 0x1011 /* last record - marker */
-#define BI_CMD_LINE 0x1012
-#define BI_BOOTLOADER_ID 0x1013
-#define BI_INITRD 0x1014
-#define BI_SYSMAP 0x1015
-#define BI_MACHTYPE 0x1016
-#define BI_MEMSIZE 0x1017
-#define BI_BOARD_INFO 0x1018
-
-static inline void put_long (void *addr, uint32_t l)
-{
- char *pos = addr;
- pos[0] = (l >> 24) & 0xFF;
- pos[1] = (l >> 16) & 0xFF;
- pos[2] = (l >> 8) & 0xFF;
- pos[3] = l & 0xFF;
-}
-
-static void *set_bootinfo_tag (void *addr, uint32_t tag, uint32_t size,
- void *data)
-{
- char *pos = addr;
-
- put_long(pos, tag);
- pos += 4;
- put_long(pos, size + 8);
- pos += 4;
- memcpy(pos, data, size);
- pos += size;
-
- return pos;
-}
-
-void prepare_bootinfos (void *p, uint32_t memsize,
- void *cmdline, void *initrd, uint32_t initrd_size)
-{
- uint32_t tmpi[2];
-
- /* BI_FIRST */
- p = set_bootinfo_tag(p, BI_FIRST, 0, NULL);
- /* BI_CMD_LINE */
- if (cmdline != 0) {
- p = set_bootinfo_tag(p, BI_CMD_LINE, strlen(cmdline), cmdline);
- } else {
- p = set_bootinfo_tag(p, BI_CMD_LINE, 0, NULL);
- }
- /* BI_MEM_SIZE */
- p = set_bootinfo_tag(p, BI_MEMSIZE, 4, &memsize);
- /* BI_INITRD */
- tmpi[0] = (uint32_t)initrd;
- tmpi[1] = initrd_size;
- p = set_bootinfo_tag(p, BI_INITRD, 8, tmpi);
- /* BI_LAST */
- p = set_bootinfo_tag(p, BI_LAST, 0, 0);
-}
-
-/* Residual data */
-#define MAX_CPUS 16
-#define MAX_SEGS 64
-#define MAX_MEMS 64
-#define MAX_DEVS 256
-
-typedef struct vital_t {
- /* Motherboard dependents */
- uint8_t model[32];
- uint8_t serial[64];
- uint16_t version;
- uint16_t revision;
- uint32_t firmware;
- uint32_t NVRAM_size;
- uint32_t nSIMMslots;
- uint32_t nISAslots;
- uint32_t nPCIslots;
- uint32_t nPCMCIAslots;
- uint32_t nMCAslots;
- uint32_t nEISAslots;
- uint32_t CPUHz;
- uint32_t busHz;
- uint32_t PCIHz;
- uint32_t TBdiv;
- /* CPU infos */
- uint32_t wwidth;
- uint32_t page_size;
- uint32_t ChBlocSize;
- uint32_t GrSize;
- /* Cache and TLBs */
- uint32_t cache_size;
- uint32_t cache_type;
- uint32_t cache_assoc;
- uint32_t cache_lnsize;
- uint32_t Icache_size;
- uint32_t Icache_assoc;
- uint32_t Icache_lnsize;
- uint32_t Dcache_size;
- uint32_t Dcache_assoc;
- uint32_t Dcache_lnsize;
- uint32_t TLB_size;
- uint32_t TLB_type;
- uint32_t TLB_assoc;
- uint32_t ITLB_size;
- uint32_t ITLB_assoc;
- uint32_t DTLB_size;
- uint32_t DTLB_assoc;
- void *ext_vital;
-} vital_t;
-
-typedef struct PPC_CPU_t {
- uint32_t pvr;
- uint32_t serial;
- uint32_t L2_size;
- uint32_t L2_assoc;
-} PPC_CPU_t;
-
-typedef struct map_t {
- uint32_t usage;
- uint32_t base;
- uint32_t count;
-} map_t;
-
-typedef struct PPC_mem_t {
- uint32_t size;
-} PPC_mem_t;
-
-typedef struct PPC_device_t {
- uint32_t busID;
- uint32_t devID;
- uint32_t serial;
- uint32_t flags;
- uint32_t type;
- uint32_t subtype;
- uint32_t interface;
- uint32_t spare;
-} PPC_device_t;
-
-typedef struct residual_t {
- uint32_t length;
- uint16_t version;
- uint16_t revision;
- vital_t vital;
- uint32_t nCPUs;
- PPC_CPU_t CPUs[MAX_CPUS];
- uint32_t max_mem;
- uint32_t good_mem;
- uint32_t nmaps;
- map_t maps[MAX_SEGS];
- uint32_t nmems;
- PPC_mem_t memories[MAX_MEMS];
- uint32_t ndevices;
- PPC_device_t devices[MAX_DEVS];
- /* TOFIX: No PNP devices */
-} residual_t;
-
-void residual_build (void *p, uint32_t memsize,
- uint32_t load_base, uint32_t load_size,
- uint32_t last_alloc)
-{
- const unsigned char model[] = "Qemu\0PPC\0";
- residual_t *res = p;
- int i;
-
- if (res == NULL)
- return;
- res->length = sizeof(residual_t);
- res->version = 1;
- res->revision = 0;
- memcpy(res->vital.model, model, sizeof(model));
- res->vital.version = 1;
- res->vital.revision = 0;
- res->vital.firmware = 0x1D1;
- res->vital.NVRAM_size = 0x2000;
- res->vital.nSIMMslots = 1;
- res->vital.nISAslots = 0;
- res->vital.nPCIslots = 0;
- res->vital.nPCMCIAslots = 0;
- res->vital.nMCAslots = 0;
- res->vital.nEISAslots = 0;
- res->vital.CPUHz = 200 * 1000 * 1000;
- res->vital.busHz = 100 * 1000 * 1000;
- res->vital.PCIHz = 33 * 1000 * 1000;
- res->vital.TBdiv = 1000;
- res->vital.wwidth = 32;
- res->vital.page_size = 4096;
- res->vital.ChBlocSize = 32;
- res->vital.GrSize = 32;
- res->vital.cache_size = 0;
- res->vital.cache_type = 0; /* No cache */
- res->vital.cache_assoc = 8; /* Same as 601 */
- res->vital.cache_lnsize = 32;
- res->vital.Icache_size = 0;
- res->vital.Icache_assoc = 8;
- res->vital.Icache_lnsize = 32;
- res->vital.Dcache_size = 0;
- res->vital.Dcache_assoc = 8;
- res->vital.Dcache_lnsize = 32;
- res->vital.TLB_size = 0;
- res->vital.TLB_type = 0; /* None */
- res->vital.TLB_assoc = 2;
- res->vital.ITLB_size = 0;
- res->vital.ITLB_assoc = 2;
- res->vital.DTLB_size = 0;
- res->vital.DTLB_assoc = 2;
- res->vital.ext_vital = NULL;
- res->nCPUs = 1;
- res->CPUs[0].pvr = mfpvr();
- res->CPUs[0].serial = 0;
- res->CPUs[0].L2_size = 0;
- res->CPUs[0].L2_assoc = 8;
- /* Memory infos */
- res->max_mem = memsize;
- res->good_mem = memsize;
- /* Memory mappings */
- /* First segment: firmware */
- last_alloc = (last_alloc + 4095) & ~4095;
- res->maps[0].usage = 0x0007;
- res->maps[0].base = 0x00000000;
- res->maps[0].count = last_alloc >> 12;
- i = 1;
- if (last_alloc != load_base) {
- /* Free memory between firmware and boot image */
- res->maps[1].usage = 0x0010;
- res->maps[1].base = last_alloc >> 12;
- res->maps[1].count = (load_base - last_alloc) >> 12;
- i++;
- }
- /* Boot image */
- load_size = (load_size + 4095) & ~4095;
- res->maps[i].usage = 0x0008;
- res->maps[i].base = load_base >> 12;
- res->maps[i].count = load_size >> 12;
- i++;
- /* Free memory */
- res->maps[i].usage = 0x0010;
- res->maps[i].base = (load_base + load_size) >> 12;
- res->maps[i].count = (memsize >> 12) - res->maps[i].base;
- i++;
- /* ISA IO region : 8MB */
- res->maps[i].usage = 0x0040;
- res->maps[i].base = 0x80000000 >> 12;
- res->maps[i].count = 0x00800000 >> 12;
- i++;
- /* System registers : 8MB */
- res->maps[i].usage = 0x0200;
- res->maps[i].base = 0xBF800000 >> 12;
- res->maps[i].count = 0x00800000 >> 12;
- i++;
- /* System ROM : 64 kB */
- res->maps[i].usage = 0x2000;
- res->maps[i].base = 0xFFFF0000 >> 12;
- res->maps[i].count = 0x00010000 >> 12;
- i++;
- res->nmaps = i;
- /* Memory SIMMs */
- res->nmems = 1;
- res->memories[0].size = memsize;
- /* Describe no devices */
- res->ndevices = 0;
-}