Diff for /qemu/hw/openpic.c between versions 1.1.1.1 and 1.1.1.2

version 1.1.1.1, 2018/04/24 16:37:52 version 1.1.1.2, 2018/04/24 16:39:08
Line 159  typedef struct IRQ_dst_t { Line 159  typedef struct IRQ_dst_t {
     uint32_t pcsr; /* CPU sensitivity register */      uint32_t pcsr; /* CPU sensitivity register */
     IRQ_queue_t raised;      IRQ_queue_t raised;
     IRQ_queue_t servicing;      IRQ_queue_t servicing;
     CPUState *env; /* Needed if we did SMP */      CPUState *env;
 } IRQ_dst_t;  } IRQ_dst_t;
   
 struct openpic_t {  struct openpic_t {
Line 265  static void IRQ_local_pipe (openpic_t *o Line 265  static void IRQ_local_pipe (openpic_t *o
     if (priority > dst->raised.priority) {      if (priority > dst->raised.priority) {
         IRQ_get_next(opp, &dst->raised);          IRQ_get_next(opp, &dst->raised);
         DPRINTF("Raise CPU IRQ\n");          DPRINTF("Raise CPU IRQ\n");
         cpu_interrupt(cpu_single_env, CPU_INTERRUPT_HARD);          cpu_interrupt(dst->env, CPU_INTERRUPT_HARD);
     }      }
 }  }
   
Line 532  static void openpic_gbl_write (void *opa Line 532  static void openpic_gbl_write (void *opa
         /* XXX: Should be able to reset any CPU */          /* XXX: Should be able to reset any CPU */
         if (val & 1) {          if (val & 1) {
             DPRINTF("Reset CPU IRQ\n");              DPRINTF("Reset CPU IRQ\n");
             //            cpu_interrupt(cpu_single_env, CPU_INTERRUPT_RESET);              //            cpu_interrupt(first_cpu, CPU_INTERRUPT_RESET);
         }          }
         break;          break;
 #if MAX_IPI > 0  #if MAX_IPI > 0
Line 781  static void openpic_cpu_write (void *opa Line 781  static void openpic_cpu_write (void *opa
             src = &opp->src[n_IRQ];              src = &opp->src[n_IRQ];
             if (IPVP_PRIORITY(src->ipvp) > dst->servicing.priority) {              if (IPVP_PRIORITY(src->ipvp) > dst->servicing.priority) {
                 DPRINTF("Raise CPU IRQ\n");                  DPRINTF("Raise CPU IRQ\n");
                 cpu_interrupt(cpu_single_env, CPU_INTERRUPT_HARD);                  cpu_interrupt(dst->env, CPU_INTERRUPT_HARD);
             }              }
         }          }
         break;          break;
Line 963  static void openpic_map(PCIDevice *pci_d Line 963  static void openpic_map(PCIDevice *pci_d
 #endif  #endif
 }  }
   
 openpic_t *openpic_init (PCIBus *bus, int *pmem_index, int nb_cpus)  openpic_t *openpic_init (PCIBus *bus, int *pmem_index, int nb_cpus,
                            CPUPPCState **envp)
 {  {
     openpic_t *opp;      openpic_t *opp;
     uint8_t *pci_conf;      uint8_t *pci_conf;
Line 1017  openpic_t *openpic_init (PCIBus *bus, in Line 1018  openpic_t *openpic_init (PCIBus *bus, in
     for (; i < MAX_IRQ; i++) {      for (; i < MAX_IRQ; i++) {
         opp->src[i].type = IRQ_INTERNAL;          opp->src[i].type = IRQ_INTERNAL;
     }      }
       for (i = 0; i < nb_cpus; i++)
           opp->dst[i].env = envp[i];
     openpic_reset(opp);      openpic_reset(opp);
     if (pmem_index)      if (pmem_index)
         *pmem_index = opp->mem_index;          *pmem_index = opp->mem_index;

Removed from v.1.1.1.1  
changed lines
  Added in v.1.1.1.2


unix.superglobalmegacorp.com