text: #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
  