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

#include <PicIrqState.h>

+ Collaboration diagram for PicIrqState:

Public Types

enum class  TriggerMode : uint8_t { Unconfigured , Level , Edge }
 

Public Member Functions

bool canRegister (size_t irq, const IrqPolicy &policy, IrqDelivery delivery) const
 
bool canRegister (size_t irq, const IrqPolicy &policy) const
 
bool canReservePciRoute (size_t irq) const
 
void reservePciRoute (size_t irq)
 
bool pciRouteReserved (size_t irq) const
 
bool canReserveIoApic (size_t irq) const
 
void reserveIoApic (size_t irq)
 
bool canRegisterScheduler (size_t irq, const IrqPolicy &policy) const
 
void schedulerRegistered (size_t irq, const IrqPolicy &policy)
 
void schedulerUnregistered (size_t irq)
 
bool schedulerRegistered (size_t irq) const
 
void handlerRegistered (size_t irq, const IrqPolicy &policy, IrqDelivery delivery)
 
void handlerRegistered (size_t irq, const IrqPolicy &policy)
 
void handlerUnregistered (size_t irq, IrqDelivery delivery)
 
void handlerUnregistered (size_t irq)
 
size_t beginDispatch (size_t irq)
 
void completeDispatch (size_t irq, size_t dispatchGeneration, bool needsAcknowledgement)
 
bool acknowledge (size_t irq)
 
void beginThreadedDispatch (size_t irq)
 
bool completeThreadedDispatch (size_t irq, size_t dispatchGeneration, bool allowRearm)
 
bool threadedPending (size_t irq) const
 
bool acknowledgementPending (size_t irq) const
 
void beginLineTransition (size_t irq)
 
void finishLineTransition (size_t irq)
 
bool lineTransitionPending (size_t irq) const
 
size_t handlerCount (size_t irq) const
 
size_t hardHandlerCount (size_t irq) const
 
size_t threadedHandlerCount (size_t irq) const
 
IrqDelivery delivery (size_t irq) const
 
bool edgeTriggered (size_t irq) const
 
IrqTrigger trigger (size_t irq) const
 
IrqControllerAck controllerAck (size_t irq) const
 
IrqLineRelease lineRelease (size_t irq) const
 
bool enabled (size_t irq) const
 
bool requestedEnabled (size_t irq) const
 
size_t dispatchGeneration (size_t irq) const
 
size_t acknowledgedGeneration (size_t irq) const
 
void setEnabled (size_t irq, bool enabled)
 
void setAllEnabled (bool enabled)
 
uint16_t mask () const
 
uint8_t masterMask () const
 
uint8_t slaveMask () const
 

Static Public Attributes

static constexpr size_t LineCount = 16
 
static constexpr size_t CascadeIrq = 2
 

Private Member Functions

void rebuildMask ()
 

Static Private Member Functions

static IrqDelivery legacyDelivery (const IrqPolicy &policy)
 
static uint16_t bit (size_t irq)
 
static bool generationReached (size_t current, size_t target)
 

Private Attributes

uint16_t m_Mask
 
TriggerMode m_TriggerModes [LineCount]
 
IrqControllerAck m_ControllerAck [LineCount]
 
size_t m_HardHandlerCounts [LineCount]
 
size_t m_ThreadedHandlerCounts [LineCount]
 
size_t m_DispatchGenerations [LineCount]
 
size_t m_AcknowledgedGenerations [LineCount]
 
bool m_AcknowledgementPending [LineCount]
 
bool m_ThreadedPending [LineCount]
 
bool m_TransitionPending [LineCount]
 
bool m_RequestedEnabled [LineCount]
 
bool m_SchedulerOwned [LineCount]
 
bool m_PciRouteReserved [LineCount]
 
bool m_IoApicReserved [LineCount]
 

Detailed Description

Software ownership state for the dual 8259 PIC.

The caller serialises every operation with controller-state ownership and writes the returned master/slave masks to hardware. Registration counts are updated independently of the callback registry's drain latency, so a new handler cannot be hidden by the final accounting step of an older unregister.

Definition at line 28 of file PicIrqState.h.

Member Enumeration Documentation

◆ TriggerMode

enum class PicIrqState::TriggerMode : uint8_t
strong

Definition at line 33 of file PicIrqState.h.

Constructor & Destructor Documentation

◆ PicIrqState()

PicIrqState::PicIrqState ( )
inline

Definition at line 39 of file PicIrqState.h.

Member Function Documentation

◆ acknowledge()

bool PicIrqState::acknowledge ( size_t  irq)
inline

Definition at line 219 of file PicIrqState.h.

◆ acknowledgedGeneration()

size_t PicIrqState::acknowledgedGeneration ( size_t  irq) const
inline

Definition at line 355 of file PicIrqState.h.

◆ acknowledgementPending()

bool PicIrqState::acknowledgementPending ( size_t  irq) const
inline

Definition at line 265 of file PicIrqState.h.

◆ beginDispatch()

size_t PicIrqState::beginDispatch ( size_t  irq)
inline

Definition at line 194 of file PicIrqState.h.

◆ beginLineTransition()

void PicIrqState::beginLineTransition ( size_t  irq)
inline

Definition at line 270 of file PicIrqState.h.

◆ beginThreadedDispatch()

void PicIrqState::beginThreadedDispatch ( size_t  irq)
inline

Applies a policy-requested mask until the bottom half completes.

Definition at line 234 of file PicIrqState.h.

Referenced by Pic::interrupt().

+ Here is the caller graph for this function:

◆ bit()

static uint16_t PicIrqState::bit ( size_t  irq)
inlinestaticprivate

Definition at line 401 of file PicIrqState.h.

◆ canRegister() [1/2]

bool PicIrqState::canRegister ( size_t  irq,
const IrqPolicy &  policy 
) const
inline

Definition at line 74 of file PicIrqState.h.

◆ canRegister() [2/2]

bool PicIrqState::canRegister ( size_t  irq,
const IrqPolicy &  policy,
IrqDelivery  delivery 
) const
inline

Definition at line 57 of file PicIrqState.h.

◆ canRegisterScheduler()

bool PicIrqState::canRegisterScheduler ( size_t  irq,
const IrqPolicy &  policy 
) const
inline

Definition at line 112 of file PicIrqState.h.

◆ canReserveIoApic()

bool PicIrqState::canReserveIoApic ( size_t  irq) const
inline

Definition at line 99 of file PicIrqState.h.

◆ canReservePciRoute()

bool PicIrqState::canReservePciRoute ( size_t  irq) const
inline

Definition at line 78 of file PicIrqState.h.

◆ completeDispatch()

void PicIrqState::completeDispatch ( size_t  irq,
size_t  dispatchGeneration,
bool  needsAcknowledgement 
)
inline

Completes a dispatch without losing an acknowledgement which raced the handler return. An acknowledgement covers every dispatch admitted before it observed the line.

Definition at line 208 of file PicIrqState.h.

Referenced by Pic::interrupt().

+ Here is the caller graph for this function:

◆ completeThreadedDispatch()

bool PicIrqState::completeThreadedDispatch ( size_t  irq,
size_t  dispatchGeneration,
bool  allowRearm 
)
inline

Completes the latest threaded batch. A stale batch cannot reopen a line which has since delivered another occurrence.

Definition at line 246 of file PicIrqState.h.

◆ controllerAck()

IrqControllerAck PicIrqState::controllerAck ( size_t  irq) const
inline

Definition at line 328 of file PicIrqState.h.

◆ delivery()

IrqDelivery PicIrqState::delivery ( size_t  irq) const
inline

Definition at line 302 of file PicIrqState.h.

◆ dispatchGeneration()

size_t PicIrqState::dispatchGeneration ( size_t  irq) const
inline

Definition at line 350 of file PicIrqState.h.

◆ edgeTriggered()

bool PicIrqState::edgeTriggered ( size_t  irq) const
inline

Definition at line 318 of file PicIrqState.h.

◆ enabled()

bool PicIrqState::enabled ( size_t  irq) const
inline

Definition at line 340 of file PicIrqState.h.

◆ finishLineTransition()

void PicIrqState::finishLineTransition ( size_t  irq)
inline

Definition at line 276 of file PicIrqState.h.

◆ generationReached()

static bool PicIrqState::generationReached ( size_t  current,
size_t  target 
)
inlinestaticprivate

Definition at line 405 of file PicIrqState.h.

◆ handlerCount()

size_t PicIrqState::handlerCount ( size_t  irq) const
inline

Definition at line 287 of file PicIrqState.h.

◆ handlerRegistered() [1/2]

void PicIrqState::handlerRegistered ( size_t  irq,
const IrqPolicy &  policy 
)
inline

Definition at line 156 of file PicIrqState.h.

◆ handlerRegistered() [2/2]

void PicIrqState::handlerRegistered ( size_t  irq,
const IrqPolicy &  policy,
IrqDelivery  delivery 
)
inline

Definition at line 134 of file PicIrqState.h.

◆ handlerUnregistered() [1/2]

void PicIrqState::handlerUnregistered ( size_t  irq)
inline

Definition at line 187 of file PicIrqState.h.

◆ handlerUnregistered() [2/2]

void PicIrqState::handlerUnregistered ( size_t  irq,
IrqDelivery  delivery 
)
inline

Definition at line 160 of file PicIrqState.h.

◆ hardHandlerCount()

size_t PicIrqState::hardHandlerCount ( size_t  irq) const
inline

Definition at line 292 of file PicIrqState.h.

◆ legacyDelivery()

static IrqDelivery PicIrqState::legacyDelivery ( const IrqPolicy &  policy)
inlinestaticprivate

Definition at line 392 of file PicIrqState.h.

◆ lineRelease()

IrqLineRelease PicIrqState::lineRelease ( size_t  irq) const
inline

Definition at line 333 of file PicIrqState.h.

◆ lineTransitionPending()

bool PicIrqState::lineTransitionPending ( size_t  irq) const
inline

Definition at line 282 of file PicIrqState.h.

◆ mask()

uint16_t PicIrqState::mask ( ) const
inline

Definition at line 379 of file PicIrqState.h.

◆ masterMask()

uint8_t PicIrqState::masterMask ( ) const
inline

Definition at line 383 of file PicIrqState.h.

◆ pciRouteReserved()

bool PicIrqState::pciRouteReserved ( size_t  irq) const
inline

Definition at line 94 of file PicIrqState.h.

◆ rebuildMask()

void PicIrqState::rebuildMask ( )
inlineprivate

Definition at line 409 of file PicIrqState.h.

◆ requestedEnabled()

bool PicIrqState::requestedEnabled ( size_t  irq) const
inline

Definition at line 345 of file PicIrqState.h.

◆ reserveIoApic()

void PicIrqState::reserveIoApic ( size_t  irq)
inline

The same input must never be enabled on both interrupt controllers.

Definition at line 105 of file PicIrqState.h.

◆ reservePciRoute()

void PicIrqState::reservePciRoute ( size_t  irq)
inline

Platform routing outlives the drivers which register its callbacks.

Definition at line 84 of file PicIrqState.h.

Referenced by Pic::reservePciRoute().

+ Here is the caller graph for this function:

◆ schedulerRegistered() [1/2]

bool PicIrqState::schedulerRegistered ( size_t  irq) const
inline

Definition at line 129 of file PicIrqState.h.

◆ schedulerRegistered() [2/2]

void PicIrqState::schedulerRegistered ( size_t  irq,
const IrqPolicy &  policy 
)
inline

Definition at line 117 of file PicIrqState.h.

◆ schedulerUnregistered()

void PicIrqState::schedulerUnregistered ( size_t  irq)
inline

Definition at line 123 of file PicIrqState.h.

◆ setAllEnabled()

void PicIrqState::setAllEnabled ( bool  enabled)
inline

Definition at line 366 of file PicIrqState.h.

◆ setEnabled()

void PicIrqState::setEnabled ( size_t  irq,
bool  enabled 
)
inline

Definition at line 360 of file PicIrqState.h.

◆ slaveMask()

uint8_t PicIrqState::slaveMask ( ) const
inline

Definition at line 387 of file PicIrqState.h.

◆ threadedHandlerCount()

size_t PicIrqState::threadedHandlerCount ( size_t  irq) const
inline

Definition at line 297 of file PicIrqState.h.

◆ threadedPending()

bool PicIrqState::threadedPending ( size_t  irq) const
inline

Definition at line 260 of file PicIrqState.h.

◆ trigger()

IrqTrigger PicIrqState::trigger ( size_t  irq) const
inline

Definition at line 323 of file PicIrqState.h.

Member Data Documentation

◆ CascadeIrq

constexpr size_t PicIrqState::CascadeIrq = 2
staticconstexpr

Definition at line 31 of file PicIrqState.h.

◆ LineCount

constexpr size_t PicIrqState::LineCount = 16
staticconstexpr

Definition at line 30 of file PicIrqState.h.

◆ m_AcknowledgedGenerations

size_t PicIrqState::m_AcknowledgedGenerations[LineCount]
private

Definition at line 433 of file PicIrqState.h.

◆ m_AcknowledgementPending

bool PicIrqState::m_AcknowledgementPending[LineCount]
private

Definition at line 434 of file PicIrqState.h.

◆ m_ControllerAck

IrqControllerAck PicIrqState::m_ControllerAck[LineCount]
private

Definition at line 429 of file PicIrqState.h.

◆ m_DispatchGenerations

size_t PicIrqState::m_DispatchGenerations[LineCount]
private

Definition at line 432 of file PicIrqState.h.

◆ m_HardHandlerCounts

size_t PicIrqState::m_HardHandlerCounts[LineCount]
private

Definition at line 430 of file PicIrqState.h.

◆ m_IoApicReserved

bool PicIrqState::m_IoApicReserved[LineCount]
private

Definition at line 440 of file PicIrqState.h.

◆ m_Mask

uint16_t PicIrqState::m_Mask
private

Definition at line 427 of file PicIrqState.h.

◆ m_PciRouteReserved

bool PicIrqState::m_PciRouteReserved[LineCount]
private

Definition at line 439 of file PicIrqState.h.

◆ m_RequestedEnabled

bool PicIrqState::m_RequestedEnabled[LineCount]
private

Definition at line 437 of file PicIrqState.h.

◆ m_SchedulerOwned

bool PicIrqState::m_SchedulerOwned[LineCount]
private

Definition at line 438 of file PicIrqState.h.

◆ m_ThreadedHandlerCounts

size_t PicIrqState::m_ThreadedHandlerCounts[LineCount]
private

Definition at line 431 of file PicIrqState.h.

◆ m_ThreadedPending

bool PicIrqState::m_ThreadedPending[LineCount]
private

Definition at line 435 of file PicIrqState.h.

◆ m_TransitionPending

bool PicIrqState::m_TransitionPending[LineCount]
private

Definition at line 436 of file PicIrqState.h.

◆ m_TriggerModes

TriggerMode PicIrqState::m_TriggerModes[LineCount]
private

Definition at line 428 of file PicIrqState.h.


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