Adds AT and MBIM ports to the port proxy infrastructure. The initialization method is responsible for creating the corresponding ports using the WWAN framework infrastructure. The implemented WWAN port operations are start, stop, and TX. Signed-off-by: Chandrashekar Devegowda <chandrashekar.devegowda@intel.com> Co-developed-by: Ricardo Martinez <ricardo.martinez@linux.intel.com> Signed-off-by: Ricardo Martinez <ricardo.martinez@linux.intel.com> Reviewed-by: Loic Poulain <loic.poulain@linaro.org> Reviewed-by: Sergey Ryazanov <ryazanov.s.a@gmail.com> Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
99 lines
2.7 KiB
C
99 lines
2.7 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
|
|
|
|
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;
|
|
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;
|
|
|
|
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);
|
|
|
|
#endif /* __T7XX_PORT_PROXY_H__ */
|