1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
--- ixp_osal/include/modules/ioMem/IxOsalIoMem.h
+++ ixp_osal/include/modules/ioMem/IxOsalIoMem.h
@@ -117,8 +117,8 @@ ixOsalCoreWordSwap (UINT32 wordIn)
#endif /* ndef __wince */
#define IX_OSAL_SWAP_SHORT(sData) ((sData >> 8) | ((sData & 0xFF) << 8))
-#define IX_OSAL_SWAP_SHORT_ADDRESS(sAddr) ((sAddr) ^ 0x2)
-#define IX_OSAL_SWAP_BYTE_ADDRESS(bAddr) ((bAddr) ^ 0x3)
+#define IX_OSAL_SWAP_SHORT_ADDRESS(sAddr) ((UINT16*)((UINT32)(sAddr) ^ 0x2))
+#define IX_OSAL_SWAP_BYTE_ADDRESS(bAddr) ((UINT8*)((UINT32)(bAddr) ^ 0x3))
#define IX_OSAL_BE_XSTOBUSL(wData) (wData)
#define IX_OSAL_BE_XSTOBUSS(sData) (sData)
--- ixp_osal/include/modules/ioMem/IxOsalMemAccess.h
+++ ixp_osal/include/modules/ioMem/IxOsalMemAccess.h
@@ -84,7 +84,7 @@
#elif defined (IX_OSAL_LINUX_LE)
-#define IX_SDRAM_LE_DATA_COHERENT
+#define IX_SDRAM_LE_ADDRESS_COHERENT
#elif defined (IX_OSAL_WINCE_LE)
--- ixp_osal/os/linux/include/platforms/ixp400/IxOsalOsIxp400CustomizedMapping.h
+++ ixp_osal/os/linux/include/platforms/ixp400/IxOsalOsIxp400CustomizedMapping.h
@@ -171,7 +171,7 @@
***************************/
#if (IX_COMPONENT_NAME == ix_qmgr)
-#define IX_OSAL_LE_DC_MAPPING
+#define IX_OSAL_LE_AC_MAPPING
#endif /* qmgr */
--- ixp_osal/os/linux/include/platforms/ixp400/ixp425/IxOsalOsIxp425Sys.h
+++ ixp_osal/os/linux/include/platforms/ixp400/ixp425/IxOsalOsIxp425Sys.h
@@ -107,7 +107,7 @@ IxOsalMemoryMap ixOsalGlobalMemoryMap[]
ixOsalLinuxMemMap, /* mapFunction */
ixOsalLinuxMemUnmap, /* unmapFunction */
0, /* refCount */
- IX_OSAL_BE | IX_OSAL_LE_DC, /* endianType */
+ IX_OSAL_BE | IX_OSAL_LE_AC, /* endianType */
"qMgr" /* name */
},
--- ixp_osal/os/linux/src/modules/ioMem/IxOsalOsIoMem.c
+++ ixp_osal/os/linux/src/modules/ioMem/IxOsalOsIoMem.c
@@ -45,6 +45,7 @@
* -- End Intel Copyright Notice --
*/
+#include <asm/page.h>
#include <asm/io.h>
#include <linux/ioport.h>
@@ -54,6 +55,8 @@
PUBLIC void
ixOsalLinuxMemMap (IxOsalMemoryMap * map)
{
+ /* Linux requires LE mappings to use address coherency */
+ IX_OSAL_ENSURE((map->mapEndianType & IX_OSAL_LE_DC) == 0, "LE Data Coherency not supported");
map->virtualAddress = (UINT32) ioremap (map->physicalAddress, map->size);
}
|