Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(126)

Unified Diff: arch/arm/mach-tegra/nv/include/nvcommon.h

Issue 3256004: [ARM] tegra: add nvos/nvrm/nvmap drivers (Closed) Base URL: ssh://git@gitrw.chromium.org/kernel.git
Patch Set: remove ap15 headers Created 10 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « arch/arm/mach-tegra/nv/include/nvcolor.h ('k') | arch/arm/mach-tegra/nv/include/nvddk_kbc.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: arch/arm/mach-tegra/nv/include/nvcommon.h
diff --git a/arch/arm/mach-tegra/nv/include/nvcommon.h b/arch/arm/mach-tegra/nv/include/nvcommon.h
new file mode 100644
index 0000000000000000000000000000000000000000..4936555d80a4a07655e2d20f1b5d9e7c542a5990
--- /dev/null
+++ b/arch/arm/mach-tegra/nv/include/nvcommon.h
@@ -0,0 +1,368 @@
+/*
+ * Copyright (c) 2006-2009 NVIDIA Corporation.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * Neither the name of the NVIDIA Corporation nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+#ifndef INCLUDED_NVCOMMON_H
+#define INCLUDED_NVCOMMON_H
+
+// Include headers that provide NULL, size_t, offsetof, and [u]intptr_t. In
+// the event that the toolchain doesn't provide these, provide them ourselves.
+#include <stddef.h>
+#if defined(_WIN32_WCE)
+typedef int intptr_t;
+typedef unsigned int uintptr_t;
+#elif (defined(__linux__) && !defined(__KERNEL__)) || defined(__arm)
+#include <stdint.h>
+#endif
+
+#if defined(__cplusplus)
+extern "C"
+{
+#endif
+
+/**
+ * @defgroup nvcommon Common Declarations
+ *
+ * nvcommon.h contains standard definitions used by various interfaces
+ *
+ * @{
+ */
+
+
+/**
+ * If an OS DEFINE is not set, it should be set to 0
+ */
+#ifndef NV_OS_CE_500
+#define NV_OS_CE_500 0
+#endif
+#ifndef NV_OS_CE_600
+#define NV_OS_CE_600 0
+#endif
+#ifndef NV_OS_WM_600
+#define NV_OS_WM_600 0
+#endif
+#ifndef NV_OS_700
+#define NV_OS_700 0
+#endif
+
+
+// OS-related #define's
+#if defined(_WIN32)
+ #define NVOS_IS_WINDOWS 1
+ #if defined(_WIN32_WCE)
+ #define NVOS_IS_WINDOWS_CE 1
+ #endif
+#elif defined(__linux__)
+ #define NVOS_IS_LINUX 1
+ #define NVOS_IS_UNIX 1
+ #if defined(__KERNEL__)
+ #define NVOS_IS_LINUX_KERNEL 1
+ #endif
+#elif defined(__arm__) && defined(__ARM_EABI__)
+ /* GCC arm eabi compiler, potentially used for kernel compilation without
+ * __linux__, but also for straight EABI (AOS) executable builds */
+# if defined(__KERNEL__)
+# define NVOS_IS_LINUX 1
+# define NVOS_IS_UNIX 1
+# define NVOS_IS_LINUX_KERNEL 1
+# endif
+ /* Nothing to define for AOS */
+#elif defined(__arm)
+ // For ARM RVDS compiler, we don't know the final target OS at compile time
+#else
+ #error Unknown OS
+#endif
+
+#if !defined(NVOS_IS_WINDOWS)
+#define NVOS_IS_WINDOWS 0
+#endif
+#if !defined(NVOS_IS_WINDOWS_CE)
+#define NVOS_IS_WINDOWS_CE 0
+#endif
+#if !defined(NVOS_IS_LINUX)
+#define NVOS_IS_LINUX 0
+#endif
+#if !defined(NVOS_IS_UNIX)
+#define NVOS_IS_UNIX 0
+#endif
+#if !defined(NVOS_IS_LINUX_KERNEL)
+#define NVOS_IS_LINUX_KERNEL 0
+#endif
+
+// CPU-related #define's
+#if defined(_M_IX86) || defined(__i386__)
+#define NVCPU_IS_X86 1 // any IA32 machine (not AMD64)
+#define NVCPU_MIN_PAGE_SHIFT 12
+#elif defined(_M_ARM) || defined(__arm__)
+#define NVCPU_IS_ARM 1
+#define NVCPU_MIN_PAGE_SHIFT 12
+#else
+#error Unknown CPU
+#endif
+#if !defined(NVCPU_IS_X86)
+#define NVCPU_IS_X86 0
+#endif
+#if !defined(NVCPU_IS_ARM)
+#define NVCPU_IS_ARM 0
+#endif
+
+#if (NVCPU_IS_X86 && NVOS_IS_WINDOWS)
+#define NVOS_IS_WINDOWS_X86 1
+#else
+#define NVOS_IS_WINDOWS_X86 0
+#endif
+
+// The minimum page size can be determined from the minimum page shift
+#define NVCPU_MIN_PAGE_SIZE (1 << NVCPU_MIN_PAGE_SHIFT)
+
+// We don't currently support any big-endian CPUs
+#define NVCPU_IS_BIG_ENDIAN 0
+
+// We don't currently support any 64-bit CPUs
+#define NVCPU_IS_64_BITS 0
+
+// Explicitly sized signed and unsigned ints
+typedef unsigned char NvU8; // 0 to 255
+typedef unsigned short NvU16; // 0 to 65535
+typedef unsigned int NvU32; // 0 to 4294967295
+typedef unsigned long long NvU64; // 0 to 18446744073709551615
+typedef signed char NvS8; // -128 to 127
+typedef signed short NvS16; // -32768 to 32767
+typedef signed int NvS32; // -2147483648 to 2147483647
+typedef signed long long NvS64; // 2^-63 to 2^63-1
+
+// Explicitly sized floats
+typedef float NvF32; // IEEE Single Precision (S1E8M23)
+typedef double NvF64; // IEEE Double Precision (S1E11M52)
+
+// Min/Max values for NvF32
+#define NV_MIN_F32 (1.1754944e-38f)
+#define NV_MAX_F32 (3.4028234e+38f)
+
+// Boolean type
+enum { NV_FALSE = 0, NV_TRUE = 1 };
+typedef NvU8 NvBool;
+
+// Pointer-sized signed and unsigned ints
+#if NVCPU_IS_64_BITS
+typedef NvU64 NvUPtr;
+typedef NvS64 NvSPtr;
+#else
+typedef NvU32 NvUPtr;
+typedef NvS32 NvSPtr;
+#endif
+
+// Function attributes are lumped in here too
+// INLINE - Make the function inline
+// NAKED - Create a function without a prologue or an epilogue.
+#if NVOS_IS_WINDOWS
+
+#define NV_INLINE __inline
+#define NV_FORCE_INLINE __forceinline
+#define NV_NAKED __declspec(naked)
+
+#elif defined(__GNUC__)
+
+#define NV_INLINE __inline__
+#define NV_FORCE_INLINE __attribute__((always_inline)) __inline__
+#define NV_NAKED __attribute__((naked))
+
+#elif defined(__arm) // ARM RVDS compiler
+
+#define NV_INLINE __inline
+#define NV_FORCE_INLINE __forceinline
+#define NV_NAKED __asm
+
+#else
+#error Unknown compiler
+#endif
+
+// Symbol attributes.
+// ALIGN - Variable declaration to a particular # of bytes (should always be a
+// power of two)
+// WEAK - Define the symbol weakly so it can be overridden by the user.
+#if NVOS_IS_WINDOWS
+#define NV_ALIGN(size) __declspec(align(size))
+#define NV_WEAK
+#elif defined(__GNUC__)
+#define NV_ALIGN(size) __attribute__ ((aligned (size)))
+#define NV_WEAK __attribute__((weak))
+#elif defined(__arm)
+#define NV_ALIGN(size) __align(size)
+#define NV_WEAK __weak
+#else
+#error Unknown compiler
+#endif
+
+/**
+ * This macro wraps its argument with the equivalent of "#if NV_DEBUG", but
+ * also can be used where "#ifdef"'s can't, like inside a macro.
+ */
+#if NV_DEBUG
+#define NV_DEBUG_CODE(x) x
+#else
+#define NV_DEBUG_CODE(x)
+#endif
+
+/** Macro for determining the size of an array */
+#define NV_ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
+
+/** Macro for taking min or max of a pair of numbers */
+#define NV_MIN(a,b) (((a) < (b)) ? (a) : (b))
+#define NV_MAX(a,b) (((a) > (b)) ? (a) : (b))
+
+/**
+ * By convention, we use this value to represent an infinite wait interval in
+ * APIs that expect a timeout argument. A value of zero should not be
+ * interpreted as infinite -- it should be interpreted as "time out immediately
+ * and simply check whether the event has already happened."
+ */
+#define NV_WAIT_INFINITE 0xFFFFFFFF
+
+// Macro to help with MSVC Code Analysis false positives
+#if defined(_PREFAST_)
+#define NV_ANALYSIS_ASSUME(x) __analysis_assume(x)
+#else
+#define NV_ANALYSIS_ASSUME(x)
+#endif
+
+#if NVOS_IS_LINUX_KERNEL
+// for do_div divide macro
+#include <asm/div64.h>
+#endif
+
+/**
+ * Performs the 64-bit division and returns the quotient.
+ *
+ * If the divisor is 0, returns 0.
+ *
+ * It is not gauranteed to have 64-bit divide on all the platforms. So,
+ * portable code should call this function instead of using / % operators on
+ * 64-bit variables.
+ */
+static NV_FORCE_INLINE NvU64
+NvDiv64Inline(NvU64 dividend, NvU32 divisor)
+{
+ if (!divisor) return 0;
+#if NVOS_IS_LINUX_KERNEL
+ /* Linux kernel cannot resolve compiler generated intrinsic for 64-bit divide
+ * Use OS defined wrappers instead */
+ do_div(dividend, divisor);
+ return dividend;
+#else
+ return dividend / divisor;
+#endif
+}
+
+#define NvDiv64(dividend, divisor) NvDiv64Inline(dividend, divisor)
+
+/**
+ * Union that can be used to view a 32-bit word as your choice of a 32-bit
+ * unsigned integer, a 32-bit signed integer, or an IEEE single-precision
+ * float. Here is an example of how you might use it to extract the (integer)
+ * bitwise representation of a floating-point number:
+ * NvData32 data;
+ * data.f = 1.0f;
+ * printf("%x", data.u);
+ */
+typedef union NvData32Rec
+{
+ NvU32 u;
+ NvS32 i;
+ NvF32 f;
+} NvData32;
+
+/**
+ * This structure is used to determine a location on a 2-dimensional object,
+ * where the coordinate (0,0) is located at the top-left of the object. The
+ * values of x and y are in pixels.
+ */
+typedef struct NvPointRec
+{
+ /** horizontal location of the point */
+ NvS32 x;
+
+ /** vertical location of the point */
+ NvS32 y;
+} NvPoint;
+
+/**
+ * This structure is used to define a 2-dimensional rectangle where the
+ * rectangle is bottom right exclusive (that is, the right most column, and the
+ * bottom row of the rectangle is not included).
+ */
+typedef struct NvRectRec
+{
+ /** left column of a rectangle */
+ NvS32 left;
+
+ /** top row of a rectangle*/
+ NvS32 top;
+
+ /** right column of a rectangle */
+ NvS32 right;
+
+ /** bottom row of a rectangle */
+ NvS32 bottom;
+} NvRect;
+
+/**
+ * This structure is used to define a 2-dimensional rectangle
+ * relative to some containing rectangle.
+ * Rectangle coordinates are normalized to [-1.0...+1.0] range
+ */
+typedef struct NvRectF32Rec
+{
+ NvF32 left;
+ NvF32 top;
+ NvF32 right;
+ NvF32 bottom;
+} NvRectF32;
+
+/**
+ * This structure is used to define a 2-dimensional surface where the surface is
+ * determined by it's height and width in pixels.
+ */
+typedef struct NvSizeRec
+{
+ /* width of the surface in pixels */
+ NvS32 width;
+
+ /* height of the surface in pixels */
+ NvS32 height;
+} NvSize;
+
+/** @} */
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif // INCLUDED_NVCOMMON_H
« no previous file with comments | « arch/arm/mach-tegra/nv/include/nvcolor.h ('k') | arch/arm/mach-tegra/nv/include/nvddk_kbc.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698