/*++ Copyright (c) Microsoft Corporation. All rights reserved. Module Name: local.h Abstract: This contains the private header information (function prototypes, data and type declarations) for the PCI IRQ Miniport library. Author: Santosh Jodh (santoshj) 09-June-1998 Revision History: --*/ #include "nthal.h" #include "hal.h" #include "pci.h" #include "pciirqmp.h" #if DBG #define PCIIRQMPPRINT(x) { \ DbgPrint("PCIIRQMP: "); \ DbgPrint x; \ DbgPrint("\n"); \ } #else #define PCIIRQMPPRINT(x) #endif // // Function prototypes for functions that every chipset module // has to provide. // typedef NTSTATUS (*PIRQMINI_VALIDATE_TABLE) ( PPCI_IRQ_ROUTING_TABLE PciIrqRoutingTable, ULONG Flags ); typedef NTSTATUS (*PIRQMINI_GET_IRQ) ( OUT PUCHAR Irq, IN UCHAR Link ); typedef NTSTATUS (*PIRQMINI_SET_IRQ) ( IN UCHAR Irq, IN UCHAR Link ); typedef NTSTATUS (*PIRQMINI_GET_TRIGGER) ( OUT PULONG Trigger ); typedef NTSTATUS (*PIRQMINI_SET_TRIGGER) ( IN ULONG Trigger ); // // Chipset specific data contains a table of function pointers // to program the chipset. // typedef struct _CHIPSET_DATA { PIRQMINI_VALIDATE_TABLE ValidateTable; PIRQMINI_GET_IRQ GetIrq; PIRQMINI_SET_IRQ SetIrq; PIRQMINI_GET_TRIGGER GetTrigger; PIRQMINI_SET_TRIGGER SetTrigger; } CHIPSET_DATA, *PCHIPSET_DATA; // // Typedefs to keep source level compatibility with W9x // typedef PCI_IRQ_ROUTING_TABLE IRQINFOHEADER; typedef PPCI_IRQ_ROUTING_TABLE PIRQINFOHEADER; typedef SLOT_INFO IRQINFO; typedef PSLOT_INFO PIRQINFO; #define CDECL #define LOCAL_DATA static #define GLOBAL_DATA #define IO_Delay() #define CATENATE(x, y) x ## y #define XCATENATE(x, y) CATENATE(x, y) #define DECLARE_MINIPORT_FUNCTION(x, y) XCATENATE(x, y) // // Macro to declare a table of function pointers for the chipset // module. // #define DECLARE_CHIPSET(x) \ { DECLARE_MINIPORT_FUNCTION(x, ValidateTable), \ DECLARE_MINIPORT_FUNCTION(x, GetIRQ), \ DECLARE_MINIPORT_FUNCTION(x, SetIRQ), \ DECLARE_MINIPORT_FUNCTION(x, GetTrigger), \ DECLARE_MINIPORT_FUNCTION(x, SetTrigger) \ } // // Macro to declare a table of function pointers for EISA // compatible chipset module. // #define DECLARE_EISA_CHIPSET(x) \ { DECLARE_MINIPORT_FUNCTION(x, ValidateTable), \ DECLARE_MINIPORT_FUNCTION(x, GetIRQ), \ DECLARE_MINIPORT_FUNCTION(x, SetIRQ), \ EisaGetTrigger, \ EisaSetTrigger \ } // // Macro to declare the functions to be provided by the chipset // module. // #define DECLARE_IRQ_MINIPORT(x) \ NTSTATUS \ DECLARE_MINIPORT_FUNCTION(x, ValidateTable) ( \ IN PPCI_IRQ_ROUTING_TABLE PciIrqRoutingTable, \ IN ULONG Flags \ ); \ NTSTATUS \ DECLARE_MINIPORT_FUNCTION(x, GetIRQ) ( \ OUT PUCHAR Irq, \ IN UCHAR Link \ ); \ NTSTATUS \ DECLARE_MINIPORT_FUNCTION( x, SetIRQ) ( \ IN UCHAR Irq, \ IN UCHAR Link \ ); \ NTSTATUS \ DECLARE_MINIPORT_FUNCTION(x, GetTrigger) ( \ OUT PULONG Trigger \ ); \ NTSTATUS \ DECLARE_MINIPORT_FUNCTION(x, SetTrigger) ( \ IN ULONG Trigger \ ); // // Macro to declare the functions to be provided by the EISA // compatible chipset. // #define DECLARE_EISA_IRQ_MINIPORT(x) \ NTSTATUS \ DECLARE_MINIPORT_FUNCTION(x, ValidateTable) ( \ IN PPCI_IRQ_ROUTING_TABLE PciIrqRoutingTable, \ IN ULONG Flags \ ); \ NTSTATUS \ DECLARE_MINIPORT_FUNCTION(x, GetIRQ) ( \ OUT PUCHAR Irq, \ IN UCHAR Link \ ); \ NTSTATUS \ DECLARE_MINIPORT_FUNCTION( x, SetIRQ) ( \ IN UCHAR Irq, \ IN UCHAR Link \ ); // // Declare all miniports here. // DECLARE_EISA_IRQ_MINIPORT(Mercury) DECLARE_EISA_IRQ_MINIPORT(Triton) DECLARE_IRQ_MINIPORT(VLSI) DECLARE_IRQ_MINIPORT(OptiViper) DECLARE_EISA_IRQ_MINIPORT(SiS5503) DECLARE_IRQ_MINIPORT(VLSIEagle) DECLARE_EISA_IRQ_MINIPORT(M1523) DECLARE_IRQ_MINIPORT(NS87560) DECLARE_EISA_IRQ_MINIPORT(Compaq3) DECLARE_EISA_IRQ_MINIPORT(M1533) DECLARE_IRQ_MINIPORT(OptiFireStar) DECLARE_EISA_IRQ_MINIPORT(VT586) DECLARE_EISA_IRQ_MINIPORT(CPQOSB) DECLARE_EISA_IRQ_MINIPORT(CPQ1000) DECLARE_EISA_IRQ_MINIPORT(Cx5520) DECLARE_IRQ_MINIPORT(Toshiba) DECLARE_IRQ_MINIPORT(NEC) DECLARE_IRQ_MINIPORT(VESUVIUS) // // Prototype for misc utility functions. // NTSTATUS EisaGetTrigger ( OUT PULONG Trigger ); NTSTATUS EisaSetTrigger ( IN ULONG Trigger ); UCHAR ReadConfigUchar ( IN ULONG BusNumber, IN ULONG DevFunc, IN UCHAR Offset ); USHORT ReadConfigUshort ( IN ULONG BusNumber, IN ULONG DevFunc, IN UCHAR Offset ); ULONG ReadConfigUlong ( IN ULONG BusNumber, IN ULONG DevFunc, IN UCHAR Offset ); VOID WriteConfigUchar ( IN ULONG BusNumber, IN ULONG DevFunc, IN UCHAR Offset, IN UCHAR Data ); VOID WriteConfigUshort ( IN ULONG BusNumber, IN ULONG DevFunc, IN UCHAR Offset, IN USHORT Data ); VOID WriteConfigUlong ( IN ULONG BusNumber, IN ULONG DevFunc, IN UCHAR Offset, IN ULONG Data ); UCHAR GetMinLink ( IN PPCI_IRQ_ROUTING_TABLE PciIrqRoutingTable ); UCHAR GetMaxLink ( IN PPCI_IRQ_ROUTING_TABLE PciIrqRoutingTable ); VOID NormalizeLinks ( IN PPCI_IRQ_ROUTING_TABLE PciIrqRoutingTable, IN UCHAR Adjustment ); // // Bus number of the Pci Irq Router device. // extern ULONG bBusPIC; // // Slot number of Pci Irq Router device (Bits 7:3 Dev, 2:0 Func). // extern ULONG bDevFuncPIC;