summaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorRandall Spangler <rspangler@chromium.org>2013-08-01 09:55:58 -0700
committerChromeBot <chrome-bot@google.com>2013-08-02 13:05:56 -0700
commitc6dfa7e03b4c672e1031b4af9230b9da77e50f1a (patch)
tree63c6a1472c0d7884bb6952d828198cc86d56a035 /common
parent0d3bdc690e7ab3ed0ab190b0529e95c2bbba4e7e (diff)
downloadchrome-ec-c6dfa7e03b4c672e1031b4af9230b9da77e50f1a.tar.gz
Host commands don't set the response pointer
Remove support for allowing host command handlers to set the response pointer. This is just one more thing that can break (and did, on SPI protocol V2). No commands other than the trivial read-memory-map command in host_command.c and flash read made use of this capability, and the savings in performance was negligible. BUG=chrome-os-partner:21576 BRANCH=none TEST=boot pit; still boots Change-Id: I0a9bcf57dbea7155318fc389d7b47d3742a1a00a Signed-off-by: Randall Spangler <rspangler@chromium.org> Reviewed-on: https://gerrit.chromium.org/gerrit/64236
Diffstat (limited to 'common')
-rw-r--r--common/flash_common.c8
-rw-r--r--common/host_command.c21
-rw-r--r--common/test_util.c8
3 files changed, 11 insertions, 26 deletions
diff --git a/common/flash_common.c b/common/flash_common.c
index 6f79f544a0..082f64fb75 100644
--- a/common/flash_common.c
+++ b/common/flash_common.c
@@ -522,11 +522,15 @@ DECLARE_HOST_COMMAND(EC_CMD_FLASH_INFO,
static int flash_command_read(struct host_cmd_handler_args *args)
{
const struct ec_params_flash_read *p = args->params;
+ const char *src;
- if (flash_dataptr(p->offset, p->size, 1,
- (const char **)&args->response) < 0)
+ if (flash_dataptr(p->offset, p->size, 1, &src) < 0)
return EC_RES_ERROR;
+ if (p->size > args->response_max)
+ return EC_RES_OVERFLOW;
+
+ memcpy(args->response, src, p->size);
args->response_size = p->size;
return EC_RES_SUCCESS;
diff --git a/common/host_command.c b/common/host_command.c
index 489ae7b35f..55f27d9199 100644
--- a/common/host_command.c
+++ b/common/host_command.c
@@ -182,22 +182,9 @@ void host_packet_respond(struct host_cmd_handler_args *args)
for (i = sizeof(*r); i > 0; i--)
csum += *out++;
- /* Checksum and copy response data, if any */
- if (!args->response_size) {
- /* No data to copy */
- } else if (args->response != out) {
- /* Copy and checksum */
- const uint8_t *outr = (const uint8_t *)args->response;
-
- for (i = args->response_size; i > 0; i--) {
- *out = *outr++;
- csum += *out++;
- }
- } else {
- /* Response already in right place; just checksum it */
- for (i = args->response_size; i > 0; i--)
- csum += *out++;
- }
+ /* Checksum response data, if any */
+ for (i = args->response_size; i > 0; i--)
+ csum += *out++;
/* Write checksum field so the entire packet sums to 0 */
r->checksum = (uint8_t)(-csum);
@@ -451,7 +438,7 @@ static int host_command_read_memmap(struct host_cmd_handler_args *args)
offset + size > EC_MEMMAP_SIZE)
return EC_RES_INVALID_PARAM;
- args->response = host_get_memmap(offset);
+ memcpy(args->response, host_get_memmap(offset), size);
args->response_size = size;
return EC_RES_SUCCESS;
diff --git a/common/test_util.c b/common/test_util.c
index 10e718399f..c133ac9d24 100644
--- a/common/test_util.c
+++ b/common/test_util.c
@@ -70,7 +70,6 @@ int test_send_host_command(int command, int version, const void *params,
int params_size, void *resp, int resp_size)
{
struct host_cmd_handler_args args;
- int rv;
args.version = version;
args.command = command;
@@ -80,12 +79,7 @@ int test_send_host_command(int command, int version, const void *params,
args.response_max = resp_size;
args.response_size = 0;
- rv = host_command_process(&args);
-
- if (args.response != resp)
- memcpy(resp, args.response, args.response_size);
-
- return rv;
+ return host_command_process(&args);
}
#endif /* TASK_HAS_HOSTCMD */