linker script: hax :/
[coreboot.git] / src / vendorcode / amd / cimx / sb900 / MemLib.c
1 /*;********************************************************************************
2 ;
3 ; Copyright (c) 2011, Advanced Micro Devices, Inc.
4 ; All rights reserved.
5
6 ; Redistribution and use in source and binary forms, with or without
7 ; modification, are permitted provided that the following conditions are met:
8 ;     * Redistributions of source code must retain the above copyright
9 ;       notice, this list of conditions and the following disclaimer.
10 ;     * Redistributions in binary form must reproduce the above copyright
11 ;       notice, this list of conditions and the following disclaimer in the
12 ;       documentation and/or other materials provided with the distribution.
13 ;     * Neither the name of Advanced Micro Devices, Inc. nor the names of 
14 ;       its contributors may be used to endorse or promote products derived 
15 ;       from this software without specific prior written permission.
16
17 ; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
18 ; ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19 ; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20 ; DISCLAIMED. IN NO EVENT SHALL ADVANCED MICRO DEVICES, INC. BE LIABLE FOR ANY
21 ; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22 ; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23 ; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24 ; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 ; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26 ; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
28 ;*********************************************************************************/
29
30 #include "SbPlatform.h"
31 #include "cbtypes.h"
32
33 VOID
34 ReadMEM (
35   IN       UINT32 Address,
36   IN       UINT8 OpFlag,
37   IN       VOID* Value
38   )
39 {
40   OpFlag = OpFlag & 0x7f;
41   switch ( OpFlag ) {
42   case AccWidthUint8:
43     *((UINT8*)Value) = *((UINT8*) ((UINTN)Address));
44     break;
45   case AccWidthUint16:
46     *((UINT16*)Value) = *((UINT16*) ((UINTN)Address));
47     break;
48   case AccWidthUint32:
49     *((UINT32*)Value) = *((UINT32*) ((UINTN)Address));
50     break;
51   default:
52     break;
53   }
54 }
55
56 VOID
57 WriteMEM (
58   IN       UINT32 Address,
59   IN       UINT8 OpFlag,
60   IN       VOID* Value
61   )
62 {
63   OpFlag = OpFlag & 0x7f;
64   switch ( OpFlag ) {
65   case AccWidthUint8 :
66     *((UINT8*) ((UINTN)Address)) = *((UINT8*)Value);
67     break;
68   case AccWidthUint16:
69     *((UINT16*) ((UINTN)Address)) = *((UINT16*)Value);
70     break;
71   case AccWidthUint32:
72     *((UINT32*) ((UINTN)Address)) = *((UINT32*)Value);
73     break;
74   default:
75     break;
76   }
77 }
78
79 VOID
80 RWMEM (
81   IN       UINT32 Address,
82   IN       UINT8 OpFlag,
83   IN       UINT32 Mask,
84   IN       UINT32 Data
85   )
86 {
87   UINT32 Result;
88   ReadMEM (Address, OpFlag, &Result);
89   Result = (Result & Mask) | Data;
90   WriteMEM (Address, OpFlag, &Result);
91 }
92
93