summaryrefslogtreecommitdiff
path: root/usr/src/man/man9f
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/man/man9f')
-rw-r--r--usr/src/man/man9f/Makefile939
-rw-r--r--usr/src/man/man9f/kmem_alloc.9f7
-rw-r--r--usr/src/man/man9f/usba_alloc_hcdi_ops.9f77
-rw-r--r--usr/src/man/man9f/usba_hcdi_cb.9f145
-rw-r--r--usr/src/man/man9f/usba_hcdi_dup_intr_req.9f115
-rw-r--r--usr/src/man/man9f/usba_hcdi_dup_isoc_req.9f111
-rw-r--r--usr/src/man/man9f/usba_hcdi_get_device_private.9f66
-rw-r--r--usr/src/man/man9f/usba_hcdi_register.9f112
-rw-r--r--usr/src/man/man9f/usba_hubdi_bind_root_hub.9f137
-rw-r--r--usr/src/man/man9f/usba_hubdi_cb_ops.9f109
-rw-r--r--usr/src/man/man9f/usba_hubdi_dev_ops.9f66
11 files changed, 1427 insertions, 457 deletions
diff --git a/usr/src/man/man9f/Makefile b/usr/src/man/man9f/Makefile
index 82ccf43a64..6033d01522 100644
--- a/usr/src/man/man9f/Makefile
+++ b/usr/src/man/man9f/Makefile
@@ -12,7 +12,7 @@
#
# Copyright 2017, Richard Lowe
# Copyright 2014 Garrett D'Amore <garrett@damore>
-# Copyright 2016 Joyent, Inc.
+# Copyright (c) 2017, Joyent, Inc.
# Copyright 2016 Nexenta Systems, Inc.
# Copyright 2016 Hans Rosenfeld <rosenfeld@grumpf.hope-2000.org>
#
@@ -524,465 +524,474 @@ MANFILES= ASSERT.9f \
usb_pipe_xopen.9f \
usb_register_hotplug_cbs.9f \
usb_reset_device.9f \
+ usba_alloc_hcdi_ops.9f \
+ usba_hcdi_cb.9f \
+ usba_hcdi_dup_intr_req.9f \
+ usba_hcdi_dup_isoc_req.9f \
+ usba_hcdi_get_device_private.9f \
+ usba_hcdi_register.9f \
+ usba_hubdi_bind_root_hub.9f \
+ usba_hubdi_cb_ops.9f \
+ usba_hubdi_dev_ops.9f \
uwritec.9f \
va_arg.9f \
vmem_add.9f \
vmem_alloc.9f \
vmem_contains.9f \
vmem_create.9f \
- vmem_walk.9f
-
-MANLINKS= AVL_NEXT.9f \
- AVL_PREV.9f \
- SIZEOF_PTR.9f \
- SIZEOF_STRUCT.9f \
- STRUCT_BUF.9f \
- STRUCT_FADDR.9f \
- STRUCT_FGET.9f \
- STRUCT_FGETP.9f \
- STRUCT_FSET.9f \
- STRUCT_FSETP.9f \
- STRUCT_HANDLE.9f \
- STRUCT_INIT.9f \
- STRUCT_SET_HANDLE.9f \
- STRUCT_SIZE.9f \
- assert.9f \
- atomic_add_16.9f \
- atomic_add_16_nv.9f \
- atomic_add_32.9f \
- atomic_add_32_nv.9f \
- atomic_add_64.9f \
- atomic_add_64_nv.9f \
- atomic_add_8.9f \
- atomic_add_8_nv.9f \
- atomic_add_char.9f \
- atomic_add_char_nv.9f \
- atomic_add_int.9f \
- atomic_add_int_nv.9f \
- atomic_add_long.9f \
- atomic_add_long_nv.9f \
- atomic_add_ptr.9f \
- atomic_add_ptr_nv.9f \
- atomic_add_short.9f \
- atomic_add_short_nv.9f \
- atomic_and_16.9f \
- atomic_and_16_nv.9f \
- atomic_and_32.9f \
- atomic_and_32_nv.9f \
- atomic_and_64.9f \
- atomic_and_64_nv.9f \
- atomic_and_8.9f \
- atomic_and_8_nv.9f \
- atomic_and_uchar.9f \
- atomic_and_uchar_nv.9f \
- atomic_and_uint.9f \
- atomic_and_uint_nv.9f \
- atomic_and_ulong.9f \
- atomic_and_ulong_nv.9f \
- atomic_and_ushort.9f \
- atomic_and_ushort_nv.9f \
- atomic_cas_16.9f \
- atomic_cas_32.9f \
- atomic_cas_64.9f \
- atomic_cas_8.9f \
- atomic_cas_ptr.9f \
- atomic_cas_uchar.9f \
- atomic_cas_uint.9f \
- atomic_cas_ulong.9f \
- atomic_cas_ushort.9f \
- atomic_clear_long_excl.9f \
- atomic_dec_16.9f \
- atomic_dec_16_nv.9f \
- atomic_dec_32.9f \
- atomic_dec_32_nv.9f \
- atomic_dec_64.9f \
- atomic_dec_64_nv.9f \
- atomic_dec_8.9f \
- atomic_dec_8_nv.9f \
- atomic_dec_ptr.9f \
- atomic_dec_ptr_nv.9f \
- atomic_dec_uchar.9f \
- atomic_dec_uchar_nv.9f \
- atomic_dec_uint.9f \
- atomic_dec_uint_nv.9f \
- atomic_dec_ulong.9f \
- atomic_dec_ulong_nv.9f \
- atomic_dec_ushort.9f \
- atomic_dec_ushort_nv.9f \
- atomic_inc_16.9f \
- atomic_inc_16_nv.9f \
- atomic_inc_32.9f \
- atomic_inc_32_nv.9f \
- atomic_inc_64.9f \
- atomic_inc_64_nv.9f \
- atomic_inc_8.9f \
- atomic_inc_8_nv.9f \
- atomic_inc_ptr.9f \
- atomic_inc_ptr_nv.9f \
- atomic_inc_uchar.9f \
- atomic_inc_uchar_nv.9f \
- atomic_inc_uint.9f \
- atomic_inc_uint_nv.9f \
- atomic_inc_ulong.9f \
- atomic_inc_ulong_nv.9f \
- atomic_inc_ushort.9f \
- atomic_inc_ushort_nv.9f \
- atomic_or_16.9f \
- atomic_or_16_nv.9f \
- atomic_or_32.9f \
- atomic_or_32_nv.9f \
- atomic_or_64.9f \
- atomic_or_64_nv.9f \
- atomic_or_8.9f \
- atomic_or_8_nv.9f \
- atomic_or_uchar.9f \
- atomic_or_uchar_nv.9f \
- atomic_or_uint.9f \
- atomic_or_uint_nv.9f \
- atomic_or_ulong.9f \
- atomic_or_ulong_nv.9f \
- atomic_or_ushort.9f \
- atomic_or_ushort_nv.9f \
- atomic_set_long_excl.9f \
- atomic_swap_16.9f \
- atomic_swap_32.9f \
- atomic_swap_64.9f \
- atomic_swap_8.9f \
- atomic_swap_ptr.9f \
- atomic_swap_uchar.9f \
- atomic_swap_uint.9f \
- atomic_swap_ulong.9f \
- atomic_swap_ushort.9f \
- avl_add.9f \
- avl_create.9f \
- avl_destroy.9f \
- avl_destroy_nodes.9f \
- avl_find.9f \
- avl_first.9f \
- avl_insert.9f \
- avl_insert_here.9f \
- avl_is_empty.9f \
- avl_last.9f \
- avl_nearest.9f \
- avl_numnodes.9f \
- avl_remove.9f \
- avl_swap.9f \
- bcanputnext.9f \
- crgetgid.9f \
- crgetgroups.9f \
- crgetngroups.9f \
- crgetrgid.9f \
- crgetruid.9f \
- crgetsgid.9f \
- crgetsuid.9f \
- crgetuid.9f \
- crgetzoneid.9f \
- csx_Get16.9f \
- csx_Get32.9f \
- csx_Get64.9f \
- csx_GetEventMask.9f \
- csx_GetNextClient.9f \
- csx_GetNextTuple.9f \
- csx_Parse_CISTPL_DEVICE_A.9f \
- csx_Parse_CISTPL_DEVICE_OA.9f \
- csx_Parse_CISTPL_DEVICE_OC.9f \
- csx_Parse_CISTPL_JEDEC_A.9f \
- csx_Parse_CISTPL_LONGLINK_C.9f \
- csx_Put16.9f \
- csx_Put32.9f \
- csx_Put64.9f \
- csx_ReleaseIO.9f \
- csx_ReleaseIRQ.9f \
- csx_ReleaseSocketMask.9f \
- csx_ReleaseWindow.9f \
- csx_RemoveDeviceNode.9f \
- csx_RepGet16.9f \
- csx_RepGet32.9f \
- csx_RepGet64.9f \
- csx_RepPut16.9f \
- csx_RepPut32.9f \
- csx_RepPut64.9f \
- cv_broadcast.9f \
- cv_destroy.9f \
- cv_init.9f \
- cv_reltimedwait.9f \
- cv_reltimedwait_sig.9f \
- cv_signal.9f \
- cv_timedwait.9f \
- cv_timedwait_sig.9f \
- cv_wait.9f \
- cv_wait_sig.9f \
- ddi_btopr.9f \
- ddi_cb_unregister.9f \
- ddi_check_dma_handle.9f \
- ddi_devid_free.9f \
- ddi_devid_get.9f \
- ddi_devid_init.9f \
- ddi_devid_register.9f \
- ddi_devid_sizeof.9f \
- ddi_devid_str_decode.9f \
- ddi_devid_str_encode.9f \
- ddi_devid_str_free.9f \
- ddi_devid_unregister.9f \
- ddi_devid_valid.9f \
- ddi_devmap_segmap.9f \
- ddi_dmae_1stparty.9f \
- ddi_dmae_alloc.9f \
- ddi_dmae_disable.9f \
- ddi_dmae_enable.9f \
- ddi_dmae_getattr.9f \
- ddi_dmae_getcnt.9f \
- ddi_dmae_prog.9f \
- ddi_dmae_release.9f \
- ddi_dmae_stop.9f \
- ddi_exit_critical.9f \
- ddi_fls.9f \
- ddi_fm_capable.9f \
- ddi_fm_dma_err_clear.9f \
- ddi_fm_dma_err_get.9f \
- ddi_fm_fini.9f \
- ddi_fm_handler_unregister.9f \
- ddi_get16.9f \
- ddi_get32.9f \
- ddi_get64.9f \
- ddi_get_iblock_cookie.9f \
- ddi_get_lbolt64.9f \
- ddi_get_name.9f \
- ddi_get_soft_iblock_cookie.9f \
- ddi_get_soft_state.9f \
- ddi_getb.9f \
- ddi_getl.9f \
- ddi_getll.9f \
- ddi_getlongprop.9f \
- ddi_getlongprop_buf.9f \
- ddi_getprop.9f \
- ddi_getproplen.9f \
- ddi_getw.9f \
- ddi_intr_block_disable.9f \
- ddi_intr_block_enable.9f \
- ddi_intr_clr_mask.9f \
- ddi_intr_disable.9f \
- ddi_intr_free.9f \
- ddi_intr_get_navail.9f \
- ddi_intr_get_softint_pri.9f \
- ddi_intr_remove_handler.9f \
- ddi_intr_remove_softint.9f \
- ddi_intr_set_cap.9f \
- ddi_intr_set_pri.9f \
- ddi_intr_set_softint_pri.9f \
- ddi_intr_trigger_softint.9f \
- ddi_io_get16.9f \
- ddi_io_get32.9f \
- ddi_io_getb.9f \
- ddi_io_getl.9f \
- ddi_io_getw.9f \
- ddi_io_put16.9f \
- ddi_io_put32.9f \
- ddi_io_putb.9f \
- ddi_io_putl.9f \
- ddi_io_putw.9f \
- ddi_io_rep_get16.9f \
- ddi_io_rep_get32.9f \
- ddi_io_rep_getb.9f \
- ddi_io_rep_getl.9f \
- ddi_io_rep_getw.9f \
- ddi_io_rep_put16.9f \
- ddi_io_rep_put32.9f \
- ddi_io_rep_putb.9f \
- ddi_io_rep_putl.9f \
- ddi_io_rep_putw.9f \
- ddi_mem_get16.9f \
- ddi_mem_get32.9f \
- ddi_mem_get64.9f \
- ddi_mem_getb.9f \
- ddi_mem_getl.9f \
- ddi_mem_getll.9f \
- ddi_mem_getw.9f \
- ddi_mem_put16.9f \
- ddi_mem_put32.9f \
- ddi_mem_put64.9f \
- ddi_mem_putb.9f \
- ddi_mem_putl.9f \
- ddi_mem_putll.9f \
- ddi_mem_putw.9f \
- ddi_mem_rep_get16.9f \
- ddi_mem_rep_get32.9f \
- ddi_mem_rep_get64.9f \
- ddi_mem_rep_getb.9f \
- ddi_mem_rep_getl.9f \
- ddi_mem_rep_getll.9f \
- ddi_mem_rep_getw.9f \
- ddi_mem_rep_put16.9f \
- ddi_mem_rep_put32.9f \
- ddi_mem_rep_put64.9f \
- ddi_mem_rep_putb.9f \
- ddi_mem_rep_putl.9f \
- ddi_mem_rep_putll.9f \
- ddi_mem_rep_putw.9f \
- ddi_modclose.9f \
- ddi_modsym.9f \
- ddi_peek16.9f \
- ddi_peek32.9f \
- ddi_peek64.9f \
- ddi_peek8.9f \
- ddi_peekc.9f \
- ddi_peekd.9f \
- ddi_peekl.9f \
- ddi_peeks.9f \
- ddi_poke16.9f \
- ddi_poke32.9f \
- ddi_poke64.9f \
- ddi_poke8.9f \
- ddi_pokec.9f \
- ddi_poked.9f \
- ddi_pokel.9f \
- ddi_pokes.9f \
- ddi_prop_free.9f \
- ddi_prop_get_int64.9f \
- ddi_prop_lookup_byte_array.9f \
- ddi_prop_lookup_int64_array.9f \
- ddi_prop_lookup_int_array.9f \
- ddi_prop_lookup_string.9f \
- ddi_prop_lookup_string_array.9f \
- ddi_prop_modify.9f \
- ddi_prop_remove.9f \
- ddi_prop_remove_all.9f \
- ddi_prop_undefine.9f \
- ddi_prop_update_byte_array.9f \
- ddi_prop_update_int.9f \
- ddi_prop_update_int64.9f \
- ddi_prop_update_int64_array.9f \
- ddi_prop_update_int_array.9f \
- ddi_prop_update_string.9f \
- ddi_prop_update_string_array.9f \
- ddi_ptob.9f \
- ddi_put16.9f \
- ddi_put32.9f \
- ddi_put64.9f \
- ddi_putb.9f \
- ddi_putl.9f \
- ddi_putll.9f \
- ddi_putw.9f \
- ddi_remove_intr.9f \
- ddi_remove_softintr.9f \
- ddi_rep_get16.9f \
- ddi_rep_get32.9f \
- ddi_rep_get64.9f \
- ddi_rep_getb.9f \
- ddi_rep_getl.9f \
- ddi_rep_getll.9f \
- ddi_rep_getw.9f \
- ddi_rep_put16.9f \
- ddi_rep_put32.9f \
- ddi_rep_put64.9f \
- ddi_rep_putb.9f \
- ddi_rep_putl.9f \
- ddi_rep_putll.9f \
- ddi_rep_putw.9f \
- ddi_segmap_setup.9f \
- ddi_set_driver_private.9f \
- ddi_soft_state_fini.9f \
- ddi_soft_state_free.9f \
- ddi_soft_state_init.9f \
- ddi_soft_state_zalloc.9f \
- ddi_strdup.9f \
- ddi_strtoull.9f \
- ddi_taskq_create.9f \
- ddi_taskq_destroy.9f \
- ddi_taskq_dispatch.9f \
- ddi_taskq_resume.9f \
- ddi_taskq_suspend.9f \
- ddi_taskq_wait.9f \
- ddi_trigger_softintr.9f \
- ddi_umem_free.9f \
- ddi_umem_unlock.9f \
- ddi_unmap_regs.9f \
- desballoc.9f \
- dev_err.9f \
- devmap_load.9f \
- devmap_umem_setup.9f \
- dlerrorack.9f \
- dlokack.9f \
- dlphysaddrack.9f \
- dluderrorind.9f \
- firmware_close.9f \
- firmware_free.9f \
- firmware_get_size.9f \
- firmware_malloc.9f \
- firmware_open.9f \
- firmware_read.9f \
- free_pktiopb.9f \
- gld_intr.9f \
- gld_mac_alloc.9f \
- gld_mac_free.9f \
- gld_recv.9f \
- gld_register.9f \
- gld_sched.9f \
- gld_unregister.9f \
- id32_free.9f \
- id32_lookup.9f \
- id_alloc.9f \
- id_alloc_nosleep.9f \
- id_alloc_specific_nosleep.9f \
- id_allocff.9f \
- id_allocff_nosleep.9f \
- id_free.9f \
- id_space_create.9f \
- id_space_destroy.9f \
- id_space_extend.9f \
- inl.9f \
- intro.9f \
- inw.9f \
- kmem_cache_alloc.9f \
- kmem_cache_destroy.9f \
- kmem_cache_free.9f \
- kmem_cache_set_move.9f \
- kmem_free.9f \
- kmem_zalloc.9f \
- kstat_named_setstr.9f \
- kstat_runq_back_to_waitq.9f \
- kstat_runq_enter.9f \
- kstat_runq_exit.9f \
- kstat_waitq_enter.9f \
- kstat_waitq_exit.9f \
- kstat_waitq_to_runq.9f \
- ldi_awrite.9f \
- ldi_close.9f \
- ldi_get_devid.9f \
- ldi_get_minor_name.9f \
- ldi_get_otyp.9f \
- ldi_getmsg.9f \
- ldi_ident_from_dip.9f \
- ldi_ident_from_stream.9f \
- ldi_ident_release.9f \
- ldi_open_by_devid.9f \
- ldi_open_by_name.9f \
- ldi_prop_get_int64.9f \
- ldi_prop_lookup_byte_array.9f \
- ldi_prop_lookup_int64_array.9f \
- ldi_prop_lookup_string.9f \
- ldi_prop_lookup_string_array.9f \
- ldi_write.9f \
- list_destroy.9f \
- list_head.9f \
- list_insert_after.9f \
- list_insert_before.9f \
- list_insert_head.9f \
- list_insert_tail.9f \
- list_is_empty.9f \
- list_link_active.9f \
- list_link_init.9f \
- list_link_replace.9f \
- list_move_tail.9f \
- list_next.9f \
- list_prev.9f \
- list_remove.9f \
- list_remove_head.9f \
- list_remove_tail.9f \
- list_tail.9f \
- mac_fini_ops.9f \
- mac_free.9f \
- mac_hcksum_set.9f \
+ vmem_walk.9f
+
+MANLINKS= AVL_NEXT.9f \
+ AVL_PREV.9f \
+ SIZEOF_PTR.9f \
+ SIZEOF_STRUCT.9f \
+ STRUCT_BUF.9f \
+ STRUCT_FADDR.9f \
+ STRUCT_FGET.9f \
+ STRUCT_FGETP.9f \
+ STRUCT_FSET.9f \
+ STRUCT_FSETP.9f \
+ STRUCT_HANDLE.9f \
+ STRUCT_INIT.9f \
+ STRUCT_SET_HANDLE.9f \
+ STRUCT_SIZE.9f \
+ assert.9f \
+ atomic_add_16.9f \
+ atomic_add_16_nv.9f \
+ atomic_add_32.9f \
+ atomic_add_32_nv.9f \
+ atomic_add_64.9f \
+ atomic_add_64_nv.9f \
+ atomic_add_8.9f \
+ atomic_add_8_nv.9f \
+ atomic_add_char.9f \
+ atomic_add_char_nv.9f \
+ atomic_add_int.9f \
+ atomic_add_int_nv.9f \
+ atomic_add_long.9f \
+ atomic_add_long_nv.9f \
+ atomic_add_ptr.9f \
+ atomic_add_ptr_nv.9f \
+ atomic_add_short.9f \
+ atomic_add_short_nv.9f \
+ atomic_and_16.9f \
+ atomic_and_16_nv.9f \
+ atomic_and_32.9f \
+ atomic_and_32_nv.9f \
+ atomic_and_64.9f \
+ atomic_and_64_nv.9f \
+ atomic_and_8.9f \
+ atomic_and_8_nv.9f \
+ atomic_and_uchar.9f \
+ atomic_and_uchar_nv.9f \
+ atomic_and_uint.9f \
+ atomic_and_uint_nv.9f \
+ atomic_and_ulong.9f \
+ atomic_and_ulong_nv.9f \
+ atomic_and_ushort.9f \
+ atomic_and_ushort_nv.9f \
+ atomic_cas_16.9f \
+ atomic_cas_32.9f \
+ atomic_cas_64.9f \
+ atomic_cas_8.9f \
+ atomic_cas_ptr.9f \
+ atomic_cas_uchar.9f \
+ atomic_cas_uint.9f \
+ atomic_cas_ulong.9f \
+ atomic_cas_ushort.9f \
+ atomic_clear_long_excl.9f \
+ atomic_dec_16.9f \
+ atomic_dec_16_nv.9f \
+ atomic_dec_32.9f \
+ atomic_dec_32_nv.9f \
+ atomic_dec_64.9f \
+ atomic_dec_64_nv.9f \
+ atomic_dec_8.9f \
+ atomic_dec_8_nv.9f \
+ atomic_dec_ptr.9f \
+ atomic_dec_ptr_nv.9f \
+ atomic_dec_uchar.9f \
+ atomic_dec_uchar_nv.9f \
+ atomic_dec_uint.9f \
+ atomic_dec_uint_nv.9f \
+ atomic_dec_ulong.9f \
+ atomic_dec_ulong_nv.9f \
+ atomic_dec_ushort.9f \
+ atomic_dec_ushort_nv.9f \
+ atomic_inc_16.9f \
+ atomic_inc_16_nv.9f \
+ atomic_inc_32.9f \
+ atomic_inc_32_nv.9f \
+ atomic_inc_64.9f \
+ atomic_inc_64_nv.9f \
+ atomic_inc_8.9f \
+ atomic_inc_8_nv.9f \
+ atomic_inc_ptr.9f \
+ atomic_inc_ptr_nv.9f \
+ atomic_inc_uchar.9f \
+ atomic_inc_uchar_nv.9f \
+ atomic_inc_uint.9f \
+ atomic_inc_uint_nv.9f \
+ atomic_inc_ulong.9f \
+ atomic_inc_ulong_nv.9f \
+ atomic_inc_ushort.9f \
+ atomic_inc_ushort_nv.9f \
+ atomic_or_16.9f \
+ atomic_or_16_nv.9f \
+ atomic_or_32.9f \
+ atomic_or_32_nv.9f \
+ atomic_or_64.9f \
+ atomic_or_64_nv.9f \
+ atomic_or_8.9f \
+ atomic_or_8_nv.9f \
+ atomic_or_uchar.9f \
+ atomic_or_uchar_nv.9f \
+ atomic_or_uint.9f \
+ atomic_or_uint_nv.9f \
+ atomic_or_ulong.9f \
+ atomic_or_ulong_nv.9f \
+ atomic_or_ushort.9f \
+ atomic_or_ushort_nv.9f \
+ atomic_set_long_excl.9f \
+ atomic_swap_16.9f \
+ atomic_swap_32.9f \
+ atomic_swap_64.9f \
+ atomic_swap_8.9f \
+ atomic_swap_ptr.9f \
+ atomic_swap_uchar.9f \
+ atomic_swap_uint.9f \
+ atomic_swap_ulong.9f \
+ atomic_swap_ushort.9f \
+ avl_add.9f \
+ avl_create.9f \
+ avl_destroy.9f \
+ avl_destroy_nodes.9f \
+ avl_find.9f \
+ avl_first.9f \
+ avl_insert.9f \
+ avl_insert_here.9f \
+ avl_is_empty.9f \
+ avl_last.9f \
+ avl_nearest.9f \
+ avl_numnodes.9f \
+ avl_remove.9f \
+ avl_swap.9f \
+ bcanputnext.9f \
+ crgetgid.9f \
+ crgetgroups.9f \
+ crgetngroups.9f \
+ crgetrgid.9f \
+ crgetruid.9f \
+ crgetsgid.9f \
+ crgetsuid.9f \
+ crgetuid.9f \
+ crgetzoneid.9f \
+ csx_Get16.9f \
+ csx_Get32.9f \
+ csx_Get64.9f \
+ csx_GetEventMask.9f \
+ csx_GetNextClient.9f \
+ csx_GetNextTuple.9f \
+ csx_Parse_CISTPL_DEVICE_A.9f \
+ csx_Parse_CISTPL_DEVICE_OA.9f \
+ csx_Parse_CISTPL_DEVICE_OC.9f \
+ csx_Parse_CISTPL_JEDEC_A.9f \
+ csx_Parse_CISTPL_LONGLINK_C.9f \
+ csx_Put16.9f \
+ csx_Put32.9f \
+ csx_Put64.9f \
+ csx_ReleaseIO.9f \
+ csx_ReleaseIRQ.9f \
+ csx_ReleaseSocketMask.9f \
+ csx_ReleaseWindow.9f \
+ csx_RemoveDeviceNode.9f \
+ csx_RepGet16.9f \
+ csx_RepGet32.9f \
+ csx_RepGet64.9f \
+ csx_RepPut16.9f \
+ csx_RepPut32.9f \
+ csx_RepPut64.9f \
+ cv_broadcast.9f \
+ cv_destroy.9f \
+ cv_init.9f \
+ cv_reltimedwait.9f \
+ cv_reltimedwait_sig.9f \
+ cv_signal.9f \
+ cv_timedwait.9f \
+ cv_timedwait_sig.9f \
+ cv_wait.9f \
+ cv_wait_sig.9f \
+ ddi_btopr.9f \
+ ddi_cb_unregister.9f \
+ ddi_check_dma_handle.9f \
+ ddi_devid_free.9f \
+ ddi_devid_get.9f \
+ ddi_devid_init.9f \
+ ddi_devid_register.9f \
+ ddi_devid_sizeof.9f \
+ ddi_devid_str_decode.9f \
+ ddi_devid_str_encode.9f \
+ ddi_devid_str_free.9f \
+ ddi_devid_unregister.9f \
+ ddi_devid_valid.9f \
+ ddi_devmap_segmap.9f \
+ ddi_dmae_1stparty.9f \
+ ddi_dmae_alloc.9f \
+ ddi_dmae_disable.9f \
+ ddi_dmae_enable.9f \
+ ddi_dmae_getattr.9f \
+ ddi_dmae_getcnt.9f \
+ ddi_dmae_prog.9f \
+ ddi_dmae_release.9f \
+ ddi_dmae_stop.9f \
+ ddi_exit_critical.9f \
+ ddi_fls.9f \
+ ddi_fm_capable.9f \
+ ddi_fm_dma_err_clear.9f \
+ ddi_fm_dma_err_get.9f \
+ ddi_fm_fini.9f \
+ ddi_fm_handler_unregister.9f \
+ ddi_get16.9f \
+ ddi_get32.9f \
+ ddi_get64.9f \
+ ddi_get_iblock_cookie.9f \
+ ddi_get_lbolt64.9f \
+ ddi_get_name.9f \
+ ddi_get_soft_iblock_cookie.9f \
+ ddi_get_soft_state.9f \
+ ddi_getb.9f \
+ ddi_getl.9f \
+ ddi_getll.9f \
+ ddi_getlongprop.9f \
+ ddi_getlongprop_buf.9f \
+ ddi_getprop.9f \
+ ddi_getproplen.9f \
+ ddi_getw.9f \
+ ddi_intr_block_disable.9f \
+ ddi_intr_block_enable.9f \
+ ddi_intr_clr_mask.9f \
+ ddi_intr_disable.9f \
+ ddi_intr_free.9f \
+ ddi_intr_get_navail.9f \
+ ddi_intr_get_softint_pri.9f \
+ ddi_intr_remove_handler.9f \
+ ddi_intr_remove_softint.9f \
+ ddi_intr_set_cap.9f \
+ ddi_intr_set_pri.9f \
+ ddi_intr_set_softint_pri.9f \
+ ddi_intr_trigger_softint.9f \
+ ddi_io_get16.9f \
+ ddi_io_get32.9f \
+ ddi_io_getb.9f \
+ ddi_io_getl.9f \
+ ddi_io_getw.9f \
+ ddi_io_put16.9f \
+ ddi_io_put32.9f \
+ ddi_io_putb.9f \
+ ddi_io_putl.9f \
+ ddi_io_putw.9f \
+ ddi_io_rep_get16.9f \
+ ddi_io_rep_get32.9f \
+ ddi_io_rep_getb.9f \
+ ddi_io_rep_getl.9f \
+ ddi_io_rep_getw.9f \
+ ddi_io_rep_put16.9f \
+ ddi_io_rep_put32.9f \
+ ddi_io_rep_putb.9f \
+ ddi_io_rep_putl.9f \
+ ddi_io_rep_putw.9f \
+ ddi_mem_get16.9f \
+ ddi_mem_get32.9f \
+ ddi_mem_get64.9f \
+ ddi_mem_getb.9f \
+ ddi_mem_getl.9f \
+ ddi_mem_getll.9f \
+ ddi_mem_getw.9f \
+ ddi_mem_put16.9f \
+ ddi_mem_put32.9f \
+ ddi_mem_put64.9f \
+ ddi_mem_putb.9f \
+ ddi_mem_putl.9f \
+ ddi_mem_putll.9f \
+ ddi_mem_putw.9f \
+ ddi_mem_rep_get16.9f \
+ ddi_mem_rep_get32.9f \
+ ddi_mem_rep_get64.9f \
+ ddi_mem_rep_getb.9f \
+ ddi_mem_rep_getl.9f \
+ ddi_mem_rep_getll.9f \
+ ddi_mem_rep_getw.9f \
+ ddi_mem_rep_put16.9f \
+ ddi_mem_rep_put32.9f \
+ ddi_mem_rep_put64.9f \
+ ddi_mem_rep_putb.9f \
+ ddi_mem_rep_putl.9f \
+ ddi_mem_rep_putll.9f \
+ ddi_mem_rep_putw.9f \
+ ddi_modclose.9f \
+ ddi_modsym.9f \
+ ddi_peek16.9f \
+ ddi_peek32.9f \
+ ddi_peek64.9f \
+ ddi_peek8.9f \
+ ddi_peekc.9f \
+ ddi_peekd.9f \
+ ddi_peekl.9f \
+ ddi_peeks.9f \
+ ddi_poke16.9f \
+ ddi_poke32.9f \
+ ddi_poke64.9f \
+ ddi_poke8.9f \
+ ddi_pokec.9f \
+ ddi_poked.9f \
+ ddi_pokel.9f \
+ ddi_pokes.9f \
+ ddi_prop_free.9f \
+ ddi_prop_get_int64.9f \
+ ddi_prop_lookup_byte_array.9f \
+ ddi_prop_lookup_int64_array.9f \
+ ddi_prop_lookup_int_array.9f \
+ ddi_prop_lookup_string.9f \
+ ddi_prop_lookup_string_array.9f \
+ ddi_prop_modify.9f \
+ ddi_prop_remove.9f \
+ ddi_prop_remove_all.9f \
+ ddi_prop_undefine.9f \
+ ddi_prop_update_byte_array.9f \
+ ddi_prop_update_int.9f \
+ ddi_prop_update_int64.9f \
+ ddi_prop_update_int64_array.9f \
+ ddi_prop_update_int_array.9f \
+ ddi_prop_update_string.9f \
+ ddi_prop_update_string_array.9f \
+ ddi_ptob.9f \
+ ddi_put16.9f \
+ ddi_put32.9f \
+ ddi_put64.9f \
+ ddi_putb.9f \
+ ddi_putl.9f \
+ ddi_putll.9f \
+ ddi_putw.9f \
+ ddi_remove_intr.9f \
+ ddi_remove_softintr.9f \
+ ddi_rep_get16.9f \
+ ddi_rep_get32.9f \
+ ddi_rep_get64.9f \
+ ddi_rep_getb.9f \
+ ddi_rep_getl.9f \
+ ddi_rep_getll.9f \
+ ddi_rep_getw.9f \
+ ddi_rep_put16.9f \
+ ddi_rep_put32.9f \
+ ddi_rep_put64.9f \
+ ddi_rep_putb.9f \
+ ddi_rep_putl.9f \
+ ddi_rep_putll.9f \
+ ddi_rep_putw.9f \
+ ddi_segmap_setup.9f \
+ ddi_set_driver_private.9f \
+ ddi_soft_state_fini.9f \
+ ddi_soft_state_free.9f \
+ ddi_soft_state_init.9f \
+ ddi_soft_state_zalloc.9f \
+ ddi_strdup.9f \
+ ddi_strtoull.9f \
+ ddi_taskq_create.9f \
+ ddi_taskq_destroy.9f \
+ ddi_taskq_dispatch.9f \
+ ddi_taskq_resume.9f \
+ ddi_taskq_suspend.9f \
+ ddi_taskq_wait.9f \
+ ddi_trigger_softintr.9f \
+ ddi_umem_free.9f \
+ ddi_umem_unlock.9f \
+ ddi_unmap_regs.9f \
+ desballoc.9f \
+ dev_err.9f \
+ devmap_load.9f \
+ devmap_umem_setup.9f \
+ dlerrorack.9f \
+ dlokack.9f \
+ dlphysaddrack.9f \
+ dluderrorind.9f \
+ firmware_close.9f \
+ firmware_free.9f \
+ firmware_get_size.9f \
+ firmware_malloc.9f \
+ firmware_open.9f \
+ firmware_read.9f \
+ free_pktiopb.9f \
+ gld_intr.9f \
+ gld_mac_alloc.9f \
+ gld_mac_free.9f \
+ gld_recv.9f \
+ gld_register.9f \
+ gld_sched.9f \
+ gld_unregister.9f \
+ id32_free.9f \
+ id32_lookup.9f \
+ id_alloc.9f \
+ id_alloc_nosleep.9f \
+ id_alloc_specific_nosleep.9f \
+ id_allocff.9f \
+ id_allocff_nosleep.9f \
+ id_free.9f \
+ id_space_create.9f \
+ id_space_destroy.9f \
+ id_space_extend.9f \
+ inl.9f \
+ intro.9f \
+ inw.9f \
+ kmem_cache_alloc.9f \
+ kmem_cache_destroy.9f \
+ kmem_cache_free.9f \
+ kmem_cache_set_move.9f \
+ kmem_free.9f \
+ kmem_zalloc.9f \
+ kstat_named_setstr.9f \
+ kstat_runq_back_to_waitq.9f \
+ kstat_runq_enter.9f \
+ kstat_runq_exit.9f \
+ kstat_waitq_enter.9f \
+ kstat_waitq_exit.9f \
+ kstat_waitq_to_runq.9f \
+ ldi_awrite.9f \
+ ldi_close.9f \
+ ldi_get_devid.9f \
+ ldi_get_minor_name.9f \
+ ldi_get_otyp.9f \
+ ldi_getmsg.9f \
+ ldi_ident_from_dip.9f \
+ ldi_ident_from_stream.9f \
+ ldi_ident_release.9f \
+ ldi_open_by_devid.9f \
+ ldi_open_by_name.9f \
+ ldi_prop_get_int64.9f \
+ ldi_prop_lookup_byte_array.9f \
+ ldi_prop_lookup_int64_array.9f \
+ ldi_prop_lookup_string.9f \
+ ldi_prop_lookup_string_array.9f \
+ ldi_write.9f \
+ list_destroy.9f \
+ list_head.9f \
+ list_insert_after.9f \
+ list_insert_before.9f \
+ list_insert_head.9f \
+ list_insert_tail.9f \
+ list_is_empty.9f \
+ list_link_active.9f \
+ list_link_init.9f \
+ list_link_replace.9f \
+ list_move_tail.9f \
+ list_next.9f \
+ list_prev.9f \
+ list_remove.9f \
+ list_remove_head.9f \
+ list_remove_tail.9f \
+ list_tail.9f \
+ mac_fini_ops.9f \
+ mac_free.9f \
+ mac_hcksum_set.9f \
mac_prop_info_set_default_link_flowctrl.9f \
mac_prop_info_set_default_str.9f \
mac_prop_info_set_default_uint32.9f \
@@ -1225,6 +1234,13 @@ MANLINKS= AVL_NEXT.9f \
usb_set_alt_if.9f \
usb_set_cfg.9f \
usb_unregister_hotplug_cbs.9f \
+ usba_free_hcdi_ops.9f \
+ usba_hcdi_unregister.9f \
+ usba_hubdi_close.9f \
+ usba_hubdi_ioctl.9f \
+ usba_hubdi_open.9f \
+ usba_hubdi_root_hub_power.9f \
+ usba_hubdi_unbind_root_hub.9f \
va_copy.9f \
va_end.9f \
va_start.9f \
@@ -2104,12 +2120,25 @@ usb_pipe_open.9f := LINKSRC = usb_pipe_xopen.9f
usb_unregister_hotplug_cbs.9f := LINKSRC = usb_register_hotplug_cbs.9f
+usba_free_hcdi_ops.9f := LINKSRC = usba_alloc_hcdi_ops.9f
+
+usba_hcdi_unregister.9f := LINKSRC = usba_hcdi_register.9f
+
+usba_hubdi_close.9f := LINKSRC = usba_hubdi_cb_ops.9f
+usba_hubdi_ioctl.9f := LINKSRC = usba_hubdi_cb_ops.9f
+usba_hubdi_open.9f := LINKSRC = usba_hubdi_cb_ops.9f
+
+usba_hubdi_root_hub_power.9f := LINKSRC = usba_hubdi_dev_ops.9f
+
+usba_hubdi_unbind_root_hub.9f := LINKSRC = usba_hubdi_bind_root_hub.9f
+
+
va_copy.9f := LINKSRC = va_arg.9f
va_end.9f := LINKSRC = va_arg.9f
va_start.9f := LINKSRC = va_arg.9f
vmem_xalloc.9f := LINKSRC = vmem_alloc.9f
-vmem_free.9f := LINKSRC = vmem_alloc.9f
+vmem_free.9f := LINKSRC = vmem_alloc.9f
vmem_xfree.9f := LINKSRC = vmem_alloc.9f
vmem_xcreate.9f := LINKSRC = vmem_create.9f
diff --git a/usr/src/man/man9f/kmem_alloc.9f b/usr/src/man/man9f/kmem_alloc.9f
index 9c4f8ccb0c..201544b57c 100644
--- a/usr/src/man/man9f/kmem_alloc.9f
+++ b/usr/src/man/man9f/kmem_alloc.9f
@@ -129,5 +129,8 @@ uninitialized kernel memory should be handled carefully. For example, never
.SH NOTES
.sp
.LP
-\fBkmem_alloc(0\fR, \fIflag\fR\fB)\fR always returns \fINULL\fR.
-\fBkmem_free(NULL, 0)\fR is legal.
+\fBkmem_alloc(0\fR, \fIflag\fR\fB)\fR always returns \fINULL\fR, but
+if \fBKM_SLEEP\fR is set, this behavior is considered to be deprecated;
+the system may be configured to explicitly panic in this case in lieu
+of returning \fINULL\fR.
+\fBkmem_free(NULL, 0)\fR is legal, however.
diff --git a/usr/src/man/man9f/usba_alloc_hcdi_ops.9f b/usr/src/man/man9f/usba_alloc_hcdi_ops.9f
new file mode 100644
index 0000000000..9f355ef031
--- /dev/null
+++ b/usr/src/man/man9f/usba_alloc_hcdi_ops.9f
@@ -0,0 +1,77 @@
+.\"
+.\" This file and its contents are supplied under the terms of the
+.\" Common Development and Distribution License ("CDDL"), version 1.0.
+.\" You may only use this file in accordance with the terms of version
+.\" 1.0 of the CDDL.
+.\"
+.\" A full copy of the text of the CDDL should have accompanied this
+.\" source. A copy of the CDDL is also available via the Internet at
+.\" http://www.illumos.org/license/CDDL.
+.\"
+.\"
+.\" Copyright 2016 Joyent, Inc.
+.\"
+.Dd May 7, 2016
+.Dt USBA_ALLOC_HCDI_OPS 9F
+.Os
+.Sh NAME
+.Nm usba_alloc_hcdi_ops ,
+.Nm usba_free_hcdi_ops
+.Nd allocate and free USB HCD interface operations structure
+.Sh SYNOPSIS
+.In sys/usb/usba/hcdi.h
+.Ft "usba_hcdi_ops_t *"
+.Fo usba_alloc_hcdi_ops
+.Fa void
+.Fc
+.Ft void
+.Fo usba_free_hcdi_ops
+.Fa "usba_hcdi_ops_t *ops"
+.Fc
+.Sh INTERFACE LEVEL
+.Sy Volatile -
+illumos USB HCD private function
+.Pp
+This is a private function that is not part of the stable DDI. It may be
+removed or changed at any time.
+.Sh PARAMATERS
+.Bl -tag -width Fa
+.It Fa ops
+Pointer to an allocated HCD interface operations structure.
+.El
+.Sh DESCRIPTION
+The
+.Fn usba_alloc_hcdi_ops
+function allocates a
+.Xr usba_hcdi_ops_t 9S
+structure for use for a USB HCD driver. As part of initialization, a USB
+HCD driver will allocate this and fill it in. For more information on
+the full lifetime of the object and when a USB HCD driver should release
+the structure, see
+.Xr usba_hcdi 9E .
+.Pp
+The
+.Fn usba_free_hcdi_ops
+function release the memory associated with the
+.Xr usba_hcdi_ops_t 9S
+structure pointed to by
+.Fa ops .
+Only pointers received from a call to the
+.Fn usba_alloc_hcdi_ops
+function should be passed to this function.
+.Sh CONTEXT
+These functions are generally called from kernel context during a USB
+HCD driver's
+.Xr attach 9E
+and
+.Xr detach 9E
+entry points. While it is safe to call this function from user context,
+it would be quite unusal to do so.
+.Sh RETURN VALUES
+The
+.Fn usba_alloc_hcdi_ops
+function always succeeds and returns a pointer to an allocation
+operations structure.
+.Sh SEE ALSO
+.Xr usba_hcdi 9E ,
+.Xr usba_hcdi_ops_t 9S
diff --git a/usr/src/man/man9f/usba_hcdi_cb.9f b/usr/src/man/man9f/usba_hcdi_cb.9f
new file mode 100644
index 0000000000..62cdc062ee
--- /dev/null
+++ b/usr/src/man/man9f/usba_hcdi_cb.9f
@@ -0,0 +1,145 @@
+.\"
+.\" This file and its contents are supplied under the terms of the
+.\" Common Development and Distribution License ("CDDL"), version 1.0.
+.\" You may only use this file in accordance with the terms of version
+.\" 1.0 of the CDDL.
+.\"
+.\" A full copy of the text of the CDDL should have accompanied this
+.\" source. A copy of the CDDL is also available via the Internet at
+.\" http://www.illumos.org/license/CDDL.
+.\"
+.\"
+.\" Copyright 2016 Joyent, Inc.
+.\"
+.Dd Sep 16, 2016
+.Dt USBA_HCDI_CB 9F
+.Os
+.Sh NAME
+.Nm usba_hcdi_cb
+.Nd USBA transfer callback
+.Sh SYNOPSIS
+.In sys/usb/usba/hcdi.h
+.Ft void
+.Fo usba_hcdi_cb
+.Fa "usba_pipe_handle_data_t *ph"
+.Fa "usb_opaque_t req"
+.Fa "ucb_cr_t cr"
+.Fc
+.Sh INTERFACE LEVEL
+.Sy Volatile -
+illumos USB HCD private function
+.Pp
+This is a private function that is not part of the stable DDI. It may be
+removed or changed at any time.
+.Sh PARAMETERS
+.Bl -tag -width Fa
+.It Fa ph
+A pointer to the USBA pipe handle that was passed to the HCD driver
+during a call to the
+.Xr usba_hcdi_pipe_open
+entry point.
+.It Fa req
+A pointer to the request structure that is being completed.
+.It Fa cr
+The completion code for the request.
+.El
+.Sh DESCRIPTION
+The
+.Fn usba_hcdi_cb
+function is used when the HCD controller has completed processing a USB
+transfer request, whether
+successfully or not.
+.Pp
+The USB transfer will have been initiated by a call to
+.Xr usba_hcdi_pipe_bulk_xfer 9E ,
+.Xr usba_hcdi_pipe_ctrl_xfer 9E ,
+.Xr usba_hcdi_pipe_intr_xfer 9E ,
+or
+.Xr usba_hcdi_pipe_isoc_xfer 9E .
+If the transfer initiated was a periodic transfer (certain Interrupt-IN
+and Isochronous-IN transfers), then there may be more than one callback
+performed over the life of the transfer.
+.Pp
+This function must not be used if the HCD driver returned a value
+other than
+.Sy USB_SUCCESS
+to one of the transfer initialization functions listed above. For more
+information on transfer request handling, see
+.Xr usba_hcdi 9E .
+.Pp
+The
+.Fa ph
+argument corresponds to the USBA framework's pipe handle that was given
+to the HCDI when the pipe was opened. See
+.Xr usba_hcdi_pipe_open 9E
+and
+.Xr usba_hcdi 9E
+for more information.
+.Pp
+The
+.Fa req
+argument is one of the four request structures,
+.Xr usb_bulk_req 9S ,
+.Xr usb_ctrl_req 9S ,
+.Xr usb_intr_req 9S ,
+or
+.Xr usb_isoc_req 9S ,
+which have been cast to the type
+.Ft usb_oapque_t .
+The caller should ensure that all appropriate members of the request
+structure have been filled in. For example, if expecting data from the
+device and the request has completed successfully, then that data
+should be copied into the request structure's
+.Xr mblk 9S
+prior to handing the request structure to the
+.Fn usb_hcdi_cb
+function.
+Similarly, the
+.Xr usb_isoc_req 9S
+structure's
+.Sy isoc_pkt_descr
+member should be filled in with the appropriate data.
+.Pp
+Once the request structure has been passed to the
+.Fn usba_hcdi_cb
+function, the HCD driver must not access the structure ever again. It
+should be treated as freed memory.
+.Pp
+The
+.Fa cr
+argument us used to indicate whether the transfer was successful or not.
+If
+.Fa cr
+is set to
+.Sy USB_CR_OK
+that indicates that the transfer completed successfully. This should
+also be used when a permitted short transfer has occurred. Otherwise, it
+should be set to one of the completion reasons.
+.Ss Locking
+The HCD driver should not hold its own internal locks across a call to
+the
+.Fn usba_hcdi_cb
+function. It is possible that the driver will have once of its
+.Xr usba_hcdi 9E
+entry points called based on the return value specified.
+.Sh CONTEXT
+The
+.Fn usba_hcdi_cb
+function may be called from
+.Sy user ,
+.Sy kernel ,
+or
+.Sy interrupt
+context.
+.Sh SEE ALSO
+.Xr usba_hcdi 9E ,
+.Xr usba_hcdi_pipe_bulk_xfer 9E ,
+.Xr usba_hcdi_pipe_ctrl_xfer 9E ,
+.Xr usba_hcdi_pipe_intr_xfer 9E ,
+.Xr usba_hcdi_pipe_isoc_xfer 9E ,
+.Xr usba_hcdi_pipe_open 9E ,
+.Xr mblk 9S ,
+.Xr usb_bulk_req 9S ,
+.Xr usb_ctrl_req 9S ,
+.Xr usb_intr_req 9S ,
+.Xr usb_isoc_req 9S
diff --git a/usr/src/man/man9f/usba_hcdi_dup_intr_req.9f b/usr/src/man/man9f/usba_hcdi_dup_intr_req.9f
new file mode 100644
index 0000000000..976c8c8d37
--- /dev/null
+++ b/usr/src/man/man9f/usba_hcdi_dup_intr_req.9f
@@ -0,0 +1,115 @@
+.\"
+.\" This file and its contents are supplied under the terms of the
+.\" Common Development and Distribution License ("CDDL"), version 1.0.
+.\" You may only use this file in accordance with the terms of version
+.\" 1.0 of the CDDL.
+.\"
+.\" A full copy of the text of the CDDL should have accompanied this
+.\" source. A copy of the CDDL is also available via the Internet at
+.\" http://www.illumos.org/license/CDDL.
+.\"
+.\"
+.\" Copyright 2016 Joyent, Inc.
+.\"
+.Dd May 10, 2016
+.Dt USBA_HCDI_DUP_INTER_REQ 9F
+.Os
+.Sh NAME
+.Nm usba_hcdi_dup_intr_req
+.Nd duplicate an interrupt request
+.Sh SYNOPSIS
+.In sys/usb/usba/hcdi.h
+.Ft usb_intr_req_t *
+.Fo usba_hcdi_dup_intr_req
+.Fa "dev_info_t *dip"
+.Fa "usb_intr_req_t *irqp"
+.Fa "size_t size"
+.Fa "usb_flags_t flags"
+.Fc
+.Sh INTERFACE LEVEL
+.Sy Volatile -
+illumos USB HCD private function
+.Pp
+This is a private function that is not part of the stable DDI. It may be
+removed or changed at any time.
+.Sh PARAMETERS
+.Bl -tag -width Fa
+.It Fa dip
+A pointer to the HCD driver's
+.Sy dev_info
+structure.
+.It Fa irqp
+A pointer to the USB interrupt request which will be duplicated.
+.It Fa size
+The number of bytes in the allocated data block
+.Sy mblk_t .
+.It Fa flags
+Flags which describe how allocations should be performed. Valid flags
+are:
+.Bl -tag -width Sy
+.It Sy USB_FLAGS_NOSLEEP
+Do not block waiting for memory. If memory is not available the allocation
+will fail.
+.It Sy USB_FLAGS_SLEEP
+Perform a blocking allocation. If memory is not available, the function
+will wait until memory is made available.
+.Pp
+Note, the request may still fail even if
+.Sy USB_FLAGS_SLEEP
+is specified.
+.El
+.El
+.Sh DESCRIPTION
+The
+.Fn usba_hcdi_dup_intr_req
+function is used to duplicate an existing interrupt request,
+.Fa irqp .
+.Pp
+The USBA framework initiates interrupt operations through the
+.Xr usba_hcdi_pipe_intr_xfer 9E
+entry point. It provides an initial USB interrupt request as an argument.
+When the HCD driver has interrupt data to return, it needs to duplicate
+that initial interrupt request each time that it submits data through
+the
+.Xr usba_hcdi_cb 9F
+function. In addition to duplicating the request, callers may also need
+to increase the pipe handle's request count. For more information, see
+.Xr usba_hcdi_pipe_intr_xfer 9E .
+.Pp
+The
+.Fa dip
+argument should correspond to the HCD driver's
+.Sy dev_info_t
+structure. The
+.Fa irqp
+pointer should correspond to the initial interrupt request. The
+.Fa size
+argument should describe the maximum amount of data needed for this
+request. The amount of data will be dependent on the endpoint and
+device. The value of
+.Fa flags
+should depend on the caller's context. If
+.Dv USB_FLAGS_SLEEP
+is passed while in interrupt context, then this function will fail.
+.Sh CONTEXT
+The
+.Fn usba_hcdi_dup_intr_req
+function may be called from
+.Sy user ,
+.Sy kernel ,
+or
+.Sy interrupt
+context; however, when in interrupt context, the value of
+.Fa flags
+must be
+.Sy USB_FLAGS_NOSLEEP .
+.Sh RETURN VALUES
+Upon successful completion, the
+.Fn usba_hcdi_dup_intr_req
+function returns a pointer to a duplicated interrupt request. Otherwise,
+.Sy NULL
+is returned to indicate that the request could not be duplicated.
+.Sh SEE ALSO
+.Xr usba_hcdi 9E ,
+.Xr usba_hcdi_pipe_intr_xfer 9E ,
+.Xr usba_hcdi_cb 9F
diff --git a/usr/src/man/man9f/usba_hcdi_dup_isoc_req.9f b/usr/src/man/man9f/usba_hcdi_dup_isoc_req.9f
new file mode 100644
index 0000000000..f8f881aa5b
--- /dev/null
+++ b/usr/src/man/man9f/usba_hcdi_dup_isoc_req.9f
@@ -0,0 +1,111 @@
+.\"
+.\" This file and its contents are supplied under the terms of the
+.\" Common Development and Distribution License ("CDDL"), version 1.0.
+.\" You may only use this file in accordance with the terms of version
+.\" 1.0 of the CDDL.
+.\"
+.\" A full copy of the text of the CDDL should have accompanied this
+.\" source. A copy of the CDDL is also available via the Internet at
+.\" http://www.illumos.org/license/CDDL.
+.\"
+.\"
+.\" Copyright 2016 Joyent, Inc.
+.\"
+.Dd Sep 16, 2016
+.Dt USBA_HCDI_DUP_ISOC_REQ 9F
+.Os
+.Sh NAME
+.Nm usba_hcdi_dup_isoc_req
+.Nd duplicate an isochronous request
+.Sh SYNOPSIS
+.In sys/usb/usba/hcdi.h
+.Ft "usb_isoc_req_t *"
+.Fo usba_hcdi_dup_isoc_req
+.Fa "dev_info_t *dip"
+.Fa "usb_isoc_req_t *usrp"
+.Fa "usb_flags_t flags"
+.Fc
+.Sh INTERFACE LEVEL
+.Sy Volatile -
+illumos USB HCD private function
+.Pp
+This is a private function that is not part of the stable DDI. It may be
+removed or changed at any time.
+.Sh PARAMETERS
+.Bl -tag -width Fa
+.It Fa dip
+A pointer to the HCD driver's
+.Sy dev_info
+structure.
+.It Fa usrp
+A pointer to the USB isochronous request which will be duplicated.
+.It Fa flags
+.Bl -tag -width Sy
+.It Sy USB_FLAGS_NOSLEEP
+Do not block waiting for memory. If memory is not available the allocation
+will fail.
+.It Sy USB_FLAGS_SLEEP
+Perform a blocking allocation. If memory is not available, the function
+will wait until memory is made available.
+.Pp
+Note, the request may still fail even if
+.Sy USB_FLAGS_SLEEP
+is specified.
+.El
+.El
+.Sh DESCRIPTION
+The
+.Fn usba_hcdi_dup_isoc_req
+function is used to duplicate an existing isochronous request,
+.Fa usrp .
+.Pp
+When the USBA framework initiates an isochronous in transfer with the
+.Xr usba_hcdi_pipe_isoc_xfer 9E
+entry point, it is the HCD driver's responsibility to receive the
+periodic data from the pipe. When there is data available, the HCD must
+duplicate the original isochronous request and copy the available data
+into the request structure's
+.Fa isoc_data
+member, before handing over the request structure to the USBA framework
+by calling the
+.Xr usba_hcdi_cb 9F
+function.
+.Pp
+In addition to duplicating the request, it is the callers responsibility
+to increase the pipe handle's request count. For more information, see
+.Xr usba_hcdi_pipe_isoc_xfer 9E .
+.Pp
+The
+.Fa dip
+argument should correspond to the HCD driver's
+.Sy dev_info_t
+structure. The
+.Fa usrp
+pointer should correspond to the initial isochronous request. The
+.Fa flags
+member must be appropriate for the context. If
+.Dv USB_FLAGS_SLEEP
+is passed while in interrupt context, then this function may fail.
+.Sh CONTEXT
+The
+.Fn usba_hcdi_dup_isoc_req
+function may be called from
+.Sy user ,
+.Sy kernel ,
+or
+.Sy interrupt
+context; however, when in interrupt context, the value of
+.Fa flags
+must be
+.Sy USB_FLAGS_NOSLEEP .
+.Sh RETURN VALUES
+Upon successful completion, the
+.Fn usba_hcdi_dup_isoc_req
+function returns a pointer to a duplicate isochronous request.
+Otherwise,
+.Sy NULL
+is returned to indicate that the request could not be duplicated.
+.Sh SEE ALSO
+.Xr usba_hcdi 9E ,
+.Xr usba_hcdi_pipe_isoc_xfer 9E ,
+.Xr usba_hcdi_cb 9F
diff --git a/usr/src/man/man9f/usba_hcdi_get_device_private.9f b/usr/src/man/man9f/usba_hcdi_get_device_private.9f
new file mode 100644
index 0000000000..05cf3b8ebe
--- /dev/null
+++ b/usr/src/man/man9f/usba_hcdi_get_device_private.9f
@@ -0,0 +1,66 @@
+.\"
+.\" This file and its contents are supplied under the terms of the
+.\" Common Development and Distribution License ("CDDL"), version 1.0.
+.\" You may only use this file in accordance with the terms of version
+.\" 1.0 of the CDDL.
+.\"
+.\" A full copy of the text of the CDDL should have accompanied this
+.\" source. A copy of the CDDL is also available via the Internet at
+.\" http://www.illumos.org/license/CDDL.
+.\"
+.\"
+.\" Copyright 2016 Joyent, Inc.
+.\"
+.Dd May 7, 2016
+.Dt USBA_HCDI_GET_DEVICE_PRIVATE 9F
+.Os
+.Sh NAME
+.Nm usba_hcdi_get_device_private
+.Nd get HCD per-device private value
+.Sh SYNOPSIS
+.In sys/usb/usba/hcdi.h
+.Ft void *
+.Fo usba_hcdi_get_device_private
+.Fa "usba_device_t *usb_device"
+.Fc
+.Sh INTERFACE LEVEL
+.Sy Volatile -
+illumos USB HCD private function
+.Pp
+This is a private function that is not part of the stable DDI. It may be
+removed or changed at any time.
+.Sh PARAMETERS
+.Bl -tag -width Fa
+.It Fa usb_device
+Pointer to a USB device.
+.El
+.Sh DESCRIPTION
+The
+.Fn usba_hcdi_get_device_private
+function obtains the private data set by a HCD driver. This private data
+is created by the HCD driver's optional entry point
+.Xr usba_hcdi_device_init 9E
+and is removed during the HCD driver's optional entry point
+.Xr usba_hcdi_device_fini 9E .
+If an HCD driver does not implement these entry points then the value
+obtained by a call will always be the null pointer,
+.Dv NULL .
+.Pp
+The framework provides no form of locking of this data and it is up to
+the HCD driver to use whatever synchronization primitives it requires if
+needed.
+.Sh CONTEXT
+The
+.Fn usba_hcdi_get_device_private
+function is generally called from the context of a
+.Xr usba_hcdi 9E
+entry point, but may be called from user, kernel, or interrupt context.
+.Sh RETURN VALUES
+The private data set by an HCD driver is always returned. If no such
+value has been set, then
+.Dv NULL
+is returned.
+.Sh SEE ALSO
+.Xr usba_hcdi 9E ,
+.Xr usba_hcdi_device_fini 9E ,
+.Xr usba_hcdi_device_init 9E
diff --git a/usr/src/man/man9f/usba_hcdi_register.9f b/usr/src/man/man9f/usba_hcdi_register.9f
new file mode 100644
index 0000000000..a2bdbdb97f
--- /dev/null
+++ b/usr/src/man/man9f/usba_hcdi_register.9f
@@ -0,0 +1,112 @@
+.\"
+.\" This file and its contents are supplied under the terms of the
+.\" Common Development and Distribution License ("CDDL"), version 1.0.
+.\" You may only use this file in accordance with the terms of version
+.\" 1.0 of the CDDL.
+.\"
+.\" A full copy of the text of the CDDL should have accompanied this
+.\" source. A copy of the CDDL is also available via the Internet at
+.\" http://www.illumos.org/license/CDDL.
+.\"
+.\"
+.\" Copyright 2016 Joyent, Inc.
+.\"
+.Dd Sep 16, 2016
+.Dt USBA_HCDI_REGISTER 9F
+.Os
+.Sh NAME
+.Nm usba_hcdi_register ,
+.Nm usba_hcdi_unregister
+.Nd register and unregister HCD driver
+.Sh SYNOPSIS
+.In sys/usb/usba/hcdi.h
+.Ft int
+.Fo usba_hcdi_register
+.Fa "usba_hcdi_register_args_t *args"
+.Fa "uint_t flags"
+.Fc
+.Ft void
+.Fo usba_hcdi_unregister
+.Fa "dev_info_t *dip"
+.Fc
+.Sh INTERFACE LEVEL
+.Sy Volatile -
+illumos USB HCD private function
+.Pp
+This is a private function that is not part of the stable DDI. It may be
+removed or changed at any time.
+.Sh PARAMETERS
+.Bl -tag -width Fa
+.It Fa args
+A pointer to a filled out registration structure. See
+.Xr usba_hcdi_register_args_t 9S
+for the members to fill in.
+.It Fa flags
+Should be set to
+.Sy 0 .
+.It Fa dip
+Pointer to the device's
+.Sy dev_info
+structure.
+.El
+.Sh DESCRIPTION
+The
+.Fn usba_hcdi_register
+and
+.Fn usba_hcdi_unregister
+functions are used to register and unregister a USB HCDI driver from the
+USBA framework.
+.Pp
+The
+.Fn usba_hcdi_register
+function is called during a device driver's
+.Xr attach 9E
+entry point after it has finished initializing the device. After this
+function successfuly returns, device drivers should assume that the
+.Xr usba_hcdi_ops 9S
+functions may be called at any time.
+.Pp
+The
+.Fn usba_hcdi_unregister
+function should be called during a driver's
+.Xr detach 9E
+entry point after it has unbound its root hub, but before the remainder
+of the device's state is torn down. After calling the
+.Fn usba_hcdi_unregister
+function, the driver will receive no more function calls to its
+.Xr usba_hcdi_ops 9S
+entry points.
+.Pp
+For more information on the initialization and finalization path of a
+USB HCD driver, see
+.Xr usba_hcdi 9E .
+.Sh CONTEXT
+The
+.Fn usba_hcdi_register
+function should only be called from a driver's
+.Xr attach 9E
+entry point.
+.Pp
+The
+.Fn usba_hcdi_unregister
+function should only be called frm a driver's
+.Xr detach 9E
+entry point.
+.Sh RETURN VALUES
+Upon successful completion, the
+.Fn usba_hcdi_register
+function returns
+.Sy USB_SUCCESS .
+Otherwise
+.Sy USB_FAILURE
+is returned to indicate that the device was not registered.
+.Pp
+The
+.Fn usba_hcdi_unregister
+function does not define any return values and always succeeds.
+.Sh SEE ALSO
+.Xr attach 9E ,
+.Xr detach 9E ,
+.Xr usba_hcdi 9E ,
+.Xr usba_hcdi_ops 9S ,
+.Xr usba_hcdi_register_args_t 9S
diff --git a/usr/src/man/man9f/usba_hubdi_bind_root_hub.9f b/usr/src/man/man9f/usba_hubdi_bind_root_hub.9f
new file mode 100644
index 0000000000..03b3b4a1a5
--- /dev/null
+++ b/usr/src/man/man9f/usba_hubdi_bind_root_hub.9f
@@ -0,0 +1,137 @@
+.\"
+.\" This file and its contents are supplied under the terms of the
+.\" Common Development and Distribution License ("CDDL"), version 1.0.
+.\" You may only use this file in accordance with the terms of version
+.\" 1.0 of the CDDL.
+.\"
+.\" A full copy of the text of the CDDL should have accompanied this
+.\" source. A copy of the CDDL is also available via the Internet at
+.\" http://www.illumos.org/license/CDDL.
+.\"
+.\"
+.\" Copyright 2016 Joyent, Inc.
+.\"
+.Dd Sep 16, 2016
+.Dt USBA_HCDI_BIND_ROOT_HUB 9F
+.Os
+.Sh NAME
+.Nm usba_hubdi_bind_root_hub ,
+.Nm usba_hubdi_unbind_root_hub
+.Nd bind and unbind the root USB hub
+.Sh SYNOPSIS
+.In sys/usb/usba/hubdi.h
+.Ft int
+.Fo usba_hubdi_bind_root_hub
+.Fa "dev_info_t *dip"
+.Fa "uchar_t *hub_descr"
+.Fa "size_t descr_len"
+.Fa "usb_dev_descr_t *dev_descr"
+.Fc
+.Ft int
+.Fo usba_hubdi_unbind_root_hub
+.Fa "dev_info_t *dip"
+.Fc
+.Sh INTERFACE LEVEL
+.Sy Volatile -
+illumos USB HCD private function
+.Pp
+This is a private function that is not part of the stable DDI. It may be
+removed or changed at any time.
+.Sh PARAMETERS
+.Bl -tag -width Fa
+.It Fa dip
+Pointer to the device's
+.Sy dev_info
+structure.
+.It Fa hub_descr
+Pointer to a byte array that contains the standard descriptors for a USB
+Hub device.
+.It Fa descr_len
+The length in bytes of the
+.Fa hub_descr
+byte array.
+.It Fa dev_descr
+A filled in standard USB device descriptor.
+.El
+.Sh DESCRIPTION
+The
+.Fn usba_hubdi_bind_root_hub
+and
+.Fn usba_hubdi_unbind_root_hub
+functions are used to bind and unbind the root USB hub that is a part of
+every HCD driver. See
+.Xr usba_hcdi 9E
+for more information on this relationship.
+.Pp
+The
+.Fn usba_hubdi_root_bind_driver
+is used after calling the
+.Xr usba_hcdi_register 9F
+function during a device's
+.Xr attach 9E
+entry point.
+.Pp
+Because the root hub is generally a virtual hub, the HCD driver is
+responsible for making it appear to the system as a normal USB hub.
+.Pp
+The contents of the
+.Fa hub_descr
+should be the standard USB Hub class-specific descriptor. This hub
+descriptor should match a hub of a similar class of speed. For example,
+with the xhci controller, a USB 3.x Hub class-specific descriptor is
+used, where as for the ehci controller, a USB 2.x Hub class-specific
+descriptor is used. For more information, see the USB 3.1
+specification, section 10.15.2
+.Em Class-specific Descriptors .
+.Pp
+Similarly, the contents of the
+.Fa dev_descr
+need to be a filled in USB device descriptor that indicates that the
+root hub corresponds to the appropriate USB generation. For more
+information on the contents, see
+.Xr usb_dev_descr 9S
+and the USB 3.1 specification, section 10.15.1
+.Em Standard Descriptors for Hub Class .
+.Pp
+The
+.Fn usba_hubdi_unbind_root_hub
+function is used to detach the root hub associated with the HCD driver.
+This should be called during a device's
+.Xr detach 9E
+routine before calling
+.Xr usba_hcdi_unregister .
+.Pp
+If a call to the
+.Fn usba_hubdi_unbind_root_hub
+function fails during a device's
+.Xr detach 9E
+function, then it should fail the call to
+.Xr detach 9E .
+.Sh CONTEXT
+The
+.Fn usba_hubdi_bind_root_hub
+function should only be called during a device's
+.Xr attach 9E
+entry point.
+.Pp
+The
+.Fn usba_hubdi_unbind_root_hub
+function should only be called during a device's
+.Xr detach 9E entry point.
+.Sh RETURN VALUES
+Upon successful completion, the
+.Fn usba_hubdi_bind_root_hub
+and
+.Fn usba_hubdi_unbind_root_hub
+functions return
+.Sy USB_SUCCESS .
+Otherwise, they return
+.Sy USB_FAILURE
+to indicate that they could not proceed.
+.Sh SEE ALSO
+.Xr attach 9E ,
+.Xr detach 9E ,
+.Xr usba_hcdi 9E ,
+.Xr usba_hcdi_register 9F ,
+.Xr usba_hcdi_unregister 9F ,
+.Xr usb_dev_Descr 9S
diff --git a/usr/src/man/man9f/usba_hubdi_cb_ops.9f b/usr/src/man/man9f/usba_hubdi_cb_ops.9f
new file mode 100644
index 0000000000..196874ad8f
--- /dev/null
+++ b/usr/src/man/man9f/usba_hubdi_cb_ops.9f
@@ -0,0 +1,109 @@
+.\"
+.\" This file and its contents are supplied under the terms of the
+.\" Common Development and Distribution License ("CDDL"), version 1.0.
+.\" You may only use this file in accordance with the terms of version
+.\" 1.0 of the CDDL.
+.\"
+.\" A full copy of the text of the CDDL should have accompanied this
+.\" source. A copy of the CDDL is also available via the Internet at
+.\" http://www.illumos.org/license/CDDL.
+.\"
+.\"
+.\" Copyright 2016 Joyent, Inc.
+.\"
+.Dd May 7, 2016
+.Dt USBA_HCDI_CB_OPS 9F
+.Os
+.Sh NAME
+.Nm usba_hubdi_cb_ops ,
+.Nm usba_hubdi_open ,
+.Nm usba_hubdi_ioctl ,
+.Nm usba_hubdi_close
+.Nd character device utility functions for HCD drivers
+.Sh SYNOPSIS
+.In sys/usb/usba/hubdi.h
+.Ft int
+.Fo usba_hubdi_open
+.Fa "dev_info_t *dip"
+.Fa "dev_t *devp"
+.Fa "int flag"
+.Fa "int otyp"
+.Fa "cred_t *cred_p"
+.Fc
+.Ft int
+.Fo usba_hubdi_ioctl
+.Fa "dev_info_t *dip"
+.Fa "dev_t dev"
+.Fa "int flag"
+.Fa "intptr_t arg"
+.Fa "int mode"
+.Fa "cred_t *cred_pp"
+.Fa "int *rval_p"
+.Fc
+.Ft int
+.Fo usba_hubdi_close
+.Fa "dev_info_t *dip"
+.Fa "dev_t dev"
+.Fa "int flag"
+.Fa "int otyp"
+.Fa "cred_t *cred_p"
+.Fc
+.Sh INTERFACE LEVEL
+.Sy Volatile -
+illumos USB HCD private function
+.Pp
+This is a private function that is not part of the stable DDI. It may be
+removed or changed at any time.
+.Sh PARAMATERS
+.Bl -tag -width Fa
+.It Fa dip
+Pointer to the device's
+.Sy dev_info
+structure.
+.El
+.Pp
+All other parameters are the same as the ones described and discussed in
+.Xr open 9E ,
+.Xr ioctl 9E ,
+and
+.Xr close 9E .
+.Sh DESCRIPTION
+The
+.Fn usba_hubdi_open ,
+.Fn usba_hubdi_ioctl ,
+and
+.Fn usba_hubdi_close
+functions are functions provided for the implementation of USB HCD
+drivers. USB HCD drivers are required to implemnt the
+.Xr open 9E ,
+.Xr ioctl 9E ,
+and
+.Xr close 9E
+.Xr cb_ops 9S
+functions. In each of those functions, they should use the device number
+to determine number in
+.Fa devp
+or
+.Fa dev
+to determine the device's corresponding
+.Sy dev_info_t .
+The USB HCD driver's entry points should then call the corresponding
+function described above, passing all the arguments they received
+unmodified.
+.Pp
+The USB HCD driver's entry points should return the value returned by
+the call to the corresponding USBA function.
+.Sh CONTEXT
+These functions should only be called from the context of a USB HCD
+driver's
+.Xr open 9E ,
+.Xr ioctl 9E ,
+and
+.Xr close 9E
+entry points.
+.Sh SEE ALSO
+.Xr close 9E ,
+.Xr ioctl 9E ,
+.Xr open 9E ,
+.Xr usb_hcdi 9E ,
+.Xr cb_ops 9S
diff --git a/usr/src/man/man9f/usba_hubdi_dev_ops.9f b/usr/src/man/man9f/usba_hubdi_dev_ops.9f
new file mode 100644
index 0000000000..a0a9530e8e
--- /dev/null
+++ b/usr/src/man/man9f/usba_hubdi_dev_ops.9f
@@ -0,0 +1,66 @@
+.\"
+.\" This file and its contents are supplied under the terms of the
+.\" Common Development and Distribution License ("CDDL"), version 1.0.
+.\" You may only use this file in accordance with the terms of version
+.\" 1.0 of the CDDL.
+.\"
+.\" A full copy of the text of the CDDL should have accompanied this
+.\" source. A copy of the CDDL is also available via the Internet at
+.\" http://www.illumos.org/license/CDDL.
+.\"
+.\"
+.\" Copyright 2016 Joyent, Inc.
+.\"
+.Dd Sep 16, 2016
+.Dt USBA_HCDI_DEV_OPS 9F
+.Os
+.Sh NAME
+.Nm usba_hubdi_bus_ops
+.Nm usba_hubdi_root_hub_power
+.Nd device operations utility functions for HCD drivers
+.Sh SYNOPSIS
+.Ft int
+.Fo usba_hubdi_root_hub_power
+.Fa "dev_info_t *dip"
+.Fa "int component"
+.Fa "int level"
+.Fc
+.Sh INTERFACE LEVEL
+.Sy Volatile -
+illumos USB HCD private function
+.Pp
+This is a private function that is not part of the stable DDI. It may be
+removed or changed at any time.
+.Sh PARAMETERS
+For the parameters of the
+.Fn usba_hubdi_root_hub_power
+function, see
+.Xr power 9E .
+.Sh DESCRIPTION
+The
+.Fn usba_hubdi_root_hub_power
+function is a utility function for the implementation of USB HCD
+drivers. USB HCD drivers that support power management, should use set
+the
+.Sy devo_power
+member of their
+.Xr dev_ops 9S
+structure to the
+.Fn usba_hubdi_root_hub_power
+function. They should not implement their own
+.Xr power 9E
+function.
+.Pp
+In addition, drivers should pass the symbol
+.Sy usba_hubdi_busops
+as the
+.Sy devo_bus_ops
+member. It contains a properly formatted bus operations structure.
+.Sh CONTEXT
+This function should not be called directly, it should only be used as a
+member of a device's
+.Xr dev_ops 9S
+structure.
+.Sh SEE ALSO
+.Xr power 9E ,
+.Xr dev_ops 9S