setup.h 4.6 KB
Newer Older
L
Linus Torvalds 已提交
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 18
#include <asm/types.h>

L
Linus Torvalds 已提交
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;
L
Linus Torvalds 已提交
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;
L
Linus Torvalds 已提交
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 */
L
Linus Torvalds 已提交
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;
L
Linus Torvalds 已提交
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 */
L
Linus Torvalds 已提交
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 */
L
Linus Torvalds 已提交
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;
L
Linus Torvalds 已提交
91 92 93 94 95 96
};

/* board revision */
#define ATAG_REVISION	0x54410007

struct tag_revision {
97
	__u32 rev;
L
Linus Torvalds 已提交
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;
L
Linus Torvalds 已提交
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;
L
Linus Torvalds 已提交
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;
L
Linus Torvalds 已提交
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;
L
Linus Torvalds 已提交
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))
L
Linus Torvalds 已提交
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__

D
David Rientjes 已提交
188
#define __tag __used __attribute__((__section__(".taglist.init")))
189 190 191
#define __tagtable(tag, fn) \
static struct tagtable __tagtable_##fn __tag = { tag, fn }

L
Linus Torvalds 已提交
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 204 205 206
struct membank {
	unsigned long start;
	unsigned long size;
	int           node;
};

L
Linus Torvalds 已提交
207 208
struct meminfo {
	int nr_banks;
209
	struct membank bank[NR_BANKS];
L
Linus Torvalds 已提交
210 211 212 213 214 215 216 217 218 219 220
};

/*
 * Early command line parameters.
 */
struct early_params {
	const char *arg;
	void (*fn)(char **p);
};

#define __early_param(name,fn)					\
D
David Rientjes 已提交
221
static struct early_params __early_##fn __used			\
222
__attribute__((__section__(".early_param.init"))) = { name, fn }
L
Linus Torvalds 已提交
223

224 225
#endif  /*  __KERNEL__  */

L
Linus Torvalds 已提交
226
#endif