7 #include <linux/types.h>
8 #include <linux/kernel.h>
9 #include <linux/string.h>
10 #include <linux/module.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;
24 cfg
[i
] = *miu_chan_cfg(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;
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=");
51 buffer_size
= simple_strtol(pos
+strlen("reserved_buffer="),
54 if (buffer_size
+ MIN_GEN_MEM
> base_mem
)
55 buffer_size
= base_mem
- MIN_GEN_MEM
;
57 buffer_ptr
= (ulong
*)(base_mem
- buffer_size
);
65 EXPORT_SYMBOL(get_reserved_buffer
);
66 EXPORT_SYMBOL(get_reserved_buffer_virtual
);
67 EXPORT_SYMBOL(get_reserved_buffer_size
);