1
2
3
4
5
6
7
8
9
10
11
12
13#include <linux/config.h>
14#include <linux/init.h>
15#include <linux/mm.h>
16#include <linux/bootmem.h>
17#include <asm/pgtable.h>
18#include <linux/seq_file.h>
19#include <linux/tty.h>
20
21#include <asm/setup.h>
22
23
24
25
26struct drive_info_struct { char dummy[32]; } drive_info;
27struct screen_info screen_info;
28
29unsigned char aux_device_present;
30
31extern int root_mountflags;
32extern char _etext, _edata, _end;
33
34static char command_line[COMMAND_LINE_SIZE] = { 0, };
35
36extern const unsigned long text_start, edata;
37extern unsigned long dram_start, dram_end;
38
39extern unsigned long romfs_start, romfs_length, romfs_in_flash;
40
41extern void show_etrax_copyright(void);
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59void __init
60setup_arch(char **cmdline_p)
61{
62 extern void init_etrax_debug(void);
63 unsigned long bootmap_size;
64 unsigned long start_pfn, max_pfn;
65 unsigned long memory_start;
66
67
68
69 init_etrax_debug();
70
71
72
73 high_memory = &dram_end;
74
75 if(romfs_in_flash || !romfs_length) {
76
77
78
79 memory_start = (unsigned long) &_end;
80 } else {
81
82 printk("ROM fs in RAM, size %lu bytes\n", romfs_length);
83 memory_start = romfs_start + romfs_length;
84 }
85
86
87
88 init_mm.start_code = (unsigned long) &text_start;
89 init_mm.end_code = (unsigned long) &_etext;
90 init_mm.end_data = (unsigned long) &_edata;
91 init_mm.brk = (unsigned long) &_end;
92
93#define PFN_UP(x) (((x) + PAGE_SIZE-1) >> PAGE_SHIFT)
94#define PFN_DOWN(x) ((x) >> PAGE_SHIFT)
95#define PFN_PHYS(x) ((x) << PAGE_SHIFT)
96
97
98
99
100
101
102
103
104
105
106
107 start_pfn = PFN_UP(memory_start);
108 max_pfn = PFN_DOWN((unsigned long)high_memory);
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126 max_low_pfn = max_pfn;
127 min_low_pfn = PAGE_OFFSET >> PAGE_SHIFT;
128
129 bootmap_size = init_bootmem_node(NODE_DATA(0), start_pfn,
130 min_low_pfn,
131 max_low_pfn);
132
133
134
135 free_bootmem(PFN_PHYS(start_pfn), PFN_PHYS(max_pfn - start_pfn));
136
137
138
139
140
141
142
143
144
145
146 reserve_bootmem(PFN_PHYS(start_pfn), bootmap_size);
147
148
149
150 paging_init();
151
152
153
154
155 *cmdline_p = command_line;
156
157#ifdef CONFIG_ETRAX_CMDLINE
158 strlcpy(command_line, CONFIG_ETRAX_CMDLINE, COMMAND_LINE_SIZE);
159 command_line[COMMAND_LINE_SIZE - 1] = '\0';
160
161
162 memcpy(saved_command_line, command_line, COMMAND_LINE_SIZE);
163 saved_command_line[COMMAND_LINE_SIZE - 1] = '\0';
164#endif
165
166
167 show_etrax_copyright();
168}
169
170static void *c_start(struct seq_file *m, loff_t *pos)
171{
172
173 return *pos < 1 ? (void *)1 : NULL;
174}
175
176static void *c_next(struct seq_file *m, void *v, loff_t *pos)
177{
178 ++*pos;
179 return NULL;
180}
181
182static void c_stop(struct seq_file *m, void *v)
183{
184}
185
186extern int show_cpuinfo(struct seq_file *m, void *v);
187
188struct seq_operations cpuinfo_op = {
189 .start = c_start,
190 .next = c_next,
191 .stop = c_stop,
192 .show = show_cpuinfo,
193};
194
195
196