Chameleon

Chameleon Svn Source Tree

Root/branches/azimutz/Chazi/i386/modules/Memory/Memory.c

1/*
2 * DRAM Controller Module
3 * Scans the dram controller and notifies OS X of the memory modules.
4 *This was converted from boot2 code to a boot2 module.
5 *
6 */
7
8#include "libsaio.h"
9#include "pci.h"
10#include "platform.h"
11#include "dram_controllers.h"
12#include "spd.h"
13//#include "mem.h"
14#include "modules.h"
15
16pci_dt_t *dram_controller_dev;
17
18
19void Memory_hook(void* arg1, void* arg2, void* arg3, void* arg4);
20void Memory_PCIDevice_hook(void* arg1, void* arg2, void* arg3, void* arg4);
21
22
23void Memory_start()
24{
25register_hook_callback("PCIDevice", &Memory_PCIDevice_hook);
26register_hook_callback("ScanMemory", &Memory_hook);
27
28}
29
30void Memory_PCIDevice_hook(void* arg1, void* arg2, void* arg3, void* arg4)
31{
32pci_dt_t* current = arg1;
33
34if (current->class_id == PCI_CLASS_BRIDGE_HOST
35&& (current->dev.addr == PCIADDR(0, 0, 0))
36{
37dram_controller_dev = current;
38}
39}
40
41void Memory_hook(void* arg1, void* arg2, void* arg3, void* arg4)
42{
43if (dram_controller_dev!=NULL) {
44scan_dram_controller(dram_controller_dev); // Rek: pci dev ram controller direct and fully informative scan ...
45}
46//Azi: gone on Kabyl's...???
47//scan_memory(&Platform); // unfortunately still necesary for some comp where spd cant read correct speed
48scan_spd(&Platform);
49}
50
51
52
53/* Nedded to devide 64bit numbers correctly. TODO: look into why the module needs this
54 * And why it isn't needed when compiled into boot2
55 */
56
57uint64_t __udivdi3(uint64_t numerator, uint64_t denominator)
58{
59uint64_t quotient = 0, qbit = 1;
60
61if (denominator)
62{
63while ((int64_t) denominator >= 0)
64{
65denominator <<= 1;
66qbit <<= 1;
67}
68
69while (denominator)
70{
71if (denominator <= numerator)
72{
73numerator -= denominator;
74quotient += qbit;
75}
76denominator >>= 1;
77qbit >>= 1;
78}
79
80return quotient;
81}
82else {
83stop("Divide by 0");
84return 0;
85}
86
87}
88

Archive Download this file

Revision: 879