From 7f5f7be3e5df92ec2e9447b3d5d0b8ddeb96c9a0 Mon Sep 17 00:00:00 2001 From: Randall Spangler Date: Tue, 3 Jul 2012 14:45:59 -0700 Subject: 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 Change-Id: I9edbd0a1468b5d4160ce67c471332226e51fa868 Reviewed-on: https://gerrit.chromium.org/gerrit/26719 Reviewed-by: Simon Glass --- util/comm-i2c.c | 64 ++++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 52 insertions(+), 12 deletions(-) (limited to 'util/comm-i2c.c') 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; } -- cgit v1.2.1