Diff for /qemu/hw/openpic.c between versions 1.1.1.4 and 1.1.1.5

version 1.1.1.4, 2018/04/24 16:52:25 version 1.1.1.5, 2018/04/24 17:23:28
Line 40 Line 40
 //#define DEBUG_OPENPIC  //#define DEBUG_OPENPIC
   
 #ifdef DEBUG_OPENPIC  #ifdef DEBUG_OPENPIC
 #define DPRINTF(fmt, args...) do { printf(fmt , ##args); } while (0)  #define DPRINTF(fmt, ...) do { printf(fmt , ## __VA_ARGS__); } while (0)
 #else  #else
 #define DPRINTF(fmt, args...) do { } while (0)  #define DPRINTF(fmt, ...) do { } while (0)
 #endif  #endif
 #define ERROR(fmr, args...) do { printf("ERROR: " fmr , ##args); } while (0)  
   
 #define USE_MPCxxx /* Intel model is broken, for now */  #define USE_MPCxxx /* Intel model is broken, for now */
   
Line 593  static void openpic_gbl_write (void *opa Line 592  static void openpic_gbl_write (void *opa
     IRQ_dst_t *dst;      IRQ_dst_t *dst;
     int idx;      int idx;
   
     DPRINTF("%s: addr %08x <= %08x\n", __func__, addr, val);      DPRINTF("%s: addr " TARGET_FMT_plx " <= %08x\n", __func__, addr, val);
     if (addr & 0xF)      if (addr & 0xF)
         return;          return;
 #if defined TARGET_WORDS_BIGENDIAN  #if defined TARGET_WORDS_BIGENDIAN
Line 652  static uint32_t openpic_gbl_read (void * Line 651  static uint32_t openpic_gbl_read (void *
     openpic_t *opp = opaque;      openpic_t *opp = opaque;
     uint32_t retval;      uint32_t retval;
   
     DPRINTF("%s: addr %08x\n", __func__, addr);      DPRINTF("%s: addr " TARGET_FMT_plx "\n", __func__, addr);
     retval = 0xFFFFFFFF;      retval = 0xFFFFFFFF;
     if (addr & 0xF)      if (addr & 0xF)
         return retval;          return retval;
Line 825  static void openpic_cpu_write (void *opa Line 824  static void openpic_cpu_write (void *opa
     IRQ_dst_t *dst;      IRQ_dst_t *dst;
     int idx, s_IRQ, n_IRQ;      int idx, s_IRQ, n_IRQ;
   
     DPRINTF("%s: addr %08x <= %08x\n", __func__, addr, val);      DPRINTF("%s: addr " TARGET_FMT_plx " <= %08x\n", __func__, addr, val);
     if (addr & 0xF)      if (addr & 0xF)
         return;          return;
 #if defined TARGET_WORDS_BIGENDIAN  #if defined TARGET_WORDS_BIGENDIAN
Line 887  static uint32_t openpic_cpu_read (void * Line 886  static uint32_t openpic_cpu_read (void *
     uint32_t retval;      uint32_t retval;
     int idx, n_IRQ;      int idx, n_IRQ;
   
     DPRINTF("%s: addr %08x\n", __func__, addr);      DPRINTF("%s: addr " TARGET_FMT_plx "\n", __func__, addr);
     retval = 0xFFFFFFFF;      retval = 0xFFFFFFFF;
     if (addr & 0xF)      if (addr & 0xF)
         return retval;          return retval;
Line 1047  static void openpic_map(PCIDevice *pci_d Line 1046  static void openpic_map(PCIDevice *pci_d
             addr + 0x20000, addr + 0x20000 + 0x1000 * MAX_CPU);              addr + 0x20000, addr + 0x20000 + 0x1000 * MAX_CPU);
     cpu_register_physical_memory(addr, 0x40000, opp->mem_index);      cpu_register_physical_memory(addr, 0x40000, opp->mem_index);
 #if 0 // Don't implement ISU for now  #if 0 // Don't implement ISU for now
     opp_io_memory = cpu_register_io_memory(0, openpic_src_read,      opp_io_memory = cpu_register_io_memory(openpic_src_read,
                                            openpic_src_write);                                             openpic_src_write);
     cpu_register_physical_memory(isu_base, 0x20 * (EXT_IRQ + 2),      cpu_register_physical_memory(isu_base, 0x20 * (EXT_IRQ + 2),
                                  opp_io_memory);                                   opp_io_memory);
Line 1209  qemu_irq *openpic_init (PCIBus *bus, int Line 1208  qemu_irq *openpic_init (PCIBus *bus, int
         pci_config_set_vendor_id(pci_conf, PCI_VENDOR_ID_IBM);          pci_config_set_vendor_id(pci_conf, PCI_VENDOR_ID_IBM);
         pci_config_set_device_id(pci_conf, PCI_DEVICE_ID_IBM_OPENPIC2);          pci_config_set_device_id(pci_conf, PCI_DEVICE_ID_IBM_OPENPIC2);
         pci_config_set_class(pci_conf, PCI_CLASS_SYSTEM_OTHER); // FIXME?          pci_config_set_class(pci_conf, PCI_CLASS_SYSTEM_OTHER); // FIXME?
         pci_conf[0x0e] = 0x00; // header_type          pci_conf[PCI_HEADER_TYPE] = PCI_HEADER_TYPE_NORMAL; // header_type
         pci_conf[0x3d] = 0x00; // no interrupt pin          pci_conf[0x3d] = 0x00; // no interrupt pin
   
         /* Register I/O spaces */          /* Register I/O spaces */
         pci_register_io_region((PCIDevice *)opp, 0, 0x40000,          pci_register_bar((PCIDevice *)opp, 0, 0x40000,
                                PCI_ADDRESS_SPACE_MEM, &openpic_map);                                 PCI_ADDRESS_SPACE_MEM, &openpic_map);
     } else {      } else {
         opp = qemu_mallocz(sizeof(openpic_t));          opp = qemu_mallocz(sizeof(openpic_t));
     }      }
     opp->mem_index = cpu_register_io_memory(0, openpic_read,      opp->mem_index = cpu_register_io_memory(openpic_read,
                                             openpic_write, opp);                                              openpic_write, opp);
   
     //    isu_base &= 0xFFFC0000;      //    isu_base &= 0xFFFC0000;
Line 1265  qemu_irq *openpic_init (PCIBus *bus, int Line 1264  qemu_irq *openpic_init (PCIBus *bus, int
 static void mpic_irq_raise(openpic_t *mpp, int n_CPU, IRQ_src_t *src)  static void mpic_irq_raise(openpic_t *mpp, int n_CPU, IRQ_src_t *src)
 {  {
     int n_ci = IDR_CI0 - n_CPU;      int n_ci = IDR_CI0 - n_CPU;
     DPRINTF("%s: cpu:%d irq:%d (testbit idr:%x ci:%d)\n", __func__,  
                     n_CPU, n_IRQ, mpp->src[n_IRQ].ide, n_ci);  
     if(test_bit(&src->ide, n_ci)) {      if(test_bit(&src->ide, n_ci)) {
         qemu_irq_raise(mpp->dst[n_CPU].irqs[OPENPIC_OUTPUT_CINT]);          qemu_irq_raise(mpp->dst[n_CPU].irqs[OPENPIC_OUTPUT_CINT]);
     }      }
Line 1314  static void mpic_timer_write (void *opaq Line 1312  static void mpic_timer_write (void *opaq
     openpic_t *mpp = opaque;      openpic_t *mpp = opaque;
     int idx, cpu;      int idx, cpu;
   
     DPRINTF("%s: addr %08x <= %08x\n", __func__, addr, val);      DPRINTF("%s: addr " TARGET_FMT_plx " <= %08x\n", __func__, addr, val);
     if (addr & 0xF)      if (addr & 0xF)
         return;          return;
     addr &= 0xFFFF;      addr &= 0xFFFF;
Line 1348  static uint32_t mpic_timer_read (void *o Line 1346  static uint32_t mpic_timer_read (void *o
     uint32_t retval;      uint32_t retval;
     int idx, cpu;      int idx, cpu;
   
     DPRINTF("%s: addr %08x\n", __func__, addr);      DPRINTF("%s: addr " TARGET_FMT_plx "\n", __func__, addr);
     retval = 0xFFFFFFFF;      retval = 0xFFFFFFFF;
     if (addr & 0xF)      if (addr & 0xF)
         return retval;          return retval;
Line 1383  static void mpic_src_ext_write (void *op Line 1381  static void mpic_src_ext_write (void *op
     openpic_t *mpp = opaque;      openpic_t *mpp = opaque;
     int idx = MPIC_EXT_IRQ;      int idx = MPIC_EXT_IRQ;
   
     DPRINTF("%s: addr %08x <= %08x\n", __func__, addr, val);      DPRINTF("%s: addr " TARGET_FMT_plx " <= %08x\n", __func__, addr, val);
     if (addr & 0xF)      if (addr & 0xF)
         return;          return;
   
Line 1406  static uint32_t mpic_src_ext_read (void  Line 1404  static uint32_t mpic_src_ext_read (void 
     uint32_t retval;      uint32_t retval;
     int idx = MPIC_EXT_IRQ;      int idx = MPIC_EXT_IRQ;
   
     DPRINTF("%s: addr %08x\n", __func__, addr);      DPRINTF("%s: addr " TARGET_FMT_plx "\n", __func__, addr);
     retval = 0xFFFFFFFF;      retval = 0xFFFFFFFF;
     if (addr & 0xF)      if (addr & 0xF)
         return retval;          return retval;
Line 1433  static void mpic_src_int_write (void *op Line 1431  static void mpic_src_int_write (void *op
     openpic_t *mpp = opaque;      openpic_t *mpp = opaque;
     int idx = MPIC_INT_IRQ;      int idx = MPIC_INT_IRQ;
   
     DPRINTF("%s: addr %08x <= %08x\n", __func__, addr, val);      DPRINTF("%s: addr " TARGET_FMT_plx " <= %08x\n", __func__, addr, val);
     if (addr & 0xF)      if (addr & 0xF)
         return;          return;
   
Line 1456  static uint32_t mpic_src_int_read (void  Line 1454  static uint32_t mpic_src_int_read (void 
     uint32_t retval;      uint32_t retval;
     int idx = MPIC_INT_IRQ;      int idx = MPIC_INT_IRQ;
   
     DPRINTF("%s: addr %08x\n", __func__, addr);      DPRINTF("%s: addr " TARGET_FMT_plx "\n", __func__, addr);
     retval = 0xFFFFFFFF;      retval = 0xFFFFFFFF;
     if (addr & 0xF)      if (addr & 0xF)
         return retval;          return retval;
Line 1483  static void mpic_src_msg_write (void *op Line 1481  static void mpic_src_msg_write (void *op
     openpic_t *mpp = opaque;      openpic_t *mpp = opaque;
     int idx = MPIC_MSG_IRQ;      int idx = MPIC_MSG_IRQ;
   
     DPRINTF("%s: addr %08x <= %08x\n", __func__, addr, val);      DPRINTF("%s: addr " TARGET_FMT_plx " <= %08x\n", __func__, addr, val);
     if (addr & 0xF)      if (addr & 0xF)
         return;          return;
   
Line 1506  static uint32_t mpic_src_msg_read (void  Line 1504  static uint32_t mpic_src_msg_read (void 
     uint32_t retval;      uint32_t retval;
     int idx = MPIC_MSG_IRQ;      int idx = MPIC_MSG_IRQ;
   
     DPRINTF("%s: addr %08x\n", __func__, addr);      DPRINTF("%s: addr " TARGET_FMT_plx "\n", __func__, addr);
     retval = 0xFFFFFFFF;      retval = 0xFFFFFFFF;
     if (addr & 0xF)      if (addr & 0xF)
         return retval;          return retval;
Line 1533  static void mpic_src_msi_write (void *op Line 1531  static void mpic_src_msi_write (void *op
     openpic_t *mpp = opaque;      openpic_t *mpp = opaque;
     int idx = MPIC_MSI_IRQ;      int idx = MPIC_MSI_IRQ;
   
     DPRINTF("%s: addr %08x <= %08x\n", __func__, addr, val);      DPRINTF("%s: addr " TARGET_FMT_plx " <= %08x\n", __func__, addr, val);
     if (addr & 0xF)      if (addr & 0xF)
         return;          return;
   
Line 1555  static uint32_t mpic_src_msi_read (void  Line 1553  static uint32_t mpic_src_msi_read (void 
     uint32_t retval;      uint32_t retval;
     int idx = MPIC_MSI_IRQ;      int idx = MPIC_MSI_IRQ;
   
     DPRINTF("%s: addr %08x\n", __func__, addr);      DPRINTF("%s: addr " TARGET_FMT_plx "\n", __func__, addr);
     retval = 0xFFFFFFFF;      retval = 0xFFFFFFFF;
     if (addr & 0xF)      if (addr & 0xF)
         return retval;          return retval;
Line 1688  qemu_irq *mpic_init (target_phys_addr_t  Line 1686  qemu_irq *mpic_init (target_phys_addr_t 
     for (i = 0; i < sizeof(list)/sizeof(list[0]); i++) {      for (i = 0; i < sizeof(list)/sizeof(list[0]); i++) {
         int mem_index;          int mem_index;
   
         mem_index = cpu_register_io_memory(0, list[i].read, list[i].write, mpp);          mem_index = cpu_register_io_memory(list[i].read, list[i].write, mpp);
         if (mem_index < 0) {          if (mem_index < 0) {
             goto free;              goto free;
         }          }

Removed from v.1.1.1.4  
changed lines
  Added in v.1.1.1.5


unix.superglobalmegacorp.com