brintos

brintos / linux-shallow public Read only

0
0
Text · 2.6 KiB · f46967c Raw
93 lines · c
1/* SPDX-License-Identifier: GPL-2.0-or-later */2/*3 * Copyright (C) 2015-2016 Samsung Electronics4 *               Igor Kotrasinski <i.kotrasinsk@samsung.com>5 *               Krzysztof Opasiak <k.opasiak@samsung.com>6 *7 * Refactored from usbip_host_driver.c, which is:8 * Copyright (C) 2011 matt mooney <mfm@muteddisk.com>9 *               2005-2007 Takahiro Hirofuchi10 */11 12#ifndef __USBIP_HOST_COMMON_H13#define __USBIP_HOST_COMMON_H14 15#include <stdint.h>16#include <libudev.h>17#include <errno.h>18#include "list.h"19#include "usbip_common.h"20#include "sysfs_utils.h"21 22struct usbip_host_driver;23 24struct usbip_host_driver_ops {25	int (*open)(struct usbip_host_driver *hdriver);26	void (*close)(struct usbip_host_driver *hdriver);27	int (*refresh_device_list)(struct usbip_host_driver *hdriver);28	struct usbip_exported_device * (*get_device)(29		struct usbip_host_driver *hdriver, int num);30 31	int (*read_device)(struct udev_device *sdev,32			   struct usbip_usb_device *dev);33	int (*read_interface)(struct usbip_usb_device *udev, int i,34			      struct usbip_usb_interface *uinf);35	int (*is_my_device)(struct udev_device *udev);36};37 38struct usbip_host_driver {39	int ndevs;40	/* list of exported device */41	struct list_head edev_list;42	const char *udev_subsystem;43	struct usbip_host_driver_ops ops;44};45 46struct usbip_exported_device {47	struct udev_device *sudev;48	int32_t status;49	struct usbip_usb_device udev;50	struct list_head node;51	struct usbip_usb_interface uinf[];52};53 54/* External API to access the driver */55static inline int usbip_driver_open(struct usbip_host_driver *hdriver)56{57	if (!hdriver->ops.open)58		return -EOPNOTSUPP;59	return hdriver->ops.open(hdriver);60}61 62static inline void usbip_driver_close(struct usbip_host_driver *hdriver)63{64	if (!hdriver->ops.close)65		return;66	hdriver->ops.close(hdriver);67}68 69static inline int usbip_refresh_device_list(struct usbip_host_driver *hdriver)70{71	if (!hdriver->ops.refresh_device_list)72		return -EOPNOTSUPP;73	return hdriver->ops.refresh_device_list(hdriver);74}75 76static inline struct usbip_exported_device *77usbip_get_device(struct usbip_host_driver *hdriver, int num)78{79	if (!hdriver->ops.get_device)80		return NULL;81	return hdriver->ops.get_device(hdriver, num);82}83 84/* Helper functions for implementing driver backend */85int usbip_generic_driver_open(struct usbip_host_driver *hdriver);86void usbip_generic_driver_close(struct usbip_host_driver *hdriver);87int usbip_generic_refresh_device_list(struct usbip_host_driver *hdriver);88int usbip_export_device(struct usbip_exported_device *edev, int sockfd);89struct usbip_exported_device *usbip_generic_get_device(90		struct usbip_host_driver *hdriver, int num);91 92#endif /* __USBIP_HOST_COMMON_H */93