8 Apic::reg_lvt_bit_str(unsigned reg, Unsigned32 val, int bit)
10 static const char * const delivery_mode[] =
11 { "fixed", "???", "SMI", "???", "NMI", "INIT", "???", "ExtINT" };
16 case APIC_lvtt: bits = Mask | Delivery_state; break;
18 case APIC_lvt1: bits = Mask | Trigger_mode | Remote_irr | Pin_polarity
19 | Delivery_state | Delivery_mode; break;
20 case APIC_lvterr: bits = Mask | Delivery_state; break;
21 case APIC_lvtpc: bits = Mask | Delivery_state | Trigger_mode; break;
22 case APIC_lvtthmr: bits = Mask | Delivery_state | Trigger_mode; break;
31 return val & APIC_lvt_masked ? "masked" : "unmasked";
33 return val & APIC_lvt_level_trigger ? "level" : "edge";
35 return val & APIC_lvt_remote_irr ? "IRR" : "";
37 return val & APIC_input_polarity ? "active low" : "active high";
39 return val & APIC_snd_pending ? "pending" : "idle";
41 return delivery_mode[reg_delivery_mode(val)];
49 Apic::reg_show(unsigned reg)
51 Unsigned32 tmp_val = reg_read(reg);
53 printf("%-9s%-6s%-4s%-8s%-7s%02x",
54 reg_lvt_bit_str(reg, tmp_val, Mask),
55 reg_lvt_bit_str(reg, tmp_val, Trigger_mode),
56 reg_lvt_bit_str(reg, tmp_val, Remote_irr),
57 reg_lvt_bit_str(reg, tmp_val, Delivery_state),
58 reg_lvt_bit_str(reg, tmp_val, Delivery_mode),
59 (unsigned)reg_lvt_vector(tmp_val));
66 putstr("\nVectors: LINT0: "); reg_show(APIC_lvt0);
67 putstr("\n LINT1: "); reg_show(APIC_lvt1);
68 putstr("\n Timer: "); reg_show(APIC_lvtt);
69 putstr("\n Error: "); reg_show(APIC_lvterr);
72 putstr("\n PerfCnt: ");
77 putstr("\n Thermal: ");
78 reg_show(APIC_lvtthmr);
85 Apic::timer_show(void)
87 printf("Timer mode: %s counter: %08x/%08x\n",
88 reg_read(APIC_lvtt) & APIC_lvt_timer_periodic
89 ? "periodic" : "one-shot",
90 timer_reg_read_initial(), timer_reg_read());
97 printf("APIC id: %02x version: %02x\n", get_id() >> 24, get_version());
102 Apic::bitfield_show(unsigned reg, const char *name, char flag)
107 printf("%-11s 0123456789abcdef0123456789abcdef"
108 "0123456789abcdef0123456789abcdef\n", name);
112 printf(" %02x ", i*0x20);
113 tmp_val = reg_read(reg + i*0x10);
115 putchar(tmp_val & (1<<j) ? flag : '.');
125 Apic::bitfield_show(APIC_irr, "Ints Reqst:", 'R');
132 Apic::bitfield_show(APIC_isr, "Ints InSrv:", 'S');