ec/google/chromeec: Update EC headers

Generated using update_ec_headers.sh [EC-DIR]

The original include/ec_commands.h version in the EC repo is:
  9b00e297ee chipset: Add a host command to issue AP shutdown
The original include/ec_cmd_api.h version in the EC repo is:
  0c77d31000 UCSI/PPM: Add ucsi_host_cmd tests

Change-Id: I9b27cdd946c2e20a996ef338ec57d08de4e26059
Signed-off-by: Kapil Porwal <kapilporwal@google.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/89007
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Subrata Banik <subratabanik@google.com>
This commit is contained in:
Kapil Porwal 2025-09-01 11:18:32 +05:30 committed by Matt DeVillier
commit ffbf40f6c0
2 changed files with 406 additions and 115 deletions

View file

@ -373,8 +373,12 @@ _CROS_EC_CV_F_P_R(EC_CMD_MOTION_SENSE_CMD, 4, motion_sense_cmd_v4, 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_C0_F_PF_RF(EC_CMD_PDC_TRACE_MSG_ENABLE, pdc_trace_msg_enable);
_CROS_EC_C0_F_RF(EC_CMD_PDC_TRACE_MSG_GET_ENTRIES, pdc_trace_msg_get_entries);
_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, 3, pd_chip_info_v3, pd_chip_info,
pd_chip_info_v3);
_CROS_EC_CV_F_P_R(EC_CMD_PD_CHIP_INFO, 2, pd_chip_info_v2, pd_chip_info,
pd_chip_info_v2);
_CROS_EC_CV_F_P_R(EC_CMD_PD_CHIP_INFO, 1, pd_chip_info_v1, pd_chip_info,
@ -446,6 +450,8 @@ _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);
_CROS_EC_C0_F_PF(EC_CMD_UCSI_PPM_SET, ucsi_ppm_set);
_CROS_EC_C0_F_PF(EC_CMD_UCSI_PPM_GET, ucsi_ppm_get);
#ifdef __cplusplus
}

View file

@ -5,12 +5,6 @@
/* Host communication command constants for Chrome EC */
/*
* TODO(b/272518464): Work around coreboot GCC preprocessor bug.
* #line marks the *next* line, so it is off by one.
*/
#line 13
#ifndef __CROS_EC_EC_COMMANDS_H
#define __CROS_EC_EC_COMMANDS_H
@ -148,6 +142,8 @@ extern "C" {
#define EC_MEMMAP_SIZE 255 /* ACPI IO buffer max is 255 bytes */
#define EC_MEMMAP_TEXT_MAX 8 /* Size of a string in the memory map */
#define EC_LPC_ADDR_MEMMAP_INDEXED_IO 0x380
/* The offset address of each type of data in mapped memory. */
#define EC_MEMMAP_TEMP_SENSOR 0x00 /* Temp sensors 0x00 - 0x0f */
#define EC_MEMMAP_FAN 0x10 /* Fan speeds 0x10 - 0x17 */
@ -272,10 +268,21 @@ extern "C" {
#define EC_BATT_FLAG_INVALID_DATA 0x20
#define EC_BATT_FLAG_CUT_OFF 0x40
/*
* Value written to EC_MEMMAP_BATT_DCAP, EC_MEMMAP_BATT_DVLT, EC_MEMMAP_CCNT,
* EC_MEMMAP_BATT_VOLT, EC_MEMMAP_BATT_RATE, EC_MEMMAP_BATT_CAP, and
* EC_MEMMAP_BATT_LFCC if the actual value is unknown.
*
* This corresponds with the unknown value specified by ACPI release 6.5
* 10.2.2 (and earlier versions), to match expectations of ACPI firmware.
*/
#define EC_MEMMAP_BATT_UNKNOWN_VALUE (-1)
/* Switch flags at EC_MEMMAP_SWITCHES */
#define EC_SWITCH_LID_OPEN 0x01
#define EC_SWITCH_POWER_BUTTON_PRESSED 0x02
#define EC_SWITCH_WRITE_PROTECT_DISABLED 0x04
/* Was write protect disabled; now unused. */
#define EC_SWITCH_IGNORE2 0x04
/* Was recovery requested via keyboard; now unused. */
#define EC_SWITCH_IGNORE1 0x08
/* Recovery requested via dedicated signal (from servo board) */
@ -526,6 +533,65 @@ extern "C" {
#define EC_ACPI_MEM_USB_RETIMER_OP(x) \
(((x) & 0xf0) >> USB_RETIMER_FW_UPDATE_OP_SHIFT)
/*
* Offset 0x15 is reserved for PBOK, added to coreboot in
* https://crrev.com/c/3840943 and proposed for inclusion here
* in https://crrev.com/c/3547317.
*/
/*
* Get extended strings from the EC.
* Write:
* String index, or 0 to probe for EC support.
* Read:
* String bytes, following by repeating null bytes.
*
* Writing a byte (EC_ACPI_MEM_STRINGS_FIFO_ID_*) selects a string, and the
* following reads return the non-null bytes of the string in sequence until
* the end of the string is reached. After the end of the string, reads 0 until
* another byte is written. This interface allows ACPI firmware to read longer
* strings from the EC than can reasonably fit into the shared memory region.
*
* To probe for EC support, write FIFO_ID_VERSION and read will return at least
* one nonzero (MEM_STRINGS_FIFO_V1 for example) if MEM_STRINGS_FIFO is
* supported. Returned values will indicate which strings are supported. If the
* first byte is 0xff, the strings FIFO is unsupported.
*/
#define EC_ACPI_MEM_STRINGS_FIFO 0x16
/* String index to probe EC support. */
#define EC_ACPI_MEM_STRINGS_FIFO_ID_VERSION 0
#define EC_ACPI_MEM_STRINGS_FIFO_V1 1
/*
* 0xff is the value the EC returns for unimplemented reads, indicating
* the current EC firmware does not implement this command.
*/
#define EC_ACPI_MEM_STRINGS_FIFO_UNSUPPORTED 0xff
/*
* Battery model number for the selected battery. Supported since V1.
* Presents the same data as EC_MEMMAP_BATT_MODEL, but can provide more
* than 8 bytes.
*
* This and the other FIFO_ID_BATTERY strings can select one of multiple
* batteries by changing the value at EC_MEMMAP_BATT_INDEX. Once that index
* is changed, reads of these strings will return information for the
* corresponding battery, if present.
*/
#define EC_ACPI_MEM_STRINGS_FIFO_ID_BATTERY_MODEL 1
/*
* Battery serial number for the selected battery. Supported since V1.
* Presents the same data as EC_MEMMAP_BATT_SERIAL, but can provide more
* than 8 bytes.
*/
#define EC_ACPI_MEM_STRINGS_FIFO_ID_BATTERY_SERIAL 2
/*
* Battery manufacturer for the selected battery. Supported since V1.
* Presents the same data as EC_MEMMAP_BATT_MFGR, but can provide more
* than 8 bytes.
*/
#define EC_ACPI_MEM_STRINGS_FIFO_ID_BATTERY_MANUFACTURER 3
/*
* ACPI addresses 0x20 - 0xff map to EC_MEMMAP offset 0x00 - 0xdf. This data
* is read-only from the AP. Added in EC_ACPI_MEM_VERSION 2.
@ -874,7 +940,7 @@ enum host_event_code {
};
/* Host event mask */
#define EC_HOST_EVENT_MASK(event_code) BIT_ULL((event_code)-1)
#define EC_HOST_EVENT_MASK(event_code) BIT_ULL((event_code) - 1)
/* clang-format off */
#define HOST_EVENT_TEXT \
@ -1701,6 +1767,14 @@ enum ec_feature_code {
* The EC supports UCSI PPM.
*/
EC_FEATURE_UCSI_PPM = 54,
/*
* The EC supports Strauss keyboard.
*/
EC_FEATURE_STRAUSS = 55,
/*
* The EC supports PoE.
*/
EC_FEATURE_POE = 56,
};
#define EC_FEATURE_MASK_0(event_code) BIT(event_code % 32)
@ -1836,7 +1910,7 @@ struct ec_response_flash_info_2 {
uint16_t num_banks_total;
/* Number of banks described in banks array. */
uint16_t num_banks_desc;
struct ec_flash_bank banks[0];
struct ec_flash_bank banks[FLEXIBLE_ARRAY_MEMBER_SIZE];
} __ec_align4;
/*
@ -2274,6 +2348,16 @@ struct ec_response_pwm_get_duty {
uint16_t duty; /* Duty cycle, EC_PWM_MAX_DUTY = 100% */
} __ec_align2;
#define EC_CMD_PWM_GET_FAN_DUTY 0x0027
struct ec_params_pwm_get_fan_duty {
uint8_t fan_idx;
} __ec_align1;
struct ec_response_pwm_get_fan_duty {
uint32_t percent; /* Percentage of duty cycle, ranging from 0 ~ 100 */
} __ec_align4;
/*****************************************************************************/
/*
* Lightbar commands. This looks worse than it is. Since we only use one HOST
@ -2607,6 +2691,8 @@ enum ec_led_id {
EC_LED_ID_RECOVERY_HW_REINIT_LED,
/* LED to indicate sysrq debug mode. */
EC_LED_ID_SYSRQ_DEBUG_LED,
/* LED strip for advanced patterns. */
EC_LED_ID_LIGHTBAR_LED,
EC_LED_ID_COUNT,
};
@ -3058,7 +3144,7 @@ struct ec_params_motion_sense {
*/
struct __ec_todo_unpacked {
/* Data to set or EC_MOTION_SENSE_NO_VALUE to read.
* kb_wake_angle: angle to wakup AP.
* kb_wake_angle: angle to wakeup AP.
*/
int16_t data;
} kb_wake_angle;
@ -3704,14 +3790,31 @@ struct ec_params_thermal_set_threshold_v1 {
/****************************************************************************/
/* Toggle automatic fan control */
/* Set or get fan control mode */
#define EC_CMD_THERMAL_AUTO_FAN_CTRL 0x0052
enum ec_auto_fan_ctrl_cmd {
EC_AUTO_FAN_CONTROL_CMD_SET = 0,
EC_AUTO_FAN_CONTROL_CMD_GET,
};
/* Version 1 of input params */
struct ec_params_auto_fan_ctrl_v1 {
uint8_t fan_idx;
} __ec_align1;
/* Version 2 of input params */
struct ec_params_auto_fan_ctrl_v2 {
uint8_t fan_idx;
uint8_t cmd; /* enum ec_auto_fan_ctrl_cmd */
uint8_t set_auto; /* only used with EC_AUTO_FAN_CONTROL_CMD_SET - bool
*/
} __ec_align4;
struct ec_response_auto_fan_control {
uint8_t is_auto; /* bool */
} __ec_align1;
/* Get/Set TMP006 calibration data */
#define EC_CMD_TMP006_GET_CALIBRATION 0x0053
#define EC_CMD_TMP006_SET_CALIBRATION 0x0054
@ -3752,7 +3855,7 @@ struct ec_response_tmp006_get_calibration_v1 {
uint8_t algorithm;
uint8_t num_params;
uint8_t reserved[2];
float val[0];
float val[FLEXIBLE_ARRAY_MEMBER_SIZE];
} __ec_align4;
struct ec_params_tmp006_set_calibration_v1 {
@ -3760,7 +3863,7 @@ struct ec_params_tmp006_set_calibration_v1 {
uint8_t algorithm;
uint8_t num_params;
uint8_t reserved;
float val[0];
float val[FLEXIBLE_ARRAY_MEMBER_SIZE];
} __ec_align4;
/* Read raw TMP006 data */
@ -3947,7 +4050,8 @@ struct ec_params_keyscan_seq_ctrl {
* start of the sequence.
*/
uint32_t time_us;
uint8_t scan[0]; /* keyscan data */
/* keyscan data */
uint8_t scan[FLEXIBLE_ARRAY_MEMBER_SIZE];
} add;
struct __ec_align1 {
uint8_t start_item; /* First item to return */
@ -3961,7 +4065,7 @@ struct ec_result_keyscan_seq_ctrl {
struct __ec_todo_unpacked {
uint8_t num_items; /* Number of items */
/* Data for each item */
struct ec_collect_item item[0];
struct ec_collect_item item[FLEXIBLE_ARRAY_MEMBER_SIZE];
} collect;
};
} __ec_todo_packed;
@ -4783,14 +4887,15 @@ struct ec_params_i2c_passthru_msg {
struct ec_params_i2c_passthru {
uint8_t port; /* I2C port number */
uint8_t num_msgs; /* Number of messages */
struct ec_params_i2c_passthru_msg msg[];
struct ec_params_i2c_passthru_msg msg[FLEXIBLE_ARRAY_MEMBER_SIZE];
/* Data to write for all messages is concatenated here */
} __ec_align2;
struct ec_response_i2c_passthru {
uint8_t i2c_status; /* Status flags (EC_I2C_STATUS_...) */
uint8_t num_msgs; /* Number of messages processed */
uint8_t data[]; /* Data read by messages concatenated here */
/* Data read by messages concatenated here */
uint8_t data[FLEXIBLE_ARRAY_MEMBER_SIZE];
} __ec_align1;
/*****************************************************************************/
@ -4881,6 +4986,33 @@ enum charge_state_params {
*/
CS_PARAM_LIMIT_POWER,
/* min value of charger voltage limit (READ ONLY) */
CS_PARAM_CHG_VOLTAGE_MIN,
/* max value of charger voltage limit (READ ONLY) */
CS_PARAM_CHG_VOLTAGE_MAX,
/* step value of charger voltage limit (READ ONLY) */
CS_PARAM_CHG_VOLTAGE_STEP,
/* min value of charger current limit (READ ONLY) */
CS_PARAM_CHG_CURRENT_MIN,
/* max value of charger current limit (READ ONLY) */
CS_PARAM_CHG_CURRENT_MAX,
/* step value of charger current limit (READ ONLY) */
CS_PARAM_CHG_CURRENT_STEP,
/* min value of charger input current limit (READ ONLY) */
CS_PARAM_CHG_INPUT_CURRENT_MIN,
/* max value of charger input current limit (READ ONLY) */
CS_PARAM_CHG_INPUT_CURRENT_MAX,
/* step value of charger input current limit (READ ONLY) */
CS_PARAM_CHG_INPUT_CURRENT_STEP,
/* How many so far? */
CS_NUM_BASE_PARAMS,
@ -5786,6 +5918,44 @@ struct ec_params_memory_dump_read_memory {
uint32_t size;
} __ec_align4;
#define EC_CMD_PANIC_LOG_INFO 0x00E0
/*
* Parameters for configuring the panic log.
* Freeze and unfreeze are mutually exclusive.
*/
struct ec_params_panic_log_info {
/* Reset panic log */
uint8_t reset;
/* Freeze panic log */
uint8_t freeze;
/* Unfreeze panic log */
uint8_t unfreeze;
} __ec_align1;
/*
* Returns the panic log info before applying the configuration
* in ec_params_panic_log_info.
*/
struct ec_response_panic_log_info {
uint32_t version;
uint32_t capacity;
uint32_t length;
uint8_t valid;
uint8_t frozen;
} __ec_align4;
#define EC_CMD_PANIC_LOG_READ 0x00E1
/*
* Read from panic log at given byte offset. Will read up to the end of the
* panic log or response max. Use EC_CMD_PANIC_LOG_INFO command to freeze
* the log and get the length before reading.
*/
struct ec_params_panic_log_read {
uint32_t offset;
} __ec_align4;
/*
* EC_CMD_MEMORY_DUMP_READ_MEMORY response buffer is written directly into
* host_cmd_handler_args.response and host_cmd_handler_args.response_size.
@ -5861,6 +6031,7 @@ struct ec_response_pd_status {
#define PD_EVENT_DATA_SWAP BIT(3)
#define PD_EVENT_TYPEC BIT(4)
#define PD_EVENT_PPM BIT(5)
#define PD_EVENT_INIT BIT(6)
struct ec_response_host_event_status {
uint32_t status; /* PD MCU host event status */
@ -6132,7 +6303,8 @@ struct ec_response_pd_log {
uint8_t type; /* event type : see PD_EVENT_xx below */
uint8_t size_port; /* [7:5] port number [4:0] payload size in bytes */
uint16_t data; /* type-defined data payload */
uint8_t payload[0]; /* optional additional data payload: 0..16 bytes */
/* optional additional data payload: 0..16 bytes */
uint8_t payload[FLEXIBLE_ARRAY_MEMBER_SIZE];
} __ec_align4;
/* The timestamp is the microsecond counter shifted to get about a ms. */
@ -6343,6 +6515,7 @@ struct ec_response_pd_chip_info_v1 {
* does NOT include a NUL-terminator.
*/
#define USB_PD_CHIP_INFO_PROJECT_NAME_LEN 12
struct ec_response_pd_chip_info_v2 {
uint16_t vendor_id;
uint16_t product_id;
@ -6363,6 +6536,33 @@ struct ec_response_pd_chip_info_v2 {
char fw_name_str[USB_PD_CHIP_INFO_PROJECT_NAME_LEN + 1];
} __ec_align2;
/** Maximum length of a driver/chip name reported in the pd_chip_info
* response
*/
#define USB_PD_CHIP_INFO_DRIVER_NAME_LEN 24
struct ec_response_pd_chip_info_v3 {
uint16_t vendor_id;
uint16_t product_id;
uint16_t device_id;
union {
uint8_t fw_version_string[8];
uint64_t fw_version_number;
} __ec_align2;
union {
uint8_t min_req_fw_version_string[8];
uint64_t min_req_fw_version_number;
} __ec_align2;
/** Flag to control the FW update process for this chip. */
uint16_t fw_update_flags;
/** Project name string associated with the chip's FW. Add an extra
* byte for a NUL-terminator.
*/
char fw_name_str[USB_PD_CHIP_INFO_PROJECT_NAME_LEN + 1];
/** Driver/chip string, plus room for a NUL-terminator */
char driver_name[USB_PD_CHIP_INFO_DRIVER_NAME_LEN + 1];
} __ec_align2;
/* Run RW signature verification and get status */
#define EC_CMD_RWSIG_CHECK_STATUS 0x011C
@ -6413,31 +6613,22 @@ enum cbi_data_tag {
/* Second Source Factory Cache */
CBI_TAG_SSFC = 8, /* uint32_t bit field */
CBI_TAG_REWORK_ID = 9, /* uint64_t or smaller */
CBI_TAG_FACTORY_CALIBRATION_DATA = 10, /* uint32_t bit field */
/*
* A uint32_t field reserved for controlling common features at runtime.
* It shouldn't be used at board-level. See union ec_common_control for
* the bit definitions.
*/
CBI_TAG_COMMON_CONTROL = 11,
CBI_TAG_FACTORY_CALIBRATION_DATA = 10, /* Deprecated */
CBI_TAG_COMMON_CONTROL = 11, /* Deprecated */
/* struct board_batt_params */
CBI_TAG_BATTERY_CONFIG = 12,
/* CBI_TAG_BATTERY_CONFIG_1 ~ 15 will use 13 ~ 27. */
CBI_TAG_BATTERY_CONFIG_15 = 27,
/* CBI_TAG_PROVISION_MATRIX_VERSION
* Version of the current provision matrix
*/
CBI_TAG_PROVISION_MATRIX_VERSION = 28, /* uint32_t bit field */
/* Last entry */
CBI_TAG_COUNT,
};
union ec_common_control {
struct {
uint32_t ucsi_enabled : 1;
};
uint32_t raw_value;
};
/*
* Flags to control read operation
*
@ -6466,7 +6657,7 @@ struct ec_params_set_cbi {
uint32_t tag; /* enum cbi_data_tag */
uint32_t flag; /* CBI_SET_* */
uint32_t size; /* Data size */
uint8_t data[]; /* For string and raw data */
uint8_t data[FLEXIBLE_ARRAY_MEMBER_SIZE]; /* For string and raw data */
} __ec_align1;
/*
@ -6498,7 +6689,7 @@ struct ec_params_set_cbi_bin {
uint32_t offset; /* Data offset */
uint32_t size; /* Data size */
uint8_t flags; /* bit field for EC_CBI_BIN_COMMIT_FLAG_* */
uint8_t data[]; /* For string and raw data */
uint8_t data[FLEXIBLE_ARRAY_MEMBER_SIZE]; /* For string and raw data */
} __ec_align1;
/*
@ -6596,6 +6787,8 @@ enum chipset_shutdown_reason {
CHIPSET_SHUTDOWN_THERMAL,
/* Force a chipset shutdown from the power button through EC */
CHIPSET_SHUTDOWN_BUTTON,
/* Force a chipset shutdown, because the AP wants to. */
CHIPSET_SHUTDOWN_HOST_CMD,
CHIPSET_SHUTDOWN_COUNT, /* End of shutdown reasons. */
};
@ -7113,7 +7306,7 @@ struct ec_response_typec_discovery {
uint8_t svid_count; /* Number of SVIDs partner sent */
uint16_t reserved;
uint32_t discovery_vdo[VDO_MAX_OBJECTS];
struct svid_mode_info svids[0];
struct svid_mode_info svids[FLEXIBLE_ARRAY_MEMBER_SIZE];
} __ec_align1;
/* USB Type-C commands for AP-controlled device policy. */
@ -7625,7 +7818,7 @@ struct ec_params_pchg_update {
/* Size of <data> */
uint32_t size;
/* Partial data of new firmware */
uint8_t data[];
uint8_t data[FLEXIBLE_ARRAY_MEMBER_SIZE];
} __ec_align4;
BUILD_ASSERT(EC_PCHG_UPDATE_CMD_COUNT <
@ -7759,7 +7952,7 @@ struct ec_params_rgbkbd_set_color {
/* Specifies # of elements in <color>. */
uint8_t length;
/* RGB color data array of length up to MAX_KEY_COUNT. */
struct rgb_s color[];
struct rgb_s color[FLEXIBLE_ARRAY_MEMBER_SIZE];
} __ec_align1;
/*
@ -7976,7 +8169,7 @@ struct ec_params_ap_fw_state {
/* The data size is stored in the host command protocol header. */
struct ec_params_ucsi_ppm_set {
uint16_t offset;
uint8_t data[];
uint8_t data[FLEXIBLE_ARRAY_MEMBER_SIZE];
} __ec_align2;
#define EC_CMD_UCSI_PPM_GET 0x0141
@ -7994,6 +8187,82 @@ struct ec_params_set_alarm_slp_s0_dbg {
uint32_t time;
} __ec_align2;
/*
* Control PDC tracing.
* EC_PDC_TRACE_MSG_PORT_NONE disable tracing
* EC_PDC_TRACE_MSG_PORT_ALL enable tracing on all ports
* else, enable tracing on a specific port.
*/
#define EC_CMD_PDC_TRACE_MSG_ENABLE 0x0143
#define EC_PDC_TRACE_MSG_PORT_NONE 0xff
#define EC_PDC_TRACE_MSG_PORT_ALL 0xfe
struct ec_params_pdc_trace_msg_enable {
uint8_t port;
};
struct ec_response_pdc_trace_msg_enable {
/* Previous port value. */
uint8_t port;
uint8_t reserved;
/* Number of free bytes in FIFO. */
uint16_t fifo_free;
/* Running total of dropped messages (may wrap). */
uint32_t dropped_count;
} __ec_align4;
/*
* Fetch multiple PDC trace entries.
*
* If no entries are available, pl_size is 0.
* At most MAX_HC_PDC_TRACE_MSG_GET_PAYLOAD bytes worth of entries
* are returned. Only whole entries are returned.
*/
#define EC_CMD_PDC_TRACE_MSG_GET_ENTRIES 0x0144
#define MAX_HC_PDC_TRACE_MSG_GET_PAYLOAD 240
struct ec_response_pdc_trace_msg_get_entries {
/* Total bytes of payload. */
uint16_t pl_size;
/* Packed array of pdc_trace_msg_entry structs. */
uint8_t payload[FLEXIBLE_ARRAY_MEMBER_SIZE];
};
enum pdc_trace_msg_direction {
PDC_TRACE_MSG_DIR_IN = 0,
PDC_TRACE_MSG_DIR_OUT = 1,
};
struct pdc_trace_msg_entry {
/*
* Timestamp - least significant 32 bits of EC epoch time
* (microseconds, will wrap around).
*/
uint32_t time32_us;
/* Entry sequence number (wraps around). */
uint16_t seq_num;
/* Port number associated with this entry. */
uint8_t port_num;
/* Direction of message (enum pdc_trace_msg_direction) */
uint8_t direction;
/* Format of pdc_data (PDC chip identifier). */
uint8_t msg_type;
/* Bytes in pdc_data. */
uint8_t pdc_data_size;
/* Captured PDC message. */
uint8_t pdc_data[FLEXIBLE_ARRAY_MEMBER_SIZE];
} __ec_align1;
/* Enable/disable Ethernet POE power */
#define EC_CMD_SWITCH_ENABLE_POE 0x0145
struct ec_params_switch_enable_poe {
uint8_t enabled;
} __ec_align1;
/*****************************************************************************/
/* The command range 0x200-0x2FF is reserved for Rotor. */
@ -8019,7 +8288,7 @@ struct ec_params_set_alarm_slp_s0_dbg {
struct ec_params_fp_passthru {
uint16_t len; /* Number of bytes to write then read */
uint16_t flags; /* EC_FP_FLAG_xxx */
uint8_t data[]; /* Data to send */
uint8_t data[FLEXIBLE_ARRAY_MEMBER_SIZE]; /* Data to send */
} __ec_align2;
/* Configure the Fingerprint MCU behavior */
@ -8052,9 +8321,9 @@ struct ec_params_fp_passthru {
FP_MODE_MATCH | FP_MODE_RESET_SENSOR | FP_MODE_SENSOR_MAINTENANCE | \
FP_MODE_DONT_CHANGE)
/* Capture types defined in bits [30..28] */
#define FP_MODE_CAPTURE_TYPE_SHIFT 28
#define FP_MODE_CAPTURE_TYPE_MASK (0x7 << FP_MODE_CAPTURE_TYPE_SHIFT)
/* Capture types defined in bits [30..26] */
#define FP_MODE_CAPTURE_TYPE_SHIFT 26
#define FP_MODE_CAPTURE_TYPE_MASK (0x1F << FP_MODE_CAPTURE_TYPE_SHIFT)
/**
* enum fp_capture_type - Specifies the "mode" when capturing images.
*
@ -8062,6 +8331,9 @@ struct ec_params_fp_passthru {
* image (produces 'frame_size' bytes)
* @FP_CAPTURE_SIMPLE_IMAGE: Simple raw image capture (produces width x height x
* bpp bits)
* @FP_CAPTURE_DEFECT_PXL_TEST: Capture for check defect pixel test
* @FP_CAPTURE_ABNORMAL_TEST: Capture for check abnormal pixel test
* @FP_CAPTURE_NOISE_TEST: Capture for check noise test
* @FP_CAPTURE_PATTERN0: Self test pattern (e.g. checkerboard)
* @FP_CAPTURE_PATTERN1: Self test pattern (e.g. inverted checkerboard)
* @FP_CAPTURE_QUALITY_TEST: Capture for Quality test with fixed contrast
@ -8073,16 +8345,24 @@ struct ec_params_fp_passthru {
*/
enum fp_capture_type {
FP_CAPTURE_VENDOR_FORMAT = 0,
FP_CAPTURE_SIMPLE_IMAGE = 1,
FP_CAPTURE_PATTERN0 = 2,
FP_CAPTURE_PATTERN1 = 3,
FP_CAPTURE_QUALITY_TEST = 4,
FP_CAPTURE_RESET_TEST = 5,
FP_CAPTURE_DEFECT_PXL_TEST = 1,
FP_CAPTURE_ABNORMAL_TEST = 2,
FP_CAPTURE_NOISE_TEST = 3,
FP_CAPTURE_SIMPLE_IMAGE = 4,
FP_CAPTURE_PATTERN0 = 8,
FP_CAPTURE_PATTERN1 = 12,
FP_CAPTURE_QUALITY_TEST = 16,
FP_CAPTURE_RESET_TEST = 20,
FP_CAPTURE_TYPE_MAX,
};
/* The maximum number of capture types in enum fp_capture_type */
#define FP_MAX_CAPTURE_TYPES 9
/* Extracts the capture type from the sensor 'mode' word */
#define FP_CAPTURE_TYPE(mode) \
(((mode) & FP_MODE_CAPTURE_TYPE_MASK) >> FP_MODE_CAPTURE_TYPE_SHIFT)
#define FP_CAPTURE_TYPE(mode) \
(enum fp_capture_type)(((mode) & FP_MODE_CAPTURE_TYPE_MASK) >> \
FP_MODE_CAPTURE_TYPE_SHIFT)
struct ec_params_fp_mode {
uint32_t mode; /* as defined by FP_MODE_ constants */
@ -8095,10 +8375,14 @@ struct ec_response_fp_mode {
/* Retrieve Fingerprint sensor information */
#define EC_CMD_FP_INFO 0x0403
/* Mask for dead pixels */
#define FP_ERROR_DEAD_PIXELS_MASK 0x3FF
/* Maximum number of dead pixels */
#define FP_ERROR_DEAD_PIXELS_MAX (FP_ERROR_DEAD_PIXELS_MASK - 1)
/* Number of dead pixels detected on the last maintenance */
#define FP_ERROR_DEAD_PIXELS(errors) ((errors) & 0x3FF)
#define FP_ERROR_DEAD_PIXELS(errors) ((errors) & FP_ERROR_DEAD_PIXELS_MASK)
/* Unknown number of dead pixels detected on the last maintenance */
#define FP_ERROR_DEAD_PIXELS_UNKNOWN (0x3FF)
#define FP_ERROR_DEAD_PIXELS_UNKNOWN (FP_ERROR_DEAD_PIXELS_MASK)
/* No interrupt from the sensor */
#define FP_ERROR_NO_IRQ BIT(12)
/* SPI communication error */
@ -8144,6 +8428,51 @@ struct ec_response_fp_info {
uint32_t template_version; /* version of the template format */
} __ec_align4;
struct fp_sensor_info {
/* Sensor identification */
uint32_t vendor_id;
uint32_t product_id;
uint32_t model_id;
uint32_t version;
uint16_t num_capture_types; /* number of image capture types */
uint16_t errors; /* see FP_ERROR_ flags above */
} __ec_align4;
BUILD_ASSERT(sizeof(struct fp_sensor_info) == 20);
struct fp_template_info {
/* Template/finger current information */
uint32_t template_size; /* max template size in bytes */
uint16_t template_max; /* maximum number of fingers/templates */
uint16_t template_valid; /* number of valid fingers/templates */
uint32_t template_dirty; /* bitmap of templates with MCU side changes */
uint32_t template_version; /* version of the template format */
} __ec_align4;
BUILD_ASSERT(sizeof(struct fp_template_info) == 16);
struct fp_image_frame_params {
/* Image frame characteristics */
uint32_t frame_size;
uint32_t pixel_format; /* using V4L2_PIX_FMT_ */
uint16_t width;
uint16_t height;
uint16_t bpp;
/** Type of image capture from enum fp_capture_type. */
uint8_t fp_capture_type;
uint8_t reserved; /**< padding for alignment */
} __ec_align4;
BUILD_ASSERT(sizeof(struct fp_image_frame_params) == 16);
struct ec_response_fp_info_v2 {
/* Sensor identification */
struct fp_sensor_info sensor_info;
/* Template/finger current information */
struct fp_template_info template_info;
/* fingerprint image frame parameters */
struct fp_image_frame_params
image_frame_params[FLEXIBLE_ARRAY_MEMBER_SIZE];
} __ec_align4;
BUILD_ASSERT(sizeof(struct ec_response_fp_info_v2) == 36);
/* Get the last captured finger frame or a template content */
#define EC_CMD_FP_FRAME 0x0404
@ -8205,7 +8534,7 @@ struct ec_params_fp_frame {
struct ec_params_fp_template {
uint32_t offset;
uint32_t size;
uint8_t data[];
uint8_t data[FLEXIBLE_ARRAY_MEMBER_SIZE];
} __ec_align4;
/* Clear the current fingerprint user context and set a new one */
@ -8260,16 +8589,12 @@ struct ec_params_fp_seed {
/* FP TPM seed has been set or not */
#define FP_ENC_STATUS_SEED_SET BIT(0)
/* FP using nonce context or not */
#define FP_CONTEXT_STATUS_NONCE_CONTEXT_SET BIT(1)
/* FP match had been processed or not */
#define FP_CONTEXT_STATUS_MATCH_PROCESSED_SET BIT(2)
/* FP auth_nonce had been set or not*/
#define FP_CONTEXT_AUTH_NONCE_SET BIT(3)
/* Session was established or not */
#define FP_CONTEXT_STATUS_SESSION_ESTABLISHED BIT(1)
/* FP session_nonce had been set or not*/
#define FP_CONTEXT_SESSION_NONCE_SET BIT(2)
/* FP user_id had been set or not*/
#define FP_CONTEXT_USER_ID_SET BIT(4)
/* FP templates are unlocked for nonce context or not */
#define FP_CONTEXT_TEMPLATE_UNLOCKED_SET BIT(5)
#define FP_CONTEXT_USER_ID_SET BIT(3)
struct ec_response_fp_encryption_status {
/* Used bits in encryption engine status */
@ -8327,7 +8652,6 @@ struct fp_encrypted_private_key {
struct ec_response_fp_establish_pairing_key_keygen {
struct fp_elliptic_curve_public_key pubkey;
struct fp_encrypted_private_key encrypted_private_key;
} __ec_align4;
#define FP_PAIRING_KEY_LEN 32
@ -8341,7 +8665,6 @@ struct ec_fp_encrypted_pairing_key {
struct ec_params_fp_establish_pairing_key_wrap {
struct fp_elliptic_curve_public_key peers_pubkey;
struct fp_encrypted_private_key encrypted_private_key;
} __ec_align4;
struct ec_response_fp_establish_pairing_key_wrap {
@ -8353,62 +8676,21 @@ struct ec_response_fp_establish_pairing_key_wrap {
typedef struct ec_response_fp_establish_pairing_key_wrap
ec_params_fp_load_pairing_key;
#define FP_CK_AUTH_NONCE_LEN 32
#define FP_CK_SESSION_NONCE_LEN 32
#define EC_CMD_FP_GENERATE_NONCE 0x0413
struct ec_response_fp_generate_nonce {
uint8_t nonce[FP_CK_AUTH_NONCE_LEN];
uint8_t nonce[FP_CK_SESSION_NONCE_LEN];
} __ec_align4;
#define FP_CONTEXT_USERID_LEN 32
#define FP_CONTEXT_USERID_IV_LEN 16
#define FP_CONTEXT_KEY_LEN 32
#define EC_CMD_FP_NONCE_CONTEXT 0x0414
struct ec_params_fp_nonce_context {
uint8_t gsc_nonce[FP_CK_AUTH_NONCE_LEN];
uint8_t enc_user_id[FP_CONTEXT_USERID_LEN];
uint8_t enc_user_id_iv[FP_CONTEXT_USERID_IV_LEN];
#define EC_CMD_FP_ESTABLISH_SESSION 0x0414
struct ec_params_fp_establish_session {
uint8_t peer_nonce[FP_CK_SESSION_NONCE_LEN];
uint8_t enc_tpm_seed[FP_CONTEXT_TPM_BYTES];
uint8_t nonce[FP_AES_KEY_NONCE_BYTES];
uint8_t tag[FP_AES_KEY_TAG_BYTES];
} __ec_align4;
#define FP_ELLIPTIC_CURVE_PUBLIC_KEY_IV_LEN 16
#define EC_CMD_FP_READ_MATCH_SECRET_WITH_PUBKEY 0x0415
struct ec_params_fp_read_match_secret_with_pubkey {
uint16_t fgr;
uint16_t reserved;
struct fp_elliptic_curve_public_key pubkey;
} __ec_align4;
struct ec_response_fp_read_match_secret_with_pubkey {
struct fp_elliptic_curve_public_key pubkey;
uint8_t iv[FP_ELLIPTIC_CURVE_PUBLIC_KEY_IV_LEN];
uint8_t enc_secret[FP_POSITIVE_MATCH_SECRET_BYTES];
} __ec_align4;
/* Unlock the fpsensor template with the current nonce context */
#define EC_CMD_FP_UNLOCK_TEMPLATE 0x0417
struct ec_params_fp_unlock_template {
uint16_t fgr_num;
} __ec_align4;
/*
* Migrate a legacy FP template (here, legacy refers to being generated in a
* raw user_id context instead of a nonce context) by wiping its match secret
* salt and treating it as a newly-enrolled template.
* The legacy FP template needs to be uploaded by FP_TEMPLATE command first
* without committing, then this command will commit it.
*/
#define EC_CMD_FP_MIGRATE_TEMPLATE_TO_NONCE_CONTEXT 0x0418
struct ec_params_fp_migrate_template_to_nonce_context {
/* The context userid used to encrypt this template when it was created.
*/
uint32_t userid[FP_CONTEXT_USERID_WORDS];
};
/*****************************************************************************/
/* Touchpad MCU commands: range 0x0500-0x05FF */
@ -8420,7 +8702,7 @@ struct ec_params_fp_migrate_template_to_nonce_context {
struct ec_response_tp_frame_info {
uint32_t n_frames;
uint32_t frame_sizes[0];
uint32_t frame_sizes[FLEXIBLE_ARRAY_MEMBER_SIZE];
} __ec_align4;
/* Create a snapshot of current frame readings */
@ -8603,6 +8885,9 @@ struct ec_response_get_boot_time {
uint16_t cnt;
} __ec_align4;
/* Issue AP shutdown */
#define EC_CMD_AP_SHUTDOWN 0x0605
/*****************************************************************************/
/*
* Reserve a range of host commands for board-specific, experimental, or