coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
mptable.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 
3 #include <arch/smp/mpspec.h>
4 #include <arch/ioapic.h>
5 
6 static void *smp_write_config_table(void *v)
7 {
8  int isa_bus;
9  struct mp_config_table *mc;
10 
11  mc = (void *)(((char *)v) + SMP_FLOATING_TABLE_LEN);
12 
13  mptable_init(mc);
14 
16 
17  mptable_write_buses(mc, NULL, &isa_bus);
18 
19  /* External Intel 82093AA IOAPIC. */
21 
22  /* Legacy Interrupts */
23  mptable_add_isa_interrupts(mc, isa_bus, ioapic_id, 0);
24 
25  /* I/O Ints: Type Trigger Polarity Bus ID IRQ APIC ID PIN# */
26  smp_write_pci_intsrc(mc, mp_INT, 0x0, 0x04, 3, ioapic_id, 0x13);
27  smp_write_pci_intsrc(mc, mp_INT, 0x0, 0x06, 0, ioapic_id, 0x13);
28 
29  /* Local Ints: Type Trigger Polarity Bus ID IRQ APIC ID PIN# */
30  mptable_lintsrc(mc, 0x1);
31 
32  /* Compute the checksums. */
33  return mptable_finalize(mc);
34 }
35 
36 unsigned long write_smp_table(unsigned long addr)
37 {
38  void *v;
40  return (unsigned long)smp_write_config_table(v);
41 }
unsigned long write_smp_table(unsigned long addr)
Definition: mptable.c:48
#define VIO_APIC_VADDR
Definition: ioapic.h:7
static void * smp_write_config_table(void *v)
Definition: mptable.c:6
static u32 addr
Definition: cirrus.c:14
void * smp_write_floating_table(unsigned long addr, unsigned int virtualwire)
Definition: mpspec.c:84
@ mp_INT
Definition: mpspec.h:117
void * mptable_finalize(struct mp_config_table *mc)
Definition: mpspec.c:504
void mptable_lintsrc(struct mp_config_table *mc, unsigned long bus_isa)
Definition: mpspec.c:418
void mptable_init(struct mp_config_table *mc)
Definition: mpspec.c:14
#define SMP_FLOATING_TABLE_LEN
Definition: mpspec.h:26
void smp_write_processors(struct mp_config_table *mc)
Definition: mpspec.c:146
u8 smp_write_ioapic_from_hw(struct mp_config_table *mc, void *apicaddr)
Definition: mpspec.c:224
void mptable_write_buses(struct mp_config_table *mc, int *max_pci_bus, int *isa_bus)
Definition: mpspec.c:465
void smp_write_pci_intsrc(struct mp_config_table *mc, u8 irqtype, u8 srcbus, u8 dev, u8 pirq, u8 dstapic, u8 dstirq)
Definition: mpspec.c:264
void mptable_add_isa_interrupts(struct mp_config_table *mc, unsigned long bus_isa, unsigned long apicid, int external)
Definition: mpspec.c:426
#define NULL
Definition: stddef.h:19
uint8_t u8
Definition: stdint.h:45