Commit 6f72c3f9 authored by Gwendal Grignou's avatar Gwendal Grignou Committed by Lee Jones

mfd: cros_ec: add ec_align macros

To reduce code and improve performance of the embedded controller
firmware, pragma __aligned(2) or __aligned(4) are used when alignment to
16 or 32 bit boundary is expected.

Define all ec_align to packed when compiling kernel.
Signed-off-by: default avatarGwendal Grignou <gwendal@chromium.org>
Acked-by: default avatarEnric Balletbo i Serra <enric.balletbo@collabora.com>
Acked-by: default avatarBenson Leung <bleung@chromium.org>
Reviewed-by: default avatarFabien Lahoudere <fabien.lahoudere@collabora.com>
Signed-off-by: default avatarLee Jones <lee.jones@linaro.org>
parent df95a3bd
...@@ -188,12 +188,46 @@ ...@@ -188,12 +188,46 @@
#ifndef __ACPI__ #ifndef __ACPI__
/* /*
* Define __packed if someone hasn't beat us to it. Linux kernel style * Attributes for EC request and response packets. Just defining __packed
* checking prefers __packed over __attribute__((packed)). * results in inefficient assembly code on ARM, if the structure is actually
* 32-bit aligned, as it should be for all buffers.
*
* Be very careful when adding these to existing structures. They will round
* up the structure size to the specified boundary.
*
* Also be very careful to make that if a structure is included in some other
* parent structure that the alignment will still be true given the packing of
* the parent structure. This is particularly important if the sub-structure
* will be passed as a pointer to another function, since that function will
* not know about the misaligment caused by the parent structure's packing.
*
* Also be very careful using __packed - particularly when nesting non-packed
* structures inside packed ones. In fact, DO NOT use __packed directly;
* always use one of these attributes.
*
* Once everything is annotated properly, the following search strings should
* not return ANY matches in this file other than right here:
*
* "__packed" - generates inefficient code; all sub-structs must also be packed
*
* "struct [^_]" - all structs should be annotated, except for structs that are
* members of other structs/unions (and their original declarations should be
* annotated).
*/ */
#ifndef __packed
#define __packed __attribute__((packed)) /*
#endif * Packed structures make no assumption about alignment, so they do inefficient
* byte-wise reads.
*/
#define __ec_align1 __packed
#define __ec_align2 __packed
#define __ec_align4 __packed
#define __ec_align_size1 __packed
#define __ec_align_offset1 __packed
#define __ec_align_offset2 __packed
#define __ec_todo_packed __packed
#define __ec_todo_unpacked
/* LPC command status byte masks */ /* LPC command status byte masks */
/* EC has written a byte in the data register and host hasn't read it yet */ /* EC has written a byte in the data register and host hasn't read it yet */
...@@ -317,7 +351,7 @@ struct ec_lpc_host_args { ...@@ -317,7 +351,7 @@ struct ec_lpc_host_args {
uint8_t command_version; uint8_t command_version;
uint8_t data_size; uint8_t data_size;
uint8_t checksum; uint8_t checksum;
} __packed; } __ec_align4;
/* Flags for ec_lpc_host_args.flags */ /* Flags for ec_lpc_host_args.flags */
/* /*
...@@ -488,7 +522,7 @@ struct ec_host_request { ...@@ -488,7 +522,7 @@ struct ec_host_request {
uint8_t command_version; uint8_t command_version;
uint8_t reserved; uint8_t reserved;
uint16_t data_len; uint16_t data_len;
} __packed; } __ec_align4;
#define EC_HOST_RESPONSE_VERSION 3 #define EC_HOST_RESPONSE_VERSION 3
...@@ -507,7 +541,7 @@ struct ec_host_response { ...@@ -507,7 +541,7 @@ struct ec_host_response {
uint16_t result; uint16_t result;
uint16_t data_len; uint16_t data_len;
uint16_t reserved; uint16_t reserved;
} __packed; } __ec_align4;
/*****************************************************************************/ /*****************************************************************************/
/* /*
...@@ -536,7 +570,7 @@ struct ec_host_response { ...@@ -536,7 +570,7 @@ struct ec_host_response {
*/ */
struct ec_response_proto_version { struct ec_response_proto_version {
uint32_t version; uint32_t version;
} __packed; } __ec_align4;
/* /*
* Hello. This is a simple command to test the EC is responsive to * Hello. This is a simple command to test the EC is responsive to
...@@ -550,7 +584,7 @@ struct ec_response_proto_version { ...@@ -550,7 +584,7 @@ struct ec_response_proto_version {
*/ */
struct ec_params_hello { struct ec_params_hello {
uint32_t in_data; uint32_t in_data;
} __packed; } __ec_align4;
/** /**
* struct ec_response_hello - Response to the hello command. * struct ec_response_hello - Response to the hello command.
...@@ -558,7 +592,7 @@ struct ec_params_hello { ...@@ -558,7 +592,7 @@ struct ec_params_hello {
*/ */
struct ec_response_hello { struct ec_response_hello {
uint32_t out_data; uint32_t out_data;
} __packed; } __ec_align4;
/* Get version number */ /* Get version number */
#define EC_CMD_GET_VERSION 0x02 #define EC_CMD_GET_VERSION 0x02
...@@ -581,7 +615,7 @@ struct ec_response_get_version { ...@@ -581,7 +615,7 @@ struct ec_response_get_version {
char version_string_rw[32]; char version_string_rw[32];
char reserved[32]; char reserved[32];
uint32_t current_image; uint32_t current_image;
} __packed; } __ec_align4;
/* Read test */ /* Read test */
#define EC_CMD_READ_TEST 0x03 #define EC_CMD_READ_TEST 0x03
...@@ -594,7 +628,7 @@ struct ec_response_get_version { ...@@ -594,7 +628,7 @@ struct ec_response_get_version {
struct ec_params_read_test { struct ec_params_read_test {
uint32_t offset; uint32_t offset;
uint32_t size; uint32_t size;
} __packed; } __ec_align4;
/** /**
* struct ec_response_read_test - Response to the read test command. * struct ec_response_read_test - Response to the read test command.
...@@ -602,7 +636,7 @@ struct ec_params_read_test { ...@@ -602,7 +636,7 @@ struct ec_params_read_test {
*/ */
struct ec_response_read_test { struct ec_response_read_test {
uint32_t data[32]; uint32_t data[32];
} __packed; } __ec_align4;
/* /*
* Get build information * Get build information
...@@ -624,7 +658,7 @@ struct ec_response_get_chip_info { ...@@ -624,7 +658,7 @@ struct ec_response_get_chip_info {
char vendor[32]; char vendor[32];
char name[32]; char name[32];
char revision[32]; char revision[32];
} __packed; } __ec_align4;
/* Get board HW version */ /* Get board HW version */
#define EC_CMD_GET_BOARD_VERSION 0x06 #define EC_CMD_GET_BOARD_VERSION 0x06
...@@ -635,7 +669,7 @@ struct ec_response_get_chip_info { ...@@ -635,7 +669,7 @@ struct ec_response_get_chip_info {
*/ */
struct ec_response_board_version { struct ec_response_board_version {
uint16_t board_version; uint16_t board_version;
} __packed; } __ec_align2;
/* /*
* Read memory-mapped data. * Read memory-mapped data.
...@@ -655,7 +689,7 @@ struct ec_response_board_version { ...@@ -655,7 +689,7 @@ struct ec_response_board_version {
struct ec_params_read_memmap { struct ec_params_read_memmap {
uint8_t offset; uint8_t offset;
uint8_t size; uint8_t size;
} __packed; } __ec_align1;
/* Read versions supported for a command */ /* Read versions supported for a command */
#define EC_CMD_GET_CMD_VERSIONS 0x08 #define EC_CMD_GET_CMD_VERSIONS 0x08
...@@ -666,7 +700,7 @@ struct ec_params_read_memmap { ...@@ -666,7 +700,7 @@ struct ec_params_read_memmap {
*/ */
struct ec_params_get_cmd_versions { struct ec_params_get_cmd_versions {
uint8_t cmd; uint8_t cmd;
} __packed; } __ec_align1;
/** /**
* struct ec_params_get_cmd_versions_v1 - Parameters for the get command * struct ec_params_get_cmd_versions_v1 - Parameters for the get command
...@@ -675,7 +709,7 @@ struct ec_params_get_cmd_versions { ...@@ -675,7 +709,7 @@ struct ec_params_get_cmd_versions {
*/ */
struct ec_params_get_cmd_versions_v1 { struct ec_params_get_cmd_versions_v1 {
uint16_t cmd; uint16_t cmd;
} __packed; } __ec_align2;
/** /**
* struct ec_response_get_cmd_version - Response to the get command versions. * struct ec_response_get_cmd_version - Response to the get command versions.
...@@ -684,7 +718,7 @@ struct ec_params_get_cmd_versions_v1 { ...@@ -684,7 +718,7 @@ struct ec_params_get_cmd_versions_v1 {
*/ */
struct ec_response_get_cmd_versions { struct ec_response_get_cmd_versions {
uint32_t version_mask; uint32_t version_mask;
} __packed; } __ec_align4;
/* /*
* Check EC communications status (busy). This is needed on i2c/spi but not * Check EC communications status (busy). This is needed on i2c/spi but not
...@@ -707,7 +741,7 @@ enum ec_comms_status { ...@@ -707,7 +741,7 @@ enum ec_comms_status {
*/ */
struct ec_response_get_comms_status { struct ec_response_get_comms_status {
uint32_t flags; /* Mask of enum ec_comms_status */ uint32_t flags; /* Mask of enum ec_comms_status */
} __packed; } __ec_align4;
/* Fake a variety of responses, purely for testing purposes. */ /* Fake a variety of responses, purely for testing purposes. */
#define EC_CMD_TEST_PROTOCOL 0x0a #define EC_CMD_TEST_PROTOCOL 0x0a
...@@ -717,12 +751,12 @@ struct ec_params_test_protocol { ...@@ -717,12 +751,12 @@ struct ec_params_test_protocol {
uint32_t ec_result; uint32_t ec_result;
uint32_t ret_len; uint32_t ret_len;
uint8_t buf[32]; uint8_t buf[32];
} __packed; } __ec_align4;
/* Here it comes... */ /* Here it comes... */
struct ec_response_test_protocol { struct ec_response_test_protocol {
uint8_t buf[32]; uint8_t buf[32];
} __packed; } __ec_align4;
/* Get protocol information */ /* Get protocol information */
#define EC_CMD_GET_PROTOCOL_INFO 0x0b #define EC_CMD_GET_PROTOCOL_INFO 0x0b
...@@ -745,7 +779,7 @@ struct ec_response_get_protocol_info { ...@@ -745,7 +779,7 @@ struct ec_response_get_protocol_info {
uint16_t max_request_packet_size; uint16_t max_request_packet_size;
uint16_t max_response_packet_size; uint16_t max_response_packet_size;
uint32_t flags; uint32_t flags;
} __packed; } __ec_align4;
/*****************************************************************************/ /*****************************************************************************/
...@@ -763,12 +797,12 @@ struct ec_response_get_protocol_info { ...@@ -763,12 +797,12 @@ struct ec_response_get_protocol_info {
struct ec_params_get_set_value { struct ec_params_get_set_value {
uint32_t flags; uint32_t flags;
uint32_t value; uint32_t value;
} __packed; } __ec_align4;
struct ec_response_get_set_value { struct ec_response_get_set_value {
uint32_t flags; uint32_t flags;
uint32_t value; uint32_t value;
} __packed; } __ec_align4;
/* More than one command can use these structs to get/set parameters. */ /* More than one command can use these structs to get/set parameters. */
#define EC_CMD_GSV_PAUSE_IN_S5 0x0c #define EC_CMD_GSV_PAUSE_IN_S5 0x0c
...@@ -893,7 +927,7 @@ enum ec_feature_code { ...@@ -893,7 +927,7 @@ enum ec_feature_code {
struct ec_response_get_features { struct ec_response_get_features {
uint32_t flags[2]; uint32_t flags[2];
} __packed; } __ec_align4;
/*****************************************************************************/ /*****************************************************************************/
/* Flash commands */ /* Flash commands */
...@@ -918,7 +952,7 @@ struct ec_response_flash_info { ...@@ -918,7 +952,7 @@ struct ec_response_flash_info {
uint32_t write_block_size; uint32_t write_block_size;
uint32_t erase_block_size; uint32_t erase_block_size;
uint32_t protect_block_size; uint32_t protect_block_size;
} __packed; } __ec_align4;
/* /*
* Flags for version 1+ flash info command * Flags for version 1+ flash info command
...@@ -959,7 +993,7 @@ struct ec_response_flash_info_1 { ...@@ -959,7 +993,7 @@ struct ec_response_flash_info_1 {
/* Version 1 adds these fields: */ /* Version 1 adds these fields: */
uint32_t write_ideal_size; uint32_t write_ideal_size;
uint32_t flags; uint32_t flags;
} __packed; } __ec_align4;
/* /*
* Read flash * Read flash
...@@ -976,7 +1010,7 @@ struct ec_response_flash_info_1 { ...@@ -976,7 +1010,7 @@ struct ec_response_flash_info_1 {
struct ec_params_flash_read { struct ec_params_flash_read {
uint32_t offset; uint32_t offset;
uint32_t size; uint32_t size;
} __packed; } __ec_align4;
/* Write flash */ /* Write flash */
#define EC_CMD_FLASH_WRITE 0x12 #define EC_CMD_FLASH_WRITE 0x12
...@@ -994,7 +1028,7 @@ struct ec_params_flash_write { ...@@ -994,7 +1028,7 @@ struct ec_params_flash_write {
uint32_t offset; uint32_t offset;
uint32_t size; uint32_t size;
/* Followed by data to write */ /* Followed by data to write */
} __packed; } __ec_align4;
/* Erase flash */ /* Erase flash */
#define EC_CMD_FLASH_ERASE 0x13 #define EC_CMD_FLASH_ERASE 0x13
...@@ -1007,7 +1041,7 @@ struct ec_params_flash_write { ...@@ -1007,7 +1041,7 @@ struct ec_params_flash_write {
struct ec_params_flash_erase { struct ec_params_flash_erase {
uint32_t offset; uint32_t offset;
uint32_t size; uint32_t size;
} __packed; } __ec_align4;
/* /*
* Get/set flash protection. * Get/set flash protection.
...@@ -1053,7 +1087,7 @@ struct ec_params_flash_erase { ...@@ -1053,7 +1087,7 @@ struct ec_params_flash_erase {
struct ec_params_flash_protect { struct ec_params_flash_protect {
uint32_t mask; uint32_t mask;
uint32_t flags; uint32_t flags;
} __packed; } __ec_align4;
/** /**
* struct ec_response_flash_protect - Response to the flash protect command. * struct ec_response_flash_protect - Response to the flash protect command.
...@@ -1068,7 +1102,7 @@ struct ec_response_flash_protect { ...@@ -1068,7 +1102,7 @@ struct ec_response_flash_protect {
uint32_t flags; uint32_t flags;
uint32_t valid_flags; uint32_t valid_flags;
uint32_t writable_flags; uint32_t writable_flags;
} __packed; } __ec_align4;
/* /*
* Note: commands 0x14 - 0x19 version 0 were old commands to get/set flash * Note: commands 0x14 - 0x19 version 0 were old commands to get/set flash
...@@ -1100,12 +1134,12 @@ enum ec_flash_region { ...@@ -1100,12 +1134,12 @@ enum ec_flash_region {
*/ */
struct ec_params_flash_region_info { struct ec_params_flash_region_info {
uint32_t region; uint32_t region;
} __packed; } __ec_align4;
struct ec_response_flash_region_info { struct ec_response_flash_region_info {
uint32_t offset; uint32_t offset;
uint32_t size; uint32_t size;
} __packed; } __ec_align4;
/* Read/write VbNvContext */ /* Read/write VbNvContext */
#define EC_CMD_VBNV_CONTEXT 0x17 #define EC_CMD_VBNV_CONTEXT 0x17
...@@ -1120,11 +1154,11 @@ enum ec_vbnvcontext_op { ...@@ -1120,11 +1154,11 @@ enum ec_vbnvcontext_op {
struct ec_params_vbnvcontext { struct ec_params_vbnvcontext {
uint32_t op; uint32_t op;
uint8_t block[EC_VBNV_BLOCK_SIZE]; uint8_t block[EC_VBNV_BLOCK_SIZE];
} __packed; } __ec_align4;
struct ec_response_vbnvcontext { struct ec_response_vbnvcontext {
uint8_t block[EC_VBNV_BLOCK_SIZE]; uint8_t block[EC_VBNV_BLOCK_SIZE];
} __packed; } __ec_align4;
/*****************************************************************************/ /*****************************************************************************/
/* PWM commands */ /* PWM commands */
...@@ -1134,14 +1168,14 @@ struct ec_response_vbnvcontext { ...@@ -1134,14 +1168,14 @@ struct ec_response_vbnvcontext {
struct ec_response_pwm_get_fan_rpm { struct ec_response_pwm_get_fan_rpm {
uint32_t rpm; uint32_t rpm;
} __packed; } __ec_align4;
/* Set target fan RPM */ /* Set target fan RPM */
#define EC_CMD_PWM_SET_FAN_TARGET_RPM 0x21 #define EC_CMD_PWM_SET_FAN_TARGET_RPM 0x0021
struct ec_params_pwm_set_fan_target_rpm { struct ec_params_pwm_set_fan_target_rpm {
uint32_t rpm; uint32_t rpm;
} __packed; } __ec_align_size1;
/* Get keyboard backlight */ /* Get keyboard backlight */
#define EC_CMD_PWM_GET_KEYBOARD_BACKLIGHT 0x22 #define EC_CMD_PWM_GET_KEYBOARD_BACKLIGHT 0x22
...@@ -1149,21 +1183,21 @@ struct ec_params_pwm_set_fan_target_rpm { ...@@ -1149,21 +1183,21 @@ struct ec_params_pwm_set_fan_target_rpm {
struct ec_response_pwm_get_keyboard_backlight { struct ec_response_pwm_get_keyboard_backlight {
uint8_t percent; uint8_t percent;
uint8_t enabled; uint8_t enabled;
} __packed; } __ec_align1;
/* Set keyboard backlight */ /* Set keyboard backlight */
#define EC_CMD_PWM_SET_KEYBOARD_BACKLIGHT 0x23 #define EC_CMD_PWM_SET_KEYBOARD_BACKLIGHT 0x23
struct ec_params_pwm_set_keyboard_backlight { struct ec_params_pwm_set_keyboard_backlight {
uint8_t percent; uint8_t percent;
} __packed; } __ec_align1;
/* Set target fan PWM duty cycle */ /* Set target fan PWM duty cycle */
#define EC_CMD_PWM_SET_FAN_DUTY 0x24 #define EC_CMD_PWM_SET_FAN_DUTY 0x24
struct ec_params_pwm_set_fan_duty { struct ec_params_pwm_set_fan_duty {
uint32_t percent; uint32_t percent;
} __packed; } __ec_align4;
#define EC_CMD_PWM_SET_DUTY 0x25 #define EC_CMD_PWM_SET_DUTY 0x25
/* 16 bit duty cycle, 0xffff = 100% */ /* 16 bit duty cycle, 0xffff = 100% */
...@@ -1183,18 +1217,18 @@ struct ec_params_pwm_set_duty { ...@@ -1183,18 +1217,18 @@ struct ec_params_pwm_set_duty {
uint16_t duty; /* Duty cycle, EC_PWM_MAX_DUTY = 100% */ uint16_t duty; /* Duty cycle, EC_PWM_MAX_DUTY = 100% */
uint8_t pwm_type; /* ec_pwm_type */ uint8_t pwm_type; /* ec_pwm_type */
uint8_t index; /* Type-specific index, or 0 if unique */ uint8_t index; /* Type-specific index, or 0 if unique */
} __packed; } __ec_align4;
#define EC_CMD_PWM_GET_DUTY 0x26 #define EC_CMD_PWM_GET_DUTY 0x26
struct ec_params_pwm_get_duty { struct ec_params_pwm_get_duty {
uint8_t pwm_type; /* ec_pwm_type */ uint8_t pwm_type; /* ec_pwm_type */
uint8_t index; /* Type-specific index, or 0 if unique */ uint8_t index; /* Type-specific index, or 0 if unique */
} __packed; } __ec_align1;
struct ec_response_pwm_get_duty { struct ec_response_pwm_get_duty {
uint16_t duty; /* Duty cycle, EC_PWM_MAX_DUTY = 100% */ uint16_t duty; /* Duty cycle, EC_PWM_MAX_DUTY = 100% */
} __packed; } __ec_align2;
/*****************************************************************************/ /*****************************************************************************/
/* /*
...@@ -1207,7 +1241,7 @@ struct ec_response_pwm_get_duty { ...@@ -1207,7 +1241,7 @@ struct ec_response_pwm_get_duty {
struct rgb_s { struct rgb_s {
uint8_t r, g, b; uint8_t r, g, b;
}; } __ec_todo_unpacked;
#define LB_BATTERY_LEVELS 4 #define LB_BATTERY_LEVELS 4
...@@ -1247,7 +1281,7 @@ struct lightbar_params_v0 { ...@@ -1247,7 +1281,7 @@ struct lightbar_params_v0 {
/* Color palette */ /* Color palette */
struct rgb_s color[8]; /* 0-3 are Google colors */ struct rgb_s color[8]; /* 0-3 are Google colors */
} __packed; } __ec_todo_packed;
struct lightbar_params_v1 { struct lightbar_params_v1 {
/* Timing */ /* Timing */
...@@ -1290,14 +1324,14 @@ struct lightbar_params_v1 { ...@@ -1290,14 +1324,14 @@ struct lightbar_params_v1 {
/* Color palette */ /* Color palette */
struct rgb_s color[8]; /* 0-3 are Google colors */ struct rgb_s color[8]; /* 0-3 are Google colors */
} __packed; } __ec_todo_packed;
/* Lightbar program */ /* Lightbar program */
#define EC_LB_PROG_LEN 192 #define EC_LB_PROG_LEN 192
struct lightbar_program { struct lightbar_program {
uint8_t size; uint8_t size;
uint8_t data[EC_LB_PROG_LEN]; uint8_t data[EC_LB_PROG_LEN];
}; } __ec_todo_unpacked;
struct ec_params_lightbar { struct ec_params_lightbar {
uint8_t cmd; /* Command (see enum lightbar_command) */ uint8_t cmd; /* Command (see enum lightbar_command) */
...@@ -1307,23 +1341,23 @@ struct ec_params_lightbar { ...@@ -1307,23 +1341,23 @@ struct ec_params_lightbar {
} dump, off, on, init, get_seq, get_params_v0, get_params_v1, } dump, off, on, init, get_seq, get_params_v0, get_params_v1,
version, get_brightness, get_demo, suspend, resume; version, get_brightness, get_demo, suspend, resume;
struct { struct __ec_todo_unpacked {
uint8_t num; uint8_t num;
} set_brightness, seq, demo; } set_brightness, seq, demo;
struct { struct __ec_todo_unpacked {
uint8_t ctrl, reg, value; uint8_t ctrl, reg, value;
} reg; } reg;
struct { struct __ec_todo_unpacked {
uint8_t led, red, green, blue; uint8_t led, red, green, blue;
} set_rgb; } set_rgb;
struct { struct __ec_todo_unpacked {
uint8_t led; uint8_t led;
} get_rgb; } get_rgb;
struct { struct __ec_todo_unpacked {
uint8_t enable; uint8_t enable;
} manual_suspend_ctrl; } manual_suspend_ctrl;
...@@ -1331,31 +1365,31 @@ struct ec_params_lightbar { ...@@ -1331,31 +1365,31 @@ struct ec_params_lightbar {
struct lightbar_params_v1 set_params_v1; struct lightbar_params_v1 set_params_v1;
struct lightbar_program set_program; struct lightbar_program set_program;
}; };
} __packed; } __ec_todo_packed;
struct ec_response_lightbar { struct ec_response_lightbar {
union { union {
struct { struct __ec_todo_unpacked {
struct { struct __ec_todo_unpacked {
uint8_t reg; uint8_t reg;
uint8_t ic0; uint8_t ic0;
uint8_t ic1; uint8_t ic1;
} vals[23]; } vals[23];
} dump; } dump;
struct { struct __ec_todo_unpacked {
uint8_t num; uint8_t num;
} get_seq, get_brightness, get_demo; } get_seq, get_brightness, get_demo;
struct lightbar_params_v0 get_params_v0; struct lightbar_params_v0 get_params_v0;
struct lightbar_params_v1 get_params_v1; struct lightbar_params_v1 get_params_v1;
struct { struct __ec_todo_unpacked {
uint32_t num; uint32_t num;
uint32_t flags; uint32_t flags;
} version; } version;
struct { struct __ec_todo_unpacked {
uint8_t red, green, blue; uint8_t red, green, blue;
} get_rgb; } get_rgb;
...@@ -1365,7 +1399,7 @@ struct ec_response_lightbar { ...@@ -1365,7 +1399,7 @@ struct ec_response_lightbar {
demo, set_params_v0, set_params_v1, demo, set_params_v0, set_params_v1,
set_program, manual_suspend_ctrl, suspend, resume; set_program, manual_suspend_ctrl, suspend, resume;
}; };
} __packed; } __ec_todo_packed;
/* Lightbar commands */ /* Lightbar commands */
enum lightbar_command { enum lightbar_command {
...@@ -1432,7 +1466,7 @@ struct ec_params_led_control { ...@@ -1432,7 +1466,7 @@ struct ec_params_led_control {
uint8_t flags; /* Control flags */ uint8_t flags; /* Control flags */
uint8_t brightness[EC_LED_COLOR_COUNT]; uint8_t brightness[EC_LED_COLOR_COUNT];
} __packed; } __ec_align1;
struct ec_response_led_control { struct ec_response_led_control {
/* /*
...@@ -1443,7 +1477,7 @@ struct ec_response_led_control { ...@@ -1443,7 +1477,7 @@ struct ec_response_led_control {
* Other values means the LED is control by PWM. * Other values means the LED is control by PWM.
*/ */
uint8_t brightness_range[EC_LED_COLOR_COUNT]; uint8_t brightness_range[EC_LED_COLOR_COUNT];
} __packed; } __ec_align1;
/*****************************************************************************/ /*****************************************************************************/
/* Verified boot commands */ /* Verified boot commands */
...@@ -1464,7 +1498,7 @@ struct ec_params_vboot_hash { ...@@ -1464,7 +1498,7 @@ struct ec_params_vboot_hash {
uint32_t offset; /* Offset in flash to hash */ uint32_t offset; /* Offset in flash to hash */
uint32_t size; /* Number of bytes to hash */ uint32_t size; /* Number of bytes to hash */
uint8_t nonce_data[64]; /* Nonce data; ignored if nonce_size=0 */ uint8_t nonce_data[64]; /* Nonce data; ignored if nonce_size=0 */
} __packed; } __ec_align4;
struct ec_response_vboot_hash { struct ec_response_vboot_hash {
uint8_t status; /* enum ec_vboot_hash_status */ uint8_t status; /* enum ec_vboot_hash_status */
...@@ -1474,7 +1508,7 @@ struct ec_response_vboot_hash { ...@@ -1474,7 +1508,7 @@ struct ec_response_vboot_hash {
uint32_t offset; /* Offset in flash which was hashed */ uint32_t offset; /* Offset in flash which was hashed */
uint32_t size; /* Number of bytes hashed */ uint32_t size; /* Number of bytes hashed */
uint8_t hash_digest[64]; /* Hash digest data */ uint8_t hash_digest[64]; /* Hash digest data */
} __packed; } __ec_align4;
enum ec_vboot_hash_cmd { enum ec_vboot_hash_cmd {
EC_VBOOT_HASH_GET = 0, /* Get current hash status */ EC_VBOOT_HASH_GET = 0, /* Get current hash status */
...@@ -1634,23 +1668,23 @@ struct ec_response_motion_sensor_data { ...@@ -1634,23 +1668,23 @@ struct ec_response_motion_sensor_data {
/* Each sensor is up to 3-axis. */ /* Each sensor is up to 3-axis. */
union { union {
int16_t data[3]; int16_t data[3];
struct { struct __ec_todo_packed {
uint16_t reserved; uint16_t reserved;
uint32_t timestamp; uint32_t timestamp;
} __packed; };
struct { struct __ec_todo_unpacked {
uint8_t activity; /* motionsensor_activity */ uint8_t activity; /* motionsensor_activity */
uint8_t state; uint8_t state;
int16_t add_info[2]; int16_t add_info[2];
}; };
}; };
} __packed; } __ec_todo_packed;
struct ec_params_motion_sense { struct ec_params_motion_sense {
uint8_t cmd; uint8_t cmd;
union { union {
/* Used for MOTIONSENSE_CMD_DUMP. */ /* Used for MOTIONSENSE_CMD_DUMP. */
struct { struct __ec_todo_unpacked {
/* no args */ /* no args */
} dump; } dump;
...@@ -1658,13 +1692,13 @@ struct ec_params_motion_sense { ...@@ -1658,13 +1692,13 @@ struct ec_params_motion_sense {
* Used for MOTIONSENSE_CMD_EC_RATE and * Used for MOTIONSENSE_CMD_EC_RATE and
* MOTIONSENSE_CMD_KB_WAKE_ANGLE. * MOTIONSENSE_CMD_KB_WAKE_ANGLE.
*/ */
struct { struct __ec_todo_unpacked {
/* Data to set or EC_MOTION_SENSE_NO_VALUE to read. */ /* Data to set or EC_MOTION_SENSE_NO_VALUE to read. */
int16_t data; int16_t data;
} ec_rate, kb_wake_angle; } ec_rate, kb_wake_angle;
/* Used for MOTIONSENSE_CMD_SENSOR_OFFSET */ /* Used for MOTIONSENSE_CMD_SENSOR_OFFSET */
struct { struct __ec_todo_packed {
uint8_t sensor_num; uint8_t sensor_num;
/* /*
...@@ -1690,10 +1724,10 @@ struct ec_params_motion_sense { ...@@ -1690,10 +1724,10 @@ struct ec_params_motion_sense {
* Compass: 1/16 uT * Compass: 1/16 uT
*/ */
int16_t offset[3]; int16_t offset[3];
} __packed sensor_offset; } sensor_offset;
/* Used for MOTIONSENSE_CMD_INFO. */ /* Used for MOTIONSENSE_CMD_INFO. */
struct { struct __ec_todo_packed {
uint8_t sensor_num; uint8_t sensor_num;
} info; } info;
...@@ -1714,12 +1748,12 @@ struct ec_params_motion_sense { ...@@ -1714,12 +1748,12 @@ struct ec_params_motion_sense {
int32_t data; int32_t data;
} sensor_odr, sensor_range; } sensor_odr, sensor_range;
}; };
} __packed; } __ec_todo_packed;
struct ec_response_motion_sense { struct ec_response_motion_sense {
union { union {
/* Used for MOTIONSENSE_CMD_DUMP. */ /* Used for MOTIONSENSE_CMD_DUMP. */
struct { struct __ec_todo_unpacked {
/* Flags representing the motion sensor module. */ /* Flags representing the motion sensor module. */
uint8_t module_flags; uint8_t module_flags;
...@@ -1734,7 +1768,7 @@ struct ec_response_motion_sense { ...@@ -1734,7 +1768,7 @@ struct ec_response_motion_sense {
} dump; } dump;
/* Used for MOTIONSENSE_CMD_INFO. */ /* Used for MOTIONSENSE_CMD_INFO. */
struct { struct __ec_todo_unpacked {
/* Should be element of enum motionsensor_type. */ /* Should be element of enum motionsensor_type. */
uint8_t type; uint8_t type;
...@@ -1753,18 +1787,18 @@ struct ec_response_motion_sense { ...@@ -1753,18 +1787,18 @@ struct ec_response_motion_sense {
* MOTIONSENSE_CMD_SENSOR_RANGE, and * MOTIONSENSE_CMD_SENSOR_RANGE, and
* MOTIONSENSE_CMD_KB_WAKE_ANGLE. * MOTIONSENSE_CMD_KB_WAKE_ANGLE.
*/ */
struct { struct __ec_todo_unpacked {
/* Current value of the parameter queried. */ /* Current value of the parameter queried. */
int32_t ret; int32_t ret;
} ec_rate, sensor_odr, sensor_range, kb_wake_angle; } ec_rate, sensor_odr, sensor_range, kb_wake_angle;
/* Used for MOTIONSENSE_CMD_SENSOR_OFFSET */ /* Used for MOTIONSENSE_CMD_SENSOR_OFFSET */
struct { struct __ec_todo_unpacked {
int16_t temp; int16_t temp;
int16_t offset[3]; int16_t offset[3];
} sensor_offset, perform_calib; } sensor_offset, perform_calib;
}; };
} __packed; } __ec_todo_packed;
/*****************************************************************************/ /*****************************************************************************/
/* USB charging control commands */ /* USB charging control commands */
...@@ -1775,7 +1809,7 @@ struct ec_response_motion_sense { ...@@ -1775,7 +1809,7 @@ struct ec_response_motion_sense {
struct ec_params_usb_charge_set_mode { struct ec_params_usb_charge_set_mode {
uint8_t usb_port_id; uint8_t usb_port_id;
uint8_t mode; uint8_t mode;
} __packed; } __ec_align1;
/*****************************************************************************/ /*****************************************************************************/
/* Persistent storage for host */ /* Persistent storage for host */
...@@ -1791,7 +1825,7 @@ struct ec_response_pstore_info { ...@@ -1791,7 +1825,7 @@ struct ec_response_pstore_info {
uint32_t pstore_size; uint32_t pstore_size;
/* Access size; read/write offset and size must be a multiple of this */ /* Access size; read/write offset and size must be a multiple of this */
uint32_t access_size; uint32_t access_size;
} __packed; } __ec_align4;
/* /*
* Read persistent storage * Read persistent storage
...@@ -1803,7 +1837,7 @@ struct ec_response_pstore_info { ...@@ -1803,7 +1837,7 @@ struct ec_response_pstore_info {
struct ec_params_pstore_read { struct ec_params_pstore_read {
uint32_t offset; /* Byte offset to read */ uint32_t offset; /* Byte offset to read */
uint32_t size; /* Size to read in bytes */ uint32_t size; /* Size to read in bytes */
} __packed; } __ec_align4;
/* Write persistent storage */ /* Write persistent storage */
#define EC_CMD_PSTORE_WRITE 0x42 #define EC_CMD_PSTORE_WRITE 0x42
...@@ -1812,7 +1846,7 @@ struct ec_params_pstore_write { ...@@ -1812,7 +1846,7 @@ struct ec_params_pstore_write {
uint32_t offset; /* Byte offset to write */ uint32_t offset; /* Byte offset to write */
uint32_t size; /* Size to write in bytes */ uint32_t size; /* Size to write in bytes */
uint8_t data[EC_PSTORE_SIZE_MAX]; uint8_t data[EC_PSTORE_SIZE_MAX];
} __packed; } __ec_align4;
/*****************************************************************************/ /*****************************************************************************/
/* Real-time clock */ /* Real-time clock */
...@@ -1820,11 +1854,11 @@ struct ec_params_pstore_write { ...@@ -1820,11 +1854,11 @@ struct ec_params_pstore_write {
/* RTC params and response structures */ /* RTC params and response structures */
struct ec_params_rtc { struct ec_params_rtc {
uint32_t time; uint32_t time;
} __packed; } __ec_align4;
struct ec_response_rtc { struct ec_response_rtc {
uint32_t time; uint32_t time;
} __packed; } __ec_align4;
/* These use ec_response_rtc */ /* These use ec_response_rtc */
#define EC_CMD_RTC_GET_VALUE 0x44 #define EC_CMD_RTC_GET_VALUE 0x44
...@@ -1855,29 +1889,29 @@ enum ec_port80_subcmd { ...@@ -1855,29 +1889,29 @@ enum ec_port80_subcmd {
struct ec_params_port80_read { struct ec_params_port80_read {
uint16_t subcmd; uint16_t subcmd;
union { union {
struct { struct __ec_todo_unpacked {
uint32_t offset; uint32_t offset;
uint32_t num_entries; uint32_t num_entries;
} read_buffer; } read_buffer;
}; };
} __packed; } __ec_todo_packed;
struct ec_response_port80_read { struct ec_response_port80_read {
union { union {
struct { struct __ec_todo_unpacked {
uint32_t writes; uint32_t writes;
uint32_t history_size; uint32_t history_size;
uint32_t last_boot; uint32_t last_boot;
} get_info; } get_info;
struct { struct __ec_todo_unpacked {
uint16_t codes[EC_PORT80_SIZE_MAX]; uint16_t codes[EC_PORT80_SIZE_MAX];
} data; } data;
}; };
} __packed; } __ec_todo_packed;
struct ec_response_port80_last_boot { struct ec_response_port80_last_boot {
uint16_t code; uint16_t code;
} __packed; } __ec_align2;
/*****************************************************************************/ /*****************************************************************************/
/* Thermal engine commands. Note that there are two implementations. We'll /* Thermal engine commands. Note that there are two implementations. We'll
...@@ -1898,17 +1932,17 @@ struct ec_params_thermal_set_threshold { ...@@ -1898,17 +1932,17 @@ struct ec_params_thermal_set_threshold {
uint8_t sensor_type; uint8_t sensor_type;
uint8_t threshold_id; uint8_t threshold_id;
uint16_t value; uint16_t value;
} __packed; } __ec_align2;
/* Version 0 - get */ /* Version 0 - get */
struct ec_params_thermal_get_threshold { struct ec_params_thermal_get_threshold {
uint8_t sensor_type; uint8_t sensor_type;
uint8_t threshold_id; uint8_t threshold_id;
} __packed; } __ec_align1;
struct ec_response_thermal_get_threshold { struct ec_response_thermal_get_threshold {
uint16_t value; uint16_t value;
} __packed; } __ec_align2;
/* The version 1 structs are visible. */ /* The version 1 structs are visible. */
...@@ -1928,12 +1962,12 @@ struct ec_thermal_config { ...@@ -1928,12 +1962,12 @@ struct ec_thermal_config {
uint32_t temp_host[EC_TEMP_THRESH_COUNT]; /* levels of hotness */ uint32_t temp_host[EC_TEMP_THRESH_COUNT]; /* levels of hotness */
uint32_t temp_fan_off; /* no active cooling needed */ uint32_t temp_fan_off; /* no active cooling needed */
uint32_t temp_fan_max; /* max active cooling needed */ uint32_t temp_fan_max; /* max active cooling needed */
} __packed; } __ec_align4;
/* Version 1 - get config for one sensor. */ /* Version 1 - get config for one sensor. */
struct ec_params_thermal_get_threshold_v1 { struct ec_params_thermal_get_threshold_v1 {
uint32_t sensor_num; uint32_t sensor_num;
} __packed; } __ec_align4;
/* This returns a struct ec_thermal_config */ /* This returns a struct ec_thermal_config */
/* /*
...@@ -1943,7 +1977,7 @@ struct ec_params_thermal_get_threshold_v1 { ...@@ -1943,7 +1977,7 @@ struct ec_params_thermal_get_threshold_v1 {
struct ec_params_thermal_set_threshold_v1 { struct ec_params_thermal_set_threshold_v1 {
uint32_t sensor_num; uint32_t sensor_num;
struct ec_thermal_config cfg; struct ec_thermal_config cfg;
} __packed; } __ec_align4;
/* This returns no data */ /* This returns no data */
/****************************************************************************/ /****************************************************************************/
...@@ -1956,14 +1990,14 @@ struct ec_params_thermal_set_threshold_v1 { ...@@ -1956,14 +1990,14 @@ struct ec_params_thermal_set_threshold_v1 {
struct ec_params_tmp006_get_calibration { struct ec_params_tmp006_get_calibration {
uint8_t index; uint8_t index;
} __packed; } __ec_align1;
struct ec_response_tmp006_get_calibration { struct ec_response_tmp006_get_calibration {
float s0; float s0;
float b0; float b0;
float b1; float b1;
float b2; float b2;
} __packed; } __ec_align4;
/* Set TMP006 calibration data */ /* Set TMP006 calibration data */
#define EC_CMD_TMP006_SET_CALIBRATION 0x54 #define EC_CMD_TMP006_SET_CALIBRATION 0x54
...@@ -1975,19 +2009,19 @@ struct ec_params_tmp006_set_calibration { ...@@ -1975,19 +2009,19 @@ struct ec_params_tmp006_set_calibration {
float b0; float b0;
float b1; float b1;
float b2; float b2;
} __packed; } __ec_align4;
/* Read raw TMP006 data */ /* Read raw TMP006 data */
#define EC_CMD_TMP006_GET_RAW 0x55 #define EC_CMD_TMP006_GET_RAW 0x55
struct ec_params_tmp006_get_raw { struct ec_params_tmp006_get_raw {
uint8_t index; uint8_t index;
} __packed; } __ec_align1;
struct ec_response_tmp006_get_raw { struct ec_response_tmp006_get_raw {
int32_t t; /* In 1/100 K */ int32_t t; /* In 1/100 K */
int32_t v; /* In nV */ int32_t v; /* In nV */
}; } __ec_align4;
/*****************************************************************************/ /*****************************************************************************/
/* MKBP - Matrix KeyBoard Protocol */ /* MKBP - Matrix KeyBoard Protocol */
...@@ -2014,12 +2048,12 @@ struct ec_response_mkbp_info { ...@@ -2014,12 +2048,12 @@ struct ec_response_mkbp_info {
uint32_t cols; uint32_t cols;
/* Formerly "switches", which was 0. */ /* Formerly "switches", which was 0. */
uint8_t reserved; uint8_t reserved;
} __packed; } __ec_align_size1;
struct ec_params_mkbp_info { struct ec_params_mkbp_info {
uint8_t info_type; uint8_t info_type;
uint8_t event_type; uint8_t event_type;
} __packed; } __ec_align1;
enum ec_mkbp_info_type { enum ec_mkbp_info_type {
/* /*
...@@ -2067,7 +2101,7 @@ struct ec_params_mkbp_simulate_key { ...@@ -2067,7 +2101,7 @@ struct ec_params_mkbp_simulate_key {
uint8_t col; uint8_t col;
uint8_t row; uint8_t row;
uint8_t pressed; uint8_t pressed;
} __packed; } __ec_align1;
/* Configure keyboard scanning */ /* Configure keyboard scanning */
#define EC_CMD_MKBP_SET_CONFIG 0x64 #define EC_CMD_MKBP_SET_CONFIG 0x64
...@@ -2113,15 +2147,15 @@ struct ec_mkbp_config { ...@@ -2113,15 +2147,15 @@ struct ec_mkbp_config {
uint16_t debounce_up_us; /* time for debounce on key up */ uint16_t debounce_up_us; /* time for debounce on key up */
/* maximum depth to allow for fifo (0 = no keyscan output) */ /* maximum depth to allow for fifo (0 = no keyscan output) */
uint8_t fifo_max_depth; uint8_t fifo_max_depth;
} __packed; } __ec_align_size1;
struct ec_params_mkbp_set_config { struct ec_params_mkbp_set_config {
struct ec_mkbp_config config; struct ec_mkbp_config config;
} __packed; } __ec_align_size1;
struct ec_response_mkbp_get_config { struct ec_response_mkbp_get_config {
struct ec_mkbp_config config; struct ec_mkbp_config config;
} __packed; } __ec_align_size1;
/* Run the key scan emulation */ /* Run the key scan emulation */
#define EC_CMD_KEYSCAN_SEQ_CTRL 0x66 #define EC_CMD_KEYSCAN_SEQ_CTRL 0x66
...@@ -2144,18 +2178,18 @@ enum ec_collect_flags { ...@@ -2144,18 +2178,18 @@ enum ec_collect_flags {
struct ec_collect_item { struct ec_collect_item {
uint8_t flags; /* some flags (enum ec_collect_flags) */ uint8_t flags; /* some flags (enum ec_collect_flags) */
}; } __ec_align1;
struct ec_params_keyscan_seq_ctrl { struct ec_params_keyscan_seq_ctrl {
uint8_t cmd; /* Command to send (enum ec_keyscan_seq_cmd) */ uint8_t cmd; /* Command to send (enum ec_keyscan_seq_cmd) */
union { union {
struct { struct __ec_align1 {
uint8_t active; /* still active */ uint8_t active; /* still active */
uint8_t num_items; /* number of items */ uint8_t num_items; /* number of items */
/* Current item being presented */ /* Current item being presented */
uint8_t cur_item; uint8_t cur_item;
} status; } status;
struct { struct __ec_todo_unpacked {
/* /*
* Absolute time for this scan, measured from the * Absolute time for this scan, measured from the
* start of the sequence. * start of the sequence.
...@@ -2163,22 +2197,22 @@ struct ec_params_keyscan_seq_ctrl { ...@@ -2163,22 +2197,22 @@ struct ec_params_keyscan_seq_ctrl {
uint32_t time_us; uint32_t time_us;
uint8_t scan[0]; /* keyscan data */ uint8_t scan[0]; /* keyscan data */
} add; } add;
struct { struct __ec_align1 {
uint8_t start_item; /* First item to return */ uint8_t start_item; /* First item to return */
uint8_t num_items; /* Number of items to return */ uint8_t num_items; /* Number of items to return */
} collect; } collect;
}; };
} __packed; } __ec_todo_packed;
struct ec_result_keyscan_seq_ctrl { struct ec_result_keyscan_seq_ctrl {
union { union {
struct { struct __ec_todo_unpacked {
uint8_t num_items; /* Number of items */ uint8_t num_items; /* Number of items */
/* Data for each item */ /* Data for each item */
struct ec_collect_item item[0]; struct ec_collect_item item[0];
} collect; } collect;
}; };
} __packed; } __ec_todo_packed;
/* /*
* Command for retrieving the next pending MKBP event from the EC device * Command for retrieving the next pending MKBP event from the EC device
...@@ -2216,8 +2250,8 @@ enum ec_mkbp_event { ...@@ -2216,8 +2250,8 @@ enum ec_mkbp_event {
EC_MKBP_EVENT_COUNT, EC_MKBP_EVENT_COUNT,
}; };
union ec_response_get_next_data { union __ec_align_offset1 ec_response_get_next_data {
uint8_t key_matrix[13]; uint8_t key_matrix[13];
/* Unaligned */ /* Unaligned */
uint32_t host_event; uint32_t host_event;
...@@ -2225,9 +2259,9 @@ union ec_response_get_next_data { ...@@ -2225,9 +2259,9 @@ union ec_response_get_next_data {
uint32_t buttons; uint32_t buttons;
uint32_t switches; uint32_t switches;
uint32_t sysrq; uint32_t sysrq;
} __packed; };
union ec_response_get_next_data_v1 { union __ec_align_offset1 ec_response_get_next_data_v1 {
uint8_t key_matrix[16]; uint8_t key_matrix[16];
uint32_t host_event; uint32_t host_event;
uint32_t buttons; uint32_t buttons;
...@@ -2235,19 +2269,19 @@ union ec_response_get_next_data_v1 { ...@@ -2235,19 +2269,19 @@ union ec_response_get_next_data_v1 {
uint32_t sysrq; uint32_t sysrq;
uint32_t cec_events; uint32_t cec_events;
uint8_t cec_message[16]; uint8_t cec_message[16];
} __packed; };
struct ec_response_get_next_event { struct ec_response_get_next_event {
uint8_t event_type; uint8_t event_type;
/* Followed by event data if any */ /* Followed by event data if any */
union ec_response_get_next_data data; union ec_response_get_next_data data;
} __packed; } __ec_align1;
struct ec_response_get_next_event_v1 { struct ec_response_get_next_event_v1 {
uint8_t event_type; uint8_t event_type;
/* Followed by event data if any */ /* Followed by event data if any */
union ec_response_get_next_data_v1 data; union ec_response_get_next_data_v1 data;
} __packed; } __ec_align1;
/* Bit indices for buttons and switches.*/ /* Bit indices for buttons and switches.*/
/* Buttons */ /* Buttons */
...@@ -2268,12 +2302,12 @@ struct ec_response_get_next_event_v1 { ...@@ -2268,12 +2302,12 @@ struct ec_response_get_next_event_v1 {
struct ec_params_temp_sensor_get_info { struct ec_params_temp_sensor_get_info {
uint8_t id; uint8_t id;
} __packed; } __ec_align1;
struct ec_response_temp_sensor_get_info { struct ec_response_temp_sensor_get_info {
char sensor_name[32]; char sensor_name[32];
uint8_t sensor_type; uint8_t sensor_type;
} __packed; } __ec_align1;
/*****************************************************************************/ /*****************************************************************************/
...@@ -2292,11 +2326,11 @@ struct ec_response_temp_sensor_get_info { ...@@ -2292,11 +2326,11 @@ struct ec_response_temp_sensor_get_info {
*/ */
struct ec_params_host_event_mask { struct ec_params_host_event_mask {
uint32_t mask; uint32_t mask;
} __packed; } __ec_align4;
struct ec_response_host_event_mask { struct ec_response_host_event_mask {
uint32_t mask; uint32_t mask;
} __packed; } __ec_align4;
/* These all use ec_response_host_event_mask */ /* These all use ec_response_host_event_mask */
#define EC_CMD_HOST_EVENT_GET_B 0x87 #define EC_CMD_HOST_EVENT_GET_B 0x87
...@@ -2319,7 +2353,7 @@ struct ec_response_host_event_mask { ...@@ -2319,7 +2353,7 @@ struct ec_response_host_event_mask {
struct ec_params_switch_enable_backlight { struct ec_params_switch_enable_backlight {
uint8_t enabled; uint8_t enabled;
} __packed; } __ec_align1;
/* Enable/disable WLAN/Bluetooth */ /* Enable/disable WLAN/Bluetooth */
#define EC_CMD_SWITCH_ENABLE_WIRELESS 0x91 #define EC_CMD_SWITCH_ENABLE_WIRELESS 0x91
...@@ -2328,7 +2362,7 @@ struct ec_params_switch_enable_backlight { ...@@ -2328,7 +2362,7 @@ struct ec_params_switch_enable_backlight {
/* Version 0 params; no response */ /* Version 0 params; no response */
struct ec_params_switch_enable_wireless_v0 { struct ec_params_switch_enable_wireless_v0 {
uint8_t enabled; uint8_t enabled;
} __packed; } __ec_align1;
/* Version 1 params */ /* Version 1 params */
struct ec_params_switch_enable_wireless_v1 { struct ec_params_switch_enable_wireless_v1 {
...@@ -2347,7 +2381,7 @@ struct ec_params_switch_enable_wireless_v1 { ...@@ -2347,7 +2381,7 @@ struct ec_params_switch_enable_wireless_v1 {
/* Which flags to copy from suspend_flags */ /* Which flags to copy from suspend_flags */
uint8_t suspend_mask; uint8_t suspend_mask;
} __packed; } __ec_align1;
/* Version 1 response */ /* Version 1 response */
struct ec_response_switch_enable_wireless_v1 { struct ec_response_switch_enable_wireless_v1 {
...@@ -2356,7 +2390,7 @@ struct ec_response_switch_enable_wireless_v1 { ...@@ -2356,7 +2390,7 @@ struct ec_response_switch_enable_wireless_v1 {
/* Flags to leave enabled in S3 */ /* Flags to leave enabled in S3 */
uint8_t suspend_flags; uint8_t suspend_flags;
} __packed; } __ec_align1;
/*****************************************************************************/ /*****************************************************************************/
/* GPIO commands. Only available on EC if write protect has been disabled. */ /* GPIO commands. Only available on EC if write protect has been disabled. */
...@@ -2367,7 +2401,7 @@ struct ec_response_switch_enable_wireless_v1 { ...@@ -2367,7 +2401,7 @@ struct ec_response_switch_enable_wireless_v1 {
struct ec_params_gpio_set { struct ec_params_gpio_set {
char name[32]; char name[32];
uint8_t val; uint8_t val;
} __packed; } __ec_align1;
/* Get GPIO value */ /* Get GPIO value */
#define EC_CMD_GPIO_GET 0x93 #define EC_CMD_GPIO_GET 0x93
...@@ -2375,37 +2409,37 @@ struct ec_params_gpio_set { ...@@ -2375,37 +2409,37 @@ struct ec_params_gpio_set {
/* Version 0 of input params and response */ /* Version 0 of input params and response */
struct ec_params_gpio_get { struct ec_params_gpio_get {
char name[32]; char name[32];
} __packed; } __ec_align1;
struct ec_response_gpio_get { struct ec_response_gpio_get {
uint8_t val; uint8_t val;
} __packed; } __ec_align1;
/* Version 1 of input params and response */ /* Version 1 of input params and response */
struct ec_params_gpio_get_v1 { struct ec_params_gpio_get_v1 {
uint8_t subcmd; uint8_t subcmd;
union { union {
struct { struct __ec_align1 {
char name[32]; char name[32];
} get_value_by_name; } get_value_by_name;
struct { struct __ec_align1 {
uint8_t index; uint8_t index;
} get_info; } get_info;
}; };
} __packed; } __ec_align1;
struct ec_response_gpio_get_v1 { struct ec_response_gpio_get_v1 {
union { union {
struct { struct __ec_align1 {
uint8_t val; uint8_t val;
} get_value_by_name, get_count; } get_value_by_name, get_count;
struct { struct __ec_todo_unpacked {
uint8_t val; uint8_t val;
char name[32]; char name[32];
uint32_t flags; uint32_t flags;
} get_info; } get_info;
}; };
} __packed; } __ec_todo_packed;
enum gpio_get_subcmd { enum gpio_get_subcmd {
EC_GPIO_GET_BY_NAME = 0, EC_GPIO_GET_BY_NAME = 0,
...@@ -2431,11 +2465,11 @@ struct ec_params_i2c_read { ...@@ -2431,11 +2465,11 @@ struct ec_params_i2c_read {
uint8_t read_size; /* Either 8 or 16. */ uint8_t read_size; /* Either 8 or 16. */
uint8_t port; uint8_t port;
uint8_t offset; uint8_t offset;
} __packed; } __ec_align_size1;
struct ec_response_i2c_read { struct ec_response_i2c_read {
uint16_t data; uint16_t data;
} __packed; } __ec_align2;
/* Write I2C bus */ /* Write I2C bus */
#define EC_CMD_I2C_WRITE 0x95 #define EC_CMD_I2C_WRITE 0x95
...@@ -2446,7 +2480,7 @@ struct ec_params_i2c_write { ...@@ -2446,7 +2480,7 @@ struct ec_params_i2c_write {
uint8_t write_size; /* Either 8 or 16. */ uint8_t write_size; /* Either 8 or 16. */
uint8_t port; uint8_t port;
uint8_t offset; uint8_t offset;
} __packed; } __ec_align_size1;
/*****************************************************************************/ /*****************************************************************************/
/* Charge state commands. Only available when flash write protect unlocked. */ /* Charge state commands. Only available when flash write protect unlocked. */
...@@ -2465,7 +2499,7 @@ enum ec_charge_control_mode { ...@@ -2465,7 +2499,7 @@ enum ec_charge_control_mode {
struct ec_params_charge_control { struct ec_params_charge_control {
uint32_t mode; /* enum charge_control_mode */ uint32_t mode; /* enum charge_control_mode */
} __packed; } __ec_align4;
/*****************************************************************************/ /*****************************************************************************/
...@@ -2493,7 +2527,7 @@ enum ec_console_read_subcmd { ...@@ -2493,7 +2527,7 @@ enum ec_console_read_subcmd {
struct ec_params_console_read_v1 { struct ec_params_console_read_v1 {
uint8_t subcmd; /* enum ec_console_read_subcmd */ uint8_t subcmd; /* enum ec_console_read_subcmd */
} __packed; } __ec_align1;
/*****************************************************************************/ /*****************************************************************************/
...@@ -2511,7 +2545,7 @@ struct ec_params_console_read_v1 { ...@@ -2511,7 +2545,7 @@ struct ec_params_console_read_v1 {
struct ec_params_battery_cutoff { struct ec_params_battery_cutoff {
uint8_t flags; uint8_t flags;
} __packed; } __ec_align1;
/*****************************************************************************/ /*****************************************************************************/
/* USB port mux control. */ /* USB port mux control. */
...@@ -2523,7 +2557,7 @@ struct ec_params_battery_cutoff { ...@@ -2523,7 +2557,7 @@ struct ec_params_battery_cutoff {
struct ec_params_usb_mux { struct ec_params_usb_mux {
uint8_t mux; uint8_t mux;
} __packed; } __ec_align1;
/*****************************************************************************/ /*****************************************************************************/
/* LDOs / FETs control. */ /* LDOs / FETs control. */
...@@ -2541,7 +2575,7 @@ enum ec_ldo_state { ...@@ -2541,7 +2575,7 @@ enum ec_ldo_state {
struct ec_params_ldo_set { struct ec_params_ldo_set {
uint8_t index; uint8_t index;
uint8_t state; uint8_t state;
} __packed; } __ec_align1;
/* /*
* Get LDO state. * Get LDO state.
...@@ -2550,11 +2584,11 @@ struct ec_params_ldo_set { ...@@ -2550,11 +2584,11 @@ struct ec_params_ldo_set {
struct ec_params_ldo_get { struct ec_params_ldo_get {
uint8_t index; uint8_t index;
} __packed; } __ec_align1;
struct ec_response_ldo_get { struct ec_response_ldo_get {
uint8_t state; uint8_t state;
} __packed; } __ec_align1;
/*****************************************************************************/ /*****************************************************************************/
/* Power info. */ /* Power info. */
...@@ -2570,7 +2604,7 @@ struct ec_response_power_info { ...@@ -2570,7 +2604,7 @@ struct ec_response_power_info {
uint16_t voltage_system; uint16_t voltage_system;
uint16_t current_system; uint16_t current_system;
uint16_t usb_current_limit; uint16_t usb_current_limit;
} __packed; } __ec_align4;
/*****************************************************************************/ /*****************************************************************************/
/* I2C passthru command */ /* I2C passthru command */
...@@ -2592,20 +2626,20 @@ struct ec_response_power_info { ...@@ -2592,20 +2626,20 @@ struct ec_response_power_info {
struct ec_params_i2c_passthru_msg { struct ec_params_i2c_passthru_msg {
uint16_t addr_flags; /* I2C slave address (7 or 10 bits) and flags */ uint16_t addr_flags; /* I2C slave address (7 or 10 bits) and flags */
uint16_t len; /* Number of bytes to read or write */ uint16_t len; /* Number of bytes to read or write */
} __packed; } __ec_align2;
struct ec_params_i2c_passthru { struct ec_params_i2c_passthru {
uint8_t port; /* I2C port number */ uint8_t port; /* I2C port number */
uint8_t num_msgs; /* Number of messages */ uint8_t num_msgs; /* Number of messages */
struct ec_params_i2c_passthru_msg msg[]; struct ec_params_i2c_passthru_msg msg[];
/* Data to write for all messages is concatenated here */ /* Data to write for all messages is concatenated here */
} __packed; } __ec_align2;
struct ec_response_i2c_passthru { struct ec_response_i2c_passthru {
uint8_t i2c_status; /* Status flags (EC_I2C_STATUS_...) */ uint8_t i2c_status; /* Status flags (EC_I2C_STATUS_...) */
uint8_t num_msgs; /* Number of messages processed */ uint8_t num_msgs; /* Number of messages processed */
uint8_t data[]; /* Data read by messages concatenated here */ uint8_t data[]; /* Data read by messages concatenated here */
} __packed; } __ec_align1;
/*****************************************************************************/ /*****************************************************************************/
/* Power button hang detect */ /* Power button hang detect */
...@@ -2660,7 +2694,7 @@ struct ec_params_hang_detect { ...@@ -2660,7 +2694,7 @@ struct ec_params_hang_detect {
/* Timeout in msec before generating warm reboot, if enabled */ /* Timeout in msec before generating warm reboot, if enabled */
uint16_t warm_reboot_timeout_msec; uint16_t warm_reboot_timeout_msec;
} __packed; } __ec_align4;
/*****************************************************************************/ /*****************************************************************************/
/* Commands for battery charging */ /* Commands for battery charging */
...@@ -2706,20 +2740,20 @@ struct ec_params_charge_state { ...@@ -2706,20 +2740,20 @@ struct ec_params_charge_state {
/* no args */ /* no args */
} get_state; } get_state;
struct { struct __ec_todo_unpacked {
uint32_t param; /* enum charge_state_param */ uint32_t param; /* enum charge_state_param */
} get_param; } get_param;
struct { struct __ec_todo_unpacked {
uint32_t param; /* param to set */ uint32_t param; /* param to set */
uint32_t value; /* value to set */ uint32_t value; /* value to set */
} set_param; } set_param;
}; };
} __packed; } __ec_todo_packed;
struct ec_response_charge_state { struct ec_response_charge_state {
union { union {
struct { struct __ec_align4 {
int ac; int ac;
int chg_voltage; int chg_voltage;
int chg_current; int chg_current;
...@@ -2727,14 +2761,14 @@ struct ec_response_charge_state { ...@@ -2727,14 +2761,14 @@ struct ec_response_charge_state {
int batt_state_of_charge; int batt_state_of_charge;
} get_state; } get_state;
struct { struct __ec_align4 {
uint32_t value; uint32_t value;
} get_param; } get_param;
struct { struct {
/* no return values */ /* no return values */
} set_param; } set_param;
}; };
} __packed; } __ec_align4;
/* /*
...@@ -2744,7 +2778,7 @@ struct ec_response_charge_state { ...@@ -2744,7 +2778,7 @@ struct ec_response_charge_state {
struct ec_params_current_limit { struct ec_params_current_limit {
uint32_t limit; /* in mA */ uint32_t limit; /* in mA */
} __packed; } __ec_align4;
/* /*
* Set maximum external voltage / current. * Set maximum external voltage / current.
...@@ -2755,7 +2789,7 @@ struct ec_params_current_limit { ...@@ -2755,7 +2789,7 @@ struct ec_params_current_limit {
struct ec_params_external_power_limit_v1 { struct ec_params_external_power_limit_v1 {
uint16_t current_lim; /* in mA, or EC_POWER_LIMIT_NONE to clear limit */ uint16_t current_lim; /* in mA, or EC_POWER_LIMIT_NONE to clear limit */
uint16_t voltage_lim; /* in mV, or EC_POWER_LIMIT_NONE to clear limit */ uint16_t voltage_lim; /* in mV, or EC_POWER_LIMIT_NONE to clear limit */
} __packed; } __ec_align2;
#define EC_POWER_LIMIT_NONE 0xffff #define EC_POWER_LIMIT_NONE 0xffff
...@@ -2771,7 +2805,7 @@ enum host_sleep_event { ...@@ -2771,7 +2805,7 @@ enum host_sleep_event {
struct ec_params_host_sleep_event { struct ec_params_host_sleep_event {
uint8_t sleep_event; uint8_t sleep_event;
} __packed; } __ec_align1;
/* /*
* Use a default timeout value (CONFIG_SLEEP_TIMEOUT_MS) for detecting sleep * Use a default timeout value (CONFIG_SLEEP_TIMEOUT_MS) for detecting sleep
...@@ -2802,7 +2836,7 @@ struct ec_params_host_sleep_event_v1 { ...@@ -2802,7 +2836,7 @@ struct ec_params_host_sleep_event_v1 {
/* No parameters for non-suspend messages. */ /* No parameters for non-suspend messages. */
}; };
} __packed; } __ec_align2;
/* A timeout occurred when this bit is set */ /* A timeout occurred when this bit is set */
#define EC_HOST_RESUME_SLEEP_TIMEOUT 0x80000000 #define EC_HOST_RESUME_SLEEP_TIMEOUT 0x80000000
...@@ -2828,7 +2862,7 @@ struct ec_response_host_sleep_event_v1 { ...@@ -2828,7 +2862,7 @@ struct ec_response_host_sleep_event_v1 {
/* No response fields for non-resume messages. */ /* No response fields for non-resume messages. */
}; };
} __packed; } __ec_align4;
/*****************************************************************************/ /*****************************************************************************/
/* Smart battery pass-through */ /* Smart battery pass-through */
...@@ -2845,25 +2879,25 @@ struct ec_response_host_sleep_event_v1 { ...@@ -2845,25 +2879,25 @@ struct ec_response_host_sleep_event_v1 {
struct ec_params_sb_rd { struct ec_params_sb_rd {
uint8_t reg; uint8_t reg;
} __packed; } __ec_align1;
struct ec_response_sb_rd_word { struct ec_response_sb_rd_word {
uint16_t value; uint16_t value;
} __packed; } __ec_align2;
struct ec_params_sb_wr_word { struct ec_params_sb_wr_word {
uint8_t reg; uint8_t reg;
uint16_t value; uint16_t value;
} __packed; } __ec_align1;
struct ec_response_sb_rd_block { struct ec_response_sb_rd_block {
uint8_t data[32]; uint8_t data[32];
} __packed; } __ec_align1;
struct ec_params_sb_wr_block { struct ec_params_sb_wr_block {
uint8_t reg; uint8_t reg;
uint16_t data[32]; uint16_t data[32];
} __packed; } __ec_align1;
/*****************************************************************************/ /*****************************************************************************/
/* Battery vendor parameters /* Battery vendor parameters
...@@ -2885,11 +2919,11 @@ struct ec_params_battery_vendor_param { ...@@ -2885,11 +2919,11 @@ struct ec_params_battery_vendor_param {
uint32_t param; uint32_t param;
uint32_t value; uint32_t value;
uint8_t mode; uint8_t mode;
} __packed; } __ec_align_size1;
struct ec_response_battery_vendor_param { struct ec_response_battery_vendor_param {
uint32_t value; uint32_t value;
} __packed; } __ec_align4;
/*****************************************************************************/ /*****************************************************************************/
/* Commands for I2S recording on audio codec. */ /* Commands for I2S recording on audio codec. */
...@@ -2920,7 +2954,7 @@ enum ec_i2s_config { ...@@ -2920,7 +2954,7 @@ enum ec_i2s_config {
EC_DAI_FMT_PCM_TDM = 5, EC_DAI_FMT_PCM_TDM = 5,
}; };
struct ec_param_codec_i2s { struct __ec_todo_packed ec_param_codec_i2s {
/* enum ec_codec_i2s_subcmd */ /* enum ec_codec_i2s_subcmd */
uint8_t cmd; uint8_t cmd;
union { union {
...@@ -2934,10 +2968,10 @@ struct ec_param_codec_i2s { ...@@ -2934,10 +2968,10 @@ struct ec_param_codec_i2s {
* EC_CODEC_SET_GAIN * EC_CODEC_SET_GAIN
* Value should be 0~43 for both channels. * Value should be 0~43 for both channels.
*/ */
struct ec_param_codec_i2s_set_gain { struct __ec_align1 ec_param_codec_i2s_set_gain {
uint8_t left; uint8_t left;
uint8_t right; uint8_t right;
} __packed gain; } gain;
/* /*
* EC_CODEC_I2S_ENABLE * EC_CODEC_I2S_ENABLE
...@@ -2955,7 +2989,7 @@ struct ec_param_codec_i2s { ...@@ -2955,7 +2989,7 @@ struct ec_param_codec_i2s {
* EC_CODEC_I2S_SET_TDM_CONFIG * EC_CODEC_I2S_SET_TDM_CONFIG
* Value should be one of ec_i2s_config. * Value should be one of ec_i2s_config.
*/ */
struct ec_param_codec_i2s_tdm { struct __ec_todo_unpacked ec_param_codec_i2s_tdm {
/* /*
* 0 to 496 * 0 to 496
*/ */
...@@ -2966,14 +3000,14 @@ struct ec_param_codec_i2s { ...@@ -2966,14 +3000,14 @@ struct ec_param_codec_i2s {
int16_t ch1_delay; int16_t ch1_delay;
uint8_t adjacent_to_ch0; uint8_t adjacent_to_ch0;
uint8_t adjacent_to_ch1; uint8_t adjacent_to_ch1;
} __packed tdm_param; } tdm_param;
/* /*
* EC_CODEC_I2S_SET_BCLK * EC_CODEC_I2S_SET_BCLK
*/ */
uint32_t bclk; uint32_t bclk;
}; };
} __packed; };
/* /*
* For subcommand EC_CODEC_GET_GAIN. * For subcommand EC_CODEC_GET_GAIN.
...@@ -2981,7 +3015,7 @@ struct ec_param_codec_i2s { ...@@ -2981,7 +3015,7 @@ struct ec_param_codec_i2s {
struct ec_response_codec_gain { struct ec_response_codec_gain {
uint8_t left; uint8_t left;
uint8_t right; uint8_t right;
} __packed; } __ec_align1;
/*****************************************************************************/ /*****************************************************************************/
/* System commands */ /* System commands */
...@@ -3010,7 +3044,7 @@ enum ec_reboot_cmd { ...@@ -3010,7 +3044,7 @@ enum ec_reboot_cmd {
struct ec_params_reboot_ec { struct ec_params_reboot_ec {
uint8_t cmd; /* enum ec_reboot_cmd */ uint8_t cmd; /* enum ec_reboot_cmd */
uint8_t flags; /* See EC_REBOOT_FLAG_* */ uint8_t flags; /* See EC_REBOOT_FLAG_* */
} __packed; } __ec_align1;
/* /*
* Get information on last EC panic. * Get information on last EC panic.
...@@ -3153,7 +3187,7 @@ struct ec_params_reboot_ec { ...@@ -3153,7 +3187,7 @@ struct ec_params_reboot_ec {
*/ */
struct ec_params_cec_write { struct ec_params_cec_write {
uint8_t msg[EC_MAX_CEC_MSG_LEN]; uint8_t msg[EC_MAX_CEC_MSG_LEN];
} __packed; } __ec_align1;
/* Set various CEC parameters */ /* Set various CEC parameters */
#define EC_CMD_CEC_SET 0x00BA #define EC_CMD_CEC_SET 0x00BA
...@@ -3169,7 +3203,7 @@ struct ec_params_cec_write { ...@@ -3169,7 +3203,7 @@ struct ec_params_cec_write {
struct ec_params_cec_set { struct ec_params_cec_set {
uint8_t cmd; /* enum cec_command */ uint8_t cmd; /* enum cec_command */
uint8_t val; uint8_t val;
} __packed; } __ec_align1;
/* Read various CEC parameters */ /* Read various CEC parameters */
#define EC_CMD_CEC_GET 0x00BB #define EC_CMD_CEC_GET 0x00BB
...@@ -3180,7 +3214,7 @@ struct ec_params_cec_set { ...@@ -3180,7 +3214,7 @@ struct ec_params_cec_set {
*/ */
struct ec_params_cec_get { struct ec_params_cec_get {
uint8_t cmd; /* enum cec_command */ uint8_t cmd; /* enum cec_command */
} __packed; } __ec_align1;
/** /**
* struct ec_response_cec_get - CEC parameters get response * struct ec_response_cec_get - CEC parameters get response
...@@ -3191,7 +3225,7 @@ struct ec_params_cec_get { ...@@ -3191,7 +3225,7 @@ struct ec_params_cec_get {
*/ */
struct ec_response_cec_get { struct ec_response_cec_get {
uint8_t val; uint8_t val;
} __packed; } __ec_align1;
/* CEC parameters command */ /* CEC parameters command */
enum ec_cec_command { enum ec_cec_command {
...@@ -3264,13 +3298,13 @@ enum mkbp_cec_event { ...@@ -3264,13 +3298,13 @@ enum mkbp_cec_event {
/* Status of EC being sent to PD */ /* Status of EC being sent to PD */
struct ec_params_pd_status { struct ec_params_pd_status {
int8_t batt_soc; /* battery state of charge */ int8_t batt_soc; /* battery state of charge */
} __packed; } __ec_align1;
/* Status of PD being sent back to EC */ /* Status of PD being sent back to EC */
struct ec_response_pd_status { struct ec_response_pd_status {
int8_t status; /* PD MCU status */ int8_t status; /* PD MCU status */
uint32_t curr_lim_ma; /* input current limit */ uint32_t curr_lim_ma; /* input current limit */
} __packed; } __ec_align_size1;
/* Set USB type-C port role and muxes */ /* Set USB type-C port role and muxes */
#define EC_CMD_USB_PD_CONTROL 0x101 #define EC_CMD_USB_PD_CONTROL 0x101
...@@ -3305,7 +3339,7 @@ struct ec_params_usb_pd_control { ...@@ -3305,7 +3339,7 @@ struct ec_params_usb_pd_control {
uint8_t role; uint8_t role;
uint8_t mux; uint8_t mux;
uint8_t swap; uint8_t swap;
} __packed; } __ec_align1;
#define PD_CTRL_RESP_ENABLED_COMMS (1 << 0) /* Communication enabled */ #define PD_CTRL_RESP_ENABLED_COMMS (1 << 0) /* Communication enabled */
#define PD_CTRL_RESP_ENABLED_CONNECTED (1 << 1) /* Device connected */ #define PD_CTRL_RESP_ENABLED_CONNECTED (1 << 1) /* Device connected */
...@@ -3324,7 +3358,7 @@ struct ec_response_usb_pd_control_v1 { ...@@ -3324,7 +3358,7 @@ struct ec_response_usb_pd_control_v1 {
uint8_t role; uint8_t role;
uint8_t polarity; uint8_t polarity;
char state[32]; char state[32];
} __packed; } __ec_align1;
#define EC_CMD_USB_PD_PORTS 0x102 #define EC_CMD_USB_PD_PORTS 0x102
...@@ -3333,14 +3367,14 @@ struct ec_response_usb_pd_control_v1 { ...@@ -3333,14 +3367,14 @@ struct ec_response_usb_pd_control_v1 {
struct ec_response_usb_pd_ports { struct ec_response_usb_pd_ports {
uint8_t num_ports; uint8_t num_ports;
} __packed; } __ec_align1;
#define EC_CMD_USB_PD_POWER_INFO 0x103 #define EC_CMD_USB_PD_POWER_INFO 0x103
#define PD_POWER_CHARGING_PORT 0xff #define PD_POWER_CHARGING_PORT 0xff
struct ec_params_usb_pd_power_info { struct ec_params_usb_pd_power_info {
uint8_t port; uint8_t port;
} __packed; } __ec_align1;
enum usb_chg_type { enum usb_chg_type {
USB_CHG_TYPE_NONE, USB_CHG_TYPE_NONE,
...@@ -3366,7 +3400,7 @@ struct usb_chg_measures { ...@@ -3366,7 +3400,7 @@ struct usb_chg_measures {
uint16_t voltage_now; uint16_t voltage_now;
uint16_t current_max; uint16_t current_max;
uint16_t current_lim; uint16_t current_lim;
} __packed; } __ec_align2;
struct ec_response_usb_pd_power_info { struct ec_response_usb_pd_power_info {
uint8_t role; uint8_t role;
...@@ -3375,11 +3409,11 @@ struct ec_response_usb_pd_power_info { ...@@ -3375,11 +3409,11 @@ struct ec_response_usb_pd_power_info {
uint8_t reserved1; uint8_t reserved1;
struct usb_chg_measures meas; struct usb_chg_measures meas;
uint32_t max_power; uint32_t max_power;
} __packed; } __ec_align4;
struct ec_params_usb_pd_info_request { struct ec_params_usb_pd_info_request {
uint8_t port; uint8_t port;
} __packed; } __ec_align1;
/* /*
* This command will return the number of USB PD charge port + the number * This command will return the number of USB PD charge port + the number
...@@ -3389,7 +3423,7 @@ struct ec_params_usb_pd_info_request { ...@@ -3389,7 +3423,7 @@ struct ec_params_usb_pd_info_request {
#define EC_CMD_CHARGE_PORT_COUNT 0x0105 #define EC_CMD_CHARGE_PORT_COUNT 0x0105
struct ec_response_charge_port_count { struct ec_response_charge_port_count {
uint8_t port_count; uint8_t port_count;
} __packed; } __ec_align1;
/* Read USB-PD Device discovery info */ /* Read USB-PD Device discovery info */
#define EC_CMD_USB_PD_DISCOVERY 0x0113 #define EC_CMD_USB_PD_DISCOVERY 0x0113
...@@ -3397,7 +3431,7 @@ struct ec_params_usb_pd_discovery_entry { ...@@ -3397,7 +3431,7 @@ struct ec_params_usb_pd_discovery_entry {
uint16_t vid; /* USB-IF VID */ uint16_t vid; /* USB-IF VID */
uint16_t pid; /* USB-IF PID */ uint16_t pid; /* USB-IF PID */
uint8_t ptype; /* product type (hub,periph,cable,ama) */ uint8_t ptype; /* product type (hub,periph,cable,ama) */
} __packed; } __ec_align_size1;
/* Override default charge behavior */ /* Override default charge behavior */
#define EC_CMD_PD_CHARGE_PORT_OVERRIDE 0x0114 #define EC_CMD_PD_CHARGE_PORT_OVERRIDE 0x0114
...@@ -3411,7 +3445,7 @@ enum usb_pd_override_ports { ...@@ -3411,7 +3445,7 @@ enum usb_pd_override_ports {
struct ec_params_charge_port_override { struct ec_params_charge_port_override {
int16_t override_port; /* Override port# */ int16_t override_port; /* Override port# */
} __packed; } __ec_align2;
/* Read (and delete) one entry of PD event log */ /* Read (and delete) one entry of PD event log */
#define EC_CMD_PD_GET_LOG_ENTRY 0x0115 #define EC_CMD_PD_GET_LOG_ENTRY 0x0115
...@@ -3422,7 +3456,7 @@ struct ec_response_pd_log { ...@@ -3422,7 +3456,7 @@ struct ec_response_pd_log {
uint8_t size_port; /* [7:5] port number [4:0] payload size in bytes */ uint8_t size_port; /* [7:5] port number [4:0] payload size in bytes */
uint16_t data; /* type-defined data payload */ uint16_t data; /* type-defined data payload */
uint8_t payload[0]; /* optional additional data payload: 0..16 bytes */ uint8_t payload[0]; /* optional additional data payload: 0..16 bytes */
} __packed; } __ec_align4;
/* The timestamp is the microsecond counter shifted to get about a ms. */ /* The timestamp is the microsecond counter shifted to get about a ms. */
#define PD_LOG_TIMESTAMP_SHIFT 10 /* 1 LSB = 1024us */ #define PD_LOG_TIMESTAMP_SHIFT 10 /* 1 LSB = 1024us */
...@@ -3488,14 +3522,14 @@ struct mcdp_version { ...@@ -3488,14 +3522,14 @@ struct mcdp_version {
uint8_t major; uint8_t major;
uint8_t minor; uint8_t minor;
uint16_t build; uint16_t build;
} __packed; } __ec_align4;
struct mcdp_info { struct mcdp_info {
uint8_t family[2]; uint8_t family[2];
uint8_t chipid[2]; uint8_t chipid[2];
struct mcdp_version irom; struct mcdp_version irom;
struct mcdp_version fw; struct mcdp_version fw;
} __packed; } __ec_align4;
/* struct mcdp_info field decoding */ /* struct mcdp_info field decoding */
#define MCDP_CHIPID(chipid) ((chipid[0] << 8) | chipid[1]) #define MCDP_CHIPID(chipid) ((chipid[0] << 8) | chipid[1])
...@@ -3506,7 +3540,7 @@ struct mcdp_info { ...@@ -3506,7 +3540,7 @@ struct mcdp_info {
struct ec_params_usb_pd_mux_info { struct ec_params_usb_pd_mux_info {
uint8_t port; /* USB-C port number */ uint8_t port; /* USB-C port number */
} __packed; } __ec_align1;
/* Flags representing mux state */ /* Flags representing mux state */
#define USB_PD_MUX_USB_ENABLED (1 << 0) #define USB_PD_MUX_USB_ENABLED (1 << 0)
...@@ -3516,7 +3550,7 @@ struct ec_params_usb_pd_mux_info { ...@@ -3516,7 +3550,7 @@ struct ec_params_usb_pd_mux_info {
struct ec_response_usb_pd_mux_info { struct ec_response_usb_pd_mux_info {
uint8_t flags; /* USB_PD_MUX_*-encoded USB mux state */ uint8_t flags; /* USB_PD_MUX_*-encoded USB mux state */
} __packed; } __ec_align1;
/*****************************************************************************/ /*****************************************************************************/
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment