1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Copyright (C) 2005-2007 Takahiro Hirofuchi 4*4882a593Smuzhiyun */ 5*4882a593Smuzhiyun 6*4882a593Smuzhiyun #ifndef __VHCI_DRIVER_H 7*4882a593Smuzhiyun #define __VHCI_DRIVER_H 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun #include <libudev.h> 10*4882a593Smuzhiyun #include <stdint.h> 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun #include "usbip_common.h" 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun #define USBIP_VHCI_BUS_TYPE "platform" 15*4882a593Smuzhiyun #define USBIP_VHCI_DEVICE_NAME "vhci_hcd.0" 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun enum hub_speed { 18*4882a593Smuzhiyun HUB_SPEED_HIGH = 0, 19*4882a593Smuzhiyun HUB_SPEED_SUPER, 20*4882a593Smuzhiyun }; 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun struct usbip_imported_device { 23*4882a593Smuzhiyun enum hub_speed hub; 24*4882a593Smuzhiyun uint8_t port; 25*4882a593Smuzhiyun uint32_t status; 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun uint32_t devid; 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun uint8_t busnum; 30*4882a593Smuzhiyun uint8_t devnum; 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun /* usbip_class_device list */ 33*4882a593Smuzhiyun struct usbip_usb_device udev; 34*4882a593Smuzhiyun }; 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun struct usbip_vhci_driver { 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun /* /sys/devices/platform/vhci_hcd */ 39*4882a593Smuzhiyun struct udev_device *hc_device; 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun int ncontrollers; 42*4882a593Smuzhiyun int nports; 43*4882a593Smuzhiyun struct usbip_imported_device idev[]; 44*4882a593Smuzhiyun }; 45*4882a593Smuzhiyun 46*4882a593Smuzhiyun 47*4882a593Smuzhiyun extern struct usbip_vhci_driver *vhci_driver; 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun int usbip_vhci_driver_open(void); 50*4882a593Smuzhiyun void usbip_vhci_driver_close(void); 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun int usbip_vhci_refresh_device_list(void); 53*4882a593Smuzhiyun 54*4882a593Smuzhiyun 55*4882a593Smuzhiyun int usbip_vhci_get_free_port(uint32_t speed); 56*4882a593Smuzhiyun int usbip_vhci_attach_device2(uint8_t port, int sockfd, uint32_t devid, 57*4882a593Smuzhiyun uint32_t speed); 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun /* will be removed */ 60*4882a593Smuzhiyun int usbip_vhci_attach_device(uint8_t port, int sockfd, uint8_t busnum, 61*4882a593Smuzhiyun uint8_t devnum, uint32_t speed); 62*4882a593Smuzhiyun 63*4882a593Smuzhiyun int usbip_vhci_detach_device(uint8_t port); 64*4882a593Smuzhiyun 65*4882a593Smuzhiyun int usbip_vhci_imported_device_dump(struct usbip_imported_device *idev); 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun #endif /* __VHCI_DRIVER_H */ 68