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.
 
 
 
 
 
 

155 lines
4.3 KiB

/*++
Copyright (2) 2002 Microsoft Corporation
Module Name:
uagp35.h
Abstract:
This module contains definitions for the MS AGP v3 Filter Driver
Author:
Eric F. Nelson (enelson) June 6, 2002
Revision History:
--*/
#ifndef __UAGP35_H__
#define __UAGP35_H__
#define ON 1
#define OFF 0
#define APERTURE_BASE 0x10
#define APERTURE_BASE64_MASK 0x04
//
// Aperture sizes:
//
// bits 11 10 9 8 7 6 5 4 3 2 1 0
// ----------------------------------------
// 1 1 1 1 0 0 1 1 1 1 1 1 4MB
// 1 1 1 1 0 0 1 1 1 1 1 0 8MB
// 1 1 1 1 0 0 1 1 1 1 0 0 16MB
// 1 1 1 1 0 0 1 1 1 0 0 0 32MB
// 1 1 1 1 0 0 1 1 0 0 0 0 64MB
// 1 1 1 1 0 0 1 0 0 0 0 0 128MB
// 1 1 1 1 0 0 0 0 0 0 0 0 256MB
// 1 1 1 0 0 0 0 0 0 0 0 0 512MB
// 1 1 0 0 0 0 0 0 0 0 0 0 1024MB
// 1 0 0 0 0 0 0 0 0 0 0 0 2048MB
// 0 0 0 0 0 0 0 0 0 0 0 0 4096MB
//
typedef enum _AGP3_AP_SIZE {
// AP_SIZE_4096MB = 0x000, // IO Resource descriptor's size is only 32-bits!
AP_SIZE_2048MB = 0x800,
AP_SIZE_1024MB = 0xC00,
AP_SIZE_512MB = 0xE00,
AP_SIZE_256MB = 0xF00,
AP_SIZE_128MB = 0xF20,
AP_SIZE_64MB = 0xF30,
AP_SIZE_32MB = 0xF38,
AP_SIZE_16MB = 0xF3C,
AP_SIZE_8MB = 0xF3E,
AP_SIZE_4MB = 0xF3F,
} AGP3_AP_SIZE, *PAGP3_AP_SIZE;
#define AP_SIZE_MASK(_x_) ((((_x_) & 0xF00) >> 2) | ((_x_) & 0x3F))
#define AP_BASE_MASK(_z_) (AP_SIZE_MASK((_z_)) << 22)
//
// We'll probably never use 64-bit PTE support,
// but we'll define the corresponding structures,
// and make the code explicit when using 32-bit
// format
//
typedef struct _GART_ENTRY_SW32 {
ULONG State : 5;
ULONG Reserved : 27;
} GART_ENTRY_SW32, *PGART_ENTRY_SW32;
//
// GART Entry states are defined so that all software-only states
// have the Valid bit clear.
//
#define GART_ENTRY_VALID 1 // 001
#define GART_ENTRY_FREE 0 // 000
#define GART_ENTRY_COHERENT 2 // 010
#define GART_ENTRY_WC 4 // 00100
#define GART_ENTRY_UC 8 // 01000
#define GART_ENTRY_CC 16 // 10000
#define GART_ENTRY_RESERVED_WC GART_ENTRY_WC
#define GART_ENTRY_RESERVED_UC GART_ENTRY_UC
#define GART_ENTRY_RESERVED_CC GART_ENTRY_CC
#define GART_ENTRY_VALID_WC (GART_ENTRY_VALID)
#define GART_ENTRY_VALID_UC (GART_ENTRY_VALID)
#define GART_ENTRY_VALID_CC (GART_ENTRY_VALID | GART_ENTRY_COHERENT)
typedef struct _GART_ENTRY_SW64 {
ULONGLONG State : 5;
ULONGLONG Reserved : 59;
} GART_ENTRY_SW64, *PGART_ENTRY_SW64;
typedef struct _GART_ENTRY_HW32 {
ULONG Valid : 1;
ULONG Coherent : 1;
ULONG Reserved : 2;
ULONG PageHigh : 8;
ULONG PageLow : 20;
} GART_ENTRY_HW32, *PGART_ENTRY_HW32;
#define PAGE_HIGH_SHIFT 20
typedef struct _GART_ENTRY_HW64 {
ULONGLONG Valid : 1;
ULONGLONG Coherent : 1;
ULONGLONG Reserved : 2;
ULONGLONG PageHigh : 8;
ULONGLONG PageLow : 20;
ULONGLONG PageHigh2 : 32;
} GART_ENTRY_HW64, *PGART_ENTRY_HW64;
typedef union _GART_PTE32 {
GART_ENTRY_HW32 Hard;
GART_ENTRY_SW32 Soft;
ULONG AsULONG;
} GART_PTE32, *PGART_PTE32;
typedef union _GART_PTE64 {
GART_ENTRY_HW64 Hard;
GART_ENTRY_SW64 Soft;
ULONGLONG AsULONGLONG;
} GART_PTE64, *PGART_PTE64;
//
// Define the MS AGP3-specific extension
//
typedef struct _UAGP35_EXTENSION {
PHYSICAL_ADDRESS ApertureStart;
PHYSICAL_ADDRESS GartPhysical;
ULONGLONG SpecialTarget;
PGART_PTE32 Gart;
ULONG GartLength;
ULONG ApertureLength;
ULONG DeviceId;
ULONG CapabilityId;
BOOLEAN GlobalEnable;
BOOLEAN FourGBEnable;
} UAGP35_EXTENSION, *PUAGP35_EXTENSION;
//
// These flags are passed via the registry in the special reserve section
// of AGP device flags
//
#define AGP_FLAG_SPECIAL_NO_APERTURE_DISABLE 0x0000000000100000L
#define AGP_FLAG_SPECIAL_VIA_AGP2_RATE_PATCH 0x0000000000200000L
#endif // __UAGP35_H__