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 { |
50 | __le32 ; |
51 | __le32 ; |
52 | __le32 ; |
53 | __le32 ; |
54 | }; |
55 | |
56 | /* Coupled with HW - indicates if there is data following the CCCI header or not */ |
57 | #define 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 { |
64 | __le32 ; |
65 | __le32 ; |
66 | __le32 ; |
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 | |