1 /* 2 * Copyright 2012 The Android Open Source Project 3 * Copyright (c) 2013, The Linux Foundation. All rights reserved. 4 * Not a Contribution. 5 * 6 * Licensed under the Apache License, Version 2.0 (the "License"); 7 * you may not use this file except in compliance with the License. 8 * You may obtain a copy of the License at 9 * 10 * http://www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, software 13 * distributed under the License is distributed on an "AS IS" BASIS, 14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 * See the License for the specific language governing permissions and 16 * limitations under the License. 17 */ 18 #ifndef HW_ROME_H 19 #define HW_ROME_H 20 21 /****************************************************************************** 22 ** Constants & Macros 23 ******************************************************************************/ 24 #define HCI_MAX_CMD_SIZE 260 25 #define HCI_MAX_EVENT_SIZE 260 26 #define PRINT_BUF_SIZE ((HCI_MAX_CMD_SIZE * 3) + 2) 27 28 #define HCI_CHG_BAUD_CMD_OCF 0x0C 29 #define HCI_VENDOR_CMD_OGF 0x3F 30 #define WRITE_BDADDR_CMD_LEN 14 31 #define WRITE_BAUD_CMD_LEN 6 32 #define MAX_CMD_LEN WRITE_BDADDR_CMD_LEN 33 #define GET_VERSION_OCF 0x1E 34 35 #define PS_HDR_LEN 4 36 #define HCI_VENDOR_CMD_OGF 0x3F 37 #define HCI_PS_CMD_OCF 0x0B 38 39 #define HCI_COMMAND_HDR_SIZE 3 40 #define EVT_CMD_COMPLETE_SIZE 3 41 #define EVT_CMD_STATUS 0x0F 42 #define EVT_CMD_STATUS_SIZE 4 43 #define HCI_EVENT_HDR_SIZE 2 44 #define HCI_EV_SUCCESS 0x00 45 /* HCI Socket options */ 46 #define HCI_DATA_DIR 1 47 #define HCI_FILTER 2 48 #define HCI_TIME_STAMP 3 49 50 #define P_ID_OFFSET (0) 51 #define HCI_CMD_IND (1) 52 #define EVENTCODE_OFFSET (1) 53 #define EVT_PLEN (2) 54 #define PLEN (3) 55 #define CMD_RSP_OFFSET (3) 56 #define RSP_TYPE_OFFSET (4) 57 #define BAUDRATE_RSP_STATUS_OFFSET (4) 58 #define CMD_STATUS_OFFSET (5) 59 #define P_ROME_VER_OFFSET (4) 60 #define P_BUILD_VER_OFFSET (6) 61 #define P_BASE_ADDR_OFFSET (8) 62 #define P_ENTRY_ADDR_OFFSET (12) 63 #define P_LEN_OFFSET (16) 64 #define P_CRC_OFFSET (20) 65 #define P_CONTROL_OFFSET (24) 66 #define PATCH_HDR_LEN (28) 67 #define MAX_DATA_PER_SEGMENT (239) 68 #define VSEVENT_CODE (0xFF) 69 #define HC_VS_MAX_CMD_EVENT (0xFF) 70 #define PATCH_PROD_ID_OFFSET (5) 71 #define PATCH_PATCH_VER_OFFSET (9) 72 #define PATCH_ROM_BUILD_VER_OFFSET (11) 73 #define PATCH_SOC_VER_OFFSET (13) 74 #define MAX_SIZE_PER_TLV_SEGMENT (243) 75 76 /* VS Opcode */ 77 #define HCI_PATCH_CMD_OCF (0) 78 #define EDL_SET_BAUDRATE_CMD_OCF (0x48) 79 #define EDL_WIPOWER_VS_CMD_OCF (0x1f) 80 #define HCI_VS_GET_ADDON_FEATURES_SUPPORT (0x1d) 81 #define EDL_GET_BOARD_ID (0x23) 82 83 /* VS Commands */ 84 #define VSC_SET_BAUDRATE_REQ_LEN (1) 85 #define EDL_PATCH_CMD_LEN (1) 86 #define EDL_PATCH_CMD_REQ_LEN (1) 87 #define EDL_WIP_QUERY_CHARGING_STATUS_LEN (0x01) 88 #define EDL_WIP_START_HANDOFF_TO_HOST_LEN (0x01) 89 #define EDL_PATCH_DLD_REQ_CMD (0x01) 90 #define EDL_PATCH_RST_REQ_CMD (0x05) 91 #define EDL_PATCH_SET_REQ_CMD (0x16) 92 #define EDL_PATCH_ATCH_REQ_CMD (0x17) 93 #define EDL_PATCH_VER_REQ_CMD (0x19) 94 #define EDL_GET_BUILD_INFO (0x20) 95 #define EDL_PATCH_TLV_REQ_CMD (0x1E) 96 #define EDL_WIP_QUERY_CHARGING_STATUS_CMD (0x1D) 97 #define EDL_WIP_START_HANDOFF_TO_HOST_CMD (0x1E) 98 99 /* VS Event */ 100 #define EDL_CMD_REQ_RES_EVT (0x00) 101 #define EDL_CMD_EXE_STATUS_EVT (0x00) 102 #define EDL_SET_BAUDRATE_RSP_EVT (0x92) 103 #define EDL_PATCH_VER_RES_EVT (0x19) 104 #define EDL_TVL_DNLD_RES_EVT (0x04) 105 #define EDL_APP_VER_RES_EVT (0x02) 106 #define EDL_WIP_QUERY_CHARGING_STATUS_EVT (0x18) 107 #define EDL_WIP_START_HANDOFF_TO_HOST_EVENT (0x19) 108 #define HCI_VS_GET_ADDON_FEATURES_EVENT (0x1B) 109 #define EDL_BOARD_ID_RESPONSE (0x23) 110 #define HCI_VS_GET_BUILD_VER_EVT (0x05) 111 #define HCI_VS_STRAY_EVT (0x17) 112 113 /* Status Codes of HCI CMD execution*/ 114 #define HCI_CMD_SUCCESS (0x0) 115 #define PATCH_LEN_ERROR (0x1) 116 #define PATCH_VER_ERROR (0x2) 117 #define PATCH_CRC_ERROR (0x3) 118 #define PATCH_NOT_FOUND (0x4) 119 #define TLV_TYPE_ERROR (0x10) 120 #define NVM_ACCESS_CODE (0x0B) 121 #define BAUDRATE_CHANGE_SUCCESS (1) 122 123 /* Wipower status codes */ 124 #define WIPOWER_IN_EMBEDDED_MODE 0x01 125 #define NON_WIPOWER_MODE 0x02 126 127 /* mask to validate support for wipower */ 128 #define ADDON_FEATURES_EVT_WIPOWER_MASK (0x01) 129 130 /* TLV_TYPE */ 131 #define TLV_TYPE_PATCH (1) 132 #define TLV_TYPE_NVM (2) 133 134 /* NVM */ 135 #define MAX_TAG_CMD 30 136 #define TAG_END 0xFF 137 #define NVM_ACCESS_SET 0x01 138 #define TAG_NUM_OFFSET 5 139 #define TAG_NUM_2 2 140 #define TAG_BDADDR_OFFSET 7 141 142 /* NVM Tags specifically used for ROME 1.0 */ 143 #define ROME_1_0_100022_1 0x101000221 144 #define ROME_1_0_100019 0x101000190 145 #define ROME_1_0_6002 0x100600200 146 147 /* Default NVM Version setting for ROME 1.0 */ 148 #define NVM_VERSION ROME_1_0_100022_1 149 150 151 #define LSH(val, n) ((uint32_t)(val) << (n)) 152 #define EXTRACT_BYTE(val, pos) (char) (((val) >> (8 * (pos))) & 0xFF) 153 #define CALC_SEG_SIZE(len, max) ((plen) % (max))?((plen/max)+1) : ((plen) / (max)) 154 155 #define ROME_FW_PATH "/system/etc/firmware/rampatch.img" 156 #define ROME_RAMPATCH_TLV_PATH "/system/etc/firmware/rampatch_tlv.img" 157 #define ROME_NVM_TLV_PATH "/system/etc/firmware/nvm_tlv.bin" 158 #define ROME_RAMPATCH_TLV_1_0_3_PATH "/system/etc/firmware/rampatch_tlv_1.3.tlv" 159 #define ROME_NVM_TLV_1_0_3_PATH "/system/etc/firmware/nvm_tlv_1.3.bin" 160 #define ROME_RAMPATCH_TLV_2_0_1_PATH "/system/etc/firmware/rampatch_tlv_2.1.tlv" 161 #define ROME_NVM_TLV_2_0_1_PATH "/system/etc/firmware/nvm_tlv_2.1.bin" 162 #define ROME_RAMPATCH_TLV_3_0_0_PATH "/vendor/firmware/btfw30.tlv" 163 #define ROME_NVM_TLV_3_0_0_PATH "/vendor/firmware/btnv30.bin" 164 //#define ROME_RAMPATCH_TLV_3_0_0_PATH "/system/etc/firmware/rampatch_tlv_3.0.tlv" 165 //#define ROME_NVM_TLV_3_0_0_PATH "/system/etc/firmware/nvm_tlv_3.0.bin" 166 #define ROME_RAMPATCH_TLV_3_0_2_PATH "/vendor/firmware/btfw32.tlv" 167 #define ROME_NVM_TLV_3_0_2_PATH "/vendor/firmware/btnv32.bin" 168 //#define ROME_RAMPATCH_TLV_3_0_2_PATH "/system/etc/firmware/rampatch_tlv_3.2.tlv" 169 //#define ROME_NVM_TLV_3_0_2_PATH "/system/etc/firmware/nvm_tlv_3.2.bin" 170 171 #define ROME_3_1_FW_SU "bprm.cnss.3.1" 172 #define ROME_3_2_FW_SU "btfwp.cnss.3.2" 173 174 /* Rome 3.1 FW SU release has been branched from rome 3.0 SU 224 175 So, rome 3.1 formula is SU = patch version -(0xE0 = 224) - 0x111 -1 176 */ 177 #define ROME_3_1_FW_SW_OFFSET 0x01F2 178 179 /* Rome 3.2 FW SU formula is SU = patch version - 0x111 -1 */ 180 #define ROME_3_2_FW_SW_OFFSET 0x0112 181 182 /* This header value in rampatch file decides event handling mechanism in the HOST */ 183 #define ROME_SKIP_EVT_NONE 0x00 184 #define ROME_SKIP_EVT_VSE 0x01 185 #define ROME_SKIP_EVT_CC 0x02 186 #define ROME_SKIP_EVT_VSE_CC 0x03 187 188 /****************************************************************************** 189 ** Local type definitions 190 ******************************************************************************/ 191 typedef struct { 192 unsigned short rom_version; 193 unsigned short build_version; 194 } __attribute__ ((packed)) patch_version; 195 196 typedef struct { 197 unsigned int patch_id; 198 patch_version patch_ver; 199 unsigned int patch_base_addr; 200 unsigned int patch_entry_addr; 201 unsigned short patch_length; 202 int patch_crc; 203 unsigned short patch_ctrl; 204 } __attribute__ ((packed)) patch_info; 205 206 typedef struct { 207 unsigned int tlv_data_len; 208 unsigned int tlv_patch_data_len; 209 unsigned char sign_ver; 210 unsigned char sign_algorithm; 211 unsigned char dwnd_cfg; 212 unsigned char reserved1; 213 unsigned short prod_id; 214 unsigned short build_ver; 215 unsigned short patch_ver; 216 unsigned short reserved2; 217 unsigned int patch_entry_addr; 218 } __attribute__ ((packed)) tlv_patch_hdr; 219 220 typedef struct { 221 unsigned short tag_id; 222 unsigned short tag_len; 223 unsigned int tag_ptr; 224 unsigned int tag_ex_flag; 225 } __attribute__ ((packed)) tlv_nvm_hdr; 226 227 typedef struct { 228 unsigned char tlv_type; 229 unsigned char tlv_length1; 230 unsigned char tlv_length2; 231 unsigned char tlv_length3; 232 233 union{ 234 tlv_patch_hdr patch; 235 tlv_nvm_hdr nvm; 236 }tlv; 237 } __attribute__ ((packed)) tlv_patch_info; 238 239 240 enum{ 241 BAUDRATE_115200 = 0x00, 242 BAUDRATE_57600 = 0x01, 243 BAUDRATE_38400 = 0x02, 244 BAUDRATE_19200 = 0x03, 245 BAUDRATE_9600 = 0x04, 246 BAUDRATE_230400 = 0x05, 247 BAUDRATE_250000 = 0x06, 248 BAUDRATE_460800 = 0x07, 249 BAUDRATE_500000 = 0x08, 250 BAUDRATE_720000 = 0x09, 251 BAUDRATE_921600 = 0x0A, 252 BAUDRATE_1000000 = 0x0B, 253 BAUDRATE_1250000 = 0x0C, 254 BAUDRATE_2000000 = 0x0D, 255 BAUDRATE_3000000 = 0x0E, 256 BAUDRATE_4000000 = 0x0F, 257 BAUDRATE_1600000 = 0x10, 258 BAUDRATE_3200000 = 0x11, 259 BAUDRATE_3500000 = 0x12, 260 BAUDRATE_AUTO = 0xFE, 261 BAUDRATE_Reserved = 0xFF 262 }; 263 264 enum{ 265 ROME_PATCH_VER_0100 = 0x0100, 266 ROME_PATCH_VER_0101 = 0x0101, 267 ROME_PATCH_VER_0200 = 0x0200, 268 ROME_PATCH_VER_0300 = 0x0300, 269 ROME_PATCH_VER_0302 = 0x0302 270 }; 271 272 enum{ 273 ROME_SOC_ID_00 = 0x00000000, 274 ROME_SOC_ID_11 = 0x00000011, 275 ROME_SOC_ID_22 = 0x00000022, 276 ROME_SOC_ID_44 = 0x00000044 277 }; 278 279 enum{ 280 ROME_VER_UNKNOWN = 0, 281 ROME_VER_1_0 = ((ROME_PATCH_VER_0100 << 16 ) | ROME_SOC_ID_00 ), 282 ROME_VER_1_1 = ((ROME_PATCH_VER_0101 << 16 ) | ROME_SOC_ID_00 ), 283 ROME_VER_1_3 = ((ROME_PATCH_VER_0200 << 16 ) | ROME_SOC_ID_00 ), 284 ROME_VER_2_1 = ((ROME_PATCH_VER_0200 << 16 ) | ROME_SOC_ID_11 ), 285 ROME_VER_3_0 = ((ROME_PATCH_VER_0300 << 16 ) | ROME_SOC_ID_22 ), 286 ROME_VER_3_2 = ((ROME_PATCH_VER_0302 << 16 ) | ROME_SOC_ID_44 ) 287 }; 288 #endif /* HW_ROME_H */ 289