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: 9fdd96bfc6 keyboard: Add support for a "Dictation" key The original include/ec_cmd_api.h version in the EC repo is: 562316a71e include: Add fingerprint host commands to ec_cmd_api.h Change-Id: I7ec965d07aa4cb1fe54916845780f342ea3debb9 Signed-off-by: Aseda Aboagye <aaboagye@google.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/81932 Reviewed-by: Forest Mittelberg <bmbm@google.com> Reviewed-by: Caveh Jalali <caveh@chromium.org> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
parent
c1a390f8c9
commit
abc3812365
@ -107,6 +107,20 @@ ec_cmd_usb_pd_set_amode(CROS_EC_COMMAND_INFO *h,
|
||||
NULL, 0);
|
||||
}
|
||||
|
||||
static inline int ec_cmd_fp_frame(CROS_EC_COMMAND_INFO *h,
|
||||
const struct ec_params_fp_frame *p,
|
||||
uint8_t *r)
|
||||
{
|
||||
return CROS_EC_COMMAND(h, EC_CMD_FP_FRAME, 0, p, sizeof(*p), r,
|
||||
p->size);
|
||||
}
|
||||
|
||||
static inline int ec_cmd_fp_template(CROS_EC_COMMAND_INFO *h,
|
||||
const struct ec_params_fp_template *p,
|
||||
int size)
|
||||
{
|
||||
return CROS_EC_COMMAND(h, EC_CMD_FP_TEMPLATE, 0, p, size, NULL, 0);
|
||||
}
|
||||
/*
|
||||
* Section 2: EC interface functions that can be generated with the help
|
||||
* of template macros.
|
||||
@ -280,9 +294,13 @@ _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_PF_RF(EC_CMD_FP_MODE, fp_mode);
|
||||
_CROS_EC_C0_F_PF_RF(EC_CMD_FP_READ_MATCH_SECRET, fp_read_match_secret);
|
||||
_CROS_EC_C0_F_RF(EC_CMD_FP_ENC_STATUS, fp_encryption_status);
|
||||
_CROS_EC_C0_F_RF(EC_CMD_FP_STATS, fp_stats);
|
||||
_CROS_EC_C1_F_PF(EC_CMD_FP_CONTEXT, fp_context);
|
||||
_CROS_EC_CV_F_R(EC_CMD_FP_INFO, 1, fp_info, fp_info);
|
||||
_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);
|
||||
@ -292,8 +310,9 @@ _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_C1_F_RF(EC_CMD_GET_NEXT_EVENT, get_next_event);
|
||||
_CROS_EC_CV_F_R(EC_CMD_GET_NEXT_EVENT, 2, get_next_event_v2, get_next_event_v1);
|
||||
_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);
|
||||
@ -304,7 +323,7 @@ _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_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);
|
||||
|
@ -690,6 +690,8 @@ enum ec_status {
|
||||
EC_RES_INVALID_DATA_CRC = 19, /* Data CRC invalid */
|
||||
EC_RES_DUP_UNAVAILABLE = 20, /* Can't resend response */
|
||||
|
||||
EC_RES_COUNT,
|
||||
|
||||
EC_RES_MAX = UINT16_MAX, /**< Force enum to be 16 bits */
|
||||
} __packed;
|
||||
BUILD_ASSERT(sizeof(enum ec_status) == sizeof(uint16_t));
|
||||
@ -737,6 +739,39 @@ BUILD_ASSERT((uint16_t)EC_RES_MAX == (uint16_t)EC_HOST_CMD_MAX);
|
||||
|
||||
#endif
|
||||
|
||||
/* clang-format off */
|
||||
#define EC_STATUS_TEXT \
|
||||
{ \
|
||||
EC_MAP_ITEM(EC_RES_SUCCESS, SUCCESS), \
|
||||
EC_MAP_ITEM(EC_RES_INVALID_COMMAND, INVALID_COMMAND), \
|
||||
EC_MAP_ITEM(EC_RES_ERROR, ERROR), \
|
||||
EC_MAP_ITEM(EC_RES_INVALID_PARAM, INVALID_PARAM), \
|
||||
EC_MAP_ITEM(EC_RES_ACCESS_DENIED, ACCESS_DENIED), \
|
||||
EC_MAP_ITEM(EC_RES_INVALID_RESPONSE, INVALID_RESPONSE), \
|
||||
EC_MAP_ITEM(EC_RES_INVALID_VERSION, INVALID_VERSION), \
|
||||
EC_MAP_ITEM(EC_RES_INVALID_CHECKSUM, INVALID_CHECKSUM), \
|
||||
EC_MAP_ITEM(EC_RES_IN_PROGRESS, IN_PROGRESS), \
|
||||
EC_MAP_ITEM(EC_RES_UNAVAILABLE, UNAVAILABLE), \
|
||||
EC_MAP_ITEM(EC_RES_TIMEOUT, TIMEOUT), \
|
||||
EC_MAP_ITEM(EC_RES_OVERFLOW, OVERFLOW), \
|
||||
EC_MAP_ITEM(EC_RES_INVALID_HEADER, INVALID_HEADER), \
|
||||
EC_MAP_ITEM(EC_RES_REQUEST_TRUNCATED, REQUEST_TRUNCATED), \
|
||||
EC_MAP_ITEM(EC_RES_RESPONSE_TOO_BIG, RESPONSE_TOO_BIG), \
|
||||
EC_MAP_ITEM(EC_RES_BUS_ERROR, BUS_ERROR), \
|
||||
EC_MAP_ITEM(EC_RES_BUSY, BUSY), \
|
||||
EC_MAP_ITEM(EC_RES_INVALID_HEADER_VERSION, INVALID_HEADER_VERSION), \
|
||||
EC_MAP_ITEM(EC_RES_INVALID_HEADER_CRC, INVALID_HEADER_CRC), \
|
||||
EC_MAP_ITEM(EC_RES_INVALID_DATA_CRC, INVALID_DATA_CRC), \
|
||||
EC_MAP_ITEM(EC_RES_DUP_UNAVAILABLE, DUP_UNAVAILABLE), \
|
||||
}
|
||||
/* clang-format on */
|
||||
|
||||
#ifndef __cplusplus
|
||||
#define EC_MAP_ITEM(k, v) [k] = #v
|
||||
BUILD_ASSERT(ARRAY_SIZE(((const char *[])EC_STATUS_TEXT)) == EC_RES_COUNT);
|
||||
#undef EC_MAP_ITEM
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Host event codes. ACPI query EC command uses code 0 to mean "no event
|
||||
* pending". We explicitly specify each value in the enum listing so they won't
|
||||
@ -1658,6 +1693,10 @@ enum ec_feature_code {
|
||||
* The EC supports DP2.1 capability
|
||||
*/
|
||||
EC_FEATURE_TYPEC_DP2_1 = 52,
|
||||
/*
|
||||
* The MCU is System Companion Processor Core 1
|
||||
*/
|
||||
EC_FEATURE_SCP_C1 = 53,
|
||||
};
|
||||
|
||||
#define EC_FEATURE_MASK_0(event_code) BIT(event_code % 32)
|
||||
@ -2864,6 +2903,7 @@ enum motionsensor_chip {
|
||||
MOTIONSENSE_CHIP_BMI323 = 28,
|
||||
MOTIONSENSE_CHIP_BMI220 = 29,
|
||||
MOTIONSENSE_CHIP_CM32183 = 30,
|
||||
MOTIONSENSE_CHIP_VEML3328 = 31,
|
||||
MOTIONSENSE_CHIP_MAX,
|
||||
};
|
||||
|
||||
@ -4122,6 +4162,7 @@ struct ec_response_keyboard_factory_test {
|
||||
#define EC_MKBP_FP_ERR_MATCH_NO 0
|
||||
#define EC_MKBP_FP_ERR_MATCH_NO_INTERNAL 6
|
||||
#define EC_MKBP_FP_ERR_MATCH_NO_TEMPLATES 7
|
||||
#define EC_MKBP_FP_ERR_MATCH_NO_AUTH_FAIL 8
|
||||
#define EC_MKBP_FP_ERR_MATCH_NO_LOW_QUALITY 2
|
||||
#define EC_MKBP_FP_ERR_MATCH_NO_LOW_COVERAGE 4
|
||||
#define EC_MKBP_FP_ERR_MATCH_YES 1
|
||||
@ -4707,60 +4748,50 @@ struct ec_response_i2c_passthru {
|
||||
} __ec_align1;
|
||||
|
||||
/*****************************************************************************/
|
||||
/* Power button hang detect */
|
||||
|
||||
/* AP hang detect */
|
||||
#define EC_CMD_HANG_DETECT 0x009F
|
||||
|
||||
/* Reasons to start hang detection timer */
|
||||
/* Power button pressed */
|
||||
#define EC_HANG_START_ON_POWER_PRESS BIT(0)
|
||||
#define EC_HANG_DETECT_MIN_TIMEOUT 5
|
||||
|
||||
/* Lid closed */
|
||||
#define EC_HANG_START_ON_LID_CLOSE BIT(1)
|
||||
/* EC hang detect commands */
|
||||
enum ec_hang_detect_cmds {
|
||||
/* Reload AP hang detect timer. */
|
||||
EC_HANG_DETECT_CMD_RELOAD = 0x0,
|
||||
|
||||
/* Lid opened */
|
||||
#define EC_HANG_START_ON_LID_OPEN BIT(2)
|
||||
/* Stop AP hang detect timer. */
|
||||
EC_HANG_DETECT_CMD_CANCEL = 0x1,
|
||||
|
||||
/* Start of AP S3->S0 transition (booting or resuming from suspend) */
|
||||
#define EC_HANG_START_ON_RESUME BIT(3)
|
||||
|
||||
/* Reasons to cancel hang detection */
|
||||
|
||||
/* Power button released */
|
||||
#define EC_HANG_STOP_ON_POWER_RELEASE BIT(8)
|
||||
|
||||
/* Any host command from AP received */
|
||||
#define EC_HANG_STOP_ON_HOST_COMMAND BIT(9)
|
||||
|
||||
/* Stop on end of AP S0->S3 transition (suspending or shutting down) */
|
||||
#define EC_HANG_STOP_ON_SUSPEND BIT(10)
|
||||
|
||||
/*
|
||||
* If this flag is set, all the other fields are ignored, and the hang detect
|
||||
* timer is started. This provides the AP a way to start the hang timer
|
||||
* without reconfiguring any of the other hang detect settings. Note that
|
||||
* you must previously have configured the timeouts.
|
||||
/* Configure watchdog with given reboot timeout and
|
||||
* cancel currently running AP hand detect timer.
|
||||
*/
|
||||
#define EC_HANG_START_NOW BIT(30)
|
||||
EC_HANG_DETECT_CMD_SET_TIMEOUT = 0x2,
|
||||
|
||||
/*
|
||||
* If this flag is set, all the other fields are ignored (including
|
||||
* EC_HANG_START_NOW). This provides the AP a way to stop the hang timer
|
||||
* without reconfiguring any of the other hang detect settings.
|
||||
/* Get last hang status - whether the AP boot was clear or not */
|
||||
EC_HANG_DETECT_CMD_GET_STATUS = 0x3,
|
||||
|
||||
/* Clear last hang status. Called when AP is rebooting/shutting down
|
||||
* gracefully.
|
||||
*/
|
||||
#define EC_HANG_STOP_NOW BIT(31)
|
||||
EC_HANG_DETECT_CMD_CLEAR_STATUS = 0x4
|
||||
};
|
||||
|
||||
struct ec_params_hang_detect {
|
||||
/* Flags; see EC_HANG_* */
|
||||
uint32_t flags;
|
||||
|
||||
/* Timeout in msec before generating host event, if enabled */
|
||||
uint16_t host_event_timeout_msec;
|
||||
|
||||
/* Timeout in msec before generating warm reboot, if enabled */
|
||||
uint16_t warm_reboot_timeout_msec;
|
||||
} __ec_align4;
|
||||
uint16_t command; /* enum ec_hang_detect_cmds */
|
||||
/* Timeout in seconds before generating reboot */
|
||||
uint16_t reboot_timeout_sec;
|
||||
} __ec_align2;
|
||||
|
||||
/* Status codes that describe whether AP has boot normally or the hang has been
|
||||
* detected and EC has reset AP
|
||||
*/
|
||||
enum ec_hang_detect_status {
|
||||
EC_HANG_DETECT_AP_BOOT_NORMAL = 0x0,
|
||||
EC_HANG_DETECT_AP_BOOT_EC_WDT = 0x1,
|
||||
EC_HANG_DETECT_AP_BOOT_COUNT,
|
||||
};
|
||||
struct ec_response_hang_detect {
|
||||
uint8_t status; /* enum ec_hang_detect_status */
|
||||
} __ec_align1;
|
||||
/*****************************************************************************/
|
||||
/* Commands for battery charging */
|
||||
|
||||
@ -4817,7 +4848,7 @@ enum charge_state_params {
|
||||
CS_PARAM_DEBUG_MANUAL_MODE,
|
||||
CS_PARAM_DEBUG_SEEMS_DEAD,
|
||||
CS_PARAM_DEBUG_SEEMS_DISCONNECTED,
|
||||
CS_PARAM_DEBUG_BATT_REMOVED,
|
||||
CS_PARAM_DEBUG_BATT_REMOVED, /* Deprecated */
|
||||
CS_PARAM_DEBUG_MANUAL_CURRENT,
|
||||
CS_PARAM_DEBUG_MANUAL_VOLTAGE,
|
||||
CS_PARAM_DEBUG_MAX = 0x2ffff,
|
||||
@ -6316,6 +6347,7 @@ enum cbi_data_tag {
|
||||
/* 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,
|
||||
|
||||
/* Last entry */
|
||||
CBI_TAG_COUNT,
|
||||
@ -6323,7 +6355,7 @@ enum cbi_data_tag {
|
||||
|
||||
union ec_common_control {
|
||||
struct {
|
||||
uint32_t bcic_enabled : 1;
|
||||
uint32_t bcic_enabled : 1; /* Unused. Take it over as yours. */
|
||||
};
|
||||
uint32_t raw_value;
|
||||
};
|
||||
@ -6565,6 +6597,7 @@ struct ec_response_rollback_info {
|
||||
enum ec_chip_type {
|
||||
EC_CHIP_TYPE_CBI_EEPROM = 0,
|
||||
EC_CHIP_TYPE_TCPC = 1,
|
||||
EC_CHIP_TYPE_PDC = 2,
|
||||
EC_CHIP_TYPE_COUNT,
|
||||
EC_CHIP_TYPE_MAX = 0xFF,
|
||||
};
|
||||
@ -6760,6 +6793,9 @@ enum action_key {
|
||||
TK_KBD_BKLIGHT_TOGGLE = 18,
|
||||
TK_MICMUTE = 19,
|
||||
TK_MENU = 20,
|
||||
TK_DICTATE = 21,
|
||||
|
||||
TK_COUNT
|
||||
};
|
||||
|
||||
/*
|
||||
@ -6784,6 +6820,11 @@ enum action_key {
|
||||
*/
|
||||
#define KEYBD_CAP_SCRNLOCK_KEY BIT(2)
|
||||
|
||||
/*
|
||||
* Whether the keyboard has an assistant key.
|
||||
*/
|
||||
#define KEYBD_CAP_ASSISTANT_KEY BIT(3)
|
||||
|
||||
struct ec_response_keybd_config {
|
||||
/*
|
||||
* Number of top row keys, excluding Esc and Screenlock.
|
||||
@ -7123,6 +7164,7 @@ enum tcpc_cc_polarity {
|
||||
#define PD_STATUS_EVENT_VDM_REQ_REPLY BIT(6)
|
||||
#define PD_STATUS_EVENT_VDM_REQ_FAILED BIT(7)
|
||||
#define PD_STATUS_EVENT_VDM_ATTENTION BIT(8)
|
||||
#define PD_STATUS_EVENT_COUNT 9
|
||||
|
||||
/*
|
||||
* Encode and decode for BCD revision response
|
||||
@ -7428,7 +7470,8 @@ enum pchg_state {
|
||||
#define EC_MKBP_PCHG_EVENT_TO_PORT(e) (((e) >> EC_MKBP_PCHG_PORT_SHIFT) & 0xf)
|
||||
#define EC_MKBP_PCHG_PORT_TO_EVENT(p) ((p) << EC_MKBP_PCHG_PORT_SHIFT)
|
||||
/* Utility macro for extracting event bits. */
|
||||
#define EC_MKBP_PCHG_EVENT_MASK(e) ((e)&GENMASK(EC_MKBP_PCHG_PORT_SHIFT - 1, 0))
|
||||
#define EC_MKBP_PCHG_EVENT_MASK(e) \
|
||||
((e) & GENMASK(EC_MKBP_PCHG_PORT_SHIFT - 1, 0))
|
||||
|
||||
#define EC_MKBP_PCHG_UPDATE_OPENED BIT(0)
|
||||
#define EC_MKBP_PCHG_WRITE_COMPLETE BIT(1)
|
||||
@ -7726,7 +7769,7 @@ struct battery_info {
|
||||
uint8_t reserved;
|
||||
} __packed __aligned(2);
|
||||
|
||||
/**
|
||||
/*
|
||||
* The 'config' of a battery.
|
||||
*/
|
||||
struct board_batt_params {
|
||||
@ -7734,9 +7777,22 @@ struct board_batt_params {
|
||||
struct battery_info batt_info;
|
||||
} __packed __aligned(4);
|
||||
|
||||
#define SBS_MAX_STRING_SIZE 32
|
||||
/*
|
||||
* The SBS defines a string object as a block of chars, 32 byte maximum, where
|
||||
* the first byte indicates the number of chars in the block (excluding the
|
||||
* first byte).
|
||||
*
|
||||
* Thus, the actual string length (i.e. the value strlen returns) is limited to
|
||||
* 31 (=SBS_MAX_STR_SIZE).
|
||||
*
|
||||
* SBS_MAX_STR_OBJ_SIZE can be used as the size of a buffer for an SBS string
|
||||
* object but also as a buffer for a c-lang string because the null terminating
|
||||
* char also takes one byte.
|
||||
*/
|
||||
#define SBS_MAX_STR_SIZE 31
|
||||
#define SBS_MAX_STR_OBJ_SIZE (SBS_MAX_STR_SIZE + 1)
|
||||
|
||||
/**
|
||||
/*
|
||||
* Header describing a battery config stored in CBI. Only struct_version has
|
||||
* size and position independent of struct_version. The rest varies as
|
||||
* struct_version changes.
|
||||
@ -7777,7 +7833,7 @@ struct batt_conf_header {
|
||||
} __packed;
|
||||
|
||||
#define BATT_CONF_MAX_SIZE \
|
||||
(sizeof(struct batt_conf_header) + SBS_MAX_STRING_SIZE * 2 + \
|
||||
(sizeof(struct batt_conf_header) + SBS_MAX_STR_OBJ_SIZE * 2 + \
|
||||
sizeof(struct board_batt_params))
|
||||
|
||||
/*
|
||||
@ -8067,6 +8123,10 @@ struct ec_params_fp_seed {
|
||||
#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)
|
||||
/* 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)
|
||||
|
||||
struct ec_response_fp_encryption_status {
|
||||
/* Used bits in encryption engine status */
|
||||
@ -8184,15 +8244,11 @@ struct ec_response_fp_read_match_secret_with_pubkey {
|
||||
uint8_t enc_secret[FP_POSITIVE_MATCH_SECRET_BYTES];
|
||||
} __ec_align4;
|
||||
|
||||
/* Preload encrypted template into the MCU buffer */
|
||||
#define EC_CMD_FP_PRELOAD_TEMPLATE 0x0416
|
||||
/* Unlock the fpsensor template with the current nonce context */
|
||||
#define EC_CMD_FP_UNLOCK_TEMPLATE 0x0417
|
||||
|
||||
struct ec_params_fp_preload_template {
|
||||
uint32_t offset;
|
||||
uint32_t size;
|
||||
uint16_t fgr;
|
||||
uint8_t reserved[2];
|
||||
uint8_t data[];
|
||||
struct ec_params_fp_unlock_template {
|
||||
uint16_t fgr_num;
|
||||
} __ec_align4;
|
||||
|
||||
/*****************************************************************************/
|
||||
@ -8303,10 +8359,10 @@ struct ec_response_battery_static_info_v2 {
|
||||
uint16_t design_capacity;
|
||||
uint16_t design_voltage;
|
||||
uint32_t cycle_count;
|
||||
char manufacturer[32];
|
||||
char device_name[32];
|
||||
char serial[32];
|
||||
char chemistry[32];
|
||||
char manufacturer[SBS_MAX_STR_OBJ_SIZE];
|
||||
char device_name[SBS_MAX_STR_OBJ_SIZE];
|
||||
char serial[SBS_MAX_STR_OBJ_SIZE];
|
||||
char chemistry[SBS_MAX_STR_OBJ_SIZE];
|
||||
} __ec_align4;
|
||||
|
||||
/*
|
||||
|
Loading…
x
Reference in New Issue
Block a user