Source code of Windows XP (NT5)
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) 1993 Compaq Computer Corporation
Module Name:
ctlrasic.c
Abstract:
This module contains the code for identification of Compaq Display Controller ASICS.
Original QVision ASIC - Feb. '92 -------------------------------- QVision 1024 /E - 1M configuration QVision 1024 /I - 1M configuration Deskpro /i with system board QVision - 512k or 1M configuration
Enhanced QVision ASIC - May '93 ------------------------------- QVision 1024 /E - 1M or 2M configuration QVision 1024 /I - 1M or 2M configuration QVision 1280 /E - 2M configuration QVision 1280 /I - 2M configuration
Environment:
kernel mode only
Notes:
Revision History: $0006 miked: 02/17/1994 . took out conditional debug code to satisfy MSBHPD
$0004 miked: 1/26/1994 . Added debug print code without all the other DBG overhead
12/1/93 Mike Duke Original module started as start for NT version of QRY library. --*/ //---------------------------------------------------------------------------
#include "dderror.h"
#include "devioctl.h"
#include "miniport.h"
#include "ntddvdeo.h"
#include "video.h"
#include "qvision.h"
#include "qry_nt.h"
ULONG QRY_ControllerASICID( PUCHAR IOAddress ) /*++
Function: QRY_ControllerASICID
This function returns the ASIC id of Compaq Video controllers.
Return value: The return value is a ULONG with bytes defined as follows:
3 2 1 0 (byte positions) ULONG ---> XX FF FF FF -- -- -- -- | | | |____ASIC ID | | |_______Extended ID | |__________Second Extended ID |_____________Not used (will be zero)
--*/ //---------------------------------------------------------------------------
{ ULONG ulReturn = 0L; UCHAR ucTemp = 0 ;
// unlock QVision registers
//
VideoPortWritePortUchar((PUCHAR)(IOAddress + GRAPH_ADDRESS_PORT), 0x0f); ucTemp = VideoPortReadPortUchar((IOAddress + \ GRAPH_DATA_PORT)) & 0xf0; VideoPortWritePortUchar((PUCHAR)(IOAddress + GRAPH_DATA_PORT), (UCHAR)(0x05 | ucTemp)); VideoPortWritePortUchar((PUCHAR)(IOAddress + GRAPH_ADDRESS_PORT), 0x10); ucTemp = VideoPortReadPortUchar((PUCHAR)(IOAddress + GRAPH_DATA_PORT)); VideoPortWritePortUchar((PUCHAR)(IOAddress + GRAPH_DATA_PORT), (UCHAR)(0x28 | ucTemp));
//
// get asic id
//
VideoPortWritePortUchar((PUCHAR)(IOAddress + GRAPH_ADDRESS_PORT), 0x0c);
// read in asic id
//
ucTemp = VideoPortReadPortUchar(IOAddress + GRAPH_DATA_PORT) ;
ulReturn = (ULONG)ucTemp; // save asic id
//
// is extended id info available ?
//
if (ucTemp & EXTENDED_ID_BIT) {
VideoPortWritePortUchar((PUCHAR)(IOAddress + GRAPH_ADDRESS_PORT), 0x0d);
//
// read in extended id
//
ucTemp = VideoPortReadPortUchar(IOAddress + GRAPH_DATA_PORT) ; ulReturn |= ((ULONG)(ucTemp)) << 8 ;
//
// is second extended id info available ?
//
if (ucTemp & EXTENDED_ID2_BIT) {
VideoPortWritePortUchar((PUCHAR)(IOAddress + GRAPH_ADDRESS_PORT), 0x0e);
//
// read in second extended id
//
ucTemp = VideoPortReadPortUchar(IOAddress + GRAPH_DATA_PORT) ; ulReturn |= ((ULONG)(ucTemp)) << 16 ; } }
return (ulReturn); }
|