Revision f930d07e hw/slavio_misc.c
b/hw/slavio_misc.c | ||
---|---|---|
76 | 76 |
|
77 | 77 |
MISC_DPRINTF("Power fail: %d, config: %d\n", power_failing, s->config); |
78 | 78 |
if (power_failing && (s->config & 0x8)) { |
79 |
s->aux2 |= 0x4;
|
|
79 |
s->aux2 |= 0x4;
|
|
80 | 80 |
} else { |
81 |
s->aux2 &= ~0x4;
|
|
81 |
s->aux2 &= ~0x4;
|
|
82 | 82 |
} |
83 | 83 |
slavio_misc_update_irq(s); |
84 | 84 |
} |
... | ... | |
89 | 89 |
|
90 | 90 |
switch (addr & 0xfff0000) { |
91 | 91 |
case 0x1800000: |
92 |
MISC_DPRINTF("Write config %2.2x\n", val & 0xff);
|
|
93 |
s->config = val & 0xff;
|
|
94 |
slavio_misc_update_irq(s);
|
|
95 |
break;
|
|
92 |
MISC_DPRINTF("Write config %2.2x\n", val & 0xff);
|
|
93 |
s->config = val & 0xff;
|
|
94 |
slavio_misc_update_irq(s);
|
|
95 |
break;
|
|
96 | 96 |
case 0x1900000: |
97 |
MISC_DPRINTF("Write aux1 %2.2x\n", val & 0xff);
|
|
98 |
s->aux1 = val & 0xff;
|
|
99 |
break;
|
|
97 |
MISC_DPRINTF("Write aux1 %2.2x\n", val & 0xff);
|
|
98 |
s->aux1 = val & 0xff;
|
|
99 |
break;
|
|
100 | 100 |
case 0x1910000: |
101 |
val &= 0x3;
|
|
102 |
MISC_DPRINTF("Write aux2 %2.2x\n", val);
|
|
103 |
val |= s->aux2 & 0x4;
|
|
104 |
if (val & 0x2) // Clear Power Fail int
|
|
105 |
val &= 0x1;
|
|
106 |
s->aux2 = val;
|
|
107 |
if (val & 1)
|
|
108 |
qemu_system_shutdown_request();
|
|
109 |
slavio_misc_update_irq(s);
|
|
110 |
break;
|
|
101 |
val &= 0x3;
|
|
102 |
MISC_DPRINTF("Write aux2 %2.2x\n", val);
|
|
103 |
val |= s->aux2 & 0x4;
|
|
104 |
if (val & 0x2) // Clear Power Fail int
|
|
105 |
val &= 0x1;
|
|
106 |
s->aux2 = val;
|
|
107 |
if (val & 1)
|
|
108 |
qemu_system_shutdown_request();
|
|
109 |
slavio_misc_update_irq(s);
|
|
110 |
break;
|
|
111 | 111 |
case 0x1a00000: |
112 |
MISC_DPRINTF("Write diag %2.2x\n", val & 0xff);
|
|
113 |
s->diag = val & 0xff;
|
|
114 |
break;
|
|
112 |
MISC_DPRINTF("Write diag %2.2x\n", val & 0xff);
|
|
113 |
s->diag = val & 0xff;
|
|
114 |
break;
|
|
115 | 115 |
case 0x1b00000: |
116 |
MISC_DPRINTF("Write modem control %2.2x\n", val & 0xff);
|
|
117 |
s->mctrl = val & 0xff;
|
|
118 |
break;
|
|
116 |
MISC_DPRINTF("Write modem control %2.2x\n", val & 0xff);
|
|
117 |
s->mctrl = val & 0xff;
|
|
118 |
break;
|
|
119 | 119 |
case 0x1f00000: |
120 |
MISC_DPRINTF("Write system control %2.2x\n", val & 0xff);
|
|
121 |
if (val & 1) {
|
|
122 |
s->sysctrl = 0x2;
|
|
123 |
qemu_system_reset_request();
|
|
124 |
}
|
|
125 |
break;
|
|
120 |
MISC_DPRINTF("Write system control %2.2x\n", val & 0xff);
|
|
121 |
if (val & 1) {
|
|
122 |
s->sysctrl = 0x2;
|
|
123 |
qemu_system_reset_request();
|
|
124 |
}
|
|
125 |
break;
|
|
126 | 126 |
case 0xa000000: |
127 |
MISC_DPRINTF("Write power management %2.2x\n", val & 0xff);
|
|
127 |
MISC_DPRINTF("Write power management %2.2x\n", val & 0xff);
|
|
128 | 128 |
cpu_interrupt(cpu_single_env, CPU_INTERRUPT_HALT); |
129 |
break;
|
|
129 |
break;
|
|
130 | 130 |
} |
131 | 131 |
} |
132 | 132 |
|
... | ... | |
137 | 137 |
|
138 | 138 |
switch (addr & 0xfff0000) { |
139 | 139 |
case 0x1800000: |
140 |
ret = s->config;
|
|
141 |
MISC_DPRINTF("Read config %2.2x\n", ret);
|
|
142 |
break;
|
|
140 |
ret = s->config;
|
|
141 |
MISC_DPRINTF("Read config %2.2x\n", ret);
|
|
142 |
break;
|
|
143 | 143 |
case 0x1900000: |
144 |
ret = s->aux1;
|
|
145 |
MISC_DPRINTF("Read aux1 %2.2x\n", ret);
|
|
146 |
break;
|
|
144 |
ret = s->aux1;
|
|
145 |
MISC_DPRINTF("Read aux1 %2.2x\n", ret);
|
|
146 |
break;
|
|
147 | 147 |
case 0x1910000: |
148 |
ret = s->aux2;
|
|
149 |
MISC_DPRINTF("Read aux2 %2.2x\n", ret);
|
|
150 |
break;
|
|
148 |
ret = s->aux2;
|
|
149 |
MISC_DPRINTF("Read aux2 %2.2x\n", ret);
|
|
150 |
break;
|
|
151 | 151 |
case 0x1a00000: |
152 |
ret = s->diag;
|
|
153 |
MISC_DPRINTF("Read diag %2.2x\n", ret);
|
|
154 |
break;
|
|
152 |
ret = s->diag;
|
|
153 |
MISC_DPRINTF("Read diag %2.2x\n", ret);
|
|
154 |
break;
|
|
155 | 155 |
case 0x1b00000: |
156 |
ret = s->mctrl;
|
|
157 |
MISC_DPRINTF("Read modem control %2.2x\n", ret);
|
|
158 |
break;
|
|
156 |
ret = s->mctrl;
|
|
157 |
MISC_DPRINTF("Read modem control %2.2x\n", ret);
|
|
158 |
break;
|
|
159 | 159 |
case 0x1f00000: |
160 |
MISC_DPRINTF("Read system control %2.2x\n", ret);
|
|
161 |
ret = s->sysctrl;
|
|
162 |
break;
|
|
160 |
MISC_DPRINTF("Read system control %2.2x\n", ret);
|
|
161 |
ret = s->sysctrl;
|
|
162 |
break;
|
|
163 | 163 |
case 0xa000000: |
164 |
MISC_DPRINTF("Read power management %2.2x\n", ret);
|
|
165 |
break;
|
|
164 |
MISC_DPRINTF("Read power management %2.2x\n", ret);
|
|
165 |
break;
|
|
166 | 166 |
} |
167 | 167 |
return ret; |
168 | 168 |
} |
Also available in: Unified diff