Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.1.
  1/*
  2 * Copyright (C) 2015-2016 Samsung Electronics
  3 *               Igor Kotrasinski <i.kotrasinsk@samsung.com>
  4 *               Krzysztof Opasiak <k.opasiak@samsung.com>
  5 *
  6 * Refactored from usbip_host_driver.c, which is:
  7 * Copyright (C) 2011 matt mooney <mfm@muteddisk.com>
  8 *               2005-2007 Takahiro Hirofuchi
  9 *
 10 * This program is free software: you can redistribute it and/or modify
 11 * it under the terms of the GNU General Public License as published by
 12 * the Free Software Foundation, either version 2 of the License, or
 13 * (at your option) any later version.
 14 *
 15 * This program is distributed in the hope that it will be useful,
 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 18 * GNU General Public License for more details.
 19 *
 20 * You should have received a copy of the GNU General Public License
 21 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 22 */
 23
 24#ifndef __USBIP_HOST_COMMON_H
 25#define __USBIP_HOST_COMMON_H
 26
 27#include <stdint.h>
 28#include <libudev.h>
 29#include <errno.h>
 30#include "list.h"
 31#include "usbip_common.h"
 32#include "sysfs_utils.h"
 33
 34struct usbip_host_driver;
 35
 36struct usbip_host_driver_ops {
 37	int (*open)(struct usbip_host_driver *hdriver);
 38	void (*close)(struct usbip_host_driver *hdriver);
 39	int (*refresh_device_list)(struct usbip_host_driver *hdriver);
 40	struct usbip_exported_device * (*get_device)(
 41		struct usbip_host_driver *hdriver, int num);
 42
 43	int (*read_device)(struct udev_device *sdev,
 44			   struct usbip_usb_device *dev);
 45	int (*read_interface)(struct usbip_usb_device *udev, int i,
 46			      struct usbip_usb_interface *uinf);
 47	int (*is_my_device)(struct udev_device *udev);
 48};
 49
 50struct usbip_host_driver {
 51	int ndevs;
 52	/* list of exported device */
 53	struct list_head edev_list;
 54	const char *udev_subsystem;
 55	struct usbip_host_driver_ops ops;
 56};
 57
 58struct usbip_exported_device {
 59	struct udev_device *sudev;
 60	int32_t status;
 61	struct usbip_usb_device udev;
 62	struct list_head node;
 63	struct usbip_usb_interface uinf[];
 64};
 65
 66/* External API to access the driver */
 67static inline int usbip_driver_open(struct usbip_host_driver *hdriver)
 68{
 69	if (!hdriver->ops.open)
 70		return -EOPNOTSUPP;
 71	return hdriver->ops.open(hdriver);
 72}
 73
 74static inline void usbip_driver_close(struct usbip_host_driver *hdriver)
 75{
 76	if (!hdriver->ops.close)
 77		return;
 78	hdriver->ops.close(hdriver);
 79}
 80
 81static inline int usbip_refresh_device_list(struct usbip_host_driver *hdriver)
 82{
 83	if (!hdriver->ops.refresh_device_list)
 84		return -EOPNOTSUPP;
 85	return hdriver->ops.refresh_device_list(hdriver);
 86}
 87
 88static inline struct usbip_exported_device *
 89usbip_get_device(struct usbip_host_driver *hdriver, int num)
 90{
 91	if (!hdriver->ops.get_device)
 92		return NULL;
 93	return hdriver->ops.get_device(hdriver, num);
 94}
 95
 96/* Helper functions for implementing driver backend */
 97int usbip_generic_driver_open(struct usbip_host_driver *hdriver);
 98void usbip_generic_driver_close(struct usbip_host_driver *hdriver);
 99int usbip_generic_refresh_device_list(struct usbip_host_driver *hdriver);
100int usbip_export_device(struct usbip_exported_device *edev, int sockfd);
101struct usbip_exported_device *usbip_generic_get_device(
102		struct usbip_host_driver *hdriver, int num);
103
104#endif /* __USBIP_HOST_COMMON_H */