blob: 4b91a6e57f40ab3e809839a9725fce2c4d730940 [file] [log] [blame]
/* 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.
*/
/*
* Chipset module for Chrome EC.
*
* This is intended to be a platform/chipset-neutral interface, implemented by
* all main chipsets (x86, gaia, etc.).
*/
#ifndef __CROS_EC_CHIPSET_H
#define __CROS_EC_CHIPSET_H
#include "common.h"
#include "gpio.h"
/*
* Chipset state mask
*
* Note that this is a non-exhaustive list of states which the main chipset can
* be in, and is potentially one-to-many for real, underlying chipset states.
* That's why chipset_in_state() asks "Is the chipset in something
* approximating this state?" and not "Tell me what state the chipset is in and
* I'll compare it myself with the state(s) I want."
*/
enum chipset_state_mask {
CHIPSET_STATE_HARD_OFF = 0x01, /* Hard off (G3) */
CHIPSET_STATE_SOFT_OFF = 0x02, /* Soft off (S5) */
CHIPSET_STATE_SUSPEND = 0x04, /* Suspend (S3) */
CHIPSET_STATE_ON = 0x08, /* On (S0) */
CHIPSET_STATE_STANDBY = 0x10, /* Standby (S0ix) */
/* Common combinations */
CHIPSET_STATE_ANY_OFF = (CHIPSET_STATE_HARD_OFF |
CHIPSET_STATE_SOFT_OFF), /* Any off state */
};
#ifdef HAS_TASK_CHIPSET
/**
* Check if chipset is in a given state.
*
* @param state_mask Combination of one or more CHIPSET_STATE_* flags.
*
* @return non-zero if the chipset is in one of the states specified in the
* mask.
*/
int chipset_in_state(int state_mask);
/**
* Ask the chipset to exit the hard off state.
*
* Does nothing if the chipset has already left the state, or was not in the
* state to begin with.
*/
void chipset_exit_hard_off(void);
/* This is a private chipset-specific implementation for use only by
* throttle_ap() . Don't call this directly!
*/
void chipset_throttle_cpu(int throttle);
/**
* Immediately shut off power to main processor and chipset.
*
* This is intended for use when the system is too hot or battery power is
* critical.
*/
void chipset_force_shutdown(void);
/**
* Reset the CPU and/or chipset.
*
* @param cold_reset If !=0, force a cold reset of the CPU and chipset;
* if 0, just pulse the reset line to the CPU.
*/
void chipset_reset(int cold_reset);
/**
* Interrupt handler to power GPIO inputs.
*/
void power_interrupt(enum gpio_signal signal);
#else /* !HAS_TASK_CHIPSET */
/*
* Allow other modules to compile if the chipset module is disabled. This is
* commonly done during early stages of board bringup.
*/
static inline int chipset_in_state(int state_mask)
{
return 0;
}
static inline void chipset_exit_hard_off(void) { }
static inline void chipset_throttle_cpu(int throttle) { }
static inline void chipset_force_shutdown(void) { }
static inline void chipset_reset(int cold_reset) { }
static inline void power_interrupt(enum gpio_signal signal) { }
#endif /* !HAS_TASK_CHIPSET */
#endif /* __CROS_EC_CHIPSET_H */