18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * Copyright (C) 2005-2007 Takahiro Hirofuchi
48c2ecf20Sopenharmony_ci */
58c2ecf20Sopenharmony_ci
68c2ecf20Sopenharmony_ci#ifndef __VHCI_DRIVER_H
78c2ecf20Sopenharmony_ci#define __VHCI_DRIVER_H
88c2ecf20Sopenharmony_ci
98c2ecf20Sopenharmony_ci#include <libudev.h>
108c2ecf20Sopenharmony_ci#include <stdint.h>
118c2ecf20Sopenharmony_ci
128c2ecf20Sopenharmony_ci#include "usbip_common.h"
138c2ecf20Sopenharmony_ci
148c2ecf20Sopenharmony_ci#define USBIP_VHCI_BUS_TYPE "platform"
158c2ecf20Sopenharmony_ci#define USBIP_VHCI_DEVICE_NAME "vhci_hcd.0"
168c2ecf20Sopenharmony_ci
178c2ecf20Sopenharmony_cienum hub_speed {
188c2ecf20Sopenharmony_ci	HUB_SPEED_HIGH = 0,
198c2ecf20Sopenharmony_ci	HUB_SPEED_SUPER,
208c2ecf20Sopenharmony_ci};
218c2ecf20Sopenharmony_ci
228c2ecf20Sopenharmony_cistruct usbip_imported_device {
238c2ecf20Sopenharmony_ci	enum hub_speed hub;
248c2ecf20Sopenharmony_ci	uint8_t port;
258c2ecf20Sopenharmony_ci	uint32_t status;
268c2ecf20Sopenharmony_ci
278c2ecf20Sopenharmony_ci	uint32_t devid;
288c2ecf20Sopenharmony_ci
298c2ecf20Sopenharmony_ci	uint8_t busnum;
308c2ecf20Sopenharmony_ci	uint8_t devnum;
318c2ecf20Sopenharmony_ci
328c2ecf20Sopenharmony_ci	/* usbip_class_device list */
338c2ecf20Sopenharmony_ci	struct usbip_usb_device udev;
348c2ecf20Sopenharmony_ci};
358c2ecf20Sopenharmony_ci
368c2ecf20Sopenharmony_cistruct usbip_vhci_driver {
378c2ecf20Sopenharmony_ci
388c2ecf20Sopenharmony_ci	/* /sys/devices/platform/vhci_hcd */
398c2ecf20Sopenharmony_ci	struct udev_device *hc_device;
408c2ecf20Sopenharmony_ci
418c2ecf20Sopenharmony_ci	int ncontrollers;
428c2ecf20Sopenharmony_ci	int nports;
438c2ecf20Sopenharmony_ci	struct usbip_imported_device idev[];
448c2ecf20Sopenharmony_ci};
458c2ecf20Sopenharmony_ci
468c2ecf20Sopenharmony_ci
478c2ecf20Sopenharmony_ciextern struct usbip_vhci_driver *vhci_driver;
488c2ecf20Sopenharmony_ci
498c2ecf20Sopenharmony_ciint usbip_vhci_driver_open(void);
508c2ecf20Sopenharmony_civoid usbip_vhci_driver_close(void);
518c2ecf20Sopenharmony_ci
528c2ecf20Sopenharmony_ciint  usbip_vhci_refresh_device_list(void);
538c2ecf20Sopenharmony_ci
548c2ecf20Sopenharmony_ci
558c2ecf20Sopenharmony_ciint usbip_vhci_get_free_port(uint32_t speed);
568c2ecf20Sopenharmony_ciint usbip_vhci_attach_device2(uint8_t port, int sockfd, uint32_t devid,
578c2ecf20Sopenharmony_ci		uint32_t speed);
588c2ecf20Sopenharmony_ci
598c2ecf20Sopenharmony_ci/* will be removed */
608c2ecf20Sopenharmony_ciint usbip_vhci_attach_device(uint8_t port, int sockfd, uint8_t busnum,
618c2ecf20Sopenharmony_ci		uint8_t devnum, uint32_t speed);
628c2ecf20Sopenharmony_ci
638c2ecf20Sopenharmony_ciint usbip_vhci_detach_device(uint8_t port);
648c2ecf20Sopenharmony_ci
658c2ecf20Sopenharmony_ciint usbip_vhci_imported_device_dump(struct usbip_imported_device *idev);
668c2ecf20Sopenharmony_ci
678c2ecf20Sopenharmony_ci#endif /* __VHCI_DRIVER_H */
68