Chameleon

Chameleon Svn Source Tree

Root/branches/cparm/i386/modules/SMBiosPatcher/SMBiosPatcher.c

1/*
2 * Copyright 2011,2012 cparm. All rights reserved.
3 */
4#include "libsaio.h"
5#include "bootstruct.h"
6#include "modules.h"
7#include "Platform.h"
8#include "smbios_patcher.h"
9#include "efi.h"
10
11#ifndef DEBUG_SMBIOS
12#define DEBUG_SMBIOS 0
13#endif
14
15#if DEBUG_SMBIOS==2
16#define DBG(x...)printf(x)
17#elif DEBUG_SMBIOS==1
18#define DBG(x...) msglog(x)
19#else
20#define DBG(x...)
21#endif
22
23void getSmbiosPatched_hook(void* arg1, void* arg2, void* arg3, void* arg4, void* arg5, void* arg6);
24void getProductName_hook(void* arg1, void* arg2, void* arg3, void* arg4, void* arg5, void* arg6);
25void getboardproduct_hook(void* arg1, void* arg2, void* arg3, void* arg4, void* arg5, void* arg6);
26
27void getSmbiosPatched_hook(void* arg1, void* arg2, void* arg3, void* arg4, void* arg5, void* arg6)
28{
29struct SMBEntryPoint *patched_smb = NULL;
30
31 getSmbiosTableStructure(getSmbiosOriginal()); // generate tables entry list for fast table finding
32
33if (execute_hook("isMemoryRegistred", NULL, NULL, NULL, NULL, NULL, NULL) == EFI_SUCCESS)
34 scan_memory();
35
36execute_hook("ScanMemory", NULL, NULL, NULL, NULL, NULL, NULL);
37
38patched_smb = getSmbiosPatched(getSmbiosOriginal());
39
40if (patched_smb)
41 Register_Smbios_Efi(patched_smb);
42else
43 {
44verbose("Error: Could not get patched SMBIOS, fallback to original SMBIOS !!\n");
45
46 Register_Smbios_Efi(getSmbiosOriginal());
47
48 }
49
50}
51
52void getProductName_hook(void* arg1, void* arg2, void* arg3, void* arg4, void* arg5, void* arg6)
53{
54setupSmbiosConfigFile("SMBIOS.plist");
55int len = 0;
56const char *val = 0;
57
58if (getValueForKey("SMproductname", &val, &len, DEFAULT_SMBIOS_CONFIG)) {
59SetgPlatformName(val);
60} else {
61const char *productName = sm_get_defstr("SMproductname", 0);
62SetgPlatformName(productName);
63}
64DBG("SMBIOS Product name: %s\n",productName);
65
66
67}
68
69void getboardproduct_hook(void* arg1, void* arg2, void* arg3, void* arg4, void* arg5, void* arg6)
70{
71setupSmbiosConfigFile("SMBIOS.plist");
72int len = 0;
73const char *val = 0;
74
75if (getValueForKey("SMboardproduct", &val, &len, DEFAULT_SMBIOS_CONFIG)) {
76
77Setgboardproduct(val);
78
79} else {
80 const char *productBoard = sm_get_defstr("SMboardproduct", 0);
81 Setgboardproduct(productBoard);
82}
83
84}
85
86void SMBiosPatcher_start(void);
87void SMBiosPatcher_start(void)
88{
89
90register_hook_callback("getSmbiosPatched", &getSmbiosPatched_hook);
91register_hook_callback("getProductNamePatched", &getProductName_hook);
92 register_hook_callback("getboardproductPatched", &getboardproduct_hook);
93
94}
95

Archive Download this file

Revision: 2006