|  | @@ -30,6 +30,7 @@ FILE_LICENCE ( GPL2_OR_LATER );
 | 
		
	
		
			
			| 30 | 30 |  #include <ipxe/iobuf.h>
 | 
		
	
		
			
			| 31 | 31 |  #include <ipxe/malloc.h>
 | 
		
	
		
			
			| 32 | 32 |  #include <ipxe/pci.h>
 | 
		
	
		
			
			|  | 33 | +#include <ipxe/profile.h>
 | 
		
	
		
			
			| 33 | 34 |  #include "intel.h"
 | 
		
	
		
			
			| 34 | 35 |  
 | 
		
	
		
			
			| 35 | 36 |  /** @file
 | 
		
	
	
		
			
			|  | @@ -38,6 +39,18 @@ FILE_LICENCE ( GPL2_OR_LATER );
 | 
		
	
		
			
			| 38 | 39 |   *
 | 
		
	
		
			
			| 39 | 40 |   */
 | 
		
	
		
			
			| 40 | 41 |  
 | 
		
	
		
			
			|  | 42 | +/** VM transmit profiler */
 | 
		
	
		
			
			|  | 43 | +static struct profiler intel_vm_tx_profiler __profiler =
 | 
		
	
		
			
			|  | 44 | +	{ .name = "intel.vm_tx" };
 | 
		
	
		
			
			|  | 45 | +
 | 
		
	
		
			
			|  | 46 | +/** VM receive refill profiler */
 | 
		
	
		
			
			|  | 47 | +static struct profiler intel_vm_refill_profiler __profiler =
 | 
		
	
		
			
			|  | 48 | +	{ .name = "intel.vm_refill" };
 | 
		
	
		
			
			|  | 49 | +
 | 
		
	
		
			
			|  | 50 | +/** VM poll profiler */
 | 
		
	
		
			
			|  | 51 | +static struct profiler intel_vm_poll_profiler __profiler =
 | 
		
	
		
			
			|  | 52 | +	{ .name = "intel.vm_poll" };
 | 
		
	
		
			
			|  | 53 | +
 | 
		
	
		
			
			| 41 | 54 |  /******************************************************************************
 | 
		
	
		
			
			| 42 | 55 |   *
 | 
		
	
		
			
			| 43 | 56 |   * EEPROM interface
 | 
		
	
	
		
			
			|  | @@ -471,7 +484,9 @@ void intel_refill_rx ( struct intel_nic *intel ) {
 | 
		
	
		
			
			| 471 | 484 |  		intel->rx_iobuf[rx_idx] = iobuf;
 | 
		
	
		
			
			| 472 | 485 |  
 | 
		
	
		
			
			| 473 | 486 |  		/* Push descriptor to card */
 | 
		
	
		
			
			|  | 487 | +		profile_start ( &intel_vm_refill_profiler );
 | 
		
	
		
			
			| 474 | 488 |  		writel ( rx_tail, intel->regs + intel->rx.reg + INTEL_xDT );
 | 
		
	
		
			
			|  | 489 | +		profile_stop ( &intel_vm_refill_profiler );
 | 
		
	
		
			
			| 475 | 490 |  
 | 
		
	
		
			
			| 476 | 491 |  		DBGC2 ( intel, "INTEL %p RX %d is [%llx,%llx)\n", intel, rx_idx,
 | 
		
	
		
			
			| 477 | 492 |  			( ( unsigned long long ) address ),
 | 
		
	
	
		
			
			|  | @@ -611,7 +626,9 @@ int intel_transmit ( struct net_device *netdev, struct io_buffer *iobuf ) {
 | 
		
	
		
			
			| 611 | 626 |  	wmb();
 | 
		
	
		
			
			| 612 | 627 |  
 | 
		
	
		
			
			| 613 | 628 |  	/* Notify card that there are packets ready to transmit */
 | 
		
	
		
			
			|  | 629 | +	profile_start ( &intel_vm_tx_profiler );
 | 
		
	
		
			
			| 614 | 630 |  	writel ( tx_tail, intel->regs + intel->tx.reg + INTEL_xDT );
 | 
		
	
		
			
			|  | 631 | +	profile_stop ( &intel_vm_tx_profiler );
 | 
		
	
		
			
			| 615 | 632 |  
 | 
		
	
		
			
			| 616 | 633 |  	DBGC2 ( intel, "INTEL %p TX %d is [%llx,%llx)\n", intel, tx_idx,
 | 
		
	
		
			
			| 617 | 634 |  		( ( unsigned long long ) address ),
 | 
		
	
	
		
			
			|  | @@ -703,7 +720,9 @@ static void intel_poll ( struct net_device *netdev ) {
 | 
		
	
		
			
			| 703 | 720 |  	uint32_t icr;
 | 
		
	
		
			
			| 704 | 721 |  
 | 
		
	
		
			
			| 705 | 722 |  	/* Check for and acknowledge interrupts */
 | 
		
	
		
			
			|  | 723 | +	profile_start ( &intel_vm_poll_profiler );
 | 
		
	
		
			
			| 706 | 724 |  	icr = readl ( intel->regs + INTEL_ICR );
 | 
		
	
		
			
			|  | 725 | +	profile_stop ( &intel_vm_poll_profiler );
 | 
		
	
		
			
			| 707 | 726 |  	if ( ! icr )
 | 
		
	
		
			
			| 708 | 727 |  		return;
 | 
		
	
		
			
			| 709 | 728 |  
 |