linux/include/xen/interface/io/tpmif.h
<<
>>
Prefs
   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
  53