Changeset d93ff502 in mainline
- Timestamp:
- 2011-01-28T14:59:50Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 10f479ae
- Parents:
- de0e6b3
- Location:
- uspace/drv/uhci
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/uhci/iface.c
rde0e6b3 rd93ff502 31 31 #include "iface.h" 32 32 #include "uhci.h" 33 /*34 static int enqueue_transfer_out(device_t *dev,35 usb_target_t target, usb_transfer_type_t transfer_type,36 void *buffer, size_t size,37 usbhc_iface_transfer_out_callback_t callback, void *arg)38 {39 printf(NAME ": transfer OUT [%d.%d (%s); %zu]\n",40 target.address, target.endpoint,41 usb_str_transfer_type(transfer_type),42 size);43 44 return ENOTSUP;45 }46 47 static int enqueue_transfer_setup(device_t *dev,48 usb_target_t target, usb_transfer_type_t transfer_type,49 void *buffer, size_t size,50 usbhc_iface_transfer_out_callback_t callback, void *arg)51 {52 printf(NAME ": transfer SETUP [%d.%d (%s); %zu]\n",53 target.address, target.endpoint,54 usb_str_transfer_type(transfer_type),55 size);56 57 return ENOTSUP;58 }59 60 static int enqueue_transfer_in(device_t *dev,61 usb_target_t target, usb_transfer_type_t transfer_type,62 void *buffer, size_t size,63 usbhc_iface_transfer_in_callback_t callback, void *arg)64 {65 printf(NAME ": transfer IN [%d.%d (%s); %zu]\n",66 target.address, target.endpoint,67 usb_str_transfer_type(transfer_type),68 size);69 70 return ENOTSUP;71 }72 */73 33 74 34 static int get_address(device_t *dev, devman_handle_t handle, … … 82 42 usbhc_iface_transfer_out_callback_t callback, void *arg) 83 43 { 84 return uhci_ out(dev, target, USB_TRANSFER_INTERRUPT,85 data, size, callback, arg);44 return uhci_transfer(dev, target, USB_TRANSFER_INTERRUPT, 0, USB_PID_OUT, 45 data, size, callback, NULL, arg); 86 46 } 87 47 /*----------------------------------------------------------------------------*/ … … 90 50 usbhc_iface_transfer_in_callback_t callback, void *arg) 91 51 { 92 return uhci_ in(dev, target, USB_TRANSFER_INTERRUPT,93 data, size, callback, arg);52 return uhci_transfer(dev, target, USB_TRANSFER_INTERRUPT, 0, USB_PID_IN, 53 data, size, NULL, callback, arg); 94 54 } 95 55 /*----------------------------------------------------------------------------*/ … … 98 58 usbhc_iface_transfer_out_callback_t callback, void *arg) 99 59 { 100 return uhci_ setup(dev, target, USB_TRANSFER_CONTROL,101 data, size, callback, arg);60 return uhci_transfer(dev, target, USB_TRANSFER_CONTROL, 0, USB_PID_SETUP, 61 data, size, callback, NULL, arg); 102 62 } 103 63 /*----------------------------------------------------------------------------*/ … … 106 66 usbhc_iface_transfer_out_callback_t callback, void *arg) 107 67 { 108 return uhci_ out(dev, target, USB_TRANSFER_CONTROL,109 data, size, callback, arg);68 return uhci_transfer(dev, target, USB_TRANSFER_CONTROL, 1, USB_PID_OUT, 69 data, size, callback, NULL, arg); 110 70 } 111 71 /*----------------------------------------------------------------------------*/ … … 113 73 usbhc_iface_transfer_in_callback_t callback, void *arg) 114 74 { 115 return uhci_ in(dev, target, USB_TRANSFER_CONTROL,116 NULL, 0, callback, arg);75 return uhci_transfer(dev, target, USB_TRANSFER_CONTROL, 0, USB_PID_IN, 76 NULL, 0, NULL, callback, arg); 117 77 } 118 78 /*----------------------------------------------------------------------------*/ … … 121 81 usbhc_iface_transfer_out_callback_t callback, void *arg) 122 82 { 123 return uhci_ setup(dev, target, USB_TRANSFER_CONTROL,124 data, size, callback, arg);83 return uhci_transfer(dev, target, USB_TRANSFER_CONTROL, 0, USB_PID_SETUP, 84 data, size, callback, NULL, arg); 125 85 } 126 86 /*----------------------------------------------------------------------------*/ … … 129 89 usbhc_iface_transfer_in_callback_t callback, void *arg) 130 90 { 131 return uhci_ in(dev, target, USB_TRANSFER_CONTROL,132 data, size, callback, arg);91 return uhci_transfer(dev, target, USB_TRANSFER_CONTROL, 1, USB_PID_IN, 92 data, size, NULL, callback, arg); 133 93 } 134 94 /*----------------------------------------------------------------------------*/ … … 136 96 usbhc_iface_transfer_out_callback_t callback, void *arg) 137 97 { 138 return uhci_ out(dev, target, USB_TRANSFER_CONTROL,139 NULL, 0, callback, arg);98 return uhci_transfer(dev, target, USB_TRANSFER_CONTROL, 0, USB_PID_OUT, 99 NULL, 0, callback, NULL, arg); 140 100 } 141 101 -
uspace/drv/uhci/uhci.c
rde0e6b3 rd93ff502 11 11 static int uhci_init_transfer_lists(transfer_list_t list[]); 12 12 static int uhci_clean_finished(void *arg); 13 static inline int uhci_add_transfer(14 device_t *dev,15 usb_target_t target,16 usb_transfer_type_t transfer_type,17 usb_packet_id pid,18 void *buffer, size_t size,19 usbhc_iface_transfer_out_callback_t callback_out,20 usbhc_iface_transfer_in_callback_t callback_in,21 void *arg );22 13 23 14 int uhci_init(device_t *device, void *regs) … … 36 27 37 28 /* create instance */ 38 uhci_t *instance = malloc( sizeof(uhci_t));29 uhci_t *instance = malloc(sizeof(uhci_t)); 39 30 int ret = instance ? EOK : ENOMEM; 40 31 CHECK_RET_FREE_INSTANCE("Failed to allocate uhci driver instance.\n"); … … 44 35 /* init address keeper(libusb) */ 45 36 usb_address_keeping_init(&instance->address_manager, USB11_ADDRESS_MAX); 37 uhci_print_verbose("Initialized address manager.\n"); 46 38 47 39 /* allow access to hc control registers */ … … 50 42 CHECK_RET_FREE_INSTANCE("Failed to gain access to registers at %p.\n", io); 51 43 instance->registers = io; 44 uhci_print_verbose("Device registers accessible.\n"); 52 45 53 46 /* init transfer lists */ 54 47 ret = uhci_init_transfer_lists(instance->transfers); 55 48 CHECK_RET_FREE_INSTANCE("Failed to initialize transfer lists.\n"); 49 uhci_print_verbose("Transfer lists initialized.\n"); 56 50 57 51 /* init root hub */ … … 60 54 CHECK_RET_FREE_INSTANCE("Failed to initialize root hub driver.\n"); 61 55 56 uhci_print_verbose("Initializing frame list.\n"); 62 57 instance->frame_list = 63 m alloc32(sizeof(link_pointer_t) * UHCI_FRAME_LIST_COUNT);58 memallign32(sizeof(link_pointer_t) * UHCI_FRAME_LIST_COUNT, 4096); 64 59 if (instance->frame_list == NULL) { 65 60 uhci_print_error("Failed to allocate frame list pointer.\n"); … … 87 82 device->driver_data = instance; 88 83 return EOK; 89 }90 /*----------------------------------------------------------------------------*/91 int uhci_in(92 device_t *dev,93 usb_target_t target,94 usb_transfer_type_t transfer_type,95 void *buffer, size_t size,96 usbhc_iface_transfer_in_callback_t callback, void *arg97 )98 {99 uhci_print_info( "transfer IN [%d.%d (%s); %zu]\n",100 target.address, target.endpoint,101 usb_str_transfer_type(transfer_type),102 size);103 return uhci_add_transfer(104 dev, target, transfer_type, USB_PID_IN, buffer, size, NULL, callback, arg);105 }106 /*----------------------------------------------------------------------------*/107 int uhci_out(108 device_t *dev,109 usb_target_t target,110 usb_transfer_type_t transfer_type,111 void *buffer, size_t size,112 usbhc_iface_transfer_out_callback_t callback, void *arg113 )114 {115 uhci_print_info( "transfer OUT [%d.%d (%s); %zu]\n",116 target.address, target.endpoint,117 usb_str_transfer_type(transfer_type),118 size);119 return uhci_add_transfer(120 dev, target, transfer_type, USB_PID_OUT, buffer, size, callback, NULL, arg);121 }122 /*----------------------------------------------------------------------------*/123 int uhci_setup(124 device_t *dev,125 usb_target_t target,126 usb_transfer_type_t transfer_type,127 void *buffer, size_t size,128 usbhc_iface_transfer_out_callback_t callback, void *arg129 )130 {131 uhci_print_info( "transfer SETUP [%d.%d (%s); %zu]\n",132 target.address, target.endpoint,133 usb_str_transfer_type(transfer_type),134 size);135 uhci_print_info("Setup packet content: %x %x.\n", ((uint8_t*)buffer)[0],136 ((uint8_t*)buffer)[1]);137 return uhci_add_transfer( dev,138 target, transfer_type, USB_PID_SETUP, buffer, size, callback, NULL, arg);139 140 84 } 141 85 /*----------------------------------------------------------------------------*/ … … 173 117 } 174 118 /*----------------------------------------------------------------------------*/ 175 static inline int uhci_add_transfer(119 int uhci_transfer( 176 120 device_t *dev, 177 121 usb_target_t target, 178 122 usb_transfer_type_t transfer_type, 123 bool toggle, 179 124 usb_packet_id pid, 180 125 void *buffer, size_t size, … … 248 193 instance->transfers[i].last = instance->transfers[i].first; 249 194 } 250 251 195 async_usleep(1000000); 252 196 } -
uspace/drv/uhci/uhci.h
rde0e6b3 rd93ff502 46 46 typedef struct uhci_regs { 47 47 uint16_t usbcmd; 48 #define USB_CMD_ 48 49 uint16_t usbsts; 49 50 uint16_t usbintr; … … 72 73 int uhci_destroy( device_t *device ); 73 74 74 int uhci_in( 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_in_callback_t callback, void *arg 80 ); 81 82 int uhci_out( 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 ); 89 90 int uhci_setup( 75 int uhci_transfer( 91 76 device_t *dev, 92 77 usb_target_t target, 93 78 usb_transfer_type_t transfer_type, 79 bool toggle, 80 usb_packet_id pid, 94 81 void *buffer, size_t size, 95 usbhc_iface_transfer_out_callback_t callback, void *arg 96 ); 82 usbhc_iface_transfer_out_callback_t callback_out, 83 usbhc_iface_transfer_in_callback_t callback_in, 84 void *arg ); 97 85 98 86 #endif
Note:
See TracChangeset
for help on using the changeset viewer.