|
1 | 1 | use crate::{ |
| 2 | + managed_slice::ManagedSlice, |
| 3 | + platform::{ |
| 4 | + interrupt::{InterruptModel, Polarity, TriggerMode}, |
| 5 | + ProcessorInfo, |
| 6 | + }, |
2 | 7 | sdt::{ExtendedField, SdtHeader, Signature}, |
3 | 8 | AcpiError, |
| 9 | + AcpiResult, |
4 | 10 | AcpiTable, |
5 | 11 | }; |
6 | 12 | use bit_field::BitField; |
7 | 13 | use core::{ |
| 14 | + alloc::Allocator, |
8 | 15 | marker::{PhantomData, PhantomPinned}, |
9 | 16 | mem, |
10 | 17 | pin::Pin, |
11 | 18 | }; |
12 | 19 |
|
13 | | -#[cfg(feature = "allocator_api")] |
14 | | -use crate::{ |
15 | | - platform::{ |
16 | | - interrupt::{InterruptModel, Polarity, TriggerMode}, |
17 | | - ProcessorInfo, |
18 | | - }, |
19 | | - AcpiResult, |
20 | | -}; |
21 | | - |
22 | 20 | #[derive(Debug)] |
23 | 21 | pub enum MadtError { |
24 | 22 | UnexpectedEntry, |
@@ -69,13 +67,12 @@ impl Madt { |
69 | 67 | Err(AcpiError::InvalidMadt(MadtError::UnexpectedEntry)) |
70 | 68 | } |
71 | 69 |
|
72 | | - #[cfg(feature = "allocator_api")] |
73 | 70 | pub fn parse_interrupt_model_in<A>( |
74 | 71 | self: Pin<&Self>, |
75 | 72 | allocator: A, |
76 | 73 | ) -> AcpiResult<(InterruptModel<A>, Option<ProcessorInfo<A>>)> |
77 | 74 | where |
78 | | - A: core::alloc::Allocator + Clone, |
| 75 | + A: Allocator + Clone, |
79 | 76 | { |
80 | 77 | /* |
81 | 78 | * We first do a pass through the MADT to determine which interrupt model is being used. |
@@ -114,13 +111,12 @@ impl Madt { |
114 | 111 | Ok((InterruptModel::Unknown, None)) |
115 | 112 | } |
116 | 113 |
|
117 | | - #[cfg(feature = "allocator_api")] |
118 | 114 | fn parse_apic_model_in<A>( |
119 | 115 | self: Pin<&Self>, |
120 | 116 | allocator: A, |
121 | 117 | ) -> AcpiResult<(InterruptModel<A>, Option<ProcessorInfo<A>>)> |
122 | 118 | where |
123 | | - A: core::alloc::Allocator + Clone, |
| 119 | + A: Allocator + Clone, |
124 | 120 | { |
125 | 121 | use crate::platform::{ |
126 | 122 | interrupt::{ |
@@ -157,12 +153,11 @@ impl Madt { |
157 | 153 | } |
158 | 154 | } |
159 | 155 |
|
160 | | - let mut io_apics = crate::ManagedSlice::new_in(io_apic_count, allocator.clone())?; |
161 | | - let mut interrupt_source_overrides = crate::ManagedSlice::new_in(iso_count, allocator.clone())?; |
162 | | - let mut nmi_sources = crate::ManagedSlice::new_in(nmi_source_count, allocator.clone())?; |
163 | | - let mut local_apic_nmi_lines = crate::ManagedSlice::new_in(local_nmi_line_count, allocator.clone())?; |
164 | | - let mut application_processors = |
165 | | - crate::ManagedSlice::new_in(processor_count.saturating_sub(1), allocator)?; // Subtract one for the BSP |
| 156 | + let mut io_apics = ManagedSlice::new_in(io_apic_count, allocator.clone())?; |
| 157 | + let mut interrupt_source_overrides = ManagedSlice::new_in(iso_count, allocator.clone())?; |
| 158 | + let mut nmi_sources = ManagedSlice::new_in(nmi_source_count, allocator.clone())?; |
| 159 | + let mut local_apic_nmi_lines = ManagedSlice::new_in(local_nmi_line_count, allocator.clone())?; |
| 160 | + let mut application_processors = ManagedSlice::new_in(processor_count.saturating_sub(1), allocator)?; // Subtract one for the BSP |
166 | 161 | let mut boot_processor = None; |
167 | 162 |
|
168 | 163 | io_apic_count = 0; |
@@ -678,20 +673,19 @@ pub struct MultiprocessorWakeupMailbox { |
678 | 673 | pub reserved_for_firmware: [u64; 256], |
679 | 674 | } |
680 | 675 |
|
681 | | -#[cfg(feature = "allocator_api")] |
682 | | -fn parse_mps_inti_flags(flags: u16) -> crate::AcpiResult<(Polarity, TriggerMode)> { |
| 676 | +fn parse_mps_inti_flags(flags: u16) -> AcpiResult<(Polarity, TriggerMode)> { |
683 | 677 | let polarity = match flags.get_bits(0..2) { |
684 | 678 | 0b00 => Polarity::SameAsBus, |
685 | 679 | 0b01 => Polarity::ActiveHigh, |
686 | 680 | 0b11 => Polarity::ActiveLow, |
687 | | - _ => return Err(crate::AcpiError::InvalidMadt(MadtError::MpsIntiInvalidPolarity)), |
| 681 | + _ => return Err(AcpiError::InvalidMadt(MadtError::MpsIntiInvalidPolarity)), |
688 | 682 | }; |
689 | 683 |
|
690 | 684 | let trigger_mode = match flags.get_bits(2..4) { |
691 | 685 | 0b00 => TriggerMode::SameAsBus, |
692 | 686 | 0b01 => TriggerMode::Edge, |
693 | 687 | 0b11 => TriggerMode::Level, |
694 | | - _ => return Err(crate::AcpiError::InvalidMadt(MadtError::MpsIntiInvalidTriggerMode)), |
| 688 | + _ => return Err(AcpiError::InvalidMadt(MadtError::MpsIntiInvalidTriggerMode)), |
695 | 689 | }; |
696 | 690 |
|
697 | 691 | Ok((polarity, trigger_mode)) |
|
0 commit comments