1 /****************************************************************************** 2 * 3 * Copyright(c) 2009-2010 Realtek Corporation. 4 * 5 * This program is free software; you can redistribute it and/or modify it 6 * under the terms of version 2 of the GNU General Public License as 7 * published by the Free Software Foundation. 8 * 9 * This program is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 12 * more details. 13 * 14 * You should have received a copy of the GNU General Public License along with 15 * this program; if not, write to the Free Software Foundation, Inc., 16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA 17 * 18 * The full GNU General Public License is included in this distribution in the 19 * file called LICENSE. 20 * 21 * Contact Information: 22 * wlanfae <wlanfae@realtek.com> 23 * Realtek Corporation, No. 2, Innovation Road II, Hsinchu Science Park, 24 * Hsinchu 300, Taiwan. 25 * 26 * Larry Finger <Larry.Finger@lwfinger.net> 27 * 28 *****************************************************************************/ 29 30 #ifndef __RTL_EFUSE_H_ 31 #define __RTL_EFUSE_H_ 32 33 #define EFUSE_REAL_CONTENT_LEN 512 34 #define EFUSE_MAP_LEN 128 35 #define EFUSE_MAX_SECTION 16 36 #define EFUSE_MAX_WORD_UNIT 4 37 38 #define EFUSE_INIT_MAP 0 39 #define EFUSE_MODIFY_MAP 1 40 41 #define PG_STATE_HEADER 0x01 42 #define PG_STATE_WORD_0 0x02 43 #define PG_STATE_WORD_1 0x04 44 #define PG_STATE_WORD_2 0x08 45 #define PG_STATE_WORD_3 0x10 46 #define PG_STATE_DATA 0x20 47 48 #define PG_SWBYTE_H 0x01 49 #define PG_SWBYTE_L 0x02 50 51 #define _POWERON_DELAY_ 52 #define _PRE_EXECUTE_READ_CMD_ 53 54 #define EFUSE_REPEAT_THRESHOLD_ 3 55 56 struct efuse_map { 57 u8 offset; 58 u8 word_start; 59 u8 byte_start; 60 u8 byte_cnts; 61 }; 62 63 struct pgpkt_struct { 64 u8 offset; 65 u8 word_en; 66 u8 data[8]; 67 }; 68 69 enum efuse_data_item { 70 EFUSE_CHIP_ID = 0, 71 EFUSE_LDO_SETTING, 72 EFUSE_CLK_SETTING, 73 EFUSE_SDIO_SETTING, 74 EFUSE_CCCR, 75 EFUSE_SDIO_MODE, 76 EFUSE_OCR, 77 EFUSE_F0CIS, 78 EFUSE_F1CIS, 79 EFUSE_MAC_ADDR, 80 EFUSE_EEPROM_VER, 81 EFUSE_CHAN_PLAN, 82 EFUSE_TXPW_TAB 83 }; 84 85 enum { 86 VOLTAGE_V25 = 0x03, 87 LDOE25_SHIFT = 28, 88 }; 89 90 struct efuse_priv { 91 u8 id[2]; 92 u8 ldo_setting[2]; 93 u8 clk_setting[2]; 94 u8 cccr; 95 u8 sdio_mode; 96 u8 ocr[3]; 97 u8 cis0[17]; 98 u8 cis1[48]; 99 u8 mac_addr[6]; 100 u8 eeprom_verno; 101 u8 channel_plan; 102 u8 tx_power_b[14]; 103 u8 tx_power_g[14]; 104 }; 105 106 extern void efuse_initialize(struct ieee80211_hw *hw); 107 extern u8 efuse_read_1byte(struct ieee80211_hw *hw, u16 address); 108 extern void efuse_write_1byte(struct ieee80211_hw *hw, u16 address, u8 value); 109 extern void read_efuse(struct ieee80211_hw *hw, u16 _offset, 110 u16 _size_byte, u8 *pbuf); 111 extern void efuse_shadow_read(struct ieee80211_hw *hw, u8 type, 112 u16 offset, u32 *value); 113 extern void efuse_shadow_write(struct ieee80211_hw *hw, u8 type, 114 u16 offset, u32 value); 115 extern bool efuse_shadow_update(struct ieee80211_hw *hw); 116 extern bool efuse_shadow_update_chk(struct ieee80211_hw *hw); 117 extern void rtl_efuse_shadow_map_update(struct ieee80211_hw *hw); 118 extern void efuse_force_write_vendor_Id(struct ieee80211_hw *hw); 119 extern void efuse_re_pg_section(struct ieee80211_hw *hw, u8 section_idx); 120 121 #endif 122