android_kernel_sony_sdm845/include/linux/usb/ipc_bridge.h
Ajay Agarwal fcd296f13f usb: gadget: Add support for IPC driver
IPC messages are to be exchanged between device and host using
the IPC router platform driver on the device side. For this
driver to use USB as transport layer, add support for function
driver which will configure Bulk IN and OUT endpoints and expose
proper callbacks to router driver for read and write operations.

Change-Id: I350624ccd24a6c6fd4bda5ea91379fb426fae742
Signed-off-by: Ajay Agarwal <ajaya@codeaurora.org>
2018-11-13 17:37:37 +05:30

66 lines
3 KiB
C

/*
* Copyright (c) 2013, 2018 The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
* only version 2 as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#ifndef __MSM_IPC_BRIDGE_H__
#define __MSM_IPC_BRIDGE_H__
#include <linux/platform_device.h>
/*
* The IPC bridge driver adds a IPC bridge platform device when the
* underlying transport is ready. The IPC transport driver acts as a
* platform driver for this device. The platform data is populated by
* IPC bridge driver to facilitate I/O. The callback functions are
* passed in platform data to avoid export functions. This would allow
* different bridge drivers to exist in the kernel. The IPC bridge driver
* removes the platform device when the underly transport is no longer
* available. It typically happens during shutdown and remote processor's
* subsystem restart.
*/
/**
* struct ipc_bridge_platform_data - platform device data for IPC
* transport driver.
* @max_read_size: The maximum possible read size.
* @max_write_size: The maximum possible write size.
* @open: The open must be called before starting I/O. The IPC bridge
* driver use the platform device pointer to identify the
* underlying transport channel. The IPC bridge driver may
* notify that remote processor that it is ready to receive
* data. Returns 0 upon success and appropriate error code
* upon failure.
* @read: The read is done synchronously and should be called from process
* context. Returns the number of bytes read from remote
* processor or error code upon failure. The IPC transport
* driver may pass the buffer of max_read_size length if the
* available data size is not known in advance.
* @write: The write is done synchronously and should be called from process
* context. The IPC bridge driver uses the same buffer for DMA
* to avoid additional memcpy. So it must be physically contiguous.
* Returns the number of bytes written or error code upon failure.
* @close: The close must be called when the IPC bridge platform device
* is removed. The IPC transport driver may call close when
* it is no longer required to communicate with remote processor.
*/
struct ipc_bridge_platform_data {
unsigned int max_read_size;
unsigned int max_write_size;
int (*open)(struct platform_device *pdev);
int (*read)(struct platform_device *pdev, char *buf,
unsigned int count);
int (*write)(struct platform_device *pdev, char *buf,
unsigned int count);
void (*close)(struct platform_device *pdev);
};
#endif