~jderose/ubuntu/raring/qemu/vde-again

« back to all changes in this revision

Viewing changes to hw/slavio_misc.c

Tags: upstream-0.9.0+20070816
ImportĀ upstreamĀ versionĀ 0.9.0+20070816

Show diffs side-by-side

added added

removed removed

Lines of Context:
41
41
#endif
42
42
 
43
43
typedef struct MiscState {
44
 
    int irq;
 
44
    qemu_irq irq;
45
45
    uint8_t config;
46
46
    uint8_t aux1, aux2;
47
47
    uint8_t diag, mctrl, sysctrl;
48
48
} MiscState;
49
49
 
50
 
#define MISC_MAXADDR 1
 
50
#define MISC_SIZE 1
51
51
 
52
52
static void slavio_misc_update_irq(void *opaque)
53
53
{
54
54
    MiscState *s = opaque;
55
55
 
56
56
    if ((s->aux2 & 0x4) && (s->config & 0x8)) {
57
 
        pic_set_irq(s->irq, 1);
 
57
        MISC_DPRINTF("Raise IRQ\n");
 
58
        qemu_irq_raise(s->irq);
58
59
    } else {
59
 
        pic_set_irq(s->irq, 0);
 
60
        MISC_DPRINTF("Lower IRQ\n");
 
61
        qemu_irq_lower(s->irq);
60
62
    }
61
63
}
62
64
 
180
182
static void slavio_misc_save(QEMUFile *f, void *opaque)
181
183
{
182
184
    MiscState *s = opaque;
 
185
    int tmp;
183
186
 
184
 
    qemu_put_be32s(f, &s->irq);
 
187
    tmp = 0;
 
188
    qemu_put_be32s(f, &tmp); /* ignored, was IRQ.  */
185
189
    qemu_put_8s(f, &s->config);
186
190
    qemu_put_8s(f, &s->aux1);
187
191
    qemu_put_8s(f, &s->aux2);
193
197
static int slavio_misc_load(QEMUFile *f, void *opaque, int version_id)
194
198
{
195
199
    MiscState *s = opaque;
 
200
    int tmp;
196
201
 
197
202
    if (version_id != 1)
198
203
        return -EINVAL;
199
204
 
200
 
    qemu_get_be32s(f, &s->irq);
 
205
    qemu_get_be32s(f, &tmp);
201
206
    qemu_get_8s(f, &s->config);
202
207
    qemu_get_8s(f, &s->aux1);
203
208
    qemu_get_8s(f, &s->aux2);
207
212
    return 0;
208
213
}
209
214
 
210
 
void *slavio_misc_init(uint32_t base, int irq)
 
215
void *slavio_misc_init(target_phys_addr_t base, target_phys_addr_t power_base,
 
216
                       qemu_irq irq)
211
217
{
212
218
    int slavio_misc_io_memory;
213
219
    MiscState *s;
218
224
 
219
225
    slavio_misc_io_memory = cpu_register_io_memory(0, slavio_misc_mem_read, slavio_misc_mem_write, s);
220
226
    // Slavio control
221
 
    cpu_register_physical_memory(base + 0x1800000, MISC_MAXADDR, slavio_misc_io_memory);
 
227
    cpu_register_physical_memory(base + 0x1800000, MISC_SIZE,
 
228
                                 slavio_misc_io_memory);
222
229
    // AUX 1
223
 
    cpu_register_physical_memory(base + 0x1900000, MISC_MAXADDR, slavio_misc_io_memory);
 
230
    cpu_register_physical_memory(base + 0x1900000, MISC_SIZE,
 
231
                                 slavio_misc_io_memory);
224
232
    // AUX 2
225
 
    cpu_register_physical_memory(base + 0x1910000, MISC_MAXADDR, slavio_misc_io_memory);
 
233
    cpu_register_physical_memory(base + 0x1910000, MISC_SIZE,
 
234
                                 slavio_misc_io_memory);
226
235
    // Diagnostics
227
 
    cpu_register_physical_memory(base + 0x1a00000, MISC_MAXADDR, slavio_misc_io_memory);
 
236
    cpu_register_physical_memory(base + 0x1a00000, MISC_SIZE,
 
237
                                 slavio_misc_io_memory);
228
238
    // Modem control
229
 
    cpu_register_physical_memory(base + 0x1b00000, MISC_MAXADDR, slavio_misc_io_memory);
 
239
    cpu_register_physical_memory(base + 0x1b00000, MISC_SIZE,
 
240
                                 slavio_misc_io_memory);
230
241
    // System control
231
 
    cpu_register_physical_memory(base + 0x1f00000, MISC_MAXADDR, slavio_misc_io_memory);
 
242
    cpu_register_physical_memory(base + 0x1f00000, MISC_SIZE,
 
243
                                 slavio_misc_io_memory);
232
244
    // Power management
233
 
    cpu_register_physical_memory(base + 0xa000000, MISC_MAXADDR, slavio_misc_io_memory);
 
245
    cpu_register_physical_memory(power_base, MISC_SIZE, slavio_misc_io_memory);
234
246
 
235
247
    s->irq = irq;
236
248