mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-09-04 20:19:47 +08:00 
			
		
		
		
	 e2683957fb
			
		
	
	
		e2683957fb
		
	
	
	
	
		
			
			This is a complete rewrite of the Xen TPM frontend driver, taking advantage of a simplified frontend/backend interface and adding support for cancellation and timeouts. The backend for this driver is provided by a vTPM stub domain using the interface in Xen 4.3. Signed-off-by: Daniel De Graaf <dgdegra@tycho.nsa.gov> Acked-by: Matthew Fioravante <matthew.fioravante@jhuapl.edu> Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> Acked-by: Peter Huewe <peterhuewe@gmx.de> Reviewed-by: Peter Huewe <peterhuewe@gmx.de> Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
		
			
				
	
	
		
			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
 |