mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2025-12-27 18:25:05 +00:00
Prior x86 boards have had GPIO for toggling RCIN directly on the PCH, although many likely had HW-assisted methods as well. With eve we need to generate an eSPI Virtual Wire for RCIN, but in reality software control over RCIN Virtual Wire is not available with the npcx EC, so the legacy LPC interface for pulsing KBRST must be used instead as this is the only way to generate RCIN. This method will likely vary on different EC chips, but for skylake it can just be abstracted into the LPC module. BUG=chrome-os-partner:58666 BRANCH=none TEST=successful 'apreset warm' on eve EC console Change-Id: I7f9e7544a72877f75d05593b5e41f2f09a50e1c9 Signed-off-by: Duncan Laurie <dlaurie@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/400037 Reviewed-by: Mulin Chao <mlchao@nuvoton.com> Reviewed-by: Shawn N <shawnn@chromium.org>
131 lines
2.8 KiB
C
131 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.
|
|
*/
|
|
|
|
/* LPC module for Chrome EC */
|
|
|
|
#ifndef __CROS_EC_LPC_H
|
|
#define __CROS_EC_LPC_H
|
|
|
|
#include "common.h"
|
|
|
|
/**
|
|
* Return a pointer to the memory-mapped buffer.
|
|
*
|
|
* This buffer is writable at any time, and the host can read it at any time.
|
|
*/
|
|
uint8_t *lpc_get_memmap_range(void);
|
|
|
|
/**
|
|
* Return true if keyboard data is waiting for the host to read (TOH is still
|
|
* set).
|
|
*/
|
|
int lpc_keyboard_has_char(void);
|
|
|
|
/* Return true if the FRMH is still set */
|
|
int lpc_keyboard_input_pending(void);
|
|
|
|
/**
|
|
* Send a byte to host via keyboard port 0x60.
|
|
*
|
|
* @param chr Byte to send
|
|
* @param send_irq If non-zero, asserts IRQ
|
|
*/
|
|
void lpc_keyboard_put_char(uint8_t chr, int send_irq);
|
|
|
|
/**
|
|
* Clear the keyboard buffer.
|
|
*/
|
|
void lpc_keyboard_clear_buffer(void);
|
|
|
|
/**
|
|
* Send an IRQ to host if there is a byte in buffer already.
|
|
*/
|
|
void lpc_keyboard_resume_irq(void);
|
|
|
|
/**
|
|
* Return non-zero if the COMx interface has received a character.
|
|
*/
|
|
int lpc_comx_has_char(void);
|
|
|
|
/**
|
|
* Return the next character pending on the COMx interface.
|
|
*/
|
|
int lpc_comx_get_char(void);
|
|
|
|
/**
|
|
* Put a character to the COMx LPC interface.
|
|
*/
|
|
void lpc_comx_put_char(int c);
|
|
|
|
/*
|
|
* Low-level LPC interface for host events.
|
|
*
|
|
* For use by host_event_commands.c. Other modules should use the methods
|
|
* provided in host_command.h.
|
|
*/
|
|
|
|
/* Types of host events */
|
|
enum lpc_host_event_type {
|
|
LPC_HOST_EVENT_SMI = 0,
|
|
LPC_HOST_EVENT_SCI,
|
|
LPC_HOST_EVENT_WAKE,
|
|
};
|
|
|
|
/**
|
|
* Set the event state.
|
|
*/
|
|
void lpc_set_host_event_state(uint32_t mask);
|
|
|
|
/**
|
|
* Clear and return the lowest host event.
|
|
*/
|
|
int lpc_query_host_event_state(void);
|
|
|
|
/**
|
|
* Set the event mask for the specified event type.
|
|
*
|
|
* @param type Event type
|
|
* @param mask New event mask
|
|
*/
|
|
void lpc_set_host_event_mask(enum lpc_host_event_type type, uint32_t mask);
|
|
|
|
/**
|
|
* Return the event mask for the specified event type.
|
|
*/
|
|
uint32_t lpc_get_host_event_mask(enum lpc_host_event_type type);
|
|
|
|
/**
|
|
* Set the EC_LPC_STATUS_* mask for the specified status.
|
|
*/
|
|
void lpc_set_acpi_status_mask(uint8_t mask);
|
|
|
|
/**
|
|
* Clear the EC_LPC_STATUS_* mask for the specified status.
|
|
*/
|
|
void lpc_clear_acpi_status_mask(uint8_t mask);
|
|
|
|
/**
|
|
* Return the state of platform reset.
|
|
*
|
|
* @return non-zero if PLTRST# is asserted (low); 0 if not asserted (high).
|
|
*/
|
|
int lpc_get_pltrst_asserted(void);
|
|
|
|
/**
|
|
* Reset the host with KBRST# or RCIN#
|
|
*/
|
|
void lpc_host_reset(void);
|
|
|
|
/* Disable LPC ACPI interrupts */
|
|
void lpc_disable_acpi_interrupts(void);
|
|
|
|
/* Enable LPC ACPI interrupts */
|
|
void lpc_enable_acpi_interrupts(void);
|
|
|
|
void lpc_enable_wake_mask_for_lid_open(void);
|
|
|
|
void lpc_disable_wake_mask_for_lid_open(void);
|
|
#endif /* __CROS_EC_LPC_H */
|