blob: 72c07b0ca4d7b2651e659b77e430cc752314dd4a [file] [log] [blame]
/* SPDX-License-Identifier: GPL-2.0 */
/*
* Copyright (c) 2018-2020, The Linux Foundation. All rights reserved.
*/
#ifndef _IPA3_ODL_H_
#define _IPA3_ODL_H_
#define IPA_ODL_AGGR_BYTE_LIMIT (15 * 1024)
#define IPA_ODL_RX_RING_SIZE 192
#define MAX_QUEUE_TO_ODL 1024
#define CONFIG_SUCCESS 1
#define ODL_EP_TYPE_HSUSB 2
#define ODL_EP_PERIPHERAL_IFACE_ID 3
struct ipa3_odlstats {
u32 odl_rx_pkt;
u32 odl_tx_diag_pkt;
u32 odl_drop_pkt;
atomic_t numer_in_queue;
};
struct odl_state_bit_mask {
u32 odl_init:1;
u32 odl_open:1;
u32 adpl_open:1;
u32 aggr_byte_limit_sent:1;
u32 odl_ep_setup:1;
u32 odl_setup_done_sent:1;
u32 odl_ep_info_sent:1;
u32 odl_connected:1;
u32 odl_disconnected:1;
u32:0;
};
/**
* struct ipa3_odl_char_device_context - IPA ODL character device
* @class: pointer to the struct class
* @dev_num: device number
* @dev: the dev_t of the device
* @cdev: cdev of the device
*/
struct ipa3_odl_char_device_context {
struct class *class;
dev_t dev_num;
struct device *dev;
struct cdev cdev;
};
struct ipa_odl_context {
struct ipa3_odl_char_device_context odl_cdev[2];
struct list_head adpl_msg_list;
struct mutex adpl_msg_lock;
struct mutex pipe_lock;
struct ipa_sys_connect_params odl_sys_param;
u32 odl_client_hdl;
struct odl_state_bit_mask odl_state;
bool odl_ctl_msg_wq_flag;
struct ipa3_odlstats stats;
u32 odl_pm_hdl;
};
struct ipa3_push_msg_odl {
void *buff;
int len;
struct list_head link;
};
extern struct ipa_odl_context *ipa3_odl_ctx;
int ipa_odl_init(void);
void ipa3_odl_pipe_cleanup(bool is_ssr);
int ipa3_odl_pipe_open(void);
#endif /* _IPA3_ODL_H_ */