ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

halp.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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.