|
21 | 21 | #include <debug.h>
|
22 | 22 | DBG_DEFAULT_CHANNEL(HWDETECT);
|
23 | 23 |
|
| 24 | +extern PVOID FrameBuffer; |
| 25 | +extern ULONG FrameBufferSize; |
24 | 26 |
|
25 | 27 | BOOLEAN
|
26 | 28 | XboxFindPciBios(PPCI_REGISTRY_INFO BusData)
|
@@ -160,6 +162,56 @@ XboxGetHarddiskConfigurationData(UCHAR DriveNumber, ULONG* pSize)
|
160 | 162 | return PartialResourceList;
|
161 | 163 | }
|
162 | 164 |
|
| 165 | +static VOID |
| 166 | +DetectDisplayController(PCONFIGURATION_COMPONENT_DATA BusKey) |
| 167 | +{ |
| 168 | + CHAR Buffer[80]; |
| 169 | + PCONFIGURATION_COMPONENT_DATA ControllerKey; |
| 170 | + PCM_PARTIAL_RESOURCE_LIST PartialResourceList; |
| 171 | + PCM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptor; |
| 172 | + ULONG Size; |
| 173 | + |
| 174 | + if (FrameBufferSize == 0) |
| 175 | + return; |
| 176 | + |
| 177 | + strcpy(Buffer, "NV2A Framebuffer"); |
| 178 | + |
| 179 | + Size = sizeof(CM_PARTIAL_RESOURCE_LIST); |
| 180 | + PartialResourceList = FrLdrHeapAlloc(Size, TAG_HW_RESOURCE_LIST); |
| 181 | + if (PartialResourceList == NULL) |
| 182 | + { |
| 183 | + ERR("Failed to allocate resource descriptor\n"); |
| 184 | + return; |
| 185 | + } |
| 186 | + memset(PartialResourceList, 0, Size); |
| 187 | + |
| 188 | + /* Initialize resource descriptor */ |
| 189 | + PartialResourceList->Version = 1; |
| 190 | + PartialResourceList->Revision = 1; |
| 191 | + PartialResourceList->Count = 1; |
| 192 | + |
| 193 | + /* Set Memory */ |
| 194 | + PartialDescriptor = &PartialResourceList->PartialDescriptors[0]; |
| 195 | + PartialDescriptor->Type = CmResourceTypeMemory; |
| 196 | + PartialDescriptor->ShareDisposition = CmResourceShareDeviceExclusive; |
| 197 | + PartialDescriptor->Flags = CM_RESOURCE_MEMORY_READ_WRITE; |
| 198 | + PartialDescriptor->u.Memory.Start.LowPart = (ULONG_PTR)FrameBuffer & 0x0FFFFFFF; |
| 199 | + PartialDescriptor->u.Memory.Length = FrameBufferSize; |
| 200 | + |
| 201 | + FldrCreateComponentKey(BusKey, |
| 202 | + ControllerClass, |
| 203 | + DisplayController, |
| 204 | + 0x0, |
| 205 | + 0x0, |
| 206 | + 0xFFFFFFFF, |
| 207 | + Buffer, |
| 208 | + PartialResourceList, |
| 209 | + Size, |
| 210 | + &ControllerKey); |
| 211 | + |
| 212 | + TRACE("Created key: DisplayController\\0\n"); |
| 213 | +} |
| 214 | + |
163 | 215 | static
|
164 | 216 | VOID
|
165 | 217 | DetectIsaBios(PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber)
|
@@ -202,6 +254,7 @@ DetectIsaBios(PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber)
|
202 | 254 | /* Detect ISA/BIOS devices */
|
203 | 255 | DetectBiosDisks(SystemKey, BusKey);
|
204 | 256 | DetectSerialPorts(BusKey, XboxGetSerialPort, MAX_XBOX_COM_PORTS);
|
| 257 | + DetectDisplayController(BusKey); |
205 | 258 |
|
206 | 259 | /* FIXME: Detect more ISA devices */
|
207 | 260 | }
|
@@ -232,6 +285,7 @@ XboxHwDetect(VOID)
|
232 | 285 |
|
233 | 286 | /* Create the 'System' key */
|
234 | 287 | FldrCreateSystemKey(&SystemKey);
|
| 288 | + FldrSetIdentifier(SystemKey, "Original Xbox (PC/AT like)"); |
235 | 289 |
|
236 | 290 | GetHarddiskConfigurationData = XboxGetHarddiskConfigurationData;
|
237 | 291 | FindPciBios = XboxFindPciBios;
|
|
0 commit comments