Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenbus.h
Go to the documentation of this file.
00001 #pragma once 00002 00003 #define PCI_ADDRESS_MEMORY_SPACE 0x00000000 00004 00005 // 00006 // Helper Macros 00007 // 00008 #define PASTE2(x,y) x ## y 00009 #define POINTER_TO_(x) PASTE2(P,x) 00010 #define READ_FROM(x) PASTE2(READ_PORT_, x) 00011 #define WRITE_TO(x) PASTE2(WRITE_PORT_, x) 00012 00013 // 00014 // Declares a PCI Register Read/Write Routine 00015 // 00016 #define TYPE_DEFINE(x, y) \ 00017 ULONG \ 00018 NTAPI \ 00019 x( \ 00020 IN PPCIPBUSDATA BusData, \ 00021 IN y PciCfg, \ 00022 IN PUCHAR Buffer, \ 00023 IN ULONG Offset \ 00024 ) 00025 #define TYPE1_DEFINE(x) TYPE_DEFINE(x, PPCI_TYPE1_CFG_BITS); 00026 #define TYPE2_DEFINE(x) TYPE_DEFINE(x, PPCI_TYPE2_ADDRESS_BITS); 00027 00028 // 00029 // Defines a PCI Register Read/Write Type 1 Routine Prologue and Epilogue 00030 // 00031 #define TYPE1_START(x, y) \ 00032 TYPE_DEFINE(x, PPCI_TYPE1_CFG_BITS) \ 00033 { \ 00034 ULONG i = Offset % sizeof(ULONG); \ 00035 PciCfg->u.bits.RegisterNumber = Offset / sizeof(ULONG); \ 00036 WRITE_PORT_ULONG(BusData->Config.Type1.Address, PciCfg->u.AsULONG); 00037 #define TYPE1_END(y) \ 00038 return sizeof(y); } 00039 #define TYPE2_END TYPE1_END 00040 00041 // 00042 // PCI Register Read Type 1 Routine 00043 // 00044 #define TYPE1_READ(x, y) \ 00045 TYPE1_START(x, y) \ 00046 *((POINTER_TO_(y))Buffer) = \ 00047 READ_FROM(y)((POINTER_TO_(y))(ULONG_PTR)(BusData->Config.Type1.Data + i)); \ 00048 TYPE1_END(y) 00049 00050 // 00051 // PCI Register Write Type 1 Routine 00052 // 00053 #define TYPE1_WRITE(x, y) \ 00054 TYPE1_START(x, y) \ 00055 WRITE_TO(y)((POINTER_TO_(y))(ULONG_PTR)(BusData->Config.Type1.Data + i), \ 00056 *((POINTER_TO_(y))Buffer)); \ 00057 TYPE1_END(y) 00058 00059 // 00060 // Defines a PCI Register Read/Write Type 2 Routine Prologue and Epilogue 00061 // 00062 #define TYPE2_START(x, y) \ 00063 TYPE_DEFINE(x, PPCI_TYPE2_ADDRESS_BITS) \ 00064 { \ 00065 PciCfg->u.bits.RegisterNumber = (USHORT)Offset; 00066 00067 // 00068 // PCI Register Read Type 2 Routine 00069 // 00070 #define TYPE2_READ(x, y) \ 00071 TYPE2_START(x, y) \ 00072 *((POINTER_TO_(y))Buffer) = \ 00073 READ_FROM(y)((POINTER_TO_(y))(ULONG_PTR)PciCfg->u.AsUSHORT); \ 00074 TYPE2_END(y) 00075 00076 // 00077 // PCI Register Write Type 2 Routine 00078 // 00079 #define TYPE2_WRITE(x, y) \ 00080 TYPE2_START(x, y) \ 00081 WRITE_TO(y)((POINTER_TO_(y))(ULONG_PTR)PciCfg->u.AsUSHORT, \ 00082 *((POINTER_TO_(y))Buffer)); \ 00083 TYPE2_END(y) 00084 00085 typedef NTSTATUS 00086 (NTAPI *PciIrqRange)( 00087 IN PBUS_HANDLER BusHandler, 00088 IN PBUS_HANDLER RootHandler, 00089 IN PCI_SLOT_NUMBER PciSlot, 00090 OUT PSUPPORTED_RANGE *Interrupt 00091 ); 00092 00093 typedef struct _PCIPBUSDATA 00094 { 00095 PCIBUSDATA CommonData; 00096 union 00097 { 00098 struct 00099 { 00100 PULONG Address; 00101 ULONG Data; 00102 } Type1; 00103 struct 00104 { 00105 PUCHAR CSE; 00106 PUCHAR Forward; 00107 ULONG Base; 00108 } Type2; 00109 } Config; 00110 ULONG MaxDevice; 00111 PciIrqRange GetIrqRange; 00112 BOOLEAN BridgeConfigRead; 00113 UCHAR ParentBus; 00114 UCHAR Subtractive; 00115 UCHAR reserved[1]; 00116 UCHAR SwizzleIn[4]; 00117 RTL_BITMAP DeviceConfigured; 00118 ULONG ConfiguredBits[PCI_MAX_DEVICES * PCI_MAX_FUNCTION / 32]; 00119 } PCIPBUSDATA, *PPCIPBUSDATA; 00120 00121 typedef ULONG 00122 (NTAPI *FncConfigIO)( 00123 IN PPCIPBUSDATA BusData, 00124 IN PVOID State, 00125 IN PUCHAR Buffer, 00126 IN ULONG Offset 00127 ); 00128 00129 typedef VOID 00130 (NTAPI *FncSync)( 00131 IN PBUS_HANDLER BusHandler, 00132 IN PCI_SLOT_NUMBER Slot, 00133 IN PKIRQL Irql, 00134 IN PVOID State 00135 ); 00136 00137 typedef VOID 00138 (NTAPI *FncReleaseSync)( 00139 IN PBUS_HANDLER BusHandler, 00140 IN KIRQL Irql 00141 ); 00142 00143 typedef struct _PCI_CONFIG_HANDLER 00144 { 00145 FncSync Synchronize; 00146 FncReleaseSync ReleaseSynchronzation; 00147 FncConfigIO ConfigRead[3]; 00148 FncConfigIO ConfigWrite[3]; 00149 } PCI_CONFIG_HANDLER, *PPCI_CONFIG_HANDLER; 00150 00151 typedef struct _PCI_REGISTRY_INFO_INTERNAL 00152 { 00153 UCHAR MajorRevision; 00154 UCHAR MinorRevision; 00155 UCHAR NoBuses; // Number Of Buses 00156 UCHAR HardwareMechanism; 00157 ULONG ElementCount; 00158 PCI_CARD_DESCRIPTOR CardList[ANYSIZE_ARRAY]; 00159 } PCI_REGISTRY_INFO_INTERNAL, *PPCI_REGISTRY_INFO_INTERNAL; 00160 00161 // 00162 // PCI Type 1 Ports 00163 // 00164 #define PCI_TYPE1_ADDRESS_PORT (PULONG)0xCF8 00165 #define PCI_TYPE1_DATA_PORT 0xCFC 00166 00167 // 00168 // PCI Type 2 Ports 00169 // 00170 #define PCI_TYPE2_CSE_PORT (PUCHAR)0xCF8 00171 #define PCI_TYPE2_FORWARD_PORT (PUCHAR)0xCFA 00172 #define PCI_TYPE2_ADDRESS_BASE 0xC 00173 00174 // 00175 // PCI Type 1 Configuration Register 00176 // 00177 typedef struct _PCI_TYPE1_CFG_BITS 00178 { 00179 union 00180 { 00181 struct 00182 { 00183 ULONG Reserved1:2; 00184 ULONG RegisterNumber:6; 00185 ULONG FunctionNumber:3; 00186 ULONG DeviceNumber:5; 00187 ULONG BusNumber:8; 00188 ULONG Reserved2:7; 00189 ULONG Enable:1; 00190 } bits; 00191 00192 ULONG AsULONG; 00193 } u; 00194 } PCI_TYPE1_CFG_BITS, *PPCI_TYPE1_CFG_BITS; 00195 00196 // 00197 // PCI Type 2 CSE Register 00198 // 00199 typedef struct _PCI_TYPE2_CSE_BITS 00200 { 00201 union 00202 { 00203 struct 00204 { 00205 UCHAR Enable:1; 00206 UCHAR FunctionNumber:3; 00207 UCHAR Key:4; 00208 } bits; 00209 00210 UCHAR AsUCHAR; 00211 } u; 00212 } PCI_TYPE2_CSE_BITS, PPCI_TYPE2_CSE_BITS; 00213 00214 // 00215 // PCI Type 2 Address Register 00216 // 00217 typedef struct _PCI_TYPE2_ADDRESS_BITS 00218 { 00219 union 00220 { 00221 struct 00222 { 00223 USHORT RegisterNumber:8; 00224 USHORT Agent:4; 00225 USHORT AddressBase:4; 00226 } bits; 00227 00228 USHORT AsUSHORT; 00229 } u; 00230 } PCI_TYPE2_ADDRESS_BITS, *PPCI_TYPE2_ADDRESS_BITS; 00231 00232 typedef struct _PCI_TYPE0_CFG_CYCLE_BITS 00233 { 00234 union 00235 { 00236 struct 00237 { 00238 ULONG Reserved1:2; 00239 ULONG RegisterNumber:6; 00240 ULONG FunctionNumber:3; 00241 ULONG Reserved2:21; 00242 } bits; 00243 ULONG AsULONG; 00244 } u; 00245 } PCI_TYPE0_CFG_CYCLE_BITS, *PPCI_TYPE0_CFG_CYCLE_BITS; 00246 00247 typedef struct _PCI_TYPE1_CFG_CYCLE_BITS 00248 { 00249 union 00250 { 00251 struct 00252 { 00253 ULONG Reserved1:2; 00254 ULONG RegisterNumber:6; 00255 ULONG FunctionNumber:3; 00256 ULONG DeviceNumber:5; 00257 ULONG BusNumber:8; 00258 ULONG Reserved2:8; 00259 } bits; 00260 ULONG AsULONG; 00261 } u; 00262 } PCI_TYPE1_CFG_CYCLE_BITS, *PPCI_TYPE1_CFG_CYCLE_BITS; 00263 00264 typedef struct _ARRAY 00265 { 00266 ULONG ArraySize; 00267 PVOID Element[ANYSIZE_ARRAY]; 00268 } ARRAY, *PARRAY; 00269 00270 typedef struct _HAL_BUS_HANDLER 00271 { 00272 LIST_ENTRY AllHandlers; 00273 ULONG ReferenceCount; 00274 BUS_HANDLER Handler; 00275 } HAL_BUS_HANDLER, *PHAL_BUS_HANDLER; 00276 00277 /* FUNCTIONS *****************************************************************/ 00278 00279 /* SHARED (Fake PCI-BUS HANDLER) */ 00280 00281 extern PCI_CONFIG_HANDLER PCIConfigHandler; 00282 extern PCI_CONFIG_HANDLER PCIConfigHandlerType1; 00283 extern PCI_CONFIG_HANDLER PCIConfigHandlerType2; 00284 00285 PPCI_REGISTRY_INFO_INTERNAL 00286 NTAPI 00287 HalpQueryPciRegistryInfo( 00288 VOID 00289 ); 00290 00291 VOID 00292 NTAPI 00293 HalpPCISynchronizeType1( 00294 IN PBUS_HANDLER BusHandler, 00295 IN PCI_SLOT_NUMBER Slot, 00296 IN PKIRQL Irql, 00297 IN PPCI_TYPE1_CFG_BITS PciCfg 00298 ); 00299 00300 VOID 00301 NTAPI 00302 HalpPCIReleaseSynchronzationType1( 00303 IN PBUS_HANDLER BusHandler, 00304 IN KIRQL Irql 00305 ); 00306 00307 VOID 00308 NTAPI 00309 HalpPCISynchronizeType2( 00310 IN PBUS_HANDLER BusHandler, 00311 IN PCI_SLOT_NUMBER Slot, 00312 IN PKIRQL Irql, 00313 IN PPCI_TYPE2_ADDRESS_BITS PciCfg 00314 ); 00315 00316 VOID 00317 NTAPI 00318 HalpPCIReleaseSynchronizationType2( 00319 IN PBUS_HANDLER BusHandler, 00320 IN KIRQL Irql 00321 ); 00322 00323 TYPE1_DEFINE(HalpPCIReadUcharType1); 00324 TYPE1_DEFINE(HalpPCIReadUshortType1); 00325 TYPE1_DEFINE(HalpPCIReadUlongType1); 00326 TYPE2_DEFINE(HalpPCIReadUcharType2); 00327 TYPE2_DEFINE(HalpPCIReadUshortType2); 00328 TYPE2_DEFINE(HalpPCIReadUlongType2); 00329 TYPE1_DEFINE(HalpPCIWriteUcharType1); 00330 TYPE1_DEFINE(HalpPCIWriteUshortType1); 00331 TYPE1_DEFINE(HalpPCIWriteUlongType1); 00332 TYPE2_DEFINE(HalpPCIWriteUcharType2); 00333 TYPE2_DEFINE(HalpPCIWriteUshortType2); 00334 TYPE2_DEFINE(HalpPCIWriteUlongType2); 00335 00336 BOOLEAN 00337 NTAPI 00338 HalpValidPCISlot( 00339 IN PBUS_HANDLER BusHandler, 00340 IN PCI_SLOT_NUMBER Slot 00341 ); 00342 00343 VOID 00344 NTAPI 00345 HalpReadPCIConfig( 00346 IN PBUS_HANDLER BusHandler, 00347 IN PCI_SLOT_NUMBER Slot, 00348 IN PVOID Buffer, 00349 IN ULONG Offset, 00350 IN ULONG Length 00351 ); 00352 00353 VOID 00354 NTAPI 00355 HalpWritePCIConfig( 00356 IN PBUS_HANDLER BusHandler, 00357 IN PCI_SLOT_NUMBER Slot, 00358 IN PVOID Buffer, 00359 IN ULONG Offset, 00360 IN ULONG Length 00361 ); 00362 00363 ULONG 00364 NTAPI 00365 HalpGetPCIData( 00366 IN PBUS_HANDLER BusHandler, 00367 IN PBUS_HANDLER RootBusHandler, 00368 IN PCI_SLOT_NUMBER SlotNumber, 00369 IN PVOID Buffer, 00370 IN ULONG Offset, 00371 IN ULONG Length 00372 ); 00373 00374 ULONG 00375 NTAPI 00376 HalpSetPCIData( 00377 IN PBUS_HANDLER BusHandler, 00378 IN PBUS_HANDLER RootBusHandler, 00379 IN PCI_SLOT_NUMBER SlotNumber, 00380 IN PVOID Buffer, 00381 IN ULONG Offset, 00382 IN ULONG Length 00383 ); 00384 00385 NTSTATUS 00386 NTAPI 00387 HalpAssignPCISlotResources( 00388 IN PBUS_HANDLER BusHandler, 00389 IN PBUS_HANDLER RootHandler, 00390 IN PUNICODE_STRING RegistryPath, 00391 IN PUNICODE_STRING DriverClassName OPTIONAL, 00392 IN PDRIVER_OBJECT DriverObject, 00393 IN PDEVICE_OBJECT DeviceObject OPTIONAL, 00394 IN ULONG Slot, 00395 IN OUT PCM_RESOURCE_LIST *pAllocatedResources 00396 ); 00397 00398 /* NON-LEGACY */ 00399 00400 ULONG 00401 NTAPI 00402 HalpGetSystemInterruptVector_Acpi( 00403 ULONG BusNumber, 00404 ULONG BusInterruptLevel, 00405 ULONG BusInterruptVector, 00406 PKIRQL Irql, 00407 PKAFFINITY Affinity 00408 ); 00409 00410 ULONG 00411 NTAPI 00412 HalpGetCmosData( 00413 IN ULONG BusNumber, 00414 IN ULONG SlotNumber, 00415 IN PVOID Buffer, 00416 IN ULONG Length 00417 ); 00418 00419 ULONG 00420 NTAPI 00421 HalpSetCmosData( 00422 IN ULONG BusNumber, 00423 IN ULONG SlotNumber, 00424 IN PVOID Buffer, 00425 IN ULONG Length 00426 ); 00427 00428 VOID 00429 NTAPI 00430 HalpInitializePciBus( 00431 VOID 00432 ); 00433 00434 VOID 00435 NTAPI 00436 HalpInitializePciStubs( 00437 VOID 00438 ); 00439 00440 BOOLEAN 00441 NTAPI 00442 HalpTranslateBusAddress( 00443 IN INTERFACE_TYPE InterfaceType, 00444 IN ULONG BusNumber, 00445 IN PHYSICAL_ADDRESS BusAddress, 00446 IN OUT PULONG AddressSpace, 00447 OUT PPHYSICAL_ADDRESS TranslatedAddress 00448 ); 00449 00450 NTSTATUS 00451 NTAPI 00452 HalpAssignSlotResources( 00453 IN PUNICODE_STRING RegistryPath, 00454 IN PUNICODE_STRING DriverClassName, 00455 IN PDRIVER_OBJECT DriverObject, 00456 IN PDEVICE_OBJECT DeviceObject, 00457 IN INTERFACE_TYPE BusType, 00458 IN ULONG BusNumber, 00459 IN ULONG SlotNumber, 00460 IN OUT PCM_RESOURCE_LIST *AllocatedResources 00461 ); 00462 00463 BOOLEAN 00464 NTAPI 00465 HalpFindBusAddressTranslation( 00466 IN PHYSICAL_ADDRESS BusAddress, 00467 IN OUT PULONG AddressSpace, 00468 OUT PPHYSICAL_ADDRESS TranslatedAddress, 00469 IN OUT PULONG_PTR Context, 00470 IN BOOLEAN NextBus 00471 ); 00472 00473 VOID 00474 NTAPI 00475 HalpRegisterPciDebuggingDeviceInfo( 00476 VOID 00477 ); 00478 00479 /* LEGACY */ 00480 00481 BOOLEAN 00482 NTAPI 00483 HaliTranslateBusAddress( 00484 IN INTERFACE_TYPE InterfaceType, 00485 IN ULONG BusNumber, 00486 IN PHYSICAL_ADDRESS BusAddress, 00487 IN OUT PULONG AddressSpace, 00488 OUT PPHYSICAL_ADDRESS TranslatedAddress 00489 ); 00490 00491 BOOLEAN 00492 NTAPI 00493 HaliFindBusAddressTranslation( 00494 IN PHYSICAL_ADDRESS BusAddress, 00495 IN OUT PULONG AddressSpace, 00496 OUT PPHYSICAL_ADDRESS TranslatedAddress, 00497 IN OUT PULONG_PTR Context, 00498 IN BOOLEAN NextBus 00499 ); 00500 00501 NTSTATUS 00502 NTAPI 00503 HalpAdjustPCIResourceList(IN PBUS_HANDLER BusHandler, 00504 IN PBUS_HANDLER RootHandler, 00505 IN OUT PIO_RESOURCE_REQUIREMENTS_LIST *pResourceList); 00506 00507 ULONG 00508 NTAPI 00509 HalpGetPCIIntOnISABus(IN PBUS_HANDLER BusHandler, 00510 IN PBUS_HANDLER RootHandler, 00511 IN ULONG BusInterruptLevel, 00512 IN ULONG BusInterruptVector, 00513 OUT PKIRQL Irql, 00514 OUT PKAFFINITY Affinity); 00515 VOID 00516 NTAPI 00517 HalpPCIPin2ISALine(IN PBUS_HANDLER BusHandler, 00518 IN PBUS_HANDLER RootHandler, 00519 IN PCI_SLOT_NUMBER SlotNumber, 00520 IN PPCI_COMMON_CONFIG PciData); 00521 00522 VOID 00523 NTAPI 00524 HalpPCIISALine2Pin(IN PBUS_HANDLER BusHandler, 00525 IN PBUS_HANDLER RootHandler, 00526 IN PCI_SLOT_NUMBER SlotNumber, 00527 IN PPCI_COMMON_CONFIG PciNewData, 00528 IN PPCI_COMMON_CONFIG PciOldData); 00529 00530 NTSTATUS 00531 NTAPI 00532 HalpGetISAFixedPCIIrq(IN PBUS_HANDLER BusHandler, 00533 IN PBUS_HANDLER RootHandler, 00534 IN PCI_SLOT_NUMBER PciSlot, 00535 OUT PSUPPORTED_RANGE *Range); 00536 00537 VOID 00538 NTAPI 00539 HalpInitBusHandler( 00540 VOID 00541 ); 00542 00543 PBUS_HANDLER 00544 NTAPI 00545 HalpContextToBusHandler( 00546 IN ULONG_PTR ContextValue 00547 ); 00548 00549 PBUS_HANDLER 00550 FASTCALL 00551 HaliReferenceHandlerForConfigSpace( 00552 IN BUS_DATA_TYPE ConfigType, 00553 IN ULONG BusNumber 00554 ); 00555 00556 ULONG 00557 NTAPI 00558 HalpNoBusData( 00559 IN PBUS_HANDLER BusHandler, 00560 IN PBUS_HANDLER RootHandler, 00561 IN ULONG SlotNumber, 00562 IN PVOID Buffer, 00563 IN ULONG Offset, 00564 IN ULONG Length 00565 ); 00566 00567 ULONG 00568 NTAPI 00569 HalpcGetCmosData( 00570 IN PBUS_HANDLER BusHandler, 00571 IN PBUS_HANDLER RootHandler, 00572 IN ULONG SlotNumber, 00573 IN PVOID Buffer, 00574 IN ULONG Offset, 00575 IN ULONG Length 00576 ); 00577 00578 ULONG 00579 NTAPI 00580 HalpcSetCmosData( 00581 IN PBUS_HANDLER BusHandler, 00582 IN PBUS_HANDLER RootHandler, 00583 IN ULONG SlotNumber, 00584 IN PVOID Buffer, 00585 IN ULONG Offset, 00586 IN ULONG Length 00587 ); 00588 00589 BOOLEAN 00590 NTAPI 00591 HalpTranslateSystemBusAddress( 00592 IN PBUS_HANDLER BusHandler, 00593 IN PBUS_HANDLER RootHandler, 00594 IN PHYSICAL_ADDRESS BusAddress, 00595 IN OUT PULONG AddressSpace, 00596 OUT PPHYSICAL_ADDRESS TranslatedAddress 00597 ); 00598 00599 BOOLEAN 00600 NTAPI 00601 HalpTranslateIsaBusAddress( 00602 IN PBUS_HANDLER BusHandler, 00603 IN PBUS_HANDLER RootHandler, 00604 IN PHYSICAL_ADDRESS BusAddress, 00605 IN OUT PULONG AddressSpace, 00606 OUT PPHYSICAL_ADDRESS TranslatedAddress 00607 ); 00608 00609 ULONG 00610 NTAPI 00611 HalpGetSystemInterruptVector( 00612 IN PBUS_HANDLER BusHandler, 00613 IN PBUS_HANDLER RootHandler, 00614 IN ULONG BusInterruptLevel, 00615 IN ULONG BusInterruptVector, 00616 OUT PKIRQL Irql, 00617 OUT PKAFFINITY Affinity 00618 ); 00619 00620 extern ULONG HalpBusType; 00621 extern BOOLEAN HalpPCIConfigInitialized; 00622 extern BUS_HANDLER HalpFakePciBusHandler; 00623 extern ULONG HalpMinPciBus, HalpMaxPciBus; 00624 extern LIST_ENTRY HalpAllBusHandlers; 00625 00626 /* EOF */ Generated on Sat May 26 2012 04:27:17 for ReactOS by
1.7.6.1
|