Linux kernel & device driver programming

Cross-Referenced Linux and Device Driver Code

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]
Version: [ 2.6.11.8 ] [ 2.6.25 ] [ 2.6.25.8 ] [ 2.6.31.13 ] Architecture: [ i386 ]
  1 /*
  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 Documentation/arm/Setup
 12  *  for more info.
 13  */
 14 #ifndef __ASMARM_SETUP_H
 15 #define __ASMARM_SETUP_H
 16 
 17 #include <linux/types.h>
 18 
 19 #define COMMAND_LINE_SIZE 1024
 20 
 21 /* The list ends with an ATAG_NONE node. */
 22 #define ATAG_NONE       0x00000000
 23 
 24 struct tag_header {
 25         __u32 size;
 26         __u32 tag;
 27 };
 28 
 29 /* The list must start with an ATAG_CORE node */
 30 #define ATAG_CORE       0x54410001
 31 
 32 struct tag_core {
 33         __u32 flags;            /* bit 0 = read-only */
 34         __u32 pagesize;
 35         __u32 rootdev;
 36 };
 37 
 38 /* it is allowed to have multiple ATAG_MEM nodes */
 39 #define ATAG_MEM        0x54410002
 40 
 41 struct tag_mem32 {
 42         __u32   size;
 43         __u32   start;  /* physical start address */
 44 };
 45 
 46 /* VGA text type displays */
 47 #define ATAG_VIDEOTEXT  0x54410003
 48 
 49 struct tag_videotext {
 50         __u8            x;
 51         __u8            y;
 52         __u16           video_page;
 53         __u8            video_mode;
 54         __u8            video_cols;
 55         __u16           video_ega_bx;
 56         __u8            video_lines;
 57         __u8            video_isvga;
 58         __u16           video_points;
 59 };
 60 
 61 /* describes how the ramdisk will be used in kernel */
 62 #define ATAG_RAMDISK    0x54410004
 63 
 64 struct tag_ramdisk {
 65         __u32 flags;    /* bit 0 = load, bit 1 = prompt */
 66         __u32 size;     /* decompressed ramdisk size in _kilo_ bytes */
 67         __u32 start;    /* starting block of floppy-based RAM disk image */
 68 };
 69 
 70 /* describes where the compressed ramdisk image lives (virtual address) */
 71 /*
 72  * this one accidentally used virtual addresses - as such,
 73  * it's deprecated.
 74  */
 75 #define ATAG_INITRD     0x54410005
 76 
 77 /* describes where the compressed ramdisk image lives (physical address) */
 78 #define ATAG_INITRD2    0x54420005
 79 
 80 struct tag_initrd {
 81         __u32 start;    /* physical start address */
 82         __u32 size;     /* size of compressed ramdisk image in bytes */
 83 };
 84 
 85 /* board serial number. "64 bits should be enough for everybody" */
 86 #define ATAG_SERIAL     0x54410006
 87 
 88 struct tag_serialnr {
 89         __u32 low;
 90         __u32 high;
 91 };
 92 
 93 /* board revision */
 94 #define ATAG_REVISION   0x54410007
 95 
 96 struct tag_revision {
 97         __u32 rev;
 98 };
 99 
100 /* initial values for vesafb-type framebuffers. see struct screen_info
101  * in include/linux/tty.h
102  */
103 #define ATAG_VIDEOLFB   0x54410008
104 
105 struct tag_videolfb {
106         __u16           lfb_width;
107         __u16           lfb_height;
108         __u16           lfb_depth;
109         __u16           lfb_linelength;
110         __u32           lfb_base;
111         __u32           lfb_size;
112         __u8            red_size;
113         __u8            red_pos;
114         __u8            green_size;
115         __u8            green_pos;
116         __u8            blue_size;
117         __u8            blue_pos;
118         __u8            rsvd_size;
119         __u8            rsvd_pos;
120 };
121 
122 /* command line: \0 terminated string */
123 #define ATAG_CMDLINE    0x54410009
124 
125 struct tag_cmdline {
126         char    cmdline[1];     /* this is the minimum size */
127 };
128 
129 /* acorn RiscPC specific information */
130 #define ATAG_ACORN      0x41000101
131 
132 struct tag_acorn {
133         __u32 memc_control_reg;
134         __u32 vram_pages;
135         __u8 sounddefault;
136         __u8 adfsdrives;
137 };
138 
139 /* footbridge memory clock, see arch/arm/mach-footbridge/arch.c */
140 #define ATAG_MEMCLK     0x41000402
141 
142 struct tag_memclk {
143         __u32 fmemclk;
144 };
145 
146 struct tag {
147         struct tag_header hdr;
148         union {
149                 struct tag_core         core;
150                 struct tag_mem32        mem;
151                 struct tag_videotext    videotext;
152                 struct tag_ramdisk      ramdisk;
153                 struct tag_initrd       initrd;
154                 struct tag_serialnr     serialnr;
155                 struct tag_revision     revision;
156                 struct tag_videolfb     videolfb;
157                 struct tag_cmdline      cmdline;
158 
159                 /*
160                  * Acorn specific
161                  */
162                 struct tag_acorn        acorn;
163 
164                 /*
165                  * DC21285 specific
166                  */
167                 struct tag_memclk       memclk;
168         } u;
169 };
170 
171 struct tagtable {
172         __u32 tag;
173         int (*parse)(const struct tag *);
174 };
175 
176 #define tag_member_present(tag,member)                          \
177         ((unsigned long)(&((struct tag *)0L)->member + 1)       \
178                 <= (tag)->hdr.size * 4)
179 
180 #define tag_next(t)     ((struct tag *)((__u32 *)(t) + (t)->hdr.size))
181 #define tag_size(type)  ((sizeof(struct tag_header) + sizeof(struct type)) >> 2)
182 
183 #define for_each_tag(t,base)            \
184         for (t = base; t->hdr.size; t = tag_next(t))
185 
186 #ifdef __KERNEL__
187 
188 #define __tag __used __attribute__((__section__(".taglist.init")))
189 #define __tagtable(tag, fn) \
190 static struct tagtable __tagtable_##fn __tag = { tag, fn }
191 
192 /*
193  * Memory map description
194  */
195 #ifdef CONFIG_ARCH_LH7A40X
196 # define NR_BANKS 16
197 #else
198 # define NR_BANKS 8
199 #endif
200 
201 struct membank {
202         unsigned long start;
203         unsigned long size;
204         unsigned short node;
205         unsigned short highmem;
206 };
207 
208 struct meminfo {
209         int nr_banks;
210         struct membank bank[NR_BANKS];
211 };
212 
213 extern struct meminfo meminfo;
214 
215 #define for_each_nodebank(iter,mi,no)                   \
216         for (iter = 0; iter < (mi)->nr_banks; iter++)   \
217                 if ((mi)->bank[iter].node == no)
218 
219 #define bank_pfn_start(bank)    __phys_to_pfn((bank)->start)
220 #define bank_pfn_end(bank)      __phys_to_pfn((bank)->start + (bank)->size)
221 #define bank_pfn_size(bank)     ((bank)->size >> PAGE_SHIFT)
222 #define bank_phys_start(bank)   (bank)->start
223 #define bank_phys_end(bank)     ((bank)->start + (bank)->size)
224 #define bank_phys_size(bank)    (bank)->size
225 
226 /*
227  * Early command line parameters.
228  */
229 struct early_params {
230         const char *arg;
231         void (*fn)(char **p);
232 };
233 
234 #define __early_param(name,fn)                                  \
235 static struct early_params __early_##fn __used                  \
236 __attribute__((__section__(".early_param.init"))) = { name, fn }
237 
238 #endif  /*  __KERNEL__  */
239 
240 #endif
241 
  This page was automatically generated by the LXR engine.