First shot at some primitives for powerpc. Untested yet.
Added: trunk/reactos/ntoskrnl/include/internal/powerpc/
Added: trunk/reactos/ntoskrnl/include/internal/powerpc/ke.h
_____
Added: trunk/reactos/ntoskrnl/include/internal/powerpc/ke.h
--- trunk/reactos/ntoskrnl/include/internal/powerpc/ke.h
2005-02-27 22:55:54 UTC (rev 13772)
+++ trunk/reactos/ntoskrnl/include/internal/powerpc/ke.h
2005-02-28 00:26:28 UTC (rev 13773)
@@ -0,0 +1,140 @@
+/*
+ * ReactOS kernel
+ * Copyright (C) 1998, 1999, 2000, 2001 ReactOS Team
+ *
+ * This program is free software; you can redistribute it and/or
modify
+ * it under the terms of the GNU General Public License as published
by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+#ifndef __NTOSKRNL_INCLUDE_INTERNAL_POWERPC_KE_H
+#define __NTOSKRNL_INCLUDE_INTERNAL_POWERPC_KE_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+/* Possible values for KTHREAD's NpxState */
+#define NPX_STATE_INVALID 0x01
+#define NPX_STATE_VALID 0x02
+#define NPX_STATE_DIRTY 0x04
+
+#ifndef __ASM__
+
+typedef struct _KTRAP_FRAME
+{
+} KTRAP_FRAME, *PKTRAP_FRAME;
+
+typedef struct _KIRQ_TRAPFRAME
+{
+} KIRQ_TRAPFRAME, *PKIRQ_TRAPFRAME;
+
+extern ULONG KePPCCacheAlignment;
+
+struct _KPCR;
+VOID
+KiInitializeGdt(struct _KPCR* Pcr);
+VOID
+KiPPCApplicationProcessorInitializeTSS(VOID);
+VOID
+KiPPCBootInitializeTSS(VOID);
+VOID
+KiGdtPrepareForApplicationProcessorInit(ULONG Id);
+VOID
+KiPPCInitializeLdt(VOID);
+VOID
+KiPPCSetProcessorFeatures(VOID);
+ULONG KeAllocateGdtSelector(ULONG Desc[2]);
+VOID KeFreeGdtSelector(ULONG Entry);
+VOID
+NtEarlyInitVdm(VOID);
+
+#ifdef CONFIG_SMP
+#define LOCK "isync ; "
+#else
+#define LOCK ""
+#endif
+
+
+static inline LONG KePPCTestAndClearBit(ULONG BitPos, volatile PULONG
Addr)
+{
+ ULONG OldValue, NewValue;
+
+ __asm__ __volatile__ ("lwarx %0,0,%1"
+ : "=r" (OldValue), "=r" (*Addr)
+ :
+ : "memory");
+
+ NewValue = OldValue & ~(1<<BitPos);
+
+ __asm__ __volatile__ ("stwcx. %0,0,%3\n\t"
+ "beq success\n\t"
+ "add %2,0,%1\n"
+ "success:\n\t"
+ "isync\n\t"
+ : "=r" (NewValue), "=r" (OldValue)
+ : "=w" (NewValue), "=w" (*Addr)
+ : "memory");
+
+ return NewValue & (1 << BitPos);
+}
+
+static inline LONG KePPCTestAndSetBit(ULONG BitPos, volatile PULONG
Addr)
+{
+ ULONG OldValue, NewValue;
+
+ __asm__ __volatile__ ("lwarx %0,0,%1"
+ : "=r" (OldValue), "=r" (*Addr)
+ :
+ : "memory");
+
+ NewValue = OldValue | (1<<BitPos);
+
+ __asm__ __volatile__ ("stwcx. %0,0,%3\n\t"
+ "beq success\n\t"
+ "add %2,0,%1\n"
+ "success:\n\t"
+ "isync\n\t"
+ : "=r" (NewValue), "=r" (OldValue)
+ : "=w" (NewValue), "=w" (*Addr)
+ : "memory");
+
+ return NewValue & (1 << BitPos);
+}
+
+#define KePPCRdmsr(msr,val1,val2) __asm__ __volatile__("mfmsr 2")
+
+#define KePPCWrmsr(msr,val1,val2) __asm__ __volatile__("mtmsr 3")
+
+
+#define KePPCDisableInterrupts() \
+__asm__ __volatile__("mfmsr 0\n\t" \
+ "li 8,0x7fff\n\t" \
+ "and 0,8,0\n\t" \
+ "mtmsr 0\n\t")
+
+#define KePPCEnableInterrupts() \
+ __asm__ __volatile__("mfmsr 0\n\t" \
+ "li 8,0x8000\n\t" \
+ "or 0,8,0\n\t" \
+ "mtmsr 0\n\t")
+
+#define KePPCHaltProcessor() ;
+
+#endif /* __ASM__ */
+
+#define KeArchEraseFlags()
+#define KeArchDisableInterrupts() KePPCDisableInterrupts()
+
+#endif /* __NTOSKRNL_INCLUDE_INTERNAL_POWERPC_KE_H */
+
+/* EOF */