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
							 |