/* ************************************************************************** * * Boot-ROM-Code to load an operating system across a TCP/IP network. * * Module: memory.h * Purpose: Definitions for boot rom memory layout * Entries: None * ************************************************************************** * * Copyright (C) 1995-2003 Gero Kuhlmann * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * 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., 675 Mass Ave, Cambridge, MA 02139, USA. * * $Id: memory.h,v 1.6 2003/03/09 00:24:27 gkminix Exp $ */ #ifndef _MEMORY_H #define _MEMORY_H /* ************************************************************************** * * The memory layout of the bootrom looks like this: * * +------------------+ (00000:0) * | Int & BIOS data | 2kB * +------------------+ LOWMEM (01000:0) * | OS loading area | variable * +------------------+ * | Bootrom code | variable * +------------------+ MEMEND (0A000:0) * | Video memory | * | Compressed ROM | 384kB * | BIOS | * +------------------+ EXTMEM (10000:0) * | OS loading area | * +------------------+ physical end of memory * * * During initialization and decompression of the bootrom code (either * out of the real rom or a floppy image), the lower OS loading area * looks like this: * * +------------------+ DECOMPMEM (02000:0) * | Decompressed ROM | 256kB * +------------------+ FLOPMEM (05000:0) * | Floppy image | 128kB * +------------------+ FLOPEND (07000:0) * * Note that FLOPEND should not exceed 07000:0, as the decompression code * puts itself right behind that address, and it requires 64kB of free * memory. */ #ifndef _USE_ASSEMBLER #define LOWMEM 0x007C0L /* beginning of OS loading area */ #define DOSEXTMEM 0x01000L /* beginning of DOS extended area */ #define DECOMPMEM 0x02000L /* beginning of decompressed image */ #define DECOMPEND 0x05000L /* end of decompressed image area */ #define FLOPMEM 0x05000L /* beginning of floppy loading area */ #define FLOPEND 0x07000L /* end of floppy loading area */ #define OSENDMEM 0x08000L /* end of guaranteed OS loading area */ #define MEMEND 0x0A000L /* end of ram on typical PC system */ #define ROMSIZE 0x08000L /* max. size of rom area in bytes */ #define EXTMEM 0x10000L /* beginning of extended memory area */ #else /* _USE_ASSEMBLER */ LOWMEM equ $07C0 ! beginning of OS loading area DECOMPMEM equ $2000 ! beginning of decompressed image DECOMPEND equ $5000 ! end of decompressed image area FLOPMEM equ $5000 ! beginning of floppy loading area FLOPEND equ $7000 ! end of floppy loading area OSENDMEM equ $8000 ! end of guaranteed OS loading area MEMEND equ $A000 ! end of ram on typical PC system ROMSIZE equ $8000 ! size of rom area in bytes #endif /* _USE_ASSEMBLER */ /* ************************************************************************** * * The ROM startup code, the kernel image and the network driver startup * code all need some values inserted at their beginning by the binary * patch program. Define the offsets to those values from the beginning * of each file. * * Note that these values have to correspond to the actual offsets * in the corresponding assembler files (rom.S, kernel.S and netdrv.S)! * * The version number values in each file will be checked by the binary * patch program. They should be at different offsets, so that an error * will be generated when an invalid file is fed into the patch program. */ #ifdef _USE_ASSEMBLER DATAOFS equ $0008 ! offset to special data values /* Offsets into the ROM startup code */ ROMMAJOROFS equ DATAOFS + 0 ! offset to major version num ROMMINOROFS equ DATAOFS + 1 ! offset to minor version num ROMSEROFS equ DATAOFS + 2 ! offset to rom serial num ROMVECTOFS equ DATAOFS + 6 ! offset to bootrom vector ROMCOMPSIZEOFS equ DATAOFS + 8 ! offset to compressed size in bytes ROMTOTSIZEOFS equ DATAOFS + 12 ! offset to total size in paragraphs ROMPCIPTROFS equ DATAOFS + 16 ! offset to ptr to PCI struct ROMPNPPTROFS equ DATAOFS + 18 ! offset to ptr to PnP header ROMIDOFS equ DATAOFS + 20 ! offset to ID string ROMBOOTFLGOFS equ DATAOFS + 28 ! offset to boot flags /* Offsets into the kernel code */ KRNLOADER equ $0003 ! offset to kernel loader code KRNTEXTOFS equ DATAOFS + 0 ! offset to kernel text size KRNDATAOFS equ DATAOFS + 2 ! offset to kernel data size KRNROMIDOFS equ DATAOFS + 4 ! offset to kernel ROM ID offset KRNSIZEOFS equ DATAOFS + 6 ! offset to total kernel size KRNMAJOROFS equ DATAOFS + 8 ! offset to major version num KRNMINOROFS equ DATAOFS + 9 ! offset to minor version num /* Offsets into the network driver code */ NETLOADER equ $0003 ! offset to driver loader code NETTEXTOFS equ DATAOFS + 0 ! offset to driver text size NETDATAOFS equ DATAOFS + 2 ! offset to driver data size NETROMIDOFS equ DATAOFS + 4 ! offset to driver ROM ID offset NETSIZEOFS equ DATAOFS + 6 ! offset to total driver size NETMAJOROFS equ DATAOFS + 8 ! offset to major version num NETMINOROFS equ DATAOFS + 9 ! offset to minor version num NETBUSTYPEOFS equ DATAOFS + 10 ! offset to bus type #else /* _USE_ASSEMBLER */ #define DATAOFS 0x00008L /* offset to special data */ /* Offsets into the ROM startup code */ #define ROMLENOFS 0x00002L /* offset to rom length byte */ #define ROMMAJOROFS (DATAOFS + 0L) /* offset to major version num */ #define ROMMINOROFS (DATAOFS + 1L) /* offset to minor version num */ #define ROMSEROFS (DATAOFS + 2L) /* offset to rom serial num */ #define ROMVECTOFS (DATAOFS + 6L) /* offset to bootrom vector */ #define ROMCOMPSIZEOFS (DATAOFS + 8L) /* offset to compressed size */ #define ROMTOTSIZEOFS (DATAOFS + 12L) /* offset to total size in para */ #define ROMPCIPTROFS (DATAOFS + 16L) /* offset to ptr to PCI struct */ #define ROMPNPPTROFS (DATAOFS + 18L) /* offset to ptr to PnP header */ #define ROMIDOFS (DATAOFS + 20L) /* offset to ID string */ #define ROMBOOTFLGOFS (DATAOFS + 28L) /* offset to boot flags */ #define ROMFLASHOFS (DATAOFS + 29L) /* offset to flash EPROM loader */ /* Offsets into the kernel code */ #define KRNTEXTOFS (DATAOFS + 0L) /* offset to kernel text size */ #define KRNDATAOFS (DATAOFS + 2L) /* offset to kernel data size */ #define KRNROMIDOFS (DATAOFS + 4L) /* offset to kernel ROM ID ofs */ #define KRNSIZEOFS (DATAOFS + 6L) /* offset to total kernel size */ #define KRNMAJOROFS (DATAOFS + 8L) /* offset to major version num */ #define KRNMINOROFS (DATAOFS + 9L) /* offset to minor version num */ /* Offsets into the network driver code */ #define NETTEXTOFS (DATAOFS + 0L) /* offset to driver text size */ #define NETDATAOFS (DATAOFS + 2L) /* offset to driver data size */ #define NETROMIDOFS (DATAOFS + 4L) /* offset to driver ROM ID ofs */ #define NETSIZEOFS (DATAOFS + 6L) /* offset to total driver size */ #define NETMAJOROFS (DATAOFS + 8L) /* offset to major version num */ #define NETMINOROFS (DATAOFS + 9L) /* offset to minor version num */ #define NETBUSTYPEOFS (DATAOFS + 10L) /* offset to bus type */ #endif /* _USE_ASSEMBLER */ /* ************************************************************************** * * The bootrom kernel and network driver interface files have a ROM ID * structure at their beginning. It's almost the same with both files: */ #ifdef _USE_ASSEMBLER ROMID_SIG equ $0000 ! offset to ROM ID signature ROMID_LENGTH equ $0004 ! offset to structure length ROMID_CHKSUM equ $0005 ! offset to structure checksum ROMID_REV equ $0006 ! offset to structure revision ROMID_APIREV equ $0007 ! offset to API revision ROMID_LOADER equ $000A ! offset to ROM loader offset ROMID_STKSIZE equ $000C ! offset to stack size ROMID_DATASIZE equ $000E ! offset to data segment size ROMID_CODESIZE equ $0010 ! offset to code segment size ROMID_BUSTYPE equ $0012 ! offset to bus type string #else /* _USE_ASSEMBLER */ #define ROMID_SIG 0x0000 /* offset to ROM ID signature */ #define ROMID_LENGTH 0x0004 /* offset to structure length */ #define ROMID_CHKSUM 0x0005 /* offset to structure checksum */ #define ROMID_REV 0x0006 /* offset to structure revision */ #define ROMID_APIREV 0x0007 /* offset to API revision */ #define ROMID_LOADER 0x000A /* offset to ROM loader offset */ #define ROMID_STKSIZE 0x000C /* offset to stack size */ #define ROMID_DATASIZE 0x000E /* offset to data segment size */ #define ROMID_CODESIZE 0x0010 /* offset to code segment size */ #define ROMID_BUSTYPE 0x0012 /* offset to bus type string */ #define ROMID_MIN_SIZE 0x0012 /* min size of ROM ID structure */ #define BUSTYPE_SIZE 4 /* length of bus type string */ #endif /* _USE_ASSEMBLER */ /* ************************************************************************** * * Boot flags: */ #ifdef _USE_ASSEMBLER ROMFLG_ASKNET equ %00000001 ! ask for network boot ROMFLG_ASKTIME equ %00011110 ! timeout for keystroke ROMFLG_FLOADER equ %00100000 ! flash loader installed #else #define ROMFLG_ASKNET 0x01 /* ask for network boot */ #define ROMFLG_ASKTIME 0x1E /* timeout for keystroke */ #define ROMFLG_FLOADER 0x20 /* flash loader installed */ #endif /* _USE_ASSEMBLER */ #endif /* _MEMORY_H */