source: mainline/uspace/drv/bus/usb/usbhub/usbhub.h@ 957ea3a

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since 957ea3a was 8b71f3e, checked in by Petr Manek <petr.manek@…>, 8 years ago

usbdev: refactor polling more

For clarity, the opaque usb_device_polling_t and its complementary
configuration data structure usb_device_polling_config_t have been
merged into usb_polling_t. All related methods have dropped the
"device" from their prefix as well.

The usage semantics have transitioned to malloc-free model, where the
user is entirely responsible for (de)allocation of the polling structure
and its data buffer, and (de)initialization happens in designated
functions during its lifetime in the system.

In addition, the distinction between mandatory / optional / internal
parameters has been documented. Optional parameters now have default
values, which are set to sensible constants in order to allow dropping
some lines in USB driver implementations.

The drivers usbhid and usbhub were refactored to match the API
changes.

  • Property mode set to 100644
File size: 3.1 KB
Line 
1/*
2 * Copyright (c) 2010 Vojtech Horky
3 * Copyright (c) 2011 Vojtech Horky
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 *
10 * - Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * - Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 * - The name of the author may not be used to endorse or promote products
16 * derived from this software without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
19 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
22 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
23 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 */
29
30/** @addtogroup drvusbhub
31 * @{
32 */
33/** @file
34 * @brief Hub driver.
35 */
36
37#ifndef DRV_USBHUB_USBHUB_H
38#define DRV_USBHUB_USBHUB_H
39
40#include <ddf/driver.h>
41#include <fibril_synch.h>
42
43#include <usb/classes/hub.h>
44
45#include <usb/dev/pipes.h>
46#include <usb/dev/driver.h>
47#include <usb/dev/poll.h>
48
49#define NAME "usbhub"
50
51#include "port.h"
52
53/** Information about attached hub. */
54struct usb_hub_dev {
55 /** Number of ports. */
56 size_t port_count;
57 /** Port structures, one for each port */
58 usb_hub_port_t *ports;
59 /** Generic usb device data*/
60 usb_device_t *usb_device;
61 /** Data polling handle. */
62 usb_polling_t polling;
63 /** Number of pending operations on the mutex to prevent shooting
64 * ourselves in the foot.
65 * When the hub is disconnected but we are in the middle of some
66 * operation, we cannot destroy this structure right away because
67 * the pending operation might use it.
68 */
69 size_t pending_ops_count;
70 /** Guard for pending_ops_count. */
71 fibril_mutex_t pending_ops_mutex;
72 /** Condition variable for pending_ops_count. */
73 fibril_condvar_t pending_ops_cv;
74 /** Pointer to usbhub function. */
75 ddf_fun_t *hub_fun;
76 /** Status indicator */
77 volatile bool running;
78 /** Hub supports port power switching. */
79 bool power_switched;
80 /** Each port is switched individually. */
81 bool per_port_power;
82};
83
84extern const usb_endpoint_description_t hub_status_change_endpoint_description;
85
86extern int usb_hub_device_add(usb_device_t *);
87extern int usb_hub_device_remove(usb_device_t *);
88extern int usb_hub_device_gone(usb_device_t *);
89
90extern bool hub_port_changes_callback(usb_device_t *, uint8_t *, size_t,
91 void *);
92
93#endif
94
95/**
96 * @}
97 */
Note: See TracBrowser for help on using the repository browser.