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