260 lines
9.0 KiB
C
260 lines
9.0 KiB
C
|
/*++
|
|||
|
|
|||
|
Copyright (c) 1993 Weitek Corporation
|
|||
|
|
|||
|
Module Name:
|
|||
|
|
|||
|
fairway.c
|
|||
|
|
|||
|
Abstract:
|
|||
|
|
|||
|
This module contains OEM specific functions for the IBM Fairway PCI Weitek
|
|||
|
Video Graphics Adapter on a PowerPC system.
|
|||
|
|
|||
|
Environment:
|
|||
|
|
|||
|
Kernel mode
|
|||
|
|
|||
|
Revision History:
|
|||
|
Copied from wtkp90vl.c with changes for IBM Fairway adapter.
|
|||
|
--*/
|
|||
|
|
|||
|
|
|||
|
#include "dderror.h"
|
|||
|
#include "devioctl.h"
|
|||
|
|
|||
|
#include "miniport.h"
|
|||
|
#include "ntddvdeo.h"
|
|||
|
#include "video.h"
|
|||
|
#include "dac.h"
|
|||
|
#include "p9.h"
|
|||
|
#include "p9gbl.h"
|
|||
|
#include "p9000.h"
|
|||
|
#include "fairway.h"
|
|||
|
#include "vga.h"
|
|||
|
|
|||
|
//
|
|||
|
// OEM specific static data.
|
|||
|
//
|
|||
|
|
|||
|
//
|
|||
|
// The default adapter description structure for the Weitek P9000 VL board.
|
|||
|
//
|
|||
|
|
|||
|
ADAPTER_DESC IBMFairwayDesc =
|
|||
|
{
|
|||
|
0L, // P9 Memconf value (un-initialized)
|
|||
|
HSYNC_INTERNAL | VSYNC_INTERNAL |
|
|||
|
COMPOSITE_SYNC | VIDEO_NORMAL, // P9 Srctl value
|
|||
|
0L, // Number of OEM specific registers
|
|||
|
FALSE, // Should autodetection be attempted?
|
|||
|
FairwayGetBaseAddr, // Routine to detect/map P9 base addr
|
|||
|
VLSetMode, // Routine to set the P9 mode
|
|||
|
VLEnableP9, // Routine to enable P9 video
|
|||
|
VLDisableP9, // Routine to disable P9 video
|
|||
|
(PVOID) 0, // Routine to enable P9 memory
|
|||
|
4, // Clock divisor value
|
|||
|
FALSE // Is a Wtk 5x86 VGA present?
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
//
|
|||
|
// FairwayDefDACRegRange contains info about the memory/io space ranges
|
|||
|
// used by the DAC.
|
|||
|
//
|
|||
|
|
|||
|
VIDEO_ACCESS_RANGE FairwayDefDACRegRange[] =
|
|||
|
{
|
|||
|
{
|
|||
|
RS_0_Fairway_ADDR, // Low address
|
|||
|
0x00000000, // Hi address
|
|||
|
0x01, // length
|
|||
|
0, // Is range in i/o space?
|
|||
|
1, // Range should be visible
|
|||
|
1 // Range should be shareable
|
|||
|
},
|
|||
|
{
|
|||
|
RS_1_Fairway_ADDR, // Low address
|
|||
|
0x00000000, // Hi address
|
|||
|
0x01, // length
|
|||
|
0, // Is range in i/o space?
|
|||
|
1, // Range should be visible
|
|||
|
1 // Range should be shareable
|
|||
|
},
|
|||
|
{
|
|||
|
RS_2_Fairway_ADDR, // Low address
|
|||
|
0x00000000, // Hi address
|
|||
|
0x01, // length
|
|||
|
0, // Is range in i/o space?
|
|||
|
1, // Range should be visible
|
|||
|
1 // Range should be shareable
|
|||
|
},
|
|||
|
{
|
|||
|
RS_3_Fairway_ADDR, // Low address
|
|||
|
0x00000000, // Hi address
|
|||
|
0x01, // length
|
|||
|
0, // Is range in i/o space?
|
|||
|
1, // Range should be visible
|
|||
|
1 // Range should be shareable
|
|||
|
},
|
|||
|
{
|
|||
|
RS_4_Fairway_ADDR, // Low address
|
|||
|
0x00000000, // Hi address
|
|||
|
0x01, // length
|
|||
|
0, // Is range in i/o space?
|
|||
|
1, // Range should be visible
|
|||
|
1 // Range should be shareable
|
|||
|
},
|
|||
|
{
|
|||
|
RS_5_Fairway_ADDR, // Low address
|
|||
|
0x00000000, // Hi address
|
|||
|
0x01, // length
|
|||
|
0, // Is range in i/o space?
|
|||
|
1, // Range should be visible
|
|||
|
1 // Range should be shareable
|
|||
|
},
|
|||
|
{
|
|||
|
RS_6_Fairway_ADDR, // Low address
|
|||
|
0x00000000, // Hi address
|
|||
|
0x01, // length
|
|||
|
0, // Is range in i/o space?
|
|||
|
1, // Range should be visible
|
|||
|
1 // Range should be shareable
|
|||
|
},
|
|||
|
{
|
|||
|
RS_7_Fairway_ADDR, // Low address
|
|||
|
0x00000000, // Hi address
|
|||
|
0x01, // length
|
|||
|
0, // Is range in i/o space?
|
|||
|
1, // Range should be visible
|
|||
|
1 // Range should be shareable
|
|||
|
},
|
|||
|
{
|
|||
|
RS_8_Fairway_ADDR, // Low address
|
|||
|
0x00000000, // Hi address
|
|||
|
0x01, // length
|
|||
|
0, // Is range in i/o space?
|
|||
|
1, // Range should be visible
|
|||
|
1 // Range should be shareable
|
|||
|
},
|
|||
|
{
|
|||
|
RS_9_Fairway_ADDR, // Low address
|
|||
|
0x00000000, // Hi address
|
|||
|
0x01, // length
|
|||
|
0, // Is range in i/o space?
|
|||
|
1, // Range should be visible
|
|||
|
1 // Range should be shareable
|
|||
|
},
|
|||
|
{
|
|||
|
RS_A_Fairway_ADDR, // Low address
|
|||
|
0x00000000, // Hi address
|
|||
|
0x01, // length
|
|||
|
0, // Is range in i/o space?
|
|||
|
1, // Range should be visible
|
|||
|
1 // Range should be shareable
|
|||
|
},
|
|||
|
{
|
|||
|
RS_B_Fairway_ADDR, // Low address
|
|||
|
0x00000000, // Hi address
|
|||
|
0x01, // length
|
|||
|
0, // Is range in i/o space?
|
|||
|
1, // Range should be visible
|
|||
|
1 // Range should be shareable
|
|||
|
},
|
|||
|
{
|
|||
|
RS_C_Fairway_ADDR, // Low address
|
|||
|
0x00000000, // Hi address
|
|||
|
0x01, // length
|
|||
|
0, // Is range in i/o space?
|
|||
|
1, // Range should be visible
|
|||
|
1 // Range should be shareable
|
|||
|
},
|
|||
|
{
|
|||
|
RS_D_Fairway_ADDR, // Low address
|
|||
|
0x00000000, // Hi address
|
|||
|
0x01, // length
|
|||
|
0, // Is range in i/o space?
|
|||
|
1, // Range should be visible
|
|||
|
1 // Range should be shareable
|
|||
|
},
|
|||
|
{
|
|||
|
RS_E_Fairway_ADDR, // Low address
|
|||
|
0x00000000, // Hi address
|
|||
|
0x01, // length
|
|||
|
0, // Is range in i/o space?
|
|||
|
1, // Range should be visible
|
|||
|
1 // Range should be shareable
|
|||
|
},
|
|||
|
{
|
|||
|
RS_F_Fairway_ADDR, // Low address
|
|||
|
0x00000000, // Hi address
|
|||
|
0x01, // length
|
|||
|
0, // Is range in i/o space?
|
|||
|
1, // Range should be visible
|
|||
|
1 // Range should be shareable
|
|||
|
}
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
BOOLEAN
|
|||
|
FairwayGetBaseAddr(
|
|||
|
PHW_DEVICE_EXTENSION HwDeviceExtension
|
|||
|
)
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
Perform board detection and if present return the P9000 base address.
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
HwDeviceExtension - Pointer to the miniport driver's device extension.
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
TRUE - Board found, P9 and Frame buffer address info was placed in
|
|||
|
the device extension.
|
|||
|
|
|||
|
FALSE - Board not found.
|
|||
|
|
|||
|
--*/
|
|||
|
{
|
|||
|
|
|||
|
// Don't bother checking registry for base address since we are currently just
|
|||
|
// supporting the P9 physical base address at C0000000.
|
|||
|
|
|||
|
// Initialize the high order dword of the device extension base
|
|||
|
// address field.
|
|||
|
//
|
|||
|
|
|||
|
HwDeviceExtension->P9PhysAddr.HighPart = 0;
|
|||
|
|
|||
|
// Initialize the low order dword of the device extension base
|
|||
|
// address field.
|
|||
|
//
|
|||
|
|
|||
|
|
|||
|
HwDeviceExtension->P9PhysAddr.LowPart = MemBase;
|
|||
|
|
|||
|
if (!VLP90CoprocDetect(HwDeviceExtension,
|
|||
|
HwDeviceExtension->P9PhysAddr.LowPart))
|
|||
|
{
|
|||
|
|
|||
|
return(FALSE);
|
|||
|
}
|
|||
|
|
|||
|
//
|
|||
|
// Copy the DAC register access ranges to the global access range
|
|||
|
// structure.
|
|||
|
//
|
|||
|
|
|||
|
VideoPortMoveMemory(&DriverAccessRanges[NUM_DRIVER_ACCESS_RANGES],
|
|||
|
FairwayDefDACRegRange,
|
|||
|
HwDeviceExtension->Dac.cDacRegs *
|
|||
|
sizeof(VIDEO_ACCESS_RANGE));
|
|||
|
return(TRUE);
|
|||
|
}
|
|||
|
|
|||
|
|