initial commit with v2.6.9
[linux-2.6.9-moxart.git] / arch / mips / hp-lj / utils.c
blob84ef64f6c197a8d39581dc5770ef3239792b929f
1 /*
6 */
7 #include <linux/types.h>
8 #include <linux/kernel.h>
9 #include <linux/string.h>
10 #include <linux/module.h>
11 #include <asm/io.h>
12 #include "utils.h"
15 #define miu_chan_cfg(x) ((volatile unsigned long *)(0xbff40000+x*4)) /* for andros */
17 int mbsize[8] = {1,2,4,8,16,32,64,128};
19 unsigned long get_mem_avail(void) {
21 unsigned long cfg[10],i,total_mem=0;
23 for(i=0;i<10;i++)
24 cfg[i] = *miu_chan_cfg(i);
26 for(i=0;i<10;i++){
27 if(cfg[i]==0x1fc160c2) continue; // skip empties
28 if( ( (cfg[i]>>12) & 0xf ) <= 0xb ) continue; // skip roms
29 total_mem += mbsize[(cfg[i]>>16)&0x7] *1024*1024;
31 return total_mem;
37 static ulong* buffer_ptr = NULL;
38 static ulong buffer_size = 0;
40 ulong* get_reserved_buffer(void) {return KSEG0ADDR(buffer_ptr);}
41 ulong* get_reserved_buffer_virtual(void) {return (ulong*)ReservedMemVirtualAddr;}
42 ulong get_reserved_buffer_size(void) {return buffer_size;}
44 #define MIN_GEN_MEM (4 << 20)
47 void reserve_buffer(const char* cl, ulong base_mem)
49 char* pos = strstr(cl, "reserved_buffer=");
50 if (pos) {
51 buffer_size = simple_strtol(pos+strlen("reserved_buffer="),
52 0, 10);
53 buffer_size <<= 20;
54 if (buffer_size + MIN_GEN_MEM > base_mem)
55 buffer_size = base_mem - MIN_GEN_MEM;
56 if (buffer_size > 0)
57 buffer_ptr = (ulong*)(base_mem - buffer_size);
58 else
59 buffer_size = 0;
65 EXPORT_SYMBOL(get_reserved_buffer);
66 EXPORT_SYMBOL(get_reserved_buffer_virtual);
67 EXPORT_SYMBOL(get_reserved_buffer_size);