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