source: mainline/uspace/drv/usbhub/port_status.h@ c5d61ae6

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since c5d61ae6 was 281ebae, checked in by Vojtech Horky <vojtechhorky@…>, 15 years ago

Hub driver put inside Doxygen group

  • Property mode set to 100644
File size: 8.5 KB
Line 
1/*
2 * Copyright (c) 2010 Matus Dekanek
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * - Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * - The name of the author may not be used to endorse or promote products
15 * derived from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28/** @addtogroup drvusbhub
29 * @{
30 */
31
32#ifndef PORT_STATUS_H
33#define PORT_STATUS_H
34
35#include <bool.h>
36#include <sys/types.h>
37#include <usb/devreq.h>
38#include "usbhub_private.h"
39
40/**
41 * structure holding port status and changes flags.
42 * should not be accessed directly, use supplied getter/setter methods.
43 *
44 * For more information refer to table 11-15 in
45 * "Universal Serial Bus Specification Revision 1.1"
46 *
47 */
48typedef uint32_t usb_port_status_t;
49
50/**
51 * set values in request to be it a port status request
52 * @param request
53 * @param port
54 */
55static inline void usb_hub_set_port_status_request(
56usb_device_request_setup_packet_t * request, uint16_t port
57){
58 request->index = port;
59 request->request_type = USB_HUB_REQ_TYPE_GET_PORT_STATUS;
60 request->request = USB_HUB_REQUEST_GET_STATUS;
61 request->value = 0;
62 request->length = 4;
63}
64
65
66/**
67 * create request for usb hub port status
68 * @param port
69 * @return
70 */
71static inline usb_device_request_setup_packet_t *
72usb_hub_create_port_status_request(uint16_t port){
73 usb_device_request_setup_packet_t * result =
74 usb_new(usb_device_request_setup_packet_t);
75 usb_hub_set_port_status_request(result,port);
76 return result;
77}
78
79
80/**
81 * set the device request to be a port enable request
82 * @param request
83 * @param port
84 */
85static inline void usb_hub_set_enable_port_request(
86usb_device_request_setup_packet_t * request, uint16_t port
87){
88 request->index = port;
89 request->request_type = USB_HUB_REQ_TYPE_SET_PORT_FEATURE;
90 request->request = USB_HUB_REQUEST_SET_FEATURE;
91 request->value = USB_HUB_FEATURE_C_PORT_ENABLE;
92 request->length = 0;
93}
94
95/**
96 * enable specified port
97 * @param port
98 * @return
99 */
100static inline usb_device_request_setup_packet_t *
101usb_hub_create_enable_port_request(uint16_t port){
102 usb_device_request_setup_packet_t * result =
103 usb_new(usb_device_request_setup_packet_t);
104 usb_hub_set_enable_port_request(result,port);
105 return result;
106}
107
108/**
109 * set the device request to be a port disable request
110 * @param request
111 * @param port
112 */
113static inline void usb_hub_set_disable_port_request(
114usb_device_request_setup_packet_t * request, uint16_t port
115){
116 request->index = port;
117 request->request_type = USB_HUB_REQ_TYPE_SET_PORT_FEATURE;
118 request->request = USB_HUB_REQUEST_SET_FEATURE;
119 request->value = USB_HUB_FEATURE_C_PORT_SUSPEND;
120 request->length = 0;
121}
122
123/**
124 * disable specified port
125 * @param port
126 * @return
127 */
128static inline usb_device_request_setup_packet_t *
129usb_hub_create_disable_port_request(uint16_t port){
130 usb_device_request_setup_packet_t * result =
131 usb_new(usb_device_request_setup_packet_t);
132 usb_hub_set_disable_port_request(result,port);
133 return result;
134}
135
136/**
137 * set the device request to be a port disable request
138 * @param request
139 * @param port
140 */
141static inline void usb_hub_set_reset_port_request(
142usb_device_request_setup_packet_t * request, uint16_t port
143){
144 request->index = port;
145 request->request_type = USB_HUB_REQ_TYPE_SET_PORT_FEATURE;
146 request->request = USB_HUB_REQUEST_SET_FEATURE;
147 request->value = USB_HUB_FEATURE_PORT_RESET;
148 request->length = 0;
149}
150
151/**
152 * disable specified port
153 * @param port
154 * @return
155 */
156static inline usb_device_request_setup_packet_t *
157usb_hub_create_reset_port_request(uint16_t port){
158 usb_device_request_setup_packet_t * result =
159 usb_new(usb_device_request_setup_packet_t);
160 usb_hub_set_reset_port_request(result,port);
161 return result;
162}
163
164/**
165 * set the device request to be a port disable request
166 * @param request
167 * @param port
168 */
169static inline void usb_hub_set_power_port_request(
170usb_device_request_setup_packet_t * request, uint16_t port
171){
172 request->index = port;
173 request->request_type = USB_HUB_REQ_TYPE_SET_PORT_FEATURE;
174 request->request = USB_HUB_REQUEST_SET_FEATURE;
175 request->value = USB_HUB_FEATURE_PORT_POWER;
176 request->length = 0;
177}
178
179/** get i`th bit of port status */
180static inline bool usb_port_get_bit(usb_port_status_t * status, int idx)
181{
182 return (((*status)>>(idx))%2);
183}
184
185/** set i`th bit of port status */
186static inline void usb_port_set_bit(
187 usb_port_status_t * status, int idx, bool value)
188{
189 (*status) = value?
190 ((*status)|(1<<(idx))):
191 ((*status)&(~(1<<(idx))));
192}
193
194//device connnected on port
195static inline bool usb_port_dev_connected(usb_port_status_t * status){
196 return usb_port_get_bit(status,0);
197}
198
199static inline void usb_port_set_dev_connected(usb_port_status_t * status,bool connected){
200 usb_port_set_bit(status,0,connected);
201}
202
203//port enabled
204static inline bool usb_port_enabled(usb_port_status_t * status){
205 return usb_port_get_bit(status,1);
206}
207
208static inline void usb_port_set_enabled(usb_port_status_t * status,bool enabled){
209 usb_port_set_bit(status,1,enabled);
210}
211
212//port suspended
213static inline bool usb_port_suspended(usb_port_status_t * status){
214 return usb_port_get_bit(status,2);
215}
216
217static inline void usb_port_set_suspended(usb_port_status_t * status,bool suspended){
218 usb_port_set_bit(status,2,suspended);
219}
220
221//over currect
222static inline bool usb_port_over_current(usb_port_status_t * status){
223 return usb_port_get_bit(status,3);
224}
225
226static inline void usb_port_set_over_current(usb_port_status_t * status,bool value){
227 usb_port_set_bit(status,3,value);
228}
229
230//port reset
231static inline bool usb_port_reset(usb_port_status_t * status){
232 return usb_port_get_bit(status,4);
233}
234
235static inline void usb_port_set_reset(usb_port_status_t * status,bool value){
236 usb_port_set_bit(status,4,value);
237}
238
239//powered
240static inline bool usb_port_powered(usb_port_status_t * status){
241 return usb_port_get_bit(status,8);
242}
243
244static inline void usb_port_set_powered(usb_port_status_t * status,bool powered){
245 usb_port_set_bit(status,8,powered);
246}
247
248//low speed device attached
249static inline bool usb_port_low_speed(usb_port_status_t * status){
250 return usb_port_get_bit(status,9);
251}
252
253static inline void usb_port_set_low_speed(usb_port_status_t * status,bool low_speed){
254 usb_port_set_bit(status,9,low_speed);
255}
256
257
258//connect change
259static inline bool usb_port_connect_change(usb_port_status_t * status){
260 return usb_port_get_bit(status,16);
261}
262
263static inline void usb_port_set_connect_change(usb_port_status_t * status,bool change){
264 usb_port_set_bit(status,16,change);
265}
266
267//port enable change
268static inline bool usb_port_enabled_change(usb_port_status_t * status){
269 return usb_port_get_bit(status,17);
270}
271
272static inline void usb_port_set_enabled_change(usb_port_status_t * status,bool change){
273 usb_port_set_bit(status,17,change);
274}
275
276//suspend change
277static inline bool usb_port_suspend_change(usb_port_status_t * status){
278 return usb_port_get_bit(status,18);
279}
280
281static inline void usb_port_set_suspend_change(usb_port_status_t * status,bool change){
282 usb_port_set_bit(status,18,change);
283}
284
285//over current change
286static inline bool usb_port_overcurrent_change(usb_port_status_t * status){
287 return usb_port_get_bit(status,19);
288}
289
290static inline void usb_port_set_overcurrent_change(usb_port_status_t * status,bool change){
291 usb_port_set_bit(status,19,change);
292}
293
294//reset change
295static inline bool usb_port_reset_completed(usb_port_status_t * status){
296 return usb_port_get_bit(status,20);
297}
298
299static inline void usb_port_set_reset_completed(usb_port_status_t * status,bool completed){
300 usb_port_set_bit(status,20,completed);
301}
302
303
304
305#endif /* PORT_STATUS_H */
306
307/**
308 * @}
309 */
Note: See TracBrowser for help on using the repository browser.