1 #ifndef _IPXE_FAULT_H
2 #define _IPXE_FAULT_H
3 
4 /** @file
5  *
6  * Fault injection
7  *
8  */
9 
10 FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
11 
12 #include <stdint.h>
13 #include <config/fault.h>
14 
15 extern int inject_fault_nonzero ( unsigned int rate );
16 extern void inject_corruption_nonzero ( unsigned int rate, const void *data,
17 					size_t len );
18 
19 /**
20  * Inject fault with a specified probability
21  *
22  * @v rate		Reciprocal of fault probability (zero for no faults)
23  * @ret rc		Return status code
24  */
25 static inline __attribute__ (( always_inline )) int
inject_fault(unsigned int rate)26 inject_fault ( unsigned int rate ) {
27 
28 	/* Force dead code elimination in non-fault-injecting builds */
29 	if ( rate == 0 )
30 		return 0;
31 
32 	return inject_fault_nonzero ( rate );
33 }
34 
35 /**
36  * Corrupt data with a specified probability
37  *
38  * @v rate		Reciprocal of fault probability (zero for no faults)
39  * @v data		Data
40  * @v len		Length of data
41  * @ret rc		Return status code
42  */
43 static inline __attribute__ (( always_inline )) void
inject_corruption(unsigned int rate,const void * data,size_t len)44 inject_corruption ( unsigned int rate, const void *data, size_t len ) {
45 
46 	/* Force dead code elimination in non-fault-injecting builds */
47 	if ( rate == 0 )
48 		return;
49 
50 	return inject_corruption_nonzero ( rate, data, len );
51 }
52 
53 #endif /* _IPXE_FAULT_H */
54