openpic: Move definition of openpic_reset
This patch moves the definition of openpic_reset after the various register read/write functions. No functional change. It is in preparation for using the register read/write functions in openpic_reset. Signed-off-by: Paul Janzen <pcj@pauljanzen.org> Signed-off-by: Alexander Graf <agraf@suse.de>
This commit is contained in:
parent
1e6ed54ef8
commit
8ebe65f361
@ -192,6 +192,7 @@ static uint32_t openpic_cpu_read_internal(void *opaque, hwaddr addr,
|
||||
int idx);
|
||||
static void openpic_cpu_write_internal(void *opaque, hwaddr addr,
|
||||
uint32_t val, int idx);
|
||||
static void openpic_reset(DeviceState *d);
|
||||
|
||||
typedef enum IRQType {
|
||||
IRQ_TYPE_NORMAL = 0,
|
||||
@ -529,55 +530,6 @@ static void openpic_set_irq(void *opaque, int n_IRQ, int level)
|
||||
}
|
||||
}
|
||||
|
||||
static void openpic_reset(DeviceState *d)
|
||||
{
|
||||
OpenPICState *opp = OPENPIC(d);
|
||||
int i;
|
||||
|
||||
opp->gcr = GCR_RESET;
|
||||
/* Initialise controller registers */
|
||||
opp->frr = ((opp->nb_irqs - 1) << FRR_NIRQ_SHIFT) |
|
||||
((opp->nb_cpus - 1) << FRR_NCPU_SHIFT) |
|
||||
(opp->vid << FRR_VID_SHIFT);
|
||||
|
||||
opp->pir = 0;
|
||||
opp->spve = -1 & opp->vector_mask;
|
||||
opp->tfrr = opp->tfrr_reset;
|
||||
/* Initialise IRQ sources */
|
||||
for (i = 0; i < opp->max_irq; i++) {
|
||||
opp->src[i].ivpr = opp->ivpr_reset;
|
||||
opp->src[i].idr = opp->idr_reset;
|
||||
|
||||
switch (opp->src[i].type) {
|
||||
case IRQ_TYPE_NORMAL:
|
||||
opp->src[i].level = !!(opp->ivpr_reset & IVPR_SENSE_MASK);
|
||||
break;
|
||||
|
||||
case IRQ_TYPE_FSLINT:
|
||||
opp->src[i].ivpr |= IVPR_POLARITY_MASK;
|
||||
break;
|
||||
|
||||
case IRQ_TYPE_FSLSPECIAL:
|
||||
break;
|
||||
}
|
||||
}
|
||||
/* Initialise IRQ destinations */
|
||||
for (i = 0; i < MAX_CPU; i++) {
|
||||
opp->dst[i].ctpr = 15;
|
||||
memset(&opp->dst[i].raised, 0, sizeof(IRQQueue));
|
||||
opp->dst[i].raised.next = -1;
|
||||
memset(&opp->dst[i].servicing, 0, sizeof(IRQQueue));
|
||||
opp->dst[i].servicing.next = -1;
|
||||
}
|
||||
/* Initialise timers */
|
||||
for (i = 0; i < OPENPIC_MAX_TMR; i++) {
|
||||
opp->timers[i].tccr = 0;
|
||||
opp->timers[i].tbcr = TBCR_CI;
|
||||
}
|
||||
/* Go out of RESET state */
|
||||
opp->gcr = 0;
|
||||
}
|
||||
|
||||
static inline uint32_t read_IRQreg_idr(OpenPICState *opp, int n_IRQ)
|
||||
{
|
||||
return opp->src[n_IRQ].idr;
|
||||
@ -1461,6 +1413,55 @@ static int openpic_load(QEMUFile* f, void *opaque, int version_id)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void openpic_reset(DeviceState *d)
|
||||
{
|
||||
OpenPICState *opp = OPENPIC(d);
|
||||
int i;
|
||||
|
||||
opp->gcr = GCR_RESET;
|
||||
/* Initialise controller registers */
|
||||
opp->frr = ((opp->nb_irqs - 1) << FRR_NIRQ_SHIFT) |
|
||||
((opp->nb_cpus - 1) << FRR_NCPU_SHIFT) |
|
||||
(opp->vid << FRR_VID_SHIFT);
|
||||
|
||||
opp->pir = 0;
|
||||
opp->spve = -1 & opp->vector_mask;
|
||||
opp->tfrr = opp->tfrr_reset;
|
||||
/* Initialise IRQ sources */
|
||||
for (i = 0; i < opp->max_irq; i++) {
|
||||
opp->src[i].ivpr = opp->ivpr_reset;
|
||||
opp->src[i].idr = opp->idr_reset;
|
||||
|
||||
switch (opp->src[i].type) {
|
||||
case IRQ_TYPE_NORMAL:
|
||||
opp->src[i].level = !!(opp->ivpr_reset & IVPR_SENSE_MASK);
|
||||
break;
|
||||
|
||||
case IRQ_TYPE_FSLINT:
|
||||
opp->src[i].ivpr |= IVPR_POLARITY_MASK;
|
||||
break;
|
||||
|
||||
case IRQ_TYPE_FSLSPECIAL:
|
||||
break;
|
||||
}
|
||||
}
|
||||
/* Initialise IRQ destinations */
|
||||
for (i = 0; i < MAX_CPU; i++) {
|
||||
opp->dst[i].ctpr = 15;
|
||||
memset(&opp->dst[i].raised, 0, sizeof(IRQQueue));
|
||||
opp->dst[i].raised.next = -1;
|
||||
memset(&opp->dst[i].servicing, 0, sizeof(IRQQueue));
|
||||
opp->dst[i].servicing.next = -1;
|
||||
}
|
||||
/* Initialise timers */
|
||||
for (i = 0; i < OPENPIC_MAX_TMR; i++) {
|
||||
opp->timers[i].tccr = 0;
|
||||
opp->timers[i].tbcr = TBCR_CI;
|
||||
}
|
||||
/* Go out of RESET state */
|
||||
opp->gcr = 0;
|
||||
}
|
||||
|
||||
typedef struct MemReg {
|
||||
const char *name;
|
||||
MemoryRegionOps const *ops;
|
||||
|
Loading…
Reference in New Issue
Block a user