kolibrios-gitea/contrib/other/uarm/mem.h

39 lines
989 B
C
Raw Normal View History

#ifndef _MEM_H_
#define _MEM_H_
#include "types.h"
#define MAX_MEM_REGIONS 16
#define errPhysMemNoSuchRegion (errPhysMem + 1) //this physical address is not claimed by any region
#define errPhysMemInvalidAdr (errPhysMem + 2) //address is IN a region but access to it is not allowed (it doesn't exist really)
#define errPhysMemInvalidSize (errPhysMem + 3) //access that is not 1, 2 or 4-byte big
typedef Boolean (*ArmMemAccessF)(void* userData, UInt32 pa, UInt8 size, Boolean write, void* buf);
typedef struct{
UInt32 pa;
UInt32 sz;
ArmMemAccessF aF;
void* uD;
}ArmMemRegion;
typedef struct{
ArmMemRegion regions[MAX_MEM_REGIONS];
}ArmMem;
void memInit(ArmMem* mem);
void memDeinit(ArmMem* mem);
Boolean memRegionAdd(ArmMem* mem, UInt32 pa, UInt32 sz, ArmMemAccessF af, void* uD);
Boolean memRegionDel(ArmMem* mem, UInt32 pa, UInt32 sz);
Boolean memAccess(ArmMem* mem, UInt32 addr, UInt8 size, Boolean write, void* buf);
#endif