diff options
author | laforge <laforge@99fdad57-331a-0410-800a-d7fa5415bdb3> | 2007-06-02 11:43:55 +0000 |
---|---|---|
committer | laforge <laforge@99fdad57-331a-0410-800a-d7fa5415bdb3> | 2007-06-02 11:43:55 +0000 |
commit | 912d24fcd318dfb5b615a2d2857fa7e5611fd5ff (patch) | |
tree | e2fb844aa5df2cde08e38f5e8ca95c00dbbb961e /src/gsmd/machine.c | |
parent | bb9bf7b6d0784d22deeac2c030af450d7b1b3363 (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.c | 53 |
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; } |