Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*++
Copyright (c) 1998 Microsoft Corporation
Module Name:
msi.h
Abstract:
This file defines structures and data types used by the MSI (Message Signalled Interrupt) support functionality of the ACPI IRQ arbiter.
Author:
Elliot Shmukler (t-ellios) 7-15-98
Environment:
Kernel mode only.
Revision History:
--*/
#ifndef _ACPI_MSI_H_
#define _ACPI_MSI_H_
//
// APIC Version Register
//
struct _ApicVersion { UCHAR Version; // either 0.x or 1.x
UCHAR Reserved1:7; UCHAR MSICapable:1; // is this APIC an MSI receiver?
UCHAR MaxRedirEntries; // Number of INTIs on unit
UCHAR Reserved2; };
typedef struct _ApicVersion APIC_VERSION, *PAPIC_VERSION;
//
// The Offset from the IO APIC base address of the APIC Assertion Register.
// It is this register that is the target of MSI writes.
//
#define APIC_ASSERTION_REGISTER_OFFSET 0x20
//
// Useful info maintained by the arbiter about an individual IO APIC
//
typedef struct _IOAPIC_MSI_INFO { BOOLEAN MSICapable; // Is this IO APIC an MSI receiver?
ULONG VectorBase; // The Global System Interrupt Vector base for this APIC
ULONG MaxVectors; // The number of vectors supported by this APIC
ULONG BaseAddress; // The IO APIC Unit base address
} IOAPIC_MSI_INFO, *PIOAPIC_MSI_INFO;
//
// MSI information structure
// (basically the APIC information needed for MSI vector allocation
// & routing)
//
typedef struct _MSI_INFORMATION { BOOLEAN PRTMappingsScanned; // Have we determined the _PRT mapped vectors?
PRTL_BITMAP PRTMappedVectors; // A BitMap of the vectors mapped by the _PRT
USHORT NumIOApics; // The number of IO APICs in this system
IOAPIC_MSI_INFO ApicInfo[ANYSIZE_ARRAY]; // Information about each IO APIC in the system
} MSI_INFORMATION, *PMSI_INFORMATION;
//
// Global variable to hold MSI information
// (this is non-NULL only if this system supports MSI)
//
extern PMSI_INFORMATION MsiInformation;
//
// Prototype of a callback used by AcpiArbFindAndProcessEachPRT to initiate the processing
// of each PRT it finds
//
typedef VOID (*PACPI_ARB_PROCESS_PRT)(IN PSNOBJ);
// Prototypes from msi.c (used by arbiter)
VOID AcpiMSIInitializeInfo(VOID); BOOLEAN AcpiMSIFindAvailableVector(OUT PULONG Vector); BOOLEAN AcpiMSICreateRoutingToken(IN ULONG Vector, IN OUT PROUTING_TOKEN Token);
VOID AcpiArbFindAndProcessEachPRT(IN PDEVICE_OBJECT Root, IN PACPI_ARB_PROCESS_PRT ProcessCallback ); VOID AcpiMSIExtractMappedVectorsFromPRT(IN PNSOBJ prtObj);
#endif
|