1
2
3
4
5
6
7
8
9
10
11#ifndef __ASSEMBLY__
12
13struct tag;
14struct meminfo;
15struct pt_regs;
16struct smp_operations;
17#ifdef CONFIG_SMP
18#define smp_ops(ops) (&(ops))
19#else
20#define smp_ops(ops) (struct smp_operations *)NULL
21#endif
22
23struct machine_desc {
24 unsigned int nr;
25 const char *name;
26 unsigned long atag_offset;
27 const char *const *dt_compat;
28
29
30 unsigned int nr_irqs;
31
32#ifdef CONFIG_ZONE_DMA
33 unsigned long dma_zone_size;
34#endif
35
36 unsigned int video_start;
37 unsigned int video_end;
38
39 unsigned char reserve_lp0 :1;
40 unsigned char reserve_lp1 :1;
41 unsigned char reserve_lp2 :1;
42 char restart_mode;
43 struct smp_operations *smp;
44 void (*fixup)(struct tag *, char **,
45 struct meminfo *);
46 void (*reserve)(void);
47 void (*map_io)(void);
48 void (*init_early)(void);
49 void (*init_irq)(void);
50 void (*init_time)(void);
51 void (*init_machine)(void);
52 void (*init_late)(void);
53#ifdef CONFIG_MULTI_IRQ_HANDLER
54 void (*handle_irq)(struct pt_regs *);
55#endif
56 void (*restart)(char, const char *);
57};
58
59
60
61
62extern struct machine_desc *machine_desc;
63
64
65
66
67extern struct machine_desc __arch_info_begin[], __arch_info_end[];
68#define for_each_machine_desc(p) \
69 for (p = __arch_info_begin; p < __arch_info_end; p++)
70
71
72
73
74
75#define MACHINE_START(_type,_name) \
76static const struct machine_desc __mach_desc_##_type \
77 __used \
78 __attribute__((__section__(".arch.info.init"))) = { \
79 .nr = MACH_TYPE_##_type, \
80 .name = _name,
81
82#define MACHINE_END \
83};
84
85#define DT_MACHINE_START(_name, _namestr) \
86static const struct machine_desc __mach_desc_##_name \
87 __used \
88 __attribute__((__section__(".arch.info.init"))) = { \
89 .nr = ~0, \
90 .name = _namestr,
91
92#endif
93