usb_hub.h revision 190734
1138627Stakawata/* $FreeBSD: head/sys/dev/usb/usb_hub.h 190734 2009-04-05 18:20:38Z thompsa $ */ 2138627Stakawata/*- 3138627Stakawata * Copyright (c) 2008 Hans Petter Selasky. All rights reserved. 4138627Stakawata * 5138627Stakawata * Redistribution and use in source and binary forms, with or without 6138627Stakawata * modification, are permitted provided that the following conditions 7138627Stakawata * are met: 8138627Stakawata * 1. Redistributions of source code must retain the above copyright 9138627Stakawata * notice, this list of conditions and the following disclaimer. 10138627Stakawata * 2. Redistributions in binary form must reproduce the above copyright 11138627Stakawata * notice, this list of conditions and the following disclaimer in the 12138627Stakawata * documentation and/or other materials provided with the distribution. 13138627Stakawata * 14138627Stakawata * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15138627Stakawata * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16138627Stakawata * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17138627Stakawata * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18138627Stakawata * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19138627Stakawata * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20138627Stakawata * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21138627Stakawata * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22138627Stakawata * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23138627Stakawata * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24138627Stakawata * SUCH DAMAGE. 25138627Stakawata */ 26138627Stakawata 27138627Stakawata#ifndef _USB2_HUB_H_ 28138627Stakawata#define _USB2_HUB_H_ 29138627Stakawata 30138627Stakawata/* 31138627Stakawata * The following structure defines an USB port. 32138627Stakawata */ 33138627Stakawatastruct usb2_port { 34138627Stakawata uint8_t restartcnt; 35138627Stakawata#define USB_RESTART_MAX 5 36138627Stakawata uint8_t device_index; /* zero means not valid */ 37138627Stakawata uint8_t usb2_mode:1; /* current USB mode */ 38138627Stakawata uint8_t unused:7; 39138627Stakawata}; 40138627Stakawata 41138825Snjl/* 42138774Sscottl * The following structure defines how many bytes are 43138774Sscottl * left in an 1ms USB time slot. 44138627Stakawata */ 45138627Stakawatastruct usb2_fs_isoc_schedule { 46138627Stakawata uint16_t total_bytes; 47138627Stakawata uint8_t frame_bytes; 48138627Stakawata uint8_t frame_slot; 49138627Stakawata}; 50138627Stakawata 51138627Stakawata/* 52138627Stakawata * The following structure defines an USB HUB. 53138627Stakawata */ 54138627Stakawatastruct usb2_hub { 55138627Stakawata#if USB_HAVE_TT_SUPPORT 56138627Stakawata struct usb2_fs_isoc_schedule fs_isoc_schedule[USB_ISOC_TIME_MAX]; 57138627Stakawata#endif 58138627Stakawata struct usb2_device *hubudev; /* the HUB device */ 59138627Stakawata usb2_error_t (*explore) (struct usb2_device *hub); 60138627Stakawata void *hubsoftc; 61138627Stakawata usb2_size_t uframe_usage[USB_HS_MICRO_FRAMES_MAX]; 62138627Stakawata uint16_t portpower; /* mA per USB port */ 63138627Stakawata uint8_t isoc_last_time; 64138627Stakawata uint8_t nports; 65138627Stakawata struct usb2_port ports[0]; 66138627Stakawata}; 67138627Stakawata 68138627Stakawata/* function prototypes */ 69138627Stakawata 70138627Stakawatauint8_t usb2_intr_schedule_adjust(struct usb2_device *udev, int16_t len, 71138627Stakawata uint8_t slot); 72138627Stakawatavoid usb2_fs_isoc_schedule_init_all(struct usb2_fs_isoc_schedule *fss); 73138627Stakawatavoid usb2_bus_port_set_device(struct usb2_bus *bus, struct usb2_port *up, 74138627Stakawata struct usb2_device *udev, uint8_t device_index); 75138627Stakawatastruct usb2_device *usb2_bus_port_get_device(struct usb2_bus *bus, 76138627Stakawata struct usb2_port *up); 77138627Stakawatavoid usb2_needs_explore(struct usb2_bus *bus, uint8_t do_probe); 78138627Stakawatavoid usb2_needs_explore_all(void); 79138627Stakawatavoid usb2_bus_power_update(struct usb2_bus *bus); 80138627Stakawatavoid usb2_bus_powerd(struct usb2_bus *bus); 81138627Stakawata 82138627Stakawata#endif /* _USB2_HUB_H_ */ 83138627Stakawata