Revision 1f163b14 hw/zaurus.c

b/hw/zaurus.c
46 46
    uint16_t irr;
47 47
    uint16_t imr;
48 48
    uint16_t isr;
49
    uint16_t gprr;
50 49
};
51 50

  
52 51
#define SCOOP_MCR	0x00
......
99 98
    case SCOOP_GPCR:
100 99
        return s->gpio_dir;
101 100
    case SCOOP_GPWR:
102
        return s->gpio_level;
103 101
    case SCOOP_GPRR:
104
        return s->gprr;
102
        return s->gpio_level;
105 103
    default:
106 104
        zaurus_printf("Bad register offset " REG_FMT "\n", addr);
107 105
    }
......
144 142
        scoop_gpio_handler_update(s);
145 143
        break;
146 144
    case SCOOP_GPWR:
145
    case SCOOP_GPRR:	/* GPRR is probably R/O in real HW */
147 146
        s->gpio_level = value & s->gpio_dir;
148 147
        scoop_gpio_handler_update(s);
149 148
        break;
150
    case SCOOP_GPRR:
151
        s->gprr = value;
152
        break;
153 149
    default:
154 150
        zaurus_printf("Bad register offset " REG_FMT "\n", addr);
155 151
    }
......
205 201
    qemu_put_be16s(f, &s->irr);
206 202
    qemu_put_be16s(f, &s->imr);
207 203
    qemu_put_be16s(f, &s->isr);
208
    qemu_put_be16s(f, &s->gprr);
209 204
}
210 205

  
211 206
static int scoop_load(QEMUFile *f, void *opaque, int version_id)
212 207
{
208
    uint16_t dummy;
213 209
    struct scoop_info_s *s = (struct scoop_info_s *) opaque;
214 210
    qemu_get_be16s(f, &s->status);
215 211
    qemu_get_be16s(f, &s->power);
......
222 218
    qemu_get_be16s(f, &s->irr);
223 219
    qemu_get_be16s(f, &s->imr);
224 220
    qemu_get_be16s(f, &s->isr);
225
    qemu_get_be16s(f, &s->gprr);
221
    if (version_id < 1)
222
	    qemu_get_be16s(f, &dummy);
226 223

  
227 224
    return 0;
228 225
}
......
243 240
    iomemtype = cpu_register_io_memory(0, scoop_readfn,
244 241
                    scoop_writefn, s);
245 242
    cpu_register_physical_memory(s->target_base, 0x1000, iomemtype);
246
    register_savevm("scoop", instance, 0, scoop_save, scoop_load, s);
243
    register_savevm("scoop", instance, 1, scoop_save, scoop_load, s);
247 244

  
248 245
    return s;
249 246
}

Also available in: Unified diff