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

hvsi.h (2850B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2#ifndef _HVSI_H
      3#define _HVSI_H
      4
      5#define VS_DATA_PACKET_HEADER           0xff
      6#define VS_CONTROL_PACKET_HEADER        0xfe
      7#define VS_QUERY_PACKET_HEADER          0xfd
      8#define VS_QUERY_RESPONSE_PACKET_HEADER 0xfc
      9
     10/* control verbs */
     11#define VSV_SET_MODEM_CTL    1 /* to service processor only */
     12#define VSV_MODEM_CTL_UPDATE 2 /* from service processor only */
     13#define VSV_CLOSE_PROTOCOL   3
     14
     15/* query verbs */
     16#define VSV_SEND_VERSION_NUMBER 1
     17#define VSV_SEND_MODEM_CTL_STATUS 2
     18
     19/* yes, these masks are not consecutive. */
     20#define HVSI_TSDTR 0x01
     21#define HVSI_TSCD  0x20
     22
     23#define HVSI_MAX_OUTGOING_DATA 12
     24#define HVSI_VERSION 1
     25
     26struct hvsi_header {
     27	uint8_t  type;
     28	uint8_t  len;
     29	__be16 seqno;
     30} __attribute__((packed));
     31
     32struct hvsi_data {
     33	struct hvsi_header hdr;
     34	uint8_t  data[HVSI_MAX_OUTGOING_DATA];
     35} __attribute__((packed));
     36
     37struct hvsi_control {
     38	struct hvsi_header hdr;
     39	__be16 verb;
     40	/* optional depending on verb: */
     41	__be32 word;
     42	__be32 mask;
     43} __attribute__((packed));
     44
     45struct hvsi_query {
     46	struct hvsi_header hdr;
     47	__be16 verb;
     48} __attribute__((packed));
     49
     50struct hvsi_query_response {
     51	struct hvsi_header hdr;
     52	__be16 verb;
     53	__be16 query_seqno;
     54	union {
     55		uint8_t  version;
     56		__be32 mctrl_word;
     57	} u;
     58} __attribute__((packed));
     59
     60/* hvsi lib struct definitions */
     61#define HVSI_INBUF_SIZE		255
     62struct tty_struct;
     63struct hvsi_priv {
     64	unsigned int	inbuf_len;	/* data in input buffer */
     65	unsigned char	inbuf[HVSI_INBUF_SIZE];
     66	unsigned int	inbuf_cur;	/* Cursor in input buffer */
     67	unsigned int	inbuf_pktlen;	/* packet length from cursor */
     68	atomic_t	seqno;		/* packet sequence number */
     69	unsigned int	opened:1;	/* driver opened */
     70	unsigned int	established:1;	/* protocol established */
     71	unsigned int 	is_console:1;	/* used as a kernel console device */
     72	unsigned int	mctrl_update:1;	/* modem control updated */
     73	unsigned short	mctrl;		/* modem control */
     74	struct tty_struct *tty;		/* tty structure */
     75	int (*get_chars)(uint32_t termno, char *buf, int count);
     76	int (*put_chars)(uint32_t termno, const char *buf, int count);
     77	uint32_t	termno;
     78};
     79
     80/* hvsi lib functions */
     81struct hvc_struct;
     82extern void hvsilib_init(struct hvsi_priv *pv,
     83			 int (*get_chars)(uint32_t termno, char *buf, int count),
     84			 int (*put_chars)(uint32_t termno, const char *buf,
     85					  int count),
     86			 int termno, int is_console);
     87extern int hvsilib_open(struct hvsi_priv *pv, struct hvc_struct *hp);
     88extern void hvsilib_close(struct hvsi_priv *pv, struct hvc_struct *hp);
     89extern int hvsilib_read_mctrl(struct hvsi_priv *pv);
     90extern int hvsilib_write_mctrl(struct hvsi_priv *pv, int dtr);
     91extern void hvsilib_establish(struct hvsi_priv *pv);
     92extern int hvsilib_get_chars(struct hvsi_priv *pv, char *buf, int count);
     93extern int hvsilib_put_chars(struct hvsi_priv *pv, const char *buf, int count);
     94
     95#endif /* _HVSI_H */