/*++ Copyright (c) 1989 Microsoft Corporation Module Name: hwdata.c Abstract: This module contains the C code to translate Video type to an ascii string. Author: Shie-Lin Tzong (shielint) 6-Jan-1991 Revision History: --*/ #include "hwdetect.h" #include "string.h" // // Video adaptor type identifiers. // PUCHAR VideoIdentifier[] = { "UNKNOWN", #if defined(NEC_98) "PC-98" #else // PC98 "VGA", "COMPAQ AVGA", "COMPAQ QVIS", "8514", "GENOA VGA", "VIDEO7 VGA", "TRIDENT VGA", "PARADISE VGA", // should be removed "ATI VGA", "TSENGLAB VGA", "CIRRUS VGA", "DELL DGX", "S3 VGA", "NCR 77C22", "WD90C", "XGA" #endif // PC98 }; #if defined(NEC_98) PUCHAR PC98Specific[] = { " N_MODE" }; #else // PC98 // // 8514 Monitor type // PUCHAR x8514Specific[] = { " MONITOR UNKNOWN", " VGA MONITOR", " 8503 MONO", " 8514 GAD" }; // // NCR 77C22 specific vga // PUCHAR NcrSpecific[] = { "", "E" }; // // Western Digital 90Cxx specific vga // PUCHAR WdSpecific[] = { "", "00", "30", "31" }; // // Video 7 specific vga // PUCHAR Video7Specific[] = { "", " VRAM", " DRAM" }; // // Trident vga specific // PUCHAR TridentSpecific[] = { "", " 9100" }; // // Paradize specific vga // PUCHAR ParadiseSpecific[] = { "", " PROM", " CHIP 1F" }; // // Ati specific vga // PUCHAR AtiSpecific[] = { "", " WONDDER3" }; // // Tsenglab specific vga // PUCHAR TsenglabSpecific[] = { " ET3000", " ET4000" }; // // Cirrus Logic specific // PUCHAR CirrusSpecific[] = { "", " 610-620 REVC", " 5420r0", " 5420r1", " 5428", " 542x" }; #endif // PC98 FPFWCONFIGURATION_COMPONENT_DATA SetVideoConfigurationData ( IN ULONG VideoType ) /*++ Routine Description: This routine maps VideoType information to an ASCII string and stores the string in configuration data heap. Arguments: VideoType - Supplies a ULONG which describes the video type information. Display type definitions. bit 0 0 - color; 1 - mono bit 1-7 Reserved bit 8-15 Adapter specific information. BIT 16-31 Defines video adapter type Returns: None. --*/ { USHORT MajorType; USHORT SpecificType; USHORT MonitorType; FPFWCONFIGURATION_COMPONENT_DATA Controller, CurrentEntry; FPFWCONFIGURATION_COMPONENT Component; UCHAR TypeString[40]; USHORT Length; // // Allocate configuration component space and initialize it. // Controller = (FPFWCONFIGURATION_COMPONENT_DATA)HwAllocateHeap ( sizeof(FWCONFIGURATION_COMPONENT_DATA), TRUE); Component = &Controller->ComponentEntry; Component->Class = ControllerClass; Component->Type = DisplayController; Component->Flags.ConsoleOut = 1; Component->Flags.Output = 1; Component->Version = 0; Component->Key = 0; Component->AffinityMask = 0xffffffff; // // Set up Identifier string // #if defined(NEC_98) MajorType = (USHORT)((VideoType >> 16) & 1); SpecificType = (USHORT)((VideoType >> 20) & 1); #else // PC98 MajorType = (USHORT)(VideoType >> 16); SpecificType = (USHORT)((VideoType & 0xffff) >> 8); #endif // PC98 MonitorType = (USHORT)(VideoType & 1); strcpy(TypeString, VideoIdentifier[MajorType]); #if defined(NEC_98) strcat(TypeString, PC98Specific[SpecificType]); #else // PC98 switch (MajorType){ case 6: // Video 7 strcat(TypeString, Video7Specific[SpecificType]); break; case 7: // Trident strcat(TypeString, TridentSpecific[SpecificType]); break; case 8: // Paradise strcat(TypeString, ParadiseSpecific[SpecificType]); break; case 9: // ATI strcat(TypeString, AtiSpecific[SpecificType]); break; case 10: // TsengLab strcat(TypeString, TsenglabSpecific[SpecificType]); break; case 11: // Cirrus strcat(TypeString, CirrusSpecific[SpecificType]); break; case 14: // NCR strcat(TypeString, NcrSpecific[SpecificType]); break; case 15: // NCR strcat(TypeString, WdSpecific[SpecificType]); break; default: break; } #endif // PC98 // // Set up Identifier string for controller // Length = strlen(TypeString) + 1; Component->IdentifierLength = Length; Component->Identifier = (FPUCHAR)HwAllocateHeap(Length, FALSE); _fstrcpy(Component->Identifier, TypeString); Controller->ConfigurationData = NULL; Component->ConfigurationDataLength = 0; // // Set Up monitor peripheral // CurrentEntry = (FPFWCONFIGURATION_COMPONENT_DATA)HwAllocateHeap ( sizeof(FWCONFIGURATION_COMPONENT_DATA), TRUE); Component = &CurrentEntry->ComponentEntry; Component->Class = PeripheralClass; Component->Type = MonitorPeripheral; Component->Flags.ConsoleOut = 1; Component->Flags.Output = 1; Component->Version = 0; Component->Key = 0; Component->AffinityMask = 0xffffffff; Component->ConfigurationDataLength = 0; CurrentEntry->ConfigurationData = NULL; // // If major type is 8514 we need to further supply monitor information // #if defined(NEC_98) if (MonitorType == 0) { strcpy(TypeString, "COLOR MONITOR"); } else { strcpy(TypeString, "MONO MONITOR"); } #else // PC98 if (MajorType == 4) { // 8514 strcpy(TypeString, x8514Specific[SpecificType]); } else if (MonitorType == 0) { strcpy(TypeString, "COLOR MONITOR"); } else { strcpy(TypeString, "MONO MONITOR"); } #endif // PC98 // // Set up Identifier string for monitor peripheral. // Length = strlen(TypeString) + 1; Component->IdentifierLength = Length; Component->Identifier = (FPUCHAR)HwAllocateHeap(Length, FALSE); _fstrcpy(Component->Identifier, TypeString); // // Make monitor component be the child of video controller component // Controller->Child = CurrentEntry; Controller->Sibling = NULL; CurrentEntry->Parent = Controller; CurrentEntry->Sibling = NULL; CurrentEntry->Child = NULL; return(Controller); }