chrome-ec/board/host/chipset.c

71 lines
1.4 KiB
C

/* Copyright 2013 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 emulator */
#include <stdio.h>
#include "chipset.h"
#include "common.h"
#include "hooks.h"
#include "task.h"
#include "test_util.h"
static int chipset_state = CHIPSET_STATE_SOFT_OFF;
static int power_on_req;
static int power_off_req;
test_mockable void chipset_reset(enum chipset_reset_reason reason)
{
fprintf(stderr, "Chipset reset: %d!\n", reason);
}
test_mockable void chipset_throttle_cpu(int throttle)
{
/* Do nothing */
}
test_mockable void chipset_force_shutdown(enum chipset_shutdown_reason reason)
{
/* Do nothing */
}
test_mockable int chipset_in_state(int state_mask)
{
return state_mask & chipset_state;
}
void test_chipset_on(void)
{
if (chipset_in_state(CHIPSET_STATE_ON))
return;
power_on_req = 1;
task_wake(TASK_ID_CHIPSET);
}
void test_chipset_off(void)
{
if (chipset_in_state(CHIPSET_STATE_ANY_OFF))
return;
power_off_req = 1;
task_wake(TASK_ID_CHIPSET);
}
test_mockable void chipset_task(void)
{
while (1) {
while (!power_on_req)
task_wait_event(-1);
power_on_req = 0;
hook_notify(HOOK_CHIPSET_PRE_INIT);
chipset_state = CHIPSET_STATE_ON;
hook_notify(HOOK_CHIPSET_STARTUP);
while (!power_off_req)
task_wait_event(-1);
power_off_req = 0;
chipset_state = CHIPSET_STATE_SOFT_OFF;
hook_notify(HOOK_CHIPSET_SHUTDOWN);
}
}