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

tpmif.h (1704B)


      1/******************************************************************************
      2 * tpmif.h
      3 *
      4 * TPM I/O interface for Xen guest OSes, v2
      5 *
      6 * This file is in the public domain.
      7 *
      8 */
      9
     10#ifndef __XEN_PUBLIC_IO_TPMIF_H__
     11#define __XEN_PUBLIC_IO_TPMIF_H__
     12
     13/*
     14 * Xenbus state machine
     15 *
     16 * Device open:
     17 *   1. Both ends start in XenbusStateInitialising
     18 *   2. Backend transitions to InitWait (frontend does not wait on this step)
     19 *   3. Frontend populates ring-ref, event-channel, feature-protocol-v2
     20 *   4. Frontend transitions to Initialised
     21 *   5. Backend maps grant and event channel, verifies feature-protocol-v2
     22 *   6. Backend transitions to Connected
     23 *   7. Frontend verifies feature-protocol-v2, transitions to Connected
     24 *
     25 * Device close:
     26 *   1. State is changed to XenbusStateClosing
     27 *   2. Frontend transitions to Closed
     28 *   3. Backend unmaps grant and event, changes state to InitWait
     29 */
     30
     31enum vtpm_shared_page_state {
     32	VTPM_STATE_IDLE,         /* no contents / vTPM idle / cancel complete */
     33	VTPM_STATE_SUBMIT,       /* request ready / vTPM working */
     34	VTPM_STATE_FINISH,       /* response ready / vTPM idle */
     35	VTPM_STATE_CANCEL,       /* cancel requested / vTPM working */
     36};
     37/* The backend should only change state to IDLE or FINISH, while the
     38 * frontend should only change to SUBMIT or CANCEL. */
     39
     40
     41struct vtpm_shared_page {
     42	uint32_t length;         /* request/response length in bytes */
     43
     44	uint8_t state;           /* enum vtpm_shared_page_state */
     45	uint8_t locality;        /* for the current request */
     46	uint8_t pad;
     47
     48	uint8_t nr_extra_pages;  /* extra pages for long packets; may be zero */
     49	uint32_t extra_pages[]; /* grant IDs; length in nr_extra_pages */
     50};
     51
     52#endif