Implemented bus handler functions (not working yet)

Several STDCALL fixes

svn path=/trunk/; revision=1085
This commit is contained in:
Eric Kohl 2000-03-19 13:35:38 +00:00
parent 9887130ab7
commit 802301d861
9 changed files with 640 additions and 124 deletions

View file

@ -32,7 +32,10 @@
*/ */
BOOLEAN BOOLEAN
HalMakeBeep(ULONG Frequency) STDCALL
HalMakeBeep (
ULONG Frequency
)
{ {
/* save flags and disable interrupts */ /* save flags and disable interrupts */
__asm__("pushf\n\t" \ __asm__("pushf\n\t" \

View file

@ -6,72 +6,554 @@
* PROGRAMMER: David Welch (welch@mcmail.com) * PROGRAMMER: David Welch (welch@mcmail.com)
* UPDATE HISTORY: * UPDATE HISTORY:
* Created 22/05/98 * Created 22/05/98
*
*
* NOTE: The bus handler code is under contruction!
* It does NOT work yet!
*
* TODO:
* - Add missing default bus handler functions
* - Change ntoskrnl's initialization sequence
* (non-paged pool and spin locks must be available before HalInitSystem()
* is called in system initialization phase 0)
* - Add bus handler functions for all busses
*/ */
/* INCLUDES *****************************************************************/ /* INCLUDES *****************************************************************/
#include <ddk/ntddk.h> #include <ddk/ntddk.h>
#include <internal/hal.h>
#define NDEBUG
#include <internal/debug.h> #include <internal/debug.h>
/* TYPE DEFINITIONS *********************************************************/
struct _BUS_HANDLER;
typedef ULONG (STDCALL *pGetInterruptVector) (
IN struct _BUS_HANDLER *BusHandler,
IN ULONG BusInterruptLevel,
IN ULONG BusInterruptVector,
OUT PKIRQL Irql,
OUT PKAFFINITY Affinity
);
typedef ULONG (STDCALL *pTranslateBusAddress) (
IN struct _BUS_HANDLER *BusHandler,
IN PHYSICAL_ADDRESS BusAddress,
IN ULONG Length,
IN OUT PULONG AddressSpace,
OUT PPHYSICAL_ADDRESS TranslatedAddress
);
typedef struct _BUS_HANDLER
{
LIST_ENTRY Entry;
INTERFACE_TYPE InterfaceType;
BUS_DATA_TYPE BusDataType;
ULONG BusNumber;
ULONG RefCount;
PVOID GetBusData;
PVOID SetBusData;
PVOID AssignSlotResources;
pGetInterruptVector GetInterruptVector;
pTranslateBusAddress TranslateBusAddress;
} BUS_HANDLER, *PBUS_HANDLER;
/* GLOBAL VARIABLES **********************************************************/
//KSPIN_LOCK HalpBusHandlerSpinLock = {0,};
LIST_ENTRY HalpBusHandlerList;
/* FUNCTIONS *****************************************************************/ /* FUNCTIONS *****************************************************************/
NTSTATUS HalAssignSlotResources(PUNICODE_STRING RegistryPath, static
PUNICODE_STRING DriverClassName, ULONG
PDRIVER_OBJECT DriverObject, HalpNoBusData (
PDEVICE_OBJECT DeviceObject, PBUS_HANDLER BusHandler,
INTERFACE_TYPE BusType, ULONG SlotNumber,
ULONG BusNumber, PVOID Buffer,
ULONG SlotNumber, ULONG Offset,
PCM_RESOURCE_LIST* AllocatedResources) ULONG Length
)
{ {
return 0;
}
PBUS_HANDLER
HalpAllocateBusHandler (
INTERFACE_TYPE InterfaceType,
BUS_DATA_TYPE BusDataType,
ULONG BusNumber
)
{
PBUS_HANDLER BusHandler = NULL;
// BusHandler = ExAllocatePool (NonPagedPool, sizeof(BUS_HANDLER));
if (BusHandler == NULL)
return NULL;
RtlZeroMemory (BusHandler, sizeof(BUS_HANDLER));
InsertTailList (&HalpBusHandlerList,
&BusHandler->Entry);
BusHandler->InterfaceType = InterfaceType;
BusHandler->BusDataType = BusDataType;
BusHandler->BusNumber = BusNumber;
/* initialize handler function table */
BusHandler->GetBusData = HalpNoBusData;
BusHandler->SetBusData = HalpNoBusData;
// BusHandler->AdjustResourceList = HalpNoAdjustResourceList;
// BusHandler->AssignSlotResources = HalpNoAssignSlotResources;
// BusHandler->GetInterruptVector = HalpNoGetInterruptVector;
// BusHandler->TranslateBusAddress = HalpNoTranslateBusAddress;
return BusHandler;
}
VOID
HalpInitBusHandlers (VOID)
{
PBUS_HANDLER BusHandler;
/* general preparations */
// KeInitializeSpinLock (&HalpBusHandlerSpinLock);
InitializeListHead (&HalpBusHandlerList);
/* initialize hal dispatch tables */
#if 0
HalDispatchTable->HalQueryBusSlots = HaliQueryBusSlots;
#endif
/*
* add bus handlers
*/
/* system bus handler */
BusHandler = HalpAllocateBusHandler (Internal,
ConfigurationSpaceUndefined,
0);
// BusHandler->GetInterruptVector =
// (pGetInterruptVector)HalpGetSystemInterruptVector;
// BusHandler->TranslateBusAddress =
// (pTranslateBusAddress)HalpTranslateSystemBusAddress;
/* cmos bus handler */
BusHandler = HalpAllocateBusHandler (InterfaceTypeUndefined,
Cmos,
0);
/* pci bus handler */
BusHandler = HalpAllocateBusHandler (PCIBus,
PCIConfiguration,
0);
/* isa bus handler */
BusHandler = HalpAllocateBusHandler (Isa,
ConfigurationSpaceUndefined,
0);
}
PBUS_HANDLER
FASTCALL
HaliHandlerForBus (
INTERFACE_TYPE InterfaceType,
ULONG BusNumber
)
{
PBUS_HANDLER BusHandler;
PLIST_ENTRY CurrentEntry;
// KIRQL OldIrql;
// KeAcquireSpinLock (&HalpBusHandlerSpinLock, &OldIrql);
CurrentEntry = HalpBusHandlerList.Flink;
while (CurrentEntry != &HalpBusHandlerList)
{
BusHandler = (PBUS_HANDLER)CurrentEntry;
if (BusHandler->InterfaceType == InterfaceType &&
BusHandler->BusNumber == BusNumber)
{
// KeReleaseSpinLock (&HalpBusHandlerSpinLock, OldIrql);
return BusHandler;
}
CurrentEntry = CurrentEntry->Flink;
}
// KeReleaseSpinLock (&HalpBusHandlerSpinLock, OldIrql);
return NULL;
}
PBUS_HANDLER
FASTCALL
HaliHandlerForConfigSpace (
BUS_DATA_TYPE BusDataType,
ULONG BusNumber
)
{
PBUS_HANDLER BusHandler;
PLIST_ENTRY CurrentEntry;
// KIRQL OldIrql;
// KeAcquireSpinLock (&HalpBusHandlerSpinLock, &OldIrql);
CurrentEntry = HalpBusHandlerList.Flink;
while (CurrentEntry != &HalpBusHandlerList)
{
BusHandler = (PBUS_HANDLER)CurrentEntry;
if (BusHandler->BusDataType == BusDataType &&
BusHandler->BusNumber == BusNumber)
{
// KeReleaseSpinLock (&HalpBusHandlerSpinLock, OldIrql);
return BusHandler;
}
CurrentEntry = CurrentEntry->Flink;
}
// KeReleaseSpinLock (&HalpBusHandlerSpinLock, OldIrql);
return NULL;
}
PBUS_HANDLER
FASTCALL
HaliReferenceHandlerForBus (
INTERFACE_TYPE InterfaceType,
ULONG BusNumber
)
{
PBUS_HANDLER BusHandler;
PLIST_ENTRY CurrentEntry;
// KIRQL OldIrql;
// KeAcquireSpinLock (&HalpBusHandlerSpinLock, &OldIrql);
CurrentEntry = HalpBusHandlerList.Flink;
while (CurrentEntry != &HalpBusHandlerList)
{
BusHandler = (PBUS_HANDLER)CurrentEntry;
if (BusHandler->InterfaceType == InterfaceType &&
BusHandler->BusNumber == BusNumber)
{
BusHandler->RefCount++;
// KeReleaseSpinLock (&HalpBusHandlerSpinLock, OldIrql);
return BusHandler;
}
CurrentEntry = CurrentEntry->Flink;
}
// KeReleaseSpinLock (&HalpBusHandlerSpinLock, OldIrql);
return NULL;
}
PBUS_HANDLER
FASTCALL
HaliReferenceHandlerForConfigSpace (
BUS_DATA_TYPE BusDataType,
ULONG BusNumber
)
{
PBUS_HANDLER BusHandler;
PLIST_ENTRY CurrentEntry;
// KIRQL OldIrql;
// KeAcquireSpinLock (&HalpBusHandlerSpinLock, &OldIrql);
CurrentEntry = HalpBusHandlerList.Flink;
while (CurrentEntry != &HalpBusHandlerList)
{
BusHandler = (PBUS_HANDLER)CurrentEntry;
if (BusHandler->BusDataType == BusDataType &&
BusHandler->BusNumber == BusNumber)
{
BusHandler->RefCount++;
// KeReleaseSpinLock (&HalpBusHandlerSpinLock, OldIrql);
return BusHandler;
}
CurrentEntry = CurrentEntry->Flink;
}
// KeReleaseSpinLock (&HalpBusHandlerSpinLock, OldIrql);
return NULL;
}
VOID
FASTCALL
HaliDereferenceBusHandler (
PBUS_HANDLER BusHandler
)
{
// KIRQL OldIrql;
// KeAcquireSpinLock (&HalpBusHandlerSpinLock, &OldIrql);
BusHandler->RefCount--;
// KeReleaseSpinLock (&HalpBusHandlerSpinLock, OldIrql);
}
NTSTATUS
STDCALL
HalAdjustResourceList (
PCM_RESOURCE_LIST Resources
)
{
#if 0
PBUS_HANDLER BusHandler;
NTSTATUS Status;
BusHandler = HaliReferenceHandlerForBus (Resources->List[0].InterfaceType,
Resources->List[0].BusNumber);
if (BusHandler == NULL)
return STATUS_SUCCESS;
Status = BusHandler->AdjustResourceList (BusHandler,
BusHandler,
Resources);
HaliDereferenceBusHandler (BusHandler);
return Status;
#endif
UNIMPLEMENTED; UNIMPLEMENTED;
} }
ULONG HalGetBusData(BUS_DATA_TYPE BusDataType,
ULONG BusNumber, NTSTATUS
ULONG SlotNumber, STDCALL
PVOID Buffer, HalAssignSlotResources (
ULONG Length) PUNICODE_STRING RegistryPath,
PUNICODE_STRING DriverClassName,
PDRIVER_OBJECT DriverObject,
PDEVICE_OBJECT DeviceObject,
INTERFACE_TYPE BusType,
ULONG BusNumber,
ULONG SlotNumber,
PCM_RESOURCE_LIST *AllocatedResources
)
{ {
#if 0
PBUS_HANDLER BusHandler;
NTSTATUS Status;
BusHandler = HaliReferenceHandlerForBus (InterfaceType,
BusNumber);
if (BusHandler == NULL)
return STATUS_NOT_FOUND;
Status = BusHandler->AssignSlotResources (BusHandler,
BusHandler,
RegistryPath,
DriverClassName,
DriverObject,
DeviceObject,
SlotNumber,
AllocatedResources);
HaliDereferenceBusHandler (BusHandler);
return Status;
#endif
UNIMPLEMENTED; UNIMPLEMENTED;
} }
ULONG HalGetBusDataByOffset(BUS_DATA_TYPE BusDataType,
ULONG BusNumber, ULONG
ULONG SlotNumber, STDCALL
PVOID Buffer, HalGetBusData (
ULONG Offset, BUS_DATA_TYPE BusDataType,
ULONG Length) ULONG BusNumber,
ULONG SlotNumber,
PVOID Buffer,
ULONG Length
)
{ {
UNIMPLEMENTED; return (HalGetBusDataByOffset (BusDataType,
BusNumber,
SlotNumber,
Buffer,
0,
Length));
} }
ULONG HalSetBusData(BUS_DATA_TYPE BusDataType,
ULONG BusNumber,
ULONG SlotNumber, ULONG
PVOID Buffer, STDCALL
ULONG Length) HalGetBusDataByOffset (
BUS_DATA_TYPE BusDataType,
ULONG BusNumber,
ULONG SlotNumber,
PVOID Buffer,
ULONG Offset,
ULONG Length
)
{ {
#if 0
PBUS_HANDLER BusHandler;
ULONG Result;
BusHandler = HaliReferenceHandlerForConfigSpace (BusDataType,
BusNumber);
if (BusHandler == NULL)
return 0;
Result = BusHandler->GetBusData (BusHandler,
SlotNumber,
Buffer,
Offset,
Length);
HaliDereferenceBusHandler (BusHandler);
return Result;
#endif
UNIMPLEMENTED; UNIMPLEMENTED;
} }
ULONG HalSetBusDataByOffset(BUS_DATA_TYPE BusDataType,
ULONG BusNumber, ULONG
ULONG SlotNumber, STDCALL
PVOID Buffer, HalGetInterruptVector (
ULONG Offset, INTERFACE_TYPE InterfaceType,
ULONG Length) ULONG BusNumber,
ULONG BusInterruptLevel,
ULONG BusInterruptVector,
PKIRQL Irql,
PKAFFINITY Affinity
)
{ {
#if 0
PBUS_HANDLER BusHandler;
ULONG Result;
BusHandler = HaliReferenceHandlerForBus (InterfaceType,
BusNumber);
if (BusHandler == NULL)
return 0;
Result = BusHandler->GetInterruptVector (BusHandler,
BusInterruptLevel,
BusInterruptVector,
Irql,
Affinity);
HaliDereferenceBusHandler (BusHandler);
return Result;
#endif
return (HalpGetSystemInterruptVector (NULL,
BusInterruptLevel,
BusInterruptVector,
Irql,
Affinity));
}
ULONG
STDCALL
HalSetBusData (
BUS_DATA_TYPE BusDataType,
ULONG BusNumber,
ULONG SlotNumber,
PVOID Buffer,
ULONG Length
)
{
return (HalSetBusDataByOffset (BusDataType,
BusNumber,
SlotNumber,
Buffer,
0,
Length));
}
ULONG
STDCALL
HalSetBusDataByOffset (
BUS_DATA_TYPE BusDataType,
ULONG BusNumber,
ULONG SlotNumber,
PVOID Buffer,
ULONG Offset,
ULONG Length
)
{
#if 0
PBUS_HANDLER BusHandler;
ULONG Result;
BusHandler = HaliReferenceHandlerForConfigSpace (BusDataType,
BusNumber);
if (BusHandler == NULL)
return 0;
Result = BusHandler->SetBusData (BusHandler,
BusHandler,
SlotNumber,
Buffer,
Offset,
Length);
HaliDereferenceBusHandler (BusHandler);
return Result;
#endif
UNIMPLEMENTED; UNIMPLEMENTED;
} }
BOOLEAN HalTranslateBusAddress(INTERFACE_TYPE InterfaceType,
ULONG BusNumber, BOOLEAN
PHYSICAL_ADDRESS BusAddress, STDCALL
PULONG AddressSpace, HalTranslateBusAddress (
PPHYSICAL_ADDRESS TranslatedAddress) INTERFACE_TYPE InterfaceType,
ULONG BusNumber,
PHYSICAL_ADDRESS BusAddress,
PULONG AddressSpace,
PPHYSICAL_ADDRESS TranslatedAddress
)
{ {
#if 0
PBUS_HANDLER BusHandler;
BOOLEAN Result;
BusHandler = HaliReferenceHandlerForBus (InterfaceType,
BusNumber);
if (BusHandler == NULL)
return FALSE;
Result = BusHandler->TranslateBusAddress (BusHandler,
BusHandler,
BusAddress,
AddressSpace,
TranslatedAddress);
HaliDereferenceBusHandler (BusHandler);
return Result;
#endif
UNIMPLEMENTED; UNIMPLEMENTED;
} }
/* EOF */

View file

@ -1,4 +1,4 @@
/* $Id: display.c,v 1.5 2000/01/09 21:39:07 ekohl Exp $ /* $Id: display.c,v 1.6 2000/03/19 13:34:47 ekohl Exp $
* *
* COPYRIGHT: See COPYING in the top level directory * COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel * PROJECT: ReactOS kernel
@ -162,9 +162,10 @@ HalResetDisplay (VOID)
/* PUBLIC FUNCTIONS *********************************************************/ /* PUBLIC FUNCTIONS *********************************************************/
VOID VOID
STDCALL
HalAcquireDisplayOwnership ( HalAcquireDisplayOwnership (
IN PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters IN PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters
) )
/* /*
* FUNCTION: * FUNCTION:
* ARGUMENTS: * ARGUMENTS:
@ -178,7 +179,10 @@ HalAcquireDisplayOwnership (
VOID VOID
HalDisplayString(PCH String) STDCALL
HalDisplayString (
IN PCH String
)
/* /*
* FUNCTION: Switches the screen to HAL console mode (BSOD) if not there * FUNCTION: Switches the screen to HAL console mode (BSOD) if not there
* already and displays a string * already and displays a string
@ -251,10 +255,13 @@ HalDisplayString(PCH String)
VOID VOID
HalQueryDisplayParameters (PULONG DispSizeX, STDCALL
PULONG DispSizeY, HalQueryDisplayParameters (
PULONG CursorPosX, PULONG DispSizeX,
PULONG CursorPosY) PULONG DispSizeY,
PULONG CursorPosX,
PULONG CursorPosY
)
{ {
if (DispSizeX) if (DispSizeX)
*DispSizeX = SizeX; *DispSizeX = SizeX;
@ -268,11 +275,14 @@ HalQueryDisplayParameters (PULONG DispSizeX,
VOID VOID
HalSetDisplayParameters (ULONG CursorPosX, STDCALL
ULONG CursorPosY) HalSetDisplayParameters (
ULONG CursorPosX,
ULONG CursorPosY
)
{ {
CursorX = (CursorPosX < SizeX) ? CursorPosX : SizeX - 1; CursorX = (CursorPosX < SizeX) ? CursorPosX : SizeX - 1;
CursorY = (CursorPosY < SizeY) ? CursorPosY : SizeY - 1; CursorY = (CursorPosY < SizeY) ? CursorPosY : SizeY - 1;
} }
/* EOF */ /* EOF */

View file

@ -1,4 +1,4 @@
/* $Id: halinit.c,v 1.7 1999/12/12 03:48:47 phreak Exp $ /* $Id: halinit.c,v 1.8 2000/03/19 13:34:47 ekohl Exp $
* *
* COPYRIGHT: See COPYING in the top level directory * COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel * PROJECT: ReactOS kernel
@ -22,7 +22,11 @@
/* FUNCTIONS ***************************************************************/ /* FUNCTIONS ***************************************************************/
BOOLEAN BOOLEAN
HalInitSystem (ULONG Phase, boot_param *bp) STDCALL
HalInitSystem (
ULONG Phase,
boot_param *bp
)
{ {
if (Phase == 0) if (Phase == 0)
{ {
@ -34,6 +38,8 @@ HalInitSystem (ULONG Phase, boot_param *bp)
KeInitIRQ(); KeInitIRQ();
KeLowerIrql(DISPATCH_LEVEL); KeLowerIrql(DISPATCH_LEVEL);
HalpInitBusHandlers ();
/* /*
* Probe for a BIOS32 extension * Probe for a BIOS32 extension
*/ */

View file

@ -1,4 +1,5 @@
/* /* $Id: irq.c,v 1.8 2000/03/19 13:34:47 ekohl Exp $
*
* COPYRIGHT: See COPYING in the top level directory * COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel * PROJECT: ReactOS kernel
* FILE: ntoskrnl/hal/x86/irq.c * FILE: ntoskrnl/hal/x86/irq.c
@ -29,6 +30,7 @@
#include <internal/i386/segment.h> #include <internal/i386/segment.h>
#include <internal/halio.h> #include <internal/halio.h>
#include <internal/hal.h>
#define NDEBUG #define NDEBUG
#include <internal/debug.h> #include <internal/debug.h>
@ -364,8 +366,9 @@ VOID IoDisconnectInterrupt(PKINTERRUPT InterruptObject)
KeLowerIrql(oldlvl); KeLowerIrql(oldlvl);
} }
ULONG HalGetInterruptVector(INTERFACE_TYPE InterfaceType, ULONG
ULONG BusNumber, STDCALL
HalpGetSystemInterruptVector(PVOID BusHandler,
ULONG BusInterruptLevel, ULONG BusInterruptLevel,
ULONG BusInterruptVector, ULONG BusInterruptVector,
PKIRQL Irql, PKIRQL Irql,
@ -389,11 +392,14 @@ ULONG HalGetInterruptVector(INTERFACE_TYPE InterfaceType,
// ASSERT_IRQL(PASSIVE_LEVEL); // ASSERT_IRQL(PASSIVE_LEVEL);
#if 0
switch (InterfaceType) switch (InterfaceType)
{ {
case Internal: case Internal:
#endif
*Irql = HIGH_LEVEL - BusInterruptVector; *Irql = HIGH_LEVEL - BusInterruptVector;
ret = BusInterruptVector; ret = BusInterruptVector;
#if 0
break; break;
default: default:
@ -401,7 +407,8 @@ ULONG HalGetInterruptVector(INTERFACE_TYPE InterfaceType,
DbgPrint("(%s:%d) Don't know that bus type\n",__FILE__,__LINE__); DbgPrint("(%s:%d) Don't know that bus type\n",__FILE__,__LINE__);
break; break;
} }
#endif
return(ret); return(ret);
} }
/* EOF */

View file

@ -1,4 +1,4 @@
/* $Id: reboot.c,v 1.3 1999/12/12 03:48:47 phreak Exp $ /* $Id: reboot.c,v 1.4 2000/03/19 13:34:47 ekohl Exp $
* *
* COPYRIGHT: See COPYING in the top level directory * COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel * PROJECT: ReactOS kernel
@ -52,7 +52,10 @@ HalReboot (VOID)
VOID VOID
HalReturnToFirmware (ULONG Action) STDCALL
HalReturnToFirmware (
ULONG Action
)
{ {
if (Action == FIRMWARE_HALT) if (Action == FIRMWARE_HALT)
{ {

View file

@ -15,10 +15,10 @@
/* MACROS and CONSTANTS ******************************************************/ /* MACROS and CONSTANTS ******************************************************/
/* macro BCD_INT : convert bcd to int */ /* macro BCD_INT : convert bcd to int */
#define BCD_INT(bcd) ( ((bcd & 0xf0) >> 4) * 10 + (bcd &0x0f) ) #define BCD_INT(bcd) (((bcd & 0xf0) >> 4) * 10 + (bcd &0x0f))
/* macro INT_BCD : convert int to bcd */ /* macro INT_BCD : convert int to bcd */
#define INT_BCD(int) ( ((int / 10) << 4) + (int % 10) ) #define INT_BCD(int) (((int / 10) << 4) + (int % 10))
#define RTC_REGISTER_A 0x0A #define RTC_REGISTER_A 0x0A
@ -59,62 +59,68 @@ HalSetCMOS (BYTE Reg, BYTE Val)
VOID VOID
HalQueryRealTimeClock (PTIME_FIELDS pTime) STDCALL
HalQueryRealTimeClock (
PTIME_FIELDS Time
)
{ {
/* check 'Update In Progress' bit */ /* check 'Update In Progress' bit */
while (HalQueryCMOS (RTC_REGISTER_A) & RTC_REG_A_UIP) while (HalQueryCMOS (RTC_REGISTER_A) & RTC_REG_A_UIP)
; ;
pTime->Second = BCD_INT(HalQueryCMOS (0)); Time->Second = BCD_INT(HalQueryCMOS (0));
pTime->Minute = BCD_INT(HalQueryCMOS (2)); Time->Minute = BCD_INT(HalQueryCMOS (2));
pTime->Hour = BCD_INT(HalQueryCMOS (4)); Time->Hour = BCD_INT(HalQueryCMOS (4));
pTime->Weekday = BCD_INT(HalQueryCMOS (6)); Time->Weekday = BCD_INT(HalQueryCMOS (6));
pTime->Day = BCD_INT(HalQueryCMOS (7)); Time->Day = BCD_INT(HalQueryCMOS (7));
pTime->Month = BCD_INT(HalQueryCMOS (8)); Time->Month = BCD_INT(HalQueryCMOS (8));
pTime->Year = BCD_INT(HalQueryCMOS (9)); Time->Year = BCD_INT(HalQueryCMOS (9));
if (pTime->Year > 80) if (Time->Year > 80)
pTime->Year += 1900; Time->Year += 1900;
else else
pTime->Year += 2000; Time->Year += 2000;
#if 0 #if 0
/* Century */ /* Century */
pTime->Year += BCD_INT(HalQueryCMOS (RTC_REGISTER_CENTURY)) * 100; Time->Year += BCD_INT(HalQueryCMOS (RTC_REGISTER_CENTURY)) * 100;
#endif #endif
#ifndef NDEBUG #ifndef NDEBUG
DbgPrint ("HalQueryRealTimeClock() %d:%d:%d %d/%d/%d\n", DbgPrint ("HalQueryRealTimeClock() %d:%d:%d %d/%d/%d\n",
pTime->Hour, Time->Hour,
pTime->Minute, Time->Minute,
pTime->Second, Time->Second,
pTime->Day, Time->Day,
pTime->Month, Time->Month,
pTime->Year Time->Year
); );
#endif #endif
pTime->Milliseconds = 0; Time->Milliseconds = 0;
} }
VOID VOID
HalSetRealTimeClock (PTIME_FIELDS pTime) STDCALL
HalSetRealTimeClock (
PTIME_FIELDS Time
)
{ {
/* check 'Update In Progress' bit */ /* check 'Update In Progress' bit */
while (HalQueryCMOS (RTC_REGISTER_A) & RTC_REG_A_UIP) while (HalQueryCMOS (RTC_REGISTER_A) & RTC_REG_A_UIP)
; ;
HalSetCMOS (0, INT_BCD(pTime->Second)); HalSetCMOS (0, INT_BCD(Time->Second));
HalSetCMOS (2, INT_BCD(pTime->Minute)); HalSetCMOS (2, INT_BCD(Time->Minute));
HalSetCMOS (4, INT_BCD(pTime->Hour)); HalSetCMOS (4, INT_BCD(Time->Hour));
HalSetCMOS (6, INT_BCD(pTime->Weekday)); HalSetCMOS (6, INT_BCD(Time->Weekday));
HalSetCMOS (7, INT_BCD(pTime->Day)); HalSetCMOS (7, INT_BCD(Time->Day));
HalSetCMOS (8, INT_BCD(pTime->Month)); HalSetCMOS (8, INT_BCD(Time->Month));
HalSetCMOS (9, INT_BCD(pTime->Year % 100)); HalSetCMOS (9, INT_BCD(Time->Year % 100));
#if 0 #if 0
/* Century */ /* Century */
HalSetCMOS (RTC_REGISTER_CENTURY, INT_BCD(pTime->Year / 100)); HalSetCMOS (RTC_REGISTER_CENTURY, INT_BCD(Time->Year / 100));
#endif #endif
} }

View file

@ -1,4 +1,4 @@
; $Id: ntoskrnl.def,v 1.61 2000/03/19 09:14:49 ea Exp $ ; $Id: ntoskrnl.def,v 1.62 2000/03/19 13:35:37 ekohl Exp $
; ;
; reactos/ntoskrnl/ntoskrnl.def ; reactos/ntoskrnl/ntoskrnl.def
; ;
@ -659,51 +659,51 @@ wctomb
ExAcquireFastMutex ExAcquireFastMutex
ExReleaseFastMutex ExReleaseFastMutex
ExTryToAcquireFastMutex ExTryToAcquireFastMutex
HalAcquireDisplayOwnership HalAcquireDisplayOwnership@4
;HalAdjustResourceList HalAdjustResourceList@4
;HalAllProcessorsStarted ;HalAllProcessorsStarted
;HalAllocateAdapterChannel ;HalAllocateAdapterChannel
;HalAllocateCommonBuffer ;HalAllocateCommonBuffer
;HalAllocateCrashDumpRegisters ;HalAllocateCrashDumpRegisters
;HalAssignSlotResources HalAssignSlotResources@32
;HalBeginSystemInterrupt ;HalBeginSystemInterrupt
;HalCalibratePerformanceCounter ;HalCalibratePerformanceCounter
;HalClearSoftwareInterrupt ;HalClearSoftwareInterrupt
;HalDisableSystemInterrupt ;HalDisableSystemInterrupt
HalDisplayString HalDisplayString@4
;HalEnableSystemInterrupt ;HalEnableSystemInterrupt
;HalEndSystemInterrupt ;HalEndSystemInterrupt
;HalFlushCommonBuffer ;HalFlushCommonBuffer
;HalFreeCommonBuffer ;HalFreeCommonBuffer
;HalGetAdapter ;HalGetAdapter
;HalGetBusData HalGetBusData@20
HalGetBusDataByOffset HalGetBusDataByOffset@24
;HalGetEnvironmentVariable ;HalGetEnvironmentVariable
HalGetInterruptVector HalGetInterruptVector@24
HalHandleNMI@4 HalHandleNMI@4
HalInitSystem HalInitSystem@8
;HalInitializeProcessor ;HalInitializeProcessor
HalMakeBeep HalMakeBeep@4
HalProcessorIdle@0 HalProcessorIdle@0
HalQueryDisplayParameters HalQueryDisplayParameters@16
HalQueryRealTimeClock HalQueryRealTimeClock@4
;HalReadDmaCounter ;HalReadDmaCounter
;HalReportResourceUsage ;HalReportResourceUsage
;HalRequestIpi ;HalRequestIpi
;HalRequestSoftwareInterrupt ;HalRequestSoftwareInterrupt
HalReturnToFirmware HalReturnToFirmware@4
;HalSetBusData HalSetBusData@20
HalSetBusDataByOffset HalSetBusDataByOffset@24
HalSetDisplayParameters HalSetDisplayParameters@8
;HalSetEnvironmentVariable ;HalSetEnvironmentVariable
;HalSetProfileInterval ;HalSetProfileInterval
HalSetRealTimeClock HalSetRealTimeClock@4
;HalSetTimeIncrement ;HalSetTimeIncrement
;HalStartNextProcessor ;HalStartNextProcessor
;HalStartProfileInterrupt ;HalStartProfileInterrupt
;HalStopProfileInterrupt ;HalStopProfileInterrupt
;HalSystemVectorDispatchEntry ;HalSystemVectorDispatchEntry
;HalTranslateBusAddress HalTranslateBusAddress@24
;IoAssignDriveLetters ;IoAssignDriveLetters
;IoFlushAdapterBuffers ;IoFlushAdapterBuffers
;IoFreeAdapterChannel ;IoFreeAdapterChannel

View file

@ -1,4 +1,4 @@
; $Id: ntoskrnl.edf,v 1.48 2000/03/19 09:14:50 ea Exp $ ; $Id: ntoskrnl.edf,v 1.49 2000/03/19 13:35:38 ekohl Exp $
; ;
; reactos/ntoskrnl/ntoskrnl.def ; reactos/ntoskrnl/ntoskrnl.def
; ;
@ -586,51 +586,51 @@ wctomb
ExAcquireFastMutex ExAcquireFastMutex
ExReleaseFastMutex ExReleaseFastMutex
ExTryToAcquireFastMutex ExTryToAcquireFastMutex
HalAcquireDisplayOwnership HalAcquireDisplayOwnership=HalAcquireDisplayOwnership@4
;HalAdjustResourceList HalAdjustResourceList=HalAdjustResourceList@4
;HalAllProcessorsStarted ;HalAllProcessorsStarted
;HalAllocateAdapterChannel ;HalAllocateAdapterChannel
;HalAllocateCommonBuffer ;HalAllocateCommonBuffer
;HalAllocateCrashDumpRegisters ;HalAllocateCrashDumpRegisters
;HalAssignSlotResources HalAssignSlotResource=HalAssignSlotResources@32
;HalBeginSystemInterrupt ;HalBeginSystemInterrupt
;HalCalibratePerformanceCounter ;HalCalibratePerformanceCounter
;HalClearSoftwareInterrupt ;HalClearSoftwareInterrupt
;HalDisableSystemInterrupt ;HalDisableSystemInterrupt
HalDisplayString HalDisplayString=HalDisplayString@4
;HalEnableSystemInterrupt ;HalEnableSystemInterrupt
;HalEndSystemInterrupt ;HalEndSystemInterrupt
;HalFlushCommonBuffer ;HalFlushCommonBuffer
;HalFreeCommonBuffer ;HalFreeCommonBuffer
;HalGetAdapter ;HalGetAdapter
;HalGetBusData HalGetBusData=HalGetBusData@20
HalGetBusDataByOffset HalGetBusDataByOffset=HalGetBusDataByOffset@24
;HalGetEnvironmentVariable ;HalGetEnvironmentVariable
HalGetInterruptVector HalGetInterruptVector=HalGetInterruptVector@24
HalHandleNMI=HalHandleNMI@4 HalHandleNMI=HalHandleNMI@4
HalInitSystem HalInitSystem=HalInitSystem@8
;HalInitializeProcessor ;HalInitializeProcessor
HalMakeBeep HalMakeBeep=HalMakeBeep@4
HalProcessorIdle=HalProcessorIdle@0 HalProcessorIdle=HalProcessorIdle@0
HalQueryDisplayParameters HalQueryDisplayParameters=HalQueryDisplayParameters@16
HalQueryRealTimeClock HalQueryRealTimeClock=HalQueryRealTimeClock@4
;HalReadDmaCounter ;HalReadDmaCounter
;HalReportResourceUsage ;HalReportResourceUsage
;HalRequestIpi ;HalRequestIpi
;HalRequestSoftwareInterrupt ;HalRequestSoftwareInterrupt
HalReturnToFirmware HalReturnToFirmware=HalReturnToFirmware@4
;HalSetBusData HalSetBusData=HalSetBusData@20
HalSetBusDataByOffset HalSetBusDataByOffset=HalSetBusDataByOffset@24
HalSetDisplayParameters HalSetDisplayParameters=HalSetDisplayParameters@8
;HalSetEnvironmentVariable ;HalSetEnvironmentVariable
;HalSetProfileInterval ;HalSetProfileInterval
HalSetRealTimeClock HalSetRealTimeClock=HalSetRealTimeClock@4
;HalSetTimeIncrement ;HalSetTimeIncrement
;HalStartNextProcessor ;HalStartNextProcessor
;HalStartProfileInterrupt ;HalStartProfileInterrupt
;HalStopProfileInterrupt ;HalStopProfileInterrupt
;HalSystemVectorDispatchEntry ;HalSystemVectorDispatchEntry
;HalTranslateBusAddress HalTranslateBusAddress=HalTranslateBusAddress@24
;IoAssignDriveLetters ;IoAssignDriveLetters
;IoFlushAdapterBuffers ;IoFlushAdapterBuffers
;IoFreeAdapterChannel ;IoFreeAdapterChannel
@ -675,4 +675,3 @@ WRITE_PORT_ULONG=WRITE_PORT_ULONG@8
WRITE_PORT_USHORT=WRITE_PORT_USHORT@8 WRITE_PORT_USHORT=WRITE_PORT_USHORT@8
InsertTailList InsertTailList
RemoveEntryList RemoveEntryList
KeServiceDescriptorTable DATA