OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [include/] [asm-arm/] [setup.h] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1276 phoenix
/*
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 linux/Documentation/arm/Setup
12
 *  for more info.
13
 *
14
 * NOTE:
15
 *  This file contains two ways to pass information from the boot
16
 *  loader to the kernel. The old struct param_struct is deprecated,
17
 *  but it will be kept in the kernel for 5 years from now
18
 *  (2001). This will allow boot loaders to convert to the new struct
19
 *  tag way.
20
 */
21
#ifndef __ASMARM_SETUP_H
22
#define __ASMARM_SETUP_H
23
 
24
/*
25
 * Usage:
26
 *  - do not go blindly adding fields, add them at the end
27
 *  - when adding fields, don't rely on the address until
28
 *    a patch from me has been released
29
 *  - unused fields should be zero (for future expansion)
30
 *  - this structure is relatively short-lived - only
31
 *    guaranteed to contain useful data in setup_arch()
32
 */
33
#define COMMAND_LINE_SIZE 1024
34
 
35
/* This is the old deprecated way to pass parameters to the kernel */
36
struct param_struct {
37
    union {
38
        struct {
39
            unsigned long page_size;            /*  0 */
40
            unsigned long nr_pages;             /*  4 */
41
            unsigned long ramdisk_size;         /*  8 */
42
            unsigned long flags;                /* 12 */
43
#define FLAG_READONLY   1
44
#define FLAG_RDLOAD     4
45
#define FLAG_RDPROMPT   8
46
            unsigned long rootdev;              /* 16 */
47
            unsigned long video_num_cols;       /* 20 */
48
            unsigned long video_num_rows;       /* 24 */
49
            unsigned long video_x;              /* 28 */
50
            unsigned long video_y;              /* 32 */
51
            unsigned long memc_control_reg;     /* 36 */
52
            unsigned char sounddefault;         /* 40 */
53
            unsigned char adfsdrives;           /* 41 */
54
            unsigned char bytes_per_char_h;     /* 42 */
55
            unsigned char bytes_per_char_v;     /* 43 */
56
            unsigned long pages_in_bank[4];     /* 44 */
57
            unsigned long pages_in_vram;        /* 60 */
58
            unsigned long initrd_start;         /* 64 */
59
            unsigned long initrd_size;          /* 68 */
60
            unsigned long rd_start;             /* 72 */
61
            unsigned long system_rev;           /* 76 */
62
            unsigned long system_serial_low;    /* 80 */
63
            unsigned long system_serial_high;   /* 84 */
64
            unsigned long mem_fclk_21285;       /* 88 */
65
        } s;
66
        char unused[256];
67
    } u1;
68
    union {
69
        char paths[8][128];
70
        struct {
71
            unsigned long magic;
72
            char n[1024 - sizeof(unsigned long)];
73
        } s;
74
    } u2;
75
    char commandline[COMMAND_LINE_SIZE];
76
};
77
 
78
 
79
 
80
/*
81
 * The new way of passing information: a list of tagged entries
82
 */
83
 
84
/* The list ends with an ATAG_NONE node. */
85
#define ATAG_NONE       0x00000000
86
 
87
struct tag_header {
88
        u32 size;
89
        u32 tag;
90
};
91
 
92
/* The list must start with an ATAG_CORE node */
93
#define ATAG_CORE       0x54410001
94
 
95
struct tag_core {
96
        u32 flags;              /* bit 0 = read-only */
97
        u32 pagesize;
98
        u32 rootdev;
99
};
100
 
101
/* it is allowed to have multiple ATAG_MEM nodes */
102
#define ATAG_MEM        0x54410002
103
 
104
struct tag_mem32 {
105
        u32     size;
106
        u32     start;  /* physical start address */
107
};
108
 
109
/* VGA text type displays */
110
#define ATAG_VIDEOTEXT  0x54410003
111
 
112
struct tag_videotext {
113
        u8              x;
114
        u8              y;
115
        u16             video_page;
116
        u8              video_mode;
117
        u8              video_cols;
118
        u16             video_ega_bx;
119
        u8              video_lines;
120
        u8              video_isvga;
121
        u16             video_points;
122
};
123
 
124
/* describes how the ramdisk will be used in kernel */
125
#define ATAG_RAMDISK    0x54410004
126
 
127
struct tag_ramdisk {
128
        u32 flags;      /* bit 0 = load, bit 1 = prompt */
129
        u32 size;       /* decompressed ramdisk size in _kilo_ bytes */
130
        u32 start;      /* starting block of floppy-based RAM disk image */
131
};
132
 
133
/* describes where the compressed ramdisk image lives (virtual address) */
134
/*
135
 * this one accidentally used virtual addresses - as such,
136
 * its depreciated.
137
 */
138
#define ATAG_INITRD     0x54410005
139
 
140
/* describes where the compressed ramdisk image lives (physical address) */
141
#define ATAG_INITRD2    0x54420005
142
 
143
struct tag_initrd {
144
        u32 start;      /* physical start address */
145
        u32 size;       /* size of compressed ramdisk image in bytes */
146
};
147
 
148
/* board serial number. "64 bits should be enough for everybody" */
149
#define ATAG_SERIAL     0x54410006
150
 
151
struct tag_serialnr {
152
        u32 low;
153
        u32 high;
154
};
155
 
156
/* board revision */
157
#define ATAG_REVISION   0x54410007
158
 
159
struct tag_revision {
160
        u32 rev;
161
};
162
 
163
/* initial values for vesafb-type framebuffers. see struct screen_info
164
 * in include/linux/tty.h
165
 */
166
#define ATAG_VIDEOLFB   0x54410008
167
 
168
struct tag_videolfb {
169
        u16             lfb_width;
170
        u16             lfb_height;
171
        u16             lfb_depth;
172
        u16             lfb_linelength;
173
        u32             lfb_base;
174
        u32             lfb_size;
175
        u8              red_size;
176
        u8              red_pos;
177
        u8              green_size;
178
        u8              green_pos;
179
        u8              blue_size;
180
        u8              blue_pos;
181
        u8              rsvd_size;
182
        u8              rsvd_pos;
183
};
184
 
185
/* command line: \0 terminated string */
186
#define ATAG_CMDLINE    0x54410009
187
 
188
struct tag_cmdline {
189
        char    cmdline[1];     /* this is the minimum size */
190
};
191
 
192
/* acorn RiscPC specific information */
193
#define ATAG_ACORN      0x41000101
194
 
195
struct tag_acorn {
196
        u32 memc_control_reg;
197
        u32 vram_pages;
198
        u8 sounddefault;
199
        u8 adfsdrives;
200
};
201
 
202
/* footbridge memory clock, see arch/arm/mach-footbridge/arch.c */
203
#define ATAG_MEMCLK     0x41000402
204
 
205
struct tag_memclk {
206
        u32 fmemclk;
207
};
208
 
209
struct tag {
210
        struct tag_header hdr;
211
        union {
212
                struct tag_core         core;
213
                struct tag_mem32        mem;
214
                struct tag_videotext    videotext;
215
                struct tag_ramdisk      ramdisk;
216
                struct tag_initrd       initrd;
217
                struct tag_serialnr     serialnr;
218
                struct tag_revision     revision;
219
                struct tag_videolfb     videolfb;
220
                struct tag_cmdline      cmdline;
221
 
222
                /*
223
                 * Acorn specific
224
                 */
225
                struct tag_acorn        acorn;
226
 
227
                /*
228
                 * DC21285 specific
229
                 */
230
                struct tag_memclk       memclk;
231
        } u;
232
};
233
 
234
struct tagtable {
235
        u32 tag;
236
        int (*parse)(const struct tag *);
237
};
238
 
239
#define __tag __attribute__((unused, __section__(".taglist")))
240
#define __tagtable(tag, fn) \
241
static struct tagtable __tagtable_##fn __tag = { tag, fn }
242
 
243
#define tag_member_present(tag,member)                          \
244
        ((unsigned long)(&((struct tag *)0L)->member + 1)       \
245
                <= (tag)->hdr.size * 4)
246
 
247
#define tag_next(t)     ((struct tag *)((u32 *)(t) + (t)->hdr.size))
248
#define tag_size(type)  ((sizeof(struct tag_header) + sizeof(struct type)) >> 2)
249
 
250
#define for_each_tag(t,base)            \
251
        for (t = base; t->hdr.size; t = tag_next(t))
252
 
253
/*
254
 * Memory map description
255
 */
256
#define NR_BANKS 8
257
 
258
struct meminfo {
259
        int nr_banks;
260
        unsigned long end;
261
        struct {
262
                unsigned long start;
263
                unsigned long size;
264
                int           node;
265
        } bank[NR_BANKS];
266
};
267
 
268
extern struct meminfo meminfo;
269
 
270
#endif

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.