wdenk | 5da7f2f | 2004-01-03 00:43:19 +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 | #define MINIMUM_MEM_BANK_SIZE 0x10000 |
| 17 | #define MINIMUM_DEVICE_WINDOW_SIZE 0x10000 |
| 18 | #define MINIMUM_PCI_WINDOW_SIZE 0x10000 |
| 19 | #define MINIMUM_ACCESS_WIN_SIZE 0x10000 |
| 20 | |
| 21 | #define _8BIT 0x00000000 |
| 22 | #define _16BIT 0x00100000 |
| 23 | #define _32BIT 0x00200000 |
| 24 | #define _64BIT 0x00300000 |
| 25 | |
| 26 | /* typedefs */ |
| 27 | |
| 28 | typedef struct deviceParam |
| 29 | { /* boundary values */ |
| 30 | unsigned int turnOff; /* 0x0 - 0xf */ |
| 31 | unsigned int acc2First; /* 0x0 - 0x1f */ |
| 32 | unsigned int acc2Next; /* 0x0 - 0x1f */ |
| 33 | unsigned int ale2Wr; /* 0x0 - 0xf */ |
| 34 | unsigned int wrLow; /* 0x0 - 0xf */ |
| 35 | unsigned int wrHigh; /* 0x0 - 0xf */ |
| 36 | unsigned int badrSkew; /* 0x0 - 0x2 */ |
| 37 | unsigned int DPEn; /* 0x0 - 0x1 */ |
| 38 | unsigned int deviceWidth; /* in Bytes */ |
| 39 | } DEVICE_PARAM; |
| 40 | |
| 41 | |
| 42 | typedef enum __memBank{BANK0,BANK1,BANK2,BANK3} MEMORY_BANK; |
| 43 | typedef enum __memDevice{DEVICE0,DEVICE1,DEVICE2,DEVICE3,BOOT_DEVICE} DEVICE; |
| 44 | |
| 45 | /*typedef enum __memoryProtectRegion{MEM_REGION0,MEM_REGION1,MEM_REGION2, \ |
| 46 | MEM_REGION3,MEM_REGION4,MEM_REGION5, \ |
| 47 | MEM_REGION6,MEM_REGION7} \ |
| 48 | MEMORY_PROTECT_REGION;*/ |
| 49 | /* There are four possible windows that can be defined as protected */ |
| 50 | typedef enum _memoryProtectWindow{MEM_WINDOW0,MEM_WINDOW1,MEM_WINDOW2, |
| 51 | MEM_WINDOW3 |
| 52 | } MEMORY_PROTECT_WINDOW; |
| 53 | /* When defining a protected window , this paramter indicates whether it |
| 54 | is accessible or not */ |
| 55 | typedef enum __memoryAccess{MEM_ACCESS_ALLOWED,MEM_ACCESS_FORBIDEN} \ |
| 56 | MEMORY_ACCESS; |
| 57 | typedef enum __memoryWrite{MEM_WRITE_ALLOWED,MEM_WRITE_FORBIDEN} \ |
| 58 | MEMORY_ACCESS_WRITE; |
| 59 | typedef enum __memoryCacheProtect{MEM_CACHE_ALLOWED,MEM_CACHE_FORBIDEN} \ |
| 60 | MEMORY_CACHE_PROTECT; |
| 61 | typedef enum __memorySnoopType{MEM_NO_SNOOP,MEM_SNOOP_WT,MEM_SNOOP_WB} \ |
| 62 | MEMORY_SNOOP_TYPE; |
| 63 | typedef enum __memorySnoopRegion{MEM_SNOOP_REGION0,MEM_SNOOP_REGION1, \ |
| 64 | MEM_SNOOP_REGION2,MEM_SNOOP_REGION3} \ |
| 65 | MEMORY_SNOOP_REGION; |
| 66 | |
| 67 | /* There are 21 memory windows dedicated for the varios interfaces (PCI, |
| 68 | devCS (devices), CS(DDR), interenal registers and SRAM) used by the CPU's |
| 69 | address decoding mechanism. */ |
| 70 | typedef enum _memoryWindow {CS_0_WINDOW = BIT0, CS_1_WINDOW = BIT1, |
| 71 | CS_2_WINDOW = BIT2, CS_3_WINDOW = BIT3, |
| 72 | DEVCS_0_WINDOW = BIT4, DEVCS_1_WINDOW = BIT5, |
| 73 | DEVCS_2_WINDOW = BIT6, DEVCS_3_WINDOW = BIT7, |
| 74 | BOOT_CS_WINDOW = BIT8, PCI_0_IO_WINDOW = BIT9, |
| 75 | PCI_0_MEM0_WINDOW = BIT10, |
| 76 | PCI_0_MEM1_WINDOW = BIT11, |
| 77 | PCI_0_MEM2_WINDOW = BIT12, |
| 78 | PCI_0_MEM3_WINDOW = BIT13, PCI_1_IO_WINDOW = BIT14, |
| 79 | PCI_1_MEM0_WINDOW = BIT15, PCI_1_MEM1_WINDOW =BIT16, |
| 80 | PCI_1_MEM2_WINDOW = BIT17, PCI_1_MEM3_WINDOW =BIT18, |
| 81 | INTEGRATED_SRAM_WINDOW = BIT19, |
| 82 | INTERNAL_SPACE_WINDOW = BIT20, |
| 83 | ALL_WINDOWS = 0X1FFFFF |
| 84 | } MEMORY_WINDOW; |
| 85 | |
| 86 | typedef enum _memoryWindowStatus {MEM_WINDOW_ENABLED,MEM_WINDOW_DISABLED |
| 87 | } MEMORY_WINDOW_STATUS; |
| 88 | |
| 89 | |
| 90 | typedef enum _pciMemWindow{PCI_0_IO,PCI_0_MEM0,PCI_0_MEM1,PCI_0_MEM2,PCI_0_MEM3 |
| 91 | #ifdef INCLUDE_PCI_1 |
| 92 | ,PCI_1_IO,PCI_1_MEM0,PCI_1_MEM1,PCI_1_MEM2,PCI_1_MEM3 |
| 93 | #endif /* INCLUDE_PCI_1 */ |
| 94 | } PCI_MEM_WINDOW; |
| 95 | |
| 96 | |
| 97 | /* -------------------------------------------------------------------------------------------------*/ |
| 98 | |
| 99 | /* functions */ |
| 100 | unsigned int memoryGetBankBaseAddress(MEMORY_BANK bank); |
| 101 | unsigned int memoryGetDeviceBaseAddress(DEVICE device); |
| 102 | /* New at MV6436x */ |
| 103 | unsigned int MemoryGetPciBaseAddr(PCI_MEM_WINDOW pciWindow); |
| 104 | unsigned int memoryGetBankSize(MEMORY_BANK bank); |
| 105 | unsigned int memoryGetDeviceSize(DEVICE device); |
| 106 | unsigned int memoryGetDeviceWidth(DEVICE device); |
| 107 | /* New at MV6436x */ |
| 108 | unsigned int gtMemoryGetPciWindowSize(PCI_MEM_WINDOW pciWindow); |
| 109 | |
| 110 | /* when given base Address and size Set new WINDOW for SCS_X. (X = 0,1,2 or 3*/ |
| 111 | bool memoryMapBank(MEMORY_BANK bank, unsigned int bankBase,unsigned int bankLength); |
| 112 | /* Set a new base and size for one of the memory banks (CS0 - CS3) */ |
| 113 | bool gtMemorySetMemoryBank(MEMORY_BANK bank, unsigned int bankBase, |
| 114 | unsigned int bankSize); |
| 115 | bool memoryMapDeviceSpace(DEVICE device, unsigned int deviceBase,unsigned int deviceLength); |
| 116 | |
| 117 | /* Change the Internal Register Base Address to a new given Address. */ |
| 118 | bool memoryMapInternalRegistersSpace(unsigned int internalRegBase); |
| 119 | /* returns internal Register Space Base Address. */ |
| 120 | unsigned int memoryGetInternalRegistersSpace(void); |
| 121 | |
| 122 | /* Returns the integrated SRAM Base Address. */ |
| 123 | unsigned int memoryGetInternalSramBaseAddr(void); |
| 124 | /* -------------------------------------------------------------------------------------------------*/ |
| 125 | |
| 126 | /* Set new base address for the integrated SRAM. */ |
| 127 | void memorySetInternalSramBaseAddr(unsigned int sramBaseAddress); |
| 128 | /* -------------------------------------------------------------------------------------------------*/ |
| 129 | |
| 130 | /* Delete a protection feature to a given space. */ |
| 131 | void memoryDisableProtectRegion(MEMORY_PROTECT_WINDOW window); |
| 132 | /* -------------------------------------------------------------------------------------------------*/ |
| 133 | |
| 134 | /* Writes a new remap value to the remap register */ |
| 135 | unsigned int memorySetPciRemapValue(PCI_MEM_WINDOW memoryWindow, |
| 136 | unsigned int remapValueHigh, |
| 137 | unsigned int remapValueLow); |
| 138 | /* -------------------------------------------------------------------------------------------------*/ |
| 139 | |
| 140 | /* Configurate the protection feature to a given space. */ |
| 141 | bool memorySetProtectRegion(MEMORY_PROTECT_WINDOW window, |
| 142 | MEMORY_ACCESS gtMemoryAccess, |
| 143 | MEMORY_ACCESS_WRITE gtMemoryWrite, |
| 144 | MEMORY_CACHE_PROTECT cacheProtection, |
| 145 | unsigned int baseAddress, |
| 146 | unsigned int size); |
| 147 | |
| 148 | /* Configurate the protection feature to a given space. */ |
| 149 | /*bool memorySetProtectRegion(MEMORY_PROTECT_REGION region, |
| 150 | MEMORY_ACCESS memoryAccess, |
| 151 | MEMORY_ACCESS_WRITE memoryWrite, |
| 152 | MEMORY_CACHE_PROTECT cacheProtection, |
| 153 | unsigned int baseAddress, |
| 154 | unsigned int regionLength); */ |
| 155 | /* Configurate the snoop feature to a given space. */ |
| 156 | bool memorySetRegionSnoopMode(MEMORY_SNOOP_REGION region, |
| 157 | MEMORY_SNOOP_TYPE snoopType, |
| 158 | unsigned int baseAddress, |
| 159 | unsigned int regionLength); |
| 160 | |
| 161 | bool memoryRemapAddress(unsigned int remapReg, unsigned int remapValue); |
| 162 | bool memoryGetDeviceParam(DEVICE_PARAM *deviceParam, DEVICE deviceNum); |
| 163 | bool memorySetDeviceParam(DEVICE_PARAM *deviceParam, DEVICE deviceNum); |
| 164 | /* Set a new base and size for one of the PCI windows. */ |
| 165 | bool memorySetPciWindow(PCI_MEM_WINDOW pciWindow, unsigned int pciWindowBase, |
| 166 | unsigned int pciWindowSize); |
| 167 | |
| 168 | /* Disable or enable one of the 21 windows dedicated for the CPU's |
| 169 | address decoding mechanism */ |
| 170 | void MemoryDisableWindow(MEMORY_WINDOW window); |
| 171 | void MemoryEnableWindow (MEMORY_WINDOW window); |
| 172 | MEMORY_WINDOW_STATUS MemoryGetMemWindowStatus(MEMORY_WINDOW window); |
| 173 | #endif /* __INCmemoryh */ |