xref: /OK3568_Linux_fs/external/rkwifibt/drivers/rtl8852be/include/rtw_efuse.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /******************************************************************************
2*4882a593Smuzhiyun  *
3*4882a593Smuzhiyun  * Copyright(c) 2007 - 2020 Realtek Corporation.
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * This program is free software; you can redistribute it and/or modify it
6*4882a593Smuzhiyun  * under the terms of version 2 of the GNU General Public License as
7*4882a593Smuzhiyun  * published by the Free Software Foundation.
8*4882a593Smuzhiyun  *
9*4882a593Smuzhiyun  * This program is distributed in the hope that it will be useful, but WITHOUT
10*4882a593Smuzhiyun  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11*4882a593Smuzhiyun  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12*4882a593Smuzhiyun  * more details.
13*4882a593Smuzhiyun  *
14*4882a593Smuzhiyun  *****************************************************************************/
15*4882a593Smuzhiyun #if defined(CONFIG_MP_INCLUDED)
16*4882a593Smuzhiyun #ifndef __RTW_EFUSE_H__
17*4882a593Smuzhiyun #define __RTW_EFUSE_H__
18*4882a593Smuzhiyun #include <drv_types.h>
19*4882a593Smuzhiyun #include <rtw_mp.h>
20*4882a593Smuzhiyun 
21*4882a593Smuzhiyun #define RTW_MAX_EFUSE_MAP_LEN 2048
22*4882a593Smuzhiyun 
23*4882a593Smuzhiyun enum rtw_efuse_type {
24*4882a593Smuzhiyun 	RTW_EFUSE_WIFI = 0,
25*4882a593Smuzhiyun 	RTW_EFUSE_BT,
26*4882a593Smuzhiyun 	RTW_EFUSE_NONE,
27*4882a593Smuzhiyun };
28*4882a593Smuzhiyun 
29*4882a593Smuzhiyun /* PHL efuse command */
30*4882a593Smuzhiyun enum rtw_efuse_phl_cmdid {
31*4882a593Smuzhiyun 	RTW_EFUSE_CMD_WIFI_READ = 0,
32*4882a593Smuzhiyun 	RTW_EFUSE_CMD_WIFI_WRITE = 1,
33*4882a593Smuzhiyun 	RTW_EFUSE_CMD_WIFI_UPDATE = 2,
34*4882a593Smuzhiyun 	RTW_EFUSE_CMD_WIFI_UPDATE_MAP = 3,
35*4882a593Smuzhiyun 	RTW_EFUSE_CMD_WIFI_GET_OFFSET_MASK = 4,
36*4882a593Smuzhiyun 	RTW_EFUSE_CMD_WIFI_GET_USAGE = 5,
37*4882a593Smuzhiyun 	RTW_EFUSE_CMD_BT_READ = 6,
38*4882a593Smuzhiyun 	RTW_EFUSE_CMD_BT_WRITE = 7,
39*4882a593Smuzhiyun 	RTW_EFUSE_CMD_BT_UPDATE = 8,
40*4882a593Smuzhiyun 	RTW_EFUSE_CMD_BT_UPDATE_MAP = 9,
41*4882a593Smuzhiyun 	RTW_EFUSE_CMD_BT_GET_OFFSET_MASK = 10,
42*4882a593Smuzhiyun 	RTW_EFUSE_CMD_BT_GET_USAGE = 11,
43*4882a593Smuzhiyun 	RTW_EFUSE_CMD_WIFI_GET_LOG_SIZE = 12,
44*4882a593Smuzhiyun 	RTW_EFUSE_CMD_WIFI_GET_SIZE = 13,
45*4882a593Smuzhiyun 	RTW_EFUSE_CMD_WIFI_GET_AVL_SIZE = 14,
46*4882a593Smuzhiyun 	RTW_EFUSE_CMD_AUTOLOAD_STATUS = 15,
47*4882a593Smuzhiyun 	RTW_EFUSE_CMD_SHADOW_MAP2BUF = 16,
48*4882a593Smuzhiyun 	RTW_EFUSE_CMD_FILE_MAP_LOAD = 17,
49*4882a593Smuzhiyun 	RTW_EFUSE_CMD_FILE_MASK_LOAD = 18,
50*4882a593Smuzhiyun 	RTW_MP_EFUSE_CMD_GET_INFO = 19,
51*4882a593Smuzhiyun 	/* BT */
52*4882a593Smuzhiyun 	RTW_EFUSE_CMD_BT_GET_LOG_SIZE = 20,
53*4882a593Smuzhiyun 	RTW_EFUSE_CMD_BT_GET_SIZE = 21,
54*4882a593Smuzhiyun 	RTW_EFUSE_CMD_BT_GET_AVL_SIZE = 22,
55*4882a593Smuzhiyun 	RTW_EFUSE_CMD_BT_SHADOW_MAP2BUF = 23,
56*4882a593Smuzhiyun 	RTW_EFUSE_CMD_BT_FILE_MAP_LOAD = 24,
57*4882a593Smuzhiyun 	RTW_EFUSE_CMD_BT_FILE_MASK_LOAD = 25,
58*4882a593Smuzhiyun 	RTW_EFUSE_CMD_BT_READ_HIDDEN = 26,
59*4882a593Smuzhiyun 	RTW_EFUSE_CMD_BT_WRITE_HIDDEN = 27,
60*4882a593Smuzhiyun 	RTW_MP_EFUSE_CMD_WIFI_GET_MAP_FROM =28,
61*4882a593Smuzhiyun 	RTW_EFUSE_CMD_WIFI_GET_PHY_MAP = 29,
62*4882a593Smuzhiyun 	RTW_EFUSE_CMD_BT_GET_PHY_MAP = 30,
63*4882a593Smuzhiyun 	RTW_MP_EFUSE_CMD_WIFI_SET_RENEW = 31,
64*4882a593Smuzhiyun 	RTW_EFUSE_CMD_WIFI_GET_MASK_BUF = 32,
65*4882a593Smuzhiyun 	RTW_EFUSE_CMD_BT_GET_MASK_BUF = 33,
66*4882a593Smuzhiyun 	RTW_EFUSE_CMD_MAX,
67*4882a593Smuzhiyun };
68*4882a593Smuzhiyun 
69*4882a593Smuzhiyun struct rtw_efuse_phl_arg {
70*4882a593Smuzhiyun 	u8 mp_class;
71*4882a593Smuzhiyun 	u8 cmd;
72*4882a593Smuzhiyun 	u8 cmd_ok;
73*4882a593Smuzhiyun 	u8 status;
74*4882a593Smuzhiyun 	u8 io_type;
75*4882a593Smuzhiyun 	u16 io_offset;
76*4882a593Smuzhiyun 	u32 io_value;
77*4882a593Smuzhiyun 	u8 autoload;
78*4882a593Smuzhiyun 	u8 pfile_path[200];
79*4882a593Smuzhiyun 	u16 buf_len;
80*4882a593Smuzhiyun 	u8 poutbuf[1536];
81*4882a593Smuzhiyun };
82*4882a593Smuzhiyun 
83*4882a593Smuzhiyun enum RTW_EFUSE_MAP_STATUS {
84*4882a593Smuzhiyun 	RTW_DEFAULT_MAP = 0,
85*4882a593Smuzhiyun 	RTW_HW_LOG_MAP = 1,
86*4882a593Smuzhiyun 	RTW_FILE_MAP = 2,
87*4882a593Smuzhiyun 	RTW_EFUSE_UNKNOWN,
88*4882a593Smuzhiyun };
89*4882a593Smuzhiyun 
90*4882a593Smuzhiyun #define RTW_EFUSE_FROM2STR(status)\
91*4882a593Smuzhiyun (status == RTW_DEFAULT_MAP) ? "DEFAULT" :\
92*4882a593Smuzhiyun (status == RTW_HW_LOG_MAP) ? "HW_LOG_EFUSE" :\
93*4882a593Smuzhiyun (status == RTW_FILE_MAP) ? "FILE_EFUSE" :\
94*4882a593Smuzhiyun "UNknow"
95*4882a593Smuzhiyun 
96*4882a593Smuzhiyun s8 rtw_efuse_get_map_from(_adapter *padapter);
97*4882a593Smuzhiyun 
98*4882a593Smuzhiyun u32 rtw_efuse_get_map_size(_adapter *padapter , u16 *size , enum rtw_efuse_phl_cmdid cmdid);
99*4882a593Smuzhiyun 
100*4882a593Smuzhiyun u32 rtw_efuse_get_available_size(_adapter *padapter , u16 *size, u8 efuse_type);
101*4882a593Smuzhiyun 
102*4882a593Smuzhiyun u8 rtw_efuse_map_read(_adapter * adapter, u16 addr, u16 cnts, u8 *data, u8 efuse_type);
103*4882a593Smuzhiyun 
104*4882a593Smuzhiyun u8 rtw_efuse_map_write(_adapter * adapter, u16 addr, u16 cnts, u8 *data, u8 efuse_type, u8 bpg);
105*4882a593Smuzhiyun 
106*4882a593Smuzhiyun int rtw_ioctl_efuse_get(struct net_device *dev,
107*4882a593Smuzhiyun 				struct iw_request_info *info,
108*4882a593Smuzhiyun 				union iwreq_data *wrqu, char *extra);
109*4882a593Smuzhiyun 
110*4882a593Smuzhiyun int rtw_ioctl_efuse_set(struct net_device *dev,
111*4882a593Smuzhiyun 				struct iw_request_info *info,
112*4882a593Smuzhiyun 				union iwreq_data *wdata, char *extra);
113*4882a593Smuzhiyun 
114*4882a593Smuzhiyun int rtw_ioctl_efuse_file_map_load(struct net_device *dev,
115*4882a593Smuzhiyun 				struct iw_request_info *info,
116*4882a593Smuzhiyun 				union iwreq_data *wrqu, char *extra);
117*4882a593Smuzhiyun 
118*4882a593Smuzhiyun int rtw_ioctl_efuse_file_mask_load(struct net_device *dev,
119*4882a593Smuzhiyun 				struct iw_request_info *info,
120*4882a593Smuzhiyun 				union iwreq_data *wrqu, char *extra);
121*4882a593Smuzhiyun 
122*4882a593Smuzhiyun int rtw_ioctl_efuse_bt_file_map_load(struct net_device *dev,
123*4882a593Smuzhiyun 				struct iw_request_info *info,
124*4882a593Smuzhiyun 				union iwreq_data *wrqu, char *extra);
125*4882a593Smuzhiyun 
126*4882a593Smuzhiyun int rtw_ioctl_efuse_bt_file_mask_load(struct net_device *dev,
127*4882a593Smuzhiyun 				struct iw_request_info *info,
128*4882a593Smuzhiyun 				union iwreq_data *wrqu, char *extra);
129*4882a593Smuzhiyun 
130*4882a593Smuzhiyun u8 rtw_efuse_raw_map_read(_adapter * adapter, u16 addr,
131*4882a593Smuzhiyun 	            u16 cnts, u8 *data, u8 efuse_type);
132*4882a593Smuzhiyun 
133*4882a593Smuzhiyun u8 rtw_efuse_bt_write_raw_hidden(_adapter * adapter, u16 addr,
134*4882a593Smuzhiyun 				u16 cnts, u8 *data);
135*4882a593Smuzhiyun #endif
136*4882a593Smuzhiyun 
137*4882a593Smuzhiyun #endif /*#if defined(CONFIG_MP_INCLUDED)*/
138