32 lines
		
	
	
		
			705 B
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			32 lines
		
	
	
		
			705 B
		
	
	
	
		
			C
		
	
	
	
| #ifndef IORANGE_H
 | |
| #define IORANGE_H
 | |
| 
 | |
| #include <stdint.h>
 | |
| 
 | |
| typedef struct IORange IORange;
 | |
| typedef struct IORangeOps IORangeOps;
 | |
| 
 | |
| struct IORangeOps {
 | |
|     void (*read)(IORange *iorange, uint64_t offset, unsigned width,
 | |
|                  uint64_t *data);
 | |
|     void (*write)(IORange *iorange, uint64_t offset, unsigned width,
 | |
|                   uint64_t data);
 | |
|     void (*destructor)(IORange *iorange);
 | |
| };
 | |
| 
 | |
| struct IORange {
 | |
|     const IORangeOps *ops;
 | |
|     uint64_t base;
 | |
|     uint64_t len;
 | |
| };
 | |
| 
 | |
| static inline void iorange_init(IORange *iorange, const IORangeOps *ops,
 | |
|                                 uint64_t base, uint64_t len)
 | |
| {
 | |
|     iorange->ops = ops;
 | |
|     iorange->base = base;
 | |
|     iorange->len = len;
 | |
| }
 | |
| 
 | |
| #endif
 |