86 lines
2.8 KiB
C
Executable File
86 lines
2.8 KiB
C
Executable File
/*
|
|
* Copyright (C) 2019 Spreadtrum Communications Inc.
|
|
*
|
|
* This software is licensed under the terms of the GNU General Public
|
|
* License version 2, as published by the Free Software Foundation, and
|
|
* may be copied, distributed, and modified under those terms.
|
|
*
|
|
* 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.
|
|
*/
|
|
|
|
#ifndef __SIPC_BIG_TO_LITTLE_H
|
|
#define __SIPC_BIG_TO_LITTLE_H
|
|
//#define CONFIG_SIPC_BIG_TO_LITTLE /* sipc little */
|
|
|
|
#define BL_READB(addr) \
|
|
({ unsigned char __v = (*(volatile unsigned char *) (addr)); __v; })
|
|
#define BL_WRITEB(b,addr) (void)((*(volatile unsigned int *) (addr)) = (b))
|
|
|
|
#define BL_GETB(v) ((v))
|
|
#define BL_SETB(v, b) ((v) = (b))
|
|
|
|
|
|
#ifdef CONFIG_SIPC_BIG_TO_LITTLE
|
|
/* little 0x78563412
|
|
0x12
|
|
0x34
|
|
0x56
|
|
0x78
|
|
read:
|
|
big: 0x12345678==>0x78563412
|
|
write: 0x78563412 ===> 0x12345678*/
|
|
#define BL_READW(addr) \
|
|
({ unsigned short __t = (*(volatile unsigned short *) (addr)); \
|
|
unsigned short __v = ((__t & 0x00ff) << 8) + ((__t & 0xff00) >> 8); \
|
|
__v; })
|
|
#define BL_READL(addr) \
|
|
({ unsigned int __t = (*(volatile unsigned int *) (addr)); \
|
|
unsigned int __v = ((__t & 0x000000ff) << 24) + ((__t & 0x0000ff00) << 8) + \
|
|
((__t & 0x00ff0000) >> 8) + ((__t & 0xff000000) >> 24); \
|
|
__v; })
|
|
|
|
#define BL_WRITEW(b,addr) \
|
|
({ unsigned short __v = (((b) & 0x00ff) << 8) + (((b) & 0xff00) >> 8); \
|
|
(*(volatile unsigned short *) (addr)) = __v; })
|
|
|
|
#define BL_WRITEL(b,addr) \
|
|
({ unsigned int __v = (((b) & 0x000000ff) << 24) + (((b) & 0xff00) >> 8) + \
|
|
(((b) & 0x00ff0000) >> 8) + (((b) & 0xff000000) >> 24); \
|
|
(*(volatile unsigned int *) (addr)) = __v; })
|
|
|
|
#define BL_GETL(v) \
|
|
({unsigned int __v = (((v) & 0x000000ff) << 24) + (((v) & 0x0000ff00) << 8) + \
|
|
(((v) & 0x00ff0000) >> 8) + (((v) & 0xff000000) >> 24); \
|
|
__v; })
|
|
#define BL_SETL(v, b) \
|
|
((v) = (((b) & 0x000000ff) << 24) + (((b) & 0x0000ff00) << 8) + \
|
|
(((b) & 0x00ff0000) >> 8) + (((b) & 0xff000000) >> 24))
|
|
#define BL_GETW(v) \
|
|
({unsigned int __v = (((v) & 0x00ff) << 8) + (((v) & 0xff00) >> 8); \
|
|
__v; })
|
|
#define BL_SETW(v, b) \
|
|
((v) = (((b) & 0x00ff) << 8) + (((b) & 0xff00) >> 8))
|
|
|
|
#else
|
|
#define BL_GETW(v) v
|
|
#define BL_GETL(v) v
|
|
|
|
#define BL_SETW(v, b) ((v) = (b))
|
|
#define BL_SETL(v, b) ((v) = (b))
|
|
|
|
#define BL_READW(addr) \
|
|
({ unsigned short __v = (*(volatile unsigned short *) (addr)); __v; })
|
|
#define BL_READL(addr) \
|
|
({ unsigned int __v = (*(volatile unsigned int *) (addr)); __v; })
|
|
|
|
#define BL_WRITEW(b,addr) (void)((*(volatile unsigned short *) (addr)) = (b))
|
|
#define BL_WRITEL(b,addr) (void)((*(volatile unsigned int *) (addr)) = (b))
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|