blob: 2ad0ccfbb27aad4173deba026790c197b0d222c4 [file] [log] [blame]
Wolfgang Denk4646d2a2006-05-30 15:56:48 +02001/**
2 * @file IxOsalMemAccess.h
3 *
4 * @brief Header file for memory access
5 *
6 * @par
7 * @version $Revision: 1.0 $
8 *
9 * @par
10 * IXP400 SW Release version 2.0
11 *
12 * -- Copyright Notice --
13 *
14 * @par
15 * Copyright 2001-2005, Intel Corporation.
16 * All rights reserved.
17 *
18 * @par
19 * Redistribution and use in source and binary forms, with or without
20 * modification, are permitted provided that the following conditions
21 * are met:
22 * 1. Redistributions of source code must retain the above copyright
23 * notice, this list of conditions and the following disclaimer.
24 * 2. Redistributions in binary form must reproduce the above copyright
25 * notice, this list of conditions and the following disclaimer in the
26 * documentation and/or other materials provided with the distribution.
27 * 3. Neither the name of the Intel Corporation nor the names of its contributors
28 * may be used to endorse or promote products derived from this software
29 * without specific prior written permission.
30 *
31 * @par
32 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
33 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
34 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
35 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
36 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
37 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
38 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
39 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
40 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
41 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
42 * SUCH DAMAGE.
43 *
44 * @par
45 * -- End of Copyright Notice --
46 */
47
48#ifndef IxOsalMemAccess_H
49#define IxOsalMemAccess_H
50
51
52/* Global BE switch
53 *
54 * Should be set only in BE mode and only if the component uses I/O memory.
55 */
56
57#if defined (__BIG_ENDIAN)
58
59#define IX_OSAL_BE_MAPPING
60
61#endif /* Global switch */
62
63
64/* By default only static memory maps in use;
65 define IX_OSAL_DYNAMIC_MEMORY_MAP per component if dynamic maps are
66 used instead in that component */
67#define IX_OSAL_STATIC_MEMORY_MAP
68
69
70/*
71 * SDRAM coherency mode
72 * Must be defined to BE, LE_DATA_COHERENT or LE_ADDRESS_COHERENT.
73 * The mode changes depending on OS
74 */
75#if defined (IX_OSAL_LINUX_BE) || defined (IX_OSAL_VXWORKS_BE)
76
77#define IX_SDRAM_BE
78
79#elif defined (IX_OSAL_VXWORKS_LE)
80
81#define IX_SDRAM_LE_DATA_COHERENT
82
83#elif defined (IX_OSAL_LINUX_LE)
84
85#define IX_SDRAM_LE_DATA_COHERENT
86
87#elif defined (IX_OSAL_WINCE_LE)
88
89#define IX_SDRAM_LE_DATA_COHERENT
90
91#elif defined (IX_OSAL_EBOOT_LE)
92
93#define IX_SDRAM_LE_ADDRESS_COHERENT
94
95#endif
96
97
98
99
100/**************************************
101 * Retrieve current component mapping *
102 **************************************/
103
104/*
105 * Only use customized mapping for LE.
106 *
107 */
108#if defined (IX_OSAL_VXWORKS_LE) || defined (IX_OSAL_LINUX_LE) || defined (IX_OSAL_WINCE_LE) || defined (IX_OSAL_EBOOT_LE)
109
110#include "IxOsalOsIxp400CustomizedMapping.h"
111
112#endif
113
114
115/*******************************************************************
116 * Turn off IX_STATIC_MEMORY map for components using dynamic maps *
117 *******************************************************************/
118#ifdef IX_OSAL_DYNAMIC_MEMORY_MAP
119
120#undef IX_OSAL_STATIC_MEMORY_MAP
121
122#endif
123
124
125/************************************************************
126 * Turn off BE access for components using LE or no mapping *
127 ************************************************************/
128
129#if ( defined (IX_OSAL_LE_AC_MAPPING) || defined (IX_OSAL_LE_DC_MAPPING) || defined (IX_OSAL_NO_MAPPING) )
130
131#undef IX_OSAL_BE_MAPPING
132
133#endif
134
135
136/*****************
137 * Safety checks *
138 *****************/
139
140/* Default to no_mapping */
141#if !defined (IX_OSAL_BE_MAPPING) && !defined (IX_OSAL_LE_AC_MAPPING) && !defined (IX_OSAL_LE_DC_MAPPING) && !defined (IX_OSAL_NO_MAPPING)
142
143#define IX_OSAL_NO_MAPPING
144
145#endif /* check at least one mapping */
146
147/* No more than one mapping can be defined for a component */
148#if (defined (IX_OSAL_BE_MAPPING) && defined (IX_OSAL_LE_AC_MAPPING)) \
149 ||(defined (IX_OSAL_BE_MAPPING) && defined (IX_OSAL_LE_DC_MAPPING)) \
150 ||(defined (IX_OSAL_BE_MAPPING) && defined (IX_OSAL_NO_MAPPING)) \
151 ||(defined (IX_OSAL_LE_DC_MAPPING) && defined (IX_OSAL_NO_MAPPING)) \
152 ||(defined (IX_OSAL_LE_DC_MAPPING) && defined (IX_OSAL_LE_AC_MAPPING)) \
153 ||(defined (IX_OSAL_LE_AC_MAPPING) && defined (IX_OSAL_NO_MAPPING))
154
155
156#ifdef IX_OSAL_BE_MAPPING
157#warning IX_OSAL_BE_MAPPING is defined
158#endif
159
160#ifdef IX_OSAL_LE_AC_MAPPING
161#warning IX_OSAL_LE_AC_MAPPING is defined
162#endif
163
164#ifdef IX_OSAL_LE_DC_MAPPING
165#warning IX_OSAL_LE_DC_MAPPING is defined
166#endif
167
168#ifdef IX_OSAL_NO_MAPPING
169#warning IX_OSAL_NO_MAPPING is defined
170#endif
171
172#error More than one I/O mapping is defined, please check your component mapping
173
174#endif /* check at most one mapping */
175
176
177/* Now set IX_OSAL_COMPONENT_MAPPING */
178
179#ifdef IX_OSAL_BE_MAPPING
180#define IX_OSAL_COMPONENT_MAPPING IX_OSAL_BE
181#endif
182
183#ifdef IX_OSAL_LE_AC_MAPPING
184#define IX_OSAL_COMPONENT_MAPPING IX_OSAL_LE_AC
185#endif
186
187#ifdef IX_OSAL_LE_DC_MAPPING
188#define IX_OSAL_COMPONENT_MAPPING IX_OSAL_LE_DC
189#endif
190
191#ifdef IX_OSAL_NO_MAPPING
192#define IX_OSAL_COMPONENT_MAPPING IX_OSAL_LE
193#endif
194
195
196/* SDRAM coherency should be defined */
197#if !defined (IX_SDRAM_BE) && !defined (IX_SDRAM_LE_DATA_COHERENT) && !defined (IX_SDRAM_LE_ADDRESS_COHERENT)
198
199#error SDRAM coherency must be defined
200
201#endif /* SDRAM coherency must be defined */
202
203/* SDRAM coherency cannot be defined in several ways */
204#if (defined (IX_SDRAM_BE) && (defined (IX_SDRAM_LE_DATA_COHERENT) || defined (IX_SDRAM_LE_ADDRESS_COHERENT))) \
205 || (defined (IX_SDRAM_LE_DATA_COHERENT) && (defined (IX_SDRAM_BE) || defined (IX_SDRAM_LE_ADDRESS_COHERENT))) \
206 || (defined (IX_SDRAM_LE_ADDRESS_COHERENT) && (defined (IX_SDRAM_BE) || defined (IX_SDRAM_LE_DATA_COHERENT)))
207
208#error SDRAM coherency cannot be defined in more than one way
209
210#endif /* SDRAM coherency must be defined exactly once */
211
212
213/*********************
214 * Read/write macros *
215 *********************/
216
217/* WARNING - except for addition of special cookie read/write macros (see below)
218 these macros are NOT user serviceable. Please do not modify */
219
220#define IX_OSAL_READ_LONG_RAW(wAddr) (*(wAddr))
221#define IX_OSAL_READ_SHORT_RAW(sAddr) (*(sAddr))
222#define IX_OSAL_READ_BYTE_RAW(bAddr) (*(bAddr))
223#define IX_OSAL_WRITE_LONG_RAW(wAddr, wData) (*(wAddr) = (wData))
224#define IX_OSAL_WRITE_SHORT_RAW(sAddr,sData) (*(sAddr) = (sData))
225#define IX_OSAL_WRITE_BYTE_RAW(bAddr, bData) (*(bAddr) = (bData))
226
227#ifdef __linux
228
229/* Linux - specific cookie reads/writes.
230 Redefine per OS if dynamic memory maps are used
231 and I/O memory is accessed via functions instead of raw pointer access. */
232
233#define IX_OSAL_READ_LONG_COOKIE(wCookie) (readl((UINT32) (wCookie) ))
234#define IX_OSAL_READ_SHORT_COOKIE(sCookie) (readw((UINT32) (sCookie) ))
235#define IX_OSAL_READ_BYTE_COOKIE(bCookie) (readb((UINT32) (bCookie) ))
236#define IX_OSAL_WRITE_LONG_COOKIE(wCookie, wData) (writel(wData, (UINT32) (wCookie) ))
237#define IX_OSAL_WRITE_SHORT_COOKIE(sCookie, sData) (writew(sData, (UINT32) (sCookie) ))
238#define IX_OSAL_WRITE_BYTE_COOKIE(bCookie, bData) (writeb(bData, (UINT32) (bCookie) ))
239
240#endif /* linux */
241
242#ifdef __wince
243
244/* WinCE - specific cookie reads/writes. */
245
246static __inline__ UINT32
247ixOsalWinCEReadLCookie (volatile UINT32 * lCookie)
248{
249 return *lCookie;
250}
251
252static __inline__ UINT16
253ixOsalWinCEReadWCookie (volatile UINT16 * wCookie)
254{
255#if 0
256 UINT32 auxVal = *((volatile UINT32 *) wCookie);
257 if ((unsigned) wCookie & 3)
258 return (UINT16) (auxVal >> 16);
259 else
260 return (UINT16) (auxVal & 0xffff);
261#else
262 return *wCookie;
263#endif
264}
265
266static __inline__ UINT8
267ixOsalWinCEReadBCookie (volatile UINT8 * bCookie)
268{
269#if 0
270 UINT32 auxVal = *((volatile UINT32 *) bCookie);
271 return (UINT8) ((auxVal >> (3 - (((unsigned) bCookie & 3) << 3)) & 0xff));
272#else
273 return *bCookie;
274#endif
275}
276
277static __inline__ void
278ixOsalWinCEWriteLCookie (volatile UINT32 * lCookie, UINT32 lVal)
279{
280 *lCookie = lVal;
281}
282
283static __inline__ void
284ixOsalWinCEWriteWCookie (volatile UINT16 * wCookie, UINT16 wVal)
285{
286#if 0
287 volatile UINT32 *auxCookie =
288 (volatile UINT32 *) ((unsigned) wCookie & ~3);
289 if ((unsigned) wCookie & 3)
290 {
291 *auxCookie &= 0xffff;
292 *auxCookie |= (UINT32) wVal << 16;
293 }
294 else
295 {
296 *auxCookie &= ~0xffff;
297 *auxCookie |= (UINT32) wVal & 0xffff;
298 }
299#else
300 *wCookie = wVal;
301#endif
302}
303
304static __inline__ void
305ixOsalWinCEWriteBCookie (volatile UINT8 * bCookie, UINT8 bVal)
306{
307#if 0
308 volatile UINT32 *auxCookie =
309 (volatile UINT32 *) ((unsigned) bCookie & ~3);
310 *auxCookie &= 0xff << (3 - (((unsigned) bCookie & 3) << 3));
311 *auxCookie |= (UINT32) bVal << (3 - (((unsigned) bCookie & 3) << 3));
312#else
313 *bCookie = bVal;
314#endif
315}
316
317
318#define IX_OSAL_READ_LONG_COOKIE(wCookie) (ixOsalWinCEReadLCookie(wCookie))
319#define IX_OSAL_READ_SHORT_COOKIE(sCookie) (ixOsalWinCEReadWCookie(sCookie))
320#define IX_OSAL_READ_BYTE_COOKIE(bCookie) (ixOsalWinCEReadBCookie(bCookie))
321#define IX_OSAL_WRITE_LONG_COOKIE(wCookie, wData) (ixOsalWinCEWriteLCookie(wCookie, wData))
322#define IX_OSAL_WRITE_SHORT_COOKIE(sCookie, sData) (ixOsalWinCEWriteWCookie(sCookie, sData))
323#define IX_OSAL_WRITE_BYTE_COOKIE(bCookie, bData) (ixOsalWinCEWriteBCookie(bCookie, bData))
324
325#endif /* wince */
326
327#if defined (__vxworks) || (defined (__linux) && defined (IX_OSAL_STATIC_MEMORY_MAP)) || \
328 (defined (__wince) && defined (IX_OSAL_STATIC_MEMORY_MAP))
329
330#define IX_OSAL_READ_LONG_IO(wAddr) IX_OSAL_READ_LONG_RAW(wAddr)
331#define IX_OSAL_READ_SHORT_IO(sAddr) IX_OSAL_READ_SHORT_RAW(sAddr)
332#define IX_OSAL_READ_BYTE_IO(bAddr) IX_OSAL_READ_BYTE_RAW(bAddr)
333#define IX_OSAL_WRITE_LONG_IO(wAddr, wData) IX_OSAL_WRITE_LONG_RAW(wAddr, wData)
334#define IX_OSAL_WRITE_SHORT_IO(sAddr, sData) IX_OSAL_WRITE_SHORT_RAW(sAddr, sData)
335#define IX_OSAL_WRITE_BYTE_IO(bAddr, bData) IX_OSAL_WRITE_BYTE_RAW(bAddr, bData)
336
337#elif (defined (__linux) && !defined (IX_OSAL_STATIC_MEMORY_MAP)) || \
338 (defined (__wince) && !defined (IX_OSAL_STATIC_MEMORY_MAP))
339
340#ifndef __wince
341#include <asm/io.h>
342#endif /* ndef __wince */
343
344#define IX_OSAL_READ_LONG_IO(wAddr) IX_OSAL_READ_LONG_COOKIE(wAddr)
345#define IX_OSAL_READ_SHORT_IO(sAddr) IX_OSAL_READ_SHORT_COOKIE(sAddr)
346#define IX_OSAL_READ_BYTE_IO(bAddr) IX_OSAL_READ_BYTE_COOKIE(bAddr)
347#define IX_OSAL_WRITE_LONG_IO(wAddr, wData) IX_OSAL_WRITE_LONG_COOKIE(wAddr, wData)
348#define IX_OSAL_WRITE_SHORT_IO(sAddr, sData) IX_OSAL_WRITE_SHORT_COOKIE(sAddr, sData)
349#define IX_OSAL_WRITE_BYTE_IO(bAddr, bData) IX_OSAL_WRITE_BYTE_COOKIE(bAddr, bData)
350
351#endif
352
353/* Define BE macros */
354#define IX_OSAL_READ_LONG_BE(wAddr) IX_OSAL_BE_BUSTOXSL(IX_OSAL_READ_LONG_IO((volatile UINT32 *) (wAddr) ))
355#define IX_OSAL_READ_SHORT_BE(sAddr) IX_OSAL_BE_BUSTOXSS(IX_OSAL_READ_SHORT_IO((volatile UINT16 *) (sAddr) ))
356#define IX_OSAL_READ_BYTE_BE(bAddr) IX_OSAL_BE_BUSTOXSB(IX_OSAL_READ_BYTE_IO((volatile UINT8 *) (bAddr) ))
357#define IX_OSAL_WRITE_LONG_BE(wAddr, wData) IX_OSAL_WRITE_LONG_IO((volatile UINT32 *) (wAddr), IX_OSAL_BE_XSTOBUSL((UINT32) (wData) ))
358#define IX_OSAL_WRITE_SHORT_BE(sAddr, sData) IX_OSAL_WRITE_SHORT_IO((volatile UINT16 *) (sAddr), IX_OSAL_BE_XSTOBUSS((UINT16) (sData) ))
359#define IX_OSAL_WRITE_BYTE_BE(bAddr, bData) IX_OSAL_WRITE_BYTE_IO((volatile UINT8 *) (bAddr), IX_OSAL_BE_XSTOBUSB((UINT8) (bData) ))
360
361/* Define LE AC macros */
362#define IX_OSAL_READ_LONG_LE_AC(wAddr) IX_OSAL_READ_LONG_IO((volatile UINT32 *) IX_OSAL_LE_AC_BUSTOXSL((UINT32) (wAddr) ))
363#define IX_OSAL_READ_SHORT_LE_AC(sAddr) IX_OSAL_READ_SHORT_IO((volatile UINT16 *) IX_OSAL_LE_AC_BUSTOXSS((UINT32) (sAddr) ))
364#define IX_OSAL_READ_BYTE_LE_AC(bAddr) IX_OSAL_READ_BYTE_IO((volatile UINT8 *) IX_OSAL_LE_AC_BUSTOXSB((UINT32) (bAddr) ))
365#define IX_OSAL_WRITE_LONG_LE_AC(wAddr, wData) IX_OSAL_WRITE_LONG_IO((volatile UINT32 *) IX_OSAL_LE_AC_XSTOBUSL((UINT32) (wAddr) ), (UINT32) (wData))
366#define IX_OSAL_WRITE_SHORT_LE_AC(sAddr, sData) IX_OSAL_WRITE_SHORT_IO((volatile UINT16 *) IX_OSAL_LE_AC_XSTOBUSS((UINT32) (sAddr) ), (UINT16) (sData))
367#define IX_OSAL_WRITE_BYTE_LE_AC(bAddr, bData) IX_OSAL_WRITE_BYTE_IO((volatile UINT8 *) IX_OSAL_LE_AC_XSTOBUSB((UINT32) (bAddr) ), (UINT8) (bData))
368
369
370/* Inline functions are required here to avoid reading the same I/O location 2 or 4 times for the byte swap */
371static __inline__ UINT32
372ixOsalDataCoherentLongReadSwap (volatile UINT32 * wAddr)
373{
374 UINT32 wData = IX_OSAL_READ_LONG_IO (wAddr);
375 return IX_OSAL_LE_DC_BUSTOXSL (wData);
376}
377
378static __inline__ UINT16
379ixOsalDataCoherentShortReadSwap (volatile UINT16 * sAddr)
380{
381 UINT16 sData = IX_OSAL_READ_SHORT_IO (sAddr);
382 return IX_OSAL_LE_DC_BUSTOXSS (sData);
383}
384
385static __inline__ void
386ixOsalDataCoherentLongWriteSwap (volatile UINT32 * wAddr, UINT32 wData)
387{
388 wData = IX_OSAL_LE_DC_XSTOBUSL (wData);
389 IX_OSAL_WRITE_LONG_IO (wAddr, wData);
390}
391
392static __inline__ void
393ixOsalDataCoherentShortWriteSwap (volatile UINT16 * sAddr, UINT16 sData)
394{
395 sData = IX_OSAL_LE_DC_XSTOBUSS (sData);
396 IX_OSAL_WRITE_SHORT_IO (sAddr, sData);
397}
398
399/* Define LE DC macros */
400
401#define IX_OSAL_READ_LONG_LE_DC(wAddr) ixOsalDataCoherentLongReadSwap((volatile UINT32 *) (wAddr) )
402#define IX_OSAL_READ_SHORT_LE_DC(sAddr) ixOsalDataCoherentShortReadSwap((volatile UINT16 *) (sAddr) )
403#define IX_OSAL_READ_BYTE_LE_DC(bAddr) IX_OSAL_LE_DC_BUSTOXSB(IX_OSAL_READ_BYTE_IO((volatile UINT8 *) (bAddr) ))
404#define IX_OSAL_WRITE_LONG_LE_DC(wAddr, wData) ixOsalDataCoherentLongWriteSwap((volatile UINT32 *) (wAddr), (UINT32) (wData))
405#define IX_OSAL_WRITE_SHORT_LE_DC(sAddr, sData) ixOsalDataCoherentShortWriteSwap((volatile UINT16 *) (sAddr), (UINT16) (sData))
406#define IX_OSAL_WRITE_BYTE_LE_DC(bAddr, bData) IX_OSAL_WRITE_BYTE_IO((volatile UINT8 *) (bAddr), IX_OSAL_LE_DC_XSTOBUSB((UINT8) (bData)))
407
408#if defined (IX_OSAL_BE_MAPPING)
409
410#define IX_OSAL_READ_LONG(wAddr) IX_OSAL_READ_LONG_BE(wAddr)
411#define IX_OSAL_READ_SHORT(sAddr) IX_OSAL_READ_SHORT_BE(sAddr)
412#define IX_OSAL_READ_BYTE(bAddr) IX_OSAL_READ_BYTE_BE(bAddr)
413#define IX_OSAL_WRITE_LONG(wAddr, wData) IX_OSAL_WRITE_LONG_BE(wAddr, wData)
414#define IX_OSAL_WRITE_SHORT(sAddr, sData) IX_OSAL_WRITE_SHORT_BE(sAddr, sData)
415#define IX_OSAL_WRITE_BYTE(bAddr, bData) IX_OSAL_WRITE_BYTE_BE(bAddr, bData)
416
417#elif defined (IX_OSAL_LE_AC_MAPPING)
418
419#define IX_OSAL_READ_LONG(wAddr) IX_OSAL_READ_LONG_LE_AC(wAddr)
420#define IX_OSAL_READ_SHORT(sAddr) IX_OSAL_READ_SHORT_LE_AC(sAddr)
421#define IX_OSAL_READ_BYTE(bAddr) IX_OSAL_READ_BYTE_LE_AC(bAddr)
422#define IX_OSAL_WRITE_LONG(wAddr, wData) IX_OSAL_WRITE_LONG_LE_AC(wAddr, wData)
423#define IX_OSAL_WRITE_SHORT(sAddr, sData) IX_OSAL_WRITE_SHORT_LE_AC(sAddr, sData)
424#define IX_OSAL_WRITE_BYTE(bAddr, bData) IX_OSAL_WRITE_BYTE_LE_AC(bAddr, bData)
425
426#elif defined (IX_OSAL_LE_DC_MAPPING)
427
428#define IX_OSAL_READ_LONG(wAddr) IX_OSAL_READ_LONG_LE_DC(wAddr)
429#define IX_OSAL_READ_SHORT(sAddr) IX_OSAL_READ_SHORT_LE_DC(sAddr)
430#define IX_OSAL_READ_BYTE(bAddr) IX_OSAL_READ_BYTE_LE_DC(bAddr)
431#define IX_OSAL_WRITE_LONG(wAddr, wData) IX_OSAL_WRITE_LONG_LE_DC(wAddr, wData)
432#define IX_OSAL_WRITE_SHORT(sAddr, sData) IX_OSAL_WRITE_SHORT_LE_DC(sAddr, sData)
433#define IX_OSAL_WRITE_BYTE(bAddr, bData) IX_OSAL_WRITE_BYTE_LE_DC(bAddr, bData)
434
435#endif /* End of BE and LE coherency mode switch */
436
437
438/* Reads/writes to and from memory shared with NPEs - depends on the SDRAM coherency */
439
440#if defined (IX_SDRAM_BE)
441
442#define IX_OSAL_READ_BE_SHARED_LONG(wAddr) IX_OSAL_READ_LONG_RAW(wAddr)
443#define IX_OSAL_READ_BE_SHARED_SHORT(sAddr) IX_OSAL_READ_SHORT_RAW(sAddr)
444#define IX_OSAL_READ_BE_SHARED_BYTE(bAddr) IX_OSAL_READ_BYTE_RAW(bAddr)
445
446#define IX_OSAL_WRITE_BE_SHARED_LONG(wAddr, wData) IX_OSAL_WRITE_LONG_RAW(wAddr, wData)
447#define IX_OSAL_WRITE_BE_SHARED_SHORT(sAddr, sData) IX_OSAL_WRITE_SHORT_RAW(sAddr, sData)
448#define IX_OSAL_WRITE_BE_SHARED_BYTE(bAddr, bData) IX_OSAL_WRITE_BYTE_RAW(bAddr, bData)
449
450#define IX_OSAL_SWAP_BE_SHARED_LONG(wData) (wData)
451#define IX_OSAL_SWAP_BE_SHARED_SHORT(sData) (sData)
452#define IX_OSAL_SWAP_BE_SHARED_BYTE(bData) (bData)
453
454#elif defined (IX_SDRAM_LE_ADDRESS_COHERENT)
455
456#define IX_OSAL_READ_BE_SHARED_LONG(wAddr) IX_OSAL_READ_LONG_RAW(wAddr)
457#define IX_OSAL_READ_BE_SHARED_SHORT(sAddr) IX_OSAL_READ_SHORT_RAW(IX_OSAL_SWAP_SHORT_ADDRESS(sAddr))
458#define IX_OSAL_READ_BE_SHARED_BYTE(bAddr) IX_OSAL_READ_BYTE_RAW(IX_OSAL_SWAP_BYTE_ADDRESS(bAddr))
459
460#define IX_OSAL_WRITE_BE_SHARED_LONG(wAddr, wData) IX_OSAL_WRITE_LONG_RAW(wAddr, wData)
461#define IX_OSAL_WRITE_BE_SHARED_SHORT(sAddr, sData) IX_OSAL_WRITE_SHORT_RAW(IX_OSAL_SWAP_SHORT_ADDRESS(sAddr), sData)
462#define IX_OSAL_WRITE_BE_SHARED_BYTE(bAddr, bData) IX_OSAL_WRITE_BYTE_RAW(IX_OSAL_SWAP_BYTE_ADDRESS(bAddr), bData)
463
464#define IX_OSAL_SWAP_BE_SHARED_LONG(wData) (wData)
465#define IX_OSAL_SWAP_BE_SHARED_SHORT(sData) (sData)
466#define IX_OSAL_SWAP_BE_SHARED_BYTE(bData) (bData)
467
468#elif defined (IX_SDRAM_LE_DATA_COHERENT)
469
470#define IX_OSAL_READ_BE_SHARED_LONG(wAddr) IX_OSAL_SWAP_LONG(IX_OSAL_READ_LONG_RAW(wAddr))
471#define IX_OSAL_READ_BE_SHARED_SHORT(sAddr) IX_OSAL_SWAP_SHORT(IX_OSAL_READ_SHORT_RAW(sAddr))
472#define IX_OSAL_READ_BE_SHARED_BYTE(bAddr) IX_OSAL_READ_BYTE_RAW(bAddr)
473
474#define IX_OSAL_WRITE_BE_SHARED_LONG(wAddr, wData) IX_OSAL_WRITE_LONG_RAW(wAddr, IX_OSAL_SWAP_LONG(wData))
475#define IX_OSAL_WRITE_BE_SHARED_SHORT(sAddr, sData) IX_OSAL_WRITE_SHORT_RAW(sAddr, IX_OSAL_SWAP_SHORT(sData))
476#define IX_OSAL_WRITE_BE_SHARED_BYTE(bAddr, bData) IX_OSAL_WRITE_BYTE_RAW(bAddr, bData)
477
478#define IX_OSAL_SWAP_BE_SHARED_LONG(wData) IX_OSAL_SWAP_LONG(wData)
479#define IX_OSAL_SWAP_BE_SHARED_SHORT(sData) IX_OSAL_SWAP_SHORT(sData)
480
481#endif
482
483
484#define IX_OSAL_COPY_BE_SHARED_LONG_ARRAY(wDestAddr, wSrcAddr, wCount) \
485 { \
486 UINT32 i; \
487 \
488 for ( i = 0 ; i < wCount ; i++ ) \
489 { \
490 * (((UINT32 *) wDestAddr) + i) = IX_OSAL_READ_BE_SHARED_LONG(((UINT32 *) wSrcAddr) + i); \
491 }; \
492 };
493
494#endif /* IxOsalMemAccess_H */