blob: 65ba80939cdae7e5d51b87381b0bb94d3040b67a [file] [log] [blame]
Miriam Zimmermanea75bd12019-03-12 14:39:58 -07001// Copyright 2019 The Chromium OS Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// Common constants and types used for Split IRQ chip devices (e.g. PIC, PIT, IOAPIC).
6
7use bit_field::*;
8
David Tolnayc3244292019-03-12 17:12:28 -07009#[bitfield]
10#[derive(Clone, Copy, Debug, PartialEq)]
Miriam Zimmermanea75bd12019-03-12 14:39:58 -070011pub enum DestinationMode {
12 Physical = 0,
13 Logical = 1,
14}
15
David Tolnayc3244292019-03-12 17:12:28 -070016#[bitfield]
17#[derive(Clone, Copy, Debug, PartialEq)]
Miriam Zimmermanea75bd12019-03-12 14:39:58 -070018pub enum TriggerMode {
19 Edge = 0,
20 Level = 1,
21}
22
Miriam Zimmermanc211a6c2019-03-15 16:50:23 -070023#[bitfield]
24#[derive(Debug, Clone, Copy, PartialEq)]
Miriam Zimmermanea75bd12019-03-12 14:39:58 -070025pub enum DeliveryMode {
Miriam Zimmermanc211a6c2019-03-15 16:50:23 -070026 Fixed = 0b000,
27 Lowest = 0b001,
28 SMI = 0b010, // System management interrupt
29 RemoteRead = 0b011, // This is no longer supported by intel.
30 NMI = 0b100, // Non maskable interrupt
31 Init = 0b101,
32 Startup = 0b110,
33 External = 0b111,
Miriam Zimmermanea75bd12019-03-12 14:39:58 -070034}
35
36#[bitfield]
37#[derive(Clone, Copy, PartialEq)]
Miriam Zimmermanc211a6c2019-03-15 16:50:23 -070038pub struct MsiAddressMessage {
Miriam Zimmermanea75bd12019-03-12 14:39:58 -070039 reserved: BitField2,
David Tolnayc3244292019-03-12 17:12:28 -070040 #[bits = 1]
41 destination_mode: DestinationMode,
Miriam Zimmermanea75bd12019-03-12 14:39:58 -070042 redirection_hint: BitField1,
43 reserved_2: BitField8,
44 destination_id: BitField8,
45 // According to Intel's implementation of MSI, these bits must always be 0xfee.
46 always_0xfee: BitField12,
47}
48
49#[bitfield]
50#[derive(Clone, Copy, PartialEq)]
Miriam Zimmermanea75bd12019-03-12 14:39:58 -070051struct MsiDataMessage {
52 vector: BitField8,
Miriam Zimmermanc211a6c2019-03-15 16:50:23 -070053 #[bits = 3]
54 delivery_mode: DeliveryMode,
Miriam Zimmermanea75bd12019-03-12 14:39:58 -070055 reserved: BitField3,
56 level: BitField1,
David Tolnayc3244292019-03-12 17:12:28 -070057 #[bits = 1]
58 trigger: TriggerMode,
Miriam Zimmermanea75bd12019-03-12 14:39:58 -070059 reserved2: BitField16,
60}