1*83fd2fa1Sknakahara /* $NetBSD: mpconfig.h,v 1.15 2015/04/27 06:51:40 knakahara Exp $ */ 28375b2d9Sfvdl 38375b2d9Sfvdl /* 48375b2d9Sfvdl * Definitions originally from the mpbios code, but now used for ACPI 58375b2d9Sfvdl * MP config as well. 68375b2d9Sfvdl */ 78375b2d9Sfvdl 8f141fad5Syamt #ifndef _X86_MPCONFIG_H_ 9f141fad5Syamt #define _X86_MPCONFIG_H_ 108375b2d9Sfvdl 118375b2d9Sfvdl /* 126a6db3cbSfvdl * XXX 136a6db3cbSfvdl */ 14391925c7Sdyoung #include <sys/bus.h> 156a6db3cbSfvdl #include <dev/pci/pcivar.h> 166a6db3cbSfvdl #include <machine/pci_machdep.h> 176a6db3cbSfvdl 186a6db3cbSfvdl /* 1909d05f28Syamt * Interrupt types 208375b2d9Sfvdl */ 218375b2d9Sfvdl #define MPS_INTTYPE_INT 0 228375b2d9Sfvdl #define MPS_INTTYPE_NMI 1 238375b2d9Sfvdl #define MPS_INTTYPE_SMI 2 248375b2d9Sfvdl #define MPS_INTTYPE_ExtINT 3 258375b2d9Sfvdl 268375b2d9Sfvdl #define MPS_INTPO_DEF 0 278375b2d9Sfvdl #define MPS_INTPO_ACTHI 1 288375b2d9Sfvdl #define MPS_INTPO_ACTLO 3 298375b2d9Sfvdl 308375b2d9Sfvdl #define MPS_INTTR_DEF 0 318375b2d9Sfvdl #define MPS_INTTR_EDGE 1 328375b2d9Sfvdl #define MPS_INTTR_LEVEL 3 338375b2d9Sfvdl 348375b2d9Sfvdl #ifndef _LOCORE 358375b2d9Sfvdl 368375b2d9Sfvdl struct mpbios_int; 378375b2d9Sfvdl 388375b2d9Sfvdl struct mp_bus 398375b2d9Sfvdl { 40e73f21e6Schristos const char *mb_name; /* XXX bus name */ 418375b2d9Sfvdl int mb_idx; /* XXX bus index */ 428f1ba949Sjunyoung void (*mb_intr_print)(int); 435c97fc53Scegger void (*mb_intr_cfg)(const struct mpbios_int *, uint32_t *); 448375b2d9Sfvdl struct mp_intr_map *mb_intrs; 455c97fc53Scegger uint32_t mb_data; /* random bus-specific datum. */ 46c94ffba5Sdyoung device_t mb_dev; /* has been autoconfigured if mb_dev != NULL */ 476a6db3cbSfvdl pcitag_t *mb_pci_bridge_tag; 486a6db3cbSfvdl pci_chipset_tag_t mb_pci_chipset_tag; 498375b2d9Sfvdl }; 508375b2d9Sfvdl 518375b2d9Sfvdl struct mp_intr_map 528375b2d9Sfvdl { 538375b2d9Sfvdl struct mp_intr_map *next; 548375b2d9Sfvdl struct mp_bus *bus; 5509d05f28Syamt /* 5609d05f28Syamt * encoding of bus_pin is mp_bus dependant. 5709d05f28Syamt * for pci, bus_pin = (pci_device_number << 2) | pin 5809d05f28Syamt * where pin is 0=INTA ... 3=INTD. 5909d05f28Syamt */ 608375b2d9Sfvdl int bus_pin; 6109d05f28Syamt struct pic *ioapic; /* NULL for local apic */ 628375b2d9Sfvdl int ioapic_pin; 63*83fd2fa1Sknakahara intr_handle_t ioapic_ih; /* int handle, see i82093var.h for encoding */ 648375b2d9Sfvdl int type; /* from mp spec intr record */ 658375b2d9Sfvdl int flags; /* from mp spec intr record */ 665c97fc53Scegger uint32_t redir; 6706f2c032Scegger uint32_t cpu_id; 68f42f32caSfvdl int global_int; /* ACPI global interrupt number */ 69631d339eSfvdl int sflags; /* other, software flags (see below) */ 7001158ea8Schristos void *linkdev; 7101158ea8Schristos int sourceindex; 728375b2d9Sfvdl }; 738375b2d9Sfvdl 74631d339eSfvdl #define MPI_OVR 0x0001 /* Was overridden by an ACPI OVR */ 75631d339eSfvdl 768375b2d9Sfvdl #if defined(_KERNEL) 778375b2d9Sfvdl extern int mp_verbose; 788375b2d9Sfvdl extern struct mp_bus *mp_busses; 798375b2d9Sfvdl extern struct mp_intr_map *mp_intrs; 808375b2d9Sfvdl extern int mp_nintr; 818375b2d9Sfvdl extern int mp_isa_bus, mp_eisa_bus; 828375b2d9Sfvdl extern int mp_nbus; 83c94ffba5Sdyoung int mp_pci_scan(device_t, struct pcibus_attach_args *, cfprint_t); 84c94ffba5Sdyoung void mp_pci_childdetached(device_t, device_t); 858375b2d9Sfvdl #endif 868375b2d9Sfvdl #endif 878375b2d9Sfvdl 88f141fad5Syamt #endif /* _X86_MPCONFIG_H_ */ 89