Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
arch.h
Go to the documentation of this file.
1 /*
2  * arch/arm/include/asm/mach/arch.h
3  *
4  * Copyright (C) 2000 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 
11 #ifndef __ASSEMBLY__
12 
13 struct tag;
14 struct meminfo;
15 struct sys_timer;
16 struct pt_regs;
17 struct smp_operations;
18 #ifdef CONFIG_SMP
19 #define smp_ops(ops) (&(ops))
20 #else
21 #define smp_ops(ops) (struct smp_operations *)NULL
22 #endif
23 
24 struct machine_desc {
25  unsigned int nr; /* architecture number */
26  const char *name; /* architecture name */
27  unsigned long atag_offset; /* tagged list (relative) */
28  const char *const *dt_compat; /* array of device tree
29  * 'compatible' strings */
30 
31  unsigned int nr_irqs; /* number of IRQs */
32 
33 #ifdef CONFIG_ZONE_DMA
34  unsigned long dma_zone_size; /* size of DMA-able area */
35 #endif
36 
37  unsigned int video_start; /* start of video RAM */
38  unsigned int video_end; /* end of video RAM */
39 
40  unsigned char reserve_lp0 :1; /* never has lp0 */
41  unsigned char reserve_lp1 :1; /* never has lp1 */
42  unsigned char reserve_lp2 :1; /* never has lp2 */
43  char restart_mode; /* default restart mode */
44  struct smp_operations *smp; /* SMP operations */
45  void (*fixup)(struct tag *, char **,
46  struct meminfo *);
47  void (*reserve)(void);/* reserve mem blocks */
48  void (*map_io)(void);/* IO mapping function */
51  struct sys_timer *timer; /* system tick timer */
54 #ifdef CONFIG_MULTI_IRQ_HANDLER
55  void (*handle_irq)(struct pt_regs *);
56 #endif
57  void (*restart)(char, const char *);
58 };
59 
60 /*
61  * Current machine - only accessible during boot.
62  */
63 extern struct machine_desc *machine_desc;
64 
65 /*
66  * Machine type table - also only accessible during boot
67  */
68 extern struct machine_desc __arch_info_begin[], __arch_info_end[];
69 #define for_each_machine_desc(p) \
70  for (p = __arch_info_begin; p < __arch_info_end; p++)
71 
72 /*
73  * Set of macros to define architecture features. This is built into
74  * a table by the linker.
75  */
76 #define MACHINE_START(_type,_name) \
77 static const struct machine_desc __mach_desc_##_type \
78  __used \
79  __attribute__((__section__(".arch.info.init"))) = { \
80  .nr = MACH_TYPE_##_type, \
81  .name = _name,
82 
83 #define MACHINE_END \
84 };
85 
86 #define DT_MACHINE_START(_name, _namestr) \
87 static const struct machine_desc __mach_desc_##_name \
88  __used \
89  __attribute__((__section__(".arch.info.init"))) = { \
90  .nr = ~0, \
91  .name = _namestr,
92 
93 #endif