• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
2 /* Copyright(c) 2007 - 2011 Realtek Corporation. */
3 
4 #ifndef __RTW_EFUSE_H__
5 #define __RTW_EFUSE_H__
6 
7 #include "osdep_service.h"
8 
9 #define	EFUSE_ERROE_HANDLE		1
10 
11 #define	PG_STATE_HEADER			0x01
12 #define	PG_STATE_WORD_0		0x02
13 #define	PG_STATE_WORD_1		0x04
14 #define	PG_STATE_WORD_2		0x08
15 #define	PG_STATE_WORD_3		0x10
16 #define	PG_STATE_DATA			0x20
17 
18 #define	PG_SWBYTE_H			0x01
19 #define	PG_SWBYTE_L			0x02
20 
21 #define	PGPKT_DATA_SIZE		8
22 
23 #define	EFUSE_WIFI				0
24 #define	EFUSE_BT				1
25 
26 enum _EFUSE_DEF_TYPE {
27 	TYPE_EFUSE_MAX_SECTION				= 0,
28 	TYPE_EFUSE_REAL_CONTENT_LEN			= 1,
29 	TYPE_AVAILABLE_EFUSE_BYTES_BANK		= 2,
30 	TYPE_AVAILABLE_EFUSE_BYTES_TOTAL	= 3,
31 	TYPE_EFUSE_MAP_LEN					= 4,
32 	TYPE_EFUSE_PROTECT_BYTES_BANK		= 5,
33 	TYPE_EFUSE_CONTENT_LEN_BANK			= 6,
34 };
35 
36 /* E-Fuse */
37 #define EFUSE_MAP_SIZE      512
38 #define EFUSE_MAX_SIZE      256
39 /* end of E-Fuse */
40 
41 #define		EFUSE_MAX_MAP_LEN		512
42 #define		EFUSE_MAX_HW_SIZE		512
43 #define		EFUSE_MAX_SECTION_BASE	16
44 
45 #define EXT_HEADER(header) ((header & 0x1F) == 0x0F)
46 #define ALL_WORDS_DISABLED(wde)	((wde & 0x0F) == 0x0F)
47 #define GET_HDR_OFFSET_2_0(header) ((header & 0xE0) >> 5)
48 
49 #define		EFUSE_REPEAT_THRESHOLD_			3
50 
51 /*	The following is for BT Efuse definition */
52 #define		EFUSE_BT_MAX_MAP_LEN		1024
53 #define		EFUSE_MAX_BANK			4
54 #define		EFUSE_MAX_BT_BANK		(EFUSE_MAX_BANK-1)
55 /*--------------------------Define Parameters-------------------------------*/
56 #define		EFUSE_MAX_WORD_UNIT			4
57 
58 /*------------------------------Define structure----------------------------*/
59 struct pgpkt {
60 	u8 offset;
61 	u8 word_en;
62 	u8 data[8];
63 	u8 word_cnts;
64 };
65 
66 /*------------------------------Define structure----------------------------*/
67 struct efuse_hal {
68 	u8 fakeEfuseBank;
69 	u32	fakeEfuseUsedBytes;
70 	u8 fakeEfuseContent[EFUSE_MAX_HW_SIZE];
71 	u8 fakeEfuseInitMap[EFUSE_MAX_MAP_LEN];
72 	u8 fakeEfuseModifiedMap[EFUSE_MAX_MAP_LEN];
73 
74 	u16 BTEfuseUsedBytes;
75 	u8 BTEfuseUsedPercentage;
76 	u8 BTEfuseContent[EFUSE_MAX_BT_BANK][EFUSE_MAX_HW_SIZE];
77 	u8 BTEfuseInitMap[EFUSE_BT_MAX_MAP_LEN];
78 	u8 BTEfuseModifiedMap[EFUSE_BT_MAX_MAP_LEN];
79 
80 	u16 fakeBTEfuseUsedBytes;
81 	u8 fakeBTEfuseContent[EFUSE_MAX_BT_BANK][EFUSE_MAX_HW_SIZE];
82 	u8 fakeBTEfuseInitMap[EFUSE_BT_MAX_MAP_LEN];
83 	u8 fakeBTEfuseModifiedMap[EFUSE_BT_MAX_MAP_LEN];
84 };
85 
86 /*------------------------Export global variable----------------------------*/
87 extern u8 fakeEfuseBank;
88 extern u32 fakeEfuseUsedBytes;
89 extern u8 fakeEfuseContent[];
90 extern u8 fakeEfuseInitMap[];
91 extern u8 fakeEfuseModifiedMap[];
92 
93 extern u32 BTEfuseUsedBytes;
94 extern u8 BTEfuseContent[EFUSE_MAX_BT_BANK][EFUSE_MAX_HW_SIZE];
95 extern u8 BTEfuseInitMap[];
96 extern u8 BTEfuseModifiedMap[];
97 
98 extern u32 fakeBTEfuseUsedBytes;
99 extern u8 fakeBTEfuseContent[EFUSE_MAX_BT_BANK][EFUSE_MAX_HW_SIZE];
100 extern u8 fakeBTEfuseInitMap[];
101 extern u8 fakeBTEfuseModifiedMap[];
102 /*------------------------Export global variable----------------------------*/
103 
104 u8 efuse_GetCurrentSize(struct adapter *adapter, u16 *size);
105 u16 efuse_GetMaxSize(struct adapter *adapter);
106 u8 rtw_efuse_access(struct adapter *adapter, u8 read, u16 start_addr,
107 		    u16 cnts, u8 *data);
108 u8 rtw_efuse_map_read(struct adapter *adapter, u16 addr, u16 cnts, u8 *data);
109 u8 rtw_efuse_map_write(struct adapter *adapter, u16 addr, u16 cnts, u8 *data);
110 u8 rtw_BT_efuse_map_read(struct adapter *adapter, u16 addr,
111 			 u16 cnts, u8 *data);
112 u8 rtw_BT_efuse_map_write(struct adapter *adapter, u16 addr,
113 			  u16 cnts, u8 *data);
114 u16 Efuse_GetCurrentSize(struct adapter *adapter, u8 efusetype, bool test);
115 u8 Efuse_CalculateWordCnts(u8 word_en);
116 void ReadEFuseByte(struct adapter *adapter, u16 _offset, u8 *pbuf, bool test);
117 void EFUSE_GetEfuseDefinition(struct adapter *adapt, u8 type, u8 type1,
118 			      void *out, bool bPseudoTest);
119 u8 efuse_OneByteRead(struct adapter *adapter, u16 addr, u8 *data, bool test);
120 u8 efuse_OneByteWrite(struct adapter *adapter, u16 addr, u8 data, bool	test);
121 
122 void Efuse_PowerSwitch(struct adapter *adapt,u8 bWrite,u8  PwrState);
123 int Efuse_PgPacketRead(struct adapter *adapt, u8 offset, u8 *data, bool test);
124 int Efuse_PgPacketWrite(struct adapter *adapter, u8 offset, u8 word, u8 *data,
125 			bool test);
126 void efuse_WordEnableDataRead(u8 word_en, u8 *sourdata, u8 *targetdata);
127 u8 Efuse_WordEnableDataWrite(struct adapter *adapter, u16 efuse_addr,
128 			     u8 word_en, u8 *data, bool test);
129 
130 u8 EFUSE_Read1Byte(struct adapter *adapter, u16 address);
131 void EFUSE_ShadowMapUpdate(struct adapter *adapter, u8 efusetype, bool test);
132 void EFUSE_ShadowRead(struct adapter *adapt, u8 type, u16 offset, u32 *val);
133 
134 #endif
135