2
* linux/include/asm/setup.h
4
* Copyright (C) 1997-1999 Russell King
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.
10
* Structure passed to kernel to tell it about the
11
* hardware it's running on. See linux/Documentation/arm/Setup
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
21
#ifndef __ASMARM_SETUP_H
22
#define __ASMARM_SETUP_H
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()
33
#define COMMAND_LINE_SIZE 1024
35
/* This is the old deprecated way to pass parameters to the kernel */
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
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 */
72
char n[1024 - sizeof(unsigned long)];
75
char commandline[COMMAND_LINE_SIZE];
80
* The new way of passing information: a list of tagged entries
83
/* The list ends with an ATAG_NONE node. */
84
#define ATAG_NONE 0x00000000
91
/* The list must start with an ATAG_CORE node */
92
#define ATAG_CORE 0x54410001
95
u32 flags; /* bit 0 = read-only */
100
/* it is allowed to have multiple ATAG_MEM nodes */
101
#define ATAG_MEM 0x54410002
105
u32 start; /* physical start address */
108
/* VGA text type displays */
109
#define ATAG_VIDEOTEXT 0x54410003
111
struct tag_videotext {
123
/* describes how the ramdisk will be used in kernel */
124
#define ATAG_RAMDISK 0x54410004
127
u32 flags; /* bit 0 = load, bit 1 = prompt */
128
u32 size; /* decompressed ramdisk size in _kilo_ bytes */
129
u32 start; /* starting block of floppy-based RAM disk image */
132
/* describes where the compressed ramdisk image lives (virtual address) */
134
* this one accidentally used virtual addresses - as such,
137
#define ATAG_INITRD 0x54410005
139
/* describes where the compressed ramdisk image lives (physical address) */
140
#define ATAG_INITRD2 0x54420005
143
u32 start; /* physical start address */
144
u32 size; /* size of compressed ramdisk image in bytes */
147
/* board serial number. "64 bits should be enough for everybody" */
148
#define ATAG_SERIAL 0x54410006
150
struct tag_serialnr {
156
#define ATAG_REVISION 0x54410007
158
struct tag_revision {
162
/* initial values for vesafb-type framebuffers. see struct screen_info
163
* in include/linux/tty.h
165
#define ATAG_VIDEOLFB 0x54410008
167
struct tag_videolfb {
184
/* command line: \0 terminated string */
185
#define ATAG_CMDLINE 0x54410009
188
char cmdline[1]; /* this is the minimum size */
191
/* acorn RiscPC specific information */
192
#define ATAG_ACORN 0x41000101
195
u32 memc_control_reg;
201
/* footbridge memory clock, see arch/arm/mach-footbridge/arch.c */
202
#define ATAG_MEMCLK 0x41000402
209
struct tag_header hdr;
211
struct tag_core core;
212
struct tag_mem32 mem;
213
struct tag_videotext videotext;
214
struct tag_ramdisk ramdisk;
215
struct tag_initrd initrd;
216
struct tag_serialnr serialnr;
217
struct tag_revision revision;
218
struct tag_videolfb videolfb;
219
struct tag_cmdline cmdline;
224
struct tag_acorn acorn;
229
struct tag_memclk memclk;
235
int (*parse)(const struct tag *);
238
#define __tag __attribute__((unused, __section__(".taglist")))
239
#define __tagtable(tag, fn) \
240
static struct tagtable __tagtable_##fn __tag = { tag, fn }
242
#define tag_member_present(tag,member) \
243
((unsigned long)(&((struct tag *)0L)->member + 1) \
244
<= (tag)->hdr.size * 4)
246
#define tag_next(t) ((struct tag *)((u32 *)(t) + (t)->hdr.size))
247
#define tag_size(type) ((sizeof(struct tag_header) + sizeof(struct type)) >> 2)
249
#define for_each_tag(t,base) \
250
for (t = base; t->hdr.size; t = tag_next(t))
253
* Memory map description
267
extern struct meminfo meminfo;
272
* Board specified tags
274
void setup_board_tags(struct tag **in_params);