Version 11 (modified by 9 years ago) (diff) | ,
---|
GIET_VM / Peripherals Drivers
-
GIET_VM / Peripherals Drivers
-
- BDV (Block Device controller)
- CMA (Chained Buffer DMA controller)
- DMA (Multi-Channels DMA controller)
- HBA (AHCI Disk controller)
- IOB (I/O Bridge controller)
- IOC (Generic I/O controller)
- MMC (Memory Cache controller)
- MWR (MWMR_DMA 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)
-
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 (such as DMA, XCU, or MMC) 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.
Some peripherals (TTY, TIM, NIC, CMA, HBA) are multi-channels peripherals: Each channel provide an independent set of addressable registers, and each channel can be seen as an independent hardware resource. For multi-channels peripherals, the GIET_VM allows an user application to allocate a private peripheral channel, that cannot be used by other applications. The corresponding channel index is stored in the calling task context. For some peripherals (such as TTY or TIM), the allocated channel can be shared by all tasks in the same vspace as the calling task.
BDV (Block Device controller)