Commit | Line | Data |
---|---|---|
1da177e4 LT |
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 Documentation/arm/Setup | |
12 | * for more info. | |
13 | */ | |
14 | #ifndef __ASMARM_SETUP_H | |
15 | #define __ASMARM_SETUP_H | |
16 | ||
4af3bf6b | 17 | #include <linux/types.h> |
7d1362c0 | 18 | |
1da177e4 LT |
19 | #define COMMAND_LINE_SIZE 1024 |
20 | ||
21 | /* The list ends with an ATAG_NONE node. */ | |
22 | #define ATAG_NONE 0x00000000 | |
23 | ||
24 | struct tag_header { | |
7d1362c0 AB |
25 | __u32 size; |
26 | __u32 tag; | |
1da177e4 LT |
27 | }; |
28 | ||
29 | /* The list must start with an ATAG_CORE node */ | |
30 | #define ATAG_CORE 0x54410001 | |
31 | ||
32 | struct tag_core { | |
7d1362c0 AB |
33 | __u32 flags; /* bit 0 = read-only */ |
34 | __u32 pagesize; | |
35 | __u32 rootdev; | |
1da177e4 LT |
36 | }; |
37 | ||
38 | /* it is allowed to have multiple ATAG_MEM nodes */ | |
39 | #define ATAG_MEM 0x54410002 | |
40 | ||
41 | struct tag_mem32 { | |
7d1362c0 AB |
42 | __u32 size; |
43 | __u32 start; /* physical start address */ | |
1da177e4 LT |
44 | }; |
45 | ||
46 | /* VGA text type displays */ | |
47 | #define ATAG_VIDEOTEXT 0x54410003 | |
48 | ||
49 | struct tag_videotext { | |
7d1362c0 AB |
50 | __u8 x; |
51 | __u8 y; | |
52 | __u16 video_page; | |
53 | __u8 video_mode; | |
54 | __u8 video_cols; | |
55 | __u16 video_ega_bx; | |
56 | __u8 video_lines; | |
57 | __u8 video_isvga; | |
58 | __u16 video_points; | |
1da177e4 LT |
59 | }; |
60 | ||
61 | /* describes how the ramdisk will be used in kernel */ | |
62 | #define ATAG_RAMDISK 0x54410004 | |
63 | ||
64 | struct tag_ramdisk { | |
7d1362c0 AB |
65 | __u32 flags; /* bit 0 = load, bit 1 = prompt */ |
66 | __u32 size; /* decompressed ramdisk size in _kilo_ bytes */ | |
67 | __u32 start; /* starting block of floppy-based RAM disk image */ | |
1da177e4 LT |
68 | }; |
69 | ||
70 | /* describes where the compressed ramdisk image lives (virtual address) */ | |
71 | /* | |
72 | * this one accidentally used virtual addresses - as such, | |
73 | * it's deprecated. | |
74 | */ | |
75 | #define ATAG_INITRD 0x54410005 | |
76 | ||
77 | /* describes where the compressed ramdisk image lives (physical address) */ | |
78 | #define ATAG_INITRD2 0x54420005 | |
79 | ||
80 | struct tag_initrd { | |
7d1362c0 AB |
81 | __u32 start; /* physical start address */ |
82 | __u32 size; /* size of compressed ramdisk image in bytes */ | |
1da177e4 LT |
83 | }; |
84 | ||
85 | /* board serial number. "64 bits should be enough for everybody" */ | |
86 | #define ATAG_SERIAL 0x54410006 | |
87 | ||
88 | struct tag_serialnr { | |
7d1362c0 AB |
89 | __u32 low; |
90 | __u32 high; | |
1da177e4 LT |
91 | }; |
92 | ||
93 | /* board revision */ | |
94 | #define ATAG_REVISION 0x54410007 | |
95 | ||
96 | struct tag_revision { | |
7d1362c0 | 97 | __u32 rev; |
1da177e4 LT |
98 | }; |
99 | ||
100 | /* initial values for vesafb-type framebuffers. see struct screen_info | |
101 | * in include/linux/tty.h | |
102 | */ | |
103 | #define ATAG_VIDEOLFB 0x54410008 | |
104 | ||
105 | struct tag_videolfb { | |
7d1362c0 AB |
106 | __u16 lfb_width; |
107 | __u16 lfb_height; | |
108 | __u16 lfb_depth; | |
109 | __u16 lfb_linelength; | |
110 | __u32 lfb_base; | |
111 | __u32 lfb_size; | |
112 | __u8 red_size; | |
113 | __u8 red_pos; | |
114 | __u8 green_size; | |
115 | __u8 green_pos; | |
116 | __u8 blue_size; | |
117 | __u8 blue_pos; | |
118 | __u8 rsvd_size; | |
119 | __u8 rsvd_pos; | |
1da177e4 LT |
120 | }; |
121 | ||
122 | /* command line: \0 terminated string */ | |
123 | #define ATAG_CMDLINE 0x54410009 | |
124 | ||
125 | struct tag_cmdline { | |
126 | char cmdline[1]; /* this is the minimum size */ | |
127 | }; | |
128 | ||
129 | /* acorn RiscPC specific information */ | |
130 | #define ATAG_ACORN 0x41000101 | |
131 | ||
132 | struct tag_acorn { | |
7d1362c0 AB |
133 | __u32 memc_control_reg; |
134 | __u32 vram_pages; | |
135 | __u8 sounddefault; | |
136 | __u8 adfsdrives; | |
1da177e4 LT |
137 | }; |
138 | ||
139 | /* footbridge memory clock, see arch/arm/mach-footbridge/arch.c */ | |
140 | #define ATAG_MEMCLK 0x41000402 | |
141 | ||
142 | struct tag_memclk { | |
7d1362c0 | 143 | __u32 fmemclk; |
1da177e4 LT |
144 | }; |
145 | ||
146 | struct tag { | |
147 | struct tag_header hdr; | |
148 | union { | |
149 | struct tag_core core; | |
150 | struct tag_mem32 mem; | |
151 | struct tag_videotext videotext; | |
152 | struct tag_ramdisk ramdisk; | |
153 | struct tag_initrd initrd; | |
154 | struct tag_serialnr serialnr; | |
155 | struct tag_revision revision; | |
156 | struct tag_videolfb videolfb; | |
157 | struct tag_cmdline cmdline; | |
158 | ||
159 | /* | |
160 | * Acorn specific | |
161 | */ | |
162 | struct tag_acorn acorn; | |
163 | ||
164 | /* | |
165 | * DC21285 specific | |
166 | */ | |
167 | struct tag_memclk memclk; | |
168 | } u; | |
169 | }; | |
170 | ||
171 | struct tagtable { | |
7d1362c0 | 172 | __u32 tag; |
1da177e4 LT |
173 | int (*parse)(const struct tag *); |
174 | }; | |
175 | ||
1da177e4 LT |
176 | #define tag_member_present(tag,member) \ |
177 | ((unsigned long)(&((struct tag *)0L)->member + 1) \ | |
178 | <= (tag)->hdr.size * 4) | |
179 | ||
7d1362c0 | 180 | #define tag_next(t) ((struct tag *)((__u32 *)(t) + (t)->hdr.size)) |
1da177e4 LT |
181 | #define tag_size(type) ((sizeof(struct tag_header) + sizeof(struct type)) >> 2) |
182 | ||
183 | #define for_each_tag(t,base) \ | |
184 | for (t = base; t->hdr.size; t = tag_next(t)) | |
185 | ||
7d1362c0 AB |
186 | #ifdef __KERNEL__ |
187 | ||
b91d8a12 | 188 | #define __tag __used __attribute__((__section__(".taglist.init"))) |
7d1362c0 AB |
189 | #define __tagtable(tag, fn) \ |
190 | static struct tagtable __tagtable_##fn __tag = { tag, fn } | |
191 | ||
1da177e4 LT |
192 | /* |
193 | * Memory map description | |
194 | */ | |
82e6923e | 195 | #define NR_BANKS 8 |
1da177e4 | 196 | |
456335e2 | 197 | struct membank { |
f60892d3 | 198 | phys_addr_t start; |
456335e2 | 199 | unsigned long size; |
be370302 | 200 | unsigned int highmem; |
456335e2 RK |
201 | }; |
202 | ||
1da177e4 LT |
203 | struct meminfo { |
204 | int nr_banks; | |
456335e2 | 205 | struct membank bank[NR_BANKS]; |
1da177e4 LT |
206 | }; |
207 | ||
4b5f32ce NP |
208 | extern struct meminfo meminfo; |
209 | ||
be370302 RK |
210 | #define for_each_bank(iter,mi) \ |
211 | for (iter = 0; iter < (mi)->nr_banks; iter++) | |
d2a38ef9 RK |
212 | |
213 | #define bank_pfn_start(bank) __phys_to_pfn((bank)->start) | |
214 | #define bank_pfn_end(bank) __phys_to_pfn((bank)->start + (bank)->size) | |
215 | #define bank_pfn_size(bank) ((bank)->size >> PAGE_SHIFT) | |
216 | #define bank_phys_start(bank) (bank)->start | |
217 | #define bank_phys_end(bank) ((bank)->start + (bank)->size) | |
218 | #define bank_phys_size(bank) (bank)->size | |
219 | ||
9eb8f674 GL |
220 | extern int arm_add_memory(phys_addr_t start, unsigned long size); |
221 | ||
7d1362c0 AB |
222 | #endif /* __KERNEL__ */ |
223 | ||
1da177e4 | 224 | #endif |