On the one hand, users can interact with trap and interrupt tables
through methods provided by Shuttles and Processors. Thus,
Shuttle (see section
) and and Processor (see
section
) behave as a facade because they provide simple
entry points to handle both trap and interrupt tables.
On the other hand, individual events (trap and interrupt entries) are
exported to users by means of a wrapper class.
<Off event for users. >=
ENTRY class off_uEvent : public off_uHWResUnit {
public:
void set_handler( off_prtl_id_t h, const off_Rights &r);
off_prtl_id_t get_handler(const off_Rights &r) const;
};
Definesoff_uEvent(links are to index).
There is nothing specific for user traps as of this day.
<Off Trap for users. >=
ENTRY class off_uTrap : public off_uEvent {
public:
};
Definesoff_uTrap(links are to index).
On the other hand, interrupts export a few methods.
<Off Irq for users. >=
ENTRY class off_uIrq: public off_uEvent {
public:
void raise(const off_Rights &r);
void set_prty(off_pl_t prty, const off_Rights &r);
off_pl_t get_prty(const off_Rights &r) const;
};
Definesoff_uIrq(links are to index).
\subsection{Event \cpp{} source files}
Event table code is kept in hw/EventTbl.h and hw/EventTbl.C.
<EventTbl.h*>= <Read the literate code instead warning. > #ifndef __OFF_EVENT_TBL_H #define __OFF_EVENT_TBL_H 1 <Off event table dependencies. > #ifdef __KERNEL__ <Off event table. > <Off trap table. > <Off interrupt table. > #endif // __KERNEL__ #ifdef __KERNEL__ // Event table inline methods // <off_IntTbl::maskunmaskandis_maskedimplementation. > <off_TrapTbl::is_localimplementation. > <off_IntTbl::is_localimplementation. > <off_TrapTbl::get_allocatorimplementation. > <off_IntTbl::get_allocatorimplementation. > <off_IntTbl::deferimplementation. > <off_TrapTbl::operator +implementation. > <off_IntTbl::operator +implementation. > <off_IntTbl::get_vint0implementation. > <off_IntTbl::get_clkimplementation. > #endif // __KERNEL__ #endif // __OFF_EVENT_TBL_H
<EventTbl.C*>= <Read the literate code instead warning. > #include <hw/EventTbl.h> // Exported interface. <Off event table implementation dependencies. > <Off event table static members. > <off_TrapTbl::allocimplementation. > <off_TrapTbl::freeimplementation. > <off_IntTbl::allocimplementation. > <off_IntTbl::freeimplementation. > <off_TrapTbl::off_TrapTblimplementation. > <off_IntTbl::off_IntTblimplementation. > <off_TrapTbl::get_countimplementation. > <off_IntTbl::get_countimplementation. > <off_IntTbl::splimplementation. > <off_IntTbl::nameofimplementation. > <off_TrapTbl::nameofimplementation. > <off_TrapTbl::get_urlimplementation. > <off_IntTbl::get_urlimplementation. >
Events are kept in Event.h and hw/Event.C.
<Event.h*>= <Read the literate code instead warning. > #ifndef __OFF_EVENT_H #define __OFF_EVENT_H 1 <Off event dependencies. > <Off interrupt priority level data type. > <Off default priority levels. > #ifdef __KERNEL__ <Off event handler. > <Off event. > <Off Trap. > <Off Irq. > #endif // __KERNEL__ <Off null event handler. > #endif // __OFF_EVENT_H
<Event.C*>= <Read the literate code instead warning. > #include <hw/Event.h> // Exported interface. <Off event implementation dependencies. > <Off trap static members. > <Off interrupt static members. > <off_Event::get_countimplementation. > <off_Irq::off_Irqimplementation. > <off_Event::~off_Eventimplementation. > <off_Irq::~off_Irqimplementation. > <off_Event::get_handlerimplementation. > <off_Irq::set_prtyimplementation. > <off_Irq::get_prtyimplementation. > <off_Irq::deferredimplementation. > <off_KrnEventHandler::off_KrnEventHandlerimplementation. > <off_UsrEventHandler::off_UsrEventHandlerimplementation. > <off_Event::off_Eventimplementation. > <off_Event::set_handlerimplementation. > <off_Event::raiseimplementation. > <off_Trap::raiseimplementation. > <off_Irq::raiseimplementation. > <off_Trap::operator new/deleteimplementation. > <off_Irq::operator new/deleteimplementation. > <off_UsrEventHandler::operator()implementation. > <off_KrnEventHandler::operator()implementation. > <off_Irq::maskimplementation. > <off_Irq::unmaskimplementation. > <off_Irq::is_maskedimplementation. > <off_Irq::deferimplementation. > <off_Trap::copy_stateimplementation. > <off_Trap::restore_stateimplementation. > <off_Irq::copy_stateimplementation. > <off_Irq::restore_stateimplementation. > <off_Trap::get_url_holderimplementation. > <off_Irq::get_url_holderimplementation. >
The event allocator is kept in EvAllocator.h and
EvAllocator.C.
<EvAllocator.h*>= <Read the literate code instead warning. > #ifndef __OFF_EV_ALLOCATOR_H #define __OFF_EV_ALLOCATOR_H 1 <Off event allocator dependencies. > #ifdef __KERNEL__ <Off trap allocator. > <Off interrupt allocator. > #endif // __KERNEL__ #ifdef __KERNEL__ <off_TrapAllocator::operator +implementation. > <off_IntAllocator::operator +implementation. > #endif // __KERNEL__ #endif // __OFF_EV_ALLOCATOR_H
<EvAllocator.C*>= <Read the literate code instead warning. > #include <hw/EvAllocator.h> // Exported interface <Off trap allocator static members. > <Off interrupt allocator static members. >