summaryrefslogtreecommitdiff
path: root/util/comm-i2c.c
diff options
context:
space:
mode:
authorRandall Spangler <rspangler@chromium.org>2012-07-03 14:45:59 -0700
committerGerrit <chrome-bot@google.com>2012-07-07 17:14:18 -0700
commit7f5f7be3e5df92ec2e9447b3d5d0b8ddeb96c9a0 (patch)
treef58e23fa5d053e31163faf8279882f0d9891c1fe /util/comm-i2c.c
parent0e42faf85b3a4adbc83cb087e0bdab7641df9f1b (diff)
downloadchrome-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.c64
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;
}