Files
system76-embedded-controller/src/ec/ite/espi.c
2023-04-03 13:06:16 -06:00

69 lines
2.4 KiB
C

// SPDX-License-Identifier: GPL-3.0-only
#include <ec/espi.h>
#if CONFIG_EC_ITE_IT5570E
// Not all wires are defined or implemented
// Index 2 - AP to EC
struct VirtualWire __code VW_SLP_S3_N = VIRTUAL_WIRE(2, 0);
struct VirtualWire __code VW_SLP_S4_N = VIRTUAL_WIRE(2, 1);
struct VirtualWire __code VW_SLP_S5_N = VIRTUAL_WIRE(2, 2);
// Index 3 - AP to EC
struct VirtualWire __code VW_SUS_STAT_N = VIRTUAL_WIRE(3, 0);
struct VirtualWire __code VW_PLTRST_N = VIRTUAL_WIRE(3, 1);
struct VirtualWire __code VW_OOB_RST_WARN = VIRTUAL_WIRE(3, 2);
// Index 4 - EC to AP
struct VirtualWire __code VW_OOB_RST_ACK = VIRTUAL_WIRE(4, 0);
struct VirtualWire __code VW_WAKE_N = VIRTUAL_WIRE(4, 2);
struct VirtualWire __code VW_PME_N = VIRTUAL_WIRE(4, 3);
// Index 5 - EC to AP
struct VirtualWire __code VW_BOOT_LOAD_DONE = VIRTUAL_WIRE(5, 0);
struct VirtualWire __code VW_ERROR_FATAL = VIRTUAL_WIRE(5, 1);
struct VirtualWire __code VW_ERROR_NONFATAL = VIRTUAL_WIRE(5, 2);
struct VirtualWire __code VW_BOOT_LOAD_STATUS = VIRTUAL_WIRE(5, 3);
// Index 6 - EC to AP
struct VirtualWire __code VW_SCI_N = VIRTUAL_WIRE(6, 0);
struct VirtualWire __code VW_SMI_N = VIRTUAL_WIRE(6, 1);
struct VirtualWire __code VW_RCIN_N = VIRTUAL_WIRE(6, 2);
struct VirtualWire __code VW_HOST_RST_ACK = VIRTUAL_WIRE(6, 3);
// Index 7 - AP to EC
struct VirtualWire __code VW_HOST_RST_WARN = VIRTUAL_WIRE(7, 0);
// Index 40 - EC to AP (platform specific)
struct VirtualWire __code VW_SUS_ACK_N = VIRTUAL_WIRE(40, 0);
// Index 41 - AP to EC (platform specific)
struct VirtualWire __code VW_SUS_WARN_N = VIRTUAL_WIRE(41, 0);
struct VirtualWire __code VW_SUS_PWRDN_ACK = VIRTUAL_WIRE(41, 1);
// Index 47 - AP to EC (platform specific)
struct VirtualWire __code VW_HOST_C10 = VIRTUAL_WIRE(47, 0);
enum VirtualWireState vw_get(struct VirtualWire *vw) __critical {
uint8_t index = *vw->index;
switch ((index >> vw->shift) & VWS_HIGH) {
case VWS_LOW:
return VWS_LOW;
case VWS_HIGH:
return VWS_HIGH;
default:
return VWS_INVALID;
}
}
void vw_set(struct VirtualWire *vw, enum VirtualWireState state) __critical {
uint8_t index = *vw->index;
index &= ~(VWS_HIGH << vw->shift);
switch (state) {
case VWS_LOW:
index |= VWS_LOW << vw->shift;
break;
case VWS_HIGH:
index |= VWS_HIGH << vw->shift;
break;
default:
break;
}
*vw->index = index;
}
#endif // CONFIG_EC_ITE_IT5570E