aboutsummaryrefslogtreecommitdiffstats
path: root/security/smc/omap4/scxlnx_defs.h
diff options
context:
space:
mode:
Diffstat (limited to 'security/smc/omap4/scxlnx_defs.h')
-rw-r--r--security/smc/omap4/scxlnx_defs.h539
1 files changed, 0 insertions, 539 deletions
diff --git a/security/smc/omap4/scxlnx_defs.h b/security/smc/omap4/scxlnx_defs.h
deleted file mode 100644
index a6dcb9c..0000000
--- a/security/smc/omap4/scxlnx_defs.h
+++ /dev/null
@@ -1,539 +0,0 @@
-/*
- * Copyright (c) 2006-2010 Trusted Logic S.A.
- * 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 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.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-#ifndef __SCXLNX_DEFS_H__
-#define __SCXLNX_DEFS_H__
-
-#include <asm/atomic.h>
-#include <linux/version.h>
-#include <linux/fs.h>
-#include <linux/cdev.h>
-#include <linux/completion.h>
-#include <linux/list.h>
-#include <linux/spinlock.h>
-#include <linux/sysdev.h>
-#include <linux/sysfs.h>
-#include <linux/sched.h>
-#include <linux/semaphore.h>
-#ifdef CONFIG_HAS_WAKELOCK
-#include <linux/wakelock.h>
-#endif
-
-#include "scx_protocol.h"
-
-/*----------------------------------------------------------------------------*/
-
-#define SIZE_1KB 0x400
-
-/*
- * Maximum number of shared memory blocks that can be reigsters in a connection
- */
-#define SCXLNX_SHMEM_MAX_COUNT (64)
-
-/*
- * Describes the possible types of shared memories
- *
- * SCXLNX_SHMEM_TYPE_PREALLOC_REGISTERED_SHMEM :
- * The descriptor describes a registered shared memory.
- * Its coarse pages are preallocated when initializing the
- * connection
- * SCXLNX_SHMEM_TYPE_REGISTERED_SHMEM :
- * The descriptor describes a registered shared memory.
- * Its coarse pages are not preallocated
- * SCXLNX_SHMEM_TYPE_PM_HIBERNATE :
- * The descriptor describes a power management shared memory.
- */
-enum SCXLNX_SHMEM_TYPE {
- SCXLNX_SHMEM_TYPE_PREALLOC_REGISTERED_SHMEM = 0,
- SCXLNX_SHMEM_TYPE_REGISTERED_SHMEM,
- SCXLNX_SHMEM_TYPE_PM_HIBERNATE,
-};
-
-
-/*
- * This structure contains a pointer on a coarse page table
- */
-struct SCXLNX_COARSE_PAGE_TABLE {
- /*
- * Identifies the coarse page table descriptor in
- * sFreeCoarsePageTables list
- */
- struct list_head list;
-
- /*
- * The address of the coarse page table
- */
- u32 *pDescriptors;
-
- /*
- * The address of the array containing this coarse page table
- */
- struct SCXLNX_COARSE_PAGE_TABLE_ARRAY *pParent;
-};
-
-
-#define SCXLNX_PAGE_DESCRIPTOR_TYPE_NORMAL 0
-#define SCXLNX_PAGE_DESCRIPTOR_TYPE_PREALLOCATED 1
-
-/*
- * This structure describes an array of up to 4 coarse page tables
- * allocated within a single 4KB page.
- */
-struct SCXLNX_COARSE_PAGE_TABLE_ARRAY {
- /*
- * identifies the element in the sCoarsePageTableArrays list
- */
- struct list_head list;
-
- /*
- * Type of page descriptor
- * can take any of SCXLNX_PAGE_DESCRIPTOR_TYPE_XXX value
- */
- u32 nType;
-
- struct SCXLNX_COARSE_PAGE_TABLE sCoarsePageTables[4];
-
- /*
- * A counter of the number of coarse pages currently used
- * the max value should be 4 (one coarse page table is 1KB while one
- * page is 4KB)
- */
- u8 nReferenceCount;
-};
-
-
-/*
- * This structure describes a list of coarse page table arrays
- * with some of the coarse page tables free. It is used
- * when the driver needs to allocate a new coarse page
- * table.
- */
-struct SCXLNX_COARSE_PAGE_TABLE_ALLOCATION_CONTEXT {
- /*
- * The spin lock protecting concurrent access to the structure.
- */
- spinlock_t lock;
-
- /*
- * The list of allocated coarse page table arrays
- */
- struct list_head sCoarsePageTableArrays;
-
- /*
- * The list of free coarse page tables
- */
- struct list_head sFreeCoarsePageTables;
-};
-
-
-/*
- * Fully describes a shared memory block
- */
-struct SCXLNX_SHMEM_DESC {
- /*
- * Identifies the shared memory descriptor in the list of free shared
- * memory descriptors
- */
- struct list_head list;
-
- /*
- * Identifies the type of shared memory descriptor
- */
- enum SCXLNX_SHMEM_TYPE nType;
-
- /*
- * The identifier of the block of shared memory, as returned by the
- * Secure World.
- * This identifier is hBlock field of a REGISTER_SHARED_MEMORY answer
- */
- u32 hIdentifier;
-
- /* Client buffer */
- u8 *pBuffer;
-
- /* Up to eight coarse page table context */
- struct SCXLNX_COARSE_PAGE_TABLE *pCoarsePageTable[SCX_MAX_COARSE_PAGES];
-
- u32 nNumberOfCoarsePageTables;
-
- /* Reference counter */
- atomic_t nRefCnt;
-};
-
-
-/*----------------------------------------------------------------------------*/
-
-/*
- * This structure describes the communication with the Secure World
- *
- * Note that this driver supports only one instance of the Secure World
- */
-struct SCXLNX_COMM {
- /*
- * The spin lock protecting concurrent access to the structure.
- */
- spinlock_t lock;
-
- /*
- * Bit vector with the following possible flags:
- * - SCXLNX_COMM_FLAG_IRQ_REQUESTED: If set, indicates that
- * the IRQ has been successfuly requested.
- * - SCXLNX_COMM_FLAG_TERMINATING: If set, indicates that the
- * communication with the Secure World is being terminated.
- * Transmissions to the Secure World are not permitted
- * - SCXLNX_COMM_FLAG_W3B_ALLOCATED: If set, indicates that the
- * W3B buffer has been allocated.
- *
- * This bit vector must be accessed with the kernel's atomic bitwise
- * operations.
- */
- unsigned long nFlags;
-
- /*
- * The virtual address of the L1 shared buffer.
- */
- struct SCHANNEL_C1S_BUFFER *pBuffer;
-
- /*
- * The wait queue the client threads are waiting on.
- */
- wait_queue_head_t waitQueue;
-
-#ifdef CONFIG_TF_TRUSTZONE
- /*
- * The interrupt line used by the Secure World.
- */
- int nSoftIntIrq;
-
- /* ----- W3B ----- */
- /* shared memory descriptor to identify the W3B */
- struct SCXLNX_SHMEM_DESC sW3BShmemDesc;
-
- /* Virtual address of the kernel allocated shared memory */
- u32 nW3BShmemVAddr;
-
- /* offset of data in shared memory coarse pages */
- u32 nW3BShmemOffset;
-
- u32 nW3BShmemSize;
-
- struct SCXLNX_COARSE_PAGE_TABLE_ALLOCATION_CONTEXT
- sW3BAllocationContext;
-#endif
-#ifdef CONFIG_TF_MSHIELD
- /*
- * The SE SDP can only be initialized once...
- */
- int bSEInitialized;
-
- /* Virtual address of the L0 communication buffer */
- void *pInitSharedBuffer;
-
- /*
- * Lock to be held by a client when executing an RPC
- */
- struct mutex sRPCLock;
-
- /*
- * Lock to protect concurrent accesses to DMA channels
- */
- struct mutex sDMALock;
-#endif
-};
-
-
-#define SCXLNX_COMM_FLAG_IRQ_REQUESTED (0)
-#define SCXLNX_COMM_FLAG_PA_AVAILABLE (1)
-#define SCXLNX_COMM_FLAG_TERMINATING (2)
-#define SCXLNX_COMM_FLAG_W3B_ALLOCATED (3)
-#define SCXLNX_COMM_FLAG_L1_SHARED_ALLOCATED (4)
-
-/*----------------------------------------------------------------------------*/
-
-struct SCXLNX_DEVICE_STATS {
- struct kobject kobj;
-
- struct kobj_type kobj_type;
-
- struct attribute kobj_stat_attribute;
-
- struct attribute *kobj_attribute_list[2];
-
- atomic_t stat_pages_allocated;
- atomic_t stat_memories_allocated;
- atomic_t stat_pages_locked;
-};
-
-/*
- * This structure describes the information about one device handled by the
- * driver. Note that the driver supports only a single device. see the global
- * variable g_SCXLNXDevice
- */
-struct SCXLNX_DEVICE {
- /*
- * The device number for the device.
- */
- dev_t nDevNum;
-
- /*
- * Interfaces the system device with the kernel.
- */
- struct sys_device sysdev;
-
- /*
- * Interfaces the char device with the kernel.
- */
- struct cdev cdev;
-
-#ifdef CONFIG_TF_MSHIELD
- struct cdev cdev_ctrl;
-
- /*
- * Globals for CUS
- */
- /* Current key handles loaded in HWAs */
- u32 hAES1SecureKeyContext;
- u32 hAES2SecureKeyContext;
- u32 hDESSecureKeyContext;
- bool bSHAM1IsPublic;
-
- /* Semaphores used to serialize HWA accesses */
- struct semaphore sAES1CriticalSection;
- struct semaphore sAES2CriticalSection;
- struct mutex sDESCriticalSection;
- struct mutex sSHACriticalSection;
-
- /*
- * An aligned and correctly shaped pre-allocated buffer used for DMA
- * transfers
- */
- u32 nDMABufferLength;
- u8 *pDMABuffer;
- dma_addr_t pDMABufferPhys;
-
- /* Workspace allocated at boot time and reserved to the Secure World */
- u32 nWorkspaceAddr;
- u32 nWorkspaceSize;
-#endif
-
- /*
- * Communications with the SM.
- */
- struct SCXLNX_COMM sm;
-
- /*
- * Lists the connections attached to this device. A connection is
- * created each time a user space application "opens" a file descriptor
- * on the driver
- */
- struct list_head conns;
-
- /*
- * The spin lock used to protect concurrent access to the connection
- * list.
- */
- spinlock_t connsLock;
-
- struct SCXLNX_DEVICE_STATS sDeviceStats;
-
- /*
- * A Mutex to provide exlusive locking of the ioctl()
- */
- struct mutex dev_mutex;
-};
-
-/* the bits of the nFlags field of the SCXLNX_DEVICE structure */
-#define SCXLNX_DEVICE_FLAG_CDEV_INITIALIZED (0)
-#define SCXLNX_DEVICE_FLAG_SYSDEV_CLASS_REGISTERED (1)
-#define SCXLNX_DEVICE_FLAG_SYSDEV_REGISTERED (2)
-#define SCXLNX_DEVICE_FLAG_CDEV_REGISTERED (3)
-#define SCXLNX_DEVICE_FLAG_CDEV_ADDED (4)
-#define SCXLNX_DEVICE_SYSFS_REGISTERED (5)
-
-/*----------------------------------------------------------------------------*/
-/*
- * This type describes a connection state.
- * This is used to determine whether a message is valid or not.
- *
- * Messages are only valid in a certain device state.
- * Messages may be invalidated between the start of the ioctl call and the
- * moment the message is sent to the Secure World.
- *
- * SCXLNX_CONN_STATE_NO_DEVICE_CONTEXT :
- * The connection has no DEVICE_CONTEXT created and no
- * CREATE_DEVICE_CONTEXT being processed by the Secure World
- * SCXLNX_CONN_STATE_CREATE_DEVICE_CONTEXT_SENT :
- * The connection has a CREATE_DEVICE_CONTEXT being processed by the Secure
- * World
- * SCXLNX_CONN_STATE_VALID_DEVICE_CONTEXT :
- * The connection has a DEVICE_CONTEXT created and no
- * DESTROY_DEVICE_CONTEXT is being processed by the Secure World
- * SCXLNX_CONN_STATE_DESTROY_DEVICE_CONTEXT_SENT :
- * The connection has a DESTROY_DEVICE_CONTEXT being processed by the Secure
- * World
- */
-enum SCXLNX_CONN_STATE {
- SCXLNX_CONN_STATE_NO_DEVICE_CONTEXT = 0,
- SCXLNX_CONN_STATE_CREATE_DEVICE_CONTEXT_SENT,
- SCXLNX_CONN_STATE_VALID_DEVICE_CONTEXT,
- SCXLNX_CONN_STATE_DESTROY_DEVICE_CONTEXT_SENT
-};
-
-
-/*
- * This type describes the status of the command.
- *
- * PENDING:
- * The initial state; the command has not been sent yet.
- * SENT:
- * The command has been sent, we are waiting for an answer.
- * ABORTED:
- * The command cannot be sent because the device context is invalid.
- * Note that this only covers the case where some other thread
- * sent a DESTROY_DEVICE_CONTEXT command.
- */
-enum SCXLNX_COMMAND_STATE {
- SCXLNX_COMMAND_STATE_PENDING = 0,
- SCXLNX_COMMAND_STATE_SENT,
- SCXLNX_COMMAND_STATE_ABORTED
-};
-
-
-/*
- * This structure describes a connection to the driver
- * A connection is created each time an application opens a file descriptor on
- * the driver
- */
-struct SCXLNX_CONNECTION {
- /*
- * Identifies the connection in the list of the connections attached to
- * the same device.
- */
- struct list_head list;
-
- /*
- * State of the connection.
- */
- enum SCXLNX_CONN_STATE nState;
-
- /*
- * A pointer to the corresponding device structure
- */
- struct SCXLNX_DEVICE *pDevice;
-
- /*
- * A spinlock to use to access nState
- */
- spinlock_t stateLock;
-
- /*
- * Counts the number of operations currently pending on the connection.
- * (for debug only)
- */
- atomic_t nPendingOpCounter;
-
- /*
- * A handle for the device context
- */
- u32 hDeviceContext;
-
- /*
- * Lists the used shared memory descriptors
- */
- struct list_head sUsedSharedMemoryList;
-
- /*
- * Lists the free shared memory descriptors
- */
- struct list_head sFreeSharedMemoryList;
-
- /*
- * A mutex to use to access this structure
- */
- struct mutex sharedMemoriesMutex;
-
- /*
- * Counts the number of shared memories registered.
- */
- atomic_t nShmemAllocated;
-
- /*
- * Page to retrieve memory properties when
- * registering shared memory through REGISTER_SHARED_MEMORY
- * messages
- */
- struct vm_area_struct **ppVmas;
-
- /*
- * coarse page table allocation context
- */
- struct SCXLNX_COARSE_PAGE_TABLE_ALLOCATION_CONTEXT sAllocationContext;
-
-#ifdef CONFIG_TF_MSHIELD
- /* Lists all the Cryptoki Update Shortcuts */
- struct list_head ShortcutList;
-
- /* Lock to protect concurrent accesses to ShortcutList */
- spinlock_t shortcutListCriticalSectionLock;
-#endif
-};
-
-/*----------------------------------------------------------------------------*/
-
-/*
- * The nOperationID field of a message points to this structure.
- * It is used to identify the thread that triggered the message transmission
- * Whoever reads an answer can wake up that thread using the completion event
- */
-struct SCXLNX_ANSWER_STRUCT {
- bool bAnswerCopied;
- union SCX_ANSWER_MESSAGE *pAnswer;
-};
-
-/*----------------------------------------------------------------------------*/
-
-/**
- * The ASCII-C string representation of the base name of the devices managed by
- * this driver.
- */
-#define SCXLNX_DEVICE_BASE_NAME "tf_driver"
-
-
-/**
- * The major and minor numbers of the registered character device driver.
- * Only 1 instance of the driver is supported.
- */
-#define SCXLNX_DEVICE_MINOR_NUMBER (0)
-
-struct SCXLNX_DEVICE *SCXLNXGetDevice(void);
-
-#define CLEAN_CACHE_CFG_MASK (~0xC) /* 1111 0011 */
-
-/*----------------------------------------------------------------------------*/
-/*
- * Kernel Differences
- */
-
-#ifdef CONFIG_ANDROID
-#define GROUP_INFO get_current_groups()
-#else
-#define GROUP_INFO (current->group_info)
-#endif
-
-#endif /* !defined(__SCXLNX_DEFS_H__) */