--- /dev/null
+/*
+ * PROJECT: ReactOS HAL
+ * LICENSE: BSD - See COPYING.ARM in the top level directory
+ * FILE: hal/halarm/generic/processor.c
+ * PURPOSE: HAL Processor Routines
+ * PROGRAMMERS: ReactOS Portable Systems Group
+ */
+
+/* INCLUDES *******************************************************************/
+
+#include <hal.h>
+#define NDEBUG
+#include <debug.h>
+
+/* GLOBALS ********************************************************************/
+
+LONG HalpActiveProcessors;
+KAFFINITY HalpDefaultInterruptAffinity;
+BOOLEAN HalpProcessorIdentified;
+BOOLEAN HalpTestCleanSupported;
+
+/* PRIVATE FUNCTIONS **********************************************************/
+
+VOID
+HalpIdentifyProcessor(VOID)
+{
+ ARM_ID_CODE_REGISTER IdRegister;
+
+ /* Don't do it again */
+ HalpProcessorIdentified = TRUE;
+
+ // fixfix: Use Pcr->ProcessorId
+
+ /* Read the ID Code */
+ IdRegister = KeArmIdCodeRegisterGet();
+
+ /* Architecture "6" CPUs support test-and-clean (926EJ-S and 1026EJ-S) */
+ HalpTestCleanSupported = (IdRegister.Architecture == 6);
+}
+
+/* FUNCTIONS ******************************************************************/
+
+/*
+ * @implemented
+ */
+VOID
+NTAPI
+HalInitializeProcessor(IN ULONG ProcessorNumber,
+ IN PLOADER_PARAMETER_BLOCK LoaderBlock)
+{
+ /* Do nothing */
+ return;
+}
+
+/*
+ * @implemented
+ */
+BOOLEAN
+NTAPI
+HalAllProcessorsStarted(VOID)
+{
+ /* Do nothing */
+ return TRUE;
+}
+
+/*
+ * @implemented
+ */
+BOOLEAN
+NTAPI
+HalStartNextProcessor(IN PLOADER_PARAMETER_BLOCK LoaderBlock,
+ IN PKPROCESSOR_STATE ProcessorState)
+{
+ /* Ready to start */
+ return FALSE;
+}
+
+/*
+ * @implemented
+ */
+VOID
+NTAPI
+HalProcessorIdle(VOID)
+{
+ /* Enable interrupts and halt the processor */
+ _enable();
+ UNIMPLEMENTED;
+ while (TRUE);
+}
+
+/*
+ * @implemented
+ */
+VOID
+NTAPI
+HalRequestIpi(KAFFINITY TargetProcessors)
+{
+ /* Not implemented on UP */
+ UNIMPLEMENTED;
+ while (TRUE);
+}
+
+/*
+ * @implemented
+ */
+VOID
+HalSweepDcache(VOID)
+{
+ /*
+ * We get called very early on, before HalInitSystem or any of the Hal*
+ * processor routines, so we need to figure out what CPU we're on.
+ */
+ if (!HalpProcessorIdentified) HalpIdentifyProcessor();
+
+ /*
+ * Check if we can do it the ARMv5TE-J way
+ */
+ if (HalpTestCleanSupported)
+ {
+ /* Test, clean, flush D-Cache */
+ __asm__ __volatile__ ("1: mrc p15, 0, pc, c7, c14, 3; bne 1b");
+ }
+ else
+ {
+ /* We need to do it it by set/way. For now always call ARMv7 function */
+ //extern VOID v7_flush_dcache_all(VOID);
+ //v7_flush_dcache_all();
+ }
+}
+
+/*
+ * @implemented
+ */
+VOID
+HalSweepIcache(VOID)
+{
+ /* All ARM cores support the same Icache flush command */
+ KeArmFlushIcache();
+}
+
+/* EOF */