1 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2 /*
3  *  linux/include/asm/setup.h
4  *
5  *  Copyright (C) 1997-1999 Russell King
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License version 2 as
9  * published by the Free Software Foundation.
10  *
11  *  Structure passed to kernel to tell it about the
12  *  hardware it's running on.  See Documentation/arm/setup.rst
13  *  for more info.
14  */
15 #ifndef _UAPI__ASMARM_SETUP_H
16 #define _UAPI__ASMARM_SETUP_H
17 
18 #include <linux/types.h>
19 
20 #define COMMAND_LINE_SIZE 1024
21 
22 /* The list ends with an ATAG_NONE node. */
23 #define ATAG_NONE	0x00000000
24 
25 struct tag_header {
26 	__u32 size;
27 	__u32 tag;
28 };
29 
30 /* The list must start with an ATAG_CORE node */
31 #define ATAG_CORE	0x54410001
32 
33 struct tag_core {
34 	__u32 flags;		/* bit 0 = read-only */
35 	__u32 pagesize;
36 	__u32 rootdev;
37 };
38 
39 /* it is allowed to have multiple ATAG_MEM nodes */
40 #define ATAG_MEM	0x54410002
41 
42 struct tag_mem32 {
43 	__u32	size;
44 	__u32	start;	/* physical start address */
45 };
46 
47 /* VGA text type displays */
48 #define ATAG_VIDEOTEXT	0x54410003
49 
50 struct tag_videotext {
51 	__u8		x;
52 	__u8		y;
53 	__u16		video_page;
54 	__u8		video_mode;
55 	__u8		video_cols;
56 	__u16		video_ega_bx;
57 	__u8		video_lines;
58 	__u8		video_isvga;
59 	__u16		video_points;
60 };
61 
62 /* describes how the ramdisk will be used in kernel */
63 #define ATAG_RAMDISK	0x54410004
64 
65 struct tag_ramdisk {
66 	__u32 flags;	/* bit 0 = load, bit 1 = prompt */
67 	__u32 size;	/* decompressed ramdisk size in _kilo_ bytes */
68 	__u32 start;	/* starting block of floppy-based RAM disk image */
69 };
70 
71 /* describes where the compressed ramdisk image lives (virtual address) */
72 /*
73  * this one accidentally used virtual addresses - as such,
74  * it's deprecated.
75  */
76 #define ATAG_INITRD	0x54410005
77 
78 /* describes where the compressed ramdisk image lives (physical address) */
79 #define ATAG_INITRD2	0x54420005
80 
81 struct tag_initrd {
82 	__u32 start;	/* physical start address */
83 	__u32 size;	/* size of compressed ramdisk image in bytes */
84 };
85 
86 /* board serial number. "64 bits should be enough for everybody" */
87 #define ATAG_SERIAL	0x54410006
88 
89 struct tag_serialnr {
90 	__u32 low;
91 	__u32 high;
92 };
93 
94 /* board revision */
95 #define ATAG_REVISION	0x54410007
96 
97 struct tag_revision {
98 	__u32 rev;
99 };
100 
101 /* initial values for vesafb-type framebuffers. see struct screen_info
102  * in include/linux/tty.h
103  */
104 #define ATAG_VIDEOLFB	0x54410008
105 
106 struct tag_videolfb {
107 	__u16		lfb_width;
108 	__u16		lfb_height;
109 	__u16		lfb_depth;
110 	__u16		lfb_linelength;
111 	__u32		lfb_base;
112 	__u32		lfb_size;
113 	__u8		red_size;
114 	__u8		red_pos;
115 	__u8		green_size;
116 	__u8		green_pos;
117 	__u8		blue_size;
118 	__u8		blue_pos;
119 	__u8		rsvd_size;
120 	__u8		rsvd_pos;
121 };
122 
123 /* command line: \0 terminated string */
124 #define ATAG_CMDLINE	0x54410009
125 
126 struct tag_cmdline {
127 	char	cmdline[1];	/* this is the minimum size */
128 };
129 
130 /* acorn RiscPC specific information */
131 #define ATAG_ACORN	0x41000101
132 
133 struct tag_acorn {
134 	__u32 memc_control_reg;
135 	__u32 vram_pages;
136 	__u8 sounddefault;
137 	__u8 adfsdrives;
138 };
139 
140 /* footbridge memory clock, see arch/arm/mach-footbridge/arch.c */
141 #define ATAG_MEMCLK	0x41000402
142 
143 struct tag_memclk {
144 	__u32 fmemclk;
145 };
146 
147 struct tag {
148 	struct tag_header hdr;
149 	union {
150 		struct tag_core		core;
151 		struct tag_mem32	mem;
152 		struct tag_videotext	videotext;
153 		struct tag_ramdisk	ramdisk;
154 		struct tag_initrd	initrd;
155 		struct tag_serialnr	serialnr;
156 		struct tag_revision	revision;
157 		struct tag_videolfb	videolfb;
158 		struct tag_cmdline	cmdline;
159 
160 		/*
161 		 * Acorn specific
162 		 */
163 		struct tag_acorn	acorn;
164 
165 		/*
166 		 * DC21285 specific
167 		 */
168 		struct tag_memclk	memclk;
169 	} u;
170 };
171 
172 struct tagtable {
173 	__u32 tag;
174 	int (*parse)(const struct tag *);
175 };
176 
177 #define tag_member_present(tag,member)				\
178 	((unsigned long)(&((struct tag *)0L)->member + 1)	\
179 		<= (tag)->hdr.size * 4)
180 
181 #define tag_next(t)	((struct tag *)((__u32 *)(t) + (t)->hdr.size))
182 #define tag_size(type)	((sizeof(struct tag_header) + sizeof(struct type)) >> 2)
183 
184 #define for_each_tag(t,base)		\
185 	for (t = base; t->hdr.size; t = tag_next(t))
186 
187 
188 #endif /* _UAPI__ASMARM_SETUP_H */
189