linux/drivers/hid/intel-ish-hid/ishtp/hbm.h

/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * ISHTP bus layer messages handling
 *
 * Copyright (c) 2003-2016, Intel Corporation.
 */

#ifndef _ISHTP_HBM_H_
#define _ISHTP_HBM_H_

#include <linux/uuid.h>

struct ishtp_device;
struct ishtp_msg_hdr;
struct ishtp_cl;

/*
 * Timeouts in Seconds
 */
#define ISHTP_INTEROP_TIMEOUT

#define ISHTP_CL_CONNECT_TIMEOUT

/*
 * ISHTP Version
 */
#define HBM_MINOR_VERSION
#define HBM_MAJOR_VERSION

/* Host bus message command opcode */
#define ISHTP_HBM_CMD_OP_MSK
/* Host bus message command RESPONSE */
#define ISHTP_HBM_CMD_RES_MSK

/*
 * ISHTP Bus Message Command IDs
 */
#define HOST_START_REQ_CMD
#define HOST_START_RES_CMD

#define HOST_STOP_REQ_CMD
#define HOST_STOP_RES_CMD

#define FW_STOP_REQ_CMD

#define HOST_ENUM_REQ_CMD
#define HOST_ENUM_RES_CMD

#define HOST_CLIENT_PROPERTIES_REQ_CMD
#define HOST_CLIENT_PROPERTIES_RES_CMD

#define CLIENT_CONNECT_REQ_CMD
#define CLIENT_CONNECT_RES_CMD

#define CLIENT_DISCONNECT_REQ_CMD
#define CLIENT_DISCONNECT_RES_CMD

#define ISHTP_FLOW_CONTROL_CMD

#define DMA_BUFFER_ALLOC_NOTIFY
#define DMA_BUFFER_ALLOC_RESPONSE

#define DMA_XFER
#define DMA_XFER_ACK

/*
 * ISHTP Stop Reason
 * used by hbm_host_stop_request.reason
 */
#define DRIVER_STOP_REQUEST

/*
 * ISHTP BUS Interface Section
 */
struct ishtp_msg_hdr {} __packed;

struct ishtp_bus_message {} __packed;

/**
 * struct hbm_cl_cmd - client specific host bus command
 *	CONNECT, DISCONNECT, and FlOW CONTROL
 *
 * @hbm_cmd - bus message command header
 * @fw_addr - address of the fw client
 * @host_addr - address of the client in the driver
 * @data
 */
struct ishtp_hbm_cl_cmd {};

struct hbm_version {} __packed;

struct hbm_host_version_request {} __packed;

struct hbm_host_version_response {} __packed;

struct hbm_host_stop_request {} __packed;

struct hbm_host_stop_response {} __packed;

struct hbm_host_enum_request {} __packed;

struct hbm_host_enum_response {} __packed;

struct ishtp_client_properties {} __packed;

struct hbm_props_request {} __packed;

struct hbm_props_response {} __packed;

/**
 * struct hbm_client_connect_request - connect/disconnect request
 *
 * @hbm_cmd - bus message command header
 * @fw_addr - address of the fw client
 * @host_addr - address of the client in the driver
 * @reserved
 */
struct hbm_client_connect_request {} __packed;

/**
 * struct hbm_client_connect_response - connect/disconnect response
 *
 * @hbm_cmd - bus message command header
 * @fw_addr - address of the fw client
 * @host_addr - address of the client in the driver
 * @status - status of the request
 */
struct hbm_client_connect_response {} __packed;


#define ISHTP_FC_MESSAGE_RESERVED_LENGTH

struct hbm_flow_control {} __packed;

struct dma_alloc_notify {} __packed;

struct dma_xfer_hbm {} __packed;

/* System state */
#define ISHTP_SYSTEM_STATE_CLIENT_ADDR

#define SYSTEM_STATE_SUBSCRIBE
#define SYSTEM_STATE_STATUS
#define SYSTEM_STATE_QUERY_SUBSCRIBERS
#define SYSTEM_STATE_STATE_CHANGE_REQ
/*indicates suspend and resume states*/
#define CONNECTED_STANDBY_STATE_BIT
#define SUSPEND_STATE_BIT

struct ish_system_states_header {} __packed;

struct ish_system_states_subscribe {} __packed;

struct ish_system_states_status {} __packed;

struct ish_system_states_query_subscribers {} __packed;

struct ish_system_states_state_change_req {} __packed;

/**
 * enum ishtp_hbm_state - host bus message protocol state
 *
 * @ISHTP_HBM_IDLE : protocol not started
 * @ISHTP_HBM_START : start request message was sent
 * @ISHTP_HBM_ENUM_CLIENTS : enumeration request was sent
 * @ISHTP_HBM_CLIENT_PROPERTIES : acquiring clients properties
 */
enum ishtp_hbm_state {};

static inline void ishtp_hbm_hdr(struct ishtp_msg_hdr *hdr, size_t length)
{}

int ishtp_hbm_start_req(struct ishtp_device *dev);
int ishtp_hbm_start_wait(struct ishtp_device *dev);
int ishtp_hbm_cl_flow_control_req(struct ishtp_device *dev,
				  struct ishtp_cl *cl);
int ishtp_hbm_cl_disconnect_req(struct ishtp_device *dev, struct ishtp_cl *cl);
int ishtp_hbm_cl_connect_req(struct ishtp_device *dev, struct ishtp_cl *cl);
void ishtp_hbm_enum_clients_req(struct ishtp_device *dev);
void bh_hbm_work_fn(struct work_struct *work);
void recv_hbm(struct ishtp_device *dev, struct ishtp_msg_hdr *ishtp_hdr);
void recv_fixed_cl_msg(struct ishtp_device *dev,
	struct ishtp_msg_hdr *ishtp_hdr);
void ishtp_hbm_dispatch(struct ishtp_device *dev,
	struct ishtp_bus_message *hdr);

void ishtp_query_subscribers(struct ishtp_device *dev);

/* Exported I/F */
void ishtp_send_suspend(struct ishtp_device *dev);
void ishtp_send_resume(struct ishtp_device *dev);

#endif /* _ISHTP_HBM_H_ */