Changeset 3515533 in mainline
- Timestamp:
- 2010-12-17T22:07:41Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 18e35a7
- Parents:
- 6b5f3b0
- Location:
- uspace
- Files:
-
- 12 added
- 5 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/uhci/Makefile
r6b5f3b0 r3515533 33 33 34 34 SOURCES = \ 35 iface.c \ 35 36 main.c \ 36 transfers.c 37 root_hub/port_status.c \ 38 root_hub/root_hub.c \ 39 uhci.c 37 40 38 41 include $(USPACE_PREFIX)/Makefile.common -
uspace/drv/uhci/iface.c
r6b5f3b0 r3515533 29 29 #include <errno.h> 30 30 31 #include "iface.h" 31 32 #include "uhci.h" 32 33 /* 33 34 static int enqueue_transfer_out(device_t *dev, 34 35 usb_target_t target, usb_transfer_type_t transfer_type, … … 69 70 return ENOTSUP; 70 71 } 71 72 */ 72 73 73 74 static int get_address(device_t *dev, devman_handle_t handle, … … 76 77 return ENOTSUP; 77 78 } 78 79 /*----------------------------------------------------------------------------*/ 79 80 static int interrupt_out(device_t *dev, usb_target_t target, 80 81 void *data, size_t size, 81 82 usbhc_iface_transfer_out_callback_t callback, void *arg) 82 83 { 83 return enqueue_transfer_out(dev, target, USB_TRANSFER_INTERRUPT, 84 data, size, 85 callback, arg); 84 return uhci_out(dev, target, USB_TRANSFER_INTERRUPT, 85 data, size, callback, arg); 86 86 } 87 87 /*----------------------------------------------------------------------------*/ 88 88 static int interrupt_in(device_t *dev, usb_target_t target, 89 89 void *data, size_t size, 90 90 usbhc_iface_transfer_in_callback_t callback, void *arg) 91 91 { 92 return enqueue_transfer_in(dev, target, USB_TRANSFER_INTERRUPT, 93 data, size, 94 callback, arg); 92 return uhci_in(dev, target, USB_TRANSFER_INTERRUPT, 93 data, size, callback, arg); 95 94 } 96 95 /*----------------------------------------------------------------------------*/ 97 96 static int control_write_setup(device_t *dev, usb_target_t target, 98 97 void *data, size_t size, 99 98 usbhc_iface_transfer_out_callback_t callback, void *arg) 100 99 { 101 return enqueue_transfer_setup(dev, target, USB_TRANSFER_CONTROL, 102 data, size, 103 callback, arg); 100 return uhci_setup(dev, target, USB_TRANSFER_CONTROL, 101 data, size, callback, arg); 104 102 } 105 103 /*----------------------------------------------------------------------------*/ 106 104 static int control_write_data(device_t *dev, usb_target_t target, 107 105 void *data, size_t size, 108 106 usbhc_iface_transfer_out_callback_t callback, void *arg) 109 107 { 110 return enqueue_transfer_out(dev, target, USB_TRANSFER_CONTROL, 111 data, size, 112 callback, arg); 108 return uhci_out(dev, target, USB_TRANSFER_CONTROL, 109 data, size, callback, arg); 113 110 } 114 111 /*----------------------------------------------------------------------------*/ 115 112 static int control_write_status(device_t *dev, usb_target_t target, 116 113 usbhc_iface_transfer_in_callback_t callback, void *arg) 117 114 { 118 return enqueue_transfer_in(dev, target, USB_TRANSFER_CONTROL, 119 NULL, 0, 120 callback, arg); 115 return uhci_in(dev, target, USB_TRANSFER_CONTROL, 116 NULL, 0, callback, arg); 121 117 } 122 118 /*----------------------------------------------------------------------------*/ 123 119 static int control_read_setup(device_t *dev, usb_target_t target, 124 120 void *data, size_t size, 125 121 usbhc_iface_transfer_out_callback_t callback, void *arg) 126 122 { 127 return enqueue_transfer_setup(dev, target, USB_TRANSFER_CONTROL, 128 data, size, 129 callback, arg); 123 return uhci_setup(dev, target, USB_TRANSFER_CONTROL, 124 data, size, callback, arg); 130 125 } 131 126 /*----------------------------------------------------------------------------*/ 132 127 static int control_read_data(device_t *dev, usb_target_t target, 133 128 void *data, size_t size, 134 129 usbhc_iface_transfer_in_callback_t callback, void *arg) 135 130 { 136 return enqueue_transfer_in(dev, target, USB_TRANSFER_CONTROL, 137 data, size, 138 callback, arg); 131 return uhci_in(dev, target, USB_TRANSFER_CONTROL, 132 data, size, callback, arg); 139 133 } 140 134 /*----------------------------------------------------------------------------*/ 141 135 static int control_read_status(device_t *dev, usb_target_t target, 142 136 usbhc_iface_transfer_out_callback_t callback, void *arg) 143 137 { 144 return enqueue_transfer_out(dev, target, USB_TRANSFER_CONTROL, 145 NULL, 0, 146 callback, arg); 138 return uhci_out(dev, target, USB_TRANSFER_CONTROL, 139 NULL, 0, callback, arg); 147 140 } 148 141 … … 150 143 usbhc_iface_t uhci_iface = { 151 144 .tell_address = get_address, 145 146 .reserve_default_address = NULL, 147 .release_default_address = NULL, 148 .request_address = NULL, 149 .bind_address = NULL, 150 .release_address = NULL, 151 152 152 .interrupt_out = interrupt_out, 153 153 .interrupt_in = interrupt_in, 154 154 155 .control_write_setup = control_write_setup, 155 156 .control_write_data = control_write_data, 156 157 .control_write_status = control_write_status, 158 157 159 .control_read_setup = control_read_setup, 158 160 .control_read_data = control_read_data, -
uspace/drv/uhci/main.c
r6b5f3b0 r3515533 1 1 /* 2 * Copyright (c) 2010 Vojtech Horky 2 * Copyright (c) 2010 Vojtech Horky, Jan Vesely 3 3 * All rights reserved. 4 4 * … … 29 29 #include <usb/debug.h> 30 30 #include <errno.h> 31 #include <driver.h> 31 32 #include "iface.h" 33 #include "name.h" 32 34 #include "uhci.h" 35 33 36 34 37 static device_ops_t uhci_ops = { … … 41 44 device->ops = &uhci_ops; 42 45 46 uhci_init( device, (void*)0xc020 ); 47 43 48 /* 44 49 * We need to announce the presence of our root hub. 45 50 */ 46 usb_dprintf(NAME, 2, "adding root hub\n");47 usb_hcd_add_root_hub(device);51 // usb_dprintf(NAME, 2, "adding root hub\n"); 52 // usb_hcd_add_root_hub(device); 48 53 49 54 return EOK; … … 64 69 * Do some global initializations. 65 70 */ 66 sleep( 5);71 sleep( 5); 67 72 usb_dprintf_enable(NAME, 5); 68 73 -
uspace/drv/uhci/uhci.h
r6b5f3b0 r3515533 1 1 /* 2 * Copyright (c) 2010 Vojtech Horky2 * Copyright (c) 2010 Jan Vesely 3 3 * All rights reserved. 4 4 * … … 26 26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 27 */ 28 29 28 /** @addtogroup usb 30 29 * @{ … … 36 35 #define DRV_UHCI_UHCI_H 37 36 37 #include <fibril.h> 38 39 #include <usb/addrkeep.h> 40 #include <usb/hcdhubd.h> 38 41 #include <usbhc_iface.h> 39 42 40 # define NAME "uhci"43 #include "root_hub/root_hub.h" 41 44 42 usbhc_iface_t uhci_iface; 45 typedef struct uhci_regs { 46 uint16_t usbcmd; 47 uint16_t usbsts; 48 uint16_t usbintr; 49 uint16_t frnum; 50 uint32_t flbaseadd; 51 uint8_t sofmod; 52 } regs_t; 53 54 typedef struct uhci { 55 usb_address_keeping_t address_manager; 56 uhci_root_hub_t root_hub; 57 volatile regs_t* registers; 58 59 } uhci_t ; 60 61 /* init uhci specifics in device.driver_data */ 62 int uhci_init( device_t *device, void *regs ); 63 64 int uhci_destroy( device_t *device ); 65 66 int uhci_in( 67 device_t *dev, 68 usb_target_t target, 69 usb_transfer_type_t transfer_type, 70 void *buffer, size_t size, 71 usbhc_iface_transfer_in_callback_t callback, void *arg 72 ); 73 74 int uhci_out( 75 device_t *dev, 76 usb_target_t target, 77 usb_transfer_type_t transfer_type, 78 void *buffer, size_t size, 79 usbhc_iface_transfer_out_callback_t callback, void *arg 80 ); 81 82 int uhci_setup( 83 device_t *dev, 84 usb_target_t target, 85 usb_transfer_type_t transfer_type, 86 void *buffer, size_t size, 87 usbhc_iface_transfer_out_callback_t callback, void *arg 88 ); 43 89 44 90 #endif -
uspace/lib/usb/include/usb/hcd.h
-
Property mode
changed from
100644
to120000
r6b5f3b0 r3515533 1 /* 2 * Copyright (c) 2010 Vojtech Horky 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 29 /** @addtogroup libusb usb 30 * @{ 31 */ 32 /** @file 33 * @brief HC driver. 34 */ 35 #ifndef LIBUSB_HCD_H_ 36 #define LIBUSB_HCD_H_ 37 38 #include <usb/usb.h> 39 #include <fibril_synch.h> 40 #include <devman.h> 41 42 /** Info about used address. */ 43 typedef struct { 44 /** Linked list member. */ 45 link_t link; 46 /** Address. */ 47 usb_address_t address; 48 /** Corresponding devman handle. */ 49 devman_handle_t devman_handle; 50 } usb_address_keeping_used_t; 51 52 /** Structure for keeping track of free and used USB addresses. */ 53 typedef struct { 54 /** Head of list of used addresses. */ 55 link_t used_addresses; 56 /** Upper bound for USB addresses. */ 57 usb_address_t max_address; 58 /** Mutex protecting used address. */ 59 fibril_mutex_t used_addresses_guard; 60 /** Condition variable for used addresses. */ 61 fibril_condvar_t used_addresses_condvar; 62 63 /** Condition variable mutex for default address. */ 64 fibril_mutex_t default_condvar_guard; 65 /** Condition variable for default address. */ 66 fibril_condvar_t default_condvar; 67 /** Whether is default address available. */ 68 bool default_available; 69 } usb_address_keeping_t; 70 71 void usb_address_keeping_init(usb_address_keeping_t *, usb_address_t); 72 73 void usb_address_keeping_reserve_default(usb_address_keeping_t *); 74 void usb_address_keeping_release_default(usb_address_keeping_t *); 75 76 usb_address_t usb_address_keeping_request(usb_address_keeping_t *); 77 int usb_address_keeping_release(usb_address_keeping_t *, usb_address_t); 78 void usb_address_keeping_devman_bind(usb_address_keeping_t *, usb_address_t, 79 devman_handle_t); 80 usb_address_t usb_address_keeping_find(usb_address_keeping_t *, 81 devman_handle_t); 82 83 84 #endif 1 addrkeep.h -
Property mode
changed from
-
uspace/lib/usb/src/addrkeep.c
r6b5f3b0 r3515533 33 33 * @brief Address keeping. 34 34 */ 35 #include <usb/ hcd.h>35 #include <usb/addrkeep.h> 36 36 #include <errno.h> 37 37 #include <assert.h>
Note:
See TracChangeset
for help on using the changeset viewer.