d27553c14f
To support cases such as FW update or Core dump, the t7xx
device is capable of signaling the host that a special port
needs to be created before the handshake phase.
Adds the infrastructure required to create the early ports
which also requires a different configuration of CLDMA queues.
Base on the v5 patch version of follow series:
'net: wwan: t7xx: fw flashing & coredump support'
(3777bb382f
.1674307425.git.m.chetan.kumar@linux.intel.com/)
Signed-off-by: Jinjian Song <jinjian.song@fibocom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
113 lines
3.1 KiB
C
113 lines
3.1 KiB
C
/* SPDX-License-Identifier: GPL-2.0-only
|
|
*
|
|
* Copyright (c) 2021, MediaTek Inc.
|
|
* Copyright (c) 2021-2022, Intel Corporation.
|
|
*
|
|
* Authors:
|
|
* Amir Hanania <amir.hanania@intel.com>
|
|
* Haijun Liu <haijun.liu@mediatek.com>
|
|
* Moises Veleta <moises.veleta@intel.com>
|
|
* Ricardo Martinez <ricardo.martinez@linux.intel.com>
|
|
*
|
|
* Contributors:
|
|
* Chiranjeevi Rapolu <chiranjeevi.rapolu@intel.com>
|
|
* Eliot Lee <eliot.lee@intel.com>
|
|
* Sreehari Kancharla <sreehari.kancharla@intel.com>
|
|
*/
|
|
|
|
#ifndef __T7XX_PORT_PROXY_H__
|
|
#define __T7XX_PORT_PROXY_H__
|
|
|
|
#include <linux/bits.h>
|
|
#include <linux/device.h>
|
|
#include <linux/skbuff.h>
|
|
#include <linux/types.h>
|
|
|
|
#include "t7xx_hif_cldma.h"
|
|
#include "t7xx_modem_ops.h"
|
|
#include "t7xx_port.h"
|
|
|
|
#define MTK_QUEUES 16
|
|
#define RX_QUEUE_MAXLEN 32
|
|
#define CTRL_QUEUE_MAXLEN 16
|
|
|
|
enum port_cfg_id {
|
|
PORT_CFG_ID_INVALID,
|
|
PORT_CFG_ID_NORMAL,
|
|
PORT_CFG_ID_EARLY,
|
|
};
|
|
|
|
struct port_proxy {
|
|
int port_count;
|
|
struct list_head rx_ch_ports[PORT_CH_ID_MASK + 1];
|
|
struct list_head queue_ports[CLDMA_NUM][MTK_QUEUES];
|
|
struct device *dev;
|
|
enum port_cfg_id cfg_id;
|
|
struct t7xx_port ports[];
|
|
};
|
|
|
|
struct ccci_header {
|
|
__le32 packet_header;
|
|
__le32 packet_len;
|
|
__le32 status;
|
|
__le32 ex_msg;
|
|
};
|
|
|
|
/* Coupled with HW - indicates if there is data following the CCCI header or not */
|
|
#define CCCI_HEADER_NO_DATA 0xffffffff
|
|
|
|
#define CCCI_H_AST_BIT BIT(31)
|
|
#define CCCI_H_SEQ_FLD GENMASK(30, 16)
|
|
#define CCCI_H_CHN_FLD GENMASK(15, 0)
|
|
|
|
struct ctrl_msg_header {
|
|
__le32 ctrl_msg_id;
|
|
__le32 ex_msg;
|
|
__le32 data_length;
|
|
};
|
|
|
|
/* Control identification numbers for AP<->MD messages */
|
|
#define CTL_ID_HS1_MSG 0x0
|
|
#define CTL_ID_HS2_MSG 0x1
|
|
#define CTL_ID_HS3_MSG 0x2
|
|
#define CTL_ID_MD_EX 0x4
|
|
#define CTL_ID_DRV_VER_ERROR 0x5
|
|
#define CTL_ID_MD_EX_ACK 0x6
|
|
#define CTL_ID_MD_EX_PASS 0x8
|
|
#define CTL_ID_PORT_ENUM 0x9
|
|
|
|
/* Modem exception check identification code - "EXCP" */
|
|
#define MD_EX_CHK_ID 0x45584350
|
|
/* Modem exception check acknowledge identification code - "EREC" */
|
|
#define MD_EX_CHK_ACK_ID 0x45524543
|
|
|
|
#define PORT_INFO_RSRVD GENMASK(31, 16)
|
|
#define PORT_INFO_ENFLG BIT(15)
|
|
#define PORT_INFO_CH_ID GENMASK(14, 0)
|
|
|
|
#define PORT_ENUM_VER 0
|
|
#define PORT_ENUM_HEAD_PATTERN 0x5a5a5a5a
|
|
#define PORT_ENUM_TAIL_PATTERN 0xa5a5a5a5
|
|
#define PORT_ENUM_VER_MISMATCH 0x00657272
|
|
|
|
/* Port operations mapping */
|
|
extern struct port_ops wwan_sub_port_ops;
|
|
extern struct port_ops ctl_port_ops;
|
|
|
|
#ifdef CONFIG_WWAN_DEBUGFS
|
|
extern struct port_ops t7xx_trace_port_ops;
|
|
#endif
|
|
|
|
void t7xx_port_proxy_reset(struct port_proxy *port_prox);
|
|
void t7xx_port_proxy_uninit(struct port_proxy *port_prox);
|
|
int t7xx_port_proxy_init(struct t7xx_modem *md);
|
|
void t7xx_port_proxy_md_status_notify(struct port_proxy *port_prox, unsigned int state);
|
|
int t7xx_port_enum_msg_handler(struct t7xx_modem *md, void *msg);
|
|
int t7xx_port_proxy_chl_enable_disable(struct port_proxy *port_prox, unsigned int ch_id,
|
|
bool en_flag);
|
|
void t7xx_port_proxy_set_cfg(struct t7xx_modem *md, enum port_cfg_id cfg_id);
|
|
int t7xx_port_proxy_recv_skb(struct cldma_queue *queue, struct sk_buff *skb);
|
|
int t7xx_port_proxy_recv_skb_from_dedicated_queue(struct cldma_queue *queue, struct sk_buff *skb);
|
|
|
|
#endif /* __T7XX_PORT_PROXY_H__ */
|