On Wed, Nov 11, 2015 at 11:27:50AM +1100, Benjamin Herrenschmidt wrote: > The existing implementation becomes the "ics-simple" subclass of ICS, > so there should be no change in behaviour for SPAPR. > > This will allow different implementations for the source controllers > such as the MSI support of PHB3 on Power8 which uses in-memory state > tables for example. > > Signed-off-by: Benjamin Herrenschmidt <[email protected]>
[snip]
> diff --git a/hw/intc/xics_spapr.c b/hw/intc/xics_spapr.c
> index fc331d8..f7d444a 100644
> --- a/hw/intc/xics_spapr.c
> +++ b/hw/intc/xics_spapr.c
> @@ -112,7 +112,7 @@ static void rtas_set_xive(PowerPCCPU *cpu,
> sPAPRMachineState *spapr,
> uint32_t nret, target_ulong rets)
> {
> ICSState *ics = QLIST_FIRST(&spapr->xics->ics);
> - uint32_t nr, server, priority;
> + uint32_t nr, src_no, server, priority;
Nit: elsewhere I use srcno without a _ for this value.
[snip]
> diff --git a/include/hw/ppc/xics.h b/include/hw/ppc/xics.h
> index 5acb329..93a627b 100644
> --- a/include/hw/ppc/xics.h
> +++ b/include/hw/ppc/xics.h
> @@ -116,6 +116,9 @@ struct ICPState {
> #define TYPE_ICS "ics"
> #define ICS(obj) OBJECT_CHECK(ICSState, (obj), TYPE_ICS)
>
> +#define TYPE_ICS_SIMPLE "ics-simple"
> +#define ICS_SIMPLE(obj) OBJECT_CHECK(ICSState, (obj), TYPE_ICS_SIMPLE)
Again, changing type names will break migration, I believe. So better
to leave this as ics and add "ics-base" and "ics-native" or similar.
> +
> #define TYPE_KVM_ICS "icskvm"
> #define KVM_ICS(obj) OBJECT_CHECK(ICSState, (obj), TYPE_KVM_ICS)
>
> @@ -129,6 +132,9 @@ struct ICSStateClass {
>
> void (*pre_save)(ICSState *s);
> int (*post_load)(ICSState *s, int version_id);
> + void (*reject)(ICSState *s, uint32_t irq);
> + void (*resend)(ICSState *s);
> + void (*eoi)(ICSState *s, uint32_t irq);
> };
>
> struct ICSState {
> @@ -184,10 +190,10 @@ uint32_t icp_accept(ICPState *ss);
> uint32_t icp_ipoll(ICPState *ss, uint32_t *mfrr);
> void icp_eoi(XICSState *icp, int server, uint32_t xirr);
>
> -void ics_write_xive(ICSState *ics, int nr, int server,
> - uint8_t priority, uint8_t saved_priority);
> +void ics_simple_write_xive(ICSState *ics, int nr, int server,
> + uint8_t priority, uint8_t saved_priority);
>
> -void ics_set_irq_type(ICSState *ics, int srcno, bool lsi);
> +void ics_simple_set_irq_type(ICSState *ics, int srcno, bool lsi);
>
> void xics_set_nr_servers(XICSState *icp, uint32_t nr_servers, Error **errp);
> ICSState *xics_find_source(XICSState *icp, int irq);
--
David Gibson | I'll have my music baroque, and my code
david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_
| _way_ _around_!
http://www.ozlabs.org/~dgibson
signature.asc
Description: PGP signature
