NT4/private/ntos/video/weitekp9/ppc/fairway.c
2020-09-30 17:12:29 +02:00

260 lines
9.0 KiB
C
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*++
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);
}