/* * Copyright (c) 2007-2017 Allwinnertech Co., Ltd. * * 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 __NAND_OSAL_H__ #define __NAND_OSAL_H__ #ifndef __s8 typedef signed char __s8; #endif #ifndef _s8 typedef signed char _s8; #endif #ifndef s8 typedef signed char s8; #endif #ifndef S8 typedef signed char S8; #endif #ifndef sint8 typedef signed char sint8; #endif #ifndef SINT8 typedef signed char SINT8; #endif #ifndef int8 typedef signed char int8; #endif #ifndef INT8 typedef signed char INT8; #endif #ifndef __u8 typedef unsigned char __u8; #endif #ifndef _u8 typedef unsigned char _u8; #endif #ifndef u8 typedef unsigned char u8; #endif #ifndef U8 typedef unsigned char U8; #endif #ifndef uint8 typedef unsigned char uint8; #endif #ifndef UINT8 typedef unsigned char UINT8; #endif #ifndef uchar typedef unsigned char uchar; #endif #ifndef UCHAR typedef unsigned char UCHAR; #endif #ifndef __s16 typedef signed short __s16; #endif #ifndef _s16 typedef signed short _s16; #endif #ifndef s16 typedef signed short s16; #endif #ifndef S16 typedef signed short S16; #endif #ifndef sint16 typedef signed short sint16; #endif #ifndef int16 typedef signed short int16; #endif #ifndef INT16 typedef signed short INT16; #endif #ifndef __u16 typedef unsigned short __u16; #endif #ifndef _u16 typedef unsigned short _u16; #endif #ifndef u16 typedef unsigned short u16; #endif #ifndef U16 typedef unsigned short U16; #endif #ifndef uint16 typedef unsigned short uint16; #endif #ifndef UINT16 typedef unsigned short UINT16; #endif #ifndef __s32 typedef signed int __s32; #endif #ifndef _s32 typedef signed int _s32; #endif #ifndef s32 typedef signed int s32; #endif #ifndef S32 typedef signed int S32; #endif #ifndef int32 typedef signed int int32; #endif #ifndef INT32 typedef signed int INT32; #endif #ifndef sint32 typedef signed int sint32; #endif #ifndef SINT32 typedef signed int SINT32; #endif #ifndef __u32 typedef unsigned int __u32; #endif #ifndef _u32 typedef unsigned int _u32; #endif #ifndef u32 typedef unsigned int u32; #endif #ifndef U32 typedef unsigned int U32; #endif #ifndef uint32 typedef unsigned int uint32; #endif #ifndef UINT32 typedef unsigned int UINT32; #endif #ifndef __s64 typedef signed long long __s64; #endif #ifndef _s64 typedef signed long long _s64; #endif #ifndef s64 typedef signed long long s64; #endif #ifndef S64 typedef signed long long S64; #endif #ifndef sint64 typedef signed long long sint64; #endif #ifndef SINT64 typedef signed long long SINT64; #endif #ifndef int64 typedef signed long long int64; #endif #ifndef INT64 typedef signed long long INT64; #endif #ifndef __u64 typedef unsigned long long __u64; #endif #ifndef _u64 typedef unsigned long long _u64; #endif #ifndef u64 typedef unsigned long long u64; #endif #ifndef U64 typedef unsigned long long U64; #endif #ifndef uint64 typedef unsigned long long uint64; #endif #ifndef UINT64 typedef unsigned long long UINT64; #endif #ifndef NULL #define NULL ((void *)0) #endif #define FACTORY_BAD_BLOCK_ERROR 159 #define BYTES_PER_SECTOR 512 #define SHIFT_PER_SECTOR 9 #define BYTES_OF_USER_PER_PAGE 16 #define MIN_BYTES_OF_USER_PER_PAGE 16 extern void start_time(void); extern int end_time(int data, int time, int par); extern void *NAND_IORemap(void *base_addr, unsigned int size); // USE_SYS_CLK extern int NAND_ClkRequest(__u32 nand_index); extern void NAND_ClkRelease(__u32 nand_index); extern int NAND_SetClk(__u32 nand_index, __u32 nand_clk0, __u32 nand_clk1); extern int NAND_GetClk(__u32 nand_index, __u32 *pnand_clk0, __u32 *pnand_clk1); extern __s32 NAND_CleanFlushDCacheRegion(void *buff_addr, __u32 len); extern __s32 NAND_InvaildDCacheRegion(__u32 rw, __u32 buff_addr, __u32 len); extern void *NAND_DMASingleMap(__u32 rw, void *buff_addr, __u32 len); extern void *NAND_DMASingleUnmap(__u32 rw, void *buff_addr, __u32 len); extern int nand_dma_config_start(__u32 rw, int addr, __u32 length); extern int nand_request_dma(void); extern int spinand_request_tx_dma(void); extern int spinand_request_rx_dma(void); extern int spinand_releasetxdma(void); extern int spinand_releaserxdma(void); extern void *NAND_VA_TO_PA(void *buff_addr); extern __s32 NAND_PIORequest(__u32 nand_index); extern __s32 NAND_Check_3DNand(void); extern void NAND_PIORelease(__u32 nand_index); extern __u32 NAND_GetNandExtPara(__u32 para_num); extern __u32 NAND_GetNandIDNumCtrl(void); extern int NAND_GetVoltage(void); extern int NAND_ReleaseVoltage(void); extern void NAND_Memset(void *pAddr, unsigned char value, unsigned int len); extern void NAND_Memcpy(void *pAddr_dst, void *pAddr_src, unsigned int len); extern int NAND_Memcmp(void *pAddr_dst, void *pAddr_src, unsigned int len); extern void *NAND_Malloc(unsigned int Size); extern void NAND_Free(void *pAddr, unsigned int Size); extern int NAND_Print(const char *fmt, ...); extern int NAND_Print_DBG(const char *fmt, ...); extern void *phy_malloc(uint32 size); extern void phy_free(const void *ptr); extern void nand_cond_resched(void); extern void *RAWNAND_GetIOBaseAddrCH0(void); extern void *RAWNAND_GetIOBaseAddrCH1(void); extern void *SPINAND_GetIOBaseAddrCH0(void); extern void *SPINAND_GetIOBaseAddrCH1(void); extern __u32 NAND_GetNdfcVersion(void); extern __u32 NAND_GetNdfcDmaMode(void); extern __u32 NAND_GetMaxChannelCnt(void); // extern void *NAND_GetIOBaseAddr(void); extern __u32 get_storage_type(void); /*nand:1 spi nand:2*/ extern int NAND_PhysicLockInit(void); extern int NAND_PhysicLock(void); extern int NAND_PhysicUnLock(void); extern int NAND_PhysicLockExit(void); #define NAND_IO_BASE_ADDR0 (NAND_GetIOBaseAddrCH0()) #define NAND_IO_BASE_ADDR1 (NAND_GetIOBaseAddrCH1()) extern __s32 nand_rb_wait_time_out(__u32 no, __u32 *flag); extern __s32 nand_rb_wake_up(__u32 no); extern __s32 nand_dma_wait_time_out(__u32 no, __u32 *flag); extern __s32 nand_dma_wake_up(__u32 no); extern int NAND_IS_Secure_sys(void); extern void NAND_Print_Version(void); extern void Dump_Gpio_Reg_Show(void); extern void Dump_Ccmu_Reg_Show(void); // extern __u32 nand_wait_rb_before(void); // extern __u32 nand_wait_rb_mode(void); // extern __u32 nand_wait_dma_mode(void); // extern __u32 nand_support_two_plane(void); // extern __u32 nand_support_vertical_interleave(void); // extern __u32 nand_support_dual_channel(void); // define the memory set interface #define MEMSET(x, y, z) NAND_Memset((x), (y), (z)) // define the memory copy interface #define MEMCPY(x, y, z) NAND_Memcpy((x), (y), (z)) #define MEMCMP(x, y, z) NAND_Memcmp((x), (y), (z)) // define the memory allocate interface #define MALLOC(x) NAND_Malloc((x)) // define the memory release interface #define FREE(x, size) NAND_Free((x), (size)) // define the message print interface #define PRINT NAND_Print #define PRINT_DBG NAND_Print_DBG #define PHY_DBG_MESSAGE_ON 1 #define PHY_ERR_MESSAGE_ON 1 #if PHY_DBG_MESSAGE_ON #define PHY_DBG(...) PRINT_DBG(__VA_ARGS__) #else #define PHY_DBG(...) #endif #if PHY_ERR_MESSAGE_ON #define PHY_ERR(...) PRINT(__VA_ARGS__) #else #define PHY_ERR(...) #endif typedef enum { PHY_SUCCESS = 0, PHY_FAILURE = 1, PHY_INVALID_PARTITION = 2, PHY_INVALID_ADDRESS = 3, PHY_FLUSH_ERROR = 4, PHY_PAGENOTFOUND = 5, PHY_NO_FREE_BLOCKS = 6, PHY_NO_INVALID_BLOCKS = 7, PHY_COMPLETE = 8, } phy_error; #endif //__NAND_OSAL_H__