mirror of
https://github.com/reactos/reactos.git
synced 2025-02-24 09:25:10 +00:00
This is part of the big 'ReactOS under MSVC6' project. Main work on converting ROS to be able to be compiled under MSVC6 was done by Mark Nordell.
Work done by me - incorporating all this stuff into the newest CVS tree. So blame me if I did something wrong during tamlin -> new CVS tree merging :-) It's HAL turn now. svn path=/trunk/; revision=7301
This commit is contained in:
parent
585b1fea42
commit
5a6b27edc4
20 changed files with 498 additions and 148 deletions
|
@ -1,4 +1,4 @@
|
|||
/* $Id: adapter.c,v 1.8 2003/10/31 01:08:00 gdalsnes Exp $
|
||||
/* $Id: adapter.c,v 1.9 2003/12/28 22:38:09 fireball Exp $
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS kernel
|
||||
|
@ -286,10 +286,14 @@ IoMapTransfer (
|
|||
* - If the controller supports scatter/gather, the copyover should not happen
|
||||
*/
|
||||
{
|
||||
PHYSICAL_ADDRESS Address;
|
||||
|
||||
|
||||
/* Isa System (slave) DMA? */
|
||||
PHYSICAL_ADDRESS Address;
|
||||
#if defined(__GNUC__)
|
||||
Address.QuadPart = 0ULL;
|
||||
#else
|
||||
Address.QuadPart = 0;
|
||||
#endif
|
||||
|
||||
/* Isa System (slave) DMA? */
|
||||
if (AdapterObject && AdapterObject->InterfaceType == Isa && !AdapterObject->Master)
|
||||
{
|
||||
#if 0
|
||||
|
@ -309,18 +313,18 @@ IoMapTransfer (
|
|||
if( WriteToDevice )
|
||||
{
|
||||
memcpy(MapRegisterBase,
|
||||
MmGetSystemAddressForMdl(Mdl) + ((ULONG)CurrentVa - (ULONG)MmGetMdlVirtualAddress(Mdl)),
|
||||
(char*)MmGetSystemAddressForMdl(Mdl) + ((ULONG)CurrentVa - (ULONG)MmGetMdlVirtualAddress(Mdl)),
|
||||
*Length );
|
||||
}
|
||||
|
||||
// program up the dma controller, and return
|
||||
Address = MmGetPhysicalAddress( MapRegisterBase );
|
||||
// port 0xA is the dma mask register, or a 0x10 on to the channel number to mask it
|
||||
WRITE_PORT_UCHAR( (PVOID)0x0A, AdapterObject->Channel | 0x10 );
|
||||
WRITE_PORT_UCHAR( (PVOID)0x0A, (UCHAR)(AdapterObject->Channel | 0x10));
|
||||
// write zero to the reset register
|
||||
WRITE_PORT_UCHAR( (PVOID)0x0C, 0 );
|
||||
// mode register, or channel with 0x4 for write memory, 0x8 for read memory, 0x10 for non auto initialize
|
||||
WRITE_PORT_UCHAR( (PVOID)0x0B, AdapterObject->Channel | ( WriteToDevice ? 0x8 : 0x4 ) );
|
||||
WRITE_PORT_UCHAR( (PVOID)0x0B, (UCHAR)(AdapterObject->Channel | ( WriteToDevice ? 0x8 : 0x4 )) );
|
||||
// set the 64k page register for the channel
|
||||
WRITE_PORT_UCHAR( AdapterObject->PagePort, (UCHAR)(((ULONG)Address.QuadPart)>>16) );
|
||||
// low, then high address byte, which is always 0 for us, because we have a 64k alligned address
|
||||
|
@ -330,7 +334,7 @@ IoMapTransfer (
|
|||
WRITE_PORT_UCHAR( AdapterObject->CountPort, (UCHAR)(*Length - 1) );
|
||||
WRITE_PORT_UCHAR( AdapterObject->CountPort, (UCHAR)((*Length - 1)>>8) );
|
||||
// unmask the channel to let it rip
|
||||
WRITE_PORT_UCHAR( (PVOID)0x0A, AdapterObject->Channel );
|
||||
WRITE_PORT_UCHAR( (PVOID)0x0A, (UCHAR)AdapterObject->Channel );
|
||||
|
||||
/*
|
||||
NOTE: Return value should be ignored when doing System DMA.
|
||||
|
@ -408,7 +412,7 @@ IoMapTransfer (
|
|||
if( WriteToDevice )
|
||||
{
|
||||
memcpy(MapRegisterBase,
|
||||
MmGetSystemAddressForMdl(Mdl) + ((ULONG)CurrentVa - (ULONG)MmGetMdlVirtualAddress(Mdl)),
|
||||
(char*)MmGetSystemAddressForMdl(Mdl) + ((ULONG)CurrentVa - (ULONG)MmGetMdlVirtualAddress(Mdl)),
|
||||
*Length );
|
||||
}
|
||||
|
||||
|
|
|
@ -41,12 +41,19 @@ HalMakeBeep (
|
|||
UCHAR b;
|
||||
|
||||
/* save flags and disable interrupts */
|
||||
#if defined(__GNUC__)
|
||||
__asm__("pushf\n\t" \
|
||||
"cli\n\t");
|
||||
#elif defined(_MSC_VER)
|
||||
__asm pushfd
|
||||
__asm cli
|
||||
#else
|
||||
#error Unknown compiler for inline assembler
|
||||
#endif
|
||||
|
||||
/* speaker off */
|
||||
b = READ_PORT_UCHAR((PUCHAR)PORT_B);
|
||||
WRITE_PORT_UCHAR((PUCHAR)PORT_B, b & 0xFC);
|
||||
WRITE_PORT_UCHAR((PUCHAR)PORT_B, (UCHAR)(b & 0xFC));
|
||||
|
||||
if (Frequency)
|
||||
{
|
||||
|
@ -55,7 +62,13 @@ HalMakeBeep (
|
|||
if (Divider > 0x10000)
|
||||
{
|
||||
/* restore flags */
|
||||
#if defined(__GNUC__)
|
||||
__asm__("popf\n\t");
|
||||
#elif defined(_MSC_VER)
|
||||
__asm popfd
|
||||
#else
|
||||
#error Unknown compiler for inline assembler
|
||||
#endif
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
@ -66,11 +79,17 @@ HalMakeBeep (
|
|||
WRITE_PORT_UCHAR((PUCHAR)TIMER2, (UCHAR)((Divider>>8) & 0xFF));
|
||||
|
||||
/* speaker on */
|
||||
WRITE_PORT_UCHAR((PUCHAR)PORT_B, READ_PORT_UCHAR((PUCHAR)PORT_B) | 0x03);
|
||||
WRITE_PORT_UCHAR((PUCHAR)PORT_B, (UCHAR)(READ_PORT_UCHAR((PUCHAR)PORT_B) | 0x03));
|
||||
}
|
||||
|
||||
/* restore flags */
|
||||
#if defined(__GNUC__)
|
||||
__asm__("popf\n\t");
|
||||
#elif defined(_MSC_VER)
|
||||
__asm popfd
|
||||
#else
|
||||
#error Unknown compiler for inline assembler
|
||||
#endif
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $Id: bus.c,v 1.6 2003/02/26 14:14:03 ekohl Exp $
|
||||
/* $Id: bus.c,v 1.7 2003/12/28 22:38:09 fireball Exp $
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS kernel
|
||||
|
@ -518,7 +518,7 @@ HalTranslateBusAddress(INTERFACE_TYPE InterfaceType,
|
|||
if (BusHandler == NULL)
|
||||
return FALSE;
|
||||
|
||||
Result = BusHandler->TranslateBusAddress(BusHandler,
|
||||
Result = (BOOLEAN)BusHandler->TranslateBusAddress(BusHandler,
|
||||
BusNumber,
|
||||
BusAddress,
|
||||
AddressSpace,
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
/* $Id: display.c,v 1.11 2003/09/02 20:11:43 ea Exp $
|
||||
/* $Id: display.c,v 1.12 2003/12/28 22:38:09 fireball Exp $
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS kernel
|
||||
|
@ -223,7 +223,7 @@ HalScrollDisplay (VOID)
|
|||
SizeX * (SizeY - 1) * 2);
|
||||
|
||||
ptr = VideoBuffer + (SizeX * (SizeY - 1));
|
||||
for (i = 0; i < SizeX; i++, ptr++)
|
||||
for (i = 0; i < (int)SizeX; i++, ptr++)
|
||||
{
|
||||
*ptr = (CHAR_ATTRIBUTE << 8) + ' ';
|
||||
}
|
||||
|
@ -257,28 +257,28 @@ HalEnablePalette(VOID)
|
|||
UCHAR STATIC FASTCALL
|
||||
HalReadGc(ULONG Index)
|
||||
{
|
||||
WRITE_PORT_UCHAR((PUCHAR)VGA_GC_INDEX, Index);
|
||||
WRITE_PORT_UCHAR((PUCHAR)VGA_GC_INDEX, (UCHAR)Index);
|
||||
return(READ_PORT_UCHAR((PUCHAR)VGA_GC_DATA));
|
||||
}
|
||||
|
||||
VOID STATIC FASTCALL
|
||||
HalWriteGc(ULONG Index, UCHAR Value)
|
||||
{
|
||||
WRITE_PORT_UCHAR((PUCHAR)VGA_GC_INDEX, Index);
|
||||
WRITE_PORT_UCHAR((PUCHAR)VGA_GC_INDEX, (UCHAR)Index);
|
||||
WRITE_PORT_UCHAR((PUCHAR)VGA_GC_DATA, Value);
|
||||
}
|
||||
|
||||
UCHAR STATIC FASTCALL
|
||||
HalReadSeq(ULONG Index)
|
||||
{
|
||||
WRITE_PORT_UCHAR((PUCHAR)VGA_SEQ_INDEX, Index);
|
||||
WRITE_PORT_UCHAR((PUCHAR)VGA_SEQ_INDEX, (UCHAR)Index);
|
||||
return(READ_PORT_UCHAR((PUCHAR)VGA_SEQ_DATA));
|
||||
}
|
||||
|
||||
VOID STATIC FASTCALL
|
||||
HalWriteSeq(ULONG Index, UCHAR Value)
|
||||
{
|
||||
WRITE_PORT_UCHAR((PUCHAR)VGA_SEQ_INDEX, Index);
|
||||
WRITE_PORT_UCHAR((PUCHAR)VGA_SEQ_INDEX, (UCHAR)Index);
|
||||
WRITE_PORT_UCHAR((PUCHAR)VGA_SEQ_DATA, Value);
|
||||
}
|
||||
|
||||
|
@ -294,7 +294,7 @@ HalWriteAc(ULONG Index, UCHAR Value)
|
|||
Index |= 0x20;
|
||||
}
|
||||
(VOID)READ_PORT_UCHAR((PUCHAR)VGA_INSTAT_READ);
|
||||
WRITE_PORT_UCHAR((PUCHAR)VGA_AC_INDEX, Index);
|
||||
WRITE_PORT_UCHAR((PUCHAR)VGA_AC_INDEX, (UCHAR)Index);
|
||||
WRITE_PORT_UCHAR((PUCHAR)VGA_AC_WRITE, Value);
|
||||
}
|
||||
|
||||
|
@ -310,21 +310,21 @@ HalReadAc(ULONG Index)
|
|||
Index |= 0x20;
|
||||
}
|
||||
(VOID)READ_PORT_UCHAR((PUCHAR)VGA_INSTAT_READ);
|
||||
WRITE_PORT_UCHAR((PUCHAR)VGA_AC_INDEX, Index);
|
||||
WRITE_PORT_UCHAR((PUCHAR)VGA_AC_INDEX, (UCHAR)Index);
|
||||
return(READ_PORT_UCHAR((PUCHAR)VGA_AC_READ));
|
||||
}
|
||||
|
||||
VOID STATIC FASTCALL
|
||||
HalWriteCrtc(ULONG Index, UCHAR Value)
|
||||
{
|
||||
WRITE_PORT_UCHAR((PUCHAR)VGA_CRTC_INDEX, Index);
|
||||
WRITE_PORT_UCHAR((PUCHAR)VGA_CRTC_INDEX, (UCHAR)Index);
|
||||
WRITE_PORT_UCHAR((PUCHAR)VGA_CRTC_DATA, Value);
|
||||
}
|
||||
|
||||
UCHAR STATIC FASTCALL
|
||||
HalReadCrtc(ULONG Index)
|
||||
{
|
||||
WRITE_PORT_UCHAR((PUCHAR)VGA_CRTC_INDEX, Index);
|
||||
WRITE_PORT_UCHAR((PUCHAR)VGA_CRTC_INDEX, (UCHAR)Index);
|
||||
return(READ_PORT_UCHAR((PUCHAR)VGA_CRTC_DATA));
|
||||
}
|
||||
|
||||
|
@ -385,16 +385,16 @@ HalSaveFont(VOID)
|
|||
Seq4 = HalReadSeq(0x04);
|
||||
|
||||
/* Force colour mode. */
|
||||
WRITE_PORT_UCHAR((PUCHAR)VGA_MISC_WRITE, MiscOut | 0x01);
|
||||
WRITE_PORT_UCHAR((PUCHAR)VGA_MISC_WRITE, (UCHAR)(MiscOut | 0x01));
|
||||
|
||||
HalBlankScreen(FALSE);
|
||||
|
||||
for (i = 0; i < 2; i++)
|
||||
{
|
||||
/* Save font 1 */
|
||||
HalWriteSeq(0x02, 0x04 << i); /* Write to plane 2 or 3 */
|
||||
HalWriteSeq(0x02, (UCHAR)(0x04 << i)); /* Write to plane 2 or 3 */
|
||||
HalWriteSeq(0x04, 0x06); /* Enable plane graphics. */
|
||||
HalWriteGc(0x04, 0x02 + i); /* Read plane 2 or 3 */
|
||||
HalWriteGc(0x04, (UCHAR)(0x02 + i)); /* Read plane 2 or 3 */
|
||||
HalWriteGc(0x05, 0x00); /* Write mode 0; read mode 0 */
|
||||
HalWriteGc(0x06, 0x05); /* Set graphics. */
|
||||
memcpy(SavedTextFont[i], GraphVideoBuffer, FONT_AMOUNT);
|
||||
|
@ -482,7 +482,7 @@ HalRestoreFont(VOID)
|
|||
Seq4 = HalReadSeq(0x04);
|
||||
|
||||
/* Force into colour mode. */
|
||||
WRITE_PORT_UCHAR((PUCHAR)VGA_MISC_WRITE, MiscOut | 0x10);
|
||||
WRITE_PORT_UCHAR((PUCHAR)VGA_MISC_WRITE, (UCHAR)(MiscOut | 0x10));
|
||||
|
||||
HalBlankScreen(FALSE);
|
||||
|
||||
|
@ -492,9 +492,9 @@ HalRestoreFont(VOID)
|
|||
|
||||
for (i = 0; i < 2; i++)
|
||||
{
|
||||
HalWriteSeq(0x02, 0x04 << i); /* Write to plane 2 or 3 */
|
||||
HalWriteSeq(0x02, (UCHAR)(0x04 << i)); /* Write to plane 2 or 3 */
|
||||
HalWriteSeq(0x04, 0x06); /* Enable plane graphics. */
|
||||
HalWriteGc(0x04, 0x02 + i); /* Read plane 2 or 3 */
|
||||
HalWriteGc(0x04, (UCHAR)(0x02 + i)); /* Read plane 2 or 3 */
|
||||
HalWriteGc(0x05, 0x00); /* Write mode 0; read mode 0. */
|
||||
HalWriteGc(0x06, 0x05); /* Set graphics. */
|
||||
memcpy(GraphVideoBuffer, SavedTextFont[i], FONT_AMOUNT);
|
||||
|
@ -528,7 +528,7 @@ HalRestoreMode(VOID)
|
|||
}
|
||||
|
||||
/* Unlock CRTC registers 0-7 */
|
||||
HalWriteCrtc(17, SavedTextCrtcReg[17] & ~0x80);
|
||||
HalWriteCrtc(17, (UCHAR)(SavedTextCrtcReg[17] & ~0x80));
|
||||
|
||||
for (i = 0; i < VGA_CRTC_NUM_REGISTERS; i++)
|
||||
{
|
||||
|
@ -683,7 +683,15 @@ HalDisplayString(IN PCH String)
|
|||
pch = String;
|
||||
|
||||
pushfl(Flags);
|
||||
|
||||
#if defined(__GNUC__)
|
||||
__asm__ ("cli\n\t");
|
||||
#elif defined(_MSC_VER)
|
||||
__asm cli
|
||||
#else
|
||||
#error Unknown compiler for inline assembler
|
||||
#endif
|
||||
|
||||
KeAcquireSpinLockAtDpcLevel(&Lock);
|
||||
|
||||
#if 0
|
||||
|
@ -742,9 +750,9 @@ HalDisplayString(IN PCH String)
|
|||
offset = (CursorY * SizeX) + CursorX;
|
||||
|
||||
WRITE_PORT_UCHAR((PUCHAR)VGA_CRTC_INDEX, CRTC_CURLO);
|
||||
WRITE_PORT_UCHAR((PUCHAR)VGA_CRTC_DATA, offset & 0xff);
|
||||
WRITE_PORT_UCHAR((PUCHAR)VGA_CRTC_DATA, (UCHAR)(offset & 0xff));
|
||||
WRITE_PORT_UCHAR((PUCHAR)VGA_CRTC_INDEX, CRTC_CURHI);
|
||||
WRITE_PORT_UCHAR((PUCHAR)VGA_CRTC_DATA, (offset >> 8) & 0xff);
|
||||
WRITE_PORT_UCHAR((PUCHAR)VGA_CRTC_DATA, (UCHAR)((offset >> 8) & 0xff));
|
||||
#endif
|
||||
KeReleaseSpinLockFromDpcLevel(&Lock);
|
||||
popfl(Flags);
|
||||
|
|
|
@ -6,12 +6,12 @@
|
|||
#define __INTERNAL_HAL_BUS_H
|
||||
|
||||
|
||||
typedef NTSTATUS STDCALL
|
||||
typedef NTSTATUS STDCALL_FUNC
|
||||
(*pAdjustResourceList)(IN PBUS_HANDLER BusHandler,
|
||||
IN ULONG BusNumber,
|
||||
IN OUT PCM_RESOURCE_LIST Resources);
|
||||
|
||||
typedef NTSTATUS STDCALL
|
||||
typedef NTSTATUS STDCALL_FUNC
|
||||
(*pAssignSlotResources)(IN PBUS_HANDLER BusHandler,
|
||||
IN ULONG BusNumber,
|
||||
IN PUNICODE_STRING RegistryPath,
|
||||
|
@ -21,7 +21,7 @@ typedef NTSTATUS STDCALL
|
|||
IN ULONG SlotNumber,
|
||||
IN OUT PCM_RESOURCE_LIST *AllocatedResources);
|
||||
|
||||
typedef ULONG STDCALL
|
||||
typedef ULONG STDCALL_FUNC
|
||||
(*pGetSetBusData)(IN PBUS_HANDLER BusHandler,
|
||||
IN ULONG BusNumber,
|
||||
IN ULONG SlotNumber,
|
||||
|
@ -29,7 +29,7 @@ typedef ULONG STDCALL
|
|||
IN ULONG Offset,
|
||||
IN ULONG Length);
|
||||
|
||||
typedef ULONG STDCALL
|
||||
typedef ULONG STDCALL_FUNC
|
||||
(*pGetInterruptVector)(IN PBUS_HANDLER BusHandler,
|
||||
IN ULONG BusNumber,
|
||||
IN ULONG BusInterruptLevel,
|
||||
|
@ -37,7 +37,7 @@ typedef ULONG STDCALL
|
|||
OUT PKIRQL Irql,
|
||||
OUT PKAFFINITY Affinity);
|
||||
|
||||
typedef ULONG STDCALL
|
||||
typedef ULONG STDCALL_FUNC
|
||||
(*pTranslateBusAddress)(IN PBUS_HANDLER BusHandler,
|
||||
IN ULONG BusNumber,
|
||||
IN PHYSICAL_ADDRESS BusAddress,
|
||||
|
|
|
@ -382,7 +382,15 @@ static inline VOID ReadPentiumClock(PULARGE_INTEGER Count)
|
|||
register ULONG nLow;
|
||||
register ULONG nHigh;
|
||||
|
||||
#if defined(__GNUC__)
|
||||
__asm__ __volatile__ ("rdtsc" : "=a" (nLow), "=d" (nHigh));
|
||||
#elif defined(_MSC_VER)
|
||||
__asm rdtsc
|
||||
__asm mov nLow, eax
|
||||
__asm mov nHigh, edx
|
||||
#else
|
||||
#error Unknown compiler for inline assembler
|
||||
#endif
|
||||
|
||||
Count->u.LowPart = nLow;
|
||||
Count->u.HighPart = nHigh;
|
||||
|
@ -415,8 +423,15 @@ typedef enum {
|
|||
} APIC_MODE;
|
||||
|
||||
|
||||
#if defined(__GNUC__)
|
||||
#define pushfl(x) __asm__ __volatile__("pushfl ; popl %0":"=g" (x): /* no input */)
|
||||
#define popfl(x) __asm__ __volatile__("pushl %0 ; popfl": /* no output */ :"g" (x):"memory")
|
||||
#elif defined(_MSC_VER)
|
||||
#define pushfl(x) __asm pushfd __asm pop x;
|
||||
#define popfl(x) __asm push x __asm popfd;
|
||||
#else
|
||||
#error Unknown compiler for inline assembler
|
||||
#endif
|
||||
|
||||
|
||||
#define PIC_IRQS 16
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $Id: irql.c,v 1.13 2003/11/19 21:04:10 gdalsnes Exp $
|
||||
/* $Id: irql.c,v 1.14 2003/12/28 22:38:09 fireball Exp $
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS kernel
|
||||
|
@ -44,13 +44,21 @@ PIC_MASK;
|
|||
* PURPOSE: - Mask for HalEnableSystemInterrupt and HalDisableSystemInterrupt
|
||||
* - At startup enable timer and cascade
|
||||
*/
|
||||
#if defined(__GNUC__)
|
||||
static PIC_MASK pic_mask = {.both = 0xFFFA};
|
||||
#else
|
||||
static PIC_MASK pic_mask = { 0xFFFA };
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
* PURPOSE: Mask for disabling of acknowledged interrupts
|
||||
*/
|
||||
#if defined(__GNUC__)
|
||||
static PIC_MASK pic_mask_intr = {.both = 0x0000};
|
||||
#else
|
||||
static PIC_MASK pic_mask_intr = { 0 };
|
||||
#endif
|
||||
|
||||
extern IMPORTED ULONG DpcQueueSize;
|
||||
|
||||
|
@ -95,7 +103,13 @@ VOID HalpInitPICs(VOID)
|
|||
WRITE_PORT_UCHAR((PUCHAR)0xa1, pic_mask.slave);
|
||||
|
||||
/* We can now enable interrupts */
|
||||
#if defined(__GNUC__)
|
||||
__asm__ __volatile__ ("sti\n\t");
|
||||
#elif defined(_MSC_VER)
|
||||
__asm sti
|
||||
#else
|
||||
#error Unknown compiler for inline assembler
|
||||
#endif
|
||||
}
|
||||
|
||||
VOID HalpEndSystemInterrupt(KIRQL Irql)
|
||||
|
@ -112,12 +126,26 @@ VOID HalpEndSystemInterrupt(KIRQL Irql)
|
|||
};
|
||||
|
||||
/* Interrupts should be disable while enabling irqs of both pics */
|
||||
#if defined(__GNUC__)
|
||||
__asm__("pushf\n\t");
|
||||
__asm__("cli\n\t");
|
||||
#elif defined(_MSC_VER)
|
||||
__asm pushfd
|
||||
__asm cli
|
||||
#else
|
||||
#error Unknown compiler for inline assembler
|
||||
#endif
|
||||
|
||||
pic_mask_intr.both &= mask[Irql];
|
||||
WRITE_PORT_UCHAR((PUCHAR)0x21, pic_mask.master|pic_mask_intr.master);
|
||||
WRITE_PORT_UCHAR((PUCHAR)0xa1, pic_mask.slave|pic_mask_intr.slave);
|
||||
WRITE_PORT_UCHAR((PUCHAR)0x21, (UCHAR)(pic_mask.master|pic_mask_intr.master));
|
||||
WRITE_PORT_UCHAR((PUCHAR)0xa1, (UCHAR)(pic_mask.slave|pic_mask_intr.slave));
|
||||
#if defined(__GNUC__)
|
||||
__asm__("popf\n\t");
|
||||
#elif defined(_MSC_VER)
|
||||
__asm popfd
|
||||
#else
|
||||
#error Unknown compiler for inline assembler
|
||||
#endif
|
||||
}
|
||||
|
||||
VOID STATIC
|
||||
|
@ -135,7 +163,7 @@ HalpExecuteIrqs(KIRQL NewIrql)
|
|||
{
|
||||
if (HalpPendingInterruptCount[i] > 0)
|
||||
{
|
||||
CurrentIrql = IRQ_TO_DIRQL(i);
|
||||
CurrentIrql = (KIRQL)IRQ_TO_DIRQL(i);
|
||||
|
||||
while (HalpPendingInterruptCount[i] > 0)
|
||||
{
|
||||
|
@ -366,12 +394,12 @@ HalBeginSystemInterrupt (ULONG Vector,
|
|||
|
||||
if (irq < 8)
|
||||
{
|
||||
WRITE_PORT_UCHAR((PUCHAR)0x21, pic_mask.master|pic_mask_intr.master);
|
||||
WRITE_PORT_UCHAR((PUCHAR)0x21, (UCHAR)(pic_mask.master|pic_mask_intr.master));
|
||||
WRITE_PORT_UCHAR((PUCHAR)0x20, 0x20);
|
||||
}
|
||||
else
|
||||
{
|
||||
WRITE_PORT_UCHAR((PUCHAR)0xa1, pic_mask.slave|pic_mask_intr.slave);
|
||||
WRITE_PORT_UCHAR((PUCHAR)0xa1, (UCHAR)(pic_mask.slave|pic_mask_intr.slave));
|
||||
/* Send EOI to the PICs */
|
||||
WRITE_PORT_UCHAR((PUCHAR)0x20,0x20);
|
||||
WRITE_PORT_UCHAR((PUCHAR)0xa0,0x20);
|
||||
|
@ -410,11 +438,11 @@ BOOLEAN STDCALL HalDisableSystemInterrupt (ULONG Vector,
|
|||
pic_mask.both |= (1 << irq);
|
||||
if (irq < 8)
|
||||
{
|
||||
WRITE_PORT_UCHAR((PUCHAR)0x21, pic_mask.master|pic_mask_intr.slave);
|
||||
WRITE_PORT_UCHAR((PUCHAR)0x21, (UCHAR)(pic_mask.master|pic_mask_intr.slave));
|
||||
}
|
||||
else
|
||||
{
|
||||
WRITE_PORT_UCHAR((PUCHAR)0xa1, pic_mask.slave|pic_mask_intr.slave);
|
||||
WRITE_PORT_UCHAR((PUCHAR)0xa1, (UCHAR)(pic_mask.slave|pic_mask_intr.slave));
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
|
@ -434,11 +462,11 @@ BOOLEAN STDCALL HalEnableSystemInterrupt (ULONG Vector,
|
|||
pic_mask.both &= ~(1 << irq);
|
||||
if (irq < 8)
|
||||
{
|
||||
WRITE_PORT_UCHAR((PUCHAR)0x21, pic_mask.master|pic_mask_intr.master);
|
||||
WRITE_PORT_UCHAR((PUCHAR)0x21, (UCHAR)(pic_mask.master|pic_mask_intr.master));
|
||||
}
|
||||
else
|
||||
{
|
||||
WRITE_PORT_UCHAR((PUCHAR)0xa1, pic_mask.slave|pic_mask_intr.slave);
|
||||
WRITE_PORT_UCHAR((PUCHAR)0xa1, (UCHAR)(pic_mask.slave|pic_mask_intr.slave));
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $Id: isa.c,v 1.5 2003/04/06 10:45:15 chorns Exp $
|
||||
/* $Id: isa.c,v 1.6 2003/12/28 22:38:09 fireball Exp $
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS kernel
|
||||
|
@ -72,11 +72,11 @@ HalpGetIsaInterruptVector(PVOID BusHandler,
|
|||
PKAFFINITY Affinity)
|
||||
{
|
||||
#ifdef MP
|
||||
*Irql = PROFILE_LEVEL - BusInterruptVector;
|
||||
*Irql = (KIRQL)(PROFILE_LEVEL - BusInterruptVector);
|
||||
*Affinity = 0xFFFFFFFF;
|
||||
return IRQ2VECTOR(BusInterruptVector);
|
||||
#else
|
||||
*Irql = PROFILE_LEVEL - BusInterruptVector;
|
||||
*Irql = (KIRQL)(PROFILE_LEVEL - BusInterruptVector);
|
||||
*Affinity = 0xFFFFFFFF;
|
||||
return BusInterruptVector;
|
||||
#endif
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $Id: kdbg.c,v 1.6 2002/09/08 10:22:24 chorns Exp $
|
||||
/* $Id: kdbg.c,v 1.7 2003/12/28 22:38:09 fireball Exp $
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS kernel
|
||||
|
@ -233,8 +233,8 @@ KdPortInitialize (
|
|||
|
||||
/* set baud rate */
|
||||
divisor = 115200 / BaudRate;
|
||||
WRITE_PORT_UCHAR (SER_DLL(PortBase), divisor & 0xff);
|
||||
WRITE_PORT_UCHAR (SER_DLM(PortBase), (divisor >> 8) & 0xff);
|
||||
WRITE_PORT_UCHAR (SER_DLL(PortBase), (UCHAR)(divisor & 0xff));
|
||||
WRITE_PORT_UCHAR (SER_DLM(PortBase), (UCHAR)((divisor >> 8) & 0xff));
|
||||
|
||||
/* reset DLAB and set 8N1 format */
|
||||
WRITE_PORT_UCHAR (SER_LCR(PortBase),
|
||||
|
@ -323,8 +323,8 @@ KdPortInitializeEx (
|
|||
|
||||
/* set baud rate */
|
||||
divisor = 115200 / PortInformation->BaudRate;
|
||||
WRITE_PORT_UCHAR (SER_DLL(ComPortBase), divisor & 0xff);
|
||||
WRITE_PORT_UCHAR (SER_DLM(ComPortBase), (divisor >> 8) & 0xff);
|
||||
WRITE_PORT_UCHAR (SER_DLL(ComPortBase), (UCHAR)(divisor & 0xff));
|
||||
WRITE_PORT_UCHAR (SER_DLM(ComPortBase), (UCHAR)((divisor >> 8) & 0xff));
|
||||
|
||||
/* reset DLAB and set 8N1 format */
|
||||
WRITE_PORT_UCHAR (SER_LCR(ComPortBase),
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
/* $Id: mca.c,v 1.2 2002/10/03 09:11:00 ekohl Exp $
|
||||
/* $Id: mca.c,v 1.3 2003/12/28 22:38:09 fireball Exp $
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS kernel
|
||||
|
@ -63,7 +63,7 @@ HalpGetMicroChannelData(PBUS_HANDLER BusHandler,
|
|||
return(0);
|
||||
|
||||
/* Enter Setup-Mode for given slot */
|
||||
WRITE_PORT_UCHAR((PUCHAR)0x96, ((UCHAR)(SlotNumber - 1) & 0x07) | 0x08);
|
||||
WRITE_PORT_UCHAR((PUCHAR)0x96, (UCHAR)(((UCHAR)(SlotNumber - 1) & 0x07) | 0x08));
|
||||
|
||||
/* Read POS data */
|
||||
PosData->AdapterId = (READ_PORT_UCHAR((PUCHAR)0x101) << 8) +
|
||||
|
@ -74,7 +74,7 @@ HalpGetMicroChannelData(PBUS_HANDLER BusHandler,
|
|||
PosData->PosData4 = READ_PORT_UCHAR((PUCHAR)0x105);
|
||||
|
||||
/* Leave Setup-Mode for given slot */
|
||||
WRITE_PORT_UCHAR((PUCHAR)0x96, (UCHAR)(SlotNumber - 1) & 0x07);
|
||||
WRITE_PORT_UCHAR((PUCHAR)0x96, (UCHAR)((UCHAR)(SlotNumber - 1) & 0x07));
|
||||
|
||||
return(sizeof(CM_MCA_POS_DATA));
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $Id: misc.c,v 1.3 2002/09/08 10:22:24 chorns Exp $
|
||||
/* $Id: misc.c,v 1.4 2003/12/28 22:38:09 fireball Exp $
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS kernel
|
||||
|
@ -38,8 +38,21 @@ VOID STDCALL
|
|||
HalProcessorIdle (VOID)
|
||||
{
|
||||
#if 1
|
||||
|
||||
#if defined(__GNUC__)
|
||||
|
||||
__asm__("sti\n\t" \
|
||||
"hlt\n\t");
|
||||
|
||||
#elif defined(_MSC_VER)
|
||||
|
||||
__asm sti
|
||||
__asm hlt
|
||||
|
||||
#else
|
||||
#error Unknown compiler for inline assembler
|
||||
#endif
|
||||
|
||||
#else
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $Id: mp.c,v 1.8 2003/07/21 21:53:51 royce Exp $
|
||||
/* $Id: mp.c,v 1.9 2003/12/28 22:38:09 fireball Exp $
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS kernel
|
||||
|
@ -1293,7 +1293,13 @@ VOID APICSendIPI(
|
|||
ULONG tmp, i, flags;
|
||||
|
||||
pushfl(flags);
|
||||
#if defined(__GNUC__)
|
||||
__asm__ ("\n\tcli\n\t");
|
||||
#elif defined(_MSC_VER)
|
||||
__asm cli
|
||||
#else
|
||||
#error Unknown compiler for inline assembler
|
||||
#endif
|
||||
|
||||
/* Wait up to 100ms for the APIC to become ready */
|
||||
for (i = 0; i < 10000; i++) {
|
||||
|
@ -1389,7 +1395,13 @@ VOID MpsTimerHandler(
|
|||
* Enable interrupts
|
||||
* NOTE: Only higher priority interrupts will get through
|
||||
*/
|
||||
#if defined(__GNUC__)
|
||||
__asm__("sti\n\t");
|
||||
#elif defined(_MSC_VER)
|
||||
__asm sti
|
||||
#else
|
||||
#error Unknown compiler for inline assembler
|
||||
#endif
|
||||
|
||||
if (KeGetCurrentProcessorNumber() == 0)
|
||||
{
|
||||
|
@ -1407,7 +1419,13 @@ VOID MpsTimerHandler(
|
|||
/*
|
||||
* Disable interrupts
|
||||
*/
|
||||
#if defined(__GNUC__)
|
||||
__asm__("cli\n\t");
|
||||
#elif defined(_MSC_VER)
|
||||
__asm cli
|
||||
#else
|
||||
#error Unknown compiler for inline assembler
|
||||
#endif
|
||||
|
||||
DbgPrint("MpsTimerHandler() 0 IRQL 0x%.08x\n", OldIrql);
|
||||
|
||||
|
@ -2397,7 +2415,13 @@ HalpInitMPS(
|
|||
HalpCalibrateStallExecution();
|
||||
|
||||
/* We can now enable interrupts */
|
||||
#if defined(__GNUC__)
|
||||
__asm__ __volatile__ ("sti\n\t");
|
||||
#elif defined(_MSC_VER)
|
||||
__asm sti
|
||||
#else
|
||||
#error Unknown compiler for inline assembler
|
||||
#endif
|
||||
|
||||
NextCPU = 0;
|
||||
}
|
||||
|
|
|
@ -77,10 +77,19 @@ VOID HalpEndSystemInterrupt (KIRQL Irql)
|
|||
*/
|
||||
{
|
||||
/* Interrupts should be disabled while enabling irqs */
|
||||
#if defined(__GNUC__)
|
||||
__asm__("pushf\n\t");
|
||||
__asm__("cli\n\t");
|
||||
APICWrite (APIC_TPR, IRQL2TPR (Irql) & APIC_TPR_PRI);
|
||||
__asm__("popf\n\t");
|
||||
#elif defined(_MSC_VER)
|
||||
__asm pushfd
|
||||
__asm cli
|
||||
APICWrite (APIC_TPR, IRQL2TPR (Irql) & APIC_TPR_PRI);
|
||||
__asm popfd
|
||||
#else
|
||||
#error Unknown compiler for inline assembler
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $Id: pci.c,v 1.10 2003/11/05 22:39:01 gvg Exp $
|
||||
/* $Id: pci.c,v 1.11 2003/12/28 22:38:09 fireball Exp $
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS kernel
|
||||
|
@ -86,7 +86,7 @@ ReadPciConfigUchar(UCHAR Bus,
|
|||
|
||||
case 2:
|
||||
KeAcquireSpinLock(&PciLock, &oldIrql);
|
||||
WRITE_PORT_UCHAR((PUCHAR)0xCF8, FUNC(Slot));
|
||||
WRITE_PORT_UCHAR((PUCHAR)0xCF8, (UCHAR)FUNC(Slot));
|
||||
WRITE_PORT_UCHAR((PUCHAR)0xCFA, Bus);
|
||||
*Value = READ_PORT_UCHAR((PUCHAR)(IOADDR(Slot, Offset)));
|
||||
WRITE_PORT_UCHAR((PUCHAR)0xCF8, 0);
|
||||
|
@ -121,7 +121,7 @@ ReadPciConfigUshort(UCHAR Bus,
|
|||
|
||||
case 2:
|
||||
KeAcquireSpinLock(&PciLock, &oldIrql);
|
||||
WRITE_PORT_UCHAR((PUCHAR)0xCF8, FUNC(Slot));
|
||||
WRITE_PORT_UCHAR((PUCHAR)0xCF8, (UCHAR)FUNC(Slot));
|
||||
WRITE_PORT_UCHAR((PUCHAR)0xCFA, Bus);
|
||||
*Value = READ_PORT_USHORT((PUSHORT)(IOADDR(Slot, Offset)));
|
||||
WRITE_PORT_UCHAR((PUCHAR)0xCF8, 0);
|
||||
|
@ -156,7 +156,7 @@ ReadPciConfigUlong(UCHAR Bus,
|
|||
|
||||
case 2:
|
||||
KeAcquireSpinLock(&PciLock, &oldIrql);
|
||||
WRITE_PORT_UCHAR((PUCHAR)0xCF8, FUNC(Slot));
|
||||
WRITE_PORT_UCHAR((PUCHAR)0xCF8, (UCHAR)FUNC(Slot));
|
||||
WRITE_PORT_UCHAR((PUCHAR)0xCFA, Bus);
|
||||
*Value = READ_PORT_ULONG((PULONG)(IOADDR(Slot, Offset)));
|
||||
WRITE_PORT_UCHAR((PUCHAR)0xCF8, 0);
|
||||
|
@ -186,7 +186,7 @@ WritePciConfigUchar(UCHAR Bus,
|
|||
|
||||
case 2:
|
||||
KeAcquireSpinLock(&PciLock, &oldIrql);
|
||||
WRITE_PORT_UCHAR((PUCHAR)0xCF8, FUNC(Slot));
|
||||
WRITE_PORT_UCHAR((PUCHAR)0xCF8, (UCHAR)FUNC(Slot));
|
||||
WRITE_PORT_UCHAR((PUCHAR)0xCFA, Bus);
|
||||
WRITE_PORT_UCHAR((PUCHAR)(IOADDR(Slot,Offset)), Value);
|
||||
WRITE_PORT_UCHAR((PUCHAR)0xCF8, 0);
|
||||
|
@ -221,7 +221,7 @@ WritePciConfigUshort(UCHAR Bus,
|
|||
|
||||
case 2:
|
||||
KeAcquireSpinLock(&PciLock, &oldIrql);
|
||||
WRITE_PORT_UCHAR((PUCHAR)0xCF8, FUNC(Slot));
|
||||
WRITE_PORT_UCHAR((PUCHAR)0xCF8, (UCHAR)FUNC(Slot));
|
||||
WRITE_PORT_UCHAR((PUCHAR)0xCFA, Bus);
|
||||
WRITE_PORT_USHORT((PUSHORT)(IOADDR(Slot, Offset)), Value);
|
||||
WRITE_PORT_UCHAR((PUCHAR)0xCF8, 0);
|
||||
|
@ -256,7 +256,7 @@ WritePciConfigUlong(UCHAR Bus,
|
|||
|
||||
case 2:
|
||||
KeAcquireSpinLock(&PciLock, &oldIrql);
|
||||
WRITE_PORT_UCHAR((PUCHAR)0xCF8, FUNC(Slot));
|
||||
WRITE_PORT_UCHAR((PUCHAR)0xCF8, (UCHAR)FUNC(Slot));
|
||||
WRITE_PORT_UCHAR((PUCHAR)0xCFA, Bus);
|
||||
WRITE_PORT_ULONG((PULONG)(IOADDR(Slot, Offset)), Value);
|
||||
WRITE_PORT_UCHAR((PUCHAR)0xCF8, 0);
|
||||
|
@ -290,8 +290,8 @@ HalpGetPciData(PBUS_HANDLER BusHandler,
|
|||
if ((Length == 0) || (BusConfigType == 0))
|
||||
return 0;
|
||||
|
||||
ReadPciConfigUlong(BusNumber,
|
||||
SlotNumber & 0x1F,
|
||||
ReadPciConfigUlong((UCHAR)BusNumber,
|
||||
(UCHAR)(SlotNumber & 0x1F),
|
||||
0x00,
|
||||
&Vendor);
|
||||
/* some broken boards return 0 if a slot is empty: */
|
||||
|
@ -306,8 +306,8 @@ HalpGetPciData(PBUS_HANDLER BusHandler,
|
|||
}
|
||||
|
||||
/* 0E=PCI_HEADER_TYPE */
|
||||
ReadPciConfigUchar(BusNumber,
|
||||
SlotNumber & 0x1F,
|
||||
ReadPciConfigUchar((UCHAR)BusNumber,
|
||||
(UCHAR)(SlotNumber & 0x1F),
|
||||
0x0E,
|
||||
&HeaderType);
|
||||
if (((HeaderType & PCI_MULTIFUNCTION) == 0) && ((SlotNumber & 0xE0) != 0))
|
||||
|
@ -319,8 +319,8 @@ HalpGetPciData(PBUS_HANDLER BusHandler,
|
|||
}
|
||||
return 0;
|
||||
}
|
||||
ReadPciConfigUlong(BusNumber,
|
||||
SlotNumber,
|
||||
ReadPciConfigUlong((UCHAR)BusNumber,
|
||||
(UCHAR)SlotNumber,
|
||||
0x00,
|
||||
&Vendor);
|
||||
/* some broken boards return 0 if a slot is empty: */
|
||||
|
@ -336,55 +336,55 @@ HalpGetPciData(PBUS_HANDLER BusHandler,
|
|||
|
||||
if ((Address & 1) && (Len >= 1))
|
||||
{
|
||||
ReadPciConfigUchar(BusNumber,
|
||||
SlotNumber,
|
||||
Address,
|
||||
ReadPciConfigUchar((UCHAR)BusNumber,
|
||||
(UCHAR)SlotNumber,
|
||||
(UCHAR)Address,
|
||||
Ptr);
|
||||
Ptr = Ptr + 1;
|
||||
Ptr = (char*)Ptr + 1;
|
||||
Address++;
|
||||
Len--;
|
||||
}
|
||||
|
||||
if ((Address & 2) && (Len >= 2))
|
||||
{
|
||||
ReadPciConfigUshort(BusNumber,
|
||||
SlotNumber,
|
||||
Address,
|
||||
ReadPciConfigUshort((UCHAR)BusNumber,
|
||||
(UCHAR)SlotNumber,
|
||||
(UCHAR)Address,
|
||||
Ptr);
|
||||
Ptr = Ptr + 2;
|
||||
Ptr = (char*)Ptr + 2;
|
||||
Address += 2;
|
||||
Len -= 2;
|
||||
}
|
||||
|
||||
while (Len >= 4)
|
||||
{
|
||||
ReadPciConfigUlong(BusNumber,
|
||||
SlotNumber,
|
||||
Address,
|
||||
ReadPciConfigUlong((UCHAR)BusNumber,
|
||||
(UCHAR)SlotNumber,
|
||||
(UCHAR)Address,
|
||||
Ptr);
|
||||
Ptr = Ptr + 4;
|
||||
Ptr = (char*)Ptr + 4;
|
||||
Address += 4;
|
||||
Len -= 4;
|
||||
}
|
||||
|
||||
if (Len >= 2)
|
||||
{
|
||||
ReadPciConfigUshort(BusNumber,
|
||||
SlotNumber,
|
||||
Address,
|
||||
ReadPciConfigUshort((UCHAR)BusNumber,
|
||||
(UCHAR)SlotNumber,
|
||||
(UCHAR)Address,
|
||||
Ptr);
|
||||
Ptr = Ptr + 2;
|
||||
Ptr = (char*)Ptr + 2;
|
||||
Address += 2;
|
||||
Len -= 2;
|
||||
}
|
||||
|
||||
if (Len >= 1)
|
||||
{
|
||||
ReadPciConfigUchar(BusNumber,
|
||||
SlotNumber,
|
||||
Address,
|
||||
ReadPciConfigUchar((UCHAR)BusNumber,
|
||||
(UCHAR)SlotNumber,
|
||||
(UCHAR)Address,
|
||||
Ptr);
|
||||
Ptr = Ptr + 1;
|
||||
Ptr = (char*)Ptr + 1;
|
||||
Address++;
|
||||
Len--;
|
||||
}
|
||||
|
@ -416,8 +416,8 @@ HalpSetPciData(PBUS_HANDLER BusHandler,
|
|||
if ((Length == 0) || (BusConfigType == 0))
|
||||
return 0;
|
||||
|
||||
ReadPciConfigUlong(BusNumber,
|
||||
SlotNumber & 0x1F,
|
||||
ReadPciConfigUlong((UCHAR)BusNumber,
|
||||
(UCHAR)(SlotNumber & 0x1F),
|
||||
0x00,
|
||||
&Vendor);
|
||||
/* some broken boards return 0 if a slot is empty: */
|
||||
|
@ -426,15 +426,15 @@ HalpSetPciData(PBUS_HANDLER BusHandler,
|
|||
|
||||
|
||||
/* 0E=PCI_HEADER_TYPE */
|
||||
ReadPciConfigUchar(BusNumber,
|
||||
SlotNumber & 0x1F,
|
||||
ReadPciConfigUchar((UCHAR)BusNumber,
|
||||
(UCHAR)(SlotNumber & 0x1F),
|
||||
0x0E,
|
||||
&HeaderType);
|
||||
if (((HeaderType & PCI_MULTIFUNCTION) == 0) && ((SlotNumber & 0xE0) != 0))
|
||||
return 0;
|
||||
|
||||
ReadPciConfigUlong(BusNumber,
|
||||
SlotNumber,
|
||||
ReadPciConfigUlong((UCHAR)BusNumber,
|
||||
(UCHAR)SlotNumber,
|
||||
0x00,
|
||||
&Vendor);
|
||||
/* some broken boards return 0 if a slot is empty: */
|
||||
|
@ -443,55 +443,55 @@ HalpSetPciData(PBUS_HANDLER BusHandler,
|
|||
|
||||
if ((Address & 1) && (Len >= 1))
|
||||
{
|
||||
WritePciConfigUchar(BusNumber,
|
||||
SlotNumber,
|
||||
Address,
|
||||
WritePciConfigUchar((UCHAR)BusNumber,
|
||||
(UCHAR)SlotNumber,
|
||||
(UCHAR)Address,
|
||||
*(PUCHAR)Ptr);
|
||||
Ptr = Ptr + 1;
|
||||
Ptr = (char*)Ptr + 1;
|
||||
Address++;
|
||||
Len--;
|
||||
}
|
||||
|
||||
if ((Address & 2) && (Len >= 2))
|
||||
{
|
||||
WritePciConfigUshort(BusNumber,
|
||||
SlotNumber,
|
||||
Address,
|
||||
WritePciConfigUshort((UCHAR)BusNumber,
|
||||
(UCHAR)SlotNumber,
|
||||
(UCHAR)Address,
|
||||
*(PUSHORT)Ptr);
|
||||
Ptr = Ptr + 2;
|
||||
Ptr = (char*)Ptr + 2;
|
||||
Address += 2;
|
||||
Len -= 2;
|
||||
}
|
||||
|
||||
while (Len >= 4)
|
||||
{
|
||||
WritePciConfigUlong(BusNumber,
|
||||
SlotNumber,
|
||||
Address,
|
||||
WritePciConfigUlong((UCHAR)BusNumber,
|
||||
(UCHAR)SlotNumber,
|
||||
(UCHAR)Address,
|
||||
*(PULONG)Ptr);
|
||||
Ptr = Ptr + 4;
|
||||
Ptr = (char*)Ptr + 4;
|
||||
Address += 4;
|
||||
Len -= 4;
|
||||
}
|
||||
|
||||
if (Len >= 2)
|
||||
{
|
||||
WritePciConfigUshort(BusNumber,
|
||||
SlotNumber,
|
||||
Address,
|
||||
WritePciConfigUshort((UCHAR)BusNumber,
|
||||
(UCHAR)SlotNumber,
|
||||
(UCHAR)Address,
|
||||
*(PUSHORT)Ptr);
|
||||
Ptr = Ptr + 2;
|
||||
Ptr = (char*)Ptr + 2;
|
||||
Address += 2;
|
||||
Len -= 2;
|
||||
}
|
||||
|
||||
if (Len >= 1)
|
||||
{
|
||||
WritePciConfigUchar(BusNumber,
|
||||
SlotNumber,
|
||||
Address,
|
||||
WritePciConfigUchar((UCHAR)BusNumber,
|
||||
(UCHAR)SlotNumber,
|
||||
(UCHAR)Address,
|
||||
*(PUCHAR)Ptr);
|
||||
Ptr = Ptr + 1;
|
||||
Ptr = (char*)Ptr + 1;
|
||||
Address++;
|
||||
Len--;
|
||||
}
|
||||
|
@ -552,11 +552,11 @@ HalpGetPciInterruptVector(PVOID BusHandler,
|
|||
PKAFFINITY Affinity)
|
||||
{
|
||||
#ifdef MP
|
||||
*Irql = PROFILE_LEVEL - BusInterruptVector;
|
||||
*Irql = (KIRQL)(PROFILE_LEVEL - BusInterruptVector);
|
||||
*Affinity = 0xFFFFFFFF;
|
||||
return IRQ2VECTOR(BusInterruptVector);
|
||||
#else
|
||||
*Irql = PROFILE_LEVEL - BusInterruptVector;
|
||||
*Irql = (KIRQL)(PROFILE_LEVEL - BusInterruptVector);
|
||||
*Affinity = 0xFFFFFFFF;
|
||||
return BusInterruptVector;
|
||||
#endif
|
||||
|
@ -646,22 +646,22 @@ HalpAssignPciSlotResources(IN PBUS_HANDLER BusHandler,
|
|||
{
|
||||
ResourceCount++;
|
||||
Offset = offsetof(PCI_COMMON_CONFIG, u.type0.BaseAddresses[Address]);
|
||||
Status = WritePciConfigUlong(BusNumber, SlotNumber, Offset, 0xffffffff);
|
||||
Status = WritePciConfigUlong((UCHAR)BusNumber, (UCHAR)SlotNumber, Offset, 0xffffffff);
|
||||
if (! NT_SUCCESS(Status))
|
||||
{
|
||||
WritePciConfigUlong(BusNumber, SlotNumber, Offset,
|
||||
WritePciConfigUlong((UCHAR)BusNumber, (UCHAR)SlotNumber, Offset,
|
||||
PciConfig.u.type0.BaseAddresses[Address]);
|
||||
return Status;
|
||||
}
|
||||
Status = ReadPciConfigUlong(BusNumber, SlotNumber,
|
||||
Status = ReadPciConfigUlong((UCHAR)BusNumber, (UCHAR)SlotNumber,
|
||||
Offset, Size + Address);
|
||||
if (! NT_SUCCESS(Status))
|
||||
{
|
||||
WritePciConfigUlong(BusNumber, SlotNumber, Offset,
|
||||
WritePciConfigUlong((UCHAR)BusNumber, (UCHAR)SlotNumber, Offset,
|
||||
PciConfig.u.type0.BaseAddresses[Address]);
|
||||
return Status;
|
||||
}
|
||||
Status = WritePciConfigUlong(BusNumber, SlotNumber, Offset,
|
||||
Status = WritePciConfigUlong((UCHAR)BusNumber, (UCHAR)SlotNumber, Offset,
|
||||
PciConfig.u.type0.BaseAddresses[Address]);
|
||||
if (! NT_SUCCESS(Status))
|
||||
{
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $Id: portio.c,v 1.3 2002/09/08 10:22:24 chorns Exp $
|
||||
/* $Id: portio.c,v 1.4 2003/12/28 22:38:09 fireball Exp $
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS kernel
|
||||
|
@ -38,12 +38,27 @@
|
|||
* Linus
|
||||
*/
|
||||
|
||||
#if defined(__GNUC__)
|
||||
|
||||
#ifdef SLOW_IO_BY_JUMPING
|
||||
#define __SLOW_DOWN_IO __asm__ __volatile__("jmp 1f\n1:\tjmp 1f\n1:")
|
||||
#else
|
||||
#define __SLOW_DOWN_IO __asm__ __volatile__("outb %al,$0x80")
|
||||
#endif
|
||||
|
||||
#elif defined(_MSC_VER)
|
||||
|
||||
#ifdef SLOW_IO_BY_JUMPING
|
||||
#define __SLOW_DOWN_IO __asm jmp 1f __asm jmp 1f 1f:
|
||||
#else
|
||||
#define __SLOW_DOWN_IO __asm out 0x80, al
|
||||
#endif
|
||||
|
||||
#else
|
||||
#error Unknown compiler for inline assembler
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef REALLY_SLOW_IO
|
||||
#define SLOW_DOWN_IO { __SLOW_DOWN_IO; __SLOW_DOWN_IO; __SLOW_DOWN_IO; __SLOW_DOWN_IO; }
|
||||
#else
|
||||
|
@ -55,9 +70,22 @@ READ_PORT_BUFFER_UCHAR (PUCHAR Port,
|
|||
PUCHAR Buffer,
|
||||
ULONG Count)
|
||||
{
|
||||
#if defined(__GNUC__)
|
||||
__asm__ __volatile__ ("cld ; rep ; insb\n\t"
|
||||
: "=D" (Buffer), "=c" (Count)
|
||||
: "d" (Port),"0" (Buffer),"1" (Count));
|
||||
#elif defined(_MSC_VER)
|
||||
__asm
|
||||
{
|
||||
mov edx, Port
|
||||
mov edi, Buffer
|
||||
mov ecx, Count
|
||||
cld
|
||||
rep ins byte ptr[edi], dx
|
||||
}
|
||||
#else
|
||||
#error Unknown compiler for inline assembler
|
||||
#endif
|
||||
}
|
||||
|
||||
VOID STDCALL
|
||||
|
@ -65,9 +93,22 @@ READ_PORT_BUFFER_USHORT (PUSHORT Port,
|
|||
PUSHORT Buffer,
|
||||
ULONG Count)
|
||||
{
|
||||
#if defined(__GNUC__)
|
||||
__asm__ __volatile__ ("cld ; rep ; insw"
|
||||
: "=D" (Buffer), "=c" (Count)
|
||||
: "d" (Port),"0" (Buffer),"1" (Count));
|
||||
#elif defined(_MSC_VER)
|
||||
__asm
|
||||
{
|
||||
mov edx, Port
|
||||
mov edi, Buffer
|
||||
mov ecx, Count
|
||||
cld
|
||||
rep ins word ptr[edi], dx
|
||||
}
|
||||
#else
|
||||
#error Unknown compiler for inline assembler
|
||||
#endif
|
||||
}
|
||||
|
||||
VOID STDCALL
|
||||
|
@ -75,19 +116,44 @@ READ_PORT_BUFFER_ULONG (PULONG Port,
|
|||
PULONG Buffer,
|
||||
ULONG Count)
|
||||
{
|
||||
#if defined(__GNUC__)
|
||||
__asm__ __volatile__ ("cld ; rep ; insl"
|
||||
: "=D" (Buffer), "=c" (Count)
|
||||
: "d" (Port),"0" (Buffer),"1" (Count));
|
||||
#elif defined(_MSC_VER)
|
||||
__asm
|
||||
{
|
||||
mov edx, Port
|
||||
mov edi, Buffer
|
||||
mov ecx, Count
|
||||
cld
|
||||
rep ins dword ptr[edi], dx
|
||||
}
|
||||
#else
|
||||
#error Unknown compiler for inline assembler
|
||||
#endif
|
||||
}
|
||||
|
||||
UCHAR STDCALL
|
||||
READ_PORT_UCHAR (PUCHAR Port)
|
||||
{
|
||||
UCHAR Value;
|
||||
|
||||
|
||||
#if defined(__GNUC__)
|
||||
__asm__("inb %w1, %0\n\t"
|
||||
: "=a" (Value)
|
||||
: "d" (Port));
|
||||
#elif defined(_MSC_VER)
|
||||
__asm
|
||||
{
|
||||
mov edx, Port
|
||||
in al, dx
|
||||
mov Value, al
|
||||
}
|
||||
#else
|
||||
#error Unknown compiler for inline assembler
|
||||
#endif
|
||||
|
||||
SLOW_DOWN_IO;
|
||||
return(Value);
|
||||
}
|
||||
|
@ -96,10 +162,21 @@ USHORT STDCALL
|
|||
READ_PORT_USHORT (PUSHORT Port)
|
||||
{
|
||||
USHORT Value;
|
||||
|
||||
|
||||
#if defined(__GNUC__)
|
||||
__asm__("inw %w1, %0\n\t"
|
||||
: "=a" (Value)
|
||||
: "d" (Port));
|
||||
#elif defined(_MSC_VER)
|
||||
__asm
|
||||
{
|
||||
mov edx, Port
|
||||
in ax, dx
|
||||
mov Value, ax
|
||||
}
|
||||
#else
|
||||
#error Unknown compiler for inline assembler
|
||||
#endif
|
||||
SLOW_DOWN_IO;
|
||||
return(Value);
|
||||
}
|
||||
|
@ -108,10 +185,21 @@ ULONG STDCALL
|
|||
READ_PORT_ULONG (PULONG Port)
|
||||
{
|
||||
ULONG Value;
|
||||
|
||||
|
||||
#if defined(__GNUC__)
|
||||
__asm__("inl %w1, %0\n\t"
|
||||
: "=a" (Value)
|
||||
: "d" (Port));
|
||||
#elif defined(_MSC_VER)
|
||||
__asm
|
||||
{
|
||||
mov edx, Port
|
||||
in eax, dx
|
||||
mov Value, eax
|
||||
}
|
||||
#else
|
||||
#error Unknown compiler for inline assembler
|
||||
#endif
|
||||
SLOW_DOWN_IO;
|
||||
return(Value);
|
||||
}
|
||||
|
@ -121,9 +209,22 @@ WRITE_PORT_BUFFER_UCHAR (PUCHAR Port,
|
|||
PUCHAR Buffer,
|
||||
ULONG Count)
|
||||
{
|
||||
#if defined(__GNUC__)
|
||||
__asm__ __volatile__ ("cld ; rep ; outsb"
|
||||
: "=S" (Buffer), "=c" (Count)
|
||||
: "d" (Port),"0" (Buffer),"1" (Count));
|
||||
#elif defined(_MSC_VER)
|
||||
__asm
|
||||
{
|
||||
mov edx, Port
|
||||
mov esi, Buffer
|
||||
mov ecx, Count
|
||||
cld
|
||||
rep outs
|
||||
}
|
||||
#else
|
||||
#error Unknown compiler for inline assembler
|
||||
#endif
|
||||
}
|
||||
|
||||
VOID STDCALL
|
||||
|
@ -131,9 +232,22 @@ WRITE_PORT_BUFFER_USHORT (PUSHORT Port,
|
|||
PUSHORT Buffer,
|
||||
ULONG Count)
|
||||
{
|
||||
#if defined(__GNUC__)
|
||||
__asm__ __volatile__ ("cld ; rep ; outsw"
|
||||
: "=S" (Buffer), "=c" (Count)
|
||||
: "d" (Port),"0" (Buffer),"1" (Count));
|
||||
#elif defined(_MSC_VER)
|
||||
__asm
|
||||
{
|
||||
mov edx, Port
|
||||
mov esi, Buffer
|
||||
mov ecx, Count
|
||||
cld
|
||||
rep outsw
|
||||
}
|
||||
#else
|
||||
#error Unknown compiler for inline assembler
|
||||
#endif
|
||||
}
|
||||
|
||||
VOID STDCALL
|
||||
|
@ -141,19 +255,43 @@ WRITE_PORT_BUFFER_ULONG (PULONG Port,
|
|||
PULONG Buffer,
|
||||
ULONG Count)
|
||||
{
|
||||
#if defined(__GNUC__)
|
||||
__asm__ __volatile__ ("cld ; rep ; outsl"
|
||||
: "=S" (Buffer), "=c" (Count)
|
||||
: "d" (Port),"0" (Buffer),"1" (Count));
|
||||
#elif defined(_MSC_VER)
|
||||
__asm
|
||||
{
|
||||
mov edx, Port
|
||||
mov esi, Buffer
|
||||
mov ecx, Count
|
||||
cld
|
||||
rep outsd
|
||||
}
|
||||
#else
|
||||
#error Unknown compiler for inline assembler
|
||||
#endif
|
||||
}
|
||||
|
||||
VOID STDCALL
|
||||
WRITE_PORT_UCHAR (PUCHAR Port,
|
||||
UCHAR Value)
|
||||
{
|
||||
#if defined(__GNUC__)
|
||||
__asm__("outb %0, %w1\n\t"
|
||||
:
|
||||
: "a" (Value),
|
||||
"d" (Port));
|
||||
#elif defined(_MSC_VER)
|
||||
__asm
|
||||
{
|
||||
mov edx, Port
|
||||
mov al, Value
|
||||
out dx,al
|
||||
}
|
||||
#else
|
||||
#error Unknown compiler for inline assembler
|
||||
#endif
|
||||
SLOW_DOWN_IO;
|
||||
}
|
||||
|
||||
|
@ -161,10 +299,21 @@ VOID STDCALL
|
|||
WRITE_PORT_USHORT (PUSHORT Port,
|
||||
USHORT Value)
|
||||
{
|
||||
#if defined(__GNUC__)
|
||||
__asm__("outw %0, %w1\n\t"
|
||||
:
|
||||
: "a" (Value),
|
||||
"d" (Port));
|
||||
#elif defined(_MSC_VER)
|
||||
__asm
|
||||
{
|
||||
mov edx, Port
|
||||
mov ax, Value
|
||||
out dx,ax
|
||||
}
|
||||
#else
|
||||
#error Unknown compiler for inline assembler
|
||||
#endif
|
||||
SLOW_DOWN_IO;
|
||||
}
|
||||
|
||||
|
@ -172,10 +321,21 @@ VOID STDCALL
|
|||
WRITE_PORT_ULONG (PULONG Port,
|
||||
ULONG Value)
|
||||
{
|
||||
#if defined(__GNUC__)
|
||||
__asm__("outl %0, %w1\n\t"
|
||||
:
|
||||
: "a" (Value),
|
||||
"d" (Port));
|
||||
#elif defined(_MSC_VER)
|
||||
__asm
|
||||
{
|
||||
mov edx, Port
|
||||
mov eax, Value
|
||||
out dx,eax
|
||||
}
|
||||
#else
|
||||
#error Unknown compiler for inline assembler
|
||||
#endif
|
||||
SLOW_DOWN_IO;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $Id: pwroff.c,v 1.3 2002/09/08 10:22:24 chorns Exp $
|
||||
/* $Id: pwroff.c,v 1.4 2003/12/28 22:38:09 fireball Exp $
|
||||
*
|
||||
* FILE : reactos/hal/x86/apm.c
|
||||
* DESCRIPTION: Turn CPU off...
|
||||
|
@ -23,6 +23,8 @@
|
|||
|
||||
|
||||
|
||||
#if defined(__GNUC__)
|
||||
|
||||
nopm db 'No power management functionality',10,13,'$'
|
||||
errmsg db 'Power management error',10,13,'$'
|
||||
wrongver db 'Need APM version 1.1 or better',10,13,'$'
|
||||
|
@ -89,6 +91,11 @@ ApmCall (
|
|||
__asm__("int 21\n"); /* 0x15 */
|
||||
}
|
||||
|
||||
#elif defined(_MSC_VER)
|
||||
#else
|
||||
#error Unknown compiler for inline assembler
|
||||
#endif
|
||||
|
||||
|
||||
BOOLEAN
|
||||
HalPowerOff (VOID)
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $Id: reboot.c,v 1.4 2003/06/21 14:25:30 gvg Exp $
|
||||
/* $Id: reboot.c,v 1.5 2003/12/28 22:38:09 fireball Exp $
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS kernel
|
||||
|
@ -27,17 +27,24 @@ HalReboot (VOID)
|
|||
mem[0x473] = 0x12;
|
||||
|
||||
/* disable interrupts */
|
||||
#if defined(__GNUC__)
|
||||
__asm__("cli\n");
|
||||
#elif defined(_MSC_VER)
|
||||
__asm cli
|
||||
#else
|
||||
#error Unknown compiler for inline assembler
|
||||
#endif
|
||||
|
||||
|
||||
/* disable periodic interrupt (RTC) */
|
||||
WRITE_PORT_UCHAR((PUCHAR)0x70, 0x0b);
|
||||
data = READ_PORT_UCHAR((PUCHAR)0x71);
|
||||
WRITE_PORT_UCHAR((PUCHAR)0x71, data & 0xbf);
|
||||
WRITE_PORT_UCHAR((PUCHAR)0x71, (UCHAR)(data & 0xbf));
|
||||
|
||||
/* */
|
||||
WRITE_PORT_UCHAR((PUCHAR)0x70, 0x0a);
|
||||
data = READ_PORT_UCHAR((PUCHAR)0x71);
|
||||
WRITE_PORT_UCHAR((PUCHAR)0x71, (data & 0xf0) | 0x06);
|
||||
WRITE_PORT_UCHAR((PUCHAR)0x71, (UCHAR)((data & 0xf0) | 0x06));
|
||||
|
||||
/* */
|
||||
WRITE_PORT_UCHAR((PUCHAR)0x70, 0x15);
|
||||
|
@ -47,7 +54,13 @@ HalReboot (VOID)
|
|||
|
||||
/* stop the processor */
|
||||
#if 1
|
||||
#if defined(__GNUC__)
|
||||
__asm__("hlt\n");
|
||||
#elif defined(_MSC_VER)
|
||||
__asm hlt
|
||||
#else
|
||||
#error Unknown compiler for inline assembler
|
||||
#endif
|
||||
#else
|
||||
for(;;);
|
||||
#endif
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $Id: sysbus.c,v 1.5 2003/04/06 10:45:15 chorns Exp $
|
||||
/* $Id: sysbus.c,v 1.6 2003/12/28 22:38:09 fireball Exp $
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS kernel
|
||||
|
@ -30,11 +30,11 @@ HalpGetSystemInterruptVector(PVOID BusHandler,
|
|||
PKAFFINITY Affinity)
|
||||
{
|
||||
#ifdef MP
|
||||
*Irql = PROFILE_LEVEL - BusInterruptVector;
|
||||
*Irql = (KIRQL)(PROFILE_LEVEL - BusInterruptVector);
|
||||
*Affinity = 0xFFFFFFFF;
|
||||
return IRQ2VECTOR(BusInterruptVector);
|
||||
#else
|
||||
*Irql = PROFILE_LEVEL - BusInterruptVector;
|
||||
*Irql = (KIRQL)(PROFILE_LEVEL - BusInterruptVector);
|
||||
*Affinity = 0xFFFFFFFF;
|
||||
return BusInterruptVector;
|
||||
#endif
|
||||
|
|
|
@ -47,7 +47,13 @@ HalpQueryCMOS(UCHAR Reg)
|
|||
|
||||
Reg |= 0x80;
|
||||
pushfl(Flags);
|
||||
#if defined(__GNUC__)
|
||||
__asm__("cli\n"); // AP unsure as to whether to do this here
|
||||
#elif defined(_MSC_VER)
|
||||
__asm cli
|
||||
#else
|
||||
#error Unknown compiler for inline assembler
|
||||
#endif
|
||||
WRITE_PORT_UCHAR((PUCHAR)0x70, Reg);
|
||||
Val = READ_PORT_UCHAR((PUCHAR)0x71);
|
||||
WRITE_PORT_UCHAR((PUCHAR)0x70, 0);
|
||||
|
@ -65,7 +71,13 @@ HalpSetCMOS(UCHAR Reg,
|
|||
|
||||
Reg |= 0x80;
|
||||
pushfl(Flags);
|
||||
#if defined(__GNUC__)
|
||||
__asm__("cli\n"); // AP unsure as to whether to do this here
|
||||
#elif defined(_MSC_VER)
|
||||
__asm cli
|
||||
#else
|
||||
#error Unknown compiler for inline assembler
|
||||
#endif
|
||||
WRITE_PORT_UCHAR((PUCHAR)0x70, Reg);
|
||||
WRITE_PORT_UCHAR((PUCHAR)0x71, Val);
|
||||
WRITE_PORT_UCHAR((PUCHAR)0x70, 0);
|
||||
|
@ -80,7 +92,13 @@ HalpQueryECMOS(USHORT Reg)
|
|||
ULONG Flags;
|
||||
|
||||
pushfl(Flags);
|
||||
#if defined(__GNUC__)
|
||||
__asm__("cli\n"); // AP unsure as to whether to do this here
|
||||
#elif defined(_MSC_VER)
|
||||
__asm cli
|
||||
#else
|
||||
#error Unknown compiler for inline assembler
|
||||
#endif
|
||||
WRITE_PORT_UCHAR((PUCHAR)0x74, (UCHAR)(Reg & 0x00FF));
|
||||
WRITE_PORT_UCHAR((PUCHAR)0x75, (UCHAR)(Reg>>8));
|
||||
Val = READ_PORT_UCHAR((PUCHAR)0x76);
|
||||
|
@ -97,7 +115,13 @@ HalpSetECMOS(USHORT Reg,
|
|||
ULONG Flags;
|
||||
|
||||
pushfl(Flags);
|
||||
#if defined(__GNUC__)
|
||||
__asm__("cli\n"); // AP unsure as to whether to do this here
|
||||
#elif defined(_MSC_VER)
|
||||
__asm cli
|
||||
#else
|
||||
#error Unknown compiler for inline assembler
|
||||
#endif
|
||||
WRITE_PORT_UCHAR((PUCHAR)0x74, (UCHAR)(Reg & 0x00FF));
|
||||
WRITE_PORT_UCHAR((PUCHAR)0x75, (UCHAR)(Reg>>8));
|
||||
WRITE_PORT_UCHAR((PUCHAR)0x76, Val);
|
||||
|
@ -160,13 +184,13 @@ HalSetRealTimeClock(PTIME_FIELDS Time)
|
|||
/* check 'Update In Progress' bit */
|
||||
while (HalpQueryCMOS (RTC_REGISTER_A) & RTC_REG_A_UIP);
|
||||
|
||||
HalpSetCMOS (0, INT_BCD(Time->Second));
|
||||
HalpSetCMOS (2, INT_BCD(Time->Minute));
|
||||
HalpSetCMOS (4, INT_BCD(Time->Hour));
|
||||
HalpSetCMOS (6, INT_BCD(Time->Weekday));
|
||||
HalpSetCMOS (7, INT_BCD(Time->Day));
|
||||
HalpSetCMOS (8, INT_BCD(Time->Month));
|
||||
HalpSetCMOS (9, INT_BCD(Time->Year % 100));
|
||||
HalpSetCMOS (0, (UCHAR)INT_BCD(Time->Second));
|
||||
HalpSetCMOS (2, (UCHAR)INT_BCD(Time->Minute));
|
||||
HalpSetCMOS (4, (UCHAR)INT_BCD(Time->Hour));
|
||||
HalpSetCMOS (6, (UCHAR)INT_BCD(Time->Weekday));
|
||||
HalpSetCMOS (7, (UCHAR)INT_BCD(Time->Day));
|
||||
HalpSetCMOS (8, (UCHAR)INT_BCD(Time->Month));
|
||||
HalpSetCMOS (9, (UCHAR)INT_BCD(Time->Year % 100));
|
||||
|
||||
#if 0
|
||||
/* Century */
|
||||
|
@ -221,9 +245,9 @@ HalSetEnvironmentVariable(PCH Name,
|
|||
Val = HalpQueryCMOS(RTC_REGISTER_B);
|
||||
|
||||
if (_stricmp(Value, "TRUE") == 0)
|
||||
HalpSetCMOS(RTC_REGISTER_B, Val | 0x01);
|
||||
HalpSetCMOS(RTC_REGISTER_B, (UCHAR)(Val | 0x01));
|
||||
else if (_stricmp(Value, "FALSE") == 0)
|
||||
HalpSetCMOS(RTC_REGISTER_B, Val & ~0x01);
|
||||
HalpSetCMOS(RTC_REGISTER_B, (UCHAR)(Val & ~0x01));
|
||||
else
|
||||
result = FALSE;
|
||||
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
* MA 02139, USA.
|
||||
*
|
||||
*/
|
||||
/* $Id: timer.c,v 1.1 2003/06/19 16:00:03 gvg Exp $
|
||||
/* $Id: timer.c,v 1.2 2003/12/28 22:38:09 fireball Exp $
|
||||
*
|
||||
* PROJECT: ReactOS kernel
|
||||
* FILE: ntoskrnl/hal/x86/udelay.c
|
||||
|
@ -99,15 +99,28 @@ static ULONG Read8254Timer(VOID)
|
|||
ULONG Count;
|
||||
|
||||
/* save flags and disable interrupts */
|
||||
#if defined(__GNUC__)
|
||||
__asm__("pushf\n\t" \
|
||||
"cli\n\t");
|
||||
#elif defined(_MSC_VER)
|
||||
__asm pushfd
|
||||
__asm cli
|
||||
#else
|
||||
#error Unknown compiler for inline assembler
|
||||
#endif
|
||||
|
||||
WRITE_PORT_UCHAR((PUCHAR) TMR_CTRL, TMR_SC0 | TMR_LATCH);
|
||||
Count = READ_PORT_UCHAR((PUCHAR) TMR_CNT0);
|
||||
Count |= READ_PORT_UCHAR((PUCHAR) TMR_CNT0) << 8;
|
||||
|
||||
/* restore flags */
|
||||
#if defined(__GNUC__)
|
||||
__asm__("popf\n\t");
|
||||
#elif defined(_MSC_VER)
|
||||
__asm popfd
|
||||
#else
|
||||
#error Unknown compiler for inline assembler
|
||||
#endif
|
||||
|
||||
return Count;
|
||||
}
|
||||
|
@ -228,13 +241,26 @@ HalCalibratePerformanceCounter(ULONG Count)
|
|||
ULONG i;
|
||||
|
||||
/* save flags and disable interrupts */
|
||||
#if defined(__GNUC__)
|
||||
__asm__("pushf\n\t" \
|
||||
"cli\n\t");
|
||||
#elif defined(_MSC_VER)
|
||||
__asm pushfd
|
||||
__asm cli
|
||||
#else
|
||||
#error Unknown compiler for inline assembler
|
||||
#endif
|
||||
|
||||
for (i = 0; i < Count; i++);
|
||||
|
||||
/* restore flags */
|
||||
#if defined(__GNUC__)
|
||||
__asm__("popf\n\t");
|
||||
#elif defined(_MSC_VER)
|
||||
__asm popfd
|
||||
#else
|
||||
#error Unknown compiler for inline assembler
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue