diff options
author | Jeremy Kerr <jk@ozlabs.org> | 2014-07-23 14:03:42 +0800 |
---|---|---|
committer | Jeremy Kerr <jk@ozlabs.org> | 2014-08-05 10:49:31 +0800 |
commit | 6897abaa97a02e0ab8ac07209a5e4966bfe101c5 (patch) | |
tree | 6592de1ffd41310aeefdbe58d41928f21baeed71 /discover/platform-powerpc.c | |
parent | 052961eb2e8279f103c091e850c317da335c0207 (diff) | |
download | petitboot-6897abaa97a02e0ab8ac07209a5e4966bfe101c5.zip petitboot-6897abaa97a02e0ab8ac07209a5e4966bfe101c5.tar.gz |
discover: Use platform code to read sysinfo type and identifier
This change uses the platform-specific code to read the system type and
identifier, rather than the pb-sysinfo utility. We introduce a new
callback for struct platform:
int (*get_sysinfo)(struct platform *, struct system_info *);
- which populates struct system_info with appropriate information.
This means that the system-specific code is kept in one place; rather
than having powerpc-specific device-tree-reading code in the pb-sysinfo
shell script.
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Diffstat (limited to 'discover/platform-powerpc.c')
-rw-r--r-- | discover/platform-powerpc.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/discover/platform-powerpc.c b/discover/platform-powerpc.c index 24cc521..2ce69e7 100644 --- a/discover/platform-powerpc.c +++ b/discover/platform-powerpc.c @@ -9,6 +9,7 @@ #include <sys/fcntl.h> #include <sys/stat.h> +#include <file/file.h> #include <talloc/talloc.h> #include <list/list.h> #include <log/log.h> @@ -738,6 +739,23 @@ static int save_config(struct platform *p, struct config *config) return rc; } +static int get_sysinfo(struct platform *p, struct system_info *sysinfo) +{ + struct platform_powerpc *platform = p->platform_data; + int len, rc; + char *buf; + + rc = read_file(platform, "/proc/device_tree/model", &buf, &len); + if (rc == 0) + sysinfo->type = talloc_steal(sysinfo, buf); + + rc = read_file(platform, "/proc/device_tree/system-id", &buf, &len); + if (rc == 0) + sysinfo->identifier = talloc_steal(sysinfo, buf); + + return 0; +} + static bool probe(struct platform *p, void *ctx) { struct platform_powerpc *platform; @@ -759,12 +777,14 @@ static bool probe(struct platform *p, void *ctx) return true; } + static struct platform platform_powerpc = { .name = "powerpc", .dhcp_arch_id = 0x000e, .probe = probe, .load_config = load_config, .save_config = save_config, + .get_sysinfo = get_sysinfo, }; register_platform(platform_powerpc); |