xref: /openbmc/linux/drivers/net/wwan/t7xx/t7xx_hif_dpmaif_rx.h (revision 7ae9fb1b7ecbb5d85d07857943f677fd1a559b18)
1d642b012SHaijun Liu /* SPDX-License-Identifier: GPL-2.0-only
2d642b012SHaijun Liu  *
3d642b012SHaijun Liu  * Copyright (c) 2021, MediaTek Inc.
4d642b012SHaijun Liu  * Copyright (c) 2021-2022, Intel Corporation.
5d642b012SHaijun Liu  *
6d642b012SHaijun Liu  * Authors:
7d642b012SHaijun Liu  *  Haijun Liu <haijun.liu@mediatek.com>
8d642b012SHaijun Liu  *  Eliot Lee <eliot.lee@intel.com>
9d642b012SHaijun Liu  *  Ricardo Martinez <ricardo.martinez@linux.intel.com>
10d642b012SHaijun Liu  *
11d642b012SHaijun Liu  * Contributors:
12d642b012SHaijun Liu  *  Amir Hanania <amir.hanania@intel.com>
13d642b012SHaijun Liu  *  Moises Veleta <moises.veleta@intel.com>
14d642b012SHaijun Liu  *  Sreehari Kancharla <sreehari.kancharla@intel.com>
15d642b012SHaijun Liu  */
16d642b012SHaijun Liu 
17d642b012SHaijun Liu #ifndef __T7XX_HIF_DPMA_RX_H__
18d642b012SHaijun Liu #define __T7XX_HIF_DPMA_RX_H__
19d642b012SHaijun Liu 
20d642b012SHaijun Liu #include <linux/bits.h>
21d642b012SHaijun Liu #include <linux/types.h>
22d642b012SHaijun Liu 
23d642b012SHaijun Liu #include "t7xx_hif_dpmaif.h"
24d642b012SHaijun Liu 
25d642b012SHaijun Liu #define NETIF_MASK		GENMASK(4, 0)
26d642b012SHaijun Liu 
27d642b012SHaijun Liu #define PKT_TYPE_IP4		0
28d642b012SHaijun Liu #define PKT_TYPE_IP6		1
29d642b012SHaijun Liu 
30d642b012SHaijun Liu /* Structure of DL PIT */
31d642b012SHaijun Liu struct dpmaif_pit {
32d642b012SHaijun Liu 	__le32 header;
33d642b012SHaijun Liu 	union {
34d642b012SHaijun Liu 		struct {
35d642b012SHaijun Liu 			__le32 data_addr_l;
36d642b012SHaijun Liu 			__le32 data_addr_h;
37d642b012SHaijun Liu 			__le32 footer;
38d642b012SHaijun Liu 		} pd;
39d642b012SHaijun Liu 		struct {
40d642b012SHaijun Liu 			__le32 params_1;
41d642b012SHaijun Liu 			__le32 params_2;
42d642b012SHaijun Liu 			__le32 params_3;
43d642b012SHaijun Liu 		} msg;
44d642b012SHaijun Liu 	};
45d642b012SHaijun Liu };
46d642b012SHaijun Liu 
47d642b012SHaijun Liu /* PIT header fields */
48d642b012SHaijun Liu #define PD_PIT_DATA_LEN		GENMASK(31, 16)
49d642b012SHaijun Liu #define PD_PIT_BUFFER_ID	GENMASK(15, 3)
50d642b012SHaijun Liu #define PD_PIT_BUFFER_TYPE	BIT(2)
51d642b012SHaijun Liu #define PD_PIT_CONT		BIT(1)
52d642b012SHaijun Liu #define PD_PIT_PACKET_TYPE	BIT(0)
53d642b012SHaijun Liu /* PIT footer fields */
54d642b012SHaijun Liu #define PD_PIT_DLQ_DONE		GENMASK(31, 30)
55d642b012SHaijun Liu #define PD_PIT_ULQ_DONE		GENMASK(29, 24)
56d642b012SHaijun Liu #define PD_PIT_HEADER_OFFSET	GENMASK(23, 19)
57d642b012SHaijun Liu #define PD_PIT_BI_F		GENMASK(18, 17)
58d642b012SHaijun Liu #define PD_PIT_IG		BIT(16)
59d642b012SHaijun Liu #define PD_PIT_RES		GENMASK(15, 11)
60d642b012SHaijun Liu #define PD_PIT_H_BID		GENMASK(10, 8)
61d642b012SHaijun Liu #define PD_PIT_PIT_SEQ		GENMASK(7, 0)
62d642b012SHaijun Liu 
63d642b012SHaijun Liu #define MSG_PIT_DP		BIT(31)
64d642b012SHaijun Liu #define MSG_PIT_RES		GENMASK(30, 27)
65d642b012SHaijun Liu #define MSG_PIT_NETWORK_TYPE	GENMASK(26, 24)
66d642b012SHaijun Liu #define MSG_PIT_CHANNEL_ID	GENMASK(23, 16)
67d642b012SHaijun Liu #define MSG_PIT_RES2		GENMASK(15, 12)
68d642b012SHaijun Liu #define MSG_PIT_HPC_IDX		GENMASK(11, 8)
69d642b012SHaijun Liu #define MSG_PIT_SRC_QID		GENMASK(7, 5)
70d642b012SHaijun Liu #define MSG_PIT_ERROR_BIT	BIT(4)
71d642b012SHaijun Liu #define MSG_PIT_CHECKSUM	GENMASK(3, 2)
72d642b012SHaijun Liu #define MSG_PIT_CONT		BIT(1)
73d642b012SHaijun Liu #define MSG_PIT_PACKET_TYPE	BIT(0)
74d642b012SHaijun Liu 
75d642b012SHaijun Liu #define MSG_PIT_HP_IDX		GENMASK(31, 27)
76d642b012SHaijun Liu #define MSG_PIT_CMD		GENMASK(26, 24)
77d642b012SHaijun Liu #define MSG_PIT_RES3		GENMASK(23, 21)
78d642b012SHaijun Liu #define MSG_PIT_FLOW		GENMASK(20, 16)
79d642b012SHaijun Liu #define MSG_PIT_COUNT		GENMASK(15, 0)
80d642b012SHaijun Liu 
81d642b012SHaijun Liu #define MSG_PIT_HASH		GENMASK(31, 24)
82d642b012SHaijun Liu #define MSG_PIT_RES4		GENMASK(23, 18)
83d642b012SHaijun Liu #define MSG_PIT_PRO		GENMASK(17, 16)
84d642b012SHaijun Liu #define MSG_PIT_VBID		GENMASK(15, 3)
85d642b012SHaijun Liu #define MSG_PIT_RES5		GENMASK(2, 0)
86d642b012SHaijun Liu 
87d642b012SHaijun Liu #define MSG_PIT_DLQ_DONE	GENMASK(31, 30)
88d642b012SHaijun Liu #define MSG_PIT_ULQ_DONE	GENMASK(29, 24)
89d642b012SHaijun Liu #define MSG_PIT_IP		BIT(23)
90d642b012SHaijun Liu #define MSG_PIT_RES6		BIT(22)
91d642b012SHaijun Liu #define MSG_PIT_MR		GENMASK(21, 20)
92d642b012SHaijun Liu #define MSG_PIT_RES7		GENMASK(19, 17)
93d642b012SHaijun Liu #define MSG_PIT_IG		BIT(16)
94d642b012SHaijun Liu #define MSG_PIT_RES8		GENMASK(15, 11)
95d642b012SHaijun Liu #define MSG_PIT_H_BID		GENMASK(10, 8)
96d642b012SHaijun Liu #define MSG_PIT_PIT_SEQ		GENMASK(7, 0)
97d642b012SHaijun Liu 
98d642b012SHaijun Liu int t7xx_dpmaif_rxq_init(struct dpmaif_rx_queue *queue);
99d642b012SHaijun Liu void t7xx_dpmaif_rx_clear(struct dpmaif_ctrl *dpmaif_ctrl);
100d642b012SHaijun Liu int t7xx_dpmaif_bat_rel_wq_alloc(struct dpmaif_ctrl *dpmaif_ctrl);
101d642b012SHaijun Liu int t7xx_dpmaif_rx_buf_alloc(struct dpmaif_ctrl *dpmaif_ctrl,
102d642b012SHaijun Liu 			     const struct dpmaif_bat_request *bat_req,
103d642b012SHaijun Liu 			     const unsigned int q_num, const unsigned int buf_cnt,
104d642b012SHaijun Liu 			     const bool initial);
105d642b012SHaijun Liu int t7xx_dpmaif_rx_frag_alloc(struct dpmaif_ctrl *dpmaif_ctrl, struct dpmaif_bat_request *bat_req,
106d642b012SHaijun Liu 			      const unsigned int buf_cnt, const bool first_time);
107d642b012SHaijun Liu void t7xx_dpmaif_rx_stop(struct dpmaif_ctrl *dpmaif_ctrl);
108d642b012SHaijun Liu void t7xx_dpmaif_irq_rx_done(struct dpmaif_ctrl *dpmaif_ctrl, const unsigned int que_mask);
109d642b012SHaijun Liu void t7xx_dpmaif_rxq_free(struct dpmaif_rx_queue *queue);
110d642b012SHaijun Liu void t7xx_dpmaif_bat_wq_rel(struct dpmaif_ctrl *dpmaif_ctrl);
111d642b012SHaijun Liu int t7xx_dpmaif_bat_alloc(const struct dpmaif_ctrl *dpmaif_ctrl, struct dpmaif_bat_request *bat_req,
112d642b012SHaijun Liu 			  const enum bat_type buf_type);
113d642b012SHaijun Liu void t7xx_dpmaif_bat_free(const struct dpmaif_ctrl *dpmaif_ctrl,
114d642b012SHaijun Liu 			  struct dpmaif_bat_request *bat_req);
115*5545b7b9SHaijun Liu int t7xx_dpmaif_napi_rx_poll(struct napi_struct *napi, const int budget);
116d642b012SHaijun Liu 
117d642b012SHaijun Liu #endif /* __T7XX_HIF_DPMA_RX_H__ */
118