| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- /*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
- * All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
- * FilePath: fusb_generic_hub.h
- * Date: 2022-02-11 13:33:11
- * LastEditTime: 2022-02-18 09:20:23
- * Description: This files is for definition of generic hub function
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
- * 1.0 Zhugengyu 2022/2/7 init commit
- */
- #ifndef DRIVERS_FUSB_GENERIC_HUB_H
- #define DRIVERS_FUSB_GENERIC_HUB_H
- #ifdef __cplusplus
- extern "C"
- {
- #endif
- #include "fusb_private.h"
- typedef struct
- {
- /* negative results denote an error */
- /* returns 1 if the hub's status changed since the last call (optional) */
- FUsbTransCode(*hub_status_changed)(FUsbDev *);
- /* returns 1 if the port's status changed since the last call */
- FUsbTransCode(*port_status_changed)(FUsbDev *, int port);
- /* returns 1 if something is connected to the port */
- FUsbTransCode(*port_connected)(FUsbDev *, int port);
- /* returns 1 if port is currently resetting */
- FUsbTransCode(*port_in_reset)(FUsbDev *, int port);
- /* returns 1 if the port is enabled */
- FUsbTransCode(*port_enabled)(FUsbDev *, int port);
- /* returns speed if port is enabled, negative value if not */
- FUsbSpeed(*port_speed)(FUsbDev *, int port);
- /* enables (powers up) a port (optional) */
- FUsbTransCode(*enable_port)(FUsbDev *, int port);
- /* disables (powers down) a port (optional) */
- FUsbTransCode(*disable_port)(FUsbDev *, int port);
- /* starts a port reset (required if reset_port is set to a generic one from below) */
- FUsbTransCode(*start_port_reset)(FUsbDev *, int port);
- /* performs a port reset (optional, generic implementations below) */
- FUsbTransCode(*reset_port)(FUsbDev *, int port);
- } FUsbGenericHubOps;
- typedef struct
- {
- int num_ports;
- /* port numbers are always 1 based,
- so we waste one int for convenience */
- int *ports; /* allocated to sizeof(*ports)*(num_ports+1) */
- #define FUSB_NO_DEV_ADDR -1
- const FUsbGenericHubOps *ops;
- void *data;
- } FUsbGenericHub;
- void FUsbGenericHubDestory(FUsbDev *);
- int FUsbGenericHubWaitForPort(FUsbDev *const dev, const int port,
- const int wait_for,
- int (*const port_op)(FUsbDev *, int),
- int timeout_steps, const int step_us);
- int FUsbGenericHubResetPort(FUsbDev *, int port);
- int FUsbGenericHubScanPort(FUsbDev *, int port);
- /* the provided generic_hub_ops struct has to be static */
- int FUsbGenericHubInit(FUsbDev *, int num_ports, const FUsbGenericHubOps *);
- #define FUSB_GEN_HUB_GET(FUsbDev) ((FUsbGenericHub *)(FUsbDev)->data)
- #ifdef __cplusplus
- }
- #endif
- #endif
|