| Index: arch/arm/mach-tegra/nv/include/nvrm_hardware_access.h
|
| diff --git a/arch/arm/mach-tegra/nv/include/nvrm_hardware_access.h b/arch/arm/mach-tegra/nv/include/nvrm_hardware_access.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..497fd94e57a169ea472403d07e4f87a36a32aa76
|
| --- /dev/null
|
| +++ b/arch/arm/mach-tegra/nv/include/nvrm_hardware_access.h
|
| @@ -0,0 +1,151 @@
|
| +/*
|
| + * Copyright (c) 2007-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_NVRM_HARDWARE_ACCESS_H
|
| +#define INCLUDED_NVRM_HARDWARE_ACCESS_H
|
| +
|
| +#include "nvcommon.h"
|
| +#include "nvrm_init.h"
|
| +#include "nvos.h"
|
| +
|
| +#ifdef __cplusplus
|
| +extern "C"
|
| +{
|
| +#endif /* __cplusplus */
|
| +
|
| +#if !defined(NV_OAL)
|
| +#define NV_OAL 0
|
| +#endif
|
| +
|
| +// By default, sim is supported on WinXP/x86 and Linux/x86 builds only.
|
| +#if !defined(NV_DEF_ENVIRONMENT_SUPPORTS_SIM)
|
| +#if NVCPU_IS_X86 && ((NVOS_IS_WINDOWS && !NVOS_IS_WINDOWS_CE) || NVOS_IS_LINUX) && !NV_OAL
|
| +#define NV_DEF_ENVIRONMENT_SUPPORTS_SIM 1
|
| +#else
|
| +#define NV_DEF_ENVIRONMENT_SUPPORTS_SIM 0
|
| +#endif
|
| +#endif
|
| +
|
| +/**
|
| + * NV_WRITE* and NV_READ* - low level read/write api to hardware.
|
| + *
|
| + * These macros should be used to read and write registers and memory
|
| + * in NvDDKs so that the DDK will work on simulation and real hardware
|
| + * with no changes.
|
| + *
|
| + * This is for hardware modules that are NOT behind the host. Modules that
|
| + * are behind the host should use nvrm_channel.h.
|
| + *
|
| + * A DDK can obtain a mapping to its registers by using the
|
| + * NvRmPhysicalMemMap() function. This mapping is always uncached. The
|
| + * resulting pointer can then be used with NV_READ and NV_WRITE.
|
| + */
|
| +
|
| +/*
|
| + * Maps the given physical address to the user's virtual address space.
|
| + *
|
| + * @param phys The physical address to map into the virtual address space
|
| + * @param size The size of the mapping
|
| + * @param flags Any flags for the mapping -- exactly match's NVOS_MAP_*
|
| + * @param memType The memory mapping to use (uncached, write-combined, etc.)
|
| + * @param ptr Output -- the resulting virtual pointer
|
| + */
|
| +// FIXME: NvOs needs to take this up, however I think this is more
|
| +// complex than just mapping. E.G. does it map into the kernel vaddr, or
|
| +// the current process vaddr? And how does this work on windows and
|
| +// windows-ce?
|
| +NvError NvRmPhysicalMemMap(NvRmPhysAddr phys, size_t size, NvU32 flags,
|
| + NvOsMemAttribute memType, void **ptr );
|
| +
|
| +/*
|
| + * Unmaps the given virtual address from NvRmPhysicalMemMap.
|
| + */
|
| +void NvRmPhysicalMemUnmap(void *ptr, size_t size);
|
| +
|
| +/**
|
| + * NV_WRITE[8|16|32|64] - Writes N data bits to hardware.
|
| + *
|
| + * @param a The address to write.
|
| + * @param d The data to write.
|
| + */
|
| +
|
| +/**
|
| + * NV_READ[8|16|32|64] - Reads N bits from hardware.
|
| + *
|
| + * @param a The address to read.
|
| + */
|
| +
|
| +void NvWrite08(void *addr, NvU8 data);
|
| +void NvWrite16(void *addr, NvU16 data);
|
| +void NvWrite32(void *addr, NvU32 data);
|
| +void NvWrite64(void *addr, NvU64 data);
|
| +NvU8 NvRead08(void *addr);
|
| +NvU16 NvRead16(void *addr);
|
| +NvU32 NvRead32(void *addr);
|
| +NvU64 NvRead64(void *addr);
|
| +void NvWriteBlk(void *dst, const void *src, NvU32 length);
|
| +void NvReadBlk(void *dst, const void *src, NvU32 length);
|
| +
|
| +#if NV_DEF_ENVIRONMENT_SUPPORTS_SIM == 1
|
| +
|
| +#define NV_WRITE08(a,d) NvWrite08((void *)(a),(d))
|
| +#define NV_WRITE16(a,d) NvWrite16((void *)(a),(d))
|
| +#define NV_WRITE32(a,d) NvWrite32((void *)(a),(d))
|
| +#define NV_WRITE64(a,d) NvWrite64((void *)(a),(d))
|
| +#define NV_READ8(a) NvRead08((void *)(a))
|
| +#define NV_READ16(a) NvRead16((void *)(a))
|
| +#define NV_READ32(a) NvRead32((void *)(a))
|
| +#define NV_READ64(a) NvRead64((void *)(a))
|
| +#define NV_WRITE(dst, src, len) NvWriteBlk(dst, src, len)
|
| +#define NV_READ(dst, src, len) NvReadBlk(dst, src, len)
|
| +
|
| +#else
|
| +/* connected to hardware */
|
| +
|
| +#define NV_WRITE08(a,d) *((volatile NvU8 *)(a)) = (d)
|
| +#define NV_WRITE16(a,d) *((volatile NvU16 *)(a)) = (d)
|
| +#define NV_WRITE32(a,d) *((volatile NvU32 *)(a)) = (d)
|
| +#define NV_WRITE64(a,d) *((volatile NvU64 *)(a)) = (d)
|
| +#define NV_READ8(a) *((const volatile NvU8 *)(a))
|
| +#define NV_READ16(a) *((const volatile NvU16 *)(a))
|
| +#define NV_READ32(a) *((const volatile NvU32 *)(a))
|
| +#define NV_READ64(a) *((const volatile NvU64 *)(a))
|
| +#define NV_WRITE(dst, src, len) NvOsMemcpy(dst, src, len)
|
| +#define NV_READ(dst, src, len) NvOsMemcpy(dst, src, len)
|
| +
|
| +#endif // !hardware
|
| +
|
| +#ifdef __cplusplus
|
| +}
|
| +#endif /* __cplusplus */
|
| +
|
| +#endif // INCLUDED_NVRM_HARDWARE_ACCESS_H
|
|
|