| /* SPDX-License-Identifier: GPL-2.0+ */ |
| /* |
| * Copyright (c) 2011 The Chromium OS Authors. |
| */ |
| |
| #ifndef __INITCALL_H |
| #define __INITCALL_H |
| |
| #include <asm/types.h> |
| #include <event.h> |
| |
| _Static_assert(EVT_COUNT < 256, "Can only support 256 event types with 8 bits"); |
| |
| /** |
| * init_fnc_t - Init function |
| * |
| * Return: 0 if OK -ve on error |
| */ |
| typedef int (*init_fnc_t)(void); |
| |
| /* Top bit indicates that the initcall is an event */ |
| #define INITCALL_IS_EVENT GENMASK(BITS_PER_LONG - 1, 8) |
| #define INITCALL_EVENT_TYPE GENMASK(7, 0) |
| |
| #define INITCALL_EVENT(_type) (void *)((_type) | INITCALL_IS_EVENT) |
| |
| /** |
| * initcall_run_list() - Run through a list of function calls |
| * |
| * This calls functions one after the other, stopping at the first error, or |
| * when NULL is obtained. |
| * |
| * @init_sequence: NULL-terminated init sequence to run |
| * Return: 0 if OK, or -ve error code from the first failure |
| */ |
| int initcall_run_list(const init_fnc_t init_sequence[]); |
| |
| /** |
| * initcall_manual_reloc() - Do manual relocation on an initcall sequence |
| * |
| * @init_sequence: NULL-terminated init sequence to relocate |
| */ |
| void initcall_manual_reloc(init_fnc_t init_sequence[]); |
| |
| #endif |