setup.h 4.75 KB
Newer Older
Linus Torvalds's avatar
Linus Torvalds committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/*
 *  linux/include/asm/setup.h
 *
 *  Copyright (C) 1997-1999 Russell King
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 *
 *  Structure passed to kernel to tell it about the
 *  hardware it's running on.  See Documentation/arm/Setup
 *  for more info.
 */
#ifndef __ASMARM_SETUP_H
#define __ASMARM_SETUP_H

17
#include <linux/types.h>
18

Linus Torvalds's avatar
Linus Torvalds committed
19
20
21
22
23
24
#define COMMAND_LINE_SIZE 1024

/* The list ends with an ATAG_NONE node. */
#define ATAG_NONE	0x00000000

struct tag_header {
25
26
	__u32 size;
	__u32 tag;
Linus Torvalds's avatar
Linus Torvalds committed
27
28
29
30
31
32
};

/* The list must start with an ATAG_CORE node */
#define ATAG_CORE	0x54410001

struct tag_core {
33
34
35
	__u32 flags;		/* bit 0 = read-only */
	__u32 pagesize;
	__u32 rootdev;
Linus Torvalds's avatar
Linus Torvalds committed
36
37
38
39
40
41
};

/* it is allowed to have multiple ATAG_MEM nodes */
#define ATAG_MEM	0x54410002

struct tag_mem32 {
42
43
	__u32	size;
	__u32	start;	/* physical start address */
Linus Torvalds's avatar
Linus Torvalds committed
44
45
46
47
48
49
};

/* VGA text type displays */
#define ATAG_VIDEOTEXT	0x54410003

struct tag_videotext {
50
51
52
53
54
55
56
57
58
	__u8		x;
	__u8		y;
	__u16		video_page;
	__u8		video_mode;
	__u8		video_cols;
	__u16		video_ega_bx;
	__u8		video_lines;
	__u8		video_isvga;
	__u16		video_points;
Linus Torvalds's avatar
Linus Torvalds committed
59
60
61
62
63
64
};

/* describes how the ramdisk will be used in kernel */
#define ATAG_RAMDISK	0x54410004

struct tag_ramdisk {
65
66
67
	__u32 flags;	/* bit 0 = load, bit 1 = prompt */
	__u32 size;	/* decompressed ramdisk size in _kilo_ bytes */
	__u32 start;	/* starting block of floppy-based RAM disk image */
Linus Torvalds's avatar
Linus Torvalds committed
68
69
70
71
72
73
74
75
76
77
78
79
80
};

/* describes where the compressed ramdisk image lives (virtual address) */
/*
 * this one accidentally used virtual addresses - as such,
 * it's deprecated.
 */
#define ATAG_INITRD	0x54410005

/* describes where the compressed ramdisk image lives (physical address) */
#define ATAG_INITRD2	0x54420005

struct tag_initrd {
81
82
	__u32 start;	/* physical start address */
	__u32 size;	/* size of compressed ramdisk image in bytes */
Linus Torvalds's avatar
Linus Torvalds committed
83
84
85
86
87
88
};

/* board serial number. "64 bits should be enough for everybody" */
#define ATAG_SERIAL	0x54410006

struct tag_serialnr {
89
90
	__u32 low;
	__u32 high;
Linus Torvalds's avatar
Linus Torvalds committed
91
92
93
94
95
96
};

/* board revision */
#define ATAG_REVISION	0x54410007

struct tag_revision {
97
	__u32 rev;
Linus Torvalds's avatar
Linus Torvalds committed
98
99
100
101
102
103
104
105
};

/* initial values for vesafb-type framebuffers. see struct screen_info
 * in include/linux/tty.h
 */
#define ATAG_VIDEOLFB	0x54410008

struct tag_videolfb {
106
107
108
109
110
111
112
113
114
115
116
117
118
119
	__u16		lfb_width;
	__u16		lfb_height;
	__u16		lfb_depth;
	__u16		lfb_linelength;
	__u32		lfb_base;
	__u32		lfb_size;
	__u8		red_size;
	__u8		red_pos;
	__u8		green_size;
	__u8		green_pos;
	__u8		blue_size;
	__u8		blue_pos;
	__u8		rsvd_size;
	__u8		rsvd_pos;
Linus Torvalds's avatar
Linus Torvalds committed
120
121
122
123
124
125
126
127
128
129
130
131
132
};

/* command line: \0 terminated string */
#define ATAG_CMDLINE	0x54410009

struct tag_cmdline {
	char	cmdline[1];	/* this is the minimum size */
};

/* acorn RiscPC specific information */
#define ATAG_ACORN	0x41000101

struct tag_acorn {
133
134
135
136
	__u32 memc_control_reg;
	__u32 vram_pages;
	__u8 sounddefault;
	__u8 adfsdrives;
Linus Torvalds's avatar
Linus Torvalds committed
137
138
139
140
141
142
};

/* footbridge memory clock, see arch/arm/mach-footbridge/arch.c */
#define ATAG_MEMCLK	0x41000402

struct tag_memclk {
143
	__u32 fmemclk;
Linus Torvalds's avatar
Linus Torvalds committed
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
};

struct tag {
	struct tag_header hdr;
	union {
		struct tag_core		core;
		struct tag_mem32	mem;
		struct tag_videotext	videotext;
		struct tag_ramdisk	ramdisk;
		struct tag_initrd	initrd;
		struct tag_serialnr	serialnr;
		struct tag_revision	revision;
		struct tag_videolfb	videolfb;
		struct tag_cmdline	cmdline;

		/*
		 * Acorn specific
		 */
		struct tag_acorn	acorn;

		/*
		 * DC21285 specific
		 */
		struct tag_memclk	memclk;
	} u;
};

struct tagtable {
172
	__u32 tag;
Linus Torvalds's avatar
Linus Torvalds committed
173
174
175
176
177
178
179
	int (*parse)(const struct tag *);
};

#define tag_member_present(tag,member)				\
	((unsigned long)(&((struct tag *)0L)->member + 1)	\
		<= (tag)->hdr.size * 4)

180
#define tag_next(t)	((struct tag *)((__u32 *)(t) + (t)->hdr.size))
Linus Torvalds's avatar
Linus Torvalds committed
181
182
183
184
185
#define tag_size(type)	((sizeof(struct tag_header) + sizeof(struct type)) >> 2)

#define for_each_tag(t,base)		\
	for (t = base; t->hdr.size; t = tag_next(t))

186
187
#ifdef __KERNEL__

David Rientjes's avatar
David Rientjes committed
188
#define __tag __used __attribute__((__section__(".taglist.init")))
189
190
191
#define __tagtable(tag, fn) \
static struct tagtable __tagtable_##fn __tag = { tag, fn }

Linus Torvalds's avatar
Linus Torvalds committed
192
193
194
195
196
197
198
199
200
/*
 * Memory map description
 */
#ifdef CONFIG_ARCH_LH7A40X
# define NR_BANKS 16
#else
# define NR_BANKS 8
#endif

201
202
203
struct membank {
	unsigned long start;
	unsigned long size;
204
	unsigned int highmem;
205
206
};

Linus Torvalds's avatar
Linus Torvalds committed
207
208
struct meminfo {
	int nr_banks;
209
	struct membank bank[NR_BANKS];
Linus Torvalds's avatar
Linus Torvalds committed
210
211
};

212
213
extern struct meminfo meminfo;

214
215
#define for_each_bank(iter,mi)				\
	for (iter = 0; iter < (mi)->nr_banks; iter++)
216
217
218
219
220
221
222
223

#define bank_pfn_start(bank)	__phys_to_pfn((bank)->start)
#define bank_pfn_end(bank)	__phys_to_pfn((bank)->start + (bank)->size)
#define bank_pfn_size(bank)	((bank)->size >> PAGE_SHIFT)
#define bank_phys_start(bank)	(bank)->start
#define bank_phys_end(bank)	((bank)->start + (bank)->size)
#define bank_phys_size(bank)	(bank)->size

224
225
#endif  /*  __KERNEL__  */

Linus Torvalds's avatar
Linus Torvalds committed
226
#endif