summaryrefslogtreecommitdiff
path: root/include/ec_commands.h
diff options
context:
space:
mode:
authorRandall Spangler <rspangler@chromium.org>2017-12-08 13:47:29 -0800
committerchrome-bot <chrome-bot@chromium.org>2017-12-13 12:33:37 -0800
commit7d2ce0c47e06622e2f423d33eec5ffceeeeb6a01 (patch)
tree9a38a88888a208132d3c8b37083b20a6a50b5fb2 /include/ec_commands.h
parent84124045457e115e6be116fa0a7215098ba7f0d5 (diff)
downloadchrome-ec-7d2ce0c47e06622e2f423d33eec5ffceeeeb6a01.tar.gz
ec_commands: Remove zero-size structs
The size of empty structs (and unions) varies between C and C++. When including in C++ code our external API in ec_commands.h header with extern "C". clang will complain (correctly) for all empty structs: error: empty struct has size 0 in C, size 1 in C++ [-Werror,-Wextern-c-compat] Remove them from the ec_commands.h header file. ectool.c has some ugly macros which assume subcommands have both requests and responses. Change those macros so they only reference the non-empty sub-structs. The macros are still ugly, but generate identical output, and don't rely upon zero-length structs. BUG=chromium:792408 BRANCH=none TEST=manual 1) Compile the following using 'clang -Wall -Werror': #include <stdint.h> extern "C" { #include "include/ec_commands.h" } int main(void) { return 0; } It compiles without error. 2) Copy the lb_command_paramcount, ms_command_sizes, and cs_paramcount globals from ectool.c to a dummy .c file and compile with 'gcc -S' to generate assembly. Do the same after applying this patch. Confirm the arrays have the same contents. Change-Id: Iad76f10315b97205b42118ce070463071fe97128 Signed-off-by: Randall Spangler <rspangler@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/820649 Reviewed-by: Vincent Palatin <vpalatin@chromium.org> Reviewed-by: Shawn N <shawnn@chromium.org>
Diffstat (limited to 'include/ec_commands.h')
-rw-r--r--include/ec_commands.h57
1 files changed, 27 insertions, 30 deletions
diff --git a/include/ec_commands.h b/include/ec_commands.h
index cc53a4f314..3be0ac61c8 100644
--- a/include/ec_commands.h
+++ b/include/ec_commands.h
@@ -1856,13 +1856,17 @@ struct __ec_todo_unpacked lightbar_program {
struct __ec_todo_packed ec_params_lightbar {
uint8_t cmd; /* Command (see enum lightbar_command) */
union {
- struct __ec_todo_unpacked {
- /* no args */
- } dump, off, on, init, get_seq, get_params_v0, get_params_v1,
- version, get_brightness, get_demo, suspend, resume,
- get_params_v2_timing, get_params_v2_tap,
- get_params_v2_osc, get_params_v2_bright,
- get_params_v2_thlds, get_params_v2_colors;
+ /*
+ * The following commands have no args:
+ *
+ * dump, off, on, init, get_seq, get_params_v0, get_params_v1,
+ * version, get_brightness, get_demo, suspend, resume,
+ * get_params_v2_timing, get_params_v2_tap, get_params_v2_osc,
+ * get_params_v2_bright, get_params_v2_thlds,
+ * get_params_v2_colors
+ *
+ * Don't use an empty struct, because C++ hates that.
+ */
struct __ec_todo_unpacked {
uint8_t num;
@@ -1932,14 +1936,15 @@ struct __ec_todo_packed ec_response_lightbar {
uint8_t red, green, blue;
} get_rgb;
- struct __ec_todo_unpacked {
- /* no return params */
- } off, on, init, set_brightness, seq, reg, set_rgb,
- demo, set_params_v0, set_params_v1,
- set_program, manual_suspend_ctrl, suspend, resume,
- set_v2par_timing, set_v2par_tap,
- set_v2par_osc, set_v2par_bright, set_v2par_thlds,
- set_v2par_colors;
+ /*
+ * The following commands have no response:
+ *
+ * off, on, init, set_brightness, seq, reg, set_rgb, demo,
+ * set_params_v0, set_params_v1, set_program,
+ * manual_suspend_ctrl, suspend, resume, set_v2par_timing,
+ * set_v2par_tap, set_v2par_osc, set_v2par_bright,
+ * set_v2par_thlds, set_v2par_colors
+ */
};
};
@@ -2446,8 +2451,7 @@ struct __ec_todo_packed ec_params_motion_sense {
} sensor_offset;
/* Used for MOTIONSENSE_CMD_FIFO_INFO */
- struct __ec_todo_unpacked {
- } fifo_info;
+ /* (no params) */
/* Used for MOTIONSENSE_CMD_FIFO_READ */
struct __ec_todo_unpacked {
@@ -2461,8 +2465,7 @@ struct __ec_todo_packed ec_params_motion_sense {
struct ec_motion_sense_activity set_activity;
/* Used for MOTIONSENSE_CMD_LID_ANGLE */
- struct __ec_todo_unpacked {
- } lid_angle;
+ /* (no params) */
/* Used for MOTIONSENSE_CMD_FIFO_INT_ENABLE */
struct __ec_todo_unpacked {
@@ -2571,8 +2574,7 @@ struct __ec_todo_packed ec_response_motion_sense {
uint32_t disabled;
} list_activities;
- struct __ec_todo_unpacked {
- } set_activity;
+ /* No params for set activity */
/* Used for MOTIONSENSE_CMD_LID_ANGLE */
struct __ec_todo_unpacked {
@@ -3746,9 +3748,7 @@ enum charge_state_params {
struct __ec_todo_packed ec_params_charge_state {
uint8_t cmd; /* enum charge_state_command */
union {
- struct __ec_align1 {
- /* no args */
- } get_state;
+ /* get_state has no args */
struct __ec_todo_unpacked {
uint32_t param; /* enum charge_state_param */
@@ -3774,9 +3774,8 @@ struct __ec_align4 ec_response_charge_state {
struct __ec_align4 {
uint32_t value;
} get_param;
- struct __ec_align4 {
- /* no return values */
- } set_param;
+
+ /* set_param returns no args */
};
};
@@ -3989,9 +3988,7 @@ struct __ec_align4 ec_params_sb_fw_update {
/* EC_SB_FW_UPDATE_END = 0x4 */
/* EC_SB_FW_UPDATE_STATUS = 0x5 */
/* EC_SB_FW_UPDATE_PROTECT = 0x6 */
- struct __ec_align4 {
- /* no args */
- } dummy;
+ /* Those have no args */
/* EC_SB_FW_UPDATE_WRITE = 0x3 */
struct __ec_align4 {