ppc/xics: use the QOM interface under the sPAPR machine
Add 'ics_get' and 'ics_resend' handlers to the sPAPR machine. These are relatively simple for a single ICS. Signed-off-by: Cédric Le Goater <clg@kaod.org> Reviewed-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
		
							parent
							
								
									51b180051e
								
							
						
					
					
						commit
						7844e12b28
					
				| 
						 | 
				
			
			@ -193,7 +193,7 @@ static void ics_reject(ICSState *ics, uint32_t nr)
 | 
			
		|||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void ics_resend(ICSState *ics)
 | 
			
		||||
void ics_resend(ICSState *ics)
 | 
			
		||||
{
 | 
			
		||||
    ICSStateClass *k = ICS_BASE_GET_CLASS(ics);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2969,6 +2969,20 @@ static void spapr_phb_placement(sPAPRMachineState *spapr, uint32_t index,
 | 
			
		|||
    *mmio64 = SPAPR_PCI_BASE + (index + 1) * SPAPR_PCI_MEM64_WIN_SIZE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static ICSState *spapr_ics_get(XICSFabric *dev, int irq)
 | 
			
		||||
{
 | 
			
		||||
    sPAPRMachineState *spapr = SPAPR_MACHINE(dev);
 | 
			
		||||
 | 
			
		||||
    return ics_valid_irq(spapr->ics, irq) ? spapr->ics : NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void spapr_ics_resend(XICSFabric *dev)
 | 
			
		||||
{
 | 
			
		||||
    sPAPRMachineState *spapr = SPAPR_MACHINE(dev);
 | 
			
		||||
 | 
			
		||||
    ics_resend(spapr->ics);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void spapr_machine_class_init(ObjectClass *oc, void *data)
 | 
			
		||||
{
 | 
			
		||||
    MachineClass *mc = MACHINE_CLASS(oc);
 | 
			
		||||
| 
						 | 
				
			
			@ -2977,6 +2991,7 @@ static void spapr_machine_class_init(ObjectClass *oc, void *data)
 | 
			
		|||
    NMIClass *nc = NMI_CLASS(oc);
 | 
			
		||||
    HotplugHandlerClass *hc = HOTPLUG_HANDLER_CLASS(oc);
 | 
			
		||||
    PPCVirtualHypervisorClass *vhc = PPC_VIRTUAL_HYPERVISOR_CLASS(oc);
 | 
			
		||||
    XICSFabricClass *xic = XICS_FABRIC_CLASS(oc);
 | 
			
		||||
 | 
			
		||||
    mc->desc = "pSeries Logical Partition (PAPR compliant)";
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -3014,6 +3029,8 @@ static void spapr_machine_class_init(ObjectClass *oc, void *data)
 | 
			
		|||
    vhc->map_hptes = spapr_map_hptes;
 | 
			
		||||
    vhc->unmap_hptes = spapr_unmap_hptes;
 | 
			
		||||
    vhc->store_hpte = spapr_store_hpte;
 | 
			
		||||
    xic->ics_get = spapr_ics_get;
 | 
			
		||||
    xic->ics_resend = spapr_ics_resend;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const TypeInfo spapr_machine_info = {
 | 
			
		||||
| 
						 | 
				
			
			@ -3030,6 +3047,7 @@ static const TypeInfo spapr_machine_info = {
 | 
			
		|||
        { TYPE_NMI },
 | 
			
		||||
        { TYPE_HOTPLUG_HANDLER },
 | 
			
		||||
        { TYPE_PPC_VIRTUAL_HYPERVISOR },
 | 
			
		||||
        { TYPE_XICS_FABRIC },
 | 
			
		||||
        { }
 | 
			
		||||
    },
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -223,5 +223,6 @@ void ics_simple_write_xive(ICSState *ics, int nr, int server,
 | 
			
		|||
void ics_set_irq_type(ICSState *ics, int srcno, bool lsi);
 | 
			
		||||
 | 
			
		||||
ICSState *xics_find_source(XICSState *icp, int irq);
 | 
			
		||||
void ics_resend(ICSState *ics);
 | 
			
		||||
 | 
			
		||||
#endif /* XICS_H */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue