#arm #driver #aarch64 #gic #interrupt-controller #patch

no-std arm-gic

A driver for the Arm Generic Interrupt Controller version 3 or 4

2 releases

0.1.1 Aug 9, 2024
0.1.0 Apr 17, 2023

#1487 in Embedded development

Download history 106/week @ 2024-07-08 133/week @ 2024-07-15 66/week @ 2024-07-22 153/week @ 2024-07-29 145/week @ 2024-08-05 117/week @ 2024-08-12 144/week @ 2024-08-19 98/week @ 2024-08-26 117/week @ 2024-09-02 87/week @ 2024-09-09 127/week @ 2024-09-16 82/week @ 2024-09-23 74/week @ 2024-09-30 69/week @ 2024-10-07 160/week @ 2024-10-14 56/week @ 2024-10-21

367 downloads per month
Used in libhermit-rs

MIT/Apache

27KB
430 lines

Arm Generic Interrupt Controller driver

crates.io page docs.rs page

This crate provides a Rust driver for the Arm Generic Interrupt Controller version 3 or 4 (GICv3 and GICv4).

Currently it only supports AArch64. Patches are welcome to add support for AArch32 and other GIC versions.

This is not an officially supported Google product.

License

Licensed under either of

at your option.

Contributing

If you want to contribute to the project, see details of how we accept contributions.


lib.rs:

Driver for the Arm Generic Interrupt Controller version 3 or 4, on aarch64.

This top level module contains functions that are not specific to any particular interrupt controller, as support for other GIC versions may be added in future.

Example

use arm_gic::{
    gicv3::{GicV3, IntId, SgiTarget},
    irq_enable,
};

// Base addresses of the GICv3 distributor and redistributor.
const GICD_BASE_ADDRESS: *mut u64 = 0x800_0000 as _;
const GICR_BASE_ADDRESS: *mut u64 = 0x80A_0000 as _;

// Initialise the GIC.
let mut gic = unsafe { GicV3::new(GICD_BASE_ADDRESS, GICR_BASE_ADDRESS) };
gic.setup();

// Configure an SGI and then send it to ourself.
let sgi_intid = IntId::sgi(3);
GicV3::set_priority_mask(0xff);
gic.set_interrupt_priority(sgi_intid, 0x80);
gic.enable_interrupt(sgi_intid, true);
irq_enable();
GicV3::send_sgi(
    sgi_intid,
    SgiTarget::List {
        affinity3: 0,
        affinity2: 0,
        affinity1: 0,
        target_list: 0b1,
    },
);

Dependencies

~105KB