VirtualBox

source: vbox/trunk/src/VBox/HostDrivers/VBoxUSB/solaris/include/usbai_private.h@ 58464

最後變更 在這個檔案從58464是 33540,由 vboxsync 提交於 14 年 前

*: spelling fixes, thanks Timeless!

  • 屬性 svn:eol-style 設為 native
  • 屬性 svn:keywords 設為 Author Date Id Revision
檔案大小: 16.5 KB
 
1/*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21/*
22 * Copyright 2009-2010 Oracle Corporation. All rights reserved.
23 * Use is subject to license terms.
24 */
25
26#ifndef _SYS_USB_USBA_USBAI_PRIVATE_H
27#define _SYS_USB_USBA_USBAI_PRIVATE_H
28
29
30/*
31 * Unstable interfaces not part of USBAI but used by Solaris client drivers.
32 * These interfaces may not be present in future releases and are highly
33 * unstable.
34 *
35 * Status key:
36 * C = Remove from Sun client drivers before removing from this file
37 * D = May be needed by legacy (DDK) drivers.
38 */
39
40#ifdef __cplusplus
41extern "C" {
42#endif
43
44/*
45 * convenience function for getting default config index
46 * as saved in usba_device structure
47 *
48 * Status: C
49 */
50uint_t usb_get_current_cfgidx(dev_info_t *);
51
52/*
53 * **************************************************************************
54 * Error and status definitions, and reporting functions
55 * **************************************************************************
56 */
57
58
59/*
60 * convenience functions to get string corresponding to value
61 * usb_cb_flags_name requires a workbuffer of sufficient length
62 * for the concatenation of all strings as usb_cb_flags_t is a bit
63 * mask
64 *
65 * Status: C and D
66 */
67const char *usb_str_cr(usb_cr_t cr);
68char *usb_str_cb_flags(usb_cb_flags_t cb_flags,
69 char *buffer, size_t length);
70const char *usb_str_pipe_state(usb_pipe_state_t state);
71const char *usb_str_dev_state(int state);
72const char *usb_str_rval(int rval);
73
74/* function convert a USB return value to an errno */
75int usb_rval2errno(int rval);
76
77/*
78 * **************************************************************************
79 * Transfer-related definitions and functions
80 * **************************************************************************
81 */
82
83/* Status C and D for whole section. */
84
85/* Serialize callbacks per interface or device. */
86#define USB_FLAGS_SERIALIZED_CB 0x8000
87
88/* default timeout for control requests (in seconds) */
89#define USB_PIPE_TIMEOUT 3
90
91/*
92 * usb_pipe_sync_ctrl_xfer():
93 * for simple synchronous control transactions this wrapper function
94 * will perform the allocation, xfer, and deallocation.
95 * USB_ATTRS_AUTOCLEARING will be enabled
96 *
97 * ARGUMENTS:
98 * dip - pointer to clients devinfo.
99 * pipe_handle - control pipe pipehandle (obtained via usb_pipe_open().
100 * bmRequestType - characteristics of request.
101 * bRequest - specific request.
102 * wValue - varies according to request.
103 * wIndex - index or offset.
104 * wLength - number of bytes to xfer.
105 * data - pointer to pointer to data
106 * IN: HCD will allocate data
107 * OUT: clients driver allocates data.
108 * attrs - required request attributes.
109 * completion_reason - completion status.
110 * cb_flags - request completions flags.
111 * flags - none.
112 *
113 * RETURN VALUES:
114 * USB_SUCCESS - request successfully executed.
115 * USB_FAILURE - request failed.
116 *
117 * NOTES:
118 * - in the case of failure, the client should check completion_reason and
119 * and cb_flags and determine further recovery action
120 * - the client should check data and if non-zero, free the data on
121 * completion
122 */
123int usb_pipe_sync_ctrl_xfer(
124 dev_info_t *dip,
125 usb_pipe_handle_t pipe_handle,
126 uchar_t bmRequestType,
127 uchar_t bRequest,
128 uint16_t wValue,
129 uint16_t wIndex,
130 uint16_t wLength,
131 mblk_t **data,
132 usb_req_attrs_t attrs,
133 usb_cr_t *completion_reason,
134 usb_cb_flags_t *cb_flags,
135 usb_flags_t flags);
136
137/*
138 * **************************************************************************
139 * Event registration / pre-suspend and post-resume handling
140 * **************************************************************************
141 */
142
143/* Status: C and D for whole section. */
144
145/*
146 * Event registration info for both hotplug and pre-suspend/post-resume
147 * callbacks. Eventually pre-suspend and post-resume callbacks will not be
148 * needed, so this is for this OS release only and will go away in a
149 * subsequent release.
150 */
151typedef struct usb_event {
152 /* device disconnected/unplugged */
153 int (*disconnect_event_handler)(dev_info_t *dip);
154
155 /* device reconnected */
156 int (*reconnect_event_handler)(dev_info_t *dip);
157
158 /* notification that system is about to checkpoint */
159 int (*pre_suspend_event_handler)(dev_info_t *dip);
160
161 /* notification that system resumed after a checkpoint */
162 int (*post_resume_event_handler)(dev_info_t *dip);
163} usb_event_t;
164
165/*
166 * Event callbacks
167 * the callbacks should always return USB_SUCCESS.
168 */
169int usb_register_event_cbs(
170 dev_info_t *dip,
171 usb_event_t *usb_evt_data,
172 usb_flags_t flags);
173
174void usb_unregister_event_cbs(
175 dev_info_t *dip,
176 usb_event_t *usb_evt_data);
177
178/*
179 * USB CPR support
180 * A client driver must call this function in pre-suspend event handler
181 * to inform the USBA framework that it can't suspend because
182 * driver instance or device could not be quiesced.
183 */
184void usb_fail_checkpoint(
185 dev_info_t *dip,
186 usb_flags_t flags);
187
188
189/*
190 * **************************************************************************
191 * Logging functions remaining Contracted Consolidation Private
192 * **************************************************************************
193 */
194
195/* Status: C and D for whole section. */
196
197/*
198 * Usb logging, debug and console message handling.
199 */
200typedef struct usb_log_handle *usb_log_handle_t;
201
202#define USB_LOG_L0 0 /* warnings, console & syslog buffer */
203#define USB_LOG_L1 1 /* errors, syslog buffer */
204#define USB_LOG_L2 2 /* recoverable errors, debug only */
205#define USB_LOG_L3 3 /* interesting data, debug only */
206#define USB_LOG_L4 4 /* tracing, debug only */
207
208#ifdef DEBUG
209#define USB_DPRINTF_L4 usb_dprintf4
210#define USB_DPRINTF_L3 usb_dprintf3
211
212/*PRINTFLIKE3*/
213void usb_dprintf4(
214 uint_t mask,
215 usb_log_handle_t handle,
216 char *fmt, ...);
217/*PRINTFLIKE3*/
218void usb_dprintf3(
219 uint_t mask,
220 usb_log_handle_t handle,
221 char *fmt, ...);
222#else
223#define USB_DPRINTF_L4 0 &&
224#define USB_DPRINTF_L3 0 &&
225#endif
226
227#define USB_DPRINTF_L2 usb_dprintf2
228#define USB_DPRINTF_L1 usb_dprintf1
229#define USB_DPRINTF_L0 usb_dprintf0
230
231/*PRINTFLIKE3*/
232void usb_dprintf2(
233 uint_t mask,
234 usb_log_handle_t handle,
235 char *fmt, ...);
236/*PRINTFLIKE3*/
237void usb_dprintf1(
238 uint_t mask,
239 usb_log_handle_t handle,
240 char *fmt, ...);
241/*PRINTFLIKE3*/
242void usb_dprintf0(
243 uint_t mask,
244 usb_log_handle_t handle,
245 char *fmt, ...);
246
247usb_log_handle_t usb_alloc_log_hdl(
248 dev_info_t *dip,
249 char *name,
250 uint_t *errlevel,
251 uint_t *mask,
252 uint_t *instance_filter,
253 usb_flags_t flags);
254
255/* free the log handle */
256void usb_free_log_hdl(
257 usb_log_handle_t handle);
258
259/* log message */
260/*PRINTFLIKE4*/
261int usb_log(
262 usb_log_handle_t handle,
263 uint_t level,
264 uint_t mask,
265 char *fmt, ...);
266
267/*
268 * usb_check_same_device:
269 * Check if the device connected to the port is the same as
270 * the previous device that was in the port. The previous device is
271 * represented by the dip on record for the port. Print a message
272 * if the device is different. If device_string arg is not NULL, it is
273 * included in the message. Can block.
274 *
275 * Arguments:
276 * dip - pointer to devinfo of the client
277 * log_handle - handle to which messages are logged
278 * log_level - one of USB_LOG_*
279 * log_mask - logging mask
280 * check_mask - one mask containing things to check:
281 * USB_CHK_BASIC: empty mask;
282 * these checks are always done.
283 * USB_CHK_SERIAL: check match on device
284 * serial number.
285 * USB_CHK_CFG: compare config clouds
286 * byte by byte
287 * USB_CHK_VIDPID: compare product
288 * and vendor ID
289 * USB_CHK_ALL: perform all checks
290 *
291 * NOTE: descr length and content always checked
292 * device_string - Device string to appear in error message
293 *
294 * return values:
295 * USB_SUCCESS: same device
296 * USB_INVALID_VERSION not same device
297 * USB_FAILURE: Failure processing request
298 * USB_INVALID_ARG: dip is invalid
299 */
300
301/* Checking bits for checks made by usb_check_same_device */
302#define USB_CHK_BASIC 0 /* Empty mask. Basics always done. */
303#define USB_CHK_SERIAL 0x00000001 /* Compare device serial numbers. */
304#define USB_CHK_CFG 0x00000002 /* Compare raw config clouds. */
305#define USB_CHK_VIDPID 0x00000004 /* Compare product and vendor ID. */
306#define USB_CHK_ALL 0xFFFFFFFF /* Perform maximum checking. */
307
308int usb_check_same_device(
309 dev_info_t *dip,
310 usb_log_handle_t log_handle,
311 int log_level,
312 int log_mask,
313 uint_t check_mask,
314 char *device_string);
315
316/*
317 * **************************************************************************
318 * Power management functions remaining Contracted Consolidation Private
319 * **************************************************************************
320 */
321
322/*
323 * usb wrapper around pm_raise_power & pm_lower_power to allow for
324 * non blocking behavior
325 *
326 * Arguments:
327 * dip - pointer to devinfo node of client.
328 * comp - component.
329 * level - power level.
330 * flags - USB_FLAGS_SLEEP:
331 * wait for completion.
332 * cb - function called on completion, may be NULL.
333 * arg - callback argument.
334 * rval - USB_SUCCESS or USB_FAILURE.
335 *
336 * Return Values:
337 * USB_SUCCESS - if no USB_FLAGS_SLEEP has been specified, the request
338 * has been queued for async execution. If
339 * USB_FLAGS_SLEEP has been specified, the raising or
340 * lowering of power
341 * succeeded.
342 * USB_FAILURE - request could not be queued or raising or lowering
343 * of power failed.
344 */
345
346/* Status: C and D */
347int usb_req_raise_power(
348 dev_info_t *dip,
349 int comp,
350 int level,
351 void (*cb)(void *arg, int rval),
352 void *arg,
353 usb_flags_t flags);
354
355/* Status: D */
356int usb_req_lower_power(
357 dev_info_t *dip,
358 int comp,
359 int level,
360 void (*cb)(void *arg, int rval),
361 void *arg,
362 usb_flags_t flags);
363
364/*
365 * USB wrapper functions to set usb device power level.
366 * Note : Power levels indicated here are USB power levels
367 * and not OS power levels.
368 *
369 * Note that these were never implemented, and are noops. However, they are
370 * included here as the skeleton driver in DDK 0.8 and 0.9 mentioned them.
371 *
372 * Status: C and D.
373 */
374int usb_set_device_pwrlvl0(
375 dev_info_t *dip);
376int usb_set_device_pwrlvl1(
377 dev_info_t *dip);
378int usb_set_device_pwrlvl2(
379 dev_info_t *dip);
380int usb_set_device_pwrlvl3(
381 dev_info_t *dip);
382
383
384/*
385 * **************************************************************************
386 * Serialization functions remaining Contracted Consolidation Private
387 * **************************************************************************
388 */
389
390/* This whole section: status: C and D. */
391
392/*
393 * opaque serialization handle.
394 * Used by all usb_serialization routines.
395 *
396 * This handle is opaque to the client driver.
397 */
398typedef struct usb_serialization *usb_serialization_t;
399
400/*
401 * usb_init_serialization
402 * setup for serialization
403 *
404 * ARGUMENTS:
405 * s_dip - devinfo pointer
406 * flag - USB_INIT_SER_CHECK_SAME_THREAD
407 * when set, usb_release_access() will
408 * verify that the same thread releases
409 * access. If not, a console warning will
410 * be issued but access will be released
411 * anyways.
412 *
413 * RETURNS:
414 * usb_serialization handle
415 *
416 */
417usb_serialization_t usb_init_serialization(
418 dev_info_t *s_dip,
419 uint_t flag);
420
421#define USB_INIT_SER_CHECK_SAME_THREAD 1
422
423/* fini for serialization */
424void usb_fini_serialization(
425 usb_serialization_t usb_serp);
426
427/*
428 * Various ways of calling usb_serialize_access. These correspond to
429 * their cv_*wait* function counterparts for usb_serialize_access.
430 */
431#define USB_WAIT 0
432#define USB_WAIT_SIG 1
433#define USB_TIMEDWAIT 2
434#define USB_TIMEDWAIT_SIG 3
435
436/*
437 * usb_serialize_access:
438 * acquire serialized access
439 * ARGUMENTS:
440 * usb_serp - usb_serialization handle
441 * how_to_wait - Which cv_*wait* function to wait for condition.
442 * USB_WAIT: use cv_wait
443 * USB_WAIT_SIG: use cv_wait_sig
444 * USB_TIMEDWAIT: use cv_timedwait
445 * USB_TIMEDWAIT_SIG: use cv_timedwait_sig
446 * delta_timeout - Time in ms from current time to timeout. Checked
447 * only if USB_TIMEDWAIT or USB_TIMEDWAIT_SIG
448 * specified in how_to_wait.
449 * RETURNS:
450 * Same as values returned by cv_*wait* functions,
451 * except for when how_to_wait == USB_WAIT, where 0 is always returned.
452 * For calls where a timeout or signal could be expected, use this value
453 * to tell whether a kill(2) signal or timeout occurred.
454 */
455int usb_serialize_access(
456 usb_serialization_t usb_serp,
457 uint_t how_to_wait,
458 uint_t delta_timeout);
459
460/*
461 * usb_try_serialize_access:
462 * try acquiring serialized access
463 *
464 * ARGUMENTS:
465 * usb_serp - usb_serialization handle
466 * flag - unused
467 *
468 * RETURNS:
469 * USB_SUCCESS - access has been acquired
470 * USB_FAILURE - access has not been acquired
471 */
472int usb_try_serialize_access(usb_serialization_t usb_serp, uint_t flag);
473
474/*
475 * usb_release_access:
476 * release serialized access
477 *
478 * ARGUMENTS:
479 * usb_serp - usb_serialization handle
480 */
481void usb_release_access(usb_serialization_t usb_serp);
482
483
484/*
485 * **************************************************************************
486 * Asynchronous functions remaining Contracted Consolidation Private
487 * **************************************************************************
488 */
489
490/* This whole section: status: C and D. */
491
492/* For async_req functions. */
493#define USB_FLAGS_NOQUEUE 0x200
494
495/*
496 * Issue a request to the asynchronous request service
497 * All async request functions return USB_SUCCESS or USB_FAILURE
498 * Arguments:
499 * dip - pointer to devinfo node
500 * func - pointer of function to execute asynchronously
501 * arg - argument to function
502 * flag - USB_FLAGS_SLEEP or USB_FLAGS_NOSLEEP or
503 * USB_FLAGS_NOQUEUE
504 * Return Values:
505 * USB_SUCCESS - function was scheduled
506 * USB_FAILURE - function could not be scheduled
507 *
508 * Flag combinations:
509 * SLEEP - block waiting for resources. always succeeds
510 * NOSLEEP - do not wait for resources, may fail.
511 * NOSLEEP+NOQUEUE - do not wait for resources, do not queue
512 * SLEEP+NOQUEUE - block waiting for resources but may still fail
513 * if no thread available
514 */
515int usb_async_req(
516 dev_info_t *dip,
517 void (*func)(void *),
518 void *arg,
519 usb_flags_t flag);
520
521
522/*
523 * index for getting to usb_pipehandle_list in usba_device
524 */
525uchar_t usb_get_ep_index(uint8_t ep_addr);
526
527/*
528 * **************************************************************************
529 * USB device driver registration and callback functions remaining
530 * Contracted Project Private (for VirtualBox USB Device Capture)
531 * **************************************************************************
532 */
533
534#if 0 /* Uncomment this section if usbai.h doesn't have this these bits (required for snv < 123) */
535
536/*
537 * getting the device strings of manufacturer, product and serial number
538 */
539typedef struct usb_dev_str {
540 char *usb_mfg; /* manufacturer string */
541 char *usb_product; /* product string */
542 char *usb_serialno; /* serial number string */
543} usb_dev_str_t;
544
545/*
546 * It is the callback function type for capture driver.
547 * Arguments:
548 * dev_descr - pointer to device descriptor
549 * dev_str - pointer to device strings
550 * path - pointer to device physical path
551 * bus - USB bus address
552 * port - USB port number
553 * drv - capture driver name.
554 * It is returned by the callback func.
555 * Return Values:
556 * USB_SUCCESS - VirtualBox will capture the device
557 * USB_FAILURE - VirtualBox will not capture the device
558 */
559typedef int (*usb_dev_driver_callback_t)(
560 usb_dev_descr_t *dev_descr,
561 usb_dev_str_t *dev_str,
562 char *path,
563 int bus,
564 int port,
565 char **drv,
566 void *reserved);
567
568/*
569 * Register the callback function in the usba.
570 * Argument:
571 * dip - client driver's devinfo pointer
572 * cb - callback function
573 *
574 * Return Values:
575 * USB_SUCCESS - the registration was successful
576 * USB_FAILURE - the registration failed
577 */
578int usb_register_dev_driver(
579 dev_info_t *dip,
580 usb_dev_driver_callback_t cb);
581
582/*
583 * Unregister the callback function in the usba.
584 */
585void usb_unregister_dev_driver(dev_info_t *dip);
586#endif
587
588
589#ifdef ALLOCB_TEST
590#define allocb(s, p) usba_test_allocb(s, p)
591mblk_t *usba_test_allocb(size_t, uint_t);
592#endif /* ALLOCB_TEST */
593
594/* create an USB style M_CTL message */
595mblk_t *usba_mk_mctl(struct iocblk, void *, size_t);
596
597#ifdef __cplusplus
598}
599#endif
600
601#endif /* _SYS_USB_USBA_USBAI_PRIVATE_H */
注意: 瀏覽 TracBrowser 來幫助您使用儲存庫瀏覽器

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette