NetBSD/sys/dev/acpi/acpi_madt.h

156 lines
4.3 KiB
C

/* $NetBSD: acpi_madt.h,v 1.2 2003/01/07 18:46:49 fvdl Exp $ */
/*
* Copyright (c) 2003 Wasabi Systems, Inc.
* All rights reserved.
*
* Written by Frank van der Linden for Wasabi Systems, Inc.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed for the NetBSD Project by
* Wasabi Systems, Inc.
* 4. The name of Wasabi Systems, Inc. may not be used to endorse
* or promote products derived from this software without specific prior
* written permission.
*
* THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL WASABI SYSTEMS, INC
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
/*
* MADT entry types not defined in actbl.h
*/
#define APIC_INTSRC_OVR 2
#define APIC_INTSRC_NMI 3
#define APIC_LAPIC_NMI 4
#define APIC_ADDR_OVR 5
#define APIC_IOSAPIC 6
#define APIC_LOCAL_SAPIC 7
#define APIC_PLAT_INTSRC 8
#pragma pack(1)
/*
* MADT entry structures not defined in actbl.h
*/
/*
* Interrupt source override.
*/
typedef struct
{
APIC_HEADER Header;
UINT8 Bus; /* 0 (ISA) */
UINT8 Source; /* Legacy IRQ */
UINT32 GlobalInt; /* Glocal IO APIC int */
UINT32_BIT Polarity:2; /* See MPS_INTPO* in mpbiosreg.h */
UINT32_BIT Trigger:2; /* See MPS_INTTR* in mpbiosreg.h */
UINT32_BIT Reserved:12; /* Must be zero */
} INT_SOURCE_OVERRIDE;
/*
* I/O APIC NMI source structure.
*/
typedef struct
{
APIC_HEADER Header;
UINT32_BIT Polarity:2; /* See above */
UINT32_BIT Trigger:2; /* See above */
UINT32_BIT Reserved:12;
UINT32 GlobalInt;
} INT_IOAPIC_SOURCE_NMI;
/*
* Local APIC NMI mapping.
*/
typedef struct
{
APIC_HEADER Header;
UINT8 ApicId; /* Local APIC Id */
UINT32_BIT Polarity:2; /* See above */
UINT32_BIT Trigger:2; /* See above */
UINT32_BIT Reserved:12;
UINT8 Lint; /* Local APIC input */
} INT_LAPIC_SOURCE_NMI;
/*
* 64-bit local APIC address override.
*/
typedef struct
{
APIC_HEADER Header;
UINT16 Reserved; /* Must be zero */
UINT64 LocalApicAddress; /* Phys addr of local APIC */
} LAPIC_ADDR_OVR;
/*
* I/O SAPIC.
*/
typedef struct
{
APIC_HEADER Header;
UINT8 IoSapicId;
UINT8 Reserved;
UINT32 Vector; /* Vectors start at this off */
UINT64 IoSapicAddress; /* Phys addr of SAPIC */
} IO_SAPIC;
/*
* Local SAPIC.
*/
typedef struct
{
APIC_HEADER Header;
UINT8 ProcessorApicId;
UINT8 LocalSapicId;
UINT8 LocalSapicEid;
UINT8 Reserved[3];
UINT32_BIT ProcessorEnabled:1;
UINT32_BIT Reserved1:31;
} LOCAL_SAPIC;
/*
* Platform interrupt source.
*/
typedef struct
{
APIC_HEADER Header;
UINT32_BIT Polarity:2; /* See above */
UINT32_BIT Trigger:2; /* See above */
UINT32_BIT Reserved:12;
UINT8 Type; /* See below */
UINT8 ProcessorId;
UINT8 ProcessorEid;
UINT8 IoSapicVector;
UINT32 GlobalInt;
UINT32 Reserved1;
} INT_PLATFORM;
#define ACPI_PLATFORM_INT_PMI 1
#define ACPI_PLATFORM_INT_INIT 2
#define ACPI_PLATFORM_INT_CERR 3
extern ACPI_TABLE_HEADER *AcpiGbl_MADT;
ACPI_STATUS acpi_madt_map(void);
void acpi_madt_unmap(void);
void acpi_madt_walk(ACPI_STATUS (*)(APIC_HEADER *, void *), void *);