162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Copyright (C) 2005-2007 Takahiro Hirofuchi
462306a36Sopenharmony_ci */
562306a36Sopenharmony_ci
662306a36Sopenharmony_ci#ifndef __VHCI_DRIVER_H
762306a36Sopenharmony_ci#define __VHCI_DRIVER_H
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#include <libudev.h>
1062306a36Sopenharmony_ci#include <stdint.h>
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci#include "usbip_common.h"
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ci#define USBIP_VHCI_BUS_TYPE "platform"
1562306a36Sopenharmony_ci#define USBIP_VHCI_DEVICE_NAME "vhci_hcd.0"
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_cienum hub_speed {
1862306a36Sopenharmony_ci	HUB_SPEED_HIGH = 0,
1962306a36Sopenharmony_ci	HUB_SPEED_SUPER,
2062306a36Sopenharmony_ci};
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_cistruct usbip_imported_device {
2362306a36Sopenharmony_ci	enum hub_speed hub;
2462306a36Sopenharmony_ci	uint8_t port;
2562306a36Sopenharmony_ci	uint32_t status;
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_ci	uint32_t devid;
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_ci	uint8_t busnum;
3062306a36Sopenharmony_ci	uint8_t devnum;
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_ci	/* usbip_class_device list */
3362306a36Sopenharmony_ci	struct usbip_usb_device udev;
3462306a36Sopenharmony_ci};
3562306a36Sopenharmony_ci
3662306a36Sopenharmony_cistruct usbip_vhci_driver {
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_ci	/* /sys/devices/platform/vhci_hcd */
3962306a36Sopenharmony_ci	struct udev_device *hc_device;
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_ci	int ncontrollers;
4262306a36Sopenharmony_ci	int nports;
4362306a36Sopenharmony_ci	struct usbip_imported_device idev[];
4462306a36Sopenharmony_ci};
4562306a36Sopenharmony_ci
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_ciextern struct usbip_vhci_driver *vhci_driver;
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_ciint usbip_vhci_driver_open(void);
5062306a36Sopenharmony_civoid usbip_vhci_driver_close(void);
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_ciint  usbip_vhci_refresh_device_list(void);
5362306a36Sopenharmony_ci
5462306a36Sopenharmony_ci
5562306a36Sopenharmony_ciint usbip_vhci_get_free_port(uint32_t speed);
5662306a36Sopenharmony_ciint usbip_vhci_attach_device2(uint8_t port, int sockfd, uint32_t devid,
5762306a36Sopenharmony_ci		uint32_t speed);
5862306a36Sopenharmony_ci
5962306a36Sopenharmony_ci/* will be removed */
6062306a36Sopenharmony_ciint usbip_vhci_attach_device(uint8_t port, int sockfd, uint8_t busnum,
6162306a36Sopenharmony_ci		uint8_t devnum, uint32_t speed);
6262306a36Sopenharmony_ci
6362306a36Sopenharmony_ciint usbip_vhci_detach_device(uint8_t port);
6462306a36Sopenharmony_ci
6562306a36Sopenharmony_ciint usbip_vhci_imported_device_dump(struct usbip_imported_device *idev);
6662306a36Sopenharmony_ci
6762306a36Sopenharmony_ci#endif /* __VHCI_DRIVER_H */
68