Home | History | Annotate | Download | only in include
      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 
     82 /* VS Commands */
     83 #define VSC_SET_BAUDRATE_REQ_LEN        (1)
     84 #define EDL_PATCH_CMD_LEN	                       (1)
     85 #define EDL_PATCH_CMD_REQ_LEN               (1)
     86 #define EDL_WIP_QUERY_CHARGING_STATUS_LEN   (0x01)
     87 #define EDL_WIP_START_HANDOFF_TO_HOST_LEN   (0x01)
     88 #define EDL_PATCH_DLD_REQ_CMD               (0x01)
     89 #define EDL_PATCH_RST_REQ_CMD               (0x05)
     90 #define EDL_PATCH_SET_REQ_CMD               (0x16)
     91 #define EDL_PATCH_ATCH_REQ_CMD            (0x17)
     92 #define EDL_PATCH_VER_REQ_CMD               (0x19)
     93 #define EDL_PATCH_TLV_REQ_CMD               (0x1E)
     94 #define EDL_WIP_QUERY_CHARGING_STATUS_CMD   (0x1D)
     95 #define EDL_WIP_START_HANDOFF_TO_HOST_CMD   (0x1E)
     96 
     97 /* VS Event */
     98 #define EDL_CMD_REQ_RES_EVT                 (0x00)
     99 #define EDL_CMD_EXE_STATUS_EVT           (0x00)
    100 #define EDL_SET_BAUDRATE_RSP_EVT       (0x92)
    101 #define EDL_PATCH_VER_RES_EVT             (0x19)
    102 #define EDL_TVL_DNLD_RES_EVT                (0x04)
    103 #define EDL_APP_VER_RES_EVT                  (0x02)
    104 #define EDL_WIP_QUERY_CHARGING_STATUS_EVT    (0x18)
    105 #define EDL_WIP_START_HANDOFF_TO_HOST_EVENT  (0x19)
    106 #define HCI_VS_GET_ADDON_FEATURES_EVENT      (0x1B)
    107 
    108 
    109 /* Status Codes of HCI CMD execution*/
    110 #define HCI_CMD_SUCCESS                     (0x0)
    111 #define PATCH_LEN_ERROR                       (0x1)
    112 #define PATCH_VER_ERROR                       (0x2)
    113 #define PATCH_CRC_ERROR                     (0x3)
    114 #define PATCH_NOT_FOUND                      (0x4)
    115 #define TLV_TYPE_ERROR                         (0x10)
    116 #define NVM_ACCESS_CODE                     (0x0B)
    117 #define BAUDRATE_CHANGE_SUCCESS   (1)
    118 
    119 /* Wipower status codes */
    120 #define WIPOWER_IN_EMBEDDED_MODE 0x01
    121 #define NON_WIPOWER_MODE 0x02
    122 
    123 /* mask to validate support for wipower */
    124 #define ADDON_FEATURES_EVT_WIPOWER_MASK      (0x01)
    125 
    126 /* TLV_TYPE */
    127 #define TLV_TYPE_PATCH                  (1)
    128 #define TLV_TYPE_NVM                      (2)
    129 
    130 /* NVM */
    131 #define MAX_TAG_CMD                 30
    132 #define TAG_END                           0xFF
    133 #define NVM_ACCESS_SET            0x01
    134 #define TAG_NUM_OFFSET             5
    135 #define TAG_NUM_2                       2
    136 #define TAG_BDADDR_OFFSET     7
    137 
    138 /* NVM Tags specifically used for ROME 1.0 */
    139 #define ROME_1_0_100022_1       0x101000221
    140 #define ROME_1_0_100019           0x101000190
    141 #define ROME_1_0_6002               0x100600200
    142 
    143 /* Default NVM Version setting for ROME 1.0 */
    144 #define NVM_VERSION                  ROME_1_0_100022_1
    145 
    146 
    147 #define LSH(val, n)     ((uint32_t)(val) << (n))
    148 #define EXTRACT_BYTE(val, pos)      (char) (((val) >> (8 * (pos))) & 0xFF)
    149 #define CALC_SEG_SIZE(len, max)   ((plen) % (max))?((plen/max)+1) : ((plen) / (max))
    150 
    151 #define ROME_FW_PATH        "/system/etc/firmware/rampatch.img"
    152 #define ROME_RAMPATCH_TLV_PATH      "/system/etc/firmware/rampatch_tlv.img"
    153 #define ROME_NVM_TLV_PATH         "/system/etc/firmware/nvm_tlv.bin"
    154 #define ROME_RAMPATCH_TLV_1_0_3_PATH    "/system/etc/firmware/rampatch_tlv_1.3.tlv"
    155 #define ROME_NVM_TLV_1_0_3_PATH         "/system/etc/firmware/nvm_tlv_1.3.bin"
    156 #define ROME_RAMPATCH_TLV_2_0_1_PATH    "/system/etc/firmware/rampatch_tlv_2.1.tlv"
    157 #define ROME_NVM_TLV_2_0_1_PATH         "/system/etc/firmware/nvm_tlv_2.1.bin"
    158 #define ROME_RAMPATCH_TLV_3_0_0_PATH    "/vendor/firmware/btfw30.tlv"
    159 #define ROME_NVM_TLV_3_0_0_PATH         "/vendor/firmware/btnv30.bin"
    160 //#define ROME_RAMPATCH_TLV_3_0_0_PATH    "/system/etc/firmware/rampatch_tlv_3.0.tlv"
    161 //#define ROME_NVM_TLV_3_0_0_PATH         "/system/etc/firmware/nvm_tlv_3.0.bin"
    162 #define ROME_RAMPATCH_TLV_3_0_2_PATH    "/vendor/firmware/btfw32.tlv"
    163 #define ROME_NVM_TLV_3_0_2_PATH         "/vendor/firmware/btnv32.bin"
    164 //#define ROME_RAMPATCH_TLV_3_0_2_PATH    "/system/etc/firmware/rampatch_tlv_3.2.tlv"
    165 //#define ROME_NVM_TLV_3_0_2_PATH         "/system/etc/firmware/nvm_tlv_3.2.bin"
    166 
    167 #define ROME_3_1_FW_SU  "bprm.cnss.3.1"
    168 #define ROME_3_2_FW_SU  "btfwp.cnss.3.2"
    169 
    170 /* Rome 3.1 FW SU release has been branched from rome 3.0 SU 224
    171     So, rome 3.1 formula is SU = patch version -(0xE0 = 224) - 0x111 -1
    172 */
    173 #define ROME_3_1_FW_SW_OFFSET   0x01F2
    174 
    175 /* Rome 3.2 FW SU formula is SU = patch version - 0x111 -1 */
    176 #define ROME_3_2_FW_SW_OFFSET   0x0112
    177 
    178 /* This header value in rampatch file decides event handling mechanism in the HOST */
    179 #define ROME_SKIP_EVT_NONE     0x00
    180 #define ROME_SKIP_EVT_VSE      0x01
    181 #define ROME_SKIP_EVT_CC       0x02
    182 #define ROME_SKIP_EVT_VSE_CC   0x03
    183 
    184 /******************************************************************************
    185 **  Local type definitions
    186 ******************************************************************************/
    187 typedef struct {
    188     unsigned short rom_version;
    189     unsigned short build_version;
    190 } __attribute__ ((packed)) patch_version;
    191 
    192 typedef struct {
    193     unsigned int patch_id;
    194     patch_version patch_ver;
    195     unsigned int patch_base_addr;
    196     unsigned int patch_entry_addr;
    197     unsigned short patch_length;
    198     int patch_crc;
    199     unsigned short patch_ctrl;
    200 } __attribute__ ((packed)) patch_info;
    201 
    202 typedef struct {
    203     unsigned int  tlv_data_len;
    204     unsigned int  tlv_patch_data_len;
    205     unsigned char sign_ver;
    206     unsigned char sign_algorithm;
    207     unsigned char dwnd_cfg;
    208     unsigned char reserved1;
    209     unsigned short prod_id;
    210     unsigned short build_ver;
    211     unsigned short patch_ver;
    212     unsigned short reserved2;
    213     unsigned int patch_entry_addr;
    214 } __attribute__ ((packed)) tlv_patch_hdr;
    215 
    216 typedef struct {
    217     unsigned short tag_id;
    218     unsigned short tag_len;
    219     unsigned int tag_ptr;
    220     unsigned int tag_ex_flag;
    221 } __attribute__ ((packed)) tlv_nvm_hdr;
    222 
    223 typedef struct {
    224     unsigned char tlv_type;
    225     unsigned char tlv_length1;
    226     unsigned char tlv_length2;
    227     unsigned char tlv_length3;
    228 
    229     union{
    230         tlv_patch_hdr patch;
    231         tlv_nvm_hdr nvm;
    232     }tlv;
    233 } __attribute__ ((packed)) tlv_patch_info;
    234 
    235 
    236 enum{
    237     BAUDRATE_115200     = 0x00,
    238     BAUDRATE_57600       = 0x01,
    239     BAUDRATE_38400       = 0x02,
    240     BAUDRATE_19200       = 0x03,
    241     BAUDRATE_9600         = 0x04,
    242     BAUDRATE_230400     = 0x05,
    243     BAUDRATE_250000     = 0x06,
    244     BAUDRATE_460800     = 0x07,
    245     BAUDRATE_500000     = 0x08,
    246     BAUDRATE_720000     = 0x09,
    247     BAUDRATE_921600     = 0x0A,
    248     BAUDRATE_1000000   = 0x0B,
    249     BAUDRATE_1250000   = 0x0C,
    250     BAUDRATE_2000000   = 0x0D,
    251     BAUDRATE_3000000   = 0x0E,
    252     BAUDRATE_4000000   = 0x0F,
    253     BAUDRATE_1600000   = 0x10,
    254     BAUDRATE_3200000   = 0x11,
    255     BAUDRATE_3500000   = 0x12,
    256     BAUDRATE_AUTO        = 0xFE,
    257     BAUDRATE_Reserved  = 0xFF
    258 };
    259 
    260 enum{
    261     ROME_PATCH_VER_0100 = 0x0100,
    262     ROME_PATCH_VER_0101 = 0x0101,
    263     ROME_PATCH_VER_0200 = 0x0200,
    264     ROME_PATCH_VER_0300 = 0x0300,
    265     ROME_PATCH_VER_0302 = 0x0302
    266  };
    267 
    268 enum{
    269     ROME_SOC_ID_00 = 0x00000000,
    270     ROME_SOC_ID_11 = 0x00000011,
    271     ROME_SOC_ID_22 = 0x00000022,
    272     ROME_SOC_ID_44 = 0x00000044
    273 };
    274 
    275 enum{
    276     ROME_VER_UNKNOWN = 0,
    277     ROME_VER_1_0 = ((ROME_PATCH_VER_0100 << 16 ) | ROME_SOC_ID_00 ),
    278     ROME_VER_1_1 = ((ROME_PATCH_VER_0101 << 16 ) | ROME_SOC_ID_00 ),
    279     ROME_VER_1_3 = ((ROME_PATCH_VER_0200 << 16 ) | ROME_SOC_ID_00 ),
    280     ROME_VER_2_1 = ((ROME_PATCH_VER_0200 << 16 ) | ROME_SOC_ID_11 ),
    281     ROME_VER_3_0 = ((ROME_PATCH_VER_0300 << 16 ) | ROME_SOC_ID_22 ),
    282     ROME_VER_3_2 = ((ROME_PATCH_VER_0302 << 16 ) | ROME_SOC_ID_44 )
    283 };
    284 #endif /* HW_ROME_H */
    285