blob: 77376e806499892637103d4b0d5fd69dad6a6550 [file] [log] [blame]
rjw6c1fd8f2022-11-30 14:33:01 +08001/*****************************************************************************
2* Copyright Statement:
3* --------------------
4* This software is protected by Copyright and the information contained
5* herein is confidential. The software may not be copied and the information
6* contained herein may not be used or disclosed except with the written
7* permission of MediaTek Inc. (C) 2006
8*
9* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
10* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
11* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
12* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
13* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
14* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
15* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
16* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
17* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
18* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
19* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
20* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
21*
22* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
23* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
24* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
25* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
26* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
27*
28* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
29* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
30* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
31* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
32* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
33*
34*****************************************************************************/
35
36/*****************************************************************************
37 *
38 * Filename:
39 * ---------
40 * FTL.h
41 *
42 * Project:
43 * --------
44 * Bootloader
45 *
46 * Description:
47 * ------------
48 * Abstraction layer preparing for FTL
49 *
50 * Author:
51 * -------
52 * -------
53 *
54 *============================================================================
55 * HISTORY
56 * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
57 *------------------------------------------------------------------------------
58 * removed!
59 * removed!
60 * removed!
61 *
62 * removed!
63 * removed!
64 * removed!
65 *
66 * removed!
67 * removed!
68 * removed!
69 *
70 * removed!
71 * removed!
72 * removed!
73 *
74 * removed!
75 * removed!
76 * removed!
77 *
78 * removed!
79 * removed!
80 * removed!
81 *
82 * removed!
83 * removed!
84 * removed!
85 *------------------------------------------------------------------------------
86 * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
87 *============================================================================
88 ****************************************************************************/
89
90#ifndef __BL_FTL_H__
91#define __BL_FTL_H__
92
93#include "kal_general_types.h"
94
95typedef enum
96{
97 FTL_SUCCESS = 0,
98 FTL_ERROR_READ_FAILURE = -10000,
99 FTL_ERROR_WRITE_FAILURE,
100 FTL_ERROR_BAD_BLOCK,
101 FTL_ERROR_OPERATION_RETRY,
102 FTL_ERROR_INVALID_PARAMETER,
103 FTL_ERROR_ERASE_FAILURE,
104 FTL_ERROR_NON_EMPTY,
105 FTL_ERROR_NON_EMPTY_CHECK,
106 FTL_ERROR_ECC_FAILURE,
107 FTL_ERROR_ECC_CORRECTED,
108 FTL_ERROR_OTHER_ERROR
109} FTL_STATUS_CODE;
110
111/*****************************************************************************
112 * Macro definition
113 *****************************************************************************/
114
115/*****************************************************************************
116 * Structure definition
117 *****************************************************************************/
118typedef struct FTL_OptParam
119{
120 kal_bool bypass_dal; /* NAND only */
121 kal_bool is_polling; /* NAND & eMMC */
122} FTL_OptParam, *FTL_OptParamPtr;
123
124/*************************************************************************
125 * Type definition
126 *************************************************************************/
127typedef FTL_STATUS_CODE (*FTL_InitFunc)(void *pArgv);
128typedef FTL_STATUS_CODE (*FTL_DeInitFunc)(void *pArgv);
129typedef FTL_STATUS_CODE (*FTL_ReadPageFunc)(kal_uint32 block, kal_uint32 page, kal_uint32 *pBuf, FTL_OptParam *opt_param);
130typedef FTL_STATUS_CODE (*FTL_QueryInfoFunc)(void *pArgv);
131typedef FTL_STATUS_CODE (*FTL_WritePageFunc)(kal_uint32 block, kal_uint32 page, kal_uint32 *pBuf, FTL_OptParam *opt_param);
132typedef FTL_STATUS_CODE (*FTL_CheckGoodBlockFunc)(kal_uint32 block, FTL_OptParam *opt_param);
133typedef FTL_STATUS_CODE (*FTL_MarkBadBlockFunc)(kal_uint32 block, FTL_OptParam *opt_param);
134typedef FTL_STATUS_CODE (*FTL_EraseBlockFunc)(kal_uint32 block, FTL_OptParam *opt_param);
135typedef kal_uint32 (*FTL_GetBlockSizeFunc)(kal_uint32 block, FTL_OptParam *opt_param);
136typedef kal_uint32 (*FTL_GetPageSizeFunc)(void);
137typedef kal_uint32 (*FTL_AddrToBlockPageFunc)(kal_uint32 addr, kal_uint32 *pBlock, kal_uint32 *pPage, FTL_OptParam *opt_param);
138typedef kal_uint32 (*FTL_BlockPageToAddrFunc)(kal_uint32 block, kal_uint32 page, kal_uint32 *pAddr, FTL_OptParam *opt_param);
139
140/*************************************************************************
141 * Type definition
142 *************************************************************************/
143
144typedef struct FTL_FuncTbl
145{
146 FTL_InitFunc FTL_Init;
147 FTL_InitFunc FTL_DeInit;
148 FTL_ReadPageFunc FTL_ReadPage;
149 FTL_QueryInfoFunc FTL_QueryInfo;
150 FTL_WritePageFunc FTL_WritePage;
151 FTL_CheckGoodBlockFunc FTL_CheckGoodBlock;
152 FTL_MarkBadBlockFunc FTL_MarkBadBlock;
153 FTL_EraseBlockFunc FTL_EraseBlock;
154 FTL_GetBlockSizeFunc FTL_GetBlockSize;
155 FTL_GetPageSizeFunc FTL_GetPageSize;
156 FTL_AddrToBlockPageFunc FTL_AddrToBlockPage;
157 FTL_BlockPageToAddrFunc FTL_BlockPageToAddr;
158} FTL_FuncTbl, *FTL_FuncTblPtr;
159
160#if defined(__EMMC_BOOTING__)
161#define FTL_EMMC_PAGE_SIZE (8*1024) // 8KB page
162#define FTL_EMMC_BLOCK_SIZE (512*1024) // 512KB block
163
164#if !defined(__FUE__) && !defined(__UBL__)
165#define get_FTL_lock() \
166 do { \
167 extern kal_bool kal_query_systemInit(void); \
168 extern kal_bool INT_QueryExceptionStatus(void); \
169 if (!kal_query_systemInit() && !INT_QueryExceptionStatus()) \
170 { \
171 kal_take_mutex(ftl_lock); \
172 } \
173 } while(0)
174
175#define free_FTL_lock() \
176 do { \
177 extern kal_bool kal_query_systemInit(void); \
178 extern kal_bool INT_QueryExceptionStatus(void); \
179 if (!kal_query_systemInit() && !INT_QueryExceptionStatus()) \
180 { \
181 kal_give_mutex(ftl_lock); \
182 } \
183 } while(0)
184
185extern kal_bool FTL_isPollingMode();
186#endif /* !__FUE__ && !__UBL__ */
187
188#endif /* __EMMC_BOOTING__ */
189
190#endif /* __BL_FTL_H__ */
191