summaryrefslogtreecommitdiff
path: root/chip/ish/host_command_heci.c
diff options
context:
space:
mode:
Diffstat (limited to 'chip/ish/host_command_heci.c')
-rw-r--r--chip/ish/host_command_heci.c177
1 files changed, 0 insertions, 177 deletions
diff --git a/chip/ish/host_command_heci.c b/chip/ish/host_command_heci.c
deleted file mode 100644
index 2fcab44b8b..0000000000
--- a/chip/ish/host_command_heci.c
+++ /dev/null
@@ -1,177 +0,0 @@
-/* Copyright 2019 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include "common.h"
-#include "console.h"
-#include "heci_client.h"
-#include "host_command.h"
-#include "host_command_heci.h"
-#include "ipc_heci.h"
-#include "ish_fwst.h"
-#include "util.h"
-
-#define CPUTS(outstr) cputs(CC_LPC, outstr)
-#define CPRINTS(format, args...) cprints(CC_LPC, format, ## args)
-#define CPRINTF(format, args...) cprintf(CC_LPC, format, ## args)
-
-#define HECI_CLIENT_CROS_EC_ISH_GUID { 0x7b7154d0, 0x56f4, 0x4bdc,\
- { 0xb0, 0xd8, 0x9e, 0x7c, 0xda, 0xe0, 0xd6, 0xa0 } }
-
-/* Handle for all heci cros_ec interactions */
-static heci_handle_t heci_cros_ec_handle = HECI_INVALID_HANDLE;
-
-/*
- * If we hit response buffer size issues, we can increase this. This is the
- * current size of a single HECI packet.
- *
- * Aligning with other assumptions in host command stack, only a single host
- * command can be processed at a given time.
- */
-
-struct cros_ec_ishtp_msg_hdr {
- uint8_t channel;
- uint8_t status;
- uint8_t id; /* Pairs up request and responses */
- uint8_t reserved;
-} __ec_align4;
-
-#define CROS_EC_ISHTP_MSG_HDR_SIZE sizeof(struct cros_ec_ishtp_msg_hdr)
-#define HECI_CROS_EC_RESPONSE_MAX \
- (HECI_IPC_PAYLOAD_SIZE - CROS_EC_ISHTP_MSG_HDR_SIZE)
-
-struct cros_ec_ishtp_msg {
- struct cros_ec_ishtp_msg_hdr hdr;
- uint8_t data[0];
-} __ec_align4;
-
-enum heci_cros_ec_channel {
- CROS_EC_COMMAND = 1, /* initiated from AP */
- CROS_MKBP_EVENT = 2, /* initiated from EC */
-};
-
-static uint8_t response_buffer[IPC_MAX_PAYLOAD_SIZE] __aligned(4);
-static struct host_packet heci_packet;
-
-int heci_send_mkbp_event(uint32_t *timestamp)
-{
- struct cros_ec_ishtp_msg evt;
- int rv;
-
- evt.hdr.channel = CROS_MKBP_EVENT;
- evt.hdr.status = 0;
-
- rv = heci_send_msg_timestamp(heci_cros_ec_handle, (uint8_t *)&evt,
- sizeof(evt), timestamp);
- /*
- * heci_send_msg_timestamp sends back negative error codes. Change to
- * EC style codes
- */
- return rv < 0 ? -rv : EC_SUCCESS;
-}
-
-static void heci_send_hostcmd_response(struct host_packet *pkt)
-{
- int rv;
- struct cros_ec_ishtp_msg *out =
- (struct cros_ec_ishtp_msg *)response_buffer;
-
- out->hdr.channel = CROS_EC_COMMAND;
- out->hdr.status = 0;
- /* id is already set in the receiving method */
-
- rv = heci_send_msg(heci_cros_ec_handle, (uint8_t *)out,
- pkt->response_size + CROS_EC_ISHTP_MSG_HDR_SIZE);
- if (rv < 0)
- CPRINTS("HC response failed %d", -rv);
-}
-
-static void cros_ec_ishtp_subsys_new_msg_received(const heci_handle_t handle,
- uint8_t *msg, const size_t msg_size)
-{
- struct cros_ec_ishtp_msg *in = (void *) msg;
- struct cros_ec_ishtp_msg *out = (void *) response_buffer;
-
- if (in->hdr.channel != CROS_EC_COMMAND) {
- CPRINTS("Unknown HECI packet 0x%02x", in->hdr.channel);
- return;
- }
- memset(&heci_packet, 0, sizeof(heci_packet));
-
- /* Copy over id from sender so they can pair up messages */
- out->hdr.id = in->hdr.id;
-
- heci_packet.send_response = heci_send_hostcmd_response;
-
- heci_packet.request = in->data;
- heci_packet.request_max = HECI_MAX_MSG_SIZE;
- heci_packet.request_size = msg_size - CROS_EC_ISHTP_MSG_HDR_SIZE;
-
- heci_packet.response = out->data;
- heci_packet.response_max = HECI_CROS_EC_RESPONSE_MAX;
- heci_packet.response_size = 0;
-
- heci_packet.driver_result = EC_RES_SUCCESS;
- host_packet_receive(&heci_packet);
-}
-
-/*
- * IPC transfer max is actual 4K, but we don't need kernel buffers that big
- *
- * Basing size off of existing cros_ec implementations ranging from 128 to 512
- */
-#define HECI_CROS_EC_LIMIT_PACKET_SIZE 256
-
-/**
- * Get protocol information
- */
-static enum ec_status heci_get_protocol_info(struct host_cmd_handler_args *args)
-{
- struct ec_response_get_protocol_info *r = args->response;
-
- memset(r, 0, sizeof(*r));
- r->protocol_versions = BIT(3);
- r->max_request_packet_size = HECI_CROS_EC_LIMIT_PACKET_SIZE;
- r->max_response_packet_size = HECI_CROS_EC_RESPONSE_MAX;
-
- args->response_size = sizeof(*r);
-
- return EC_SUCCESS;
-}
-DECLARE_HOST_COMMAND(EC_CMD_GET_PROTOCOL_INFO, heci_get_protocol_info,
-EC_VER_MASK(0));
-
-static int cros_ec_ishtp_subsys_initialize(const heci_handle_t heci_handle)
-{
- heci_cros_ec_handle = heci_handle;
- ish_fwst_set_fw_status(FWSTS_SENSOR_APP_RUNNING);
- return EC_SUCCESS;
-}
-
-static int cros_ec_ishtp_no_op(const heci_handle_t heci_handle)
-{
- return EC_SUCCESS;
-}
-
-static void cros_ec_ishtp_disconneted(const heci_handle_t heci_handle)
-{
-}
-
-static const struct heci_client_callbacks cros_ec_ishtp_subsys_heci_cbs = {
- .initialize = cros_ec_ishtp_subsys_initialize,
- .new_msg_received = cros_ec_ishtp_subsys_new_msg_received,
- .suspend = cros_ec_ishtp_no_op,
- .resume = cros_ec_ishtp_no_op,
- .disconnected = cros_ec_ishtp_disconneted,
-};
-
-static const struct heci_client cros_ec_ishtp_heci_client = {
- .protocol_id = HECI_CLIENT_CROS_EC_ISH_GUID,
- .max_msg_size = HECI_MAX_MSG_SIZE,
- .protocol_ver = 1,
- .max_n_of_connections = 1,
- .cbs = &cros_ec_ishtp_subsys_heci_cbs,
-};
-
-HECI_CLIENT_ENTRY(cros_ec_ishtp_heci_client);