1#include "acpi/tests/test_internal.h"
2
3TEST_GROUP_DECLARE(ioapic);
4static_assert(sizeof(union ioapic_redirection_entry) == 8);
5
6TEST_DECLARE_UNIT(ioapic, redirection_entry_layout) {
7
8 union ioapic_redirection_entry entry = {0};
9 entry.vector = 0x42;
10 entry.delivery_mode = 1; /* Lowest prio*/
11 entry.dest_mode = 1; /* Logical mode */
12 entry.polarity = 1; /* Active low */
13 entry.trigger_mode = 1; /* Level triggered */
14 entry.mask = 1; /* Masked */
15 entry.dest_apic_id = 0xA5;
16
17 /* Vector = bits 0-7 */
18 TEST_ASSERT_EQ((entry.raw & 0xFFULL), 0x42);
19
20 /* Delivery mode = bits 8-10 (1 << 8 = 0x100) */
21 TEST_ASSERT_EQ((entry.raw & (7ULL << 8)), (1ULL << 8));
22
23 /* Destination mode = bit 11 */
24 TEST_ASSERT_EQ((entry.raw & (1ULL << 11)), (1ULL << 11));
25
26 /* Polarity = bit 13 */
27 TEST_ASSERT_EQ((entry.raw & (1ULL << 13)), (1ULL << 13));
28
29 /* Trigger mode = bit 15 */
30 TEST_ASSERT_EQ((entry.raw & (1ULL << 15)), (1ULL << 15));
31
32 /* Mask = bit 16 */
33 TEST_ASSERT_EQ((entry.raw & (1ULL << 16)), (1ULL << 16));
34
35 /* Destination APIC ID = bits 56-63 */
36 TEST_ASSERT_EQ((entry.raw >> 56), 0xA5);
37
38 return TEST_SUCCESS;
39}
40