diff options
author | Randall Spangler <rspangler@chromium.org> | 2012-07-03 14:45:59 -0700 |
---|---|---|
committer | Gerrit <chrome-bot@google.com> | 2012-07-07 17:14:18 -0700 |
commit | 7f5f7be3e5df92ec2e9447b3d5d0b8ddeb96c9a0 (patch) | |
tree | f58e23fa5d053e31163faf8279882f0d9891c1fe /util/comm-i2c.c | |
parent | 0e42faf85b3a4adbc83cb087e0bdab7641df9f1b (diff) | |
download | chrome-ec-7f5f7be3e5df92ec2e9447b3d5d0b8ddeb96c9a0.tar.gz |
Add memory-mapped data support for I2C and SPI protocols
And fix returning memory-mapped string length on LPC as well.
BUG=chrome-os-partner:11090
TEST=manual
from EC, 'hostevent set 0x40000'
from host, 'ectool eventget' --> should print 0x40000
Signed-off-by: Randall Spangler <rspangler@chromium.org>
Change-Id: I9edbd0a1468b5d4160ce67c471332226e51fa868
Reviewed-on: https://gerrit.chromium.org/gerrit/26719
Reviewed-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'util/comm-i2c.c')
-rw-r--r-- | util/comm-i2c.c | 64 |
1 files changed, 52 insertions, 12 deletions
diff --git a/util/comm-i2c.c b/util/comm-i2c.c index 47241d392e..5020db3ecf 100644 --- a/util/comm-i2c.c +++ b/util/comm-i2c.c @@ -186,30 +186,70 @@ done: return ret; } - uint8_t read_mapped_mem8(uint8_t offset) { - /* Not implemented */ - return 0xff; -} + struct ec_params_read_memmap p; + uint8_t val; + + p.offset = offset; + p.size = sizeof(val); + if (ec_command(EC_CMD_READ_MEMMAP, &p, sizeof(p), + &val, sizeof(val)) < 0) + return 0xff; + + return val; +} uint16_t read_mapped_mem16(uint8_t offset) { - /* Not implemented */ - return 0xffff; -} + struct ec_params_read_memmap p; + uint16_t val; + + p.offset = offset; + p.size = sizeof(val); + if (ec_command(EC_CMD_READ_MEMMAP, &p, sizeof(p), + &val, sizeof(val)) < 0) + return 0xffff; + + return val; +} uint32_t read_mapped_mem32(uint8_t offset) { - /* Not implemented */ - return 0xffffffff; -} + struct ec_params_read_memmap p; + uint32_t val; + p.offset = offset; + p.size = sizeof(val); + + if (ec_command(EC_CMD_READ_MEMMAP, &p, sizeof(p), + &val, sizeof(val)) < 0) + return 0xffffffff; + + return val; +} int read_mapped_string(uint8_t offset, char *buf) { - strncpy(buf, "NOT IMPLEMENTED", EC_MEMMAP_TEXT_MAX); - return sizeof("NOT IMPLEMENTED"); + struct ec_params_read_memmap p; + int c; + + p.offset = offset; + p.size = EC_MEMMAP_TEXT_MAX; + + if (ec_command(EC_CMD_READ_MEMMAP, &p, sizeof(p), + buf, EC_MEMMAP_TEXT_MAX) < 0) { + *buf = 0; + return -1; + } + + for (c = 0; c < EC_MEMMAP_TEXT_MAX; c++) { + if (buf[c] == 0) + return c; + } + + buf[EC_MEMMAP_TEXT_MAX - 1] = 0; + return EC_MEMMAP_TEXT_MAX - 1; } |