cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

olpc-ec.h (2000B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2#ifndef _LINUX_OLPC_EC_H
      3#define _LINUX_OLPC_EC_H
      4
      5#include <linux/bits.h>
      6
      7/* XO-1 EC commands */
      8#define EC_FIRMWARE_REV			0x08
      9#define EC_WRITE_SCI_MASK		0x1b
     10#define EC_WAKE_UP_WLAN			0x24
     11#define EC_WLAN_LEAVE_RESET		0x25
     12#define EC_DCON_POWER_MODE		0x26
     13#define EC_READ_EB_MODE			0x2a
     14#define EC_SET_SCI_INHIBIT		0x32
     15#define EC_SET_SCI_INHIBIT_RELEASE	0x34
     16#define EC_WLAN_ENTER_RESET		0x35
     17#define EC_WRITE_EXT_SCI_MASK		0x38
     18#define EC_SCI_QUERY			0x84
     19#define EC_EXT_SCI_QUERY		0x85
     20
     21/* SCI source values */
     22#define EC_SCI_SRC_GAME         BIT(0)
     23#define EC_SCI_SRC_BATTERY      BIT(1)
     24#define EC_SCI_SRC_BATSOC       BIT(2)
     25#define EC_SCI_SRC_BATERR       BIT(3)
     26#define EC_SCI_SRC_EBOOK        BIT(4)    /* XO-1 only */
     27#define EC_SCI_SRC_WLAN         BIT(5)    /* XO-1 only */
     28#define EC_SCI_SRC_ACPWR        BIT(6)
     29#define EC_SCI_SRC_BATCRIT      BIT(7)
     30#define EC_SCI_SRC_GPWAKE       BIT(8)   /* XO-1.5 only */
     31#define EC_SCI_SRC_ALL          GENMASK(8, 0)
     32
     33struct platform_device;
     34
     35struct olpc_ec_driver {
     36	int (*suspend)(struct platform_device *);
     37	int (*resume)(struct platform_device *);
     38
     39	int (*ec_cmd)(u8, u8 *, size_t, u8 *, size_t, void *);
     40
     41	bool wakeup_available;
     42};
     43
     44#ifdef CONFIG_OLPC_EC
     45
     46extern void olpc_ec_driver_register(struct olpc_ec_driver *drv, void *arg);
     47
     48extern int olpc_ec_cmd(u8 cmd, u8 *inbuf, size_t inlen, u8 *outbuf,
     49		size_t outlen);
     50
     51extern void olpc_ec_wakeup_set(u16 value);
     52extern void olpc_ec_wakeup_clear(u16 value);
     53
     54extern int olpc_ec_mask_write(u16 bits);
     55extern int olpc_ec_sci_query(u16 *sci_value);
     56
     57extern bool olpc_ec_wakeup_available(void);
     58
     59#else
     60
     61static inline int olpc_ec_cmd(u8 cmd, u8 *inbuf, size_t inlen, u8 *outbuf,
     62		size_t outlen) { return -ENODEV; }
     63
     64static inline void olpc_ec_wakeup_set(u16 value) { }
     65static inline void olpc_ec_wakeup_clear(u16 value) { }
     66
     67static inline bool olpc_ec_wakeup_available(void)
     68{
     69	return false;
     70}
     71
     72#endif /* CONFIG_OLPC_EC */
     73
     74#endif /* _LINUX_OLPC_EC_H */