1/* 2 * linux/include/asm/setup.h 3 * 4 * Copyright (C) 1997-1999 Russell King 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License version 2 as 8 * published by the Free Software Foundation. 9 * 10 * Structure passed to kernel to tell it about the 11 * hardware it's running on. See linux/Documentation/arm/Setup 12 * for more info. 13 * 14 * NOTE: 15 * This file contains two ways to pass information from the boot 16 * loader to the kernel. The old struct param_struct is deprecated, 17 * but it will be kept in the kernel for 5 years from now 18 * (2001). This will allow boot loaders to convert to the new struct 19 * tag way. 20 */ 21#ifndef __ASMARM_SETUP_H 22#define __ASMARM_SETUP_H 23 24/* 25 * Usage: 26 * - do not go blindly adding fields, add them at the end 27 * - when adding fields, don't rely on the address until 28 * a patch from me has been released 29 * - unused fields should be zero (for future expansion) 30 * - this structure is relatively short-lived - only 31 * guaranteed to contain useful data in setup_arch() 32 */ 33#define COMMAND_LINE_SIZE 1024 34 35/* This is the old deprecated way to pass parameters to the kernel */ 36struct param_struct { 37 union { 38 struct { 39 unsigned long page_size; /* 0 */ 40 unsigned long nr_pages; /* 4 */ 41 unsigned long ramdisk_size; /* 8 */ 42 unsigned long flags; /* 12 */ 43#define FLAG_READONLY 1 44#define FLAG_RDLOAD 4 45#define FLAG_RDPROMPT 8 46 unsigned long rootdev; /* 16 */ 47 unsigned long video_num_cols; /* 20 */ 48 unsigned long video_num_rows; /* 24 */ 49 unsigned long video_x; /* 28 */ 50 unsigned long video_y; /* 32 */ 51 unsigned long memc_control_reg; /* 36 */ 52 unsigned char sounddefault; /* 40 */ 53 unsigned char adfsdrives; /* 41 */ 54 unsigned char bytes_per_char_h; /* 42 */ 55 unsigned char bytes_per_char_v; /* 43 */ 56 unsigned long pages_in_bank[4]; /* 44 */ 57 unsigned long pages_in_vram; /* 60 */ 58 unsigned long initrd_start; /* 64 */ 59 unsigned long initrd_size; /* 68 */ 60 unsigned long rd_start; /* 72 */ 61 unsigned long system_rev; /* 76 */ 62 unsigned long system_serial_low; /* 80 */ 63 unsigned long system_serial_high; /* 84 */ 64 unsigned long mem_fclk_21285; /* 88 */ 65 } s; 66 char unused[256]; 67 } u1; 68 union { 69 char paths[8][128]; 70 struct { 71 unsigned long magic; 72 char n[1024 - sizeof(unsigned long)]; 73 } s; 74 } u2; 75 char commandline[COMMAND_LINE_SIZE]; 76}; 77 78 79 80/* 81 * The new way of passing information: a list of tagged entries 82 */ 83 84/* The list ends with an ATAG_NONE node. */ 85#define ATAG_NONE 0x00000000 86 87struct tag_header { 88 u32 size; 89 u32 tag; 90}; 91 92/* The list must start with an ATAG_CORE node */ 93#define ATAG_CORE 0x54410001 94 95struct tag_core { 96 u32 flags; /* bit 0 = read-only */ 97 u32 pagesize; 98 u32 rootdev; 99}; 100 101/* it is allowed to have multiple ATAG_MEM nodes */ 102#define ATAG_MEM 0x54410002 103 104struct tag_mem32 { 105 u32 size; 106 u32 start; /* physical start address */ 107}; 108 109/* VGA text type displays */ 110#define ATAG_VIDEOTEXT 0x54410003 111 112struct tag_videotext { 113 u8 x; 114 u8 y; 115 u16 video_page; 116 u8 video_mode; 117 u8 video_cols; 118 u16 video_ega_bx; 119 u8 video_lines; 120 u8 video_isvga; 121 u16 video_points; 122}; 123 124/* describes how the ramdisk will be used in kernel */ 125#define ATAG_RAMDISK 0x54410004 126 127struct tag_ramdisk { 128 u32 flags; /* bit 0 = load, bit 1 = prompt */ 129 u32 size; /* decompressed ramdisk size in _kilo_ bytes */ 130 u32 start; /* starting block of floppy-based RAM disk image */ 131}; 132 133/* describes where the compressed ramdisk image lives */ 134#define ATAG_INITRD 0x54410005 135 136struct tag_initrd { 137 u32 start; /* physical start address */ 138 u32 size; /* size of compressed ramdisk image in bytes */ 139}; 140 141/* board serial number. "64 bits should be enough for everybody" */ 142#define ATAG_SERIAL 0x54410006 143 144struct tag_serialnr { 145 u32 low; 146 u32 high; 147}; 148 149/* board revision */ 150#define ATAG_REVISION 0x54410007 151 152struct tag_revision { 153 u32 rev; 154}; 155 156/* initial values for vesafb-type framebuffers. see struct screen_info 157 * in include/linux/tty.h 158 */ 159#define ATAG_VIDEOLFB 0x54410008 160 161struct tag_videolfb { 162 u16 lfb_width; 163 u16 lfb_height; 164 u16 lfb_depth; 165 u16 lfb_linelength; 166 u32 lfb_base; 167 u32 lfb_size; 168 u8 red_size; 169 u8 red_pos; 170 u8 green_size; 171 u8 green_pos; 172 u8 blue_size; 173 u8 blue_pos; 174 u8 rsvd_size; 175 u8 rsvd_pos; 176}; 177 178/* command line: \0 terminated string */ 179#define ATAG_CMDLINE 0x54410009 180 181struct tag_cmdline { 182 char cmdline[1]; /* this is the minimum size */ 183}; 184 185/* acorn RiscPC specific information */ 186#define ATAG_ACORN 0x41000101 187 188struct tag_acorn { 189 u32 memc_control_reg; 190 u32 vram_pages; 191 u8 sounddefault; 192 u8 adfsdrives; 193}; 194 195/* footbridge memory clock, see arch/arm/mach-footbridge/arch.c */ 196#define ATAG_MEMCLK 0x41000402 197 198struct tag_memclk { 199 u32 fmemclk; 200}; 201 202struct tag { 203 struct tag_header hdr; 204 union { 205 struct tag_core core; 206 struct tag_mem32 mem; 207 struct tag_videotext videotext; 208 struct tag_ramdisk ramdisk; 209 struct tag_initrd initrd; 210 struct tag_serialnr serialnr; 211 struct tag_revision revision; 212 struct tag_videolfb videolfb; 213 struct tag_cmdline cmdline; 214 215 /* 216 * Acorn specific 217 */ 218 struct tag_acorn acorn; 219 220 /* 221 * DC21285 specific 222 */ 223 struct tag_memclk memclk; 224 } u; 225}; 226 227struct tagtable { 228 u32 tag; 229 int (*parse)(const struct tag *); 230}; 231 232#define __tag __attribute__((unused, __section__(".taglist"))) 233#define __tagtable(tag, fn) \ 234static struct tagtable __tagtable_##fn __tag = { tag, fn } 235 236#define tag_member_present(tag,member) \ 237 ((unsigned long)(&((struct tag *)0L)->member + 1) \ 238 <= (tag)->hdr.size * 4) 239 240#define tag_next(t) ((struct tag *)((u32 *)(t) + (t)->hdr.size)) 241#define tag_size(type) ((sizeof(struct tag_header) + sizeof(struct type)) >> 2) 242 243#define for_each_tag(t,base) \ 244 for (t = base; t->hdr.size; t = tag_next(t)) 245 246/* 247 * Memory map description 248 */ 249#define NR_BANKS 8 250 251struct meminfo { 252 int nr_banks; 253 unsigned long end; 254 struct { 255 unsigned long start; 256 unsigned long size; 257 int node; 258 } bank[NR_BANKS]; 259}; 260 261extern struct meminfo meminfo; 262 263#endif 264