Skip to content

Commit 0f61a8a

Browse files
msix: set delivery mode
Signed-off-by: Andy-Python-Programmer <[email protected]>
1 parent f86a7ca commit 0f61a8a

File tree

1 file changed

+14
-2
lines changed
  • src/aero_kernel/src/drivers

1 file changed

+14
-2
lines changed

src/aero_kernel/src/drivers/pci.rs

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,13 @@ bitflags::bitflags! {
4747
}
4848
}
4949

50+
#[repr(u32)]
51+
pub enum DeliveryMode {
52+
/// Deliver the signal to all the agents listed in the destination. The Trigger Mode for
53+
/// fixed delivery mode can be edge or level.
54+
Fixed = 0b000,
55+
}
56+
5057
#[repr(C)]
5158
struct Message {
5259
addr_lower: VolatileCell<u32>,
@@ -62,13 +69,18 @@ impl Message {
6269

6370
fn set_masked(&self, masked: bool) {
6471
self.mask.set(*self.mask.get().set_bit(0, masked));
72+
self.mask.set(*self.mask.get().set_bit(30, masked));
6573
}
6674

67-
fn set(&mut self, vector: u8) {
75+
fn set(&mut self, vector: u8, delivery_mode: DeliveryMode) {
6876
assert!(self.is_masked(), "msix: message is unmasked");
6977

7078
let mut data = 0;
7179
data.set_bits(0..8, vector as u32);
80+
data.set_bits(8..11, delivery_mode as u32);
81+
data.set_bit(14, false);
82+
data.set_bit(15, false);
83+
data.set_bits(16..32, 0);
7284

7385
let mut addr = 0;
7486
addr.set_bits(12..20, apic::get_bsp_id() as u32);
@@ -143,7 +155,7 @@ impl<'a> Msix<'a> {
143155
self.table.set(msix_vector, true);
144156

145157
let message = &mut self.messages[msix_vector];
146-
message.set(vector);
158+
message.set(vector, DeliveryMode::Fixed);
147159
message.set_masked(false);
148160

149161
msix_vector

0 commit comments

Comments
 (0)