VirtualBox

Changeset 23725 in vbox


Ignore:
Timestamp:
Oct 13, 2009 1:44:46 PM (15 years ago)
Author:
vboxsync
Message:

SUPDrv: Started splitting out platform agonstic code to avoid clashes with kernel headers (linux + silly ES #define).

Location:
trunk
Files:
1 added
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/sup.h

    r23699 r23725  
    935935
    936936/**
    937  * Check if the host kernel can run in VMX root mode. 
    938  *   
    939  * @returns VINF_SUCCESS if supported, error code indicating why if not. 
     937 * Check if the host kernel can run in VMX root mode.
     938 *
     939 * @returns VINF_SUCCESS if supported, error code indicating why if not.
    940940 */
    941941SUPR3DECL(int) SUPR3QueryVTxSupported(void);
     
    943943
    944944/**
    945  * Return VT-x/AMD-V capabilities
    946  *   
    947  * @returns VINF_SUCCESS if supported, error code indicating why if not. 
    948  * @param   pCaps       Pointer to capability dword (out)
    949  */
    950 SUPR3DECL(int) SUPR3QueryVTCaps(uint32_t *pCaps);
     945 * Return VT-x/AMD-V capabilities.
     946 *
     947 * @returns VINF_SUCCESS if supported, error code indicating why if not.
     948 * @param   pfCaps      Pointer to capability dword (out).
     949 */
     950SUPR3DECL(int) SUPR3QueryVTCaps(uint32_t *pfCaps);
    951951
    952952/** @} */
     
    10151015SUPR0DECL(int) SUPR0PageFree(PSUPDRVSESSION pSession, RTR3PTR pvR3);
    10161016SUPR0DECL(int) SUPR0GipMap(PSUPDRVSESSION pSession, PRTR3PTR ppGipR3, PRTHCPHYS pHCPhysGip);
    1017 SUPR0DECL(int) SUPR0QueryVTCaps(PSUPDRVSESSION pSession, uint32_t *pCaps);
     1017SUPR0DECL(int) SUPR0QueryVTCaps(PSUPDRVSESSION pSession, uint32_t *pfCaps);
    10181018SUPR0DECL(int) SUPR0GipUnmap(PSUPDRVSESSION pSession);
    10191019SUPR0DECL(int) SUPR0Printf(const char *pszFormat, ...);
  • trunk/src/VBox/HostDrivers/Support/Makefile.kmk

    r23538 r23725  
    179179        win/SUPDrvA-win.asm \
    180180        SUPDrv.c \
     181        SUPDrvAgnostic.c \
    181182        win/VBoxDrv.rc
    182183VBoxDrv_LDFLAGS.x86   = -Entry:DriverEntry@8
     
    234235vboxdrv_SOURCES       = \
    235236        $(KBUILD_TARGET)/SUPDrv-$(KBUILD_TARGET).c \
    236         SUPDrv.c
     237        SUPDrv.c \
     238        SUPDrvAgnostic.c
    237239ifndef VBOX_LINUX_VERSION_2_4
    238240vboxdrv_SOURCES      += \
     
    318320VBoxDrvTiger_SOURCES     = \
    319321        SUPDrv.c \
     322        SUPDrvAgnostic.c \
    320323        $(KBUILD_TARGET)/SUPDrv-$(KBUILD_TARGET).cpp
    321324
     
    397400VBoxDrvLib_SOURCES    = \
    398401        os2/SUPDrv-os2.cpp \
    399         SUPDrv.c
     402        SUPDrv.c \
     403        SUPDrvAgnostic.c
    400404
    401405endif # os2
     
    412416        $(KBUILD_TARGET)/SUPDrv-$(KBUILD_TARGET).c \
    413417        $(PATH_SUB_CURRENT)/$(KBUILD_TARGET)/SUPDrv-$(KBUILD_TARGET).def \
    414         SUPDrv.c
     418        SUPDrv.c \
     419        SUPDrvAgnostic.c
    415420## @todo the SUPDrv-freebsd.def is most probably gonna break it and require build system hacking...
    416421
     
    454459vboxdrv_SOURCES       = \
    455460        $(KBUILD_TARGET)/SUPDrv-$(KBUILD_TARGET).c \
    456         SUPDrv.c
     461        SUPDrv.c \
     462        SUPDrvAgnostic.c
    457463
    458464endif # solaris
  • trunk/src/VBox/HostDrivers/Support/SUPDrv.c

    r23699 r23725  
    5050#include <VBox/log.h>
    5151#include <VBox/err.h>
    52 #include <VBox/hwacc_svm.h>
    53 #include <VBox/hwacc_vmx.h>
    5452#if defined(RT_OS_DARWIN) || defined(RT_OS_SOLARIS) || defined(RT_OS_FREEBSD)
    5553# include <iprt/crc32.h>
     
    36793677
    36803678
    3681 SUPR0DECL(int) SUPR0QueryVTCaps(PSUPDRVSESSION pSession, uint32_t *pCaps)
     3679SUPR0DECL(int) SUPR0QueryVTCaps(PSUPDRVSESSION pSession, uint32_t *pfCaps)
    36823680{
    36833681    /*
     
    36853683     */
    36863684    AssertReturn(SUP_IS_SESSION_VALID(pSession), VERR_INVALID_PARAMETER);
    3687     AssertReturn(pCaps, VERR_INVALID_POINTER);
    3688 
    3689     *pCaps = 0;
    3690 
    3691     if (ASMHasCpuId())
    3692     {
    3693         uint32_t u32FeaturesECX;
    3694         uint32_t u32Dummy;
    3695         uint32_t u32FeaturesEDX;
    3696         uint32_t u32VendorEBX, u32VendorECX, u32VendorEDX, u32AMDFeatureEDX, u32AMDFeatureECX;
    3697         uint64_t val;
    3698 
    3699         ASMCpuId(0, &u32Dummy, &u32VendorEBX, &u32VendorECX, &u32VendorEDX);
    3700         ASMCpuId(1, &u32Dummy, &u32Dummy, &u32FeaturesECX, &u32FeaturesEDX);
    3701         /* Query AMD features. */
    3702         ASMCpuId(0x80000001, &u32Dummy, &u32Dummy, &u32AMDFeatureECX, &u32AMDFeatureEDX);
    3703 
    3704         if (    u32VendorEBX == X86_CPUID_VENDOR_INTEL_EBX
    3705             &&  u32VendorECX == X86_CPUID_VENDOR_INTEL_ECX
    3706             &&  u32VendorEDX == X86_CPUID_VENDOR_INTEL_EDX
    3707            )
    3708         {
    3709             if (    (u32FeaturesECX & X86_CPUID_FEATURE_ECX_VMX)
    3710                  && (u32FeaturesEDX & X86_CPUID_FEATURE_EDX_MSR)
    3711                  && (u32FeaturesEDX & X86_CPUID_FEATURE_EDX_FXSR)
    3712                )
    3713             {
    3714                 val = ASMRdMsr(MSR_IA32_FEATURE_CONTROL);
    3715                 /*
    3716                  * Both the LOCK and VMXON bit must be set; otherwise VMXON will generate a #GP.
    3717                  * Once the lock bit is set, this MSR can no longer be modified.
    3718                  */
    3719                 if (   (val & (MSR_IA32_FEATURE_CONTROL_VMXON|MSR_IA32_FEATURE_CONTROL_LOCK))
    3720                            == (MSR_IA32_FEATURE_CONTROL_VMXON|MSR_IA32_FEATURE_CONTROL_LOCK) /* enabled and locked */
    3721                     ||  !(val & MSR_IA32_FEATURE_CONTROL_LOCK) /* not enabled, but not locked either */)
    3722                 {
    3723                     VMX_CAPABILITY vtCaps;
    3724 
    3725                     *pCaps |= SUPVTCAPS_VT_X;
    3726 
    3727                     vtCaps.u = ASMRdMsr(MSR_IA32_VMX_PROCBASED_CTLS);
    3728                     if (vtCaps.n.allowed1 & VMX_VMCS_CTRL_PROC_EXEC_USE_SECONDARY_EXEC_CTRL)
    3729                     {
    3730                         vtCaps.u = ASMRdMsr(MSR_IA32_VMX_PROCBASED_CTLS2);
    3731                         if (vtCaps.n.allowed1 & VMX_VMCS_CTRL_PROC_EXEC2_EPT)
    3732                             *pCaps |= SUPVTCAPS_NESTED_PAGING;
    3733                     }
    3734                     return VINF_SUCCESS;
    3735                 }
    3736                 else
    3737                     return VERR_VMX_MSR_LOCKED_OR_DISABLED;
    3738             }
    3739             else
    3740                 return VERR_VMX_NO_VMX;
    3741         }
    3742         else
    3743         if (    u32VendorEBX == X86_CPUID_VENDOR_AMD_EBX
    3744             &&  u32VendorECX == X86_CPUID_VENDOR_AMD_ECX
    3745             &&  u32VendorEDX == X86_CPUID_VENDOR_AMD_EDX
    3746            )
    3747         {
    3748             if (   (u32AMDFeatureECX & X86_CPUID_AMD_FEATURE_ECX_SVM)
    3749                 && (u32FeaturesEDX & X86_CPUID_FEATURE_EDX_MSR)
    3750                 && (u32FeaturesEDX & X86_CPUID_FEATURE_EDX_FXSR)
    3751                )
    3752             {
    3753                 /* Check if SVM is disabled */
    3754                 val = ASMRdMsr(MSR_K8_VM_CR);
    3755                 if (!(val & MSR_K8_VM_CR_SVM_DISABLE))
    3756                 {
    3757                     *pCaps |= SUPVTCAPS_AMD_V;
    3758 
    3759                     /* Query AMD features. */
    3760                     ASMCpuId(0x8000000A, &u32Dummy, &u32Dummy, &u32Dummy, &u32FeaturesEDX);
    3761 
    3762                     if (u32FeaturesEDX & AMD_CPUID_SVM_FEATURE_EDX_NESTED_PAGING)
    3763                         *pCaps |= SUPVTCAPS_NESTED_PAGING;
    3764 
    3765                     return VINF_SUCCESS;
    3766                 }
    3767                 else
    3768                     return VERR_SVM_DISABLED;
    3769             }
    3770             else
    3771                 return VERR_SVM_NO_SVM;
    3772         }
    3773     }
    3774     return VERR_UNSUPPORTED_CPU;
     3685    AssertPtrReturn(pfCaps, VERR_INVALID_POINTER);
     3686
     3687    return supR0QueryVTCaps(pfCaps);
    37753688}
    37763689
  • trunk/src/VBox/HostDrivers/Support/SUPDrvInternal.h

    r23526 r23725  
    4747#include <iprt/err.h>
    4848
    49 
    50 #if defined(RT_OS_WINDOWS)
     49#ifdef SUPDRV_AGNOSTIC
     50/* do nothing */
     51
     52#elif defined(RT_OS_WINDOWS)
    5153    RT_C_DECLS_BEGIN
    5254#   if (_MSC_VER >= 1400) && !defined(VBOX_WITH_PATCHED_DDK)
     
    186188
    187189/* check kernel version */
    188 #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0)
    189 # error Unsupported kernel version!
    190 #endif
     190# ifndef SUPDRV_AGNOSTIC
     191#  if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0)
     192#   error Unsupported kernel version!
     193#  endif
     194# endif
    191195
    192196RT_C_DECLS_BEGIN
     
    531535     * This is NIL_RTR0PROCESS for kernel sessions and valid for user ones. */
    532536    RTR0PROCESS                     R0Process;
    533 #if defined(RT_OS_DARWIN)
     537#ifndef SUPDRV_AGNOSTIC
     538# if defined(RT_OS_DARWIN)
    534539    /** Pointer to the associated org_virtualbox_SupDrvClient object. */
    535540    void                           *pvSupDrvClient;
    536541    /** Whether this session has been opened or not. */
    537542    bool                            fOpened;
    538 #endif
    539 #if defined(RT_OS_OS2)
     543# endif
     544# if defined(RT_OS_OS2)
    540545    /** The system file number of this session. */
    541546    uint16_t                        sfn;
    542547    uint16_t                        Alignment; /**< Alignment */
    543 #endif
    544 #if defined(RT_OS_DARWIN) || defined(RT_OS_OS2) || defined(RT_OS_SOLARIS)
     548# endif
     549# if defined(RT_OS_DARWIN) || defined(RT_OS_OS2) || defined(RT_OS_SOLARIS)
    545550    /** Pointer to the next session with the same hash. */
    546551    PSUPDRVSESSION                  pNextHash;
    547 #endif
     552# endif
     553#endif /* !SUPDRV_AGNOSTIC */
    548554} SUPDRVSESSION;
    549555
     
    607613    RTCPUID volatile                idGipMaster;
    608614
    609 #ifdef RT_OS_WINDOWS
    610     /* Callback object returned by ExCreateCallback. */
    611     PCALLBACK_OBJECT                pObjPowerCallback;
    612     /* Callback handle returned by ExRegisterCallback. */
    613     PVOID                           hPowerCallback;
    614 #endif
    615 
    616615    /** Component factory mutex.
    617616     * This protects pComponentFactoryHead and component factory querying. */
     
    619618    /** The head of the list of registered component factories. */
    620619    PSUPDRVFACTORYREG               pComponentFactoryHead;
     620
     621#ifndef SUPDRV_AGNOSTIC
     622# ifdef RT_OS_WINDOWS
     623    /* Callback object returned by ExCreateCallback. */
     624    PCALLBACK_OBJECT                pObjPowerCallback;
     625    /* Callback handle returned by ExRegisterCallback. */
     626    PVOID                           hPowerCallback;
     627# endif
     628#endif
    621629} SUPDRVDEVEXT;
    622630
     
    632640int  VBOXCALL   supdrvOSEnableVTx(bool fEnabled);
    633641
     642
    634643/*******************************************************************************
    635644*   Shared Functions                                                           *
    636645*******************************************************************************/
     646/* SUPDrv.c */
    637647int  VBOXCALL   supdrvIOCtl(uintptr_t uIOCtl, PSUPDRVDEVEXT pDevExt, PSUPDRVSESSION pSession, PSUPREQHDR pReqHdr);
    638648int  VBOXCALL   supdrvIOCtlFast(uintptr_t uIOCtl, VMCPUID idCpu, PSUPDRVDEVEXT pDevExt, PSUPDRVSESSION pSession);
     
    649659bool VBOXCALL   supdrvDetermineAsyncTsc(uint64_t *pu64DiffCores);
    650660
     661/* SUPDrvAgnostic.c */
     662int  VBOXCALL   supR0QueryVTCaps(uint32_t *pfCaps);
     663
    651664RT_C_DECLS_END
    652665
  • trunk/src/VBox/HostDrivers/Support/SUPLib.cpp

    r23704 r23725  
    20672067}
    20682068
    2069 SUPR3DECL(int) SUPR3QueryVTCaps(uint32_t *pCaps)
    2070 {
    2071     AssertPtrReturn(pCaps, VERR_INVALID_POINTER);
    2072 
    2073     *pCaps = 0;
     2069
     2070SUPR3DECL(int) SUPR3QueryVTCaps(uint32_t *pfCaps)
     2071{
     2072    AssertPtrReturn(pfCaps, VERR_INVALID_POINTER);
     2073
     2074    *pfCaps = 0;
    20742075
    20752076    /* fake */
     
    20932094        rc = Req.Hdr.rc;
    20942095        if (RT_SUCCESS(rc))
    2095             *pCaps = Req.u.Out.Caps;
    2096     }
    2097     return rc;
    2098 }
    2099 
     2096            *pfCaps = Req.u.Out.Caps;
     2097    }
     2098    return rc;
     2099}
     2100
  • trunk/src/VBox/HostDrivers/Support/freebsd/Makefile

    r23526 r23725  
    4343        freebsd/SUPDrv-freebsd.c \
    4444        SUPDrv.c \
     45        SUPDrvAgnostic.c \
    4546        alloc/heapsimple.c \
    4647        common/err/RTErrConvertFromErrno.c \
  • trunk/src/VBox/HostDrivers/Support/freebsd/files_vboxdrv

    r23711 r23725  
    7676    ${PATH_ROOT}/src/VBox/HostDrivers/Support/freebsd/SUPDrv-freebsd.c=>freebsd/SUPDrv-freebsd.c \
    7777    ${PATH_ROOT}/src/VBox/HostDrivers/Support/SUPDrv.c=>SUPDrv.c \
     78    ${PATH_ROOT}/src/VBox/HostDrivers/Support/SUPDrvAgnostic.c=>SUPDrvAgnostic.c \
    7879    ${PATH_ROOT}/src/VBox/HostDrivers/Support/SUPDrvIDC.h=>SUPDrvIDC.h \
    7980    ${PATH_ROOT}/src/VBox/HostDrivers/Support/SUPDrvIOC.h=>SUPDrvIOC.h \
  • trunk/src/VBox/HostDrivers/Support/linux/Makefile

    r21549 r23725  
    7777        linux/SUPDrv-linux.o \
    7878        SUPDrv.o \
     79        SUPDrvAgnostic.o \
    7980        r0drv/alloc-r0drv.o \
    8081        r0drv/initterm-r0drv.o \
  • trunk/src/VBox/HostDrivers/Support/linux/files_vboxdrv

    r23710 r23725  
    6868    ${PATH_ROOT}/src/VBox/HostDrivers/Support/linux/SUPDrv-linux.c=>linux/SUPDrv-linux.c \
    6969    ${PATH_ROOT}/src/VBox/HostDrivers/Support/SUPDrv.c=>SUPDrv.c \
     70    ${PATH_ROOT}/src/VBox/HostDrivers/Support/SUPDrvAgnostic.c=>SUPDrvAgnostic.c \
    7071    ${PATH_ROOT}/src/VBox/HostDrivers/Support/SUPDrvIDC.h=>SUPDrvIDC.h \
    7172    ${PATH_ROOT}/src/VBox/HostDrivers/Support/SUPDrvIOC.h=>SUPDrvIOC.h \
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette