1 /* SPDX-License-Identifier: GPL-2.0-only 2 * 3 * Copyright (c) 2021, MediaTek Inc. 4 * Copyright (c) 2021-2022, Intel Corporation. 5 * 6 * Authors: 7 * Amir Hanania <amir.hanania@intel.com> 8 * Haijun Liu <haijun.liu@mediatek.com> 9 * Moises Veleta <moises.veleta@intel.com> 10 * Ricardo Martinez <ricardo.martinez@linux.intel.com> 11 * 12 * Contributors: 13 * Chiranjeevi Rapolu <chiranjeevi.rapolu@intel.com> 14 * Eliot Lee <eliot.lee@intel.com> 15 * Sreehari Kancharla <sreehari.kancharla@intel.com> 16 */ 17 18 #ifndef __T7XX_PORT_PROXY_H__ 19 #define __T7XX_PORT_PROXY_H__ 20 21 #include <linux/bits.h> 22 #include <linux/device.h> 23 #include <linux/skbuff.h> 24 #include <linux/types.h> 25 26 #include "t7xx_hif_cldma.h" 27 #include "t7xx_modem_ops.h" 28 #include "t7xx_port.h" 29 30 #define MTK_QUEUES 16 31 #define RX_QUEUE_MAXLEN 32 32 #define CTRL_QUEUE_MAXLEN 16 33 34 enum port_cfg_id { 35 PORT_CFG_ID_INVALID, 36 PORT_CFG_ID_NORMAL, 37 PORT_CFG_ID_EARLY, 38 }; 39 40 struct port_proxy { 41 int port_count; 42 struct list_head rx_ch_ports[PORT_CH_ID_MASK + 1]; 43 struct list_head queue_ports[CLDMA_NUM][MTK_QUEUES]; 44 struct device *dev; 45 enum port_cfg_id cfg_id; 46 struct t7xx_port ports[]; 47 }; 48 49 struct ccci_header { 50 __le32 packet_header; 51 __le32 packet_len; 52 __le32 status; 53 __le32 ex_msg; 54 }; 55 56 /* Coupled with HW - indicates if there is data following the CCCI header or not */ 57 #define CCCI_HEADER_NO_DATA 0xffffffff 58 59 #define CCCI_H_AST_BIT BIT(31) 60 #define CCCI_H_SEQ_FLD GENMASK(30, 16) 61 #define CCCI_H_CHN_FLD GENMASK(15, 0) 62 63 struct ctrl_msg_header { 64 __le32 ctrl_msg_id; 65 __le32 ex_msg; 66 __le32 data_length; 67 }; 68 69 /* Control identification numbers for AP<->MD messages */ 70 #define CTL_ID_HS1_MSG 0x0 71 #define CTL_ID_HS2_MSG 0x1 72 #define CTL_ID_HS3_MSG 0x2 73 #define CTL_ID_MD_EX 0x4 74 #define CTL_ID_DRV_VER_ERROR 0x5 75 #define CTL_ID_MD_EX_ACK 0x6 76 #define CTL_ID_MD_EX_PASS 0x8 77 #define CTL_ID_PORT_ENUM 0x9 78 79 /* Modem exception check identification code - "EXCP" */ 80 #define MD_EX_CHK_ID 0x45584350 81 /* Modem exception check acknowledge identification code - "EREC" */ 82 #define MD_EX_CHK_ACK_ID 0x45524543 83 84 #define PORT_INFO_RSRVD GENMASK(31, 16) 85 #define PORT_INFO_ENFLG BIT(15) 86 #define PORT_INFO_CH_ID GENMASK(14, 0) 87 88 #define PORT_ENUM_VER 0 89 #define PORT_ENUM_HEAD_PATTERN 0x5a5a5a5a 90 #define PORT_ENUM_TAIL_PATTERN 0xa5a5a5a5 91 #define PORT_ENUM_VER_MISMATCH 0x00657272 92 93 /* Port operations mapping */ 94 extern struct port_ops wwan_sub_port_ops; 95 extern struct port_ops ctl_port_ops; 96 97 #ifdef CONFIG_WWAN_DEBUGFS 98 extern struct port_ops t7xx_trace_port_ops; 99 #endif 100 101 void t7xx_port_proxy_reset(struct port_proxy *port_prox); 102 void t7xx_port_proxy_uninit(struct port_proxy *port_prox); 103 int t7xx_port_proxy_init(struct t7xx_modem *md); 104 void t7xx_port_proxy_md_status_notify(struct port_proxy *port_prox, unsigned int state); 105 int t7xx_port_enum_msg_handler(struct t7xx_modem *md, void *msg); 106 int t7xx_port_proxy_chl_enable_disable(struct port_proxy *port_prox, unsigned int ch_id, 107 bool en_flag); 108 void t7xx_port_proxy_set_cfg(struct t7xx_modem *md, enum port_cfg_id cfg_id); 109 int t7xx_port_proxy_recv_skb(struct cldma_queue *queue, struct sk_buff *skb); 110 int t7xx_port_proxy_recv_skb_from_dedicated_queue(struct cldma_queue *queue, struct sk_buff *skb); 111 112 #endif /* __T7XX_PORT_PROXY_H__ */ 113