wiki:peripherals_drivers

Version 6 (modified by alain, 10 years ago) (diff)

--

GIET_VM / Peripherals Drivers

The GIET_VM supports two types of peripheral components: External peripherals are located in one single cluster (called cluster_io, and identified by the X_IO,Y_IO variables). Internal peripherals are replicated in all clusters.

Each driver xxx_driver define two low-level functions _xxx_get_register() and _xxx_set_register() to access the peripheral addressable registers. These functions are in charge to compute the peripheral registers addresses, taking into account the peripheral base address, the register index, and the cluster coordinates:

  • External peripherals: All accesses use virtual addresses if the MMU (Memory management Unit) is activated, or physical addresses if it is not. In this case, the physical address is computed as pbase = SEG_XXX_BASE + cluster_io << 32.
  • Internal peripherals: All accesses use virtual addresses, and the MMU must be activated. The peripheral virtual base address is computed as vbase = SEG_XXX_BASE + cluster_xy * PERI_CLUSTER_INCREMENT.

The X_IO, Y_IO, and PERI_CLUSTER_INCREMENT variables must be defined in the hard_config.h" file.

BDV (Block Device controller)

CMA (Chained Buffer DMA controller)

DMA (Multi-Channels DMA controller)

HBA (AHCI Disk controller)

ICU (Interrupt controller)?

IOB (I/O Bridge controller)

IOC (Generic I/O controller)

MMC (Memory Cache controller)

MWR (MWMR controller)

NIC (Gigabit Ethernet Network controller)

PIC (External Peripherals Interrupt controller)

RDK (RamDisk)

SIM (Monitor controller)

SDC (SDC Disk controller)

TIM (Multi Timers controller)

TTY (Multi Terminals TTY controller)

XCU (Extended Interrupt controller)