Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / SLOF / board-js2x / llfw / hw.c
1 /******************************************************************************
2  * Copyright (c) 2004, 2008 IBM Corporation
3  * All rights reserved.
4  * This program and the accompanying materials
5  * are made available under the terms of the BSD License
6  * which accompanies this distribution, and is available at
7  * http://www.opensource.org/licenses/bsd-license.php
8  *
9  * Contributors:
10  *     IBM Corporation - initial implementation
11  *****************************************************************************/
12
13 #include <cpu.h>
14 #include <stdint.h>
15 #include <hw.h>
16
17 uint16_t
18 bswap16_load(uint64_t addr)
19 {
20         unsigned int val;
21         set_ci();
22         asm volatile ("lhbrx %0, 0, %1":"=r" (val):"r"(addr));
23         clr_ci();
24         return val;
25 }
26
27 uint32_t
28 bswap32_load(uint64_t addr)
29 {
30         unsigned int val;
31         set_ci();
32         asm volatile ("lwbrx %0, 0, %1":"=r" (val):"r"(addr));
33         clr_ci();
34         return val;
35 }
36
37 void
38 bswap16_store(uint64_t addr, uint16_t val)
39 {
40         set_ci();
41         asm volatile ("sthbrx %0, 0, %1"::"r" (val), "r"(addr));
42         clr_ci();
43 }
44
45 void
46 bswap32_store(uint64_t addr, uint32_t val)
47 {
48         set_ci();
49         asm volatile ("stwbrx %0, 0, %1"::"r" (val), "r"(addr));
50         clr_ci();
51 }
52
53 uint8_t
54 load8_ci(uint64_t addr)
55 {
56         uint8_t val;
57         set_ci();
58         val = *(uint8_t *) addr;
59         clr_ci();
60         return val;
61 }
62
63 uint16_t
64 load16_ci(uint64_t addr)
65 {
66         uint16_t val;
67         set_ci();
68         val = *(uint16_t *) addr;
69         clr_ci();
70         return val;
71 }
72
73 uint32_t
74 load32_ci(uint64_t addr)
75 {
76         uint32_t val;
77         set_ci();
78         val = *(uint32_t *) addr;
79         clr_ci();
80         return val;
81 }
82
83 uint64_t
84 load64_ci(uint64_t addr)
85 {
86         uint64_t val;
87         set_ci();
88         val = *(uint64_t *) addr;
89         clr_ci();
90         return val;
91 }
92
93
94 void
95 store8_ci(uint64_t addr, uint8_t val)
96 {
97         set_ci();
98         *(uint8_t *) addr = val;
99         clr_ci();
100 }
101
102 void
103 store16_ci(uint64_t addr, uint16_t val)
104 {
105         set_ci();
106         *(uint16_t *) addr = val;
107         clr_ci();
108 }
109
110 void
111 store32_ci(uint64_t addr, uint32_t val)
112 {
113         set_ci();
114         *(uint32_t *) addr = val;
115         clr_ci();
116 }
117
118 void
119 store64_ci(uint64_t addr, uint64_t val)
120 {
121         set_ci();
122         *(uint64_t *) addr = val;
123         clr_ci();
124 }