diff options
Diffstat (limited to 'x86_64/src/split_irqchip_common.rs')
-rw-r--r-- | x86_64/src/split_irqchip_common.rs | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/x86_64/src/split_irqchip_common.rs b/x86_64/src/split_irqchip_common.rs new file mode 100644 index 0000000..f43ab69 --- /dev/null +++ b/x86_64/src/split_irqchip_common.rs @@ -0,0 +1,72 @@ +// Copyright 2019 The Chromium OS Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Common constants and types used for Split IRQ chip devices (e.g. PIC, PIT, IOAPIC). + +use bit_field::*; + +#[derive(Clone, Copy, PartialEq)] +pub enum DestinationMode { + Physical = 0, + Logical = 1, +} + +#[derive(Clone, Copy, PartialEq)] +pub enum TriggerMode { + Edge = 0, + Level = 1, +} + +#[derive(Clone, Copy, PartialEq)] +pub enum DeliveryMode { + DeliveryModeFixed = 0b000, + DeliveryModeLowest = 0b001, + DeliveryModeSMI = 0b010, // System management interrupt + DeliveryModeRemoteRead = 0b011, // This is no longer supported by intel. + DeliveryModeNMI = 0b100, // Non maskable interrupt + DeliveryModeInit = 0b101, + DeliveryModeStartup = 0b110, + DeliveryModeExternal = 0b111, +} + +#[bitfield] +#[derive(Clone, Copy, PartialEq)] +pub struct MsiAddressMessageNonRemappable { + reserved: BitField2, + destination_mode: BitField1, + redirection_hint: BitField1, + reserved_2: BitField8, + destination_id: BitField8, + // According to Intel's implementation of MSI, these bits must always be 0xfee. + always_0xfee: BitField12, +} + +#[bitfield] +#[derive(Clone, Copy, PartialEq)] +pub struct MsiAddressMessageRemappable { + reserved: BitField2, + handle_hi: BitField1, // Bit 15 of handle + shv: BitField1, + interrupt_format: BitField1, + handle_low: BitField15, // Bits 0-14 of handle. + // According to Intel's implementation of MSI, these bits must always be 0xfee. + always_0xfee: BitField12, +} + +#[derive(Clone, Copy, PartialEq)] +pub enum MsiAddressMessage { + NonRemappable(MsiAddressMessageNonRemappable), + Remappable(MsiAddressMessageRemappable), +} + +#[bitfield] +#[derive(Clone, Copy, PartialEq)] +struct MsiDataMessage { + vector: BitField8, + delivery_mode: BitField3, + reserved: BitField3, + level: BitField1, + trigger: BitField1, + reserved2: BitField16, +} |