mp-r0drv-darwin.cpp revision d55f5ac020ffc727e495eebc00ff75a022bbd27a
5b281ba489ca18f0380d7efc7a5108b606cce449vboxsync * IPRT - Multiprocessor, Ring-0 Driver, Darwin.
c0b6af690ad705bddfa87c643b89770a7a0aaf5avboxsync * Copyright (C) 2008-2014 Oracle Corporation
5e91fc5e5ea9cccb7a40636f73253d489fbe340bvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
5e91fc5e5ea9cccb7a40636f73253d489fbe340bvboxsync * available from http://www.virtualbox.org. This file is free software;
5e91fc5e5ea9cccb7a40636f73253d489fbe340bvboxsync * you can redistribute it and/or modify it under the terms of the GNU
5e91fc5e5ea9cccb7a40636f73253d489fbe340bvboxsync * General Public License (GPL) as published by the Free Software
5e91fc5e5ea9cccb7a40636f73253d489fbe340bvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
5e91fc5e5ea9cccb7a40636f73253d489fbe340bvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
5e91fc5e5ea9cccb7a40636f73253d489fbe340bvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
5e91fc5e5ea9cccb7a40636f73253d489fbe340bvboxsync * The contents of this file may alternatively be used under the terms
5e91fc5e5ea9cccb7a40636f73253d489fbe340bvboxsync * of the Common Development and Distribution License Version 1.0
5e91fc5e5ea9cccb7a40636f73253d489fbe340bvboxsync * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
5e91fc5e5ea9cccb7a40636f73253d489fbe340bvboxsync * VirtualBox OSE distribution, in which case the provisions of the
5e91fc5e5ea9cccb7a40636f73253d489fbe340bvboxsync * CDDL are applicable instead of those of the GPL.
5e91fc5e5ea9cccb7a40636f73253d489fbe340bvboxsync * You may elect to license modified versions of this file under the
5e91fc5e5ea9cccb7a40636f73253d489fbe340bvboxsync * terms and conditions of either the GPL or the CDDL or both.
5e91fc5e5ea9cccb7a40636f73253d489fbe340bvboxsync/*******************************************************************************
5e91fc5e5ea9cccb7a40636f73253d489fbe340bvboxsync* Header Files *
5e91fc5e5ea9cccb7a40636f73253d489fbe340bvboxsync*******************************************************************************/
bd4d5b99a9ad50d23a13cf695bbf48f8d9364618vboxsync/*******************************************************************************
bd4d5b99a9ad50d23a13cf695bbf48f8d9364618vboxsync* Global Variables *
bd4d5b99a9ad50d23a13cf695bbf48f8d9364618vboxsync*******************************************************************************/
bd4d5b99a9ad50d23a13cf695bbf48f8d9364618vboxsync int rc = sysctlbyname("hw.ncpu", &cCpus, &oldLen, NULL, NULL);
bd4d5b99a9ad50d23a13cf695bbf48f8d9364618vboxsync printf("IPRT: sysctlbyname(hw.ncpu) failed with rc=%d!\n", rc);
232a98ca36e6245c7fedaab59811d01e57afce30vboxsync return idCpu < RTCPUSET_MAX_CPUS ? (int)idCpu : -1;
232a98ca36e6245c7fedaab59811d01e57afce30vboxsync return (unsigned)iCpu < RTCPUSET_MAX_CPUS ? (RTCPUID)iCpu : NIL_RTCPUID;
2d059d153e5d436dd4c6b8a15bb8f17ad1b3fa26vboxsync } while (idCpu-- > 0);
1ba8a0ccd2665ea7cdb82f6b0f65c5145265c786vboxsync /** @todo darwin R0 MP */
1ba8a0ccd2665ea7cdb82f6b0f65c5145265c786vboxsync /** @todo darwin R0 MP */
1ba8a0ccd2665ea7cdb82f6b0f65c5145265c786vboxsync /** @todo darwin R0 MP */
1ba8a0ccd2665ea7cdb82f6b0f65c5145265c786vboxsync /** @todo darwin R0 MP (rainy day) */
1ba8a0ccd2665ea7cdb82f6b0f65c5145265c786vboxsync /** @todo darwin R0 MP (rainy day) */
d9658602103599d13b5449fc1ea49d765a23e6f1vboxsync /** @todo (not used on non-Windows platforms yet). */
d9658602103599d13b5449fc1ea49d765a23e6f1vboxsync return false;
1ba8a0ccd2665ea7cdb82f6b0f65c5145265c786vboxsync * Wrapper between the native darwin per-cpu callback and PFNRTWORKER
5e91fc5e5ea9cccb7a40636f73253d489fbe340bvboxsync * for the RTMpOnAll API.
5e91fc5e5ea9cccb7a40636f73253d489fbe340bvboxsync * @param pvArg Pointer to the RTMPARGS package.
5e91fc5e5ea9cccb7a40636f73253d489fbe340bvboxsync pArgs->pfnWorker(cpu_number(), pArgs->pvUser1, pArgs->pvUser2);
5e91fc5e5ea9cccb7a40636f73253d489fbe340bvboxsyncRTDECL(int) RTMpOnAll(PFNRTMPWORKER pfnWorker, void *pvUser1, void *pvUser2)
1ba8a0ccd2665ea7cdb82f6b0f65c5145265c786vboxsync mp_rendezvous_no_intrs(rtmpOnAllDarwinWrapper, &Args);
1ba8a0ccd2665ea7cdb82f6b0f65c5145265c786vboxsync * Wrapper between the native darwin per-cpu callback and PFNRTWORKER
5e91fc5e5ea9cccb7a40636f73253d489fbe340bvboxsync * for the RTMpOnOthers API.
5e91fc5e5ea9cccb7a40636f73253d489fbe340bvboxsync * @param pvArg Pointer to the RTMPARGS package.
5e91fc5e5ea9cccb7a40636f73253d489fbe340bvboxsync pArgs->pfnWorker(idCpu, pArgs->pvUser1, pArgs->pvUser2);
5e91fc5e5ea9cccb7a40636f73253d489fbe340bvboxsyncRTDECL(int) RTMpOnOthers(PFNRTMPWORKER pfnWorker, void *pvUser1, void *pvUser2)
1ba8a0ccd2665ea7cdb82f6b0f65c5145265c786vboxsync mp_rendezvous_no_intrs(rtmpOnOthersDarwinWrapper, &Args);
1ba8a0ccd2665ea7cdb82f6b0f65c5145265c786vboxsync * Wrapper between the native darwin per-cpu callback and PFNRTWORKER
5e91fc5e5ea9cccb7a40636f73253d489fbe340bvboxsync * for the RTMpOnSpecific API.
5e91fc5e5ea9cccb7a40636f73253d489fbe340bvboxsync * @param pvArg Pointer to the RTMPARGS package.
5e91fc5e5ea9cccb7a40636f73253d489fbe340bvboxsyncstatic void rtmpOnSpecificDarwinWrapper(void *pvArg)
5e91fc5e5ea9cccb7a40636f73253d489fbe340bvboxsync pArgs->pfnWorker(idCpu, pArgs->pvUser1, pArgs->pvUser2);
5e91fc5e5ea9cccb7a40636f73253d489fbe340bvboxsyncRTDECL(int) RTMpOnSpecific(RTCPUID idCpu, PFNRTMPWORKER pfnWorker, void *pvUser1, void *pvUser2)
1ba8a0ccd2665ea7cdb82f6b0f65c5145265c786vboxsync mp_rendezvous_no_intrs(rtmpOnSpecificDarwinWrapper, &Args);
c0b6af690ad705bddfa87c643b89770a7a0aaf5avboxsync return true;