53 lines
		
	
	
	
		
			1.7 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			53 lines
		
	
	
	
		
			1.7 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
|   | /******************************************************************************
 | ||
|  |  * tpmif.h | ||
|  |  * | ||
|  |  * TPM I/O interface for Xen guest OSes, v2 | ||
|  |  * | ||
|  |  * This file is in the public domain. | ||
|  |  * | ||
|  |  */ | ||
|  | 
 | ||
|  | #ifndef __XEN_PUBLIC_IO_TPMIF_H__
 | ||
|  | #define __XEN_PUBLIC_IO_TPMIF_H__
 | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * Xenbus state machine | ||
|  |  * | ||
|  |  * Device open: | ||
|  |  *   1. Both ends start in XenbusStateInitialising | ||
|  |  *   2. Backend transitions to InitWait (frontend does not wait on this step) | ||
|  |  *   3. Frontend populates ring-ref, event-channel, feature-protocol-v2 | ||
|  |  *   4. Frontend transitions to Initialised | ||
|  |  *   5. Backend maps grant and event channel, verifies feature-protocol-v2 | ||
|  |  *   6. Backend transitions to Connected | ||
|  |  *   7. Frontend verifies feature-protocol-v2, transitions to Connected | ||
|  |  * | ||
|  |  * Device close: | ||
|  |  *   1. State is changed to XenbusStateClosing | ||
|  |  *   2. Frontend transitions to Closed | ||
|  |  *   3. Backend unmaps grant and event, changes state to InitWait | ||
|  |  */ | ||
|  | 
 | ||
|  | enum vtpm_shared_page_state { | ||
|  | 	VTPM_STATE_IDLE,         /* no contents / vTPM idle / cancel complete */ | ||
|  | 	VTPM_STATE_SUBMIT,       /* request ready / vTPM working */ | ||
|  | 	VTPM_STATE_FINISH,       /* response ready / vTPM idle */ | ||
|  | 	VTPM_STATE_CANCEL,       /* cancel requested / vTPM working */ | ||
|  | }; | ||
|  | /* The backend should only change state to IDLE or FINISH, while the
 | ||
|  |  * frontend should only change to SUBMIT or CANCEL. */ | ||
|  | 
 | ||
|  | 
 | ||
|  | struct vtpm_shared_page { | ||
|  | 	uint32_t length;         /* request/response length in bytes */ | ||
|  | 
 | ||
|  | 	uint8_t state;           /* enum vtpm_shared_page_state */ | ||
|  | 	uint8_t locality;        /* for the current request */ | ||
|  | 	uint8_t pad; | ||
|  | 
 | ||
|  | 	uint8_t nr_extra_pages;  /* extra pages for long packets; may be zero */ | ||
|  | 	uint32_t extra_pages[0]; /* grant IDs; length in nr_extra_pages */ | ||
|  | }; | ||
|  | 
 | ||
|  | #endif
 |