SatCat5
satcat5::cfg::ConfigBusMmap Class Reference

Detailed Description

Memory-mapped local ConfigBus.

ConfigBus API concepts.

The simplest and most direct implementation of the ConfigBus API. Reads and writes map directly to addresses in physical memory. This class also serves as a hardware interrupt handler for the shared ConfigBus interrupt.

See also
interrupts.h.

For interrupts from specific peripherals,

See also
cfg::Interrupt.

Some peripherals, such as port::MailMap, can only function when attached through a cfg::ConfigBusMmap interface.

Definition at line 196 of file cfgbus_core.h.

#include <cfgbus_core.h>

Inheritance diagram for satcat5::cfg::ConfigBusMmap:
[legend]
Collaboration diagram for satcat5::cfg::ConfigBusMmap:
[legend]

Public Member Functions

 ConfigBusMmap (void *base_ptr, int irq)
 Constructor accepts the base pointer for the memory-map interface, and the interrupt-index for the shared ConfigBus interrupt, if any.
 
satcat5::cfg::IoStatus read (unsigned regaddr, u32 &val) override
 Basic single-register read operation.
 
satcat5::cfg::IoStatus write (unsigned regaddr, u32 val) override
 Basic single-register write operation.
 
void * get_device_mmap (unsigned dev) const
 Get a raw pointer to the designated device-address.
 
volatile u32 * get_register_mmap (unsigned addr) const
 Get a raw pointer to the designated combined-address.
 
virtual satcat5::cfg::IoStatus read_array (unsigned regaddr, unsigned count, u32 *result)
 Bulk-read with auto-increment (regaddr, regaddr+1, ...) Bulk read/write operations are more efficient when controlling ConfigBus peripherals over a network interface.
 
virtual satcat5::cfg::IoStatus read_repeat (unsigned regaddr, unsigned count, u32 *result)
 Bulk-read the same register N times.
 
virtual satcat5::cfg::IoStatus write_array (unsigned regaddr, unsigned count, const u32 *data)
 Bulk-write with auto-increment (regaddr, regaddr+1, ...)
 
virtual satcat5::cfg::IoStatus write_repeat (unsigned regaddr, unsigned count, const u32 *data)
 Bulk-write the same register N times.
 
unsigned get_regaddr (unsigned dev, unsigned reg) const
 Convert device + register to combined address.
 
void register_irq (satcat5::cfg::Interrupt *obj)
 Add an interrupt handler. More...
 
void unregister_irq (satcat5::cfg::Interrupt *obj)
 Remove an interrupt handler.
 
unsigned count_irq () const
 Count attached interrupt handlers.
 
satcat5::cfg::Register get_register (unsigned dev, unsigned reg=0)
 Create register-map object for the given device address. More...
 
void irq_poll ()
 Poll all registered ConfigBus interrupt handlers. More...
 

Public Attributes

const char *const m_label
 Human-readable label, for debugging.
 
const int m_irq_idx
 IRQ index for this interrupt handler.
 

Protected Member Functions

void irq_event () override
 Method called whenever an interrupt is triggered.
 

Protected Attributes

volatile u32 * m_base_ptr
 
satcat5::util::List< satcat5::cfg::Interruptm_irq_list
 
u32 m_max_irqtime
 Statistics tracking for time consumed by this interrupt.
 

Private Attributes

satcat5::irq::Handlerm_next
 

Member Function Documentation

◆ get_register()

Register ConfigBus::get_register ( unsigned  dev,
unsigned  reg = 0 
)
inherited

Create register-map object for the given device address.

(Or for a specific register, if the register address is specified.)

Definition at line 101 of file cfgbus_core.cc.

◆ irq_poll()

void ConfigBus::irq_poll ( )
inherited

Poll all registered ConfigBus interrupt handlers.

Issue callbacks to any that may have triggered. (This method should not usually be called directly.)

Definition at line 111 of file cfgbus_core.cc.

◆ register_irq()

void ConfigBus::register_irq ( satcat5::cfg::Interrupt obj)
inherited

Add an interrupt handler.

Each ConfigBus interface has a single interrupt signal, which is the logical OR of interrupts from all attached peripherals. When any peripheral raises its interrupt signal, call irq_poll().

Definition at line 80 of file cfgbus_core.cc.


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