forked from mirrors/linux
		
	 40b0425f8b
			
		
	
	
		40b0425f8b
		
	
	
	
	
		
			
			There are several cases where virtual net devices may benefit from having a PTP clock, and these have to do with testing. I can see at least netdevsim and veth as potential users of a common mock-up PTP hardware clock driver. The proposed idea is to create an object which emulates PTP clock operations on top of the unadjustable CLOCK_MONOTONIC_RAW plus a software-controlled time domain via a timecounter/cyclecounter and then link that PHC to the netdevsim device. The driver is fully functional for its intended purpose, and it successfully passes the PTP selftests. $ cd tools/testing/selftests/ptp/ $ ./phc.sh /dev/ptp2 TEST: settime [ OK ] TEST: adjtime [ OK ] TEST: adjfreq [ OK ] Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com> Link: https://lore.kernel.org/r/20230807193324.4128292-7-vladimir.oltean@nxp.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
		
			
				
	
	
		
			38 lines
		
	
	
	
		
			670 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			38 lines
		
	
	
	
		
			670 B
		
	
	
	
		
			C
		
	
	
	
	
	
| /* SPDX-License-Identifier: GPL-2.0-or-later */
 | |
| /*
 | |
|  * Mock-up PTP Hardware Clock driver for virtual network devices
 | |
|  *
 | |
|  * Copyright 2023 NXP
 | |
|  */
 | |
| 
 | |
| #ifndef _PTP_MOCK_H_
 | |
| #define _PTP_MOCK_H_
 | |
| 
 | |
| struct device;
 | |
| struct mock_phc;
 | |
| 
 | |
| #if IS_ENABLED(CONFIG_PTP_1588_CLOCK_MOCK)
 | |
| 
 | |
| struct mock_phc *mock_phc_create(struct device *dev);
 | |
| void mock_phc_destroy(struct mock_phc *phc);
 | |
| int mock_phc_index(struct mock_phc *phc);
 | |
| 
 | |
| #else
 | |
| 
 | |
| static inline struct mock_phc *mock_phc_create(struct device *dev)
 | |
| {
 | |
| 	return NULL;
 | |
| }
 | |
| 
 | |
| static inline void mock_phc_destroy(struct mock_phc *phc)
 | |
| {
 | |
| }
 | |
| 
 | |
| static inline int mock_phc_index(struct mock_phc *phc)
 | |
| {
 | |
| 	return -1;
 | |
| }
 | |
| 
 | |
| #endif
 | |
| 
 | |
| #endif /* _PTP_MOCK_H_ */
 |