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