diff options
Diffstat (limited to 'include/host_command.h')
-rw-r--r-- | include/host_command.h | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/include/host_command.h b/include/host_command.h index c00df1a93d..7bebbe5e19 100644 --- a/include/host_command.h +++ b/include/host_command.h @@ -15,8 +15,10 @@ struct host_command { /* Command code. */ int command; - /* Handler for the command; data points to parameters/response. */ - enum lpc_status (*handler)(uint8_t *data); + /* Handler for the command; data points to parameters/response. + * returns negative error code if case of failure (using EC_LPC_STATUS + * codes). sets <response_size> if it returns a payload to the host. */ + int (*handler)(uint8_t *data, int *response_size); }; @@ -24,6 +26,27 @@ struct host_command { command slots (0=kernel, 1=user). */ void host_command_received(int slot, int command); +/* Send errors or success result code to a host command, + * without response data. + * <slot> is 0 for kernel-originated commands, + * 1 for usermode-originated commands. + * <result> is the error code. */ +void host_send_result(int slot, int result); + + // success results with response data +/* Send a successful result code along with response data to a host command. + * <slot> is 0 for kernel-originated commands, + * 1 for usermode-originated commands. + * <data> is the buffer with the response payload. + * <size> is the size of the response buffer. */ +void host_send_response(int slot, const uint8_t *data, int size); + +/* Return a pointer to the host command data buffer. This buffer must + * only be accessed between a notification to host_command_received() + * and a subsequent call to lpc_SendHostResponse(). <slot> is 0 for + * kernel-originated commands, 1 for usermode-originated commands. */ +uint8_t *host_get_buffer(int slot); + /* Register a host command handler */ #define DECLARE_HOST_COMMAND(command, routine) \ const struct host_command __host_cmd_##command \ |