diff options
Diffstat (limited to 'common')
-rw-r--r-- | common/acpi.c | 4 | ||||
-rw-r--r-- | common/ap_hang_detect.c | 10 | ||||
-rw-r--r-- | common/battery.c | 4 | ||||
-rw-r--r-- | common/button.c | 9 | ||||
-rw-r--r-- | common/capsense.c | 4 | ||||
-rw-r--r-- | common/charge_manager.c | 20 | ||||
-rw-r--r-- | common/extpower_gpio.c | 2 | ||||
-rw-r--r-- | common/hooks.c | 14 | ||||
-rw-r--r-- | common/inductive_charging.c | 8 | ||||
-rw-r--r-- | common/lid_switch.c | 4 | ||||
-rw-r--r-- | common/power_button.c | 7 | ||||
-rw-r--r-- | common/switch.c | 2 | ||||
-rw-r--r-- | common/uart_buffering.c | 7 | ||||
-rw-r--r-- | common/usb_pd_policy.c | 2 | ||||
-rw-r--r-- | common/usb_pd_protocol.c | 5 | ||||
-rw-r--r-- | common/vboot_hash.c | 13 |
16 files changed, 58 insertions, 57 deletions
diff --git a/common/acpi.c b/common/acpi.c index 904c6fe055..58bb658a84 100644 --- a/common/acpi.c +++ b/common/acpi.c @@ -254,7 +254,7 @@ int acpi_ap_to_ec(int is_cmd, uint8_t value, uint8_t *resultptr) * Disable from deferred function in case burst mode is enabled * for an extremely long time (ex. kernel bug / crash). */ - hook_call_deferred(acpi_disable_burst_deferred, 1*SECOND); + hook_call_deferred(&acpi_disable_burst_deferred_data, 1*SECOND); /* ACPI 5.0-12.3.3: Burst ACK */ *resultptr = 0x90; @@ -263,7 +263,7 @@ int acpi_ap_to_ec(int is_cmd, uint8_t value, uint8_t *resultptr) acpi_read_cache.enabled = 0; /* Leave burst mode */ - hook_call_deferred(acpi_disable_burst_deferred, -1); + hook_call_deferred(&acpi_disable_burst_deferred_data, -1); lpc_clear_acpi_status_mask(EC_LPC_STATUS_BURST_MODE); } diff --git a/common/ap_hang_detect.c b/common/ap_hang_detect.c index 2957365211..08bcff036a 100644 --- a/common/ap_hang_detect.c +++ b/common/ap_hang_detect.c @@ -28,6 +28,9 @@ static int timeout_will_reboot; /* Will the deferred call reboot the AP? */ /** * Handle the hang detect timer expiring. */ +static void hang_detect_deferred(void); +DECLARE_DEFERRED(hang_detect_deferred); + static void hang_detect_deferred(void) { /* If we're no longer active, nothing to do */ @@ -51,7 +54,7 @@ static void hang_detect_deferred(void) if (hdparams.warm_reboot_timeout_msec) { CPRINTS("hang detect continuing (for reboot)"); timeout_will_reboot = 1; - hook_call_deferred(hang_detect_deferred, + hook_call_deferred(&hang_detect_deferred_data, (hdparams.warm_reboot_timeout_msec - hdparams.host_event_timeout_msec) * MSEC); } else { @@ -59,7 +62,6 @@ static void hang_detect_deferred(void) active = 0; } } -DECLARE_DEFERRED(hang_detect_deferred); /** * Start the hang detect timers. @@ -74,13 +76,13 @@ static void hang_detect_start(const char *why) CPRINTS("hang detect started on %s (for event)", why); timeout_will_reboot = 0; active = 1; - hook_call_deferred(hang_detect_deferred, + hook_call_deferred(&hang_detect_deferred_data, hdparams.host_event_timeout_msec * MSEC); } else if (hdparams.warm_reboot_timeout_msec) { CPRINTS("hang detect started on %s (for reboot)", why); timeout_will_reboot = 1; active = 1; - hook_call_deferred(hang_detect_deferred, + hook_call_deferred(&hang_detect_deferred_data, hdparams.warm_reboot_timeout_msec * MSEC); } } diff --git a/common/battery.c b/common/battery.c index 408ae92c46..ae3d548676 100644 --- a/common/battery.c +++ b/common/battery.c @@ -294,7 +294,7 @@ static void clear_pending_cutoff(void) { if (extpower_is_present()) { battery_cutoff_state = BATTERY_CUTOFF_STATE_NORMAL; - hook_call_deferred(pending_cutoff_deferred, -1); + hook_call_deferred(&pending_cutoff_deferred_data, -1); } } DECLARE_HOOK(HOOK_AC_CHANGE, clear_pending_cutoff, HOOK_PRIO_DEFAULT); @@ -331,7 +331,7 @@ static void check_pending_cutoff(void) if (battery_cutoff_state == BATTERY_CUTOFF_STATE_PENDING) { CPRINTF("[%T Cutting off battery in %d second(s)]\n", CONFIG_BATTERY_CUTOFF_DELAY_US / SECOND); - hook_call_deferred(pending_cutoff_deferred, + hook_call_deferred(&pending_cutoff_deferred_data, CONFIG_BATTERY_CUTOFF_DELAY_US); } } diff --git a/common/button.c b/common/button.c index 89e6d409e2..38f5a61403 100644 --- a/common/button.c +++ b/common/button.c @@ -57,6 +57,10 @@ DECLARE_HOOK(HOOK_INIT, button_init, HOOK_PRIO_DEFAULT); /* * Handle debounced button changing state. */ + +static void button_change_deferred(void); +DECLARE_DEFERRED(button_change_deferred); + static void button_change_deferred(void) { int i; @@ -99,11 +103,10 @@ static void button_change_deferred(void) if (soonest_debounce_time != 0) { next_deferred_time = soonest_debounce_time; - hook_call_deferred(button_change_deferred, + hook_call_deferred(&button_change_deferred_data, next_deferred_time - time_now); } } -DECLARE_DEFERRED(button_change_deferred); /* * Handle a button interrupt. @@ -121,7 +124,7 @@ void button_interrupt(enum gpio_signal signal) if (next_deferred_time <= time_now || next_deferred_time > state[i].debounce_time) { next_deferred_time = state[i].debounce_time; - hook_call_deferred(button_change_deferred, + hook_call_deferred(&button_change_deferred_data, next_deferred_time - time_now); } break; diff --git a/common/capsense.c b/common/capsense.c index 95703931bd..bc54d5aae3 100644 --- a/common/capsense.c +++ b/common/capsense.c @@ -73,7 +73,7 @@ static void capsense_change_deferred(void) } if (cur_val) - hook_call_deferred(capsense_change_deferred, + hook_call_deferred(&capsense_change_deferred_data, CAPSENSE_POLL_INTERVAL); } DECLARE_DEFERRED(capsense_change_deferred); @@ -83,5 +83,5 @@ DECLARE_DEFERRED(capsense_change_deferred); */ void capsense_interrupt(enum gpio_signal signal) { - hook_call_deferred(capsense_change_deferred, 0); + hook_call_deferred(&capsense_change_deferred_data, 0); } diff --git a/common/charge_manager.c b/common/charge_manager.c index 7063d0540f..fa015086da 100644 --- a/common/charge_manager.c +++ b/common/charge_manager.c @@ -662,9 +662,7 @@ static void charge_manager_make_change(enum charge_manager_change_type change, override_port = OVERRIDE_OFF; if (delayed_override_port != OVERRIDE_OFF) { delayed_override_port = OVERRIDE_OFF; - hook_call_deferred( - charge_override_timeout, - -1); + hook_call_deferred(&charge_override_timeout_data, -1); } } @@ -682,7 +680,7 @@ static void charge_manager_make_change(enum charge_manager_change_type change, * just sent due to the power change on another port. */ if (charge->current > 0) - hook_call_deferred(charger_detect_debounced, + hook_call_deferred(&charger_detect_debounced_data, CHARGE_DETECT_DELAY); /* @@ -693,7 +691,7 @@ static void charge_manager_make_change(enum charge_manager_change_type change, pd_get_role(delayed_override_port) == PD_ROLE_SINK && get_time().val < delayed_override_deadline.val) { delayed_override_port = OVERRIDE_OFF; - hook_call_deferred(charge_override_timeout, -1); + hook_call_deferred(&charge_override_timeout_data, -1); charge_manager_set_override(port); } } @@ -705,7 +703,7 @@ static void charge_manager_make_change(enum charge_manager_change_type change, * attached. */ if (charge_manager_is_seeded()) - hook_call_deferred(charge_manager_refresh, 0); + hook_call_deferred(&charge_manager_refresh_data, 0); } /** @@ -762,7 +760,7 @@ void charge_manager_set_ceil(int port, enum ceil_requestor requestor, int ceil) if (charge_ceil[port][requestor] != ceil) { charge_ceil[port][requestor] = ceil; if (port == charge_port && charge_manager_is_seeded()) - hook_call_deferred(charge_manager_refresh, 0); + hook_call_deferred(&charge_manager_refresh_data, 0); } } @@ -798,7 +796,8 @@ int charge_manager_set_override(int port) if (override_port != port) { override_port = port; if (charge_manager_is_seeded()) - hook_call_deferred(charge_manager_refresh, 0); + hook_call_deferred( + &charge_manager_refresh_data, 0); } } /* @@ -810,9 +809,8 @@ int charge_manager_set_override(int port) delayed_override_deadline.val = get_time().val + POWER_SWAP_TIMEOUT; delayed_override_port = port; - hook_call_deferred( - charge_override_timeout, - POWER_SWAP_TIMEOUT); + hook_call_deferred(&charge_override_timeout_data, + POWER_SWAP_TIMEOUT); pd_request_power_swap(port); /* Can't charge from requested port -- return error. */ } else diff --git a/common/extpower_gpio.c b/common/extpower_gpio.c index b73d748701..569d674157 100644 --- a/common/extpower_gpio.c +++ b/common/extpower_gpio.c @@ -45,7 +45,7 @@ DECLARE_DEFERRED(extpower_deferred); void extpower_interrupt(enum gpio_signal signal) { /* Trigger deferred notification of external power change */ - hook_call_deferred(extpower_deferred, EXTPOWER_DEBOUNCE_US); + hook_call_deferred(&extpower_deferred_data, EXTPOWER_DEBOUNCE_US); } static void extpower_init(void) diff --git a/common/hooks.c b/common/hooks.c index f8e368c36d..1a1a1aa819 100644 --- a/common/hooks.c +++ b/common/hooks.c @@ -132,21 +132,13 @@ void hook_notify(enum hook_type type) #endif } -int hook_call_deferred(void (*routine)(void), int us) +int hook_call_deferred(const struct deferred_data *data, int us) { - const struct deferred_data *p; - int i; + int i = data - __deferred_funcs; - /* Find the index of the routine */ - for (p = __deferred_funcs; p < __deferred_funcs_end; p++) { - if (p->routine == routine) - break; - } - if (p >= __deferred_funcs_end) + if (data < __deferred_funcs || data >= __deferred_funcs_end) return EC_ERROR_INVAL; /* Routine not registered */ - i = p - __deferred_funcs; - if (us == -1) { /* Cancel */ defer_until[i] = 0; diff --git a/common/inductive_charging.c b/common/inductive_charging.c index 8b92394c8c..793f535afe 100644 --- a/common/inductive_charging.c +++ b/common/inductive_charging.c @@ -73,8 +73,9 @@ void inductive_charging_interrupt(enum gpio_signal signal) * looking at CHARGE_DONE. */ if (!monitor_charge_done) - hook_call_deferred(inductive_charging_monitor_charge, - SECOND); + hook_call_deferred( + &inductive_charging_monitor_charge_data, + SECOND); } } @@ -93,7 +94,8 @@ static void inductive_charging_lid_update(void) * unaligned. Delay here to give the coils time to align before * we try to clear CHARGE_DONE. */ - hook_call_deferred(inductive_charging_deferred_update, 5 * SECOND); + hook_call_deferred(&inductive_charging_deferred_update_data, + 5 * SECOND); } DECLARE_HOOK(HOOK_LID_CHANGE, inductive_charging_lid_update, HOOK_PRIO_DEFAULT); diff --git a/common/lid_switch.c b/common/lid_switch.c index eefd2bdfa1..f5af903936 100644 --- a/common/lid_switch.c +++ b/common/lid_switch.c @@ -113,7 +113,7 @@ DECLARE_DEFERRED(lid_change_deferred); void lid_interrupt(enum gpio_signal signal) { /* Reset lid debounce time */ - hook_call_deferred(lid_change_deferred, LID_DEBOUNCE_US); + hook_call_deferred(&lid_change_deferred_data, LID_DEBOUNCE_US); } static int command_lidopen(int argc, char **argv) @@ -147,7 +147,7 @@ static int hc_force_lid_open(struct host_cmd_handler_args *args) forced_lid_open = p->enabled ? 1 : 0; /* Make this take effect immediately; no debounce time */ - hook_call_deferred(lid_change_deferred, 0); + hook_call_deferred(&lid_change_deferred_data, 0); return EC_RES_SUCCESS; } diff --git a/common/power_button.c b/common/power_button.c index e2914bc362..747be2381e 100644 --- a/common/power_button.c +++ b/common/power_button.c @@ -156,7 +156,8 @@ void power_button_interrupt(enum gpio_signal signal) /* Reset power button debounce time */ power_button_is_stable = 0; - hook_call_deferred(power_button_change_deferred, PWRBTN_DEBOUNCE_US); + hook_call_deferred(&power_button_change_deferred_data, + PWRBTN_DEBOUNCE_US); } /*****************************************************************************/ @@ -176,14 +177,14 @@ static int command_powerbtn(int argc, char **argv) ccprintf("Simulating %d ms power button press.\n", ms); simulate_power_pressed = 1; power_button_is_stable = 0; - hook_call_deferred(power_button_change_deferred, 0); + hook_call_deferred(&power_button_change_deferred_data, 0); msleep(ms); ccprintf("Simulating power button release.\n"); simulate_power_pressed = 0; power_button_is_stable = 0; - hook_call_deferred(power_button_change_deferred, 0); + hook_call_deferred(&power_button_change_deferred_data, 0); return EC_SUCCESS; } diff --git a/common/switch.c b/common/switch.c index fb854f63e9..811e4f7d2d 100644 --- a/common/switch.c +++ b/common/switch.c @@ -98,7 +98,7 @@ DECLARE_HOOK(HOOK_INIT, switch_init, HOOK_PRIO_DEFAULT); void switch_interrupt(enum gpio_signal signal) { - hook_call_deferred(switch_update, 0); + hook_call_deferred(&switch_update_data, 0); } static int command_mmapinfo(int argc, char **argv) diff --git a/common/uart_buffering.c b/common/uart_buffering.c index 949c3968d6..c750a1ef6e 100644 --- a/common/uart_buffering.c +++ b/common/uart_buffering.c @@ -167,6 +167,9 @@ void uart_process_output(void) #ifdef CONFIG_UART_RX_DMA +void uart_process_input(void); +DECLARE_DEFERRED(uart_process_input); + void uart_process_input(void) { static int fast_rechecks; @@ -208,11 +211,11 @@ void uart_process_input(void) */ if (fast_rechecks) { fast_rechecks--; - hook_call_deferred(uart_process_input, RX_DMA_RECHECK_INTERVAL); + hook_call_deferred(&uart_process_input_data, + RX_DMA_RECHECK_INTERVAL); } } DECLARE_HOOK(HOOK_TICK, uart_process_input, HOOK_PRIO_DEFAULT); -DECLARE_DEFERRED(uart_process_input); #else /* !CONFIG_UART_RX_DMA */ diff --git a/common/usb_pd_policy.c b/common/usb_pd_policy.c index a071f8b767..074d07dc00 100644 --- a/common/usb_pd_policy.c +++ b/common/usb_pd_policy.c @@ -783,7 +783,7 @@ int pd_vdm(int port, int cnt, uint32_t *payload, uint32_t **rpayload) } #endif /* !CONFIG_USB_PD_CUSTOM_VDM */ -void pd_usb_billboard_deferred(void) +static void pd_usb_billboard_deferred(void) { #if defined(CONFIG_USB_PD_ALT_MODE) && !defined(CONFIG_USB_PD_ALT_MODE_DFP) \ && !defined(CONFIG_USB_PD_SIMPLE_DFP) && defined(CONFIG_USB_BOS) diff --git a/common/usb_pd_protocol.c b/common/usb_pd_protocol.c index e8540d9dca..276698710d 100644 --- a/common/usb_pd_protocol.c +++ b/common/usb_pd_protocol.c @@ -2095,9 +2095,8 @@ void pd_task(void) PD_FLAGS_DATA_SWAPPED; set_state(port, PD_STATE_SNK_DISCOVERY); timeout = 10*MSEC; - hook_call_deferred( - pd_usb_billboard_deferred, - PD_T_AME); + hook_call_deferred(&pd_usb_billboard_deferred_data, + PD_T_AME); break; case PD_STATE_SNK_HARD_RESET_RECOVER: if (pd[port].last_state != pd[port].task_state) diff --git a/common/vboot_hash.c b/common/vboot_hash.c index 01af769ebf..0a70b006b9 100644 --- a/common/vboot_hash.c +++ b/common/vboot_hash.c @@ -63,9 +63,10 @@ void vboot_hash_abort(void) } } -#ifndef CONFIG_MAPPED_STORAGE - static void vboot_hash_next_chunk(void); +DECLARE_DEFERRED(vboot_hash_next_chunk); + +#ifndef CONFIG_MAPPED_STORAGE static int read_and_hash_chunk(int offset, int size) { @@ -78,7 +79,8 @@ static int read_and_hash_chunk(int offset, int size) rv = shared_mem_acquire(size, &buf); if (rv == EC_ERROR_BUSY) { /* Couldn't update hash right now; try again later */ - hook_call_deferred(vboot_hash_next_chunk, WORK_INTERVAL_US); + hook_call_deferred(&vboot_hash_next_chunk_data, + WORK_INTERVAL_US); return rv; } else if (rv != EC_SUCCESS) { vboot_hash_abort(); @@ -138,9 +140,8 @@ static void vboot_hash_next_chunk(void) } /* If we're still here, more work to do; come back later */ - hook_call_deferred(vboot_hash_next_chunk, WORK_INTERVAL_US); + hook_call_deferred(&vboot_hash_next_chunk_data, WORK_INTERVAL_US); } -DECLARE_DEFERRED(vboot_hash_next_chunk); /** * Start computing a hash of <size> bytes of data at flash offset <offset>. @@ -178,7 +179,7 @@ static int vboot_hash_start(uint32_t offset, uint32_t size, if (nonce_size) SHA256_update(&ctx, nonce, nonce_size); - hook_call_deferred(vboot_hash_next_chunk, 0); + hook_call_deferred(&vboot_hash_next_chunk_data, 0); return EC_SUCCESS; } |