Commit 1f163b14 authored by Andrzej Zaborowski's avatar Andrzej Zaborowski
Browse files

scoop: GPRR reports the state of GPIO lines (Dmitry Baryshkov).



Signed-off-by: default avatarDmitry Baryshkov <dbaryshkov@gmail.com>
Signed-off-by: default avatarAndrzej Zaborowski <andrew.zaborowski@intel.com>


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5615 c046a42c-6fe2-441c-8c8c-71466251a162
parent 86660795
Loading
Loading
Loading
Loading
+6 −9
Original line number Original line Diff line number Diff line
@@ -46,7 +46,6 @@ struct scoop_info_s {
    uint16_t irr;
    uint16_t irr;
    uint16_t imr;
    uint16_t imr;
    uint16_t isr;
    uint16_t isr;
    uint16_t gprr;
};
};


#define SCOOP_MCR	0x00
#define SCOOP_MCR	0x00
@@ -99,9 +98,8 @@ static uint32_t scoop_readb(void *opaque, target_phys_addr_t addr)
    case SCOOP_GPCR:
    case SCOOP_GPCR:
        return s->gpio_dir;
        return s->gpio_dir;
    case SCOOP_GPWR:
    case SCOOP_GPWR:
        return s->gpio_level;
    case SCOOP_GPRR:
    case SCOOP_GPRR:
        return s->gprr;
        return s->gpio_level;
    default:
    default:
        zaurus_printf("Bad register offset " REG_FMT "\n", addr);
        zaurus_printf("Bad register offset " REG_FMT "\n", addr);
    }
    }
@@ -144,12 +142,10 @@ static void scoop_writeb(void *opaque, target_phys_addr_t addr, uint32_t value)
        scoop_gpio_handler_update(s);
        scoop_gpio_handler_update(s);
        break;
        break;
    case SCOOP_GPWR:
    case SCOOP_GPWR:
    case SCOOP_GPRR:	/* GPRR is probably R/O in real HW */
        s->gpio_level = value & s->gpio_dir;
        s->gpio_level = value & s->gpio_dir;
        scoop_gpio_handler_update(s);
        scoop_gpio_handler_update(s);
        break;
        break;
    case SCOOP_GPRR:
        s->gprr = value;
        break;
    default:
    default:
        zaurus_printf("Bad register offset " REG_FMT "\n", addr);
        zaurus_printf("Bad register offset " REG_FMT "\n", addr);
    }
    }
@@ -205,11 +201,11 @@ static void scoop_save(QEMUFile *f, void *opaque)
    qemu_put_be16s(f, &s->irr);
    qemu_put_be16s(f, &s->irr);
    qemu_put_be16s(f, &s->imr);
    qemu_put_be16s(f, &s->imr);
    qemu_put_be16s(f, &s->isr);
    qemu_put_be16s(f, &s->isr);
    qemu_put_be16s(f, &s->gprr);
}
}


static int scoop_load(QEMUFile *f, void *opaque, int version_id)
static int scoop_load(QEMUFile *f, void *opaque, int version_id)
{
{
    uint16_t dummy;
    struct scoop_info_s *s = (struct scoop_info_s *) opaque;
    struct scoop_info_s *s = (struct scoop_info_s *) opaque;
    qemu_get_be16s(f, &s->status);
    qemu_get_be16s(f, &s->status);
    qemu_get_be16s(f, &s->power);
    qemu_get_be16s(f, &s->power);
@@ -222,7 +218,8 @@ static int scoop_load(QEMUFile *f, void *opaque, int version_id)
    qemu_get_be16s(f, &s->irr);
    qemu_get_be16s(f, &s->irr);
    qemu_get_be16s(f, &s->imr);
    qemu_get_be16s(f, &s->imr);
    qemu_get_be16s(f, &s->isr);
    qemu_get_be16s(f, &s->isr);
    qemu_get_be16s(f, &s->gprr);
    if (version_id < 1)
	    qemu_get_be16s(f, &dummy);


    return 0;
    return 0;
}
}
@@ -243,7 +240,7 @@ struct scoop_info_s *scoop_init(struct pxa2xx_state_s *cpu,
    iomemtype = cpu_register_io_memory(0, scoop_readfn,
    iomemtype = cpu_register_io_memory(0, scoop_readfn,
                    scoop_writefn, s);
                    scoop_writefn, s);
    cpu_register_physical_memory(s->target_base, 0x1000, iomemtype);
    cpu_register_physical_memory(s->target_base, 0x1000, iomemtype);
    register_savevm("scoop", instance, 0, scoop_save, scoop_load, s);
    register_savevm("scoop", instance, 1, scoop_save, scoop_load, s);


    return s;
    return s;
}
}