/* Copyright 2023 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef __CROS_EC_EC_CMD_API_H #define __CROS_EC_EC_CMD_API_H #ifdef __cplusplus extern "C" { #endif /* * This file consists of 3 sections corresponding to the different * methods used to determine the host command API function signature: * * 1. This section consists of functions that do not follow a simple * pattern and need to be specified explicitly. * * 2. This section consists of functions that can be generated with the * help of template macros. * * Note: * * A CROS_EC_COMMAND_INFO macro must be defined before including this * file. This is the data type holding the context info identifying the * EC performing the command. * * A CROS_EC_COMMAND macro must be defined before including this file * with the following signature: * * int CROS_EC_COMMAND(CROS_EC_COMMAND_INFO *h, * int command, int version, * const void *outdata, int outsize, * void *indata, int insize) * * This is the function implementing host command messaging with the EC. */ /* * Section 1: Functions that need to be implemented explicitly because * they do not adhere to simple naming that would permit * auto-generation. * * Please keep this list sorted by function name. */ static inline int ec_cmd_get_sku_id(CROS_EC_COMMAND_INFO *h, struct ec_sku_id_info *r) { return CROS_EC_COMMAND(h, EC_CMD_GET_SKU_ID, 0, NULL, 0, r, sizeof(*r)); } static inline int ec_cmd_mkbp_info_get_next_data(CROS_EC_COMMAND_INFO *h, const struct ec_params_mkbp_info *p, union ec_response_get_next_data *r) { return CROS_EC_COMMAND(h, EC_CMD_MKBP_INFO, 0, p, sizeof(*p), r, sizeof(*r)); } static inline int ec_cmd_set_sku_id(CROS_EC_COMMAND_INFO *h, const struct ec_sku_id_info *p) { return CROS_EC_COMMAND(h, EC_CMD_SET_SKU_ID, 0, p, sizeof(*p), NULL, 0); } static inline int ec_cmd_thermal_get_threshold_v1( CROS_EC_COMMAND_INFO *h, const struct ec_params_thermal_get_threshold_v1 *p, struct ec_thermal_config *r) { return CROS_EC_COMMAND(h, EC_CMD_THERMAL_GET_THRESHOLD, 1, p, sizeof(*p), r, sizeof(*r)); } static inline int ec_cmd_usb_pd_dev_info(CROS_EC_COMMAND_INFO *h, const struct ec_params_usb_pd_info_request *p, struct ec_params_usb_pd_rw_hash_entry *r) { return CROS_EC_COMMAND(h, EC_CMD_USB_PD_DEV_INFO, 0, p, sizeof(*p), r, sizeof(*r)); } static inline int ec_cmd_usb_pd_discovery(CROS_EC_COMMAND_INFO *h, const struct ec_params_usb_pd_info_request *p, struct ec_params_usb_pd_discovery_entry *r) { return CROS_EC_COMMAND(h, EC_CMD_USB_PD_DISCOVERY, 0, p, sizeof(*p), r, sizeof(*r)); } static inline int ec_cmd_usb_pd_set_amode(CROS_EC_COMMAND_INFO *h, const struct ec_params_usb_pd_set_mode_request *p) { return CROS_EC_COMMAND(h, EC_CMD_USB_PD_SET_AMODE, 0, p, sizeof(*p), NULL, 0); } /* * Section 2: EC interface functions that can be generated with the help * of template macros. * * _cmd host command name * _v host command version number * _fn host command function name (will be prefixed with ec_cmd_) * _in host command input (param) data type (will be prefixed with * ec_params_) * _out host command output (response) data type (will be prefixed with * ec_response_) * * Template macros follow a naming scheme based on the arguments they * require: * * C0 host command version 0, does not need to be specified (most * common/default case) * CV host command with specified version * one of C0, CV is required * F function name generated (the lower case version of the _cmd arg) * (required) * PF parameter type derived from function name (_fn arg) * P parameter type specified explicitly (i.e. can not be derived from * _fn arg) * PF, P are mutually exclusive and optional * RF response type derived from function name (_fn arg) * R response type specified explicitly (i.e. can not be derived from * _fn arg) * RF, R are mutually exclusive and optional */ /* * Template for EC interface functions that take a param and returns a * response. */ #define _CROS_EC_CV_F_P_R(_cmd, _v, _fn, _in, _out) \ static inline int ec_cmd_##_fn(CROS_EC_COMMAND_INFO *h, \ const struct ec_params_##_in *p, \ struct ec_response_##_out *r) \ { \ return CROS_EC_COMMAND(h, (_cmd), (_v), p, sizeof(*p), r, \ sizeof(*r)); \ } /* * Template for EC interface functions that take a param but do not * return a response. */ #define _CROS_EC_CV_F_P(_cmd, _v, _fn, _in) \ static inline int ec_cmd_##_fn(CROS_EC_COMMAND_INFO *h, \ const struct ec_params_##_in *p) \ { \ return CROS_EC_COMMAND(h, (_cmd), (_v), p, sizeof(*p), NULL, \ 0); \ } /* * Template for EC interface functions that do not take a param but do * return a response. */ #define _CROS_EC_CV_F_R(_cmd, _v, _fn, _out) \ static inline int ec_cmd_##_fn(CROS_EC_COMMAND_INFO *h, \ struct ec_response_##_out *r) \ { \ return CROS_EC_COMMAND(h, (_cmd), (_v), NULL, 0, r, \ sizeof(*r)); \ } /* * Template for EC interface functions that do not take a param and do * not return a response. */ #define _CROS_EC_CV_F(_cmd, _v, _fn) \ static inline int ec_cmd_##_fn(CROS_EC_COMMAND_INFO *h) \ { \ return CROS_EC_COMMAND(h, (_cmd), (_v), NULL, 0, NULL, 0); \ } /* * Shorthand for host command version 0 where param and response name is * derived from the function name. */ #define _CROS_EC_C0_F_PF_RF(_cmd, _fn) _CROS_EC_CV_F_P_R(_cmd, 0, _fn, _fn, _fn) /* * Shorthand for host command version 1 where param and response name is * derived from the function name. */ #define _CROS_EC_C1_F_PF_RF(_cmd, _fn) \ _CROS_EC_CV_F_P_R(_cmd, 1, _fn##_v1, _fn##_v1, _fn##_v1) /* * Shorthand for host command version 0 where param name is * derived from the function name and there is no response. */ #define _CROS_EC_C0_F_PF(_cmd, _fn) _CROS_EC_CV_F_P(_cmd, 0, _fn, _fn) /* * Shorthand for host command version 1 where param name is * derived from the function name and there is no response. */ #define _CROS_EC_C1_F_PF(_cmd, _fn) _CROS_EC_CV_F_P(_cmd, 1, _fn##_v1, _fn##_v1) /* * Shorthand for host command version 0 where response name is derived * from the function name and there is no param. */ #define _CROS_EC_C0_F_RF(_cmd, _fn) _CROS_EC_CV_F_R(_cmd, 0, _fn, _fn) /* * Shorthand for host command version 1 where response name is derived * from the function name and there is no param. */ #define _CROS_EC_C1_F_RF(_cmd, _fn) _CROS_EC_CV_F_R(_cmd, 1, _fn##_v1, _fn##_v1) /* * Shorthand for host command version 0 where response and there are no * params or response. */ #define _CROS_EC_C0_F(_cmd, _fn) _CROS_EC_CV_F(_cmd, 0, _fn) /* * Please keep this list sorted by host command. Sort with: * * clang-format '--style={BasedOnStyle: InheritParentConfig, * ColumnLimit: 888 }' include/ec_cmd_api.h | grep '^_CROS' | * LC_COLLATE=C sort -t '(' -k 2,2 | clang-format */ _CROS_EC_C0_F_PF_RF(EC_CMD_ADC_READ, adc_read); _CROS_EC_CV_F_P(EC_CMD_ADD_ENTROPY, 0, add_entropy, rollback_add_entropy); _CROS_EC_C0_F(EC_CMD_AP_RESET, ap_reset); _CROS_EC_CV_F_P(EC_CMD_BATTERY_CUT_OFF, 1, battery_cut_off_v1, battery_cutoff); _CROS_EC_C0_F(EC_CMD_BATTERY_CUT_OFF, battery_cut_off); _CROS_EC_CV_F_P_R(EC_CMD_BATTERY_GET_DYNAMIC, 0, battery_get_dynamic, battery_dynamic_info, battery_dynamic_info); _CROS_EC_CV_F_P_R(EC_CMD_BATTERY_GET_STATIC, 0, battery_get_static, battery_static_info, battery_static_info); _CROS_EC_CV_F_P_R(EC_CMD_BATTERY_GET_STATIC, 1, battery_get_static_v1, battery_static_info, battery_static_info_v1); _CROS_EC_CV_F_P_R(EC_CMD_BATTERY_GET_STATIC, 2, battery_get_static_v2, battery_static_info, battery_static_info_v2); _CROS_EC_C0_F_PF_RF(EC_CMD_BATTERY_VENDOR_PARAM, battery_vendor_param); _CROS_EC_C0_F_PF(EC_CMD_BUTTON, button); _CROS_EC_C0_F_PF_RF(EC_CMD_CEC_GET, cec_get); _CROS_EC_C0_F_PF(EC_CMD_CEC_SET, cec_set); _CROS_EC_C0_F_PF_RF(EC_CMD_CHARGESPLASH, chargesplash); _CROS_EC_CV_F_P_R(EC_CMD_CHARGE_CONTROL, 2, charge_control_v2, charge_control, charge_control); _CROS_EC_CV_F_P(EC_CMD_CHARGE_CURRENT_LIMIT, 0, charge_current_limit, current_limit); _CROS_EC_C0_F_RF(EC_CMD_CHARGE_PORT_COUNT, charge_port_count); _CROS_EC_C0_F_PF_RF(EC_CMD_CHARGE_STATE, charge_state); _CROS_EC_C0_F_PF(EC_CMD_CONFIG_POWER_BUTTON, config_power_button); _CROS_EC_C0_F(EC_CMD_CONSOLE_SNAPSHOT, console_snapshot); _CROS_EC_C0_F_PF_RF(EC_CMD_DEVICE_EVENT, device_event); _CROS_EC_C0_F_RF(EC_CMD_DISPLAY_SOC, display_soc); _CROS_EC_C0_F_PF(EC_CMD_EFS_VERIFY, efs_verify); _CROS_EC_C1_F_PF(EC_CMD_EXTERNAL_POWER_LIMIT, external_power_limit); _CROS_EC_C0_F_PF(EC_CMD_FLASH_ERASE, flash_erase); _CROS_EC_CV_F_R(EC_CMD_FLASH_INFO, 1, flash_info_v1, flash_info_1); _CROS_EC_C0_F_RF(EC_CMD_FLASH_INFO, flash_info); _CROS_EC_CV_F_P_R(EC_CMD_FLASH_PROTECT, 1, flash_protect_v1, flash_protect, flash_protect); _CROS_EC_C0_F_PF_RF(EC_CMD_FLASH_PROTECT, flash_protect); _CROS_EC_CV_F_P_R(EC_CMD_FLASH_REGION_INFO, 1, flash_region_info_v1, flash_region_info, flash_region_info); _CROS_EC_C0_F_RF(EC_CMD_FLASH_SPI_INFO, flash_spi_info); _CROS_EC_C0_F_PF(EC_CMD_FORCE_LID_OPEN, force_lid_open); _CROS_EC_C0_F_PF_RF(EC_CMD_FP_MODE, fp_mode); _CROS_EC_C0_F_PF(EC_CMD_FP_SEED, fp_seed); _CROS_EC_C0_F_RF(EC_CMD_FP_STATS, fp_stats); _CROS_EC_CV_F_R(EC_CMD_GET_BOARD_VERSION, 0, get_board_version, board_version); _CROS_EC_C0_F_RF(EC_CMD_GET_BOOT_TIME, get_boot_time); _CROS_EC_C0_F_RF(EC_CMD_GET_CHIP_INFO, get_chip_info); _CROS_EC_CV_F_P_R(EC_CMD_GET_CMD_VERSIONS, 1, get_cmd_versions_v1, get_cmd_versions_v1, get_cmd_versions); _CROS_EC_C0_F_PF_RF(EC_CMD_GET_CMD_VERSIONS, get_cmd_versions); _CROS_EC_C0_F_RF(EC_CMD_GET_COMMS_STATUS, get_comms_status); _CROS_EC_C0_F_RF(EC_CMD_GET_FEATURES, get_features); _CROS_EC_CV_F_R(EC_CMD_GET_KEYBD_CONFIG, 0, get_keybd_config, keybd_config); _CROS_EC_CV_F_R(EC_CMD_GET_NEXT_EVENT, 2, get_next_event_v2, get_next_event); _CROS_EC_C0_F_RF(EC_CMD_GET_NEXT_EVENT, get_next_event); _CROS_EC_C0_F_PF_RF(EC_CMD_GET_PD_PORT_CAPS, get_pd_port_caps); _CROS_EC_C0_F_RF(EC_CMD_GET_PROTOCOL_INFO, get_protocol_info); _CROS_EC_CV_F_R(EC_CMD_GET_UPTIME_INFO, 0, get_uptime_info, uptime_info); _CROS_EC_C0_F_RF(EC_CMD_GET_VERSION, get_version); _CROS_EC_C1_F_RF(EC_CMD_GET_VERSION, get_version); _CROS_EC_C0_F_PF_RF(EC_CMD_GPIO_GET, gpio_get); _CROS_EC_C1_F_PF_RF(EC_CMD_GPIO_GET, gpio_get); _CROS_EC_C0_F_PF(EC_CMD_GPIO_SET, gpio_set); _CROS_EC_CV_F_P_R(EC_CMD_GSV_PAUSE_IN_S5, 0, gsv_pause_in_s5, get_set_value, get_set_value); _CROS_EC_C0_F_PF(EC_CMD_HANG_DETECT, hang_detect); _CROS_EC_C0_F_PF_RF(EC_CMD_HELLO, hello); _CROS_EC_C0_F_PF_RF(EC_CMD_HIBERNATION_DELAY, hibernation_delay); _CROS_EC_C0_F_PF_RF(EC_CMD_HOST_EVENT, host_event); _CROS_EC_CV_F_P(EC_CMD_HOST_EVENT_CLEAR, 0, host_event_clear, host_event_mask); _CROS_EC_CV_F_P(EC_CMD_HOST_EVENT_CLEAR_B, 0, host_event_clear_b, host_event_mask); _CROS_EC_CV_F_R(EC_CMD_HOST_EVENT_GET_B, 0, host_event_get_b, host_event_mask); _CROS_EC_CV_F_R(EC_CMD_HOST_EVENT_GET_SCI_MASK, 0, host_event_get_sci_mask, host_event_mask); _CROS_EC_CV_F_R(EC_CMD_HOST_EVENT_GET_SMI_MASK, 0, host_event_get_smi_mask, host_event_mask); _CROS_EC_CV_F_R(EC_CMD_HOST_EVENT_GET_WAKE_MASK, 0, host_event_get_wake_mask, host_event_mask); _CROS_EC_CV_F_P(EC_CMD_HOST_EVENT_SET_SCI_MASK, 0, host_event_set_sci_mask, host_event_mask); _CROS_EC_CV_F_P(EC_CMD_HOST_EVENT_SET_SMI_MASK, 0, host_event_set_smi_mask, host_event_mask); _CROS_EC_CV_F_P(EC_CMD_HOST_EVENT_SET_WAKE_MASK, 0, host_event_set_wake_mask, host_event_mask); _CROS_EC_C0_F_PF(EC_CMD_HOST_SLEEP_EVENT, host_sleep_event); _CROS_EC_C1_F_PF_RF(EC_CMD_HOST_SLEEP_EVENT, host_sleep_event); _CROS_EC_C0_F_PF_RF(EC_CMD_I2C_CONTROL, i2c_control); _CROS_EC_C0_F_PF_RF(EC_CMD_I2C_PASSTHRU_PROTECT, i2c_passthru_protect); _CROS_EC_C0_F_RF(EC_CMD_KEYBOARD_FACTORY_TEST, keyboard_factory_test); _CROS_EC_CV_F_P_R(EC_CMD_LED_CONTROL, 1, led_control_v1, led_control, led_control); _CROS_EC_C0_F_PF_RF(EC_CMD_LOCATE_CHIP, locate_chip); _CROS_EC_C0_F_RF(EC_CMD_MKBP_GET_CONFIG, mkbp_get_config); _CROS_EC_C0_F_PF_RF(EC_CMD_MKBP_INFO, mkbp_info); _CROS_EC_C0_F_PF(EC_CMD_MKBP_SET_CONFIG, mkbp_set_config); _CROS_EC_C0_F_PF(EC_CMD_MKBP_SIMULATE_KEY, mkbp_simulate_key); _CROS_EC_CV_F_P_R(EC_CMD_MKBP_WAKE_MASK, 0, mkbp_wake_mask, mkbp_event_wake_mask, mkbp_event_wake_mask); _CROS_EC_CV_F_P_R(EC_CMD_MOTION_SENSE_CMD, 1, motion_sense_cmd_v1, motion_sense, motion_sense); _CROS_EC_CV_F_P_R(EC_CMD_MOTION_SENSE_CMD, 2, motion_sense_cmd_v2, motion_sense, motion_sense); _CROS_EC_CV_F_P_R(EC_CMD_MOTION_SENSE_CMD, 4, motion_sense_cmd_v4, motion_sense, motion_sense); _CROS_EC_CV_F_P(EC_CMD_OVERRIDE_DEDICATED_CHARGER_LIMIT, 0, override_dedicated_charger_limit, dedicated_charger_limit); _CROS_EC_C0_F_RF(EC_CMD_PCHG_COUNT, pchg_count); _CROS_EC_CV_F_P(EC_CMD_PD_CHARGE_PORT_OVERRIDE, 0, pd_charge_port_override, charge_port_override); _CROS_EC_CV_F_P_R(EC_CMD_PD_CHIP_INFO, 1, pd_chip_info_v1, pd_chip_info, pd_chip_info_v1); _CROS_EC_C0_F_PF_RF(EC_CMD_PD_CHIP_INFO, pd_chip_info); _CROS_EC_C0_F_PF(EC_CMD_PD_CONTROL, pd_control); _CROS_EC_CV_F_R(EC_CMD_PD_HOST_EVENT_STATUS, 0, pd_host_event_status, host_event_status); _CROS_EC_C0_F_PF(EC_CMD_PD_WRITE_LOG_ENTRY, pd_write_log_entry); _CROS_EC_C0_F_RF(EC_CMD_PORT80_LAST_BOOT, port80_last_boot); _CROS_EC_C1_F_RF(EC_CMD_POWER_INFO, power_info); _CROS_EC_CV_F_P_R(EC_CMD_PSE, 0, pse, pse, pse_status); _CROS_EC_C0_F_RF(EC_CMD_PSTORE_INFO, pstore_info); _CROS_EC_C0_F_PF(EC_CMD_PSTORE_WRITE, pstore_write); _CROS_EC_C0_F_PF_RF(EC_CMD_PWM_GET_DUTY, pwm_get_duty); _CROS_EC_C0_F_RF(EC_CMD_PWM_GET_KEYBOARD_BACKLIGHT, pwm_get_keyboard_backlight); _CROS_EC_C0_F_PF(EC_CMD_PWM_SET_DUTY, pwm_set_duty); _CROS_EC_C0_F_PF(EC_CMD_PWM_SET_FAN_DUTY, pwm_set_fan_duty_v0); _CROS_EC_C0_F_PF(EC_CMD_PWM_SET_KEYBOARD_BACKLIGHT, pwm_set_keyboard_backlight); _CROS_EC_C0_F_PF_RF(EC_CMD_RAND_NUM, rand_num); _CROS_EC_C0_F(EC_CMD_REBOOT, reboot); _CROS_EC_C0_F(EC_CMD_REBOOT_AP_ON_G3, reboot_ap_on_g3); _CROS_EC_C1_F_PF(EC_CMD_REBOOT_AP_ON_G3, reboot_ap_on_g3); _CROS_EC_C0_F_PF(EC_CMD_REBOOT_EC, reboot_ec); _CROS_EC_C0_F_PF(EC_CMD_REGULATOR_ENABLE, regulator_enable); _CROS_EC_C0_F_PF_RF(EC_CMD_REGULATOR_GET_VOLTAGE, regulator_get_voltage); _CROS_EC_C0_F_PF_RF(EC_CMD_REGULATOR_IS_ENABLED, regulator_is_enabled); _CROS_EC_C0_F_PF(EC_CMD_REGULATOR_SET_VOLTAGE, regulator_set_voltage); _CROS_EC_C0_F_PF_RF(EC_CMD_RGBKBD, rgbkbd); _CROS_EC_C0_F_RF(EC_CMD_ROLLBACK_INFO, rollback_info); _CROS_EC_CV_F_R(EC_CMD_RTC_GET_ALARM, 0, rtc_get_alarm, rtc); _CROS_EC_CV_F_R(EC_CMD_RTC_GET_VALUE, 0, rtc_get_value, rtc); _CROS_EC_CV_F_P(EC_CMD_RTC_SET_ALARM, 0, rtc_set_alarm, rtc); _CROS_EC_CV_F_P(EC_CMD_RTC_SET_VALUE, 0, rtc_set_value, rtc); _CROS_EC_C0_F_PF(EC_CMD_RWSIG_ACTION, rwsig_action); _CROS_EC_C0_F_RF(EC_CMD_RWSIG_CHECK_STATUS, rwsig_check_status); _CROS_EC_C0_F_RF(EC_CMD_RWSIG_INFO, rwsig_info); _CROS_EC_C0_F_PF(EC_CMD_SET_BASE_STATE, set_base_state); _CROS_EC_C0_F_PF(EC_CMD_SET_TABLET_MODE, set_tablet_mode); _CROS_EC_C0_F_PF_RF(EC_CMD_SMART_DISCHARGE, smart_discharge); _CROS_EC_CV_F_P(EC_CMD_SWITCH_ENABLE_BKLIGHT, 0, switch_enable_bklight, switch_enable_backlight); _CROS_EC_CV_F_P(EC_CMD_SWITCH_ENABLE_WIRELESS, 0, switch_enable_wireless, switch_enable_wireless_v0); _CROS_EC_C1_F_PF_RF(EC_CMD_SWITCH_ENABLE_WIRELESS, switch_enable_wireless); _CROS_EC_C0_F_RF(EC_CMD_SYSINFO, sysinfo); _CROS_EC_C0_F_PF_RF(EC_CMD_TEMP_SENSOR_GET_INFO, temp_sensor_get_info); _CROS_EC_C0_F_PF_RF(EC_CMD_TEST_PROTOCOL, test_protocol); _CROS_EC_C0_F(EC_CMD_THERMAL_AUTO_FAN_CTRL, thermal_auto_fan_ctrl); _CROS_EC_C0_F_PF_RF(EC_CMD_THERMAL_GET_THRESHOLD, thermal_get_threshold); _CROS_EC_C0_F_PF(EC_CMD_THERMAL_SET_THRESHOLD, thermal_set_threshold); _CROS_EC_C1_F_PF(EC_CMD_THERMAL_SET_THRESHOLD, thermal_set_threshold); _CROS_EC_C0_F_PF_RF(EC_CMD_TMP006_GET_RAW, tmp006_get_raw); _CROS_EC_C0_F_PF(EC_CMD_TYPEC_CONTROL, typec_control); _CROS_EC_C0_F_PF_RF(EC_CMD_TYPEC_STATUS, typec_status); _CROS_EC_C0_F_PF_RF(EC_CMD_TYPEC_VDM_RESPONSE, typec_vdm_response); _CROS_EC_C0_F_PF(EC_CMD_USB_CHARGE_SET_MODE, usb_charge_set_mode); _CROS_EC_C0_F_PF(EC_CMD_USB_MUX, usb_mux); _CROS_EC_CV_F_P_R(EC_CMD_USB_PD_CONTROL, 2, usb_pd_control_v2, usb_pd_control, usb_pd_control_v2); _CROS_EC_C0_F_PF_RF(EC_CMD_USB_PD_CONTROL, usb_pd_control); _CROS_EC_C0_F_PF(EC_CMD_USB_PD_DPS_CONTROL, usb_pd_dps_control); _CROS_EC_C0_F_PF(EC_CMD_USB_PD_MUX_ACK, usb_pd_mux_ack); _CROS_EC_C0_F_PF_RF(EC_CMD_USB_PD_MUX_INFO, usb_pd_mux_info); _CROS_EC_C0_F_RF(EC_CMD_USB_PD_PORTS, usb_pd_ports); _CROS_EC_C0_F_PF_RF(EC_CMD_USB_PD_POWER_INFO, usb_pd_power_info); _CROS_EC_C0_F_PF(EC_CMD_USB_PD_RW_HASH_ENTRY, usb_pd_rw_hash_entry); _CROS_EC_C0_F_PF_RF(EC_CMD_VBOOT_HASH, vboot_hash); _CROS_EC_C0_F_PF_RF(EC_CMD_VSTORE_READ, vstore_read); _CROS_EC_C0_F_PF(EC_CMD_VSTORE_WRITE, vstore_write); #ifdef __cplusplus } #endif #endif /* __CROS_EC_EC_CMD_API_H */