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 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]
 

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 205 of file PicIrqState.h.

◆ acknowledgedGeneration()

size_t PicIrqState::acknowledgedGeneration ( size_t  irq) const
inline

Definition at line 341 of file PicIrqState.h.

◆ acknowledgementPending()

bool PicIrqState::acknowledgementPending ( size_t  irq) const
inline

Definition at line 251 of file PicIrqState.h.

◆ beginDispatch()

size_t PicIrqState::beginDispatch ( size_t  irq)
inline

Definition at line 180 of file PicIrqState.h.

◆ beginLineTransition()

void PicIrqState::beginLineTransition ( size_t  irq)
inline

Definition at line 256 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 220 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 387 of file PicIrqState.h.

◆ canRegister() [1/2]

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

Definition at line 73 of file PicIrqState.h.

◆ canRegister() [2/2]

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

Definition at line 56 of file PicIrqState.h.

◆ canRegisterScheduler()

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

Definition at line 98 of file PicIrqState.h.

◆ canReservePciRoute()

bool PicIrqState::canReservePciRoute ( size_t  irq) const
inline

Definition at line 77 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 194 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 232 of file PicIrqState.h.

◆ controllerAck()

IrqControllerAck PicIrqState::controllerAck ( size_t  irq) const
inline

Definition at line 314 of file PicIrqState.h.

◆ delivery()

IrqDelivery PicIrqState::delivery ( size_t  irq) const
inline

Definition at line 288 of file PicIrqState.h.

◆ dispatchGeneration()

size_t PicIrqState::dispatchGeneration ( size_t  irq) const
inline

Definition at line 336 of file PicIrqState.h.

◆ edgeTriggered()

bool PicIrqState::edgeTriggered ( size_t  irq) const
inline

Definition at line 304 of file PicIrqState.h.

◆ enabled()

bool PicIrqState::enabled ( size_t  irq) const
inline

Definition at line 326 of file PicIrqState.h.

◆ finishLineTransition()

void PicIrqState::finishLineTransition ( size_t  irq)
inline

Definition at line 262 of file PicIrqState.h.

◆ generationReached()

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

Definition at line 391 of file PicIrqState.h.

◆ handlerCount()

size_t PicIrqState::handlerCount ( size_t  irq) const
inline

Definition at line 273 of file PicIrqState.h.

◆ handlerRegistered() [1/2]

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

Definition at line 142 of file PicIrqState.h.

◆ handlerRegistered() [2/2]

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

Definition at line 120 of file PicIrqState.h.

◆ handlerUnregistered() [1/2]

void PicIrqState::handlerUnregistered ( size_t  irq)
inline

Definition at line 173 of file PicIrqState.h.

◆ handlerUnregistered() [2/2]

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

Definition at line 146 of file PicIrqState.h.

◆ hardHandlerCount()

size_t PicIrqState::hardHandlerCount ( size_t  irq) const
inline

Definition at line 278 of file PicIrqState.h.

◆ legacyDelivery()

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

Definition at line 378 of file PicIrqState.h.

◆ lineRelease()

IrqLineRelease PicIrqState::lineRelease ( size_t  irq) const
inline

Definition at line 319 of file PicIrqState.h.

◆ lineTransitionPending()

bool PicIrqState::lineTransitionPending ( size_t  irq) const
inline

Definition at line 268 of file PicIrqState.h.

◆ mask()

uint16_t PicIrqState::mask ( ) const
inline

Definition at line 365 of file PicIrqState.h.

◆ masterMask()

uint8_t PicIrqState::masterMask ( ) const
inline

Definition at line 369 of file PicIrqState.h.

◆ pciRouteReserved()

bool PicIrqState::pciRouteReserved ( size_t  irq) const
inline

Definition at line 93 of file PicIrqState.h.

◆ rebuildMask()

void PicIrqState::rebuildMask ( )
inlineprivate

Definition at line 395 of file PicIrqState.h.

◆ requestedEnabled()

bool PicIrqState::requestedEnabled ( size_t  irq) const
inline

Definition at line 331 of file PicIrqState.h.

◆ reservePciRoute()

void PicIrqState::reservePciRoute ( size_t  irq)
inline

Platform routing outlives the drivers which register its callbacks.

Definition at line 83 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 115 of file PicIrqState.h.

◆ schedulerRegistered() [2/2]

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

Definition at line 103 of file PicIrqState.h.

◆ schedulerUnregistered()

void PicIrqState::schedulerUnregistered ( size_t  irq)
inline

Definition at line 109 of file PicIrqState.h.

◆ setAllEnabled()

void PicIrqState::setAllEnabled ( bool  enabled)
inline

Definition at line 352 of file PicIrqState.h.

◆ setEnabled()

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

Definition at line 346 of file PicIrqState.h.

◆ slaveMask()

uint8_t PicIrqState::slaveMask ( ) const
inline

Definition at line 373 of file PicIrqState.h.

◆ threadedHandlerCount()

size_t PicIrqState::threadedHandlerCount ( size_t  irq) const
inline

Definition at line 283 of file PicIrqState.h.

◆ threadedPending()

bool PicIrqState::threadedPending ( size_t  irq) const
inline

Definition at line 246 of file PicIrqState.h.

◆ trigger()

IrqTrigger PicIrqState::trigger ( size_t  irq) const
inline

Definition at line 309 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 418 of file PicIrqState.h.

◆ m_AcknowledgementPending

bool PicIrqState::m_AcknowledgementPending[LineCount]
private

Definition at line 419 of file PicIrqState.h.

◆ m_ControllerAck

IrqControllerAck PicIrqState::m_ControllerAck[LineCount]
private

Definition at line 414 of file PicIrqState.h.

◆ m_DispatchGenerations

size_t PicIrqState::m_DispatchGenerations[LineCount]
private

Definition at line 417 of file PicIrqState.h.

◆ m_HardHandlerCounts

size_t PicIrqState::m_HardHandlerCounts[LineCount]
private

Definition at line 415 of file PicIrqState.h.

◆ m_Mask

uint16_t PicIrqState::m_Mask
private

Definition at line 412 of file PicIrqState.h.

◆ m_PciRouteReserved

bool PicIrqState::m_PciRouteReserved[LineCount]
private

Definition at line 424 of file PicIrqState.h.

◆ m_RequestedEnabled

bool PicIrqState::m_RequestedEnabled[LineCount]
private

Definition at line 422 of file PicIrqState.h.

◆ m_SchedulerOwned

bool PicIrqState::m_SchedulerOwned[LineCount]
private

Definition at line 423 of file PicIrqState.h.

◆ m_ThreadedHandlerCounts

size_t PicIrqState::m_ThreadedHandlerCounts[LineCount]
private

Definition at line 416 of file PicIrqState.h.

◆ m_ThreadedPending

bool PicIrqState::m_ThreadedPending[LineCount]
private

Definition at line 420 of file PicIrqState.h.

◆ m_TransitionPending

bool PicIrqState::m_TransitionPending[LineCount]
private

Definition at line 421 of file PicIrqState.h.

◆ m_TriggerModes

TriggerMode PicIrqState::m_TriggerModes[LineCount]
private

Definition at line 413 of file PicIrqState.h.


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