Files
OpenCellular/include/hooks.h
Randall Spangler e72788ef96 Hook functions no longer return values
Previously, all hook functions returned EC_SUCCESS, which was
meaningless because nothing ever looked at the return value.  Changing
the return value to void saves ~100 bytes of code size and an equal
amount of source code size.

BUG=none
BRANCH=none
TEST=code still builds; link still boots

Change-Id: I2a636339894e5a804831244967a9c9d134df7d13
Signed-off-by: Randall Spangler <rspangler@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/36372
2012-10-23 16:49:29 -07:00

83 lines
2.8 KiB
C

/* Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
/* System hooks for Chrome EC */
#ifndef __CROS_EC_HOOKS_H
#define __CROS_EC_HOOKS_H
#include "common.h"
enum hook_priority {
/* Generic values across all hooks */
HOOK_PRIO_FIRST = 1, /* Highest priority */
HOOK_PRIO_DEFAULT = 5000, /* Default priority */
HOOK_PRIO_LAST = 9999, /* Lowest priority */
/* Specific hook vales for HOOK_INIT */
/* LPC inits before modules which need memory-mapped I/O */
HOOK_PRIO_INIT_LPC = HOOK_PRIO_FIRST + 1,
/* Chipset inits before modules which need to know its initial state. */
HOOK_PRIO_INIT_CHIPSET = HOOK_PRIO_FIRST + 2,
};
enum hook_type {
HOOK_INIT = 0, /* System init */
HOOK_FREQ_CHANGE, /* System clock changed frequency */
HOOK_SYSJUMP, /* About to jump to another image. Modules
* which need to preserve data across such a
* jump should save it here and restore it in
* HOOK_INIT.
*
* NOTE: This hook is called with interrupts
* disabled! */
HOOK_CHIPSET_PRE_INIT, /* Initialization for components such as PMU to
* be done before host chipset/AP starts up. */
HOOK_CHIPSET_STARTUP, /* System is starting up. All suspend rails are
* now on. */
HOOK_CHIPSET_RESUME, /* System is resuming from suspend, or booting
* and has reached the point where all voltage
* rails are on */
HOOK_CHIPSET_SUSPEND, /* System is suspending, or shutting down; all
* voltage rails are still on */
HOOK_CHIPSET_SHUTDOWN, /* System is shutting down. All suspend rails
* are still on. */
HOOK_AC_CHANGE, /* AC power plugged in or removed */
HOOK_LID_CHANGE, /* Lid opened or closed. Based on debounced lid
* state, not raw lid GPIO input. */
};
struct hook_data {
/* Hook processing routine. */
void (*routine)(void);
/* Priority; low numbers = higher priority. */
int priority;
};
/**
* Call all the hook routines of a specified type.
*
* @param type Type of hook routines to call.
*/
void hook_notify(enum hook_type type);
/**
* Register a hook routine.
*
* @param hooktype Type of hook for routine (enum hook_type)
* @param routine Hook routine, with prototype void routine(void)
* @param priority Priority for determining when routine is called vs.
* other hook routines; should be between HOOK_PRIO_FIRST
* and HOOK_PRIO_LAST, and should be HOOK_PRIO_DEFAULT
* unless there's a compelling reason to care about the
* order in which hooks are called.
*/
#define DECLARE_HOOK(hooktype, routine, priority) \
const struct hook_data __hook_##hooktype##_##routine \
__attribute__((section(".rodata." #hooktype))) \
= {routine, priority}
#endif /* __CROS_EC_HOOKS_H */