summaryrefslogtreecommitdiff
path: root/src/gsmd/machine.c
diff options
context:
space:
mode:
authorlaforge <laforge@99fdad57-331a-0410-800a-d7fa5415bdb3>2007-06-02 11:43:55 +0000
committerlaforge <laforge@99fdad57-331a-0410-800a-d7fa5415bdb3>2007-06-02 11:43:55 +0000
commit912d24fcd318dfb5b615a2d2857fa7e5611fd5ff (patch)
treee2fb844aa5df2cde08e38f5e8ca95c00dbbb961e /src/gsmd/machine.c
parentbb9bf7b6d0784d22deeac2c030af450d7b1b3363 (diff)
implement manual override for vendor/machine type
git-svn-id: http://svn.openmoko.org/trunk/src/target/gsm@2127 99fdad57-331a-0410-800a-d7fa5415bdb3
Diffstat (limited to 'src/gsmd/machine.c')
-rw-r--r--src/gsmd/machine.c53
1 files changed, 38 insertions, 15 deletions
diff --git a/src/gsmd/machine.c b/src/gsmd/machine.c
index 40c08cb..8db210b 100644
--- a/src/gsmd/machine.c
+++ b/src/gsmd/machine.c
@@ -102,11 +102,11 @@ struct machines {
{ NULL, NULL, NULL },
};
-int gsmd_machine_plugin_init(struct gsmd *g, int fd)
+int gsmd_machine_plugin_init(struct gsmd *g, char *machine_name, char *vendor_name)
{
FILE *cpuinfo;
char buf[1024];
- char *line, *machine = NULL;
+ char *line, *hw = NULL;
int i, rc;
cpuinfo = fopen("/proc/cpuinfo", "r");
@@ -117,23 +117,46 @@ int gsmd_machine_plugin_init(struct gsmd *g, int fd)
line = strtok(buf, "\n");
while (line = strtok(NULL, "\n")) {
if (strncmp(line, "Hardware\t: ", 11) == 0) {
- machine = line+11;
+ hw = line+11;
break;
}
}
- /* FIXME: do this dynamically */
- for (i = 0; machines[i].cpuinfo; i++) {
- if (machine && strcmp(machine, machines[i].cpuinfo) == 0) {
- DEBUGP("detected %s\n", machine);
- rc = gsmd_machine_plugin_load(machines[i].machine);
- rc |= gsmd_vendor_plugin_load(machines[i].vendor);
- return rc;
+
+ if (hw) {
+ /* FIXME: do this dynamically */
+ for (i = 0; machines[i].cpuinfo; i++) {
+ if (strcmp(hw, machines[i].cpuinfo) == 0) {
+ DEBUGP("detected '%s' hardware\n", hw);
+ if (machine_name)
+ DEBUGP("warning: auto-detected machine '%s', "
+ "but user override to '%s'\n",
+ machines[i].machine, machine_name);
+ else
+ machine_name = machines[i].machine;
+
+ if (vendor_name)
+ DEBUGP("wanring: auto-detected vendor '%s', "
+ "but user override to '%s'\m",
+ machines[i].vendor, vendor_name);
+ else
+ vendor_name = machines[i].vendor;
+ break;
+ }
}
}
- /* load generic machine and all vendor plugins */
- rc = gsmd_machine_plugin_load("generic");
- gsmd_vendor_plugin_load("ti");
- gsmd_vendor_plugin_load("tihtc");
- gsmd_vendor_plugin_load("qc");
+
+ if (machine_name)
+ rc = gsmd_machine_plugin_load(machine_name);
+ else
+ rc = gsmd_machine_plugin_load("generic");
+
+ if (vendor_name)
+ gsmd_vendor_plugin_load(vendor_name);
+ else {
+ gsmd_vendor_plugin_load("ti");
+ gsmd_vendor_plugin_load("tihtc");
+ gsmd_vendor_plugin_load("qc");
+ }
+
return rc;
}
personal git repositories of Harald Welte. Your mileage may vary