Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenhalp.h
Go to the documentation of this file.
00001 /* 00002 * 00003 */ 00004 00005 #pragma once 00006 00007 #define PLACE_IN_SECTION(s) __attribute__((section (s))) 00008 #ifdef __GNUC__ 00009 #define INIT_FUNCTION 00010 #define PAGE_LOCKED_FUNCTION PLACE_IN_SECTION("pagelk") 00011 #define PAGE_UNLOCKED_FUNCTION PLACE_IN_SECTION("pagepo") 00012 #else 00013 #define INIT_FUNCTION 00014 #define PAGE_LOCKED_FUNCTION 00015 #define PAGE_UNLOCKED_FUNCTION 00016 #endif 00017 00018 #ifdef _MSC_VER 00019 #define REGISTERCALL FASTCALL 00020 #else 00021 #define REGISTERCALL __attribute__((regparm(3))) 00022 #endif 00023 00024 #ifdef CONFIG_SMP 00025 #define HAL_BUILD_TYPE (DBG ? PRCB_BUILD_DEBUG : 0) 00026 #else 00027 #define HAL_BUILD_TYPE ((DBG ? PRCB_BUILD_DEBUG : 0) | PRCB_BUILD_UNIPROCESSOR) 00028 #endif 00029 00030 typedef struct _HAL_BIOS_FRAME 00031 { 00032 ULONG SegSs; 00033 ULONG Esp; 00034 ULONG EFlags; 00035 ULONG SegCs; 00036 ULONG Eip; 00037 PKTRAP_FRAME TrapFrame; 00038 ULONG CsLimit; 00039 ULONG CsBase; 00040 ULONG CsFlags; 00041 ULONG SsLimit; 00042 ULONG SsBase; 00043 ULONG SsFlags; 00044 ULONG Prefix; 00045 } HAL_BIOS_FRAME, *PHAL_BIOS_FRAME; 00046 00047 typedef 00048 VOID 00049 (*PHAL_SW_INTERRUPT_HANDLER)( 00050 VOID 00051 ); 00052 00053 typedef 00054 VOID 00055 ATTRIB_NORETURN 00056 (FASTCALL *PHAL_SW_INTERRUPT_HANDLER_2ND_ENTRY)( 00057 IN PKTRAP_FRAME TrapFrame 00058 ); 00059 00060 #define HAL_APC_REQUEST 0 00061 #define HAL_DPC_REQUEST 1 00062 00063 /* CMOS Registers and Ports */ 00064 #define CMOS_CONTROL_PORT (PUCHAR)0x70 00065 #define CMOS_DATA_PORT (PUCHAR)0x71 00066 #define RTC_REGISTER_A 0x0A 00067 #define RTC_REG_A_UIP 0x80 00068 #define RTC_REGISTER_B 0x0B 00069 #define RTC_REG_B_PI 0x40 00070 #define RTC_REGISTER_C 0x0C 00071 #define RTC_REGISTER_D 0x0D 00072 #define RTC_REGISTER_CENTURY 0x32 00073 00074 /* Usage flags */ 00075 #define IDT_REGISTERED 0x01 00076 #define IDT_LATCHED 0x02 00077 #define IDT_READ_ONLY 0x04 00078 #define IDT_INTERNAL 0x11 00079 #define IDT_DEVICE 0x21 00080 00081 /* Conversion functions */ 00082 #define BCD_INT(bcd) \ 00083 (((bcd & 0xF0) >> 4) * 10 + (bcd & 0x0F)) 00084 #define INT_BCD(int) \ 00085 (UCHAR)(((int / 10) << 4) + (int % 10)) 00086 00087 // 00088 // BIOS Interrupts 00089 // 00090 #define VIDEO_SERVICES 0x10 00091 00092 // 00093 // Operations for INT 10h (in AH) 00094 // 00095 #define SET_VIDEO_MODE 0x00 00096 00097 // 00098 // Video Modes for INT10h AH=00 (in AL) 00099 // 00100 #define GRAPHICS_MODE_12 0x12 /* 80x30 8x16 640x480 16/256K */ 00101 00102 // 00103 // Commonly stated as being 1.19318MHz 00104 // 00105 // See ISA System Architecture 3rd Edition (Tom Shanley, Don Anderson, John Swindle) 00106 // P. 471 00107 // 00108 // However, the true value is closer to 1.19318181[...]81MHz since this is 1/3rd 00109 // of the NTSC color subcarrier frequency which runs at 3.57954545[...]45MHz. 00110 // 00111 // Note that Windows uses 1.193167MHz which seems to have no basis. However, if 00112 // one takes the NTSC color subcarrier frequency as being 3.579545 (trimming the 00113 // infinite series) and divides it by three, one obtains 1.19318167. 00114 // 00115 // It may be that the original NT HAL source code introduced a typo and turned 00116 // 119318167 into 1193167 by ommitting the "18". This is very plausible as the 00117 // number is quite long. 00118 // 00119 #define PIT_FREQUENCY 1193182 00120 00121 // 00122 // These ports are controlled by the i8254 Programmable Interrupt Timer (PIT) 00123 // 00124 #define TIMER_CHANNEL0_DATA_PORT 0x40 00125 #define TIMER_CHANNEL1_DATA_PORT 0x41 00126 #define TIMER_CHANNEL2_DATA_PORT 0x42 00127 #define TIMER_CONTROL_PORT 0x43 00128 00129 // 00130 // Mode 0 - Interrupt On Terminal Count 00131 // Mode 1 - Hardware Re-triggerable One-Shot 00132 // Mode 2 - Rate Generator 00133 // Mode 3 - Square Wave Generator 00134 // Mode 4 - Software Triggered Strobe 00135 // Mode 5 - Hardware Triggered Strobe 00136 // 00137 typedef enum _TIMER_OPERATING_MODES 00138 { 00139 PitOperatingMode0, 00140 PitOperatingMode1, 00141 PitOperatingMode2, 00142 PitOperatingMode3, 00143 PitOperatingMode4, 00144 PitOperatingMode5, 00145 PitOperatingMode2Reserved, 00146 PitOperatingMode5Reserved 00147 } TIMER_OPERATING_MODES; 00148 00149 typedef enum _TIMER_ACCESS_MODES 00150 { 00151 PitAccessModeCounterLatch, 00152 PitAccessModeLow, 00153 PitAccessModeHigh, 00154 PitAccessModeLowHigh 00155 } TIMER_ACCESS_MODES; 00156 00157 typedef enum _TIMER_CHANNELS 00158 { 00159 PitChannel0, 00160 PitChannel1, 00161 PitChannel2, 00162 PitReadBack 00163 } TIMER_CHANNELS; 00164 00165 typedef union _TIMER_CONTROL_PORT_REGISTER 00166 { 00167 struct 00168 { 00169 UCHAR BcdMode:1; 00170 UCHAR OperatingMode:3; 00171 UCHAR AccessMode:2; 00172 UCHAR Channel:2; 00173 }; 00174 UCHAR Bits; 00175 } TIMER_CONTROL_PORT_REGISTER, *PTIMER_CONTROL_PORT_REGISTER; 00176 00177 // 00178 // See ISA System Architecture 3rd Edition (Tom Shanley, Don Anderson, John Swindle) 00179 // P. 400 00180 // 00181 // This port is controled by the i8255 Programmable Peripheral Interface (PPI) 00182 // 00183 #define SYSTEM_CONTROL_PORT_A 0x92 00184 #define SYSTEM_CONTROL_PORT_B 0x61 00185 typedef union _SYSTEM_CONTROL_PORT_B_REGISTER 00186 { 00187 struct 00188 { 00189 UCHAR Timer2GateToSpeaker:1; 00190 UCHAR SpeakerDataEnable:1; 00191 UCHAR ParityCheckEnable:1; 00192 UCHAR ChannelCheckEnable:1; 00193 UCHAR RefreshRequest:1; 00194 UCHAR Timer2Output:1; 00195 UCHAR ChannelCheck:1; 00196 UCHAR ParityCheck:1; 00197 }; 00198 UCHAR Bits; 00199 } SYSTEM_CONTROL_PORT_B_REGISTER, *PSYSTEM_CONTROL_PORT_B_REGISTER; 00200 00201 // 00202 // See ISA System Architecture 3rd Edition (Tom Shanley, Don Anderson, John Swindle) 00203 // P. 396, 397 00204 // 00205 // These ports are controlled by the i8259 Programmable Interrupt Controller (PIC) 00206 // 00207 #define PIC1_CONTROL_PORT 0x20 00208 #define PIC1_DATA_PORT 0x21 00209 #define PIC2_CONTROL_PORT 0xA0 00210 #define PIC2_DATA_PORT 0xA1 00211 00212 // 00213 // Definitions for ICW/OCW Bits 00214 // 00215 typedef enum _I8259_ICW1_OPERATING_MODE 00216 { 00217 Cascade, 00218 Single 00219 } I8259_ICW1_OPERATING_MODE; 00220 00221 typedef enum _I8259_ICW1_INTERRUPT_MODE 00222 { 00223 EdgeTriggered, 00224 LevelTriggered 00225 } I8259_ICW1_INTERRUPT_MODE; 00226 00227 typedef enum _I8259_ICW1_INTERVAL 00228 { 00229 Interval8, 00230 Interval4 00231 } I8259_ICW1_INTERVAL; 00232 00233 typedef enum _I8259_ICW4_SYSTEM_MODE 00234 { 00235 Mcs8085Mode, 00236 New8086Mode 00237 } I8259_ICW4_SYSTEM_MODE; 00238 00239 typedef enum _I8259_ICW4_EOI_MODE 00240 { 00241 NormalEoi, 00242 AutomaticEoi 00243 } I8259_ICW4_EOI_MODE; 00244 00245 typedef enum _I8259_ICW4_BUFFERED_MODE 00246 { 00247 NonBuffered, 00248 NonBuffered2, 00249 BufferedSlave, 00250 BufferedMaster 00251 } I8259_ICW4_BUFFERED_MODE; 00252 00253 typedef enum _I8259_READ_REQUEST 00254 { 00255 InvalidRequest, 00256 InvalidRequest2, 00257 ReadIdr, 00258 ReadIsr 00259 } I8259_READ_REQUEST; 00260 00261 typedef enum _I8259_EOI_MODE 00262 { 00263 RotateAutoEoiClear, 00264 NonSpecificEoi, 00265 InvalidEoiMode, 00266 SpecificEoi, 00267 RotateAutoEoiSet, 00268 RotateNonSpecific, 00269 SetPriority, 00270 RotateSpecific 00271 } I8259_EOI_MODE; 00272 00273 // 00274 // Definitions for ICW Registers 00275 // 00276 typedef union _I8259_ICW1 00277 { 00278 struct 00279 { 00280 UCHAR NeedIcw4:1; 00281 UCHAR OperatingMode:1; 00282 UCHAR Interval:1; 00283 UCHAR InterruptMode:1; 00284 UCHAR Init:1; 00285 UCHAR InterruptVectorAddress:3; 00286 }; 00287 UCHAR Bits; 00288 } I8259_ICW1, *PI8259_ICW1; 00289 00290 typedef union _I8259_ICW2 00291 { 00292 struct 00293 { 00294 UCHAR Sbz:3; 00295 UCHAR InterruptVector:5; 00296 }; 00297 UCHAR Bits; 00298 } I8259_ICW2, *PI8259_ICW2; 00299 00300 typedef union _I8259_ICW3 00301 { 00302 union 00303 { 00304 struct 00305 { 00306 UCHAR SlaveIrq0:1; 00307 UCHAR SlaveIrq1:1; 00308 UCHAR SlaveIrq2:1; 00309 UCHAR SlaveIrq3:1; 00310 UCHAR SlaveIrq4:1; 00311 UCHAR SlaveIrq5:1; 00312 UCHAR SlaveIrq6:1; 00313 UCHAR SlaveIrq7:1; 00314 }; 00315 struct 00316 { 00317 UCHAR SlaveId:3; 00318 UCHAR Reserved:5; 00319 }; 00320 }; 00321 UCHAR Bits; 00322 } I8259_ICW3, *PI8259_ICW3; 00323 00324 typedef union _I8259_ICW4 00325 { 00326 struct 00327 { 00328 UCHAR SystemMode:1; 00329 UCHAR EoiMode:1; 00330 UCHAR BufferedMode:2; 00331 UCHAR SpecialFullyNestedMode:1; 00332 UCHAR Reserved:3; 00333 }; 00334 UCHAR Bits; 00335 } I8259_ICW4, *PI8259_ICW4; 00336 00337 typedef union _I8259_OCW2 00338 { 00339 struct 00340 { 00341 UCHAR IrqNumber:3; 00342 UCHAR Sbz:2; 00343 UCHAR EoiMode:3; 00344 }; 00345 UCHAR Bits; 00346 } I8259_OCW2, *PI8259_OCW2; 00347 00348 typedef union _I8259_OCW3 00349 { 00350 struct 00351 { 00352 UCHAR ReadRequest:2; 00353 UCHAR PollCommand:1; 00354 UCHAR Sbo:1; 00355 UCHAR Sbz:1; 00356 UCHAR SpecialMaskMode:2; 00357 UCHAR Reserved:1; 00358 }; 00359 UCHAR Bits; 00360 } I8259_OCW3, *PI8259_OCW3; 00361 00362 typedef union _I8259_ISR 00363 { 00364 union 00365 { 00366 struct 00367 { 00368 UCHAR Irq0:1; 00369 UCHAR Irq1:1; 00370 UCHAR Irq2:1; 00371 UCHAR Irq3:1; 00372 UCHAR Irq4:1; 00373 UCHAR Irq5:1; 00374 UCHAR Irq6:1; 00375 UCHAR Irq7:1; 00376 }; 00377 }; 00378 UCHAR Bits; 00379 } I8259_ISR, *PI8259_ISR; 00380 00381 typedef I8259_ISR I8259_IDR, *PI8259_IDR; 00382 00383 // 00384 // See EISA System Architecture 2nd Edition (Tom Shanley, Don Anderson, John Swindle) 00385 // P. 34, 35 00386 // 00387 // These ports are controlled by the i8259A Programmable Interrupt Controller (PIC) 00388 // 00389 #define EISA_ELCR_MASTER 0x4D0 00390 #define EISA_ELCR_SLAVE 0x4D1 00391 00392 typedef union _EISA_ELCR 00393 { 00394 struct 00395 { 00396 struct 00397 { 00398 UCHAR Irq0Level:1; 00399 UCHAR Irq1Level:1; 00400 UCHAR Irq2Level:1; 00401 UCHAR Irq3Level:1; 00402 UCHAR Irq4Level:1; 00403 UCHAR Irq5Level:1; 00404 UCHAR Irq6Level:1; 00405 UCHAR Irq7Level:1; 00406 } Master; 00407 struct 00408 { 00409 UCHAR Irq8Level:1; 00410 UCHAR Irq9Level:1; 00411 UCHAR Irq10Level:1; 00412 UCHAR Irq11Level:1; 00413 UCHAR Irq12Level:1; 00414 UCHAR Irq13Level:1; 00415 UCHAR Irq14Level:1; 00416 UCHAR Irq15Level:1; 00417 } Slave; 00418 }; 00419 USHORT Bits; 00420 } EISA_ELCR, *PEISA_ELCR; 00421 00422 typedef struct _PIC_MASK 00423 { 00424 union 00425 { 00426 struct 00427 { 00428 UCHAR Master; 00429 UCHAR Slave; 00430 }; 00431 USHORT Both; 00432 }; 00433 } PIC_MASK, *PPIC_MASK; 00434 00435 typedef 00436 BOOLEAN 00437 ( REGISTERCALL *PHAL_DISMISS_INTERRUPT)( 00438 IN KIRQL Irql, 00439 IN ULONG Irq, 00440 OUT PKIRQL OldIrql 00441 ); 00442 00443 BOOLEAN 00444 REGISTERCALL 00445 HalpDismissIrqGeneric( 00446 IN KIRQL Irql, 00447 IN ULONG Irq, 00448 OUT PKIRQL OldIrql 00449 ); 00450 00451 BOOLEAN 00452 REGISTERCALL 00453 HalpDismissIrq15( 00454 IN KIRQL Irql, 00455 IN ULONG Irq, 00456 OUT PKIRQL OldIrql 00457 ); 00458 00459 BOOLEAN 00460 REGISTERCALL 00461 HalpDismissIrq13( 00462 IN KIRQL Irql, 00463 IN ULONG Irq, 00464 OUT PKIRQL OldIrql 00465 ); 00466 00467 BOOLEAN 00468 REGISTERCALL 00469 HalpDismissIrq07( 00470 IN KIRQL Irql, 00471 IN ULONG Irq, 00472 OUT PKIRQL OldIrql 00473 ); 00474 00475 BOOLEAN 00476 REGISTERCALL 00477 HalpDismissIrqLevel( 00478 IN KIRQL Irql, 00479 IN ULONG Irq, 00480 OUT PKIRQL OldIrql 00481 ); 00482 00483 BOOLEAN 00484 REGISTERCALL 00485 HalpDismissIrq15Level( 00486 IN KIRQL Irql, 00487 IN ULONG Irq, 00488 OUT PKIRQL OldIrql 00489 ); 00490 00491 BOOLEAN 00492 REGISTERCALL 00493 HalpDismissIrq13Level( 00494 IN KIRQL Irql, 00495 IN ULONG Irq, 00496 OUT PKIRQL OldIrql 00497 ); 00498 00499 BOOLEAN 00500 REGISTERCALL 00501 HalpDismissIrq07Level( 00502 IN KIRQL Irql, 00503 IN ULONG Irq, 00504 OUT PKIRQL OldIrql 00505 ); 00506 00507 VOID 00508 HalpHardwareInterruptLevel( 00509 VOID 00510 ); 00511 00512 // 00513 // Hack Flags 00514 // 00515 #define HALP_REVISION_FROM_HACK_FLAGS(x) ((x) >> 24) 00516 #define HALP_REVISION_HACK_FLAGS(x) ((x) >> 12) 00517 #define HALP_HACK_FLAGS(x) ((x) & 0xFFF) 00518 00519 // 00520 // Feature flags 00521 // 00522 #define HALP_CARD_FEATURE_FULL_DECODE 0x0001 00523 00524 // 00525 // Match Flags 00526 // 00527 #define HALP_CHECK_CARD_REVISION_ID 0x10000 00528 #define HALP_CHECK_CARD_SUBVENDOR_ID 0x20000 00529 #define HALP_CHECK_CARD_SUBSYSTEM_ID 0x40000 00530 00531 // 00532 // Mm PTE/PDE to Hal PTE/PDE 00533 // 00534 #define HalAddressToPde(x) (PHARDWARE_PTE)MiAddressToPde(x) 00535 #define HalAddressToPte(x) (PHARDWARE_PTE)MiAddressToPte(x) 00536 00537 typedef struct _IDTUsageFlags 00538 { 00539 UCHAR Flags; 00540 } IDTUsageFlags; 00541 00542 typedef struct 00543 { 00544 KIRQL Irql; 00545 UCHAR BusReleativeVector; 00546 } IDTUsage; 00547 00548 typedef struct _HalAddressUsage 00549 { 00550 struct _HalAddressUsage *Next; 00551 CM_RESOURCE_TYPE Type; 00552 UCHAR Flags; 00553 struct 00554 { 00555 ULONG Start; 00556 ULONG Length; 00557 } Element[]; 00558 } ADDRESS_USAGE, *PADDRESS_USAGE; 00559 00560 /* adapter.c */ 00561 PADAPTER_OBJECT NTAPI HalpAllocateAdapterEx(ULONG NumberOfMapRegisters,BOOLEAN IsMaster, BOOLEAN Dma32BitAddresses); 00562 00563 /* sysinfo.c */ 00564 VOID 00565 NTAPI 00566 HalpRegisterVector(IN UCHAR Flags, 00567 IN ULONG BusVector, 00568 IN ULONG SystemVector, 00569 IN KIRQL Irql); 00570 00571 VOID 00572 NTAPI 00573 HalpEnableInterruptHandler(IN UCHAR Flags, 00574 IN ULONG BusVector, 00575 IN ULONG SystemVector, 00576 IN KIRQL Irql, 00577 IN PVOID Handler, 00578 IN KINTERRUPT_MODE Mode); 00579 00580 /* pic.c */ 00581 VOID NTAPI HalpInitializePICs(IN BOOLEAN EnableInterrupts); 00582 VOID HalpApcInterrupt(VOID); 00583 VOID HalpDispatchInterrupt(VOID); 00584 VOID HalpDispatchInterrupt2(VOID); 00585 DECLSPEC_NORETURN VOID FASTCALL HalpApcInterrupt2ndEntry(IN PKTRAP_FRAME TrapFrame); 00586 DECLSPEC_NORETURN VOID FASTCALL HalpDispatchInterrupt2ndEntry(IN PKTRAP_FRAME TrapFrame); 00587 00588 /* timer.c */ 00589 VOID NTAPI HalpInitializeClock(VOID); 00590 VOID HalpClockInterrupt(VOID); 00591 VOID HalpProfileInterrupt(VOID); 00592 00593 VOID 00594 NTAPI 00595 HalpCalibrateStallExecution(VOID); 00596 00597 /* pci.c */ 00598 VOID HalpInitPciBus (VOID); 00599 00600 /* dma.c */ 00601 VOID HalpInitDma (VOID); 00602 00603 /* Non-generic initialization */ 00604 VOID HalpInitPhase0 (PLOADER_PARAMETER_BLOCK LoaderBlock); 00605 VOID HalpInitPhase1(VOID); 00606 00607 VOID 00608 NTAPI 00609 HalpFlushTLB(VOID); 00610 00611 // 00612 // KD Support 00613 // 00614 VOID 00615 NTAPI 00616 HalpCheckPowerButton( 00617 VOID 00618 ); 00619 00620 VOID 00621 NTAPI 00622 HalpRegisterKdSupportFunctions( 00623 VOID 00624 ); 00625 00626 NTSTATUS 00627 NTAPI 00628 HalpSetupPciDeviceForDebugging( 00629 IN PVOID LoaderBlock, 00630 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice 00631 ); 00632 00633 NTSTATUS 00634 NTAPI 00635 HalpReleasePciDeviceForDebugging( 00636 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice 00637 ); 00638 00639 // 00640 // Memory routines 00641 // 00642 ULONG_PTR 00643 NTAPI 00644 HalpAllocPhysicalMemory( 00645 IN PLOADER_PARAMETER_BLOCK LoaderBlock, 00646 IN ULONG_PTR MaxAddress, 00647 IN PFN_NUMBER PageCount, 00648 IN BOOLEAN Aligned 00649 ); 00650 00651 PVOID 00652 NTAPI 00653 HalpMapPhysicalMemory64( 00654 IN PHYSICAL_ADDRESS PhysicalAddress, 00655 IN PFN_COUNT PageCount 00656 ); 00657 00658 VOID 00659 NTAPI 00660 HalpUnmapVirtualAddress( 00661 IN PVOID VirtualAddress, 00662 IN PFN_COUNT NumberPages 00663 ); 00664 00665 /* sysinfo.c */ 00666 NTSTATUS 00667 NTAPI 00668 HaliQuerySystemInformation( 00669 IN HAL_QUERY_INFORMATION_CLASS InformationClass, 00670 IN ULONG BufferSize, 00671 IN OUT PVOID Buffer, 00672 OUT PULONG ReturnedLength 00673 ); 00674 00675 NTSTATUS 00676 NTAPI 00677 HaliSetSystemInformation( 00678 IN HAL_SET_INFORMATION_CLASS InformationClass, 00679 IN ULONG BufferSize, 00680 IN OUT PVOID Buffer 00681 ); 00682 00683 // 00684 // BIOS Routines 00685 // 00686 BOOLEAN 00687 NTAPI 00688 HalpBiosDisplayReset( 00689 VOID 00690 ); 00691 00692 VOID 00693 FASTCALL 00694 HalpExitToV86( 00695 PKTRAP_FRAME TrapFrame 00696 ); 00697 00698 VOID 00699 DECLSPEC_NORETURN 00700 HalpRealModeStart( 00701 VOID 00702 ); 00703 00704 // 00705 // Processor Halt Routine 00706 // 00707 VOID 00708 NTAPI 00709 HaliHaltSystem( 00710 VOID 00711 ); 00712 00713 // 00714 // CMOS Routines 00715 // 00716 VOID 00717 NTAPI 00718 HalpInitializeCmos( 00719 VOID 00720 ); 00721 00722 UCHAR 00723 NTAPI 00724 HalpReadCmos( 00725 IN UCHAR Reg 00726 ); 00727 00728 VOID 00729 NTAPI 00730 HalpWriteCmos( 00731 IN UCHAR Reg, 00732 IN UCHAR Value 00733 ); 00734 00735 // 00736 // Spinlock for protecting CMOS access 00737 // 00738 VOID 00739 NTAPI 00740 HalpAcquireCmosSpinLock( 00741 VOID 00742 ); 00743 00744 VOID 00745 NTAPI 00746 HalpReleaseCmosSpinLock( 00747 VOID 00748 ); 00749 00750 NTSTATUS 00751 NTAPI 00752 HalpOpenRegistryKey( 00753 IN PHANDLE KeyHandle, 00754 IN HANDLE RootKey, 00755 IN PUNICODE_STRING KeyName, 00756 IN ACCESS_MASK DesiredAccess, 00757 IN BOOLEAN Create 00758 ); 00759 00760 VOID 00761 NTAPI 00762 HalpGetNMICrashFlag( 00763 VOID 00764 ); 00765 00766 BOOLEAN 00767 NTAPI 00768 HalpGetDebugPortTable( 00769 VOID 00770 ); 00771 00772 VOID 00773 NTAPI 00774 HalpReportSerialNumber( 00775 VOID 00776 ); 00777 00778 NTSTATUS 00779 NTAPI 00780 HalpMarkAcpiHal( 00781 VOID 00782 ); 00783 00784 VOID 00785 NTAPI 00786 HalpBuildAddressMap( 00787 VOID 00788 ); 00789 00790 VOID 00791 NTAPI 00792 HalpReportResourceUsage( 00793 IN PUNICODE_STRING HalName, 00794 IN INTERFACE_TYPE InterfaceType 00795 ); 00796 00797 ULONG 00798 NTAPI 00799 HalpIs16BitPortDecodeSupported( 00800 VOID 00801 ); 00802 00803 NTSTATUS 00804 NTAPI 00805 HalpQueryAcpiResourceRequirements( 00806 OUT PIO_RESOURCE_REQUIREMENTS_LIST *Requirements 00807 ); 00808 00809 VOID 00810 FASTCALL 00811 KeUpdateSystemTime( 00812 IN PKTRAP_FRAME TrapFrame, 00813 IN ULONG Increment, 00814 IN KIRQL OldIrql 00815 ); 00816 00817 VOID 00818 NTAPI 00819 HalpInitBusHandlers( 00820 VOID 00821 ); 00822 00823 NTSTATUS 00824 NTAPI 00825 HaliInitPnpDriver( 00826 VOID 00827 ); 00828 00829 VOID 00830 NTAPI 00831 HalpDebugPciDumpBus( 00832 IN ULONG i, 00833 IN ULONG j, 00834 IN ULONG k, 00835 IN PPCI_COMMON_CONFIG PciData 00836 ); 00837 00838 VOID 00839 NTAPI 00840 HalpInitProcessor( 00841 IN ULONG ProcessorNumber, 00842 IN PLOADER_PARAMETER_BLOCK LoaderBlock 00843 ); 00844 00845 #ifdef _M_AMD64 00846 #define KfLowerIrql KeLowerIrql 00847 #define KiEnterInterruptTrap(TrapFrame) /* We do all neccessary in asm code */ 00848 #define KiEoiHelper(TrapFrame) return /* Just return to the caller */ 00849 #define HalBeginSystemInterrupt(Irql, Vector, OldIrql) ((*(OldIrql) = PASSIVE_LEVEL), TRUE) 00850 #ifndef CONFIG_SMP 00851 /* On UP builds, spinlocks don't exist at IRQL >= DISPATCH */ 00852 #define KiAcquireSpinLock(SpinLock) 00853 #define KiReleaseSpinLock(SpinLock) 00854 #define KfAcquireSpinLock(SpinLock) KfRaiseIrql(DISPATCH_LEVEL); 00855 #define KfReleaseSpinLock(SpinLock, OldIrql) KeLowerIrql(OldIrql); 00856 #endif // !CONFIG_SMP 00857 #endif // _M_AMD64 00858 00859 extern BOOLEAN HalpNMIInProgress; 00860 00861 extern ADDRESS_USAGE HalpDefaultIoSpace; 00862 00863 extern KSPIN_LOCK HalpSystemHardwareLock; 00864 00865 extern PADDRESS_USAGE HalpAddressUsageList; 00866 00867 extern LARGE_INTEGER HalpPerfCounter; 00868 00869 extern KAFFINITY HalpActiveProcessors; 00870 00871 extern BOOLEAN HalDisableFirmwareMapper; 00872 extern PWCHAR HalHardwareIdString; 00873 extern PWCHAR HalName; 00874 00875 extern KAFFINITY HalpDefaultInterruptAffinity; 00876 00877 extern IDTUsageFlags HalpIDTUsageFlags[MAXIMUM_IDTVECTOR+1]; 00878 00879 extern const USHORT HalpBuildType; Generated on Sun May 27 2012 04:28:41 for ReactOS by
1.7.6.1
|