The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/include/ibm/memory.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /* Physical memory layout on IBM compatible PCs. Only the major, fixed memory 
    2  * areas are detailed here. Known addresses of the BIOS data area are defined
    3  * in <ibm/bios.h>. The map upper memory area (UMA) is only roughly defined 
    4  * since the UMA sections may vary in size and locus. 
    5  *
    6  * Created: March 2005, Jorrit N. Herder
    7  */
    8 
    9 /* I/O-mapped peripherals. I/O addresses are different from memory addresses 
   10  * due to the I/O signal on the ISA bus. Individual I/O ports are defined by 
   11  * the drivers that use them or looked up with help of the BIOS. 
   12  */
   13 #define IO_MEMORY_BEGIN             0x0000
   14 #define IO_MEMORY_END               0xFFFF  
   15 
   16   
   17 /* Physical memory layout. Design decisions made for the earliest PCs, caused
   18  * memory to be broken broken into the following four basic pieces:
   19  *  - Conventional or base memory: first 640 KB (incl. BIOS data, see below);
   20  *    The top of conventional memory is often used by the BIOS to store data.
   21  *  - Upper Memory Area (UMA): upper 384 KB of the first megabyte of memory;
   22  *  - High Memory Area (HMA): ~ first 64 KB of the second megabyte of memory;
   23  *  - Extended Memory: all the memory above first megabyte of memory.
   24  * The high memory area overlaps with the first 64 KB of extended memory, but
   25  * is different from the rest of extended memory because it can be accessed 
   26  * when the processor is in real mode. 
   27  */
   28 #define BASE_MEM_BEGIN            0x000000
   29 #define BASE_MEM_TOP              0x090000      
   30 #define BASE_MEM_END              0x09FFFF
   31 
   32 #define UPPER_MEM_BEGIN           0x0A0000
   33 #define UPPER_MEM_END             0x0FFFFF
   34 
   35 #define HIGH_MEM_BEGIN            0x100000
   36 #define HIGH_MEM_END              0x10FFEF
   37 
   38 #define EXTENDED_MEM_BEGIN        0x100000
   39 #define EXTENDED_MEM_END    ((unsigned) -1)
   40   
   41 
   42 /* The logical memory map of the first 1.5 MB is as follows (hexadecimals): 
   43  *
   44  * offset [size]  (id) = memory usage
   45  * ------------------------------------------------------------------------
   46  * 000000 [00400] (I) = Real-Mode Interrupt Vector Table (1024 B)
   47  * 000400 [00100] (B) = BIOS Data Area (256 B)
   48  * 000800 [00066] (W) = 80286 Loadall workspace
   49  * 010000 [10000] (c) = Real-Mode Compatibility Segment (64 KB)
   50  * 020000 [70000] (.) = Program-accessible memory (free)
   51  * 090000 [10000] (E) = BIOS Extension
   52  * 0A0000 [10000] (G) = Graphics Mode Video RAM
   53  * 0B0000 [08000] (M) = Monochrome Text Mode Video RAM
   54  * 0B8000 [08000] (C) = Color Text Mode Video RAM
   55  * 0C0000 [08000] (V) = Video ROM BIOS (would be "a" in PS/2)
   56  * 0C8000 [18000] (a) = Adapter ROM + special-purpose RAM (free UMA space)
   57  * 0E0000 [10000] (r) = PS/2 Motherboard ROM BIOS (free UMA in non-PS/2)
   58  * 0F0000 [06000] (R) = Motherboard ROM BIOS
   59  * 0F6000 [08000] (b) = IBM Cassette BASIC ROM ("R" in IBM compatibles)
   60  * 0FD000 [02000] (R) = Motherboard ROM BIOS
   61  * 100000 [.....] (.) = Extended memory, program-accessible (free) 
   62  * 100000 [0FFEF] (h) = High Memory Area (HMA)
   63  *
   64  * 
   65  * Conventional (Base) Memory:
   66  *
   67  *       : [~~~~~16 KB~~~~][~~~~~16 KB~~~~][~~~~~16 KB~~~~][~~~~~16 KB~~~~]
   68  *       : 0---1---2---3---4---5---6---7---8---9---A---B---C---D---E---F---
   69  * 000000: IBW.............................................................
   70  * 010000: cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
   71  * 020000: ................................................................
   72  * 030000: ................................................................
   73  * 040000: ................................................................
   74  * 050000: ................................................................
   75  * 060000: ................................................................
   76  * 070000: ................................................................
   77  * 080000: ................................................................
   78  * 090000: EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
   79  * 
   80  * Upper Memory Area (UMA):
   81  *
   82  *       : 0---1---2---3---4---5---6---7---8---9---A---B---C---D---E---F---
   83  * 0A0000: GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
   84  * 0B0000: MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
   85  * 0C0000: VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
   86  * 0D0000: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
   87  * 0E0000: rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
   88  * 0F0000: RRRRRRRRRRRRRRRRRRRRRRRRbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbRRRRRRRR
   89  *
   90  * Extended Memory:
   91  * 
   92  *       : 0---1---2---3---4---5---6---7---8---9---A---B---C---D---E---F---
   93  * 100000: hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh.
   94  * 110000: ................................................................
   95  * 120000: ................................................................
   96  * 130000: ................................................................
   97  * 140000: ................................................................
   98  * 150000: ................................................................
   99  * 160000: ................................................................
  100  * 170000: ................................................................
  101  *
  102  * Source: The logical memory map was partly taken from the book "Upgrading 
  103  *         & Repairing PCs Eight Edition", Macmillan Computer Publishing.
  104  */ 
  105 
  106  
  107 /* The bottom part of conventional or base memory is occupied by BIOS data. 
  108  * The BIOS memory can be distinguished in two parts:
  109  * o The first the first 1024 bytes of addressable memory contains the BIOS 
  110  *   real-mode interrupt vector table (IVT). The table is used to access BIOS
  111  *   hardware services in real-mode by loading a interrupt vector and issuing 
  112  *   an INT instruction. Some vectors contain BIOS data that can be retrieved 
  113  *   directly and are useful in protected-mode as well. 
  114  * o The BIOS data area is located directly above the interrupt vectors. It
  115  *   comprises 256 bytes of memory. These data are used by the device drivers
  116  *   to retrieve hardware details, such as I/O ports to be used. 
  117  */  
  118 #define BIOS_MEM_BEGIN             0x00000      /* all BIOS memory */
  119 #define BIOS_MEM_END               0x004FF
  120 #define   BIOS_IVT_BEGIN           0x00000      /* BIOS interrupt vectors */
  121 #define   BIOS_IVT_END             0x003FF
  122 #define   BIOS_DATA_BEGIN          0x00400      /* BIOS data area */
  123 #define   BIOS_DATA_END            0x004FF
  124 
  125 /* The base memory is followed by 384 KB reserved memory located at the top of
  126  * the first MB of physical memory. This memory is known as the upper memory 
  127  * area (UMA). It is used for memory-mapped peripherals, such as video RAM, 
  128  * adapter BIOS (adapter ROM and special purpose RAM), and the motherboard 
  129  * BIOS (I/O system, Power-On Self Test, bootstrap loader). The upper memory
  130  * can roughly be distinguished in three parts:
  131  * 
  132  * o The first 128K of the upper memory area (A0000-BFFFF) is reserved for use 
  133  *   by memory-mapped video adapters. Hence, it is also called Video RAM. The
  134  *   display driver can directly write to this memory and request the hardware
  135  *   to show the data on the screen.
  136  */ 
  137 #define UMA_VIDEO_RAM_BEGIN        0xA0000      /* video RAM */
  138 #define UMA_VIDEO_RAM_END          0xBFFFF
  139 #define   UMA_GRAPHICS_RAM_BEGIN   0xA0000      /* graphics RAM */
  140 #define   UMA_GRAPHICS_RAM_END     0xAFFFF
  141 #define   UMA_MONO_TEXT_BEGIN      0xB0000      /* monochrome text */
  142 #define   UMA_MONO_TEXT_END        0xB7FFF
  143 #define   UMA_COLOR_TEXT_BEGIN     0xB8000      /* color text */
  144 #define   UMA_COLOR_TEXT_END       0xBFFFF
  145 
  146 /* o The next 128K (the memory range C0000-DFFFF) is reserved for the adapter 
  147  *   BIOS that resides in the ROM on some adapter boards. Most VGA-compatible 
  148  *   video adapters use the first 32 KB of this area for their on-board BIOS. 
  149  *   The rest can be used by any other adapters. The IDE controller often 
  150  *   occupies the second 32 KB. 
  151  */
  152 #define UMA_ADAPTER_BIOS_BEGIN     0xC0000      /* adapter BIOS */
  153 #define UMA_ADAPTER_BIOS_END       0xDFFFF
  154 #define   UMA_VIDEO_BIOS_BEGIN     0xC0000      /* video adapter */
  155 #define   UMA_VIDEO_BIOS_END       0xC7FFF
  156 #define   UMA_IDE_HD_BIOS_BEGIN    0xC8000      /* IDE hard disk */
  157 #define   UMA_IDE_HD_BIOS_END      0xCBFFF
  158 
  159 /* o The last 128K of the upper memory area (E0000-FFFFF) is reserved for 
  160  *   motherboard BIOS (Basic I/O System). The POST (Power-On Self Test) and 
  161  *   bootstrap loader also reside in  this space. The memory falls apart in 
  162  *   two areas: Plug & Play BIOS data and the system BIOS data. 
  163  */ 
  164 #define UMA_MB_BIOS_BEGIN          0xE0000      /* motherboard BIOS */
  165 #define UMA_MB_BIOS_END            0xFFFFF
  166 #define   UMA_PNP_ESCD_BIOS_BEGIN  0xE0000      /* PnP extended data */
  167 #define   UMA_PNP_ESCD_BIOS_END    0xEFFFF
  168 #define   UMA_SYSTEM_BIOS_BEGIN    0xF0000      /* system BIOS */
  169 #define   UMA_SYSTEM_BIOS_END      0xFFFFF
  170 
  171  

Cache object: e84060f1f364b407a7006ab1b8539c48


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.