mp-r0drv-haiku.c revision 9fc464631dc4a68fbb5eb6419d61fbe91b6b16bd
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * IPRT - Multiprocessor, Ring-0 Driver, Haiku.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * Copyright (C) 2012 Oracle Corporation
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * available from http://www.virtualbox.org. This file is free software;
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * you can redistribute it and/or modify it under the terms of the GNU
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * General Public License (GPL) as published by the Free Software
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * The contents of this file may alternatively be used under the terms
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * of the Common Development and Distribution License Version 1.0
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * VirtualBox OSE distribution, in which case the provisions of the
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * CDDL are applicable instead of those of the GPL.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * You may elect to license modified versions of this file under the
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * terms and conditions of either the GPL or the CDDL or both.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync/*******************************************************************************
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync* Header Files *
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync*******************************************************************************/
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync return idCpu < smp_get_num_cpus() ? (int)idCpu : -1;
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync return (unsigned)iCpu < smp_get_num_cpus() ? (RTCPUID)iCpu : NIL_RTCPUID;
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync } while (idCpu-- > 0);
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync /** @todo: FixMe && !CPU_ABSENT(idCpu) */
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync } while (idCpu-- > 0);
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * Wrapper between the native Haiku per-cpu callback and PFNRTWORKER
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * for the RTMpOnAll API.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * @param pvArg Pointer to the RTMPARGS package.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsyncstatic void rtmpOnAllHaikuWrapper(void *pvArg, int current)
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync pArgs->pfnWorker(current, pArgs->pvUser1, pArgs->pvUser2);
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsyncRTDECL(int) RTMpOnAll(PFNRTMPWORKER pfnWorker, void *pvUser1, void *pvUser2)
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync /* is _sync needed ? */
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * Wrapper between the native Haiku per-cpu callback and PFNRTWORKER
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * for the RTMpOnOthers API.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * @param pvArg Pointer to the RTMPARGS package.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsyncstatic void rtmpOnOthersHaikuWrapper(void *pvArg, int current)
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync pArgs->pfnWorker(idCpu, pArgs->pvUser1, pArgs->pvUser2);
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsyncRTDECL(int) RTMpOnOthers(PFNRTMPWORKER pfnWorker, void *pvUser1, void *pvUser2)
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync /* Will panic if no rendezvousing cpus, so check up front. */
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync /* is _sync needed ? */
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync call_all_cpus_sync(rtmpOnOthersHaikuWrapper, &Args);
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * Wrapper between the native Haiku per-cpu callback and PFNRTWORKER
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * for the RTMpOnSpecific API.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * @param pvArg Pointer to the RTMPARGS package.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsyncstatic void rtmpOnSpecificHaikuWrapper(void *pvArg, int current)
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync pArgs->pfnWorker(idCpu, pArgs->pvUser1, pArgs->pvUser2);
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsyncRTDECL(int) RTMpOnSpecific(RTCPUID idCpu, PFNRTMPWORKER pfnWorker, void *pvUser1, void *pvUser2)
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync /* Will panic if no rendezvousing cpus, so make sure the cpu is online. */
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync /* is _sync needed ? */