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

#include <InterruptManager.h>

+ Inheritance diagram for ARMV7InterruptManager:
+ Collaboration diagram for ARMV7InterruptManager:

Public Member Functions

virtual bool registerInterruptHandler (size_t interruptNumber, InterruptHandler *handler)
 
virtual bool registerInterruptHandlerDebugger (size_t interruptNumber, InterruptHandler *handler)
 
virtual size_t getBreakpointInterruptNumber () PURE
 
virtual size_t getDebugInterruptNumber () PURE
 
virtual bool registerSyscallHandler (Service_t Service, SyscallHandler *handler)
 
virtual uintptr_t syscall (Service_t service, uintptr_t function, uintptr_t p1=0, uintptr_t p2=0, uintptr_t p3=0, uintptr_t p4=0, uintptr_t p5=0)
 

Static Public Member Functions

static ARMV7InterruptManagerinstance ()
 
static void initialiseProcessor ()
 
static void interrupt (InterruptState &interruptState)
 
- Static Public Member Functions inherited from InterruptManager
static InterruptManagerinstance ()
 
- Static Public Member Functions inherited from SyscallManager
static EXPORTED_PUBLIC SyscallManagerinstance ()
 

Private Types

enum  Registers {
  INTCPS_REVISION = 0x00, INTCPS_SYSCONFIG = 0x10 / 4, INTCPS_SYSSTATUS = 0x14 / 4, INTCPS_SIR_IRQ = 0x40 / 4,
  INTCPS_SIR_FIQ = 0x44 / 4, INTCPS_CONTROL = 0x48 / 4, INTCPS_PROTECTION = 0x4C / 4, INTCPS_IDLE = 0x50 / 4,
  INTCPS_IRQ_PRIORITY = 0x60 / 4, INTCPS_FIQ_PRIORITY = 0x64 / 4, INTCPS_THRESHOLD = 0x68 / 4, INTCPS_ITR = 0x80 / 4,
  INTCPS_MIR = 0x84 / 4, INTCPS_MIR_CLEAR = 0x88 / 4, INTCPS_MIR_SET = 0x8C / 4, INTCPS_ISR_SET = 0x90 / 4,
  INTCPS_ISR_CLEAR = 0x94 / 4, INTCPS_PENDING_IRQ = 0x98 / 4, INTCPS_PENDING_FIQ = 0x9C / 4, INTCPS_ILR = 0x100 / 4
}
 

Private Member Functions

 ARMV7InterruptManager ()
 
 ARMV7InterruptManager (const ARMV7InterruptManager &)
 
ARMV7InterruptManageroperator= (const ARMV7InterruptManager &)
 
virtual ~ARMV7InterruptManager ()
 

Private Attributes

InterruptHandlerm_Handler [256]
 
InterruptHandlerm_DbgHandler [256]
 
SyscallHandlerm_SyscallHandler [serviceEnd]
 

Static Private Attributes

static MemoryRegion m_MPUINTCRegion
 
static ARMV7InterruptManager m_Instance
 

Additional Inherited Members

- Protected Member Functions inherited from InterruptManager
 InterruptManager ()
 
virtual ~InterruptManager ()
 
- Protected Member Functions inherited from SyscallManager
 SyscallManager ()
 
virtual ~SyscallManager ()
 

Detailed Description

The interrupt handler on mips32 processors

Definition at line 33 of file kernel/core/processor/armv7/InterruptManager.h.

Member Enumeration Documentation

Interrupt controller registers

Definition at line 99 of file kernel/core/processor/armv7/InterruptManager.h.

Constructor & Destructor Documentation

ARMV7InterruptManager::ARMV7InterruptManager ( )
private

The constructor

Definition at line 448 of file armv7/InterruptManager.cc.

Referenced by instance().

+ Here is the caller graph for this function:

ARMV7InterruptManager::ARMV7InterruptManager ( const ARMV7InterruptManager )
private

Copy constructor

Note
NOT implemented
ARMV7InterruptManager::~ARMV7InterruptManager ( )
privatevirtual

The destructor

Definition at line 463 of file armv7/InterruptManager.cc.

Referenced by instance().

+ Here is the caller graph for this function:

Member Function Documentation

size_t ARMV7InterruptManager::getBreakpointInterruptNumber ( )
virtual

Get the interrupt number of the breakpoint exception

Returns
the interrupt number of the breakpoint exception

Implements InterruptManager.

Definition at line 132 of file armv7/InterruptManager.cc.

Referenced by instance().

+ Here is the caller graph for this function:

size_t ARMV7InterruptManager::getDebugInterruptNumber ( )
virtual

Get the interrupt number of the debug exception

Returns
the interrupt number of the debug exception

Implements InterruptManager.

Definition at line 136 of file armv7/InterruptManager.cc.

Referenced by instance().

+ Here is the caller graph for this function:

void ARMV7InterruptManager::initialiseProcessor ( )
static

Initialises this processors IDTR

Note
This should only be called from initialiseProcessor()
Todo:
and some smp/acpi function

Definition at line 353 of file armv7/InterruptManager.cc.

References PhysicalMemoryManager::continuous, Dec, VirtualAddressSpace::getKernelAddressSpace(), Hex, PhysicalMemoryManager::instance(), VirtualAddressSpace::KernelMode, m_MPUINTCRegion, NOTICE, MemoryRegion::virtualAddress(), and VirtualAddressSpace::Write.

Referenced by instance().

+ Here is the caller graph for this function:

static ARMV7InterruptManager& ARMV7InterruptManager::instance ( )
inlinestatic
void ARMV7InterruptManager::interrupt ( InterruptState &  interruptState)
static

Called when an interrupt was triggered

Parameters
[in]interruptStatereference to the usermode/kernel state before the interrupt

Definition at line 422 of file armv7/InterruptManager.cc.

References m_MPUINTCRegion, and MemoryRegion::virtualAddress().

Referenced by instance(), and syscall().

+ Here is the caller graph for this function:

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

Assignment operator

Note
NOT implemented

Referenced by instance().

+ Here is the caller graph for this function:

bool ARMV7InterruptManager::registerInterruptHandler ( size_t  nInterruptNumber,
InterruptHandler pHandler 
)
virtual

Register an interrupt handler

Parameters
[in]nInterruptNumberthe interrupt's number
[in]pHandlerthe interrupt handler
Returns
true, if successfully registered, false otherwise
Todo:
This is very machine-specific...
Todo:
Needs locking

Implements InterruptManager.

Definition at line 82 of file armv7/InterruptManager.cc.

References m_MPUINTCRegion, UNLIKELY, and MemoryRegion::virtualAddress().

Referenced by instance().

+ Here is the caller graph for this function:

bool ARMV7InterruptManager::registerInterruptHandlerDebugger ( size_t  nInterruptNumber,
InterruptHandler pHandler 
)
virtual

Register an interrupt handler (for the kernel debugger)

Parameters
[in]nInterruptNumberthe interrupt's number
[in]pHandlerthe interrupt handler
Returns
true, if successfully registered, false otherwise
Todo:
Needs locking

Implements InterruptManager.

Definition at line 109 of file armv7/InterruptManager.cc.

References m_MPUINTCRegion, UNLIKELY, and MemoryRegion::virtualAddress().

Referenced by instance().

+ Here is the caller graph for this function:

bool ARMV7InterruptManager::registerSyscallHandler ( Service_t  Service,
SyscallHandler pHandler 
)
virtual

Register a syscall handler

Parameters
[in]Servicethe service number you want to register
[in]pHandlerthe interrupt handler
Returns
true, if successfully registered, false otherwise

Implements SyscallManager.

Definition at line 143 of file armv7/InterruptManager.cc.

References UNLIKELY.

Referenced by instance().

+ Here is the caller graph for this function:

uintptr_t ARMV7InterruptManager::syscall ( Service_t  service,
uintptr_t  function,
uintptr_t  p1 = 0,
uintptr_t  p2 = 0,
uintptr_t  p3 = 0,
uintptr_t  p4 = 0,
uintptr_t  p5 = 0 
)
virtual

Calls a syscall.

Todo:
Software interrupt

Implements SyscallManager.

Definition at line 159 of file armv7/InterruptManager.cc.

References Hex, Debugger::instance(), interrupt(), NORETURN, NOTICE, panic(), and Debugger::start().

Referenced by instance().

+ Here is the caller graph for this function:

Member Data Documentation

InterruptHandler* ARMV7InterruptManager::m_DbgHandler[256]
private

The debugger interrupt handlers

Definition at line 87 of file kernel/core/processor/armv7/InterruptManager.h.

ARMV7InterruptManager ARMV7InterruptManager::m_Instance
staticprivate

The instance of the interrupt manager

Definition at line 96 of file kernel/core/processor/armv7/InterruptManager.h.

Referenced by instance().

MemoryRegion ARMV7InterruptManager::m_MPUINTCRegion
staticprivate
SyscallHandler* ARMV7InterruptManager::m_SyscallHandler[serviceEnd]
private

The syscall handlers

Definition at line 90 of file kernel/core/processor/armv7/InterruptManager.h.


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