10ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel/* 20ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel * Copyright 2012 The Android Open Source Project 30ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel * Copyright (c) 2013, The Linux Foundation. All rights reserved. 40ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel * Not a Contribution. 50ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel * 60ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel * Licensed under the Apache License, Version 2.0 (the "License"); 70ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel * you may not use this file except in compliance with the License. 80ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel * You may obtain a copy of the License at 90ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel * 100ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel * http://www.apache.org/licenses/LICENSE-2.0 110ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel * 120ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel * Unless required by applicable law or agreed to in writing, software 130ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel * distributed under the License is distributed on an "AS IS" BASIS, 140ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 150ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel * See the License for the specific language governing permissions and 160ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel * limitations under the License. 170ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel */ 180ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#ifndef HW_ROME_H 190ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define HW_ROME_H 200ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel 210ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel 220ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel/****************************************************************************** 230ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel** Constants & Macros 240ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel******************************************************************************/ 250ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define HCI_MAX_CMD_SIZE 260 260ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define HCI_MAX_EVENT_SIZE 260 270ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define PRINT_BUF_SIZE ((HCI_MAX_CMD_SIZE * 3) + 2) 280ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel 290ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define HCI_CHG_BAUD_CMD_OCF 0x0C 300ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define HCI_VENDOR_CMD_OGF 0x3F 310ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define WRITE_BDADDR_CMD_LEN 14 320ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define WRITE_BAUD_CMD_LEN 6 330ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define MAX_CMD_LEN WRITE_BDADDR_CMD_LEN 340ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define GET_VERSION_OCF 0x1E 350ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel 360ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define PS_HDR_LEN 4 370ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define HCI_VENDOR_CMD_OGF 0x3F 380ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define HCI_PS_CMD_OCF 0x0B 390ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel 400ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define HCI_COMMAND_HDR_SIZE 3 410ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define EVT_CMD_COMPLETE_SIZE 3 420ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define EVT_CMD_STATUS 0x0F 430ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define EVT_CMD_STATUS_SIZE 4 440ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define HCI_EVENT_HDR_SIZE 2 450ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define HCI_EV_SUCCESS 0x00 460ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel/* HCI Socket options */ 470ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define HCI_DATA_DIR 1 480ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define HCI_FILTER 2 490ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define HCI_TIME_STAMP 3 500ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel 510ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define P_ID_OFFSET (0) 520ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define HCI_CMD_IND (1) 530ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define EVENTCODE_OFFSET (1) 540ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define EVT_PLEN (2) 550ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define PLEN (3) 560ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define CMD_RSP_OFFSET (3) 570ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define RSP_TYPE_OFFSET (4) 580ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define BAUDRATE_RSP_STATUS_OFFSET (4) 590ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define CMD_STATUS_OFFSET (5) 600ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define P_ROME_VER_OFFSET (4) 610ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define P_BUILD_VER_OFFSET (6) 620ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define P_BASE_ADDR_OFFSET (8) 630ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define P_ENTRY_ADDR_OFFSET (12) 640ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define P_LEN_OFFSET (16) 650ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define P_CRC_OFFSET (20) 660ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define P_CONTROL_OFFSET (24) 670ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define PATCH_HDR_LEN (28) 680ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define MAX_DATA_PER_SEGMENT (239) 690ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define VSEVENT_CODE (0xFF) 700ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define HC_VS_MAX_CMD_EVENT (0xFF) 710ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define PATCH_PROD_ID_OFFSET (5) 720ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define PATCH_PATCH_VER_OFFSET (9) 730ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define PATCH_ROM_BUILD_VER_OFFSET (11) 740ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define PATCH_SOC_VER_OFFSET (13) 750ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define MAX_SIZE_PER_TLV_SEGMENT (243) 760ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel 770ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel/* VS Opcode */ 780ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define HCI_PATCH_CMD_OCF (0) 790ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define EDL_SET_BAUDRATE_CMD_OCF (0x48) 800ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define EDL_WIPOWER_VS_CMD_OCF (0x1f) 810ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define HCI_VS_GET_ADDON_FEATURES_SUPPORT (0x1d) 820ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel 830ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel/* VS Commands */ 840ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define VSC_SET_BAUDRATE_REQ_LEN (1) 850ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define EDL_PATCH_CMD_LEN (1) 860ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define EDL_PATCH_CMD_REQ_LEN (1) 870ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define EDL_WIP_QUERY_CHARGING_STATUS_LEN (0x01) 880ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define EDL_WIP_START_HANDOFF_TO_HOST_LEN (0x01) 890ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define EDL_PATCH_DLD_REQ_CMD (0x01) 900ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define EDL_PATCH_RST_REQ_CMD (0x05) 910ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define EDL_PATCH_SET_REQ_CMD (0x16) 920ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define EDL_PATCH_ATCH_REQ_CMD (0x17) 930ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define EDL_PATCH_VER_REQ_CMD (0x19) 940ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define EDL_GET_BUILD_INFO (0x20) 950ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define EDL_PATCH_TLV_REQ_CMD (0x1E) 960ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define EDL_WIP_QUERY_CHARGING_STATUS_CMD (0x1D) 970ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define EDL_WIP_START_HANDOFF_TO_HOST_CMD (0x1E) 980ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel 990ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel/* VS Event */ 1000ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define EDL_CMD_REQ_RES_EVT (0x00) 1010ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define EDL_CMD_EXE_STATUS_EVT (0x00) 1020ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define EDL_SET_BAUDRATE_RSP_EVT (0x92) 1030ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define EDL_PATCH_VER_RES_EVT (0x19) 1040ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define EDL_TVL_DNLD_RES_EVT (0x04) 1050ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define EDL_APP_VER_RES_EVT (0x02) 1060ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define EDL_WIP_QUERY_CHARGING_STATUS_EVT (0x18) 1070ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define EDL_WIP_START_HANDOFF_TO_HOST_EVENT (0x19) 1080ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define HCI_VS_GET_ADDON_FEATURES_EVENT (0x1B) 1090ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define HCI_VS_GET_BUILD_VER_EVT (0x05) 1100ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define HCI_VS_STRAY_EVT (0x17) 1110ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel 1120ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel/* Status Codes of HCI CMD execution*/ 1130ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define HCI_CMD_SUCCESS (0x0) 1140ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define PATCH_LEN_ERROR (0x1) 1150ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define PATCH_VER_ERROR (0x2) 1160ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define PATCH_CRC_ERROR (0x3) 1170ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define PATCH_NOT_FOUND (0x4) 1180ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define TLV_TYPE_ERROR (0x10) 1190ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define NVM_ACCESS_CODE (0x0B) 1200ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define BAUDRATE_CHANGE_SUCCESS (1) 1210ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel 1220ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel/* Wipower status codes */ 1230ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define WIPOWER_IN_EMBEDDED_MODE 0x01 1240ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define NON_WIPOWER_MODE 0x02 1250ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel 1260ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel/* mask to validate support for wipower */ 1270ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define ADDON_FEATURES_EVT_WIPOWER_MASK (0x01) 1280ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel 1290ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel/* TLV_TYPE */ 1300ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define TLV_TYPE_PATCH (1) 1310ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define TLV_TYPE_NVM (2) 1320ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel 1330ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel/* NVM */ 1340ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define MAX_TAG_CMD 30 1350ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define TAG_END 0xFF 1360ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define NVM_ACCESS_SET 0x01 1370ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define TAG_NUM_OFFSET 5 1380ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define TAG_NUM_2 2 1390ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define TAG_BDADDR_OFFSET 7 1400ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel 1410ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel/* NVM Tags specifically used for ROME 1.0 */ 1420ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define ROME_1_0_100022_1 0x101000221 1430ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define ROME_1_0_100019 0x101000190 1440ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define ROME_1_0_6002 0x100600200 1450ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel 1460ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel/* Default NVM Version setting for ROME 1.0 */ 1470ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define NVM_VERSION ROME_1_0_100022_1 1480ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel 1490ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel 1500ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define LSH(val, n) ((uint32_t)(val) << (n)) 1510ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define EXTRACT_BYTE(val, pos) (char) (((val) >> (8 * (pos))) & 0xFF) 1520ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define CALC_SEG_SIZE(len, max) ((plen) % (max))?((plen/max)+1) : ((plen) / (max)) 1530ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel 1540ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define ROME_FW_PATH "/system/etc/firmware/rampatch.img" 1550ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define ROME_RAMPATCH_TLV_PATH "/system/etc/firmware/rampatch_tlv.img" 1560ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define ROME_NVM_TLV_PATH "/system/etc/firmware/nvm_tlv.bin" 1570ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define ROME_RAMPATCH_TLV_1_0_3_PATH "/system/etc/firmware/rampatch_tlv_1.3.tlv" 1580ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define ROME_NVM_TLV_1_0_3_PATH "/system/etc/firmware/nvm_tlv_1.3.bin" 1590ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define ROME_RAMPATCH_TLV_2_0_1_PATH "/system/etc/firmware/rampatch_tlv_2.1.tlv" 1600ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define ROME_NVM_TLV_2_0_1_PATH "/system/etc/firmware/nvm_tlv_2.1.bin" 1610ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define ROME_RAMPATCH_TLV_3_0_0_PATH "/bt_firmware/image/btfw30.tlv" 1620ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define ROME_NVM_TLV_3_0_0_PATH "/bt_firmware/image/btnv30.bin" 1630ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define ROME_RAMPATCH_TLV_3_0_2_PATH "/bt_firmware/image/btfw32.tlv" 1640ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define ROME_NVM_TLV_3_0_2_PATH "/bt_firmware/image/btnv32.bin" 1650ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel 1660ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define ROME_3_1_FW_SU "bprm.cnss.3.1" 1670ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define ROME_3_2_FW_SU "btfwp.cnss.3.2" 1680ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel 1690ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel/* Rome 3.1 FW SU release has been branched from rome 3.0 SU 224 1700ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel So, rome 3.1 formula is SU = patch version -(0xE0 = 224) - 0x111 -1 1710ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel*/ 1720ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define ROME_3_1_FW_SW_OFFSET 0x01F2 1730ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel 1740ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel/* Rome 3.2 FW SU formula is SU = patch version - 0x111 -1 */ 1750ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define ROME_3_2_FW_SW_OFFSET 0x0112 1760ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel 1770ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel/* This header value in rampatch file decides event handling mechanism in the HOST */ 1780ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define ROME_SKIP_EVT_NONE 0x00 1790ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define ROME_SKIP_EVT_VSE 0x01 1800ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define ROME_SKIP_EVT_CC 0x02 1810ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#define ROME_SKIP_EVT_VSE_CC 0x03 1820ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel 1830ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel/****************************************************************************** 1840ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel** Local type definitions 1850ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel******************************************************************************/ 1860ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudeltypedef struct { 1870ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel unsigned short rom_version; 1880ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel unsigned short build_version; 1890ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel} __attribute__ ((packed)) patch_version; 1900ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel 1910ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudeltypedef struct { 1920ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel unsigned int patch_id; 1930ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel patch_version patch_ver; 1940ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel unsigned int patch_base_addr; 1950ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel unsigned int patch_entry_addr; 1960ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel unsigned short patch_length; 1970ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel int patch_crc; 1980ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel unsigned short patch_ctrl; 1990ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel} __attribute__ ((packed)) patch_info; 2000ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel 2010ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudeltypedef struct { 2020ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel unsigned int tlv_data_len; 2030ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel unsigned int tlv_patch_data_len; 2040ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel unsigned char sign_ver; 2050ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel unsigned char sign_algorithm; 2060ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel unsigned char dwnd_cfg; 2070ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel unsigned char reserved1; 2080ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel unsigned short prod_id; 2090ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel unsigned short build_ver; 2100ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel unsigned short patch_ver; 2110ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel unsigned short reserved2; 2120ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel unsigned int patch_entry_addr; 2130ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel} __attribute__ ((packed)) tlv_patch_hdr; 2140ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel 2150ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudeltypedef struct { 2160ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel unsigned short tag_id; 2170ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel unsigned short tag_len; 2180ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel unsigned int tag_ptr; 2190ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel unsigned int tag_ex_flag; 2200ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel} __attribute__ ((packed)) tlv_nvm_hdr; 2210ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel 2220ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudeltypedef struct { 2230ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel unsigned char tlv_type; 2240ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel unsigned char tlv_length1; 2250ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel unsigned char tlv_length2; 2260ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel unsigned char tlv_length3; 2270ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel 2280ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel union{ 2290ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel tlv_patch_hdr patch; 2300ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel tlv_nvm_hdr nvm; 2310ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel }tlv; 2320ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel} __attribute__ ((packed)) tlv_patch_info; 2330ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel 2340ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel 2350ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudelenum{ 2360ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel BAUDRATE_115200 = 0x00, 2370ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel BAUDRATE_57600 = 0x01, 2380ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel BAUDRATE_38400 = 0x02, 2390ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel BAUDRATE_19200 = 0x03, 2400ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel BAUDRATE_9600 = 0x04, 2410ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel BAUDRATE_230400 = 0x05, 2420ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel BAUDRATE_250000 = 0x06, 2430ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel BAUDRATE_460800 = 0x07, 2440ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel BAUDRATE_500000 = 0x08, 2450ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel BAUDRATE_720000 = 0x09, 2460ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel BAUDRATE_921600 = 0x0A, 2470ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel BAUDRATE_1000000 = 0x0B, 2480ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel BAUDRATE_1250000 = 0x0C, 2490ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel BAUDRATE_2000000 = 0x0D, 2500ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel BAUDRATE_3000000 = 0x0E, 2510ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel BAUDRATE_4000000 = 0x0F, 2520ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel BAUDRATE_1600000 = 0x10, 2530ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel BAUDRATE_3200000 = 0x11, 2540ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel BAUDRATE_3500000 = 0x12, 2550ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel BAUDRATE_AUTO = 0xFE, 2560ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel BAUDRATE_Reserved = 0xFF 2570ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel}; 2580ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel 2590ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudelenum{ 2600ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel ROME_PATCH_VER_0100 = 0x0100, 2610ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel ROME_PATCH_VER_0101 = 0x0101, 2620ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel ROME_PATCH_VER_0200 = 0x0200, 2630ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel ROME_PATCH_VER_0300 = 0x0300, 2640ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel ROME_PATCH_VER_0302 = 0x0302 2650ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel }; 2660ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel 2670ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudelenum{ 2680ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel ROME_SOC_ID_00 = 0x00000000, 2690ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel ROME_SOC_ID_11 = 0x00000011, 2700ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel ROME_SOC_ID_22 = 0x00000022, 2710ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel ROME_SOC_ID_44 = 0x00000044 2720ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel}; 2730ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel 2740ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudelenum{ 2750ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel ROME_VER_UNKNOWN = 0, 2760ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel ROME_VER_1_0 = ((ROME_PATCH_VER_0100 << 16 ) | ROME_SOC_ID_00 ), 2770ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel ROME_VER_1_1 = ((ROME_PATCH_VER_0101 << 16 ) | ROME_SOC_ID_00 ), 2780ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel ROME_VER_1_3 = ((ROME_PATCH_VER_0200 << 16 ) | ROME_SOC_ID_00 ), 2790ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel ROME_VER_2_1 = ((ROME_PATCH_VER_0200 << 16 ) | ROME_SOC_ID_11 ), 2800ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel ROME_VER_3_0 = ((ROME_PATCH_VER_0300 << 16 ) | ROME_SOC_ID_22 ), 2810ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel ROME_VER_3_2 = ((ROME_PATCH_VER_0302 << 16 ) | ROME_SOC_ID_44 ) 2820ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel}; 2830ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel 2840ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel//declarations 2850ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudelint rome_soc_init(int fd, char *bdaddr); 2860ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudelint check_embedded_mode(int fd); 2870ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudelint rome_get_addon_feature_list(int fd); 2880ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudelvoid enable_controller_log(int fd, unsigned char req); 2890ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudelvoid cherokee_shutdown_vs_cmd(int fd); 2900ebd0bab066cd86d7a19f4646e0686dae885004eThierry Strudel#endif /* HW_ROME_H */ 291