linux/arch/mips/include/asm/sn/kldir.h
<<
>>
Prefs
   1/*
   2 * This file is subject to the terms and conditions of the GNU General Public
   3 * License.  See the file "COPYING" in the main directory of this archive
   4 * for more details.
   5 *
   6 * Derived from IRIX <sys/SN/kldir.h>, revision 1.21.
   7 *
   8 * Copyright (C) 1992 - 1997, 1999, 2000 Silicon Graphics, Inc.
   9 * Copyright (C) 1999, 2000 by Ralf Baechle
  10 */
  11#ifndef _ASM_SN_KLDIR_H
  12#define _ASM_SN_KLDIR_H
  13
  14
  15/*
  16 * The kldir memory area resides at a fixed place in each node's memory and
  17 * provides pointers to most other IP27 memory areas.  This allows us to
  18 * resize and/or relocate memory areas at a later time without breaking all
  19 * firmware and kernels that use them.  Indices in the array are
  20 * permanently dedicated to areas listed below.  Some memory areas (marked
  21 * below) reside at a permanently fixed location, but are included in the
  22 * directory for completeness.
  23 */
  24
  25#define KLDIR_MAGIC             0x434d5f53505f5357
  26
  27/*
  28 * The upper portion of the memory map applies during boot
  29 * only and is overwritten by IRIX/SYMMON.
  30 *
  31 *                                    MEMORY MAP PER NODE
  32 *
  33 * 0x2000000 (32M)         +-----------------------------------------+
  34 *                         |      IO6 BUFFERS FOR FLASH ENET IOC3    |
  35 * 0x1F80000 (31.5M)       +-----------------------------------------+
  36 *                         |      IO6 TEXT/DATA/BSS/stack            |
  37 * 0x1C00000 (30M)         +-----------------------------------------+
  38 *                         |      IO6 PROM DEBUG TEXT/DATA/BSS/stack |
  39 * 0x0800000 (28M)         +-----------------------------------------+
  40 *                         |      IP27 PROM TEXT/DATA/BSS/stack      |
  41 * 0x1B00000 (27M)         +-----------------------------------------+
  42 *                         |      IP27 CFG                           |
  43 * 0x1A00000 (26M)         +-----------------------------------------+
  44 *                         |      Graphics PROM                      |
  45 * 0x1800000 (24M)         +-----------------------------------------+
  46 *                         |      3rd Party PROM drivers             |
  47 * 0x1600000 (22M)         +-----------------------------------------+
  48 *                         |                                         |
  49 *                         |      Free                               |
  50 *                         |                                         |
  51 *                         +-----------------------------------------+
  52 *                         |      UNIX DEBUG Version                 |
  53 * 0x190000 (2M--)         +-----------------------------------------+
  54 *                         |      SYMMON                             |
  55 *                         |      (For UNIX Debug only)              |
  56 * 0x34000 (208K)          +-----------------------------------------+
  57 *                         |      SYMMON STACK [NUM_CPU_PER_NODE]    |
  58 *                         |      (For UNIX Debug only)              |
  59 * 0x25000 (148K)          +-----------------------------------------+
  60 *                         |      KLCONFIG - II (temp)               |
  61 *                         |                                         |
  62 *                         |    ----------------------------         |
  63 *                         |                                         |
  64 *                         |      UNIX NON-DEBUG Version             |
  65 * 0x19000 (100K)          +-----------------------------------------+
  66 *
  67 *
  68 * The lower portion of the memory map contains information that is
  69 * permanent and is used by the IP27PROM, IO6PROM and IRIX.
  70 *
  71 * 0x19000 (100K)          +-----------------------------------------+
  72 *                         |                                         |
  73 *                         |      PI Error Spools (32K)              |
  74 *                         |                                         |
  75 * 0x12000 (72K)           +-----------------------------------------+
  76 *                         |      Unused                             |
  77 * 0x11c00 (71K)           +-----------------------------------------+
  78 *                         |      CPU 1 NMI Eframe area              |
  79 * 0x11a00 (70.5K)         +-----------------------------------------+
  80 *                         |      CPU 0 NMI Eframe area              |
  81 * 0x11800 (70K)           +-----------------------------------------+
  82 *                         |      CPU 1 NMI Register save area       |
  83 * 0x11600 (69.5K)         +-----------------------------------------+
  84 *                         |      CPU 0 NMI Register save area       |
  85 * 0x11400 (69K)           +-----------------------------------------+
  86 *                         |      GDA (1k)                           |
  87 * 0x11000 (68K)           +-----------------------------------------+
  88 *                         |      Early cache Exception stack        |
  89 *                         |             and/or                      |
  90 *                         |      kernel/io6prom nmi registers       |
  91 * 0x10800  (66k)          +-----------------------------------------+
  92 *                         |      cache error eframe                 |
  93 * 0x10400 (65K)           +-----------------------------------------+
  94 *                         |      Exception Handlers (UALIAS copy)   |
  95 * 0x10000 (64K)           +-----------------------------------------+
  96 *                         |                                         |
  97 *                         |                                         |
  98 *                         |      KLCONFIG - I (permanent) (48K)     |
  99 *                         |                                         |
 100 *                         |                                         |
 101 *                         |                                         |
 102 * 0x4000 (16K)            +-----------------------------------------+
 103 *                         |      NMI Handler (Protected Page)       |
 104 * 0x3000 (12K)            +-----------------------------------------+
 105 *                         |      ARCS PVECTORS (master node only)   |
 106 * 0x2c00 (11K)            +-----------------------------------------+
 107 *                         |      ARCS TVECTORS (master node only)   |
 108 * 0x2800 (10K)            +-----------------------------------------+
 109 *                         |      LAUNCH [NUM_CPU]                   |
 110 * 0x2400 (9K)             +-----------------------------------------+
 111 *                         |      Low memory directory (KLDIR)       |
 112 * 0x2000 (8K)             +-----------------------------------------+
 113 *                         |      ARCS SPB (1K)                      |
 114 * 0x1000 (4K)             +-----------------------------------------+
 115 *                         |      Early cache Exception stack        |
 116 *                         |             and/or                      |
 117 *                         |      kernel/io6prom nmi registers       |
 118 * 0x800  (2k)             +-----------------------------------------+
 119 *                         |      cache error eframe                 |
 120 * 0x400 (1K)              +-----------------------------------------+
 121 *                         |      Exception Handlers                 |
 122 * 0x0   (0K)              +-----------------------------------------+
 123 */
 124
 125#ifdef __ASSEMBLY__
 126#define KLDIR_OFF_MAGIC                 0x00
 127#define KLDIR_OFF_OFFSET                0x08
 128#define KLDIR_OFF_POINTER               0x10
 129#define KLDIR_OFF_SIZE                  0x18
 130#define KLDIR_OFF_COUNT                 0x20
 131#define KLDIR_OFF_STRIDE                0x28
 132#endif /* __ASSEMBLY__ */
 133
 134/*
 135 * This is defined here because IP27_SYMMON_STK_SIZE must be at least what
 136 * we define here.  Since it's set up in the prom.  We can't redefine it later
 137 * and expect more space to be allocated.  The way to find out the true size
 138 * of the symmon stacks is to divide SYMMON_STK_SIZE by SYMMON_STK_STRIDE
 139 * for a particular node.
 140 */
 141#define SYMMON_STACK_SIZE               0x8000
 142
 143#if defined(PROM)
 144
 145/*
 146 * These defines are prom version dependent.  No code other than the IP27
 147 * prom should attempt to use these values.
 148 */
 149#define IP27_LAUNCH_OFFSET              0x2400
 150#define IP27_LAUNCH_SIZE                0x400
 151#define IP27_LAUNCH_COUNT               2
 152#define IP27_LAUNCH_STRIDE              0x200
 153
 154#define IP27_KLCONFIG_OFFSET            0x4000
 155#define IP27_KLCONFIG_SIZE              0xc000
 156#define IP27_KLCONFIG_COUNT             1
 157#define IP27_KLCONFIG_STRIDE            0
 158
 159#define IP27_NMI_OFFSET                 0x3000
 160#define IP27_NMI_SIZE                   0x40
 161#define IP27_NMI_COUNT                  2
 162#define IP27_NMI_STRIDE                 0x40
 163
 164#define IP27_PI_ERROR_OFFSET            0x12000
 165#define IP27_PI_ERROR_SIZE              0x4000
 166#define IP27_PI_ERROR_COUNT             1
 167#define IP27_PI_ERROR_STRIDE            0
 168
 169#define IP27_SYMMON_STK_OFFSET          0x25000
 170#define IP27_SYMMON_STK_SIZE            0xe000
 171#define IP27_SYMMON_STK_COUNT           2
 172/* IP27_SYMMON_STK_STRIDE must be >= SYMMON_STACK_SIZE */
 173#define IP27_SYMMON_STK_STRIDE          0x7000
 174
 175#define IP27_FREEMEM_OFFSET             0x19000
 176#define IP27_FREEMEM_SIZE               -1
 177#define IP27_FREEMEM_COUNT              1
 178#define IP27_FREEMEM_STRIDE             0
 179
 180#endif /* PROM */
 181/*
 182 * There will be only one of these in a partition so the IO6 must set it up.
 183 */
 184#define IO6_GDA_OFFSET                  0x11000
 185#define IO6_GDA_SIZE                    0x400
 186#define IO6_GDA_COUNT                   1
 187#define IO6_GDA_STRIDE                  0
 188
 189/*
 190 * save area of kernel nmi regs in the prom format
 191 */
 192#define IP27_NMI_KREGS_OFFSET           0x11400
 193#define IP27_NMI_KREGS_CPU_SIZE         0x200
 194/*
 195 * save area of kernel nmi regs in eframe format
 196 */
 197#define IP27_NMI_EFRAME_OFFSET          0x11800
 198#define IP27_NMI_EFRAME_SIZE            0x200
 199
 200#define KLDIR_ENT_SIZE                  0x40
 201#define KLDIR_MAX_ENTRIES               (0x400 / 0x40)
 202
 203#ifndef __ASSEMBLY__
 204typedef struct kldir_ent_s {
 205        u64             magic;          /* Indicates validity of entry      */
 206        off_t           offset;         /* Offset from start of node space  */
 207        unsigned long   pointer;        /* Pointer to area in some cases    */
 208        size_t          size;           /* Size in bytes                    */
 209        u64             count;          /* Repeat count if array, 1 if not  */
 210        size_t          stride;         /* Stride if array, 0 if not        */
 211        char            rsvd[16];       /* Pad entry to 0x40 bytes          */
 212        /* NOTE: These 16 bytes are used in the Partition KLDIR
 213           entry to store partition info. Refer to klpart.h for this. */
 214} kldir_ent_t;
 215#endif /* !__ASSEMBLY__ */
 216
 217#endif /* _ASM_SN_KLDIR_H */
 218