Merge with Linux 2.4.0-test6-pre4.
[linux-2.6/linux-mips.git] / arch / mips / orion / setup.c
blobc247d6b528aea756d64c011b553af1bc455e453e
1 /*
2 * Catch-all for Orion-specific code that doesn't fit easily elsewhere.
3 * -- Cort
4 */
5 #include <linux/config.h>
6 #include <linux/errno.h>
7 #include <linux/hdreg.h>
8 #include <linux/init.h>
9 #include <linux/ioport.h>
10 #include <linux/sched.h>
11 #include <linux/kernel.h>
12 #include <linux/mm.h>
13 #include <linux/stddef.h>
14 #include <linux/string.h>
15 #include <linux/unistd.h>
16 #include <linux/ptrace.h>
17 #include <linux/malloc.h>
18 #include <linux/user.h>
19 #include <linux/utsname.h>
20 #include <linux/a.out.h>
21 #include <linux/tty.h>
22 #include <linux/interrupt.h>
23 #ifdef CONFIG_BLK_DEV_RAM
24 #include <linux/blk.h>
25 #endif
26 #include <linux/ide.h>
27 #ifdef CONFIG_RTC
28 #include <linux/timex.h>
29 #endif
31 #include <asm/asm.h>
32 #include <asm/bootinfo.h>
33 #include <asm/cachectl.h>
34 #include <asm/io.h>
35 #include <asm/stackframe.h>
36 #include <asm/system.h>
37 #include <asm/cpu.h>
38 #include <linux/bootmem.h>
39 #include <asm/addrspace.h>
40 #include <asm/mc146818rtc.h>
41 #include <asm/orion.h>
43 char arcs_cmdline[CL_SIZE] = { "console=ttyS0,19200" };
44 extern int _end;
46 static unsigned char orion_rtc_read_data(unsigned long addr)
48 return 0;
51 static void orion_rtc_write_data(unsigned char data, unsigned long addr)
55 static int orion_rtc_bcd_mode(void)
57 return 0;
60 struct rtc_ops orion_rtc_ops = {
61 &orion_rtc_read_data,
62 &orion_rtc_write_data,
63 &orion_rtc_bcd_mode
66 extern void InitCIB(void);
67 extern void InitQpic(void);
68 extern void InitCupid(void);
70 void __init orion_setup(void)
72 extern void (*board_time_init)(struct irqaction *irq);
73 void orion_time_init(struct irqaction *);
75 rtc_ops = &orion_rtc_ops;
76 board_time_init = orion_time_init;
77 mips_io_port_base = GT64120_BASE;
79 InitCIB();
80 InitQpic();
81 InitCupid();
84 #define PFN_UP(x) (((x) + PAGE_SIZE-1) >> PAGE_SHIFT)
85 #define PFN_ALIGN(x) (((unsigned long)(x) + (PAGE_SIZE - 1)) & PAGE_MASK)
87 unsigned long mem_size;
88 int __init prom_init(int a, char **b, char **c, int *d)
90 unsigned long free_start, free_end, start_pfn, bootmap_size;
91 extern unsigned long orion_initrd_start[], orion_initrd_size;
93 mips_machgroup = MACH_GROUP_ORION;
94 /* 64 MB non-upgradable */
95 mem_size = 64 << 20;
97 free_start = PHYSADDR(PFN_ALIGN(&_end));
98 free_end = mem_size;
99 start_pfn = PFN_UP((unsigned long)&_end);
101 /* Register all the contiguous memory with the bootmem allocator
102 and free it. Be careful about the bootmem freemap. */
103 bootmap_size = init_bootmem(start_pfn, mem_size >> PAGE_SHIFT);
105 /* Free the entire available memory after the _end symbol. */
106 free_start += bootmap_size;
107 free_bootmem(free_start, free_end-free_start);
109 initrd_start = (ulong)orion_initrd_start;
110 initrd_end = (ulong)orion_initrd_start + (ulong)orion_initrd_size;
111 initrd_below_start_ok = 1;
113 return 0;
116 void prom_free_prom_memory (void)
120 int page_is_ram(unsigned long pagenr)
122 if ( pagenr < (mem_size >> PAGE_SHIFT) )
123 return 1;
124 return 0;