/* Memory.h - Memory mappings and remapping functions declarations */ /* Copyright - Galileo technology. */ #ifndef __INCmemoryh #define __INCmemoryh /* includes */ #include "core.h" /* defines */ #define DONT_MODIFY 0xffffffff #define PARITY_SUPPORT 0x40000000 #define _8BIT 0x00000000 #define _16BIT 0x00100000 #define _32BIT 0x00200000 #define _64BIT 0x00300000 /* typedefs */ typedef struct deviceParam { /* boundary values */ unsigned int turnOff; /* 0x0 - 0xf */ unsigned int acc2First; /* 0x0 - 0x1f */ unsigned int acc2Next; /* 0x0 - 0x1f */ unsigned int ale2Wr; /* 0x0 - 0xf */ unsigned int wrLow; /* 0x0 - 0xf */ unsigned int wrHigh; /* 0x0 - 0xf */ unsigned int deviceWidth; /* in Bytes */ } DEVICE_PARAM; typedef enum __memBank{BANK0,BANK1,BANK2,BANK3} MEMORY_BANK; typedef enum __memDevice{DEVICE0,DEVICE1,DEVICE2,DEVICE3,BOOT_DEVICE} DEVICE; typedef enum __memoryProtectRegion{MEM_REGION0,MEM_REGION1,MEM_REGION2, \ MEM_REGION3,MEM_REGION4,MEM_REGION5, \ MEM_REGION6,MEM_REGION7} \ MEMORY_PROTECT_REGION; typedef enum __memoryAccess{MEM_ACCESS_ALLOWED,MEM_ACCESS_FORBIDEN} \ MEMORY_ACCESS; typedef enum __memoryWrite{MEM_WRITE_ALLOWED,MEM_WRITE_FORBIDEN} \ MEMORY_ACCESS_WRITE; typedef enum __memoryCacheProtect{MEM_CACHE_ALLOWED,MEM_CACHE_FORBIDEN} \ MEMORY_CACHE_PROTECT; typedef enum __memorySnoopType{MEM_NO_SNOOP,MEM_SNOOP_WT,MEM_SNOOP_WB} \ MEMORY_SNOOP_TYPE; typedef enum __memorySnoopRegion{MEM_SNOOP_REGION0,MEM_SNOOP_REGION1, \ MEM_SNOOP_REGION2,MEM_SNOOP_REGION3} \ MEMORY_SNOOP_REGION; /* functions */ unsigned int memoryGetBankBaseAddress(MEMORY_BANK bank); unsigned int memoryGetDeviceBaseAddress(DEVICE device); unsigned int memoryGetBankSize(MEMORY_BANK bank); unsigned int memoryGetDeviceSize(DEVICE device); unsigned int memoryGetDeviceWidth(DEVICE device); /* when given base Address and size Set new WINDOW for SCS_X. (X = 0,1,2 or 3*/ bool memoryMapBank(MEMORY_BANK bank, unsigned int bankBase,unsigned int bankLength); bool memoryMapDeviceSpace(DEVICE device, unsigned int deviceBase,unsigned int deviceLength); /* Change the Internal Register Base Address to a new given Address. */ bool memoryMapInternalRegistersSpace(unsigned int internalRegBase); /* returns internal Register Space Base Address. */ unsigned int memoryGetInternalRegistersSpace(void); /* Configurate the protection feature to a given space. */ bool memorySetProtectRegion(MEMORY_PROTECT_REGION region, MEMORY_ACCESS memoryAccess, MEMORY_ACCESS_WRITE memoryWrite, MEMORY_CACHE_PROTECT cacheProtection, unsigned int baseAddress, unsigned int regionLength); /* Configurate the snoop feature to a given space. */ bool memorySetRegionSnoopMode(MEMORY_SNOOP_REGION region, MEMORY_SNOOP_TYPE snoopType, unsigned int baseAddress, unsigned int regionLength); bool memoryRemapAddress(unsigned int remapReg, unsigned int remapValue); bool memoryGetDeviceParam(DEVICE_PARAM *deviceParam, DEVICE deviceNum); bool memorySetDeviceParam(DEVICE_PARAM *deviceParam, DEVICE deviceNum); #endif /* __INCmemoryh */