Skip to content
  • David Gibson's avatar
    Implement the PAPR (pSeries) virtualized interrupt controller (xics) · b5cec4c5
    David Gibson authored
    
    
    PAPR defines an interrupt control architecture which is logically divided
    into ICS (Interrupt Control Presentation, each unit is responsible for
    presenting interrupts to a particular "interrupt server", i.e. CPU) and
    ICS (Interrupt Control Source, each unit responsible for one or more
    hardware interrupts as numbered globally across the system).  All PAPR
    virtual IO devices expect to deliver interrupts via this mechanism.  In
    Linux, this interrupt controller system is handled by the "xics" driver.
    
    On pSeries systems, access to the interrupt controller is virtualized via
    hypercalls and RTAS methods.  However, the virtualized interface is very
    similar to the underlying interrupt controller hardware, and similar PICs
    exist un-virtualized in some other systems.
    
    This patch implements both the ICP and ICS sides of the PAPR interrupt
    controller.  For now, only the hypercall virtualized interface is provided,
    however it would be relatively straightforward to graft an emulated
    register interface onto the underlying interrupt logic if we want to add
    a machine with a hardware ICS/ICP system in the future.
    
    There are some limitations in this implementation: it is assumed for now
    that only one instance of the ICS exists, although a full xics system can
    have several, each responsible for a different group of hardware irqs.
    ICP/ICS can handle both level-sensitve (LSI) and message signalled (MSI)
    interrupt inputs.  For now, this implementation supports only MSI
    interrupts, since that is used by PAPR virtual IO devices.
    
    Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
    Signed-off-by: default avatarDavid Gibson <dwg@au1.ibm.com>
    Signed-off-by: default avatarAlexander Graf <agraf@suse.de>
    b5cec4c5