summaryrefslogtreecommitdiff
path: root/util/ectool.c
diff options
context:
space:
mode:
authorRandall Spangler <rspangler@chromium.org>2012-07-11 11:18:17 -0700
committerGerrit <chrome-bot@google.com>2012-07-11 14:46:30 -0700
commit07ca0977fe554696288048c5c691aa5b9cfa7ac8 (patch)
treeaade5d33536338c2baa869c1865e4eb11b390e3e /util/ectool.c
parent61e0e5508a559cc9935951be4f68455809300a2e (diff)
downloadchrome-ec-07ca0977fe554696288048c5c691aa5b9cfa7ac8.tar.gz
Refactor API for host commands, and handle variable length data better
Added version mask field to DECLARE_HOST_COMMAND() because it's convenient to do so when I'm touching all host command implementations, but all commands simply declare version 0 and nothing checks it yet. Will add version support in a followup CL. This change is internal to the EC; it does not change the data sent over the host interface. BUG=chrome-os-partner:11275 TEST=manual ectool version && ectool echash; should get sane data from both ectool flashread 0x80 0x40 /tmp/foo && od -tx1 /tmp/foo should match data from offset 0x80 of ec.bin (od -j128 -n64 -tx1 ec.bin) Change-Id: I5699f72b8d5e1ac23929353c9a34158d76c44206 Signed-off-by: Randall Spangler <rspangler@chromium.org> Reviewed-on: https://gerrit.chromium.org/gerrit/27172 Reviewed-by: Bill Richardson <wfrichar@chromium.org>
Diffstat (limited to 'util/ectool.c')
-rw-r--r--util/ectool.c24
1 files changed, 12 insertions, 12 deletions
diff --git a/util/ectool.c b/util/ectool.c
index 4d4f67045e..f7557d5415 100644
--- a/util/ectool.c
+++ b/util/ectool.c
@@ -235,14 +235,14 @@ int cmd_version(int argc, char *argv[])
{
static const char * const fw_copies[] = {"unknown", "RO", "A", "B"};
struct ec_response_get_version r;
- struct ec_response_get_build_info r2;
+ char build_string[EC_PARAM_SIZE];
int rv;
rv = ec_command(EC_CMD_GET_VERSION, NULL, 0, &r, sizeof(r));
if (rv < 0)
return rv;
rv = ec_command(EC_CMD_GET_BUILD_INFO,
- NULL, 0, &r2, sizeof(r2));
+ NULL, 0, build_string, sizeof(build_string));
if (rv < 0)
return rv;
@@ -250,7 +250,7 @@ int cmd_version(int argc, char *argv[])
r.version_string_ro[sizeof(r.version_string_ro) - 1] = '\0';
r.version_string_rw_a[sizeof(r.version_string_rw_a) - 1] = '\0';
r.version_string_rw_b[sizeof(r.version_string_rw_b) - 1] = '\0';
- r2.build_string[sizeof(r2.build_string) - 1] = '\0';
+ build_string[sizeof(build_string) - 1] = '\0';
/* Print versions */
printf("RO version: %s\n", r.version_string_ro);
@@ -259,7 +259,7 @@ int cmd_version(int argc, char *argv[])
printf("Firmware copy: %s\n",
(r.current_image < ARRAY_SIZE(fw_copies) ?
fw_copies[r.current_image] : "?"));
- printf("Build info: %s\n", r2.build_string);
+ printf("Build info: %s\n", build_string);
return 0;
}
@@ -397,7 +397,7 @@ int cmd_flash_info(int argc, char *argv[])
int cmd_flash_read(int argc, char *argv[])
{
struct ec_params_flash_read p;
- struct ec_response_flash_read r;
+ uint8_t rdata[EC_PARAM_SIZE];
int offset, size;
int rv;
int i;
@@ -428,17 +428,17 @@ int cmd_flash_read(int argc, char *argv[])
}
/* Read data in chunks */
- for (i = 0; i < size; i += sizeof(r.data)) {
+ for (i = 0; i < size; i += sizeof(rdata)) {
p.offset = offset + i;
- p.size = MIN(size - i, sizeof(r.data));
+ p.size = MIN(size - i, sizeof(rdata));
rv = ec_command(EC_CMD_FLASH_READ,
- &p, sizeof(p), &r, sizeof(r));
+ &p, sizeof(p), rdata, sizeof(rdata));
if (rv < 0) {
fprintf(stderr, "Read error at offset %d\n", i);
free(buf);
return rv;
}
- memcpy(buf + i, r.data, p.size);
+ memcpy(buf + i, rdata, p.size);
}
rv = write_file(argv[3], buf, size);
@@ -1131,7 +1131,7 @@ int cmd_pstore_info(int argc, char *argv[])
int cmd_pstore_read(int argc, char *argv[])
{
struct ec_params_pstore_read p;
- struct ec_response_pstore_read r;
+ uint8_t rdata[EC_PARAM_SIZE];
int offset, size;
int rv;
int i;
@@ -1166,13 +1166,13 @@ int cmd_pstore_read(int argc, char *argv[])
p.offset = offset + i;
p.size = MIN(size - i, EC_PSTORE_SIZE_MAX);
rv = ec_command(EC_CMD_PSTORE_READ,
- &p, sizeof(p), &r, sizeof(r));
+ &p, sizeof(p), rdata, sizeof(rdata));
if (rv < 0) {
fprintf(stderr, "Read error at offset %d\n", i);
free(buf);
return rv;
}
- memcpy(buf + i, r.data, p.size);
+ memcpy(buf + i, rdata, p.size);
}
rv = write_file(argv[3], buf, size);