text: /* Copyright 2016 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.
   */
  
  /* eSPI module for Chrome EC */
  
  #ifndef __CROS_EC_ESPI_H
  #define __CROS_EC_ESPI_H
  
  #include "gpio_signal.h"
  
  /* Signal through VW */
  enum espi_vw_signal {
  	/* The first valid VW signal is 0x2000 */
  	VW_SIGNAL_START = IOEX_LIMIT + 1,
  	VW_SLP_S3_L = VW_SIGNAL_START,	/* index 02h (In)  */
  	VW_SLP_S4_L,
  	VW_SLP_S5_L,
  	VW_SUS_STAT_L,			/* index 03h (In)  */
  	VW_PLTRST_L,
  	VW_OOB_RST_WARN,
  	VW_OOB_RST_ACK,			/* index 04h (Out) */
  	VW_WAKE_L,
  	VW_PME_L,
  	VW_ERROR_FATAL,			/* index 05h (Out) */
  	VW_ERROR_NON_FATAL,
  	/* Merge bit 3/0 into one signal. Need to set them simultaneously */
  	VW_PERIPHERAL_BTLD_STATUS_DONE,
  	VW_SCI_L,			/* index 06h (Out) */
  	VW_SMI_L,
  	VW_RCIN_L,
  	VW_HOST_RST_ACK,
  	VW_HOST_RST_WARN,		/* index 07h (In)  */
  	VW_SUS_ACK,			/* index 40h (Out) */
  	VW_SUS_WARN_L,			/* index 41h (In)  */
  	VW_SUS_PWRDN_ACK_L,
  	VW_SLP_A_L,
  	VW_SLP_LAN,                     /* index 42h (In)  */
  	VW_SLP_WLAN,
  	VW_SIGNAL_END,
  	VW_LIMIT = 0x2FFF
  };
  BUILD_ASSERT(VW_SIGNAL_END < VW_LIMIT);
  
  #define VW_SIGNAL_COUNT (VW_SIGNAL_END - VW_SIGNAL_START)
  
  /**
   * Set eSPI Virtual-Wire signal to Host
   *
   * @param signal vw signal needs to set
   * @param level  level of vw signal
   * @return EC_SUCCESS, or non-zero if error.
   */
  int espi_vw_set_wire(enum espi_vw_signal signal, uint8_t level);
  
  /**
   * Get eSPI Virtual-Wire signal from host
   *
   * @param signal vw signal needs to get
   * @return      1: set by host, otherwise: no signal
   */
  int espi_vw_get_wire(enum espi_vw_signal signal);
  
  /**
   * Enable VW interrupt of power sequence signal
   *
   * @param signal vw signal needs to enable interrupt
   * @return EC_SUCCESS, or non-zero if error.
   */
  int espi_vw_enable_wire_int(enum espi_vw_signal signal);
  
  /**
   * Disable VW interrupt of power sequence signal
   *
   * @param signal vw signal needs to disable interrupt
   * @return EC_SUCCESS, or non-zero if error.
   */
  int espi_vw_disable_wire_int(enum espi_vw_signal signal);
  
  /**
   * Return pointer to constant eSPI virtual wire signal name
   *
   * @param signal virtual wire enum
   * @return pointer to string or NULL if signal out of range
   */
  const char *espi_vw_get_wire_name(enum espi_vw_signal signal);
  
  /**
   * Check if signal is an eSPI virtual wire
   * @param signal is gpio_signal or espi_vw_signal enum casted to int
   * @return 1 if signal is virtual wire else returns 0.
   */
  int espi_signal_is_vw(int signal);
  
  
  #endif  /* __CROS_EC_ESPI_H */
  