From ad56aa8a1edac4a76ab8719e819fb5ef8005b99d Mon Sep 17 00:00:00 2001 From: NicJA Date: Tue, 14 Apr 2015 01:05:04 +0000 Subject: [PATCH] add basic getcpucount & delint git-svn-id: https://svn.aros.org/svn/aros/trunk/AROS@50373 fb15a70f-31f2-0310-bbcc-cdcc74a49acc --- arch/arm-native/kernel/getcpucount.c | 27 +++++++++++++++++++++++++++ arch/arm-native/kernel/kernel_arm.h | 2 +- arch/arm-native/kernel/kernel_cpu.h | 2 ++ arch/arm-native/kernel/mmakefile.src | 2 ++ arch/arm-native/kernel/platform_bcm2708.c | 21 +++++++++++---------- 5 files changed, 43 insertions(+), 11 deletions(-) create mode 100644 arch/arm-native/kernel/getcpucount.c diff --git a/arch/arm-native/kernel/getcpucount.c b/arch/arm-native/kernel/getcpucount.c new file mode 100644 index 0000000000..5ea8abe55d --- /dev/null +++ b/arch/arm-native/kernel/getcpucount.c @@ -0,0 +1,27 @@ +/* + Copyright © 2015, The AROS Development Team. All rights reserved. + $Id$ +*/ + +#include +#include + +#include "kernel_base.h" +#include "kernel_intern.h" + +AROS_LH0(unsigned int, KrnGetCPUCount, + struct KernelBase *, KernelBase, 36, Kernel) +{ + AROS_LIBFUNC_INIT + + uint32_t count = 0, mask; + + for (mask = __arm_affinitymask; mask > 0 ; mask >> 1) + { + if (mask & 1) + count++; + } + return count; + + AROS_LIBFUNC_EXIT +} diff --git a/arch/arm-native/kernel/kernel_arm.h b/arch/arm-native/kernel/kernel_arm.h index 235aec0aa5..f2c8b70a79 100644 --- a/arch/arm-native/kernel/kernel_arm.h +++ b/arch/arm-native/kernel/kernel_arm.h @@ -13,7 +13,7 @@ struct ARM_Implementation void (*ARMI_Delay) (int); unsigned int (*ARMI_GetTime) (void); void (*ARMI_PutChar) (int); - void (*ARMI_SerPutChar) (int); + void (*ARMI_SerPutChar) (uint8_t); int (*ARMI_SerGetChar) (void); void (*ARMI_IRQInit) (); void (*ARMI_IRQEnable) (int); diff --git a/arch/arm-native/kernel/kernel_cpu.h b/arch/arm-native/kernel/kernel_cpu.h index 83f1b26735..4202724a3b 100644 --- a/arch/arm-native/kernel/kernel_cpu.h +++ b/arch/arm-native/kernel/kernel_cpu.h @@ -8,6 +8,8 @@ #include +extern uint32_t __arm_affinitymask; + #define EXCEPTIONS_COUNT 1 #define ARM_FPU_TYPE FPU_VFP diff --git a/arch/arm-native/kernel/mmakefile.src b/arch/arm-native/kernel/mmakefile.src index 739bf87551..40d1c60740 100644 --- a/arch/arm-native/kernel/mmakefile.src +++ b/arch/arm-native/kernel/mmakefile.src @@ -7,6 +7,8 @@ CFILES := \ platform_init \ kernel_debug \ getsystemattr \ + getcpucount \ + getcpunumber \ maygetchar \ tags \ intr \ diff --git a/arch/arm-native/kernel/platform_bcm2708.c b/arch/arm-native/kernel/platform_bcm2708.c index 5066c62246..9c75c62828 100644 --- a/arch/arm-native/kernel/platform_bcm2708.c +++ b/arch/arm-native/kernel/platform_bcm2708.c @@ -32,12 +32,12 @@ extern void cpu_Register(void); static void bcm2708_init(void) { - if (__arm_arosintern.ARMI_PeripheralBase == BCM2836_PERIPHYSBASE) + if (__arm_arosintern.ARMI_PeripheralBase == (APTR)BCM2836_PERIPHYSBASE) { int core; for (core = 1; core < 3; core ++) { - *((volatile unsigned int *)(0x4000008C + (0x10 * core))) = cpu_Register; + *((volatile unsigned int *)(0x4000008C + (0x10 * core))) = (unsigned int)cpu_Register; } if (__arm_arosintern.ARMI_Delay) @@ -63,7 +63,7 @@ static void bcm2807_irq_enable(int irq) int bank = IRQ_BANK(irq); unsigned int val, reg; - reg = IRQBANK_POINTER(bank); + reg = (unsigned int)IRQBANK_POINTER(bank); DIRQ(bug("[KRN:BCM2708] Enabling irq %d [bank %d, reg 0x%p]\n", irq, bank, reg)); @@ -77,7 +77,7 @@ static void bcm2807_irq_disable(int irq) int bank = IRQ_BANK(irq); unsigned int val, reg; - reg = IRQBANK_POINTER(bank); + reg = (unsigned int)IRQBANK_POINTER(bank); DIRQ(bug("[KRN:BCM2708] Dissabling irq %d [bank %d, reg 0x%p]\n", irq, bank, reg)); @@ -150,10 +150,10 @@ static void bcm2807_irq_process() static void bcm2708_toggle_led(int LED, int state) { - if (__arm_arosintern.ARMI_PeripheralBase == BCM2836_PERIPHYSBASE) + if (__arm_arosintern.ARMI_PeripheralBase == (APTR)BCM2836_PERIPHYSBASE) { int pin = 35; - IPTR gpiofunc = GPCLR1; + APTR gpiofunc = GPCLR1; if (LED == ARM_LED_ACTIVITY) pin = 47; @@ -198,8 +198,9 @@ static void bcm2708_gputimer_handler(unsigned int timerno, void *unused1) D(bug("[BCM2708] %s: Done..\n", __PRETTY_FUNCTION__)); } -static bcm2708_init_gputimer(struct KernelBase *KernelBase) +static APTR bcm2708_init_gputimer(APTR _kernelBase) { + struct KernelBase *KernelBase = (struct KernelBase *)_kernelBase; struct IntrNode *GPUTimerHandle; unsigned int stc; @@ -264,7 +265,7 @@ static int bcm2708_ser_getc(void) static IPTR bcm2708_probe(struct ARM_Implementation *krnARMImpl, struct TagItem *msg) { BOOL bcm2708found = FALSE; - char *bootPutC = NULL; + void *bootPutC = NULL; while(msg->ti_Tag != TAG_DONE) { @@ -285,9 +286,9 @@ static IPTR bcm2708_probe(struct ARM_Implementation *krnARMImpl, struct TagItem return FALSE; if (krnARMImpl->ARMI_Family == 7) /* bcm2836 uses armv7 */ - krnARMImpl->ARMI_PeripheralBase = BCM2836_PERIPHYSBASE; + krnARMImpl->ARMI_PeripheralBase = (APTR)BCM2836_PERIPHYSBASE; else - krnARMImpl->ARMI_PeripheralBase = BCM2835_PERIPHYSBASE; + krnARMImpl->ARMI_PeripheralBase = (APTR)BCM2835_PERIPHYSBASE; krnARMImpl->ARMI_GetTime = &bcm2807_get_time; krnARMImpl->ARMI_InitTimer = &bcm2708_init_gputimer; -- 2.11.4.GIT