hc
2023-12-11 6778948f9de86c3cfaf36725a7c87dcff9ba247f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
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
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
/*
 *  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.rst
 *  for more info.
 */
#ifndef _UAPI__ASMARM_SETUP_H
#define _UAPI__ASMARM_SETUP_H
 
#include <linux/types.h>
 
#define COMMAND_LINE_SIZE 2048
 
/* The list ends with an ATAG_NONE node. */
#define ATAG_NONE    0x00000000
 
struct tag_header {
   __u32 size;
   __u32 tag;
};
 
/* The list must start with an ATAG_CORE node */
#define ATAG_CORE    0x54410001
 
struct tag_core {
   __u32 flags;        /* bit 0 = read-only */
   __u32 pagesize;
   __u32 rootdev;
};
 
/* it is allowed to have multiple ATAG_MEM nodes */
#define ATAG_MEM    0x54410002
 
struct tag_mem32 {
   __u32    size;
   __u32    start;    /* physical start address */
};
 
/* VGA text type displays */
#define ATAG_VIDEOTEXT    0x54410003
 
struct tag_videotext {
   __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;
};
 
/* describes how the ramdisk will be used in kernel */
#define ATAG_RAMDISK    0x54410004
 
struct tag_ramdisk {
   __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 */
};
 
/* 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 {
   __u32 start;    /* physical start address */
   __u32 size;    /* size of compressed ramdisk image in bytes */
};
 
/* board serial number. "64 bits should be enough for everybody" */
#define ATAG_SERIAL    0x54410006
 
struct tag_serialnr {
   __u32 low;
   __u32 high;
};
 
/* board revision */
#define ATAG_REVISION    0x54410007
 
struct tag_revision {
   __u32 rev;
};
 
/* initial values for vesafb-type framebuffers. see struct screen_info
 * in include/linux/tty.h
 */
#define ATAG_VIDEOLFB    0x54410008
 
struct tag_videolfb {
   __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;
};
 
/* 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 {
   __u32 memc_control_reg;
   __u32 vram_pages;
   __u8 sounddefault;
   __u8 adfsdrives;
};
 
/* footbridge memory clock, see arch/arm/mach-footbridge/arch.c */
#define ATAG_MEMCLK    0x41000402
 
struct tag_memclk {
   __u32 fmemclk;
};
 
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 {
   __u32 tag;
   int (*parse)(const struct tag *);
};
 
#define tag_member_present(tag,member)                \
   ((unsigned long)(&((struct tag *)0L)->member + 1)    \
       <= (tag)->hdr.size * 4)
 
#define tag_next(t)    ((struct tag *)((__u32 *)(t) + (t)->hdr.size))
#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))
 
 
#endif /* _UAPI__ASMARM_SETUP_H */