wdenk | 012771d | 2002-03-08 21:31:05 +0000 | [diff] [blame] | 1 | /* Memory.h - Memory mappings and remapping functions declarations */ |
| 2 | |
| 3 | /* Copyright - Galileo technology. */ |
| 4 | |
| 5 | #ifndef __INCmemoryh |
| 6 | #define __INCmemoryh |
| 7 | |
| 8 | /* includes */ |
| 9 | |
| 10 | #include "core.h" |
| 11 | |
| 12 | /* defines */ |
| 13 | |
| 14 | #define DONT_MODIFY 0xffffffff |
| 15 | #define PARITY_SUPPORT 0x40000000 |
| 16 | |
| 17 | #define _8BIT 0x00000000 |
| 18 | #define _16BIT 0x00100000 |
| 19 | #define _32BIT 0x00200000 |
| 20 | #define _64BIT 0x00300000 |
| 21 | |
| 22 | /* typedefs */ |
| 23 | |
| 24 | typedef struct deviceParam |
| 25 | { /* boundary values */ |
| 26 | unsigned int turnOff; /* 0x0 - 0xf */ |
| 27 | unsigned int acc2First; /* 0x0 - 0x1f */ |
| 28 | unsigned int acc2Next; /* 0x0 - 0x1f */ |
| 29 | unsigned int ale2Wr; /* 0x0 - 0xf */ |
| 30 | unsigned int wrLow; /* 0x0 - 0xf */ |
| 31 | unsigned int wrHigh; /* 0x0 - 0xf */ |
| 32 | unsigned int deviceWidth; /* in Bytes */ |
| 33 | } DEVICE_PARAM; |
| 34 | |
| 35 | typedef enum __memBank{BANK0,BANK1,BANK2,BANK3} MEMORY_BANK; |
| 36 | typedef enum __memDevice{DEVICE0,DEVICE1,DEVICE2,DEVICE3,BOOT_DEVICE} DEVICE; |
| 37 | |
| 38 | typedef enum __memoryProtectRegion{MEM_REGION0,MEM_REGION1,MEM_REGION2, \ |
wdenk | 8bde7f7 | 2003-06-27 21:31:46 +0000 | [diff] [blame] | 39 | MEM_REGION3,MEM_REGION4,MEM_REGION5, \ |
| 40 | MEM_REGION6,MEM_REGION7} \ |
| 41 | MEMORY_PROTECT_REGION; |
wdenk | 012771d | 2002-03-08 21:31:05 +0000 | [diff] [blame] | 42 | typedef enum __memoryAccess{MEM_ACCESS_ALLOWED,MEM_ACCESS_FORBIDEN} \ |
wdenk | 8bde7f7 | 2003-06-27 21:31:46 +0000 | [diff] [blame] | 43 | MEMORY_ACCESS; |
wdenk | 012771d | 2002-03-08 21:31:05 +0000 | [diff] [blame] | 44 | typedef enum __memoryWrite{MEM_WRITE_ALLOWED,MEM_WRITE_FORBIDEN} \ |
wdenk | 8bde7f7 | 2003-06-27 21:31:46 +0000 | [diff] [blame] | 45 | MEMORY_ACCESS_WRITE; |
wdenk | 012771d | 2002-03-08 21:31:05 +0000 | [diff] [blame] | 46 | typedef enum __memoryCacheProtect{MEM_CACHE_ALLOWED,MEM_CACHE_FORBIDEN} \ |
wdenk | 8bde7f7 | 2003-06-27 21:31:46 +0000 | [diff] [blame] | 47 | MEMORY_CACHE_PROTECT; |
wdenk | 012771d | 2002-03-08 21:31:05 +0000 | [diff] [blame] | 48 | typedef enum __memorySnoopType{MEM_NO_SNOOP,MEM_SNOOP_WT,MEM_SNOOP_WB} \ |
wdenk | 8bde7f7 | 2003-06-27 21:31:46 +0000 | [diff] [blame] | 49 | MEMORY_SNOOP_TYPE; |
wdenk | 012771d | 2002-03-08 21:31:05 +0000 | [diff] [blame] | 50 | typedef enum __memorySnoopRegion{MEM_SNOOP_REGION0,MEM_SNOOP_REGION1, \ |
wdenk | 8bde7f7 | 2003-06-27 21:31:46 +0000 | [diff] [blame] | 51 | MEM_SNOOP_REGION2,MEM_SNOOP_REGION3} \ |
| 52 | MEMORY_SNOOP_REGION; |
wdenk | 012771d | 2002-03-08 21:31:05 +0000 | [diff] [blame] | 53 | |
| 54 | /* functions */ |
| 55 | unsigned int memoryGetBankBaseAddress(MEMORY_BANK bank); |
| 56 | unsigned int memoryGetDeviceBaseAddress(DEVICE device); |
| 57 | unsigned int memoryGetBankSize(MEMORY_BANK bank); |
| 58 | unsigned int memoryGetDeviceSize(DEVICE device); |
| 59 | unsigned int memoryGetDeviceWidth(DEVICE device); |
| 60 | |
| 61 | /* when given base Address and size Set new WINDOW for SCS_X. (X = 0,1,2 or 3*/ |
| 62 | bool memoryMapBank(MEMORY_BANK bank, unsigned int bankBase,unsigned int bankLength); |
| 63 | bool memoryMapDeviceSpace(DEVICE device, unsigned int deviceBase,unsigned int deviceLength); |
| 64 | |
| 65 | /* Change the Internal Register Base Address to a new given Address. */ |
| 66 | bool memoryMapInternalRegistersSpace(unsigned int internalRegBase); |
| 67 | /* returns internal Register Space Base Address. */ |
| 68 | unsigned int memoryGetInternalRegistersSpace(void); |
| 69 | /* Configurate the protection feature to a given space. */ |
| 70 | bool memorySetProtectRegion(MEMORY_PROTECT_REGION region, |
wdenk | 8bde7f7 | 2003-06-27 21:31:46 +0000 | [diff] [blame] | 71 | MEMORY_ACCESS memoryAccess, |
| 72 | MEMORY_ACCESS_WRITE memoryWrite, |
| 73 | MEMORY_CACHE_PROTECT cacheProtection, |
| 74 | unsigned int baseAddress, |
| 75 | unsigned int regionLength); |
wdenk | 012771d | 2002-03-08 21:31:05 +0000 | [diff] [blame] | 76 | /* Configurate the snoop feature to a given space. */ |
| 77 | bool memorySetRegionSnoopMode(MEMORY_SNOOP_REGION region, |
wdenk | 8bde7f7 | 2003-06-27 21:31:46 +0000 | [diff] [blame] | 78 | MEMORY_SNOOP_TYPE snoopType, |
| 79 | unsigned int baseAddress, |
| 80 | unsigned int regionLength); |
wdenk | 012771d | 2002-03-08 21:31:05 +0000 | [diff] [blame] | 81 | |
| 82 | bool memoryRemapAddress(unsigned int remapReg, unsigned int remapValue); |
| 83 | bool memoryGetDeviceParam(DEVICE_PARAM *deviceParam, DEVICE deviceNum); |
| 84 | bool memorySetDeviceParam(DEVICE_PARAM *deviceParam, DEVICE deviceNum); |
| 85 | #endif /* __INCmemoryh */ |