static void
 ath10k_wmi_tlv_put_host_mem_chunks(struct ath10k *ar, void *host_mem_chunks)
 {
-       struct host_memory_chunk *chunk;
+       struct host_memory_chunk_tlv *chunk;
        struct wmi_tlv *tlv;
+       dma_addr_t paddr;
        int i;
        __le16 tlv_len, tlv_tag;
 
                chunk->size = __cpu_to_le32(ar->wmi.mem_chunks[i].len);
                chunk->req_id = __cpu_to_le32(ar->wmi.mem_chunks[i].req_id);
 
+               if (test_bit(WMI_SERVICE_SUPPORT_EXTEND_ADDRESS,
+                            ar->wmi.svc_map)) {
+                       paddr = ar->wmi.mem_chunks[i].paddr;
+                       chunk->ptr_high = __cpu_to_le32(upper_32_bits(paddr));
+               }
+
                ath10k_dbg(ar, ATH10K_DBG_WMI,
                           "wmi-tlv chunk %d len %d, addr 0x%llx, id 0x%x\n",
                           i,
        void *ptr;
 
        chunks_len = ar->wmi.num_mem_chunks *
-                    (sizeof(struct host_memory_chunk) + sizeof(*tlv));
+                    (sizeof(struct host_memory_chunk_tlv) + sizeof(*tlv));
        len = (sizeof(*tlv) + sizeof(*cmd)) +
              (sizeof(*tlv) + sizeof(*cfg)) +
              (sizeof(*tlv) + chunks_len);
 
        WMI_TLV_SERVICE_WLAN_HPCS_PULSE = 172,
        WMI_TLV_SERVICE_PER_VDEV_CHAINMASK_CONFIG_SUPPORT = 173,
        WMI_TLV_SERVICE_TX_DATA_MGMT_ACK_RSSI = 174,
+       WMI_TLV_SERVICE_NAN_DISABLE_SUPPORT = 175,
+       WMI_TLV_SERVICE_HTT_H2T_NO_HTC_HDR_LEN_IN_MSG_LEN = 176,
+       WMI_TLV_SERVICE_COEX_SUPPORT_UNEQUAL_ISOLATION = 177,
+       WMI_TLV_SERVICE_HW_DB2DBM_CONVERSION_SUPPORT = 178,
+       WMI_TLV_SERVICE_SUPPORT_EXTEND_ADDRESS = 179,
 
        WMI_TLV_MAX_EXT_SERVICE = 256,
 };
               WMI_TLV_MAX_SERVICE);
        SVCMAP(WMI_TLV_SERVICE_TX_DATA_MGMT_ACK_RSSI,
               WMI_SERVICE_TX_DATA_ACK_RSSI, WMI_TLV_MAX_SERVICE);
+       SVCMAP(WMI_TLV_SERVICE_SUPPORT_EXTEND_ADDRESS,
+              WMI_SERVICE_SUPPORT_EXTEND_ADDRESS,
+              WMI_TLV_MAX_SERVICE);
 }
 
 #undef SVCMAP
        __le32 host_capab;
 } __packed;
 
+/* structure describing host memory chunk. */
+struct host_memory_chunk_tlv {
+       /* id of the request that is passed up in service ready */
+       __le32 req_id;
+
+       /* the physical address the memory chunk */
+       __le32 ptr;
+
+       /* size of the chunk */
+       __le32 size;
+
+       /* the upper 32 bit address valid only for more than 32 bit target */
+       __le32 ptr_high;
+} __packed;
+
 struct wmi_tlv_init_cmd {
        struct wmi_tlv_abi_version abi;
        __le32 num_host_mem_chunks;
 
        WMI_SERVICE_REPORT_AIRTIME,
        WMI_SERVICE_SYNC_DELETE_CMDS,
        WMI_SERVICE_TX_PWR_PER_PEER,
+       WMI_SERVICE_SUPPORT_EXTEND_ADDRESS,
 
        /* Remember to add the new value to wmi_service_name()! */
 
        SVCSTR(WMI_SERVICE_REPORT_AIRTIME);
        SVCSTR(WMI_SERVICE_SYNC_DELETE_CMDS);
        SVCSTR(WMI_SERVICE_TX_PWR_PER_PEER);
+       SVCSTR(WMI_SERVICE_SUPPORT_EXTEND_ADDRESS);
 
        case WMI_SERVICE_MAX:
                return NULL;