= GIET-VM documentation = [[PageOutline]] == __A) Mapping_Info data structure__ == == __B) Peripherals Drivers__ == The GIET_VM supports two types of peripheral components: '''External peripherals''' are located in one single cluster 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 physical addresses, taking into account the cluster extension if required. * '''External peripherals''': 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''': Accesses use virtual addresses, and the MMU must be activated. The peripheral virtual base address is computed as vbase = SEG_XXX_BASE + cluster_xy * CLUSTER_INCREMENT. The SEG_XXX_BASE , X_IO, Y_IO, and CLUSTER_INCREMENT vatiables must be defined in the ''hard_config.h" file. === [wiki:bdv_driver BDV (Block Device controller)] === [wiki:cma_driver CMA (Chained Buffer DMA controller)] === [wiki:dma_driver DMA (Multi-Channels DMA controller)] === [wiki:fbf_driver FBF (Frame Buffer controller)] === [wiki:hba_driver HBA (AHCI Disk controller)] === [wiki:icu_driver ICU (Interrupt controller)] === [wiki:iob_driver IOB (I/O Bridge controller)] === [wiki:ioc_driver IOC (Generic I/O controller)] === [wiki:mmc_driver MMC (Memory Cache controller)] === [wiki:nic_driver NIC (Gigabit Ethernet Network controller)] === [wiki:pic_driver PIC (External Peripherals Interrupt controller)] === [wiki:sim_driver SIM (Monitor controller)] === [wiki:spi_driver SPI (SPI Disk controller)] === [wiki:tim_driver TIM (Multi Timers controller)] === [wiki:tty_driver TTY (Multi Terminals TTY controller)] === [wiki:xcu_driver XCU (Extended Interrupt controller)] == __C) Shared kernel functions__ == The boot code and the kernel code are two separated compilation units, but some functions are used by both the boot code and the kernel code: * They are used by the boot-loader in the ''static'' phase, to build the page tables and initialize the schedulers and the peripherals. * They are used by the kernel in the ''dynamic'' phase, to handle events such as interrupts, exceptions and syscalls. === [wiki:kernel_cp0 CP0 registers access functions] === === [wiki:kernel_cp2 CP2 registers access functions] === === [wiki:kernel_paddr Physical addressing functions] === === [wiki:kernel_locks Locks access functions] === === [wiki:kernel_tty0 TTY0 access functions] === === [wiki:kernel_context Task context access functions] === === [wiki:kernel_mapping Mapping access functions] === === [wiki:kernel_pmem Physical memory allocators] === === [wiki:kernel_vmem Virtual to physical address translation] === === [wiki:kernel_utils Miscelaneous kernel functions] === == __Y) Boot-loader functions__ == == __W) Kernel functions__ == The GIET acronym stands for ''Gestionnaire Interruptions, Exceptions & Trappes''. This section describe the kernel functions, supporting Interrupts, Exceptions and Traps (i.e. syscalls). === [wiki:kernel_interrupts Interrupt Handler] === === [wiki:kernel_exceptions Exception Handler] === === [wiki:kernel_syscalls Syscall Handler] === === [wiki:kernel_context Context Switch Handler] === == __Z) User level libraries__ == This section describes the user libraries : === [wiki:library_stdio Stdio library] === This library contains all system calls allowing an application to access a protected ressource (peripheral register, or protected processor register). Each function in this library contains at least one SYSCALL instruction to enter the kernel mode. === [wiki:library_stdlib Stdlib user library] === This library contains various utility functions that do not use system calls. === [wiki:library_mwmr MWMR user library] === This library defines a communication middleware supporting channelised communications in a multi-tasks parallel application. This middleware does not use system calls. === [wiki:library_barrier Barrier user library] === This library contains functions used to synchronize severals tasks in a multi-task parallel application. Most of these functions do not use system calls. === [wiki:library_locks Spin_lock user library] === This library contains functions used to provide exclusive access to a shared ressource in a multi-task parallel application. These functions do not use system calls. === [wiki:library_malloc Malloc user library] === This library contains functions allowing an user application to dynamically allocate virtual memory from the application heap. When the target architecture is clusterized (several physical banks), the heap is physically distributed on the clusters, and there is actually on allocator per cluster.