msm-2.6.38: tag AU_LINUX_ANDROID_GINGERBREAD.02.03.04.00.142 Signed-off-by: Bryan Huntsman <bryanh@codeaurora.org>
106 lines
4.3 KiB
C
106 lines
4.3 KiB
C
/* Copyright (c) 2010, Code Aurora Forum. All rights reserved.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2 and
|
|
* only version 2 as published by the Free Software Foundation.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
*/
|
|
|
|
/* Architecture-specific VCM functions */
|
|
|
|
/* Device attributes */
|
|
|
|
/*
|
|
* Sharing attributes. Pick only one.
|
|
*/
|
|
#define VCM_DEV_ATTR_NON_SH (0x00)
|
|
#define VCM_DEV_ATTR_SH (0x04)
|
|
|
|
/*
|
|
* Caching attributes. Pick only one.
|
|
*/
|
|
#define VCM_DEV_ATTR_NONCACHED (0x00)
|
|
#define VCM_DEV_ATTR_CACHED_WB_WA (0x01)
|
|
#define VCM_DEV_ATTR_CACHED_WB_NWA (0x02)
|
|
#define VCM_DEV_ATTR_CACHED_WT (0x03)
|
|
|
|
/*
|
|
* A "good" default set of attributes: shareable and non-cacheable.
|
|
*/
|
|
#define VCM_DEV_DEFAULT_ATTR (VCM_DEV_ATTR_SH | VCM_DEV_ATTR_NONCACHED)
|
|
|
|
/**
|
|
* set_arm7_pte_attr() - Set ARMv7 page table attributes
|
|
* pt_base Virtual address of the first-level page table
|
|
* @va Virtual address whose attributes are to be set
|
|
* @len Page size used to map the given virtual address
|
|
* @attr Attributes to set for this mapping.
|
|
*
|
|
* Modify a mapping attribute. The base address of the page table must
|
|
* be a virtual address containing a valid ARMv7 page table. The
|
|
* virtual address must refer to an existing mapping and must be
|
|
* aligned to the length with which it was mapped. The mapping length
|
|
* must similarly be the same as was specified when the mapping was
|
|
* made (one of 4KB, 64KB, 1MB, or 16MB). The attribute must be one of
|
|
* the shareability attributes above ORed with one of the cacheability
|
|
* attributes. Any previous attributes are completely replaced by the
|
|
* most recent call to this function. This function only sets the
|
|
* cacheability and shareability attributes. This is accomplished by
|
|
* modifying the TEX class and the S bit in the PTE. It is an error to
|
|
* call this function without having called vcm_setup_tex_classes at
|
|
* least once.
|
|
*
|
|
* The return value is zero on success and non-zero on failure.
|
|
*/
|
|
int set_arm7_pte_attr(unsigned long pt_base, unsigned long va,
|
|
unsigned long len, unsigned int attr);
|
|
|
|
|
|
/**
|
|
* cpu_set_attr() - Set page table attributes on the CPU's page tables
|
|
* @va Virtual address whose attributes are to be set
|
|
* @len Page size used to map the given virtual address
|
|
* @attr Attributes to set for this mapping.
|
|
*
|
|
* Modify a mapping attribute within the ARM page tables. The va must
|
|
* refer to an existing mapping and must be aligned to the length with
|
|
* which it was mapped. The mapping length must similarly be the same
|
|
* as was specified when the mapping was made (one of 4KB, 64KB, 1MB,
|
|
* or 16MB). The attribute must be one of the shareability attributes
|
|
* above ORed with one of the cacheability attributes. Any previous
|
|
* attributes are completely replaced by the most recent call to this
|
|
* function. This function only sets the cacheability and shareability
|
|
* attributes. This is accomplished by modifying the TEX class and the
|
|
* S bit in the PTE. It is an error to call this function without
|
|
* having called vcm_setup_tex_classes at least once. It is an error
|
|
* to call this function on any system using a memory configuration
|
|
* that is anything OTHER than ARMv7 with TEX remap enabled. Only the
|
|
* HW page tables are modified; the Linux page tables are left
|
|
* untouched.
|
|
*
|
|
* The return value is zero on success and non-zero on failure.
|
|
*/
|
|
int cpu_set_attr(unsigned long va, unsigned long len, unsigned int attr);
|
|
|
|
|
|
/**
|
|
* vcm_setup_tex_classes() - Prepare TEX class table for use
|
|
*
|
|
* Initialize the attribute mapping table by examining the TEX classes
|
|
* used by the CPU and finding the classes that match the device
|
|
* attributes (VCM_DEV_xx) defined above. This function is only
|
|
* relevant if TEX remap is enabled. The results will be unpredictable
|
|
* and irrelevant if TEX remap is not in use. It is an error to call
|
|
* this function in any system using a memory configuration of
|
|
* anything OTHER than ARMv7 with TEX remap enabled.
|
|
*
|
|
* The return value is zero on success or non-zero on failure. In the
|
|
* present version, a failure will result in a panic.
|
|
*/
|
|
int vcm_setup_tex_classes(void);
|