android_kernel_modules_leno.../debug_tools/vtunedk/include/pax_shared.h

179 lines
5.8 KiB
C

/*COPYRIGHT**
* -------------------------------------------------------------------------
* INTEL CORPORATION PROPRIETARY INFORMATION
* This software is supplied under the terms of the accompanying license
* agreement or nondisclosure agreement with Intel Corporation and may not
* be copied or disclosed except in accordance with the terms of that
* agreement.
* Copyright (C) 2009-2014 Intel Corporation. All Rights Reserved.
* -------------------------------------------------------------------------
**COPYRIGHT*/
/*
*
* Description: types and definitions shared between PAX kernel
* and user modes
*
* NOTE: alignment on page boundaries is required on 64-bit platforms!
*
*/
#ifndef _PAX_SHARED_H_
#define _PAX_SHARED_H_
#include "lwpmudrv_defines.h"
#include "lwpmudrv_types.h"
#define _STRINGIFY(x) #x
#define STRINGIFY(x) _STRINGIFY(x)
// PAX versioning
#define PAX_MAJOR_VERSION 1 // major version (increment only when PAX driver is incompatible with previous versions)
#define PAX_MINOR_VERSION 0 // minor version (increment only when new APIs are added, but driver remains backwards compatible)
#define PAX_BUGFIX_VERSION 1 // bugfix version (increment only for bug fixes that don't affect usermode/driver compatibility)
#define PAX_VERSION_STR STRINGIFY(PAX_MAJOR_VERSION)"."STRINGIFY(PAX_MINOR_VERSION)"."STRINGIFY(PAX_BUGFIX_VERSION)
// PAX device name
#if defined(DRV_OS_WINDOWS)
#define PAX_NAME "sepdal"
#define PAX_NAME_W L"sepdal"
#else
#define PAX_NAME "pax"
#endif
// PAX PMU reservation states
#define PAX_PMU_RESERVED 1
#define PAX_PMU_UNRESERVED 0
#define PAX_GUID_UNINITIALIZED 0
// PAX_IOCTL definitions
#if defined(DRV_OS_WINDOWS)
//
// The name of the device as seen by the driver
//
#define LSTRING(x) L#x
#define PAX_OBJECT_DEVICE_NAME L"\\Device\\sepdal" // LSTRING(PAX_NAME)
#define PAX_OBJECT_LINK_NAME L"\\DosDevices\\sepdal" // LSTRING(PAX_NAME)
#define PAX_DEVICE_NAME PAX_NAME // for CreateFile called by app
#define PAX_IOCTL_DEVICE_TYPE 0xA000 // values 0-32768 reserved for Microsoft
#define PAX_IOCTL_FUNCTION 0xA00 // values 0-2047 reserved for Microsoft
//
// Basic CTL CODE macro to reduce typographical errors
//
#define PAX_CTL_READ_CODE(x) CTL_CODE(PAX_IOCTL_DEVICE_TYPE, \
PAX_IOCTL_FUNCTION+(x), \
METHOD_BUFFERED, \
FILE_READ_ACCESS)
#define PAX_IOCTL_INFO PAX_CTL_READ_CODE(1)
#define PAX_IOCTL_STATUS PAX_CTL_READ_CODE(2)
#define PAX_IOCTL_RESERVE_ALL PAX_CTL_READ_CODE(3)
#define PAX_IOCTL_UNRESERVE PAX_CTL_READ_CODE(4)
#elif defined(DRV_OS_LINUX) || defined (DRV_OS_ANDROID) || defined (DRV_OS_SOLARIS)
#define PAX_DEVICE_NAME "/dev/" PAX_NAME
#define PAX_IOC_MAGIC 100
#define PAX_IOCTL_INFO _IOW(PAX_IOC_MAGIC, 1, IOCTL_ARGS)
#define PAX_IOCTL_STATUS _IOW(PAX_IOC_MAGIC, 2, IOCTL_ARGS)
#define PAX_IOCTL_RESERVE_ALL _IO (PAX_IOC_MAGIC, 3)
#define PAX_IOCTL_UNRESERVE _IO (PAX_IOC_MAGIC, 4)
#if defined(HAVE_COMPAT_IOCTL) && defined(DRV_EM64T)
#define PAX_IOCTL_COMPAT_INFO _IOW(PAX_IOC_MAGIC, 1, compat_uptr_t)
#define PAX_IOCTL_COMPAT_STATUS _IOW(PAX_IOC_MAGIC, 2, compat_uptr_t)
#define PAX_IOCTL_COMPAT_RESERVE_ALL _IO (PAX_IOC_MAGIC, 3)
#define PAX_IOCTL_COMPAT_UNRESERVE _IO (PAX_IOC_MAGIC, 4)
#endif
#elif defined(DRV_OS_FREEBSD)
#define PAX_DEVICE_NAME "/dev/" PAX_NAME
#define PAX_IOC_MAGIC 100
#define PAX_IOCTL_INFO _IOW(PAX_IOC_MAGIC, 1, IOCTL_ARGS_NODE)
#define PAX_IOCTL_STATUS _IOW(PAX_IOC_MAGIC, 2, IOCTL_ARGS_NODE)
#define PAX_IOCTL_RESERVE_ALL _IO (PAX_IOC_MAGIC, 3)
#define PAX_IOCTL_UNRESERVE _IO (PAX_IOC_MAGIC, 4)
#elif defined(DRV_OS_MAC)
// OSX driver names are always in reverse DNS form.
#define PAXDriverClassName com_intel_driver_PAX
#define kPAXDriverClassName "com_intel_driver_PAX"
#define PAX_DEVICE_NAME "com.intel.driver.PAX"
// User client method dispatch selectors.
enum {
kPAXUserClientOpen,
kPAXUserClientClose,
kPAXReserveAll,
kPAXUnreserve,
kPAXGetStatus,
kPAXGetInfo,
kPAXDataIO,
kNumberOfMethods // Must be last
};
#else
#warning "unknown OS in pax_shared.h"
#endif
// data for PAX_IOCTL_INFO call
struct PAX_INFO_NODE_S {
volatile U64 managed_by; // entity managing PAX
volatile U32 version; // PAX version number
volatile U64 reserved1; // force 8-byte alignment
volatile U32 reserved2; // unreserved
};
typedef struct PAX_INFO_NODE_S PAX_INFO_NODE;
typedef PAX_INFO_NODE *PAX_INFO;
// data for PAX_IOCTL_STATUS call
struct PAX_STATUS_NODE_S {
volatile U64 guid; // reservation ID (globally unique identifier)
volatile DRV_FILE_DESC pid; // pid of process that has the reservation
volatile U64 start_time; // reservation start time
volatile U32 is_reserved; // 1 if there is a reservation, 0 otherwise
};
typedef struct PAX_STATUS_NODE_S PAX_STATUS_NODE;
typedef PAX_STATUS_NODE *PAX_STATUS;
struct PAX_VERSION_NODE_S {
union {
U32 version;
struct {
U32 major:8;
U32 minor:8;
U32 bugfix:16;
} s1;
} u1;
};
typedef struct PAX_VERSION_NODE_S PAX_VERSION_NODE;
typedef PAX_VERSION_NODE *PAX_VERSION;
#define PAX_VERSION_NODE_version(v) (v)->u1.version
#define PAX_VERSION_NODE_major(v) (v)->u1.s1.major
#define PAX_VERSION_NODE_minor(v) (v)->u1.s1.minor
#define PAX_VERSION_NODE_bugfix(v) (v)->u1.s1.bugfix
#endif