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
 |