The Pedigree Project 0.1
Classes | Public Member Functions | Static Public Member Functions | Private Types | Private Member Functions | Static Private Member Functions | Private Attributes | Static Private Attributes | List of all members
Pic Class Reference

#include <Pic.h>

+ Inheritance diagram for Pic:
+ Collaboration diagram for Pic:

Classes

class  HardStateGuard
 
class  StateGuard
 

Public Member Functions

bool reservePciRoute (uint8_t irq)
 
EXPORTED_PUBLIC bool hasIoApic () const
 
EXPORTED_PUBLIC bool reservePciGsi (uint32_t gsi, bool activeLow)
 
virtual irq_id_t registerIsaIrqHandler (uint8_t irq, IrqHandler *handler, const IrqPolicy &policy)
 
virtual irq_id_t registerPciIrqHandler (IrqHandler *handler, Device *pDevice, const IrqPolicy &policy)
 
virtual irq_id_t registerHardIsaIrqHandler (uint8_t irq, HardIrqHandler *handler, const IrqPolicy &policy)
 
virtual irq_id_t registerHardPciIrqHandler (HardIrqHandler *handler, Device *pDevice, const IrqPolicy &policy)
 
irq_id_t registerPciMessageIrqHandler (IrqHandler *handler, Device *device, const IrqPolicy &intxFallbackPolicy) override
 
bool registerPciMsixIrqHandlers (Device *device, IrqHandler *const *handlers, size_t count, irq_id_t *ids, bool &fallbackSafe, const size_t *processors=nullptr) override
 
irq_id_t registerHardPciMessageIrqHandler (HardIrqHandler *handler, Device *device, const IrqPolicy &intxFallbackPolicy) override
 
virtual irq_id_t registerSchedulerIrqHandler (uint8_t irq, SchedulerIrqHandler *handler, const IrqPolicy &policy)
 
virtual bool unregisterSchedulerIrqHandler (irq_id_t Id, SchedulerIrqHandler *handler)
 
virtual bool unregisterHandler (irq_id_t Id, IrqHandlerBase *handler)
 
virtual size_t snapshotIrqLines (IrqLineDiagnosticSnapshot *out, size_t capacity) const
 
bool initialise () INITIALISATION_ONLY
 
bool initialiseThreaded ()
 
bool shutdownThreaded ()
 
virtual void tick ()
 
virtual bool control (uint8_t irq, ControlCode code, size_t argument)
 

Static Public Member Functions

static Pic & instance ()
 

Private Types

enum  FailClosedReason : uint8_t { HardHandoffQuarantine = 1U << 0 , ThreadedPublicationQuarantine = 1U << 1 , UnhandledQuarantine = 1U << 2 , ControllerContentionQuarantine = 1U << 3 }
 

Private Member Functions

 Pic () INITIALISATION_ONLY
 
virtual ~Pic ()
 
 Pic (const Pic &)
 
Pic & operator= (const Pic &)
 
virtual void interrupt (size_t interruptNumber, InterruptState &state)
 
bool drainOnePendingControllerBatchLocked ()
 
void drainPendingControllerActionsLocked ()
 
void releaseControllerState ()
 
void releaseControllerStateFromInterrupt ()
 
bool handControllerStateToWorker ()
 
void finishDeferredLineTransitionsLocked ()
 
void clearControllerTemporaryMaskLocked (uint16_t restoreMask=0xFFFF)
 
uint16_t effectiveMaskLocked () const
 
void beginLineTransitionLocked (uint8_t irq)
 
void finishLineTransitionLocked (uint8_t irq)
 
void finishHandlerUnregisterLocked (uint8_t irq, IrqHandlerRegistry::UnregisterResult result, IrqHandlerRegistry::LineMode removedDelivery)
 
bool claimPciTriggerLocked (uint8_t irq)
 
void restorePciTriggerLocked (uint8_t irq)
 
void admitThreadedOccurrenceLocked (uint8_t irq)
 
void finishHardDispatchLocked (const PicHardTailRecord &record)
 
void finishHardDispatchFromInterrupt (const PicHardTailRecord &record)
 
size_t advanceThreadedCookieLocked (uint8_t irq)
 
void publishDiagnosticLineLocked (uint8_t irq)
 
void publishAllDiagnosticLinesLocked ()
 
void eoiLocked (uint8_t irq)
 
void applyMaskLocked ()
 
void setEnabledLocked (uint8_t irq, bool enable)
 
void enable (uint8_t irq, bool enable)
 
void enableAll (bool enable)
 
bool spuriousLocked (size_t irq)
 
virtual ~InterruptHandler ()
 

Static Private Member Functions

static void dispatchThreadedLine (void *context, uint8_t irq, size_t cookie)
 

Private Attributes

IoPort m_SlavePort
 
IoPort m_MasterPort
 
IoPort m_ElcrPort
 
uint16_t m_OwnedElcr
 
uint16_t m_OriginalElcr
 
IrqHandlerRegistry m_Handlers
 
SchedulerIrqHandler * m_SchedulerIrqHandler
 
PicIrqState m_IrqState
 
PicControllerStateGate m_ControllerStateGate
 
PicHardTailQueue m_HardTailQueue
 
Mutex m_ControllerThreadMutex
 
ThreadedIrqDispatcher m_ThreadedDispatcher
 
size_t m_ThreadedCookies [PicIrqState::LineCount]
 
size_t m_ThreadedDispatchGenerations [PicIrqState::LineCount]
 
size_t m_HardStageGenerations [PicIrqState::LineCount]
 
bool m_ThreadedHadHardStage [PicIrqState::LineCount]
 
bool m_ThreadedHardAdmitted [PicIrqState::LineCount]
 
HardIrqDisposition m_ThreadedHardDisposition [PicIrqState::LineCount]
 
bool m_ThreadedHardVetoRecovery [PicIrqState::LineCount]
 
size_t m_ThreadedHardVetoRecoveryGenerations [PicIrqState::LineCount]
 
uint8_t m_FailClosedReasons [PicIrqState::LineCount]
 
size_t m_ThreadedPublicationFailures [PicIrqState::LineCount]
 
size_t m_RemovalRejections [PicIrqState::LineCount]
 
size_t m_ControllerContentions [PicIrqState::LineCount]
 
size_t m_ControllerPromptAttempts
 
size_t m_ControllerPromptFailures
 
size_t m_ControllerPromptDestination
 
size_t m_ControllerPromptState
 
uint16_t m_ControllerTemporaryMask
 
uint16_t m_AppliedControllerMask
 
uint16_t m_DeferredLineTransitions
 
size_t m_DeliveryProcessor
 
uint8_t m_DeliveryApicId
 
IrqDiagnosticSnapshotStore< PicIrqState::LineCount > m_Diagnostics
 
size_t m_UnregisterReservations [PicIrqState::LineCount]
 
bool m_ShuttingDown
 
size_t m_IrqCount [16]
 
size_t m_SpuriousIrqCount [16]
 
size_t m_UnhandledIrqCount [16]
 
bool m_MitigatedIrqs [16]
 
size_t m_MitigationThreshold [16]
 

Static Private Attributes

static constexpr uint8_t ControllerWorkLine = PicIrqState::LineCount
 
static EXPORTED_PUBLIC Pic m_Instance
 

Additional Inherited Members

- Public Types inherited from IrqManager
enum  ControlCode { MitigationThreshold }
 
- Protected Member Functions inherited from IrqManager
 IrqManager ()
 
virtual ~IrqManager ()
 

Detailed Description

The x86/x64 programmable interrupt controller as IrqManager

Definition at line 52 of file Pic.h.

Member Enumeration Documentation

◆ FailClosedReason

enum Pic::FailClosedReason : uint8_t
private

Definition at line 152 of file Pic.h.

Constructor & Destructor Documentation

◆ Pic() [1/2]

Pic::Pic ( )
private

The default constructor

Definition at line 800 of file Pic.cc.

◆ ~Pic()

virtual Pic::~Pic ( )
inlineprivatevirtual

The destructor

Definition at line 113 of file Pic.h.

◆ Pic() [2/2]

Pic::Pic ( const Pic &  )
private

The copy-constructor

Note
NOT implemented

Member Function Documentation

◆ admitThreadedOccurrenceLocked()

void Pic::admitThreadedOccurrenceLocked ( uint8_t  irq)
private

Definition at line 1297 of file Pic.cc.

◆ advanceThreadedCookieLocked()

size_t Pic::advanceThreadedCookieLocked ( uint8_t  irq)
private

Definition at line 982 of file Pic.cc.

◆ applyMaskLocked()

void Pic::applyMaskLocked ( )
private

Definition at line 1816 of file Pic.cc.

◆ beginLineTransitionLocked()

void Pic::beginLineTransitionLocked ( uint8_t  irq)
private

Definition at line 991 of file Pic.cc.

◆ claimPciTriggerLocked()

bool Pic::claimPciTriggerLocked ( uint8_t  irq)
private

Definition at line 299 of file Pic.cc.

◆ clearControllerTemporaryMaskLocked()

void Pic::clearControllerTemporaryMaskLocked ( uint16_t  restoreMask = 0xFFFF)
private

Definition at line 1853 of file Pic.cc.

◆ control()

bool Pic::control ( uint8_t  irq,
ControlCode  code,
size_t  argument 
)
virtual

Controls specific elements of a given IRQ

Reimplemented from IrqManager.

Definition at line 144 of file Pic.cc.

References LIKELY, m_IrqState, m_MitigationThreshold, and UNLIKELY.

◆ dispatchThreadedLine()

void Pic::dispatchThreadedLine ( void *  context,
uint8_t  irq,
size_t  cookie 
)
staticprivate

Definition at line 1695 of file Pic.cc.

◆ drainOnePendingControllerBatchLocked()

bool Pic::drainOnePendingControllerBatchLocked ( )
private

Definition at line 1038 of file Pic.cc.

◆ drainPendingControllerActionsLocked()

void Pic::drainPendingControllerActionsLocked ( )
private

Definition at line 1179 of file Pic.cc.

◆ effectiveMaskLocked()

uint16_t Pic::effectiveMaskLocked ( ) const
private

Definition at line 1834 of file Pic.cc.

◆ enable()

void Pic::enable ( uint8_t  irq,
bool  enable 
)
privatevirtual

Implements IrqManager.

Definition at line 1876 of file Pic.cc.

◆ enableAll()

void Pic::enableAll ( bool  enable)
private

Definition at line 1906 of file Pic.cc.

◆ eoiLocked()

void Pic::eoiLocked ( uint8_t  irq)
private

Definition at line 1805 of file Pic.cc.

◆ finishDeferredLineTransitionsLocked()

void Pic::finishDeferredLineTransitionsLocked ( )
private

Definition at line 1838 of file Pic.cc.

◆ finishHandlerUnregisterLocked()

void Pic::finishHandlerUnregisterLocked ( uint8_t  irq,
IrqHandlerRegistry::UnregisterResult  result,
IrqHandlerRegistry::LineMode  removedDelivery 
)
private

Definition at line 523 of file Pic.cc.

◆ finishHardDispatchFromInterrupt()

void Pic::finishHardDispatchFromInterrupt ( const PicHardTailRecord &  record)
private

Definition at line 1672 of file Pic.cc.

◆ finishHardDispatchLocked()

void Pic::finishHardDispatchLocked ( const PicHardTailRecord &  record)
private

Definition at line 1533 of file Pic.cc.

◆ finishLineTransitionLocked()

void Pic::finishLineTransitionLocked ( uint8_t  irq)
private

Definition at line 999 of file Pic.cc.

◆ handControllerStateToWorker()

bool Pic::handControllerStateToWorker ( )
private

Definition at line 1184 of file Pic.cc.

◆ hasIoApic()

bool Pic::hasIoApic ( ) const

Definition at line 256 of file Pic.cc.

◆ initialise()

bool Pic::initialise ( )

Initialises the PIC hardware and registers the interrupts with the InterruptManager.

Returns
true, if successfull, false otherwise

Definition at line 648 of file Pic.cc.

References IoPort::allocate(), ProcessorBase::index(), InterruptManager::instance(), m_ControllerContentions, m_DeliveryProcessor, m_IrqCount, m_MasterPort, m_MitigatedIrqs, m_MitigationThreshold, m_SlavePort, m_SpuriousIrqCount, m_UnhandledIrqCount, InterruptManager::registerInterruptHandler(), and IoPort::write8().

Referenced by Pc::initialise().

+ Here is the caller graph for this function:

◆ initialiseThreaded()

bool Pic::initialiseThreaded ( )

◆ instance()

static Pic & Pic::instance ( )
inlinestatic

Get the Pic class instance

Returns
the Pic class instance

Definition at line 56 of file Pic.h.

References m_Instance.

Referenced by Pc::deinitialise(), Pc::initialise(), and Pc::initialise3().

+ Here is the caller graph for this function:

◆ interrupt()

void Pic::interrupt ( size_t  nInterruptNumber,
InterruptState &  state 
)
privatevirtual

◆ operator=()

Pic & Pic::operator= ( const Pic &  )
private

The assignment operator

Note
NOT implemented

References interrupt().

◆ publishAllDiagnosticLinesLocked()

void Pic::publishAllDiagnosticLinesLocked ( )
private

Definition at line 922 of file Pic.cc.

◆ publishDiagnosticLineLocked()

void Pic::publishDiagnosticLineLocked ( uint8_t  irq)
private

Definition at line 852 of file Pic.cc.

◆ registerHardIsaIrqHandler()

irq_id_t Pic::registerHardIsaIrqHandler ( uint8_t  irq,
HardIrqHandler *  handler,
const IrqPolicy &  policy 
)
virtual

Register an ISA handler which must run in hard IRQ context.

Implements IrqManager.

Definition at line 200 of file Pic.cc.

References Dec, m_FailClosedReasons, m_Handlers, m_IrqState, m_ShuttingDown, m_UnregisterReservations, IrqHandlerRegistry::registerHardHandler(), and UNLIKELY.

◆ registerHardPciIrqHandler()

irq_id_t Pic::registerHardPciIrqHandler ( HardIrqHandler *  handler,
Device *  pDevice,
const IrqPolicy &  policy 
)
virtual

Register a PCI handler which must run in hard IRQ context.

Implements IrqManager.

Definition at line 381 of file Pic.cc.

References Dec, Device::getInterruptNumber(), m_FailClosedReasons, m_Handlers, m_IrqState, m_ShuttingDown, m_UnregisterReservations, IrqHandlerRegistry::registerHardHandler(), and UNLIKELY.

Referenced by registerHardPciMessageIrqHandler().

+ Here is the caller graph for this function:

◆ registerHardPciMessageIrqHandler()

irq_id_t Pic::registerHardPciMessageIrqHandler ( HardIrqHandler *  handler,
Device *  pDevice,
const IrqPolicy &  intxFallbackPolicy 
)
overridevirtual

Prefer a PCI message interrupt for a hard handler, with an INTx fallback.

Reimplemented from IrqManager.

Definition at line 467 of file Pic.cc.

References registerHardPciIrqHandler().

◆ registerIsaIrqHandler()

irq_id_t Pic::registerIsaIrqHandler ( uint8_t  irq,
IrqHandler *  handler,
const IrqPolicy &  policy 
)
virtual

Register an ISA irq

Parameters
[in]irqthe ISA irq number (from 0 to 15)
[in]handlerpointer to the IrqHandler class
[in]policyelectrical, acknowledgement, and completion policy
Returns
the irq's identifier

Implements IrqManager.

Definition at line 167 of file Pic.cc.

References Dec, m_FailClosedReasons, m_Handlers, m_IrqState, m_ShuttingDown, m_ThreadedDispatcher, m_UnregisterReservations, IrqHandlerRegistry::registerThreadedHandler(), and UNLIKELY.

◆ registerPciIrqHandler()

irq_id_t Pic::registerPciIrqHandler ( IrqHandler *  handler,
Device *  pDevice,
const IrqPolicy &  policy 
)
virtual

Register a PCI irq

Implements IrqManager.

Definition at line 329 of file Pic.cc.

References Dec, Device::getInterruptNumber(), m_FailClosedReasons, m_Handlers, m_IrqState, m_ShuttingDown, m_ThreadedDispatcher, m_UnregisterReservations, IrqHandlerRegistry::registerThreadedHandler(), and UNLIKELY.

Referenced by registerPciMessageIrqHandler().

+ Here is the caller graph for this function:

◆ registerPciMessageIrqHandler()

irq_id_t Pic::registerPciMessageIrqHandler ( IrqHandler *  handler,
Device *  pDevice,
const IrqPolicy &  intxFallbackPolicy 
)
overridevirtual

Prefer a PCI message interrupt, falling back to INTx with the given policy.

Reimplemented from IrqManager.

Definition at line 433 of file Pic.cc.

References registerPciIrqHandler().

◆ registerPciMsixIrqHandlers()

bool Pic::registerPciMsixIrqHandlers ( Device *  device,
IrqHandler *const *  handlers,
size_t  count,
irq_id_t *  ids,
bool &  fallbackSafe,
const size_t *  processors = nullptr 
)
overridevirtual

Register distinct MSI-X entries as one group. Failure permits a fallback only when fallbackSafe is true. Optional dense processor indices are placement hints; platforms without affinity support may retain their default destination.

Reimplemented from IrqManager.

Definition at line 455 of file Pic.cc.

◆ registerSchedulerIrqHandler()

irq_id_t Pic::registerSchedulerIrqHandler ( uint8_t  irq,
SchedulerIrqHandler *  handler,
const IrqPolicy &  policy 
)
virtual

Install the platform's dedicated scheduler-timer interrupt source.

Unlike a generic hard handler, this callback is the terminal action for an occurrence and is allowed to abandon its interrupt frame. Platforms which do not provide a direct scheduler route reject the request.

Reimplemented from IrqManager.

Definition at line 489 of file Pic.cc.

References m_IrqState, m_SchedulerIrqHandler, m_ShuttingDown, and m_UnregisterReservations.

◆ releaseControllerState()

void Pic::releaseControllerState ( )
private

Definition at line 1192 of file Pic.cc.

◆ releaseControllerStateFromInterrupt()

void Pic::releaseControllerStateFromInterrupt ( )
private

Definition at line 1259 of file Pic.cc.

◆ reservePciGsi()

bool Pic::reservePciGsi ( uint32_t  gsi,
bool  activeLow 
)

Definition at line 264 of file Pic.cc.

◆ reservePciRoute()

bool Pic::reservePciRoute ( uint8_t  irq)

Retains a motherboard PCI route's level trigger for the rest of boot.

Definition at line 232 of file Pic.cc.

References m_IrqState, m_ShuttingDown, m_UnregisterReservations, panic(), IoPort::read8(), and PicIrqState::reservePciRoute().

◆ restorePciTriggerLocked()

void Pic::restorePciTriggerLocked ( uint8_t  irq)
private

Definition at line 317 of file Pic.cc.

◆ setEnabledLocked()

void Pic::setEnabledLocked ( uint8_t  irq,
bool  enable 
)
private

Definition at line 1871 of file Pic.cc.

◆ shutdownThreaded()

bool Pic::shutdownThreaded ( )

◆ snapshotIrqLines()

size_t Pic::snapshotIrqLines ( IrqLineDiagnosticSnapshot *  out,
size_t  capacity 
) const
virtual

◆ spuriousLocked()

bool Pic::spuriousLocked ( size_t  irq)
private

Handle a potentially-spurious IRQ while the PIC lock is held.

Definition at line 1020 of file Pic.cc.

References m_MasterPort, m_SlavePort, IoPort::read8(), and IoPort::write8().

Referenced by interrupt().

+ Here is the caller graph for this function:

◆ tick()

void Pic::tick ( )
virtual

Called every millisecond, typically handles IRQ mitigation.

Reimplemented from IrqManager.

Definition at line 142 of file Pic.cc.

◆ unregisterHandler()

bool Pic::unregisterHandler ( irq_id_t  Id,
IrqHandlerBase *  handler 
)
virtual

Unregister a previously registered IrqHandler.

A successful return is an ownership barrier: no callback can begin or remain active for the handler. A callback cannot synchronously remove itself, and an atomic context cannot wait for an active callback; those requests return false.

Parameters
[in]Idthe irq's identifier
Returns
true if removal completed synchronously

Implements IrqManager.

Definition at line 592 of file Pic.cc.

References ProcessorBase::executionContext(), m_Handlers, m_IrqState, m_UnregisterReservations, and IrqHandlerRegistry::unregisterHandler().

◆ unregisterSchedulerIrqHandler()

bool Pic::unregisterSchedulerIrqHandler ( irq_id_t  Id,
SchedulerIrqHandler *  handler 
)
virtual

Stop admitting future callbacks for the exact scheduler source. The source must be quiesced first unless removal synchronously masks its controller line. Its handler has static machine lifetime because an already-admitted callback may not return.

Reimplemented from IrqManager.

Definition at line 507 of file Pic.cc.

References m_IrqState, and m_SchedulerIrqHandler.

Member Data Documentation

◆ ControllerWorkLine

constexpr uint8_t Pic::ControllerWorkLine = PicIrqState::LineCount
staticconstexprprivate

Definition at line 130 of file Pic.h.

◆ m_AppliedControllerMask

uint16_t Pic::m_AppliedControllerMask
private

Last mask written to hardware, including physical-only overrides.

Definition at line 223 of file Pic.h.

◆ m_ControllerContentions

size_t Pic::m_ControllerContentions[PicIrqState::LineCount]
private

Hard entries/tails which could not immediately own controller state.

Definition at line 214 of file Pic.h.

Referenced by initialise(), and snapshotIrqLines().

◆ m_ControllerPromptAttempts

size_t Pic::m_ControllerPromptAttempts
private

Lock-free controller-worker prompt state for stopped-world diagnosis.

Definition at line 216 of file Pic.h.

Referenced by snapshotIrqLines().

◆ m_ControllerPromptDestination

size_t Pic::m_ControllerPromptDestination
private

Definition at line 218 of file Pic.h.

◆ m_ControllerPromptFailures

size_t Pic::m_ControllerPromptFailures
private

Definition at line 217 of file Pic.h.

◆ m_ControllerPromptState

size_t Pic::m_ControllerPromptState
private

Definition at line 219 of file Pic.h.

◆ m_ControllerStateGate

PicControllerStateGate Pic::m_ControllerStateGate
private

Non-blocking hard-entry ownership and terminal-action handoff.

Definition at line 189 of file Pic.h.

Referenced by interrupt().

◆ m_ControllerTemporaryMask

uint16_t Pic::m_ControllerTemporaryMask
private

Physical-only masks retained until the BSP can release atomically.

Definition at line 221 of file Pic.h.

◆ m_ControllerThreadMutex

Mutex Pic::m_ControllerThreadMutex
private

Sleeps competing threads so a preempted gate owner can run again.

Definition at line 193 of file Pic.h.

◆ m_DeferredLineTransitions

uint16_t Pic::m_DeferredLineTransitions
private

Lifetimes published by the BSP immediately before physical unmask.

Definition at line 225 of file Pic.h.

Referenced by shutdownThreaded().

◆ m_DeliveryApicId

uint8_t Pic::m_DeliveryApicId
private

Physical LAPIC destination captured with the BSP worker scheduler.

Definition at line 229 of file Pic.h.

Referenced by initialiseThreaded().

◆ m_DeliveryProcessor

size_t Pic::m_DeliveryProcessor
private

Stable BSP index rebound after processor topology initialisation.

Definition at line 227 of file Pic.h.

Referenced by initialise(), initialiseThreaded(), interrupt(), and shutdownThreaded().

◆ m_Diagnostics

IrqDiagnosticSnapshotStore<PicIrqState::LineCount> Pic::m_Diagnostics
private

Per-line immutable diagnostic publications.

Definition at line 231 of file Pic.h.

Referenced by snapshotIrqLines().

◆ m_ElcrPort

IoPort Pic::m_ElcrPort
private

Definition at line 172 of file Pic.h.

◆ m_FailClosedReasons

uint8_t Pic::m_FailClosedReasons[PicIrqState::LineCount]
private

Reasons which must remain masked until their owning lifetime ends.

Definition at line 209 of file Pic.h.

Referenced by interrupt(), registerHardIsaIrqHandler(), registerHardPciIrqHandler(), registerIsaIrqHandler(), registerPciIrqHandler(), and shutdownThreaded().

◆ m_Handlers

IrqHandlerRegistry Pic::m_Handlers
private

◆ m_HardStageGenerations

size_t Pic::m_HardStageGenerations[PicIrqState::LineCount]
private

Invalidates an old hard result after its final callback lifetime ends.

Definition at line 201 of file Pic.h.

Referenced by interrupt(), and shutdownThreaded().

◆ m_HardTailQueue

PicHardTailQueue Pic::m_HardTailQueue
private

Complete hard results which could not immediately reclaim ownership.

Definition at line 191 of file Pic.h.

◆ m_Instance

Pic Pic::m_Instance
staticprivate

The Pic instance

Definition at line 247 of file Pic.h.

Referenced by instance().

◆ m_IrqCount

size_t Pic::m_IrqCount[16]
private

IRQ counts for given handlers

Definition at line 237 of file Pic.h.

Referenced by initialise(), interrupt(), and snapshotIrqLines().

◆ m_IrqState

PicIrqState Pic::m_IrqState
private

◆ m_MasterPort

IoPort Pic::m_MasterPort
private

The master PIC I/O Port range

Definition at line 171 of file Pic.h.

Referenced by initialise(), interrupt(), and spuriousLocked().

◆ m_MitigatedIrqs

bool Pic::m_MitigatedIrqs[16]
private

Mitigated IRQs

Definition at line 243 of file Pic.h.

Referenced by initialise().

◆ m_MitigationThreshold

size_t Pic::m_MitigationThreshold[16]
private

Mitigation thresholds

Definition at line 245 of file Pic.h.

Referenced by control(), and initialise().

◆ m_OriginalElcr

uint16_t Pic::m_OriginalElcr
private

Definition at line 174 of file Pic.h.

◆ m_OwnedElcr

uint16_t Pic::m_OwnedElcr
private

Definition at line 173 of file Pic.h.

◆ m_RemovalRejections

size_t Pic::m_RemovalRejections[PicIrqState::LineCount]
private

Definition at line 212 of file Pic.h.

◆ m_SchedulerIrqHandler

SchedulerIrqHandler* Pic::m_SchedulerIrqHandler
private

Dedicated IRQ0 callback which may abandon its interrupt frame.

Definition at line 185 of file Pic.h.

Referenced by interrupt(), registerSchedulerIrqHandler(), and unregisterSchedulerIrqHandler().

◆ m_ShuttingDown

bool Pic::m_ShuttingDown
private

Closes registration and re-enable paths before worker shutdown.

Definition at line 235 of file Pic.h.

Referenced by registerHardIsaIrqHandler(), registerHardPciIrqHandler(), registerIsaIrqHandler(), registerPciIrqHandler(), registerSchedulerIrqHandler(), reservePciRoute(), and shutdownThreaded().

◆ m_SlavePort

IoPort Pic::m_SlavePort
private

The slave PIC I/O Port range

Definition at line 169 of file Pic.h.

Referenced by initialise(), and spuriousLocked().

◆ m_SpuriousIrqCount

size_t Pic::m_SpuriousIrqCount[16]
private

Architecturally spurious or disabled in-flight occurrences.

Definition at line 239 of file Pic.h.

Referenced by initialise(), interrupt(), and snapshotIrqLines().

◆ m_ThreadedCookies

size_t Pic::m_ThreadedCookies[PicIrqState::LineCount]
private

Invalidates queued work when a physical line changes ownership.

Definition at line 197 of file Pic.h.

◆ m_ThreadedDispatcher

ThreadedIrqDispatcher Pic::m_ThreadedDispatcher
private

Stable per-line workers plus one controller-continuation worker.

Definition at line 195 of file Pic.h.

Referenced by initialiseThreaded(), registerIsaIrqHandler(), registerPciIrqHandler(), shutdownThreaded(), and snapshotIrqLines().

◆ m_ThreadedDispatchGenerations

size_t Pic::m_ThreadedDispatchGenerations[PicIrqState::LineCount]
private

PIC dispatch generation associated with each queued cookie.

Definition at line 199 of file Pic.h.

Referenced by interrupt(), and shutdownThreaded().

◆ m_ThreadedHadHardStage

bool Pic::m_ThreadedHadHardStage[PicIrqState::LineCount]
private

Hard-stage outcome folded into the matching mixed worker batch.

Definition at line 203 of file Pic.h.

Referenced by interrupt(), and shutdownThreaded().

◆ m_ThreadedHardAdmitted

bool Pic::m_ThreadedHardAdmitted[PicIrqState::LineCount]
private

Definition at line 204 of file Pic.h.

◆ m_ThreadedHardDisposition

HardIrqDisposition Pic::m_ThreadedHardDisposition[PicIrqState::LineCount]
private

Definition at line 205 of file Pic.h.

◆ m_ThreadedHardVetoRecovery

bool Pic::m_ThreadedHardVetoRecovery[PicIrqState::LineCount]
private

Definition at line 206 of file Pic.h.

◆ m_ThreadedHardVetoRecoveryGenerations

size_t Pic::m_ThreadedHardVetoRecoveryGenerations[PicIrqState::LineCount]
private

Definition at line 207 of file Pic.h.

◆ m_ThreadedPublicationFailures

size_t Pic::m_ThreadedPublicationFailures[PicIrqState::LineCount]
private

Atomic diagnostics for work rejected after dispatcher closure.

Definition at line 211 of file Pic.h.

Referenced by interrupt(), and snapshotIrqLines().

◆ m_UnhandledIrqCount

size_t Pic::m_UnhandledIrqCount[16]
private

Occurrences for which no callback accepted ownership.

Definition at line 241 of file Pic.h.

Referenced by initialise(), interrupt(), and snapshotIrqLines().

◆ m_UnregisterReservations

size_t Pic::m_UnregisterReservations[PicIrqState::LineCount]
private

Unregister operations which have not completed line accounting.

Definition at line 233 of file Pic.h.

Referenced by registerHardIsaIrqHandler(), registerHardPciIrqHandler(), registerIsaIrqHandler(), registerPciIrqHandler(), registerSchedulerIrqHandler(), reservePciRoute(), and unregisterHandler().


The documentation for this class was generated from the following files: