summaryrefslogtreecommitdiff
path: root/include/espi.h
blob: d1b8af34257de4b3b149bfba6a69b8933ec96e88 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
/* 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 */