| 1 | /* $NetBSD: mpconfig.h,v 1.15 2015/04/27 06:51:40 knakahara Exp $ */ |
| 2 | |
| 3 | /* |
| 4 | * Definitions originally from the mpbios code, but now used for ACPI |
| 5 | * MP config as well. |
| 6 | */ |
| 7 | |
| 8 | #ifndef _X86_MPCONFIG_H_ |
| 9 | #define _X86_MPCONFIG_H_ |
| 10 | |
| 11 | /* |
| 12 | * XXX |
| 13 | */ |
| 14 | #include <sys/bus.h> |
| 15 | #include <dev/pci/pcivar.h> |
| 16 | #include <machine/pci_machdep.h> |
| 17 | |
| 18 | /* |
| 19 | * Interrupt types |
| 20 | */ |
| 21 | #define MPS_INTTYPE_INT 0 |
| 22 | #define MPS_INTTYPE_NMI 1 |
| 23 | #define MPS_INTTYPE_SMI 2 |
| 24 | #define MPS_INTTYPE_ExtINT 3 |
| 25 | |
| 26 | #define MPS_INTPO_DEF 0 |
| 27 | #define MPS_INTPO_ACTHI 1 |
| 28 | #define MPS_INTPO_ACTLO 3 |
| 29 | |
| 30 | #define MPS_INTTR_DEF 0 |
| 31 | #define MPS_INTTR_EDGE 1 |
| 32 | #define MPS_INTTR_LEVEL 3 |
| 33 | |
| 34 | #ifndef _LOCORE |
| 35 | |
| 36 | struct mpbios_int; |
| 37 | |
| 38 | struct mp_bus |
| 39 | { |
| 40 | const char *mb_name; /* XXX bus name */ |
| 41 | int mb_idx; /* XXX bus index */ |
| 42 | void (*mb_intr_print)(int); |
| 43 | void (*mb_intr_cfg)(const struct mpbios_int *, uint32_t *); |
| 44 | struct mp_intr_map *mb_intrs; |
| 45 | uint32_t mb_data; /* random bus-specific datum. */ |
| 46 | device_t mb_dev; /* has been autoconfigured if mb_dev != NULL */ |
| 47 | pcitag_t *mb_pci_bridge_tag; |
| 48 | pci_chipset_tag_t mb_pci_chipset_tag; |
| 49 | }; |
| 50 | |
| 51 | struct mp_intr_map |
| 52 | { |
| 53 | struct mp_intr_map *next; |
| 54 | struct mp_bus *bus; |
| 55 | /* |
| 56 | * encoding of bus_pin is mp_bus dependant. |
| 57 | * for pci, bus_pin = (pci_device_number << 2) | pin |
| 58 | * where pin is 0=INTA ... 3=INTD. |
| 59 | */ |
| 60 | int bus_pin; |
| 61 | struct pic *ioapic; /* NULL for local apic */ |
| 62 | int ioapic_pin; |
| 63 | intr_handle_t ioapic_ih; /* int handle, see i82093var.h for encoding */ |
| 64 | int type; /* from mp spec intr record */ |
| 65 | int flags; /* from mp spec intr record */ |
| 66 | uint32_t redir; |
| 67 | uint32_t cpu_id; |
| 68 | int global_int; /* ACPI global interrupt number */ |
| 69 | int sflags; /* other, software flags (see below) */ |
| 70 | void *linkdev; |
| 71 | int sourceindex; |
| 72 | }; |
| 73 | |
| 74 | #define MPI_OVR 0x0001 /* Was overridden by an ACPI OVR */ |
| 75 | |
| 76 | #if defined(_KERNEL) |
| 77 | extern int mp_verbose; |
| 78 | extern struct mp_bus *mp_busses; |
| 79 | extern struct mp_intr_map *mp_intrs; |
| 80 | extern int mp_nintr; |
| 81 | extern int mp_isa_bus, mp_eisa_bus; |
| 82 | extern int mp_nbus; |
| 83 | int mp_pci_scan(device_t, struct pcibus_attach_args *, cfprint_t); |
| 84 | void mp_pci_childdetached(device_t, device_t); |
| 85 | #endif |
| 86 | #endif |
| 87 | |
| 88 | #endif /* _X86_MPCONFIG_H_ */ |
| 89 | |