blob: ec5bb7b5107757243fb1dc610dc8081086a61af8 [file] [log] [blame]
/*
* Copyright (C) 2018 Synaptics Incorporated. 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.
*
* INFORMATION CONTAINED IN THIS DOCUMENT IS PROVIDED "AS-IS," AND
* SYNAPTICS EXPRESSLY DISCLAIMS ALL EXPRESS AND IMPLIED WARRANTIES,
* INCLUDING ANY IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE, AND ANY WARRANTIES OF NON-INFRINGEMENT OF ANY
* INTELLECTUAL PROPERTY RIGHTS. IN NO EVENT SHALL SYNAPTICS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, PUNITIVE, OR
* CONSEQUENTIAL DAMAGES ARISING OUT OF OR IN CONNECTION WITH THE USE
* OF THE INFORMATION CONTAINED IN THIS DOCUMENT, HOWEVER CAUSED AND
* BASED ON ANY THEORY OF LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* NEGLIGENCE OR OTHER TORTIOUS ACTION, AND EVEN IF SYNAPTICS WAS
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. IF A TRIBUNAL OF
* COMPETENT JURISDICTION DOES NOT PERMIT THE DISCLAIMER OF DIRECT
* DAMAGES OR ANY OTHER DAMAGES, SYNAPTICS' TOTAL CUMULATIVE LIABILITY
* TO ANY PARTY SHALL NOT EXCEED ONE HUNDRED U.S. DOLLARS.
*/
#ifndef __GALOIS_COMMON_H__
#define __GALOIS_COMMON_H__
/*!
* Bit field definitions
*/
#define NO_BIT 0x00000000
#define BIT0 0x00000001
#define BIT1 0x00000002
#define BIT2 0x00000004
#define BIT3 0x00000008
#define BIT4 0x00000010
#define BIT5 0x00000020
#define BIT6 0x00000040
#define BIT7 0x00000080
#define BIT8 0x00000100
#define BIT9 0x00000200
#define BIT10 0x00000400
#define BIT11 0x00000800
#define BIT12 0x00001000
#define BIT13 0x00002000
#define BIT14 0x00004000
#define BIT15 0x00008000
#define BIT16 0x00010000
#define BIT17 0x00020000
#define BIT18 0x00040000
#define BIT19 0x00080000
#define BIT20 0x00100000
#define BIT21 0x00200000
#define BIT22 0x00400000
#define BIT23 0x00800000
#define BIT24 0x01000000
#define BIT25 0x02000000
#define BIT26 0x04000000
#define BIT27 0x08000000
#define BIT28 0x10000000
#define BIT29 0x20000000
#define BIT30 0x40000000
#define BIT31 0x80000000
/*!
* Handy sizes
*/
#define _1K 0x00000400
#define _2K 0x00000800
#define _4K 0x00001000
#define _8K 0x00002000
#define _16K 0x00004000
#define _32K 0x00008000
#define _64K 0x00010000
#define _128K 0x00020000
#define _256K 0x00040000
#define _512K 0x00080000
#define _1M 0x00100000
#define _2M 0x00200000
#define _4M 0x00400000
#define _8M 0x00800000
#define _16M 0x01000000
#define _32M 0x02000000
#define _64M 0x04000000
#define _128M 0x08000000
#define _256M 0x10000000
#define _512M 0x20000000
#define _1G 0x40000000
#define _2G 0x80000000
/*!
* CPU cache information
*/
#define CPU_I_CACHE_LINE_SIZE 32 /* 2do: replace 32 with linux core macro */
#define CPU_D_CACHE_LINE_SIZE 32 /* 2do: replace 32 with linux core macro */
/*!
* Data cache flush one line
*/
# define mvOsCacheLineFlushInv(addr) \
do { \
__asm__ __volatile__ ("mcr p15, 0, %0, c7, c14, 1" : : "r" (addr)); \
} while (0)
# define mvOsCacheLineInv(addr) \
do { \
__asm__ __volatile__ ("mcr p15, 0, %0, c7, c6, 1" : : "r" (addr)); \
} while (0)
# define mvArmNop \
do { \
__asm__ __volatile__("nop"); \
} while (0)
/*!
* 16bit nibble swap. For example 0x1234 -> 0x2143
*/
#define MV_NIBBLE_SWAP_16BIT(X) (((X & 0xf) << 4) | ((X & 0xf0) >> 4) | ((X & 0xf00) << 4) | ((X & 0xf000) >> 4))
/*!
* 32bit nibble swap. For example 0x12345678 -> 0x21436587
*/
#define MV_NIBBLE_SWAP_32BIT(X) (((X & 0xf) << 4) | ((X & 0xf0) >> 4) | ((X & 0xf00) << 4) | ((X & 0xf000) >> 4) | \
((X & 0xf0000) << 4) | ((X & 0xf00000) >> 4) | ((X & 0xf000000) << 4) | ((X & 0xf0000000) >> 4))
/*!
* 16bit byte swap. For example 0x1122 -> 0x2211
*/
#define MV_BYTE_SWAP_16BIT(X) ((((X) & 0xff) << 8) | (((X) & 0xff00) >> 8))
/*!
* 32bit byte swap. For example 0x11223344 -> 0x44332211
*/
#define MV_BYTE_SWAP_32BIT(X) ((((X) & 0xff) << 24) | (((X) & 0xff00) << 8) | (((X) & 0xff0000) >> 8) | (((X) & 0xff000000) >> 24))
/*!
* 64bit byte swap. For example 0x11223344.55667788 -> 0x88776655.44332211
*/
#define MV_BYTE_SWAP_64BIT(X) ((MV_U64) ((((X) & 0xffULL) << 56) | (((X) & 0xff00ULL) << 40) | \
(((X) & 0xff0000ULL) << 24) | (((X) & 0xff000000ULL) << 8) | \
(((X) & 0xff00000000ULL) >> 8) | (((X) & 0xff0000000000ULL) >> 24) | \
(((X) & 0xff000000000000ULL) >> 40) | (((X) & 0xff00000000000000ULL) >> 56)))
# define MV_16BIT_LE(X) (X)
# define MV_32BIT_LE(X) (X)
# define MV_64BIT_LE(X) (X)
# define MV_16BIT_BE(X) MV_BYTE_SWAP_16BIT(X)
# define MV_32BIT_BE(X) MV_BYTE_SWAP_32BIT(X)
# define MV_64BIT_BE(X) MV_BYTE_SWAP_64BIT(X)
#endif /* __GALOIS_COMMON_H__ */