162306a36Sopenharmony_ci/* SPDX-License-Identifier: BSD-3-Clause-Clear */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright (c) 2018-2021 The Linux Foundation. All rights reserved. 462306a36Sopenharmony_ci * Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved. 562306a36Sopenharmony_ci */ 662306a36Sopenharmony_ci 762306a36Sopenharmony_ci#ifndef ATH12K_HTC_H 862306a36Sopenharmony_ci#define ATH12K_HTC_H 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci#include <linux/kernel.h> 1162306a36Sopenharmony_ci#include <linux/list.h> 1262306a36Sopenharmony_ci#include <linux/bug.h> 1362306a36Sopenharmony_ci#include <linux/skbuff.h> 1462306a36Sopenharmony_ci#include <linux/timer.h> 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_cistruct ath12k_base; 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ci#define HTC_HDR_ENDPOINTID GENMASK(7, 0) 1962306a36Sopenharmony_ci#define HTC_HDR_FLAGS GENMASK(15, 8) 2062306a36Sopenharmony_ci#define HTC_HDR_PAYLOADLEN GENMASK(31, 16) 2162306a36Sopenharmony_ci#define HTC_HDR_CONTROLBYTES0 GENMASK(7, 0) 2262306a36Sopenharmony_ci#define HTC_HDR_CONTROLBYTES1 GENMASK(15, 8) 2362306a36Sopenharmony_ci#define HTC_HDR_RESERVED GENMASK(31, 16) 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_ci#define HTC_SVC_MSG_SERVICE_ID GENMASK(31, 16) 2662306a36Sopenharmony_ci#define HTC_SVC_MSG_CONNECTIONFLAGS GENMASK(15, 0) 2762306a36Sopenharmony_ci#define HTC_SVC_MSG_SERVICEMETALENGTH GENMASK(23, 16) 2862306a36Sopenharmony_ci#define HTC_READY_MSG_CREDITCOUNT GENMASK(31, 16) 2962306a36Sopenharmony_ci#define HTC_READY_MSG_CREDITSIZE GENMASK(15, 0) 3062306a36Sopenharmony_ci#define HTC_READY_MSG_MAXENDPOINTS GENMASK(23, 16) 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_ci#define HTC_READY_EX_MSG_HTCVERSION GENMASK(7, 0) 3362306a36Sopenharmony_ci#define HTC_READY_EX_MSG_MAXMSGSPERHTCBUNDLE GENMASK(15, 8) 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_ci#define HTC_SVC_RESP_MSG_SERVICEID GENMASK(31, 16) 3662306a36Sopenharmony_ci#define HTC_SVC_RESP_MSG_STATUS GENMASK(7, 0) 3762306a36Sopenharmony_ci#define HTC_SVC_RESP_MSG_ENDPOINTID GENMASK(15, 8) 3862306a36Sopenharmony_ci#define HTC_SVC_RESP_MSG_MAXMSGSIZE GENMASK(31, 16) 3962306a36Sopenharmony_ci#define HTC_SVC_RESP_MSG_SERVICEMETALENGTH GENMASK(7, 0) 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_ci#define HTC_MSG_MESSAGEID GENMASK(15, 0) 4262306a36Sopenharmony_ci#define HTC_SETUP_COMPLETE_EX_MSG_SETUPFLAGS GENMASK(31, 0) 4362306a36Sopenharmony_ci#define HTC_SETUP_COMPLETE_EX_MSG_MAXMSGSPERBUNDLEDRECV GENMASK(7, 0) 4462306a36Sopenharmony_ci#define HTC_SETUP_COMPLETE_EX_MSG_RSVD0 GENMASK(15, 8) 4562306a36Sopenharmony_ci#define HTC_SETUP_COMPLETE_EX_MSG_RSVD1 GENMASK(23, 16) 4662306a36Sopenharmony_ci#define HTC_SETUP_COMPLETE_EX_MSG_RSVD2 GENMASK(31, 24) 4762306a36Sopenharmony_ci 4862306a36Sopenharmony_cienum ath12k_htc_tx_flags { 4962306a36Sopenharmony_ci ATH12K_HTC_FLAG_NEED_CREDIT_UPDATE = 0x01, 5062306a36Sopenharmony_ci ATH12K_HTC_FLAG_SEND_BUNDLE = 0x02 5162306a36Sopenharmony_ci}; 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_cienum ath12k_htc_rx_flags { 5462306a36Sopenharmony_ci ATH12K_HTC_FLAG_TRAILER_PRESENT = 0x02, 5562306a36Sopenharmony_ci ATH12K_HTC_FLAG_BUNDLE_MASK = 0xF0 5662306a36Sopenharmony_ci}; 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_cistruct ath12k_htc_hdr { 5962306a36Sopenharmony_ci __le32 htc_info; 6062306a36Sopenharmony_ci __le32 ctrl_info; 6162306a36Sopenharmony_ci} __packed __aligned(4); 6262306a36Sopenharmony_ci 6362306a36Sopenharmony_cienum ath12k_htc_msg_id { 6462306a36Sopenharmony_ci ATH12K_HTC_MSG_READY_ID = 1, 6562306a36Sopenharmony_ci ATH12K_HTC_MSG_CONNECT_SERVICE_ID = 2, 6662306a36Sopenharmony_ci ATH12K_HTC_MSG_CONNECT_SERVICE_RESP_ID = 3, 6762306a36Sopenharmony_ci ATH12K_HTC_MSG_SETUP_COMPLETE_ID = 4, 6862306a36Sopenharmony_ci ATH12K_HTC_MSG_SETUP_COMPLETE_EX_ID = 5, 6962306a36Sopenharmony_ci ATH12K_HTC_MSG_SEND_SUSPEND_COMPLETE = 6, 7062306a36Sopenharmony_ci ATH12K_HTC_MSG_NACK_SUSPEND = 7, 7162306a36Sopenharmony_ci ATH12K_HTC_MSG_WAKEUP_FROM_SUSPEND_ID = 8, 7262306a36Sopenharmony_ci}; 7362306a36Sopenharmony_ci 7462306a36Sopenharmony_cienum ath12k_htc_version { 7562306a36Sopenharmony_ci ATH12K_HTC_VERSION_2P0 = 0x00, /* 2.0 */ 7662306a36Sopenharmony_ci ATH12K_HTC_VERSION_2P1 = 0x01, /* 2.1 */ 7762306a36Sopenharmony_ci}; 7862306a36Sopenharmony_ci 7962306a36Sopenharmony_cienum ath12k_htc_conn_flag_threshold_level { 8062306a36Sopenharmony_ci ATH12K_HTC_CONN_FLAGS_THRESHOLD_LEVEL_ONE_FOURTH, 8162306a36Sopenharmony_ci ATH12K_HTC_CONN_FLAGS_THRESHOLD_LEVEL_ONE_HALF, 8262306a36Sopenharmony_ci ATH12K_HTC_CONN_FLAGS_THRESHOLD_LEVEL_THREE_FOURTHS, 8362306a36Sopenharmony_ci ATH12K_HTC_CONN_FLAGS_THRESHOLD_LEVEL_UNITY, 8462306a36Sopenharmony_ci}; 8562306a36Sopenharmony_ci 8662306a36Sopenharmony_ci#define ATH12K_HTC_CONN_FLAGS_THRESHOLD_LEVEL_MASK GENMASK(1, 0) 8762306a36Sopenharmony_ci#define ATH12K_HTC_CONN_FLAGS_REDUCE_CREDIT_DRIBBLE BIT(2) 8862306a36Sopenharmony_ci#define ATH12K_HTC_CONN_FLAGS_DISABLE_CREDIT_FLOW_CTRL BIT(3) 8962306a36Sopenharmony_ci#define ATH12K_HTC_CONN_FLAGS_RECV_ALLOC GENMASK(15, 8) 9062306a36Sopenharmony_ci 9162306a36Sopenharmony_cienum ath12k_htc_conn_svc_status { 9262306a36Sopenharmony_ci ATH12K_HTC_CONN_SVC_STATUS_SUCCESS = 0, 9362306a36Sopenharmony_ci ATH12K_HTC_CONN_SVC_STATUS_NOT_FOUND = 1, 9462306a36Sopenharmony_ci ATH12K_HTC_CONN_SVC_STATUS_FAILED = 2, 9562306a36Sopenharmony_ci ATH12K_HTC_CONN_SVC_STATUS_NO_RESOURCES = 3, 9662306a36Sopenharmony_ci ATH12K_HTC_CONN_SVC_STATUS_NO_MORE_EP = 4 9762306a36Sopenharmony_ci}; 9862306a36Sopenharmony_ci 9962306a36Sopenharmony_cistruct ath12k_htc_ready { 10062306a36Sopenharmony_ci __le32 id_credit_count; 10162306a36Sopenharmony_ci __le32 size_ep; 10262306a36Sopenharmony_ci} __packed; 10362306a36Sopenharmony_ci 10462306a36Sopenharmony_cistruct ath12k_htc_ready_extended { 10562306a36Sopenharmony_ci struct ath12k_htc_ready base; 10662306a36Sopenharmony_ci __le32 ver_bundle; 10762306a36Sopenharmony_ci} __packed; 10862306a36Sopenharmony_ci 10962306a36Sopenharmony_cistruct ath12k_htc_conn_svc { 11062306a36Sopenharmony_ci __le32 msg_svc_id; 11162306a36Sopenharmony_ci __le32 flags_len; 11262306a36Sopenharmony_ci} __packed; 11362306a36Sopenharmony_ci 11462306a36Sopenharmony_cistruct ath12k_htc_conn_svc_resp { 11562306a36Sopenharmony_ci __le32 msg_svc_id; 11662306a36Sopenharmony_ci __le32 flags_len; 11762306a36Sopenharmony_ci __le32 svc_meta_pad; 11862306a36Sopenharmony_ci} __packed; 11962306a36Sopenharmony_ci 12062306a36Sopenharmony_cistruct ath12k_htc_setup_complete_extended { 12162306a36Sopenharmony_ci __le32 msg_id; 12262306a36Sopenharmony_ci __le32 flags; 12362306a36Sopenharmony_ci __le32 max_msgs_per_bundled_recv; 12462306a36Sopenharmony_ci} __packed; 12562306a36Sopenharmony_ci 12662306a36Sopenharmony_cistruct ath12k_htc_msg { 12762306a36Sopenharmony_ci __le32 msg_svc_id; 12862306a36Sopenharmony_ci __le32 flags_len; 12962306a36Sopenharmony_ci} __packed __aligned(4); 13062306a36Sopenharmony_ci 13162306a36Sopenharmony_cienum ath12k_htc_record_id { 13262306a36Sopenharmony_ci ATH12K_HTC_RECORD_NULL = 0, 13362306a36Sopenharmony_ci ATH12K_HTC_RECORD_CREDITS = 1 13462306a36Sopenharmony_ci}; 13562306a36Sopenharmony_ci 13662306a36Sopenharmony_cistruct ath12k_htc_record_hdr { 13762306a36Sopenharmony_ci u8 id; /* @enum ath12k_htc_record_id */ 13862306a36Sopenharmony_ci u8 len; 13962306a36Sopenharmony_ci u8 pad0; 14062306a36Sopenharmony_ci u8 pad1; 14162306a36Sopenharmony_ci} __packed; 14262306a36Sopenharmony_ci 14362306a36Sopenharmony_cistruct ath12k_htc_credit_report { 14462306a36Sopenharmony_ci u8 eid; /* @enum ath12k_htc_ep_id */ 14562306a36Sopenharmony_ci u8 credits; 14662306a36Sopenharmony_ci u8 pad0; 14762306a36Sopenharmony_ci u8 pad1; 14862306a36Sopenharmony_ci} __packed; 14962306a36Sopenharmony_ci 15062306a36Sopenharmony_cistruct ath12k_htc_record { 15162306a36Sopenharmony_ci struct ath12k_htc_record_hdr hdr; 15262306a36Sopenharmony_ci struct ath12k_htc_credit_report credit_report[]; 15362306a36Sopenharmony_ci} __packed __aligned(4); 15462306a36Sopenharmony_ci 15562306a36Sopenharmony_ci/* HTC FRAME structure layout draft 15662306a36Sopenharmony_ci * 15762306a36Sopenharmony_ci * note: the trailer offset is dynamic depending 15862306a36Sopenharmony_ci * on payload length. this is only a struct layout draft 15962306a36Sopenharmony_ci * 16062306a36Sopenharmony_ci *======================================================= 16162306a36Sopenharmony_ci * 16262306a36Sopenharmony_ci * HTC HEADER 16362306a36Sopenharmony_ci * 16462306a36Sopenharmony_ci *======================================================= 16562306a36Sopenharmony_ci * | 16662306a36Sopenharmony_ci * HTC message | payload 16762306a36Sopenharmony_ci * (variable length) | (variable length) 16862306a36Sopenharmony_ci *======================================================= 16962306a36Sopenharmony_ci * 17062306a36Sopenharmony_ci * HTC Record 17162306a36Sopenharmony_ci * 17262306a36Sopenharmony_ci *======================================================= 17362306a36Sopenharmony_ci */ 17462306a36Sopenharmony_ci 17562306a36Sopenharmony_cienum ath12k_htc_svc_gid { 17662306a36Sopenharmony_ci ATH12K_HTC_SVC_GRP_RSVD = 0, 17762306a36Sopenharmony_ci ATH12K_HTC_SVC_GRP_WMI = 1, 17862306a36Sopenharmony_ci ATH12K_HTC_SVC_GRP_NMI = 2, 17962306a36Sopenharmony_ci ATH12K_HTC_SVC_GRP_HTT = 3, 18062306a36Sopenharmony_ci ATH12K_HTC_SVC_GRP_CFG = 4, 18162306a36Sopenharmony_ci ATH12K_HTC_SVC_GRP_IPA = 5, 18262306a36Sopenharmony_ci ATH12K_HTC_SVC_GRP_PKTLOG = 6, 18362306a36Sopenharmony_ci 18462306a36Sopenharmony_ci ATH12K_HTC_SVC_GRP_TEST = 254, 18562306a36Sopenharmony_ci ATH12K_HTC_SVC_GRP_LAST = 255, 18662306a36Sopenharmony_ci}; 18762306a36Sopenharmony_ci 18862306a36Sopenharmony_ci#define SVC(group, idx) \ 18962306a36Sopenharmony_ci (int)(((int)(group) << 8) | (int)(idx)) 19062306a36Sopenharmony_ci 19162306a36Sopenharmony_cienum ath12k_htc_svc_id { 19262306a36Sopenharmony_ci /* NOTE: service ID of 0x0000 is reserved and should never be used */ 19362306a36Sopenharmony_ci ATH12K_HTC_SVC_ID_RESERVED = 0x0000, 19462306a36Sopenharmony_ci ATH12K_HTC_SVC_ID_UNUSED = ATH12K_HTC_SVC_ID_RESERVED, 19562306a36Sopenharmony_ci 19662306a36Sopenharmony_ci ATH12K_HTC_SVC_ID_RSVD_CTRL = SVC(ATH12K_HTC_SVC_GRP_RSVD, 1), 19762306a36Sopenharmony_ci ATH12K_HTC_SVC_ID_WMI_CONTROL = SVC(ATH12K_HTC_SVC_GRP_WMI, 0), 19862306a36Sopenharmony_ci ATH12K_HTC_SVC_ID_WMI_DATA_BE = SVC(ATH12K_HTC_SVC_GRP_WMI, 1), 19962306a36Sopenharmony_ci ATH12K_HTC_SVC_ID_WMI_DATA_BK = SVC(ATH12K_HTC_SVC_GRP_WMI, 2), 20062306a36Sopenharmony_ci ATH12K_HTC_SVC_ID_WMI_DATA_VI = SVC(ATH12K_HTC_SVC_GRP_WMI, 3), 20162306a36Sopenharmony_ci ATH12K_HTC_SVC_ID_WMI_DATA_VO = SVC(ATH12K_HTC_SVC_GRP_WMI, 4), 20262306a36Sopenharmony_ci ATH12K_HTC_SVC_ID_WMI_CONTROL_MAC1 = SVC(ATH12K_HTC_SVC_GRP_WMI, 5), 20362306a36Sopenharmony_ci ATH12K_HTC_SVC_ID_WMI_CONTROL_MAC2 = SVC(ATH12K_HTC_SVC_GRP_WMI, 6), 20462306a36Sopenharmony_ci ATH12K_HTC_SVC_ID_WMI_CONTROL_DIAG = SVC(ATH12K_HTC_SVC_GRP_WMI, 7), 20562306a36Sopenharmony_ci 20662306a36Sopenharmony_ci ATH12K_HTC_SVC_ID_NMI_CONTROL = SVC(ATH12K_HTC_SVC_GRP_NMI, 0), 20762306a36Sopenharmony_ci ATH12K_HTC_SVC_ID_NMI_DATA = SVC(ATH12K_HTC_SVC_GRP_NMI, 1), 20862306a36Sopenharmony_ci 20962306a36Sopenharmony_ci ATH12K_HTC_SVC_ID_HTT_DATA_MSG = SVC(ATH12K_HTC_SVC_GRP_HTT, 0), 21062306a36Sopenharmony_ci 21162306a36Sopenharmony_ci /* raw stream service (i.e. flash, tcmd, calibration apps) */ 21262306a36Sopenharmony_ci ATH12K_HTC_SVC_ID_TEST_RAW_STREAMS = SVC(ATH12K_HTC_SVC_GRP_TEST, 0), 21362306a36Sopenharmony_ci ATH12K_HTC_SVC_ID_IPA_TX = SVC(ATH12K_HTC_SVC_GRP_IPA, 0), 21462306a36Sopenharmony_ci ATH12K_HTC_SVC_ID_PKT_LOG = SVC(ATH12K_HTC_SVC_GRP_PKTLOG, 0), 21562306a36Sopenharmony_ci}; 21662306a36Sopenharmony_ci 21762306a36Sopenharmony_ci#undef SVC 21862306a36Sopenharmony_ci 21962306a36Sopenharmony_cienum ath12k_htc_ep_id { 22062306a36Sopenharmony_ci ATH12K_HTC_EP_UNUSED = -1, 22162306a36Sopenharmony_ci ATH12K_HTC_EP_0 = 0, 22262306a36Sopenharmony_ci ATH12K_HTC_EP_1 = 1, 22362306a36Sopenharmony_ci ATH12K_HTC_EP_2, 22462306a36Sopenharmony_ci ATH12K_HTC_EP_3, 22562306a36Sopenharmony_ci ATH12K_HTC_EP_4, 22662306a36Sopenharmony_ci ATH12K_HTC_EP_5, 22762306a36Sopenharmony_ci ATH12K_HTC_EP_6, 22862306a36Sopenharmony_ci ATH12K_HTC_EP_7, 22962306a36Sopenharmony_ci ATH12K_HTC_EP_8, 23062306a36Sopenharmony_ci ATH12K_HTC_EP_COUNT, 23162306a36Sopenharmony_ci}; 23262306a36Sopenharmony_ci 23362306a36Sopenharmony_cistruct ath12k_htc_ep_ops { 23462306a36Sopenharmony_ci void (*ep_tx_complete)(struct ath12k_base *ab, struct sk_buff *skb); 23562306a36Sopenharmony_ci void (*ep_rx_complete)(struct ath12k_base *ab, struct sk_buff *skb); 23662306a36Sopenharmony_ci void (*ep_tx_credits)(struct ath12k_base *ab); 23762306a36Sopenharmony_ci}; 23862306a36Sopenharmony_ci 23962306a36Sopenharmony_ci/* service connection information */ 24062306a36Sopenharmony_cistruct ath12k_htc_svc_conn_req { 24162306a36Sopenharmony_ci u16 service_id; 24262306a36Sopenharmony_ci struct ath12k_htc_ep_ops ep_ops; 24362306a36Sopenharmony_ci int max_send_queue_depth; 24462306a36Sopenharmony_ci}; 24562306a36Sopenharmony_ci 24662306a36Sopenharmony_ci/* service connection response information */ 24762306a36Sopenharmony_cistruct ath12k_htc_svc_conn_resp { 24862306a36Sopenharmony_ci u8 buffer_len; 24962306a36Sopenharmony_ci u8 actual_len; 25062306a36Sopenharmony_ci enum ath12k_htc_ep_id eid; 25162306a36Sopenharmony_ci unsigned int max_msg_len; 25262306a36Sopenharmony_ci u8 connect_resp_code; 25362306a36Sopenharmony_ci}; 25462306a36Sopenharmony_ci 25562306a36Sopenharmony_ci#define ATH12K_NUM_CONTROL_TX_BUFFERS 2 25662306a36Sopenharmony_ci#define ATH12K_HTC_MAX_LEN 4096 25762306a36Sopenharmony_ci#define ATH12K_HTC_MAX_CTRL_MSG_LEN 256 25862306a36Sopenharmony_ci#define ATH12K_HTC_WAIT_TIMEOUT_HZ (1 * HZ) 25962306a36Sopenharmony_ci#define ATH12K_HTC_CONTROL_BUFFER_SIZE (ATH12K_HTC_MAX_CTRL_MSG_LEN + \ 26062306a36Sopenharmony_ci sizeof(struct ath12k_htc_hdr)) 26162306a36Sopenharmony_ci#define ATH12K_HTC_CONN_SVC_TIMEOUT_HZ (1 * HZ) 26262306a36Sopenharmony_ci#define ATH12K_HTC_MAX_SERVICE_ALLOC_ENTRIES 8 26362306a36Sopenharmony_ci 26462306a36Sopenharmony_cistruct ath12k_htc_ep { 26562306a36Sopenharmony_ci struct ath12k_htc *htc; 26662306a36Sopenharmony_ci enum ath12k_htc_ep_id eid; 26762306a36Sopenharmony_ci enum ath12k_htc_svc_id service_id; 26862306a36Sopenharmony_ci struct ath12k_htc_ep_ops ep_ops; 26962306a36Sopenharmony_ci 27062306a36Sopenharmony_ci int max_tx_queue_depth; 27162306a36Sopenharmony_ci int max_ep_message_len; 27262306a36Sopenharmony_ci u8 ul_pipe_id; 27362306a36Sopenharmony_ci u8 dl_pipe_id; 27462306a36Sopenharmony_ci 27562306a36Sopenharmony_ci u8 seq_no; /* for debugging */ 27662306a36Sopenharmony_ci int tx_credits; 27762306a36Sopenharmony_ci bool tx_credit_flow_enabled; 27862306a36Sopenharmony_ci}; 27962306a36Sopenharmony_ci 28062306a36Sopenharmony_cistruct ath12k_htc_svc_tx_credits { 28162306a36Sopenharmony_ci u16 service_id; 28262306a36Sopenharmony_ci u8 credit_allocation; 28362306a36Sopenharmony_ci}; 28462306a36Sopenharmony_ci 28562306a36Sopenharmony_cistruct ath12k_htc { 28662306a36Sopenharmony_ci struct ath12k_base *ab; 28762306a36Sopenharmony_ci struct ath12k_htc_ep endpoint[ATH12K_HTC_EP_COUNT]; 28862306a36Sopenharmony_ci 28962306a36Sopenharmony_ci /* protects endpoints */ 29062306a36Sopenharmony_ci spinlock_t tx_lock; 29162306a36Sopenharmony_ci 29262306a36Sopenharmony_ci u8 control_resp_buffer[ATH12K_HTC_MAX_CTRL_MSG_LEN]; 29362306a36Sopenharmony_ci int control_resp_len; 29462306a36Sopenharmony_ci 29562306a36Sopenharmony_ci struct completion ctl_resp; 29662306a36Sopenharmony_ci 29762306a36Sopenharmony_ci int total_transmit_credits; 29862306a36Sopenharmony_ci struct ath12k_htc_svc_tx_credits 29962306a36Sopenharmony_ci service_alloc_table[ATH12K_HTC_MAX_SERVICE_ALLOC_ENTRIES]; 30062306a36Sopenharmony_ci int target_credit_size; 30162306a36Sopenharmony_ci u8 wmi_ep_count; 30262306a36Sopenharmony_ci}; 30362306a36Sopenharmony_ci 30462306a36Sopenharmony_ciint ath12k_htc_init(struct ath12k_base *ar); 30562306a36Sopenharmony_ciint ath12k_htc_wait_target(struct ath12k_htc *htc); 30662306a36Sopenharmony_ciint ath12k_htc_start(struct ath12k_htc *htc); 30762306a36Sopenharmony_ciint ath12k_htc_connect_service(struct ath12k_htc *htc, 30862306a36Sopenharmony_ci struct ath12k_htc_svc_conn_req *conn_req, 30962306a36Sopenharmony_ci struct ath12k_htc_svc_conn_resp *conn_resp); 31062306a36Sopenharmony_ciint ath12k_htc_send(struct ath12k_htc *htc, enum ath12k_htc_ep_id eid, 31162306a36Sopenharmony_ci struct sk_buff *packet); 31262306a36Sopenharmony_cistruct sk_buff *ath12k_htc_alloc_skb(struct ath12k_base *ar, int size); 31362306a36Sopenharmony_civoid ath12k_htc_rx_completion_handler(struct ath12k_base *ar, 31462306a36Sopenharmony_ci struct sk_buff *skb); 31562306a36Sopenharmony_ci 31662306a36Sopenharmony_ci#endif 317