|  | /* 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 MINIMUM_MEM_BANK_SIZE		0x10000 | 
|  | #define MINIMUM_DEVICE_WINDOW_SIZE	0x10000 | 
|  | #define MINIMUM_PCI_WINDOW_SIZE		0x10000 | 
|  | #define MINIMUM_ACCESS_WIN_SIZE		0x10000 | 
|  |  | 
|  | #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    badrSkew;		/* 0x0 - 0x2	   */ | 
|  | unsigned int    DPEn;			/* 0x0 - 0x1	   */ | 
|  | 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;*/ | 
|  | /* There are four possible windows that can be defined as protected */ | 
|  | typedef enum _memoryProtectWindow{MEM_WINDOW0,MEM_WINDOW1,MEM_WINDOW2, | 
|  | MEM_WINDOW3 | 
|  | } MEMORY_PROTECT_WINDOW; | 
|  | /* When defining a protected window , this paramter indicates whether it | 
|  | is accessible or not */ | 
|  | 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; | 
|  |  | 
|  | /* There are 21 memory windows dedicated for the varios interfaces (PCI, | 
|  | devCS (devices), CS(DDR), interenal registers and SRAM) used by the CPU's | 
|  | address decoding mechanism. */ | 
|  | typedef enum _memoryWindow {CS_0_WINDOW = BIT0, CS_1_WINDOW = BIT1, | 
|  | CS_2_WINDOW = BIT2, CS_3_WINDOW = BIT3, | 
|  | DEVCS_0_WINDOW = BIT4, DEVCS_1_WINDOW = BIT5, | 
|  | DEVCS_2_WINDOW = BIT6, DEVCS_3_WINDOW = BIT7, | 
|  | BOOT_CS_WINDOW = BIT8, PCI_0_IO_WINDOW = BIT9, | 
|  | PCI_0_MEM0_WINDOW = BIT10, | 
|  | PCI_0_MEM1_WINDOW = BIT11, | 
|  | PCI_0_MEM2_WINDOW = BIT12, | 
|  | PCI_0_MEM3_WINDOW = BIT13, PCI_1_IO_WINDOW = BIT14, | 
|  | PCI_1_MEM0_WINDOW = BIT15, PCI_1_MEM1_WINDOW =BIT16, | 
|  | PCI_1_MEM2_WINDOW = BIT17, PCI_1_MEM3_WINDOW =BIT18, | 
|  | INTEGRATED_SRAM_WINDOW = BIT19, | 
|  | INTERNAL_SPACE_WINDOW = BIT20, | 
|  | ALL_WINDOWS = 0X1FFFFF | 
|  | } MEMORY_WINDOW; | 
|  |  | 
|  | typedef enum _memoryWindowStatus {MEM_WINDOW_ENABLED,MEM_WINDOW_DISABLED | 
|  | } MEMORY_WINDOW_STATUS; | 
|  |  | 
|  |  | 
|  | typedef enum _pciMemWindow{PCI_0_IO,PCI_0_MEM0,PCI_0_MEM1,PCI_0_MEM2,PCI_0_MEM3 | 
|  | #ifdef INCLUDE_PCI_1 | 
|  | ,PCI_1_IO,PCI_1_MEM0,PCI_1_MEM1,PCI_1_MEM2,PCI_1_MEM3 | 
|  | #endif /* INCLUDE_PCI_1 */ | 
|  | } PCI_MEM_WINDOW; | 
|  |  | 
|  |  | 
|  | /* -------------------------------------------------------------------------------------------------*/ | 
|  |  | 
|  | /* functions */ | 
|  | unsigned int memoryGetBankBaseAddress(MEMORY_BANK bank); | 
|  | unsigned int memoryGetDeviceBaseAddress(DEVICE device); | 
|  | /* New at MV6436x */ | 
|  | unsigned int MemoryGetPciBaseAddr(PCI_MEM_WINDOW pciWindow); | 
|  | unsigned int memoryGetBankSize(MEMORY_BANK bank); | 
|  | unsigned int memoryGetDeviceSize(DEVICE device); | 
|  | unsigned int memoryGetDeviceWidth(DEVICE device); | 
|  | /* New at MV6436x */ | 
|  | unsigned int gtMemoryGetPciWindowSize(PCI_MEM_WINDOW pciWindow); | 
|  |  | 
|  | /* 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); | 
|  | /* Set a new base and size for one of the memory banks (CS0 - CS3) */ | 
|  | bool gtMemorySetMemoryBank(MEMORY_BANK bank, unsigned int bankBase, | 
|  | unsigned int bankSize); | 
|  | 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); | 
|  |  | 
|  | /* Returns the integrated SRAM Base Address. */ | 
|  | unsigned int memoryGetInternalSramBaseAddr(void); | 
|  | /* -------------------------------------------------------------------------------------------------*/ | 
|  |  | 
|  | /* Set new base address for the integrated SRAM. */ | 
|  | void memorySetInternalSramBaseAddr(unsigned int sramBaseAddress); | 
|  | /* -------------------------------------------------------------------------------------------------*/ | 
|  |  | 
|  | /* Delete a protection feature to a given space. */ | 
|  | void memoryDisableProtectRegion(MEMORY_PROTECT_WINDOW window); | 
|  | /* -------------------------------------------------------------------------------------------------*/ | 
|  |  | 
|  | /* Writes a new remap value to the remap register */ | 
|  | unsigned int memorySetPciRemapValue(PCI_MEM_WINDOW memoryWindow, | 
|  | unsigned int remapValueHigh, | 
|  | unsigned int remapValueLow); | 
|  | /* -------------------------------------------------------------------------------------------------*/ | 
|  |  | 
|  | /* Configurate the protection feature to a given space. */ | 
|  | bool memorySetProtectRegion(MEMORY_PROTECT_WINDOW window, | 
|  | MEMORY_ACCESS gtMemoryAccess, | 
|  | MEMORY_ACCESS_WRITE gtMemoryWrite, | 
|  | MEMORY_CACHE_PROTECT cacheProtection, | 
|  | unsigned int baseAddress, | 
|  | unsigned int size); | 
|  |  | 
|  | /* 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); | 
|  | /* Set a new base and size for one of the PCI windows. */ | 
|  | bool memorySetPciWindow(PCI_MEM_WINDOW pciWindow, unsigned int pciWindowBase, | 
|  | unsigned int pciWindowSize); | 
|  |  | 
|  | /* Disable or enable one of the 21 windows dedicated for the CPU's | 
|  | address decoding mechanism */ | 
|  | void MemoryDisableWindow(MEMORY_WINDOW window); | 
|  | void MemoryEnableWindow (MEMORY_WINDOW window); | 
|  | MEMORY_WINDOW_STATUS MemoryGetMemWindowStatus(MEMORY_WINDOW window); | 
|  | #endif	/* __INCmemoryh */ |