Changeset da1dd48 in mainline
- Timestamp:
- 2011-04-21T07:51:39Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 63517c2
- Parents:
- c7dd69d (diff), 84a04dd (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - Location:
- uspace
- Files:
-
- 5 added
- 50 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/usbinfo/dev.c
rc7dd69d rda1dd48 77 77 } 78 78 79 rc = usb_pipe_start_long_transfer(&dev->ctrl_pipe); 80 if (rc != EOK) { 81 fprintf(stderr, 82 NAME ": failed to start transfer on control pipe: %s.\n", 83 str_error(rc)); 84 goto leave; 85 } 79 usb_pipe_start_long_transfer(&dev->ctrl_pipe); 86 80 transfer_started = true; 87 81 -
uspace/drv/ehci-hcd/main.c
rc7dd69d rda1dd48 82 82 pci_get_my_registers(device, &mem_reg_base, &mem_reg_size, &irq); 83 83 CHECK_RET_RETURN(ret, 84 "Failed(%d) to get memory addresses:.\n", ret, device->handle); 85 usb_log_info("Memory mapped regs at 0x%X (size %zu), IRQ %d.\n", 84 "Failed to get memory addresses for %" PRIun ": %s.\n", 85 device->handle, str_error(ret)); 86 usb_log_info("Memory mapped regs at 0x%" PRIxn " (size %zu), IRQ %d.\n", 86 87 mem_reg_base, mem_reg_size, irq); 87 88 … … 102 103 str_error(ret)); 103 104 104 usb_log_info("Controlling new EHCI device `%s' (handle % llu).\n",105 usb_log_info("Controlling new EHCI device `%s' (handle %" PRIun ").\n", 105 106 device->name, device->handle); 106 107 -
uspace/drv/ehci-hcd/pci.c
rc7dd69d rda1dd48 117 117 mem_address = res->res.mem_range.address; 118 118 mem_size = res->res.mem_range.size; 119 usb_log_debug2("Found mem: % llx%zu.\n",119 usb_log_debug2("Found mem: %" PRIxn" %zu.\n", 120 120 mem_address, mem_size); 121 121 mem_found = true; … … 186 186 CHECK_RET_HANGUP_RETURN(ret, "Failed(%d) to read PCI config space.\n", 187 187 ret); 188 usb_log_info("Register space BAR at %p:% x.\n",address, value);188 usb_log_info("Register space BAR at %p:%" PRIxn ".\n", (void *) address, value); 189 189 190 190 /* clear lower byte, it's not part of the BASE address */ 191 191 uintptr_t registers = (value & 0xffffff00); 192 usb_log_info("Memory registers BASE address:%p.\n", registers);192 usb_log_info("Memory registers BASE address:%p.\n", (void *) registers); 193 193 194 194 /* if nothing setup the hc, we don't need to turn it off */ … … 201 201 AS_AREA_READ | AS_AREA_WRITE); 202 202 CHECK_RET_HANGUP_RETURN(ret, "Failed(%d) to map registers %p:%p.\n", 203 ret, regs, registers);203 ret, regs, (void *) registers); 204 204 205 205 /* calculate value of BASE */ … … 221 221 IPC_M_CONFIG_SPACE_READ_32, eecp + USBLEGCTLSTS_OFFSET, &value); 222 222 CHECK_RET_HANGUP_RETURN(ret, "Failed(%d) to read USBLEGCTLSTS.\n", ret); 223 usb_log_debug("USBLEGCTLSTS: % x.\n", value);223 usb_log_debug("USBLEGCTLSTS: %" PRIxn ".\n", value); 224 224 225 225 /* Read the first EEC. i.e. Legacy Support register */ … … 228 228 IPC_M_CONFIG_SPACE_READ_32, eecp + USBLEGSUP_OFFSET, &value); 229 229 CHECK_RET_HANGUP_RETURN(ret, "Failed(%d) to read USBLEGSUP.\n", ret); 230 usb_log_debug2("USBLEGSUP: % x.\n", value);230 usb_log_debug2("USBLEGSUP: %" PRIxn ".\n", value); 231 231 232 232 /* Request control from firmware/BIOS, by writing 1 to highest byte. … … 248 248 249 249 if ((value & USBLEGSUP_BIOS_CONTROL) == 0) { 250 usb_log_info("BIOS released control after % dusec.\n", wait);250 usb_log_info("BIOS released control after %zu usec.\n", wait); 251 251 } else { 252 252 /* BIOS failed to hand over control, this should not happen. */ 253 253 usb_log_warning( "BIOS failed to release control after " 254 "% dusecs, force it.\n", wait);254 "%zu usecs, force it.\n", wait); 255 255 ret = async_req_3_0(parent_phone, DEV_IFACE_ID(PCI_DEV_IFACE), 256 256 IPC_M_CONFIG_SPACE_WRITE_32, eecp + USBLEGSUP_OFFSET, … … 271 271 IPC_M_CONFIG_SPACE_READ_32, eecp + USBLEGCTLSTS_OFFSET, &value); 272 272 CHECK_RET_HANGUP_RETURN(ret, "Failed(%d) to read USBLEGCTLSTS.\n", ret); 273 usb_log_debug2("USBLEGCTLSTS: % x.\n", value);273 usb_log_debug2("USBLEGCTLSTS: %" PRIxn ".\n", value); 274 274 275 275 /* Read again Legacy Support register */ … … 277 277 IPC_M_CONFIG_SPACE_READ_32, eecp + USBLEGSUP_OFFSET, &value); 278 278 CHECK_RET_HANGUP_RETURN(ret, "Failed(%d) to read USBLEGSUP.\n", ret); 279 usb_log_debug2("USBLEGSUP: % x.\n", value);279 usb_log_debug2("USBLEGSUP: %" PRIxn ".\n", value); 280 280 281 281 /* -
uspace/drv/ohci/batch.c
rc7dd69d rda1dd48 141 141 assert(data); 142 142 size_t tds = data->td_count; 143 usb_log_debug("Batch(%p) checking % dtd(s) for completion.\n",143 usb_log_debug("Batch(%p) checking %zu td(s) for completion.\n", 144 144 instance, tds); 145 145 usb_log_debug("ED: %x:%x:%x:%x.\n", … … 147 147 data->ed->next); 148 148 size_t i = 0; 149 instance->transfered_size = instance->buffer_size; 149 150 for (; i < tds; ++i) { 150 151 assert(data->tds[i] != NULL); 151 usb_log_debug("TD % d: %x:%x:%x:%x.\n", i,152 usb_log_debug("TD %zu: %x:%x:%x:%x.\n", i, 152 153 data->tds[i]->status, data->tds[i]->cbp, data->tds[i]->next, 153 154 data->tds[i]->be); … … 156 157 } 157 158 instance->error = td_error(data->tds[i]); 158 /* FIXME: calculate real transfered size */159 instance->transfered_size = instance->buffer_size;160 159 if (instance->error != EOK) { 161 usb_log_debug("Batch(%p) found error TD(% d):%x.\n",160 usb_log_debug("Batch(%p) found error TD(%zu):%x.\n", 162 161 instance, i, data->tds[i]->status); 163 162 /* Make sure TD queue is empty (one TD), … … 174 173 assert(hcd_ep); 175 174 hcd_ep->td = data->tds[i]; 175 if (i > 0) 176 instance->transfered_size -= td_remain_size(data->tds[i - 1]); 177 176 178 /* Clear possible ED HALT */ 177 179 data->ed->td_head &= ~ED_TDHEAD_HALTED_FLAG; … … 238 240 { 239 241 assert(instance); 240 instance->next_step = usb_transfer_batch_call_in_and_dispose; 242 /* We are data out, we are supposed to provide data */ 243 memcpy(instance->data_buffer, instance->buffer, instance->buffer_size); 244 instance->next_step = usb_transfer_batch_call_out_and_dispose; 241 245 batch_data(instance); 242 usb_log_debug("Batch(%p) BULK INinitialized.\n", instance);246 usb_log_debug("Batch(%p) BULK OUT initialized.\n", instance); 243 247 } 244 248 /*----------------------------------------------------------------------------*/ -
uspace/drv/ohci/endpoint_list.c
rc7dd69d rda1dd48 55 55 } 56 56 instance->list_head_pa = addr_to_phys(instance->list_head); 57 usb_log_debug2("Transfer list %s setup with ED: %p( %p).\n",57 usb_log_debug2("Transfer list %s setup with ED: %p(0x%0" PRIx32 ")).\n", 58 58 name, instance->list_head, instance->list_head_pa); 59 59 … … 121 121 hcd_ep, instance->name, first, first->ed); 122 122 if (last_ed == instance->list_head) { 123 usb_log_debug2("%s head ED(%p- %p): %x:%x:%x:%x.\n",123 usb_log_debug2("%s head ED(%p-0x%0" PRIx32 "): %x:%x:%x:%x.\n", 124 124 instance->name, last_ed, instance->list_head_pa, 125 125 last_ed->status, last_ed->td_tail, last_ed->td_head, -
uspace/drv/ohci/hc.c
rc7dd69d rda1dd48 113 113 BANDWIDTH_AVAILABLE_USB11); 114 114 CHECK_RET_RETURN(ret, "Failed to initialize endpoint manager: %s.\n", 115 ret,str_error(ret));115 str_error(ret)); 116 116 117 117 hc_gain_control(instance); 118 118 ret = hc_init_memory(instance); 119 CHECK_RET_RETURN(ret, "Failed to create OHCI memory structures: %s.\n",120 ret,str_error(ret));119 CHECK_RET_RETURN(ret, "Failed to create OHCI memory structures: %s.\n", 120 str_error(ret)); 121 121 hc_init_hw(instance); 122 122 fibril_mutex_initialize(&instance->guard); … … 294 294 if (status & IS_WDH) { 295 295 fibril_mutex_lock(&instance->guard); 296 usb_log_debug2("HCCA: %p-%p(%p).\n", instance->hcca, 297 instance->registers->hcca, addr_to_phys(instance->hcca)); 298 usb_log_debug2("Periodic current: %p.\n", 296 usb_log_debug2("HCCA: %p-%#" PRIx32 " (%p).\n", instance->hcca, 297 instance->registers->hcca, 298 (void *) addr_to_phys(instance->hcca)); 299 usb_log_debug2("Periodic current: %#" PRIx32 ".\n", 299 300 instance->registers->periodic_current); 300 301 … … 405 406 instance->registers->bulk_head = 406 407 instance->lists[USB_TRANSFER_BULK].list_head_pa; 407 usb_log_debug2("Bulk HEAD set to: %p (%p).\n",408 usb_log_debug2("Bulk HEAD set to: %p (%#" PRIx32 ").\n", 408 409 instance->lists[USB_TRANSFER_BULK].list_head, 409 410 instance->lists[USB_TRANSFER_BULK].list_head_pa); … … 411 412 instance->registers->control_head = 412 413 instance->lists[USB_TRANSFER_CONTROL].list_head_pa; 413 usb_log_debug2("Control HEAD set to: %p (%p).\n",414 usb_log_debug2("Control HEAD set to: %p (%#" PRIx32 ").\n", 414 415 instance->lists[USB_TRANSFER_CONTROL].list_head, 415 416 instance->lists[USB_TRANSFER_CONTROL].list_head_pa); … … 487 488 instance->lists[USB_TRANSFER_INTERRUPT].list_head_pa; 488 489 } 489 usb_log_debug2("Interrupt HEADs set to: %p (%p).\n",490 usb_log_debug2("Interrupt HEADs set to: %p (%#" PRIx32 ").\n", 490 491 instance->lists[USB_TRANSFER_INTERRUPT].list_head, 491 492 instance->lists[USB_TRANSFER_INTERRUPT].list_head_pa); -
uspace/drv/ohci/hw_struct/transfer_descriptor.c
rc7dd69d rda1dd48 52 52 instance->status |= togg[toggle] << TD_STATUS_T_SHIFT; 53 53 } 54 if (dir == USB_DIRECTION_IN) { 55 instance->status |= TD_STATUS_ROUND_FLAG; 56 } 54 57 if (buffer != NULL) { 55 58 assert(size != 0); -
uspace/drv/ohci/hw_struct/transfer_descriptor.h
rc7dd69d rda1dd48 59 59 #define TD_STATUS_T_0 (0x2) 60 60 #define TD_STATUS_T_1 (0x3) 61 #define TD_STATUS_T_ED (0) 61 62 #define TD_STATUS_EC_MASK (0x3) /* error count */ 62 63 #define TD_STATUS_EC_SHIFT (26) … … 102 103 return cc_to_rc(cc); 103 104 } 105 106 static inline size_t td_remain_size(td_t *instance) 107 { 108 assert(instance); 109 if (instance->cbp == 0) 110 return 0; 111 return instance->be - instance->cbp + 1; 112 } 104 113 #endif 105 114 /** -
uspace/drv/ohci/iface.c
rc7dd69d rda1dd48 118 118 hc_t *hc = fun_to_hc(fun); 119 119 assert(hc); 120 usb_log_debug("Address bind %d-% d.\n", address, handle);120 usb_log_debug("Address bind %d-%" PRIun ".\n", address, handle); 121 121 usb_device_keeper_bind(&hc->manager, address, handle); 122 122 return EOK; -
uspace/drv/ohci/ohci.c
rc7dd69d rda1dd48 148 148 pci_get_my_registers(device, &mem_reg_base, &mem_reg_size, &irq); 149 149 CHECK_RET_DEST_FUN_RETURN(ret, 150 "Failed(%d) to get memory addresses:.\n", ret, device->handle); 151 usb_log_debug("Memory mapped regs at 0x%X (size %zu), IRQ %d.\n", 152 mem_reg_base, mem_reg_size, irq); 150 "Failed to get memory addresses for %" PRIun ": %s.\n", 151 device->handle, str_error(ret)); 152 usb_log_debug("Memory mapped regs at %p (size %zu), IRQ %d.\n", 153 (void *) mem_reg_base, mem_reg_size, irq); 153 154 154 155 ret = pci_disable_legacy(device); -
uspace/drv/ohci/pci.c
rc7dd69d rda1dd48 117 117 mem_address = res->res.mem_range.address; 118 118 mem_size = res->res.mem_range.size; 119 usb_log_debug2("Found mem: % llx%zu.\n",120 mem_address, mem_size);119 usb_log_debug2("Found mem: %p %zu.\n", 120 (void *) mem_address, mem_size); 121 121 mem_found = true; 122 122 } -
uspace/drv/ohci/root_hub.c
rc7dd69d rda1dd48 198 198 static int process_ctrl_request(rh_t *instance, usb_transfer_batch_t *request); 199 199 200 200 static int process_interrupt(rh_t *instance, usb_transfer_batch_t * request, 201 void * change_buffer, size_t buffe_size); 202 203 static bool is_zeros(void * buffer, size_t size); 201 204 202 205 … … 213 216 // set port power mode to no-power-switching 214 217 instance->registers->rh_desc_a |= RHDA_NPS_FLAG; 215 218 instance->unfinished_interrupt_transfer = NULL; 216 219 usb_log_info("OHCI root hub with %d ports.\n", instance->port_count); 217 220 return EOK; … … 233 236 usb_log_info("Root hub got CONTROL packet\n"); 234 237 opResult = process_ctrl_request(instance, request); 238 usb_transfer_batch_finish_error(request, opResult); 235 239 } else if (request->ep->transfer_type == USB_TRANSFER_INTERRUPT) { 236 240 usb_log_info("Root hub got INTERRUPT packet\n"); 237 241 void * buffer; 242 size_t buffer_size; 238 243 create_interrupt_mask(instance, &buffer, 239 &(request->transfered_size)); 240 memcpy(request->data_buffer, buffer, 241 request->transfered_size); 244 &buffer_size); 245 if(is_zeros(buffer,buffer_size)){ 246 usb_log_debug("no changes.."); 247 instance->unfinished_interrupt_transfer= 248 request; 249 //will be finished later 250 }else{ 251 usb_log_debug("processing changes.."); 252 process_interrupt(instance, request, 253 buffer, buffer_size); 254 } 255 free(buffer); 242 256 opResult = EOK; 243 257 } else { 244 258 opResult = EINVAL; 245 }246 usb_transfer_batch_finish_error(request, opResult);259 usb_transfer_batch_finish_error(request, opResult); 260 } 247 261 return EOK; 248 262 } … … 252 266 253 267 void rh_interrupt(rh_t *instance) { 254 usb_log_info("Whoa whoa wait, I`m not supposed to receive any " 255 "interrupts, am I?\n"); 256 /* TODO: implement? */ 268 //usb_log_info("Whoa whoa wait, I`m not supposed to receive any " 269 // "interrupts, am I?\n"); 270 if(!instance->unfinished_interrupt_transfer){ 271 return; 272 } 273 size_t size; 274 void * buffer; 275 create_interrupt_mask(instance, &buffer, 276 &size); 277 process_interrupt(instance,instance->unfinished_interrupt_transfer, 278 buffer,size); 279 free(buffer); 257 280 } 258 281 /*----------------------------------------------------------------------------*/ … … 859 882 return opResult; 860 883 } 884 /*----------------------------------------------------------------------------*/ 885 886 /** 887 * process hanging interrupt request 888 * 889 * If an interrupt transfer has been received and there was no change, 890 * the driver stores the transfer information and waits for change to occcur. 891 * This routine is called when that happens and it finalizes the interrupt 892 * transfer. 893 * 894 * @param instance hub instance 895 * @param request batch request to be processed 896 * @param change_buffer chages on hub 897 * @param buffer_size size of change buffer 898 * 899 * @return 900 */ 901 static int process_interrupt(rh_t *instance, usb_transfer_batch_t * request, 902 void * change_buffer, size_t buffe_size){ 903 create_interrupt_mask(instance, &change_buffer, 904 &(request->transfered_size)); 905 memcpy(request->data_buffer, change_buffer,request->transfered_size); 906 instance->unfinished_interrupt_transfer = NULL; 907 usb_transfer_batch_finish_error(request, EOK); 908 return EOK; 909 } 910 911 /*----------------------------------------------------------------------------*/ 912 913 /** 914 * return whether the buffer is full of zeros 915 * 916 * Convenience function. 917 * @param buffer 918 * @param size 919 * @return 920 */ 921 static bool is_zeros(void * buffer, size_t size){ 922 if(!buffer) return true; 923 if(!size) return true; 924 size_t i; 925 for(i=0;i<size;++i){ 926 if(((char*)buffer)[i]) 927 return false; 928 } 929 return true; 930 } 861 931 862 932 /** -
uspace/drv/ohci/root_hub.h
rc7dd69d rda1dd48 54 54 /** hubs descriptors */ 55 55 usb_device_descriptors_t descriptors; 56 /** interrupt transfer waiting for an actual interrupt to occur */ 57 usb_transfer_batch_t * unfinished_interrupt_transfer; 56 58 } rh_t; 57 59 -
uspace/drv/uhci-hcd/batch.c
rc7dd69d rda1dd48 162 162 assert(data); 163 163 164 usb_log_debug2("Batch(%p) checking % dtransfer(s) for completion.\n",164 usb_log_debug2("Batch(%p) checking %zu transfer(s) for completion.\n", 165 165 instance, data->td_count); 166 166 instance->transfered_size = 0; … … 173 173 instance->error = td_status(&data->tds[i]); 174 174 if (instance->error != EOK) { 175 usb_log_debug("Batch(%p) found error TD(% d):%x.\n",175 usb_log_debug("Batch(%p) found error TD(%zu):%" PRIx32 ".\n", 176 176 instance, i, data->tds[i].status); 177 177 td_print_status(&data->tds[i]); -
uspace/drv/uhci-hcd/hc.c
rc7dd69d rda1dd48 101 101 ret, io, str_error(ret)); 102 102 instance->registers = io; 103 usb_log_debug("Device registers at %p (%u) accessible.\n",103 usb_log_debug("Device registers at %p (%zuB) accessible.\n", 104 104 io, reg_size); 105 105 … … 423 423 if (frame_list != addr_to_phys(instance->frame_list)) { 424 424 usb_log_debug("Framelist address: %p vs. %p.\n", 425 frame_list, addr_to_phys(instance->frame_list)); 425 (void *) frame_list, 426 (void *) addr_to_phys(instance->frame_list)); 426 427 } 427 428 … … 432 433 uintptr_t real_pa = addr_to_phys(QH(interrupt)); 433 434 if (expected_pa != real_pa) { 434 usb_log_debug("Interrupt QH: %p (frame:%d) vs. %p.\n",435 expected_pa, frnum,real_pa);435 usb_log_debug("Interrupt QH: %p (frame %d) vs. %p.\n", 436 (void *) expected_pa, frnum, (void *) real_pa); 436 437 } 437 438 … … 440 441 if (expected_pa != real_pa) { 441 442 usb_log_debug("Control Slow QH: %p vs. %p.\n", 442 expected_pa,real_pa);443 (void *) expected_pa, (void *) real_pa); 443 444 } 444 445 … … 447 448 if (expected_pa != real_pa) { 448 449 usb_log_debug("Control Full QH: %p vs. %p.\n", 449 expected_pa,real_pa);450 (void *) expected_pa, (void *) real_pa); 450 451 } 451 452 … … 454 455 if (expected_pa != real_pa ) { 455 456 usb_log_debug("Bulk QH: %p vs. %p.\n", 456 expected_pa,real_pa);457 (void *) expected_pa, (void *) real_pa); 457 458 } 458 459 async_usleep(UHCI_DEBUGER_TIMEOUT); -
uspace/drv/uhci-hcd/hw_struct/transfer_descriptor.c
rc7dd69d rda1dd48 154 154 assert(instance); 155 155 const uint32_t s = instance->status; 156 usb_log_debug2("TD(%p) status(%# x):%s %d,%s%s%s%s%s%s%s%s%s%s%s %d.\n",156 usb_log_debug2("TD(%p) status(%#" PRIx32 "):%s %d,%s%s%s%s%s%s%s%s%s%s%s %zu.\n", 157 157 instance, instance->status, 158 158 (s & TD_STATUS_SPD_FLAG) ? " SPD," : "", -
uspace/drv/uhci-hcd/iface.c
rc7dd69d rda1dd48 118 118 hc_t *hc = fun_to_hc(fun); 119 119 assert(hc); 120 usb_log_debug("Address bind %d-% d.\n", address, handle);120 usb_log_debug("Address bind %d-%" PRIun ".\n", address, handle); 121 121 usb_device_keeper_bind(&hc->manager, address, handle); 122 122 return EOK; -
uspace/drv/uhci-hcd/main.c
rc7dd69d rda1dd48 72 72 int ret = uhci_init(uhci, device); 73 73 if (ret != EOK) { 74 usb_log_error("Failed (%d)to initialize UHCI driver: %s.\n",75 ret,str_error(ret));74 usb_log_error("Failed to initialize UHCI driver: %s.\n", 75 str_error(ret)); 76 76 return ret; 77 77 } -
uspace/drv/uhci-hcd/pci.c
rc7dd69d rda1dd48 90 90 io_address = res->res.io_range.address; 91 91 io_size = res->res.io_range.size; 92 usb_log_debug2("Found io: % llx%zu.\n",92 usb_log_debug2("Found io: %" PRIx64" %zu.\n", 93 93 res->res.io_range.address, res->res.io_range.size); 94 94 io_found = true; -
uspace/drv/uhci-hcd/transfer_list.c
rc7dd69d rda1dd48 58 58 } 59 59 uint32_t queue_head_pa = addr_to_phys(instance->queue_head); 60 usb_log_debug2("Transfer list %s setup with QH: %p (%p).\n",60 usb_log_debug2("Transfer list %s setup with QH: %p (%#" PRIx32" ).\n", 61 61 name, instance->queue_head, queue_head_pa); 62 62 -
uspace/drv/uhci-hcd/uhci.c
rc7dd69d rda1dd48 168 168 pci_get_my_registers(device, &io_reg_base, &io_reg_size, &irq); 169 169 CHECK_RET_DEST_FUN_RETURN(ret, 170 "Failed(%d) to get I/O addresses:.\n", ret, device->handle); 171 usb_log_debug("I/O regs at 0x%X (size %zu), IRQ %d.\n", 172 io_reg_base, io_reg_size, irq); 170 "Failed to get I/O addresses for %" PRIun ": %s.\n", 171 device->handle, str_error(ret)); 172 usb_log_debug("I/O regs at 0x%p (size %zu), IRQ %d.\n", 173 (void *) io_reg_base, io_reg_size, irq); 173 174 174 175 ret = pci_disable_legacy(device); -
uspace/drv/uhci-rhd/main.c
rc7dd69d rda1dd48 1 1 /* 2 * Copyright (c) 2011 Vojtech Horky,Jan Vesely2 * Copyright (c) 2011 Jan Vesely 3 3 * All rights reserved. 4 4 * … … 84 84 return EINVAL; 85 85 86 usb_log_debug2("%s called device %d\n", __FUNCTION__, device->handle); 86 usb_log_debug2("uhci_rh_add_device(handle=%" PRIun ")\n", 87 device->handle); 87 88 88 89 uintptr_t io_regs = 0; … … 101 102 ret = hc_get_my_registers(device, &io_regs, &io_size); 102 103 CHECK_RET_FREE_RH_RETURN(ret, 103 "Failed(%d) to get registers from HC: %s.\n", ret, str_error(ret)); 104 usb_log_debug("I/O regs at %#x (size %zu).\n", io_regs, io_size); 104 "Failed to get registers from HC: %s.\n", str_error(ret)); 105 usb_log_debug("I/O regs at %p (size %zuB).\n", 106 (void *) io_regs, io_size); 105 107 106 108 rh = malloc(sizeof(uhci_root_hub_t)); … … 115 117 116 118 device->driver_data = rh; 117 usb_log_info("Controlling root hub '%s' (% llu).\n",119 usb_log_info("Controlling root hub '%s' (%" PRIun ").\n", 118 120 device->name, device->handle); 119 121 return EOK; -
uspace/drv/uhci-rhd/port.c
rc7dd69d rda1dd48 89 89 { 90 90 assert(port); 91 asprintf(&port->id_string, "Port (%p - % d)", port, number);91 asprintf(&port->id_string, "Port (%p - %u)", port, number); 92 92 if (port->id_string == NULL) { 93 93 return ENOMEM; … … 115 115 116 116 fibril_add_ready(port->checker); 117 usb_log_debug("%s: Started polling fibril (%x).\n",117 usb_log_debug("%s: Started polling fibril (%" PRIun ").\n", 118 118 port->id_string, port->checker); 119 119 return EOK; … … 267 267 } 268 268 269 usb_log_info("New device at port %u, address %d (handle % llu).\n",269 usb_log_info("New device at port %u, address %d (handle %" PRIun ").\n", 270 270 port->number, dev_addr, port->attached_device); 271 271 return EOK; … … 283 283 int uhci_port_remove_device(uhci_port_t *port) 284 284 { 285 usb_log_error("%s: Don't know how to remove device % llu.\n",285 usb_log_error("%s: Don't know how to remove device %" PRIun ".\n", 286 286 port->id_string, port->attached_device); 287 287 return ENOTSUP; -
uspace/drv/usbflbk/main.c
rc7dd69d rda1dd48 65 65 66 66 usb_log_info("Pretending to control %s `%s'" \ 67 " (node `%s', handle % llu).\n",67 " (node `%s', handle %" PRIun ").\n", 68 68 dev->interface_no < 0 ? "device" : "interface", 69 69 dev->ddf_dev->name, fun_name, dev->ddf_dev->handle); -
uspace/drv/usbhid/kbd/kbddev.c
rc7dd69d rda1dd48 607 607 608 608 if (count != kbd_dev->key_count) { 609 usb_log_warning("Number of received keycodes (% d) differs from"610 " expected number (%d).\n", count, kbd_dev->key_count);609 usb_log_warning("Number of received keycodes (%zu) differs from" 610 " expected (%zu).\n", count, kbd_dev->key_count); 611 611 return; 612 612 } -
uspace/drv/usbhid/usbhid.c
rc7dd69d rda1dd48 197 197 size_t size = usb_hid_report_input_length(hid_dev->parser, usage_path, 198 198 mapping->compare); 199 usb_log_debug("Size of the input report: % d\n", size);199 usb_log_debug("Size of the input report: %zuB\n", size); 200 200 201 201 usb_hid_report_path_free(usage_path); -
uspace/drv/usbhub/ports.c
rc7dd69d rda1dd48 83 83 void usb_hub_process_interrupt(usb_hub_info_t * hub, 84 84 uint16_t port) { 85 usb_log_debug("interrupt at port % d\n",port);85 usb_log_debug("interrupt at port %zu\n", (size_t) port); 86 86 //determine type of change 87 87 //usb_pipe_t *pipe = hub->control_pipe; … … 93 93 if (opResult != EOK) { 94 94 usb_log_error("Failed to get port %zu status: %s.\n", 95 port, str_error(opResult));95 (size_t) port, str_error(opResult)); 96 96 return; 97 97 } … … 100 100 bool device_connected = usb_port_is_status(status, 101 101 USB_HUB_FEATURE_PORT_CONNECTION); 102 usb_log_debug("Connection change on port %zu: %s.\n", port, 102 usb_log_debug("Connection change on port %zu: %s.\n", 103 (size_t) port, 103 104 device_connected ? "device attached" : "device removed"); 104 105 … … 109 110 usb_log_error( 110 111 "Cannot handle change on port %zu: %s.\n", 111 str_error(opResult));112 (size_t) port, str_error(opResult)); 112 113 } 113 114 } else { … … 210 211 static void usb_hub_port_reset_completed(usb_hub_info_t * hub, 211 212 uint16_t port, uint32_t status){ 212 usb_log_debug("Port %zu reset complete.\n", port);213 usb_log_debug("Port %zu reset complete.\n", (size_t) port); 213 214 if (usb_port_is_status(status, USB_HUB_FEATURE_PORT_ENABLE)) { 214 215 /* Finalize device adding. */ … … 222 223 usb_log_warning( 223 224 "Port %zu reset complete but port not enabled.\n", 224 port);225 (size_t) port); 225 226 } 226 227 } -
uspace/drv/usbhub/usbhub.c
rc7dd69d rda1dd48 105 105 } 106 106 107 usb_pipe_start_session(hub_info->control_pipe);107 //usb_pipe_start_session(hub_info->control_pipe); 108 108 //set hub configuration 109 109 opResult = usb_hub_set_configuration(hub_info); … … 122 122 return opResult; 123 123 } 124 usb_pipe_end_session(hub_info->control_pipe);125 126 /// \TODO what is this? 127 usb_log_debug("Creating `hub' function.\n");124 //usb_pipe_end_session(hub_info->control_pipe); 125 126 127 usb_log_debug("Creating 'hub' function in DDF.\n"); 128 128 ddf_fun_t *hub_fun = ddf_fun_create(hub_info->usb_device->ddf_dev, 129 129 fun_exposed, "hub"); … … 153 153 bool hub_port_changes_callback(usb_device_t *dev, 154 154 uint8_t *change_bitmap, size_t change_bitmap_size, void *arg) { 155 usb_log_debug("hub_port_changes_callback\n"); 155 156 usb_hub_info_t *hub = (usb_hub_info_t *) arg; 156 157 … … 217 218 // get hub descriptor 218 219 usb_log_debug("creating serialized descriptor\n"); 219 void * serialized_descriptor = malloc(USB_HUB_MAX_DESCRIPTOR_SIZE); 220 //void * serialized_descriptor = malloc(USB_HUB_MAX_DESCRIPTOR_SIZE); 221 uint8_t serialized_descriptor[USB_HUB_MAX_DESCRIPTOR_SIZE]; 220 222 usb_hub_descriptor_t * descriptor; 221 223 int opResult; … … 235 237 } 236 238 usb_log_debug2("deserializing descriptor\n"); 237 descriptor = usb_deserialize_hub_desriptor(serialized_descriptor); 239 descriptor = usb_create_deserialized_hub_desriptor( 240 serialized_descriptor); 238 241 if (descriptor == NULL) { 239 242 usb_log_warning("could not deserialize descriptor \n"); 240 return opResult;243 return ENOMEM; 241 244 } 242 245 usb_log_debug("setting port count to %d\n", descriptor->ports_count); 243 246 hub_info->port_count = descriptor->ports_count; 244 247 /// \TODO this is not semantically correct 248 bool is_power_switched = 249 ((descriptor->hub_characteristics & 1) ==0); 250 bool has_individual_port_powering = 251 ((descriptor->hub_characteristics & 1) !=0); 245 252 hub_info->ports = malloc( 246 253 sizeof (usb_hub_port_t) * (hub_info->port_count + 1)); … … 249 256 usb_hub_port_init(&hub_info->ports[port]); 250 257 } 251 for (port = 0; port < hub_info->port_count; port++) { 252 opResult = usb_hub_set_port_feature(hub_info->control_pipe, 253 port+1, USB_HUB_FEATURE_PORT_POWER); 254 if (opResult != EOK) { 255 usb_log_error("cannot power on port %d; %d\n", 256 port+1, opResult); 257 } 258 if(is_power_switched){ 259 usb_log_debug("is_power_switched\n"); 260 if(has_individual_port_powering){ 261 usb_log_debug("has_individual_port_powering\n"); 262 for (port = 0; port < hub_info->port_count; port++) { 263 opResult = usb_hub_set_port_feature(hub_info->control_pipe, 264 port+1, USB_HUB_FEATURE_PORT_POWER); 265 if (opResult != EOK) { 266 usb_log_error("cannot power on port %zu: %s.\n", 267 port+1, str_error(opResult)); 268 } 269 } 270 }else{ 271 usb_log_debug("!has_individual_port_powering\n"); 272 opResult = usb_hub_set_feature(hub_info->control_pipe, 273 USB_HUB_FEATURE_C_HUB_LOCAL_POWER); 274 if (opResult != EOK) { 275 usb_log_error("cannot power hub: %s\n", 276 str_error(opResult)); 277 } 278 } 279 }else{ 280 usb_log_debug("!is_power_switched\n"); 258 281 } 259 282 usb_log_debug2("freeing data\n"); 260 free(serialized_descriptor);261 free(descriptor->devices_removable);283 //free(serialized_descriptor); 284 //free(descriptor->devices_removable); 262 285 free(descriptor); 263 286 return EOK; … … 321 344 * auto destruction, this could work better. 322 345 */ 323 int rc = usb_ pipe_start_session(hub_info->control_pipe);346 int rc = usb_hc_connection_open(&hub_info->connection); 324 347 if (rc != EOK) { 325 usb_log_error("Failed to start session on control pipe: %s.\n", 326 str_error(rc)); 327 return rc; 328 } 329 rc = usb_hc_connection_open(&hub_info->connection); 330 if (rc != EOK) { 331 usb_pipe_end_session(hub_info->control_pipe); 348 //usb_pipe_end_session(hub_info->control_pipe); 332 349 usb_log_error("Failed to open connection to HC: %s.\n", 333 350 str_error(rc)); … … 345 362 } 346 363 347 usb_log_info("Controlling hub `%s' (% dports).\n",364 usb_log_info("Controlling hub `%s' (%zu ports).\n", 348 365 hub_info->usb_device->ddf_dev->name, hub_info->port_count); 349 366 return EOK; … … 413 430 port, USB_HUB_FEATURE_PORT_POWER); 414 431 if (opResult != EOK) { 415 usb_log_error(" cannot power on port %d; %d\n",416 port, opResult);432 usb_log_error("Cannot power on port %zu: %s.\n", 433 port, str_error(opResult)); 417 434 } 418 435 } -
uspace/drv/usbhub/usbhub_private.h
rc7dd69d rda1dd48 113 113 114 114 usb_device_request_setup_packet_t clear_request = { 115 .request_type = USB_HUB_REQ_TYPE_ CLEAR_PORT_FEATURE,115 .request_type = USB_HUB_REQ_TYPE_SET_PORT_FEATURE, 116 116 .request = USB_DEVREQ_SET_FEATURE, 117 117 .length = 0, … … 166 166 } 167 167 168 /**169 * create uint8_t array with serialized descriptor170 *171 * @param descriptor172 * @return newly created serializd descriptor pointer173 */174 void * usb_serialize_hub_descriptor(usb_hub_descriptor_t * descriptor);175 168 176 /** 177 * create deserialized desriptor structure out of serialized descriptor 178 * 179 * The serialized descriptor must be proper usb hub descriptor,180 * otherwise an eerror might occur. 181 * 182 * @param sdescriptor serialized descriptor183 * @return newly created deserialized descriptor pointer 184 */ 185 usb_hub_descriptor_t * usb_deserialize_hub_desriptor(void * sdescriptor);169 void * usb_create_serialized_hub_descriptor(usb_hub_descriptor_t * descriptor); 170 171 void usb_serialize_hub_descriptor(usb_hub_descriptor_t * descriptor, 172 void * serialized_descriptor); 173 174 usb_hub_descriptor_t * usb_create_deserialized_hub_desriptor( 175 void * serialized_descriptor); 176 177 void usb_deserialize_hub_desriptor(void * serialized_descriptor, 178 usb_hub_descriptor_t * descriptor); 186 179 187 180 -
uspace/drv/usbhub/utils.c
rc7dd69d rda1dd48 56 56 //hub descriptor utils 57 57 58 void * usb_serialize_hub_descriptor(usb_hub_descriptor_t * descriptor) { 58 /** 59 * create uint8_t array with serialized descriptor 60 * 61 * @param descriptor 62 * @return newly created serializd descriptor pointer 63 */ 64 void * usb_create_serialized_hub_descriptor(usb_hub_descriptor_t * descriptor) { 59 65 //base size 60 66 size_t size = 7; … … 64 70 uint8_t * result = malloc(size); 65 71 //size 66 result[0] = size; 72 if(result) 73 usb_serialize_hub_descriptor(descriptor,result); 74 return result; 75 } 76 77 /** 78 * serialize descriptor into given buffer 79 * 80 * The buffer size is not checked. 81 * @param descriptor 82 * @param serialized_descriptor 83 */ 84 void usb_serialize_hub_descriptor(usb_hub_descriptor_t * descriptor, 85 void * serialized_descriptor) { 86 //base size 87 uint8_t * sdescriptor = serialized_descriptor; 88 size_t size = 7; 89 //variable size according to port count 90 size_t var_size = (descriptor->ports_count+7)/8; 91 size += 2 * var_size; 92 //size 93 sdescriptor[0] = size; 67 94 //descriptor type 68 result[1] = USB_DESCTYPE_HUB;69 result[2] = descriptor->ports_count;95 sdescriptor[1] = USB_DESCTYPE_HUB; 96 sdescriptor[2] = descriptor->ports_count; 70 97 /// @fixme handling of endianness?? 71 result[3] = descriptor->hub_characteristics / 256;72 result[4] = descriptor->hub_characteristics % 256;73 result[5] = descriptor->pwr_on_2_good_time;74 result[6] = descriptor->current_requirement;98 sdescriptor[3] = descriptor->hub_characteristics / 256; 99 sdescriptor[4] = descriptor->hub_characteristics % 256; 100 sdescriptor[5] = descriptor->pwr_on_2_good_time; 101 sdescriptor[6] = descriptor->current_requirement; 75 102 76 103 size_t i; 77 104 for (i = 0; i < var_size; ++i) { 78 result[7 + i] = descriptor->devices_removable[i];105 sdescriptor[7 + i] = descriptor->devices_removable[i]; 79 106 } 80 107 for (i = 0; i < var_size; ++i) { 81 result[7 + var_size + i] = 255;108 sdescriptor[7 + var_size + i] = 255; 82 109 } 83 return result;84 110 } 85 111 86 usb_hub_descriptor_t * usb_deserialize_hub_desriptor( 112 113 /** 114 * create deserialized desriptor structure out of serialized descriptor 115 * 116 * The serialized descriptor must be proper usb hub descriptor, 117 * otherwise an eerror might occur. 118 * 119 * @param sdescriptor serialized descriptor 120 * @return newly created deserialized descriptor pointer 121 */ 122 usb_hub_descriptor_t * usb_create_deserialized_hub_desriptor( 87 123 void * serialized_descriptor) { 88 124 uint8_t * sdescriptor = serialized_descriptor; … … 95 131 96 132 usb_hub_descriptor_t * result = malloc(sizeof(usb_hub_descriptor_t)); 97 133 if(result) 134 usb_deserialize_hub_desriptor(serialized_descriptor,result); 135 return result; 136 } 98 137 99 result->ports_count = sdescriptor[2]; 138 /** 139 * deserialize descriptor into given pointer 140 * 141 * @param serialized_descriptor 142 * @param descriptor 143 * @return 144 */ 145 void usb_deserialize_hub_desriptor( 146 void * serialized_descriptor, usb_hub_descriptor_t * descriptor) { 147 uint8_t * sdescriptor = serialized_descriptor; 148 descriptor->ports_count = sdescriptor[2]; 100 149 /// @fixme handling of endianness?? 101 result->hub_characteristics = sdescriptor[4] + 256 * sdescriptor[3];102 result->pwr_on_2_good_time = sdescriptor[5];103 result->current_requirement = sdescriptor[6];104 size_t var_size = ( result->ports_count+7) / 8;105 result->devices_removable = (uint8_t*) malloc(var_size);150 descriptor->hub_characteristics = sdescriptor[4] + 256 * sdescriptor[3]; 151 descriptor->pwr_on_2_good_time = sdescriptor[5]; 152 descriptor->current_requirement = sdescriptor[6]; 153 size_t var_size = (descriptor->ports_count+7) / 8; 154 //descriptor->devices_removable = (uint8_t*) malloc(var_size); 106 155 107 156 size_t i; 108 157 for (i = 0; i < var_size; ++i) { 109 result->devices_removable[i] = sdescriptor[7 + i];158 descriptor->devices_removable[i] = sdescriptor[7 + i]; 110 159 } 111 return result;112 160 } 113 114 115 161 116 162 /** -
uspace/drv/usbkbd/kbddev.c
rc7dd69d rda1dd48 567 567 568 568 if (count != kbd_dev->key_count) { 569 usb_log_warning("Number of received keycodes (% d) differs from"570 " expected number (%d).\n", count, kbd_dev->key_count);569 usb_log_warning("Number of received keycodes (%zu) differs from" 570 " expected (%zu).\n", count, kbd_dev->key_count); 571 571 return; 572 572 } -
uspace/drv/usbmid/main.c
rc7dd69d rda1dd48 53 53 usb_log_info("Taking care of new MID `%s'.\n", dev->ddf_dev->name); 54 54 55 int rc; 56 57 rc = usb_pipe_start_long_transfer(&dev->ctrl_pipe); 58 if (rc != EOK) { 59 usb_log_error("Failed to start transfer on control pipe: %s.\n", 60 str_error(rc)); 61 return rc; 62 } 55 usb_pipe_start_long_transfer(&dev->ctrl_pipe); 63 56 64 57 bool accept = usbmid_explore_device(dev); -
uspace/drv/usbmouse/init.c
rc7dd69d rda1dd48 125 125 } 126 126 127 /* Open the control pipe. */128 rc = usb_pipe_start_session(&dev->ctrl_pipe);129 if (rc != EOK) {130 goto leave;131 }132 133 127 /* Set the boot protocol. */ 134 128 rc = usb_control_request_set(&dev->ctrl_pipe, … … 140 134 } 141 135 142 /* Close the control pipe (ignore errors). */ 143 usb_pipe_end_session(&dev->ctrl_pipe); 144 145 146 /* Everything allright. */ 136 /* Everything all right. */ 147 137 dev->driver_data = mouse; 148 138 mouse->mouse_fun->driver_data = mouse; -
uspace/drv/usbmouse/main.c
rc7dd69d rda1dd48 54 54 } 55 55 56 usb_log_debug("Polling pipe at endpoint %d.\n", dev->pipes[0].pipe->endpoint_no); 56 usb_log_debug("Polling pipe at endpoint %d.\n", 57 dev->pipes[0].pipe->endpoint_no); 57 58 58 59 rc = usb_device_auto_poll(dev, 0, … … 66 67 } 67 68 68 usb_log_info("controlling new mouse (handle % llu).\n",69 usb_log_info("controlling new mouse (handle %" PRIun ").\n", 69 70 dev->ddf_dev->handle); 70 71 -
uspace/drv/vhc/conndev.c
rc7dd69d rda1dd48 99 99 int rc = get_device_name(callback, devname, DEVICE_NAME_MAXLENGTH); 100 100 101 usb_log_info("New virtual device `%s' (id = % x).\n",101 usb_log_info("New virtual device `%s' (id = %" PRIxn ").\n", 102 102 rc == EOK ? devname : "<unknown>", dev->id); 103 103 … … 122 122 } 123 123 124 usb_log_info("Virtual device disconnected (id = %x).\n", dev->id); 124 usb_log_info("Virtual device disconnected (id = %" PRIxn ").\n", 125 dev->id); 125 126 virtdev_destroy_device(dev); 126 127 } -
uspace/lib/c/include/ipc/dev_iface.h
rc7dd69d rda1dd48 45 45 /** Interface provided by USB host controller. */ 46 46 USBHC_DEV_IFACE, 47 /** Interface provided by USB HID devices. */ 48 USBHID_DEV_IFACE, 47 49 48 50 DEV_IFACE_MAX -
uspace/lib/drv/generic/dev_iface.c
rc7dd69d rda1dd48 43 43 #include "remote_usb.h" 44 44 #include "remote_usbhc.h" 45 #include "remote_usbhid.h" 45 46 #include "remote_pci.h" 46 47 … … 51 52 &remote_pci_iface, 52 53 &remote_usb_iface, 53 &remote_usbhc_iface 54 &remote_usbhc_iface, 55 &remote_usbhid_iface 54 56 } 55 57 }; -
uspace/lib/usb/Makefile
rc7dd69d rda1dd48 42 42 src/dp.c \ 43 43 src/dump.c \ 44 src/hidiface.c \ 44 45 src/hidparser.c \ 45 46 src/hub.c \ -
uspace/lib/usb/include/usb/classes/hub.h
rc7dd69d rda1dd48 152 152 maximum of 255 ports). 153 153 */ 154 uint8_t * devices_removable;154 uint8_t devices_removable[32]; 155 155 156 156 /** -
uspace/lib/usb/include/usb/debug.h
rc7dd69d rda1dd48 36 36 #define LIBUSB_DEBUG_H_ 37 37 #include <stdio.h> 38 #include <inttypes.h> 38 39 #include <usb/usb.h> 39 40 #include <assert.h> … … 85 86 void usb_log_enable(usb_log_level_t, const char *); 86 87 87 void usb_log_printf(usb_log_level_t, const char *, ...); 88 void usb_log_printf(usb_log_level_t, const char *, ...) 89 PRINTF_ATTRIBUTE(2, 3); 88 90 89 91 /** Log fatal error. */ -
uspace/lib/usb/include/usb/pipes.h
rc7dd69d rda1dd48 99 99 /** Number of active transfers over the pipe. */ 100 100 int refcount; 101 /** Number of failed attempts to open the HC phone. 102 * When user requests usb_pipe_start_long_transfer() and the operation 103 * fails, there is no way to report this to the user. 104 * That the soft reference counter is increased to record the attempt. 105 * When the user then request e.g. usb_pipe_read(), it will try to 106 * add reference as well. 107 * If that fails, it is reported to the user. If it is okay, the 108 * real reference counter is incremented. 109 * The problem might arise when ending the long transfer (since 110 * the number of references would be only 1, but logically it shall be 111 * two). 112 * Decrementing the soft counter first shall solve this. 113 */ 114 int refcount_soft; 101 115 102 116 /** Whether to automatically reset halt on the endpoint. … … 163 177 int usb_pipe_unregister(usb_pipe_t *, usb_hc_connection_t *); 164 178 165 int usb_pipe_start_session(usb_pipe_t *); 166 int usb_pipe_end_session(usb_pipe_t *); 167 bool usb_pipe_is_session_started(usb_pipe_t *); 168 169 int usb_pipe_start_long_transfer(usb_pipe_t *); 179 void usb_pipe_start_long_transfer(usb_pipe_t *); 170 180 void usb_pipe_end_long_transfer(usb_pipe_t *); 171 181 -
uspace/lib/usb/src/devdrv.c
rc7dd69d rda1dd48 236 236 237 237 /* It is worth to start a long transfer. */ 238 rc = usb_pipe_start_long_transfer(ctrl_pipe); 239 if (rc != EOK) { 240 return rc; 241 } 238 usb_pipe_start_long_transfer(ctrl_pipe); 242 239 243 240 /* Get the device descriptor. */ -
uspace/lib/usb/src/devpoll.c
rc7dd69d rda1dd48 78 78 usb_endpoint_mapping_t *mapping 79 79 = &polling_data->dev->pipes[polling_data->pipe_index]; 80 usb_log_debug("Poll 0x%x: started polling of `%s' - " \80 usb_log_debug("Poll%p: started polling of `%s' - " \ 81 81 "interface %d (%s,%d,%d), %zuB/%zu.\n", 82 82 polling_data, … … 100 100 if (rc == EOK) { 101 101 usb_log_debug( 102 "Poll 0x%x: received: '%s' (%zuB).\n",102 "Poll%p: received: '%s' (%zuB).\n", 103 103 polling_data, 104 104 usb_debug_str_buffer(polling_data->buffer, … … 107 107 } else { 108 108 usb_log_debug( 109 "Poll 0x%x: polling failed: %s.\n",109 "Poll%p: polling failed: %s.\n", 110 110 polling_data, str_error(rc)); 111 111 } -
uspace/lib/usb/src/hidparser.c
rc7dd69d rda1dd48 167 167 168 168 usb_log_debug2( 169 "i(% u) data(%X) value(%X): TAG %u, class %u, size %u - ", i,169 "i(%zu) data(%X) value(%X): TAG %d, class %u, size %u - ", i, 170 170 data[i], usb_hid_report_tag_data_int32(data+i+1,item_size), 171 171 tag, class, item_size); … … 576 576 report_item = list_get_instance(item, usb_hid_report_item_t, link); 577 577 578 usb_log_debug("\tOFFSET: % X\n", report_item->offset);578 usb_log_debug("\tOFFSET: %zX\n", report_item->offset); 579 579 usb_log_debug("\tCOUNT: %X\n", report_item->count); 580 580 usb_log_debug("\tSIZE: %X\n", report_item->size); -
uspace/lib/usb/src/hidreport.c
rc7dd69d rda1dd48 109 109 110 110 if (*d != sizeof(usb_standard_hid_descriptor_t)) { 111 usb_log_error("HID descriptor has s wrong size (%u, expected %u"111 usb_log_error("HID descriptor has wrong size (%u, expected %zu" 112 112 ")\n", *d, sizeof(usb_standard_hid_descriptor_t)); 113 113 return EINVAL; … … 149 149 free(*report_desc); 150 150 *report_desc = NULL; 151 usb_log_error("Report descriptor has wrong size (% u, expected "151 usb_log_error("Report descriptor has wrong size (%zu, expected " 152 152 "%u)\n", actual_size, length); 153 153 return EINVAL; -
uspace/lib/usb/src/pipepriv.c
rc7dd69d rda1dd48 77 77 * 78 78 * @param pipe The USB pipe. 79 * @param hide_failure Whether to hide failure when adding reference 80 * (use soft refcount). 79 81 * @return Error code. 80 82 * @retval EOK Currently always. 81 83 */ 82 int pipe_add_ref(usb_pipe_t *pipe )84 int pipe_add_ref(usb_pipe_t *pipe, bool hide_failure) 83 85 { 84 another_try:85 86 pipe_acquire(pipe); 86 87 … … 89 90 int phone = devman_device_connect(pipe->wire->hc_handle, 0); 90 91 if (phone < 0) { 91 // TODO: treat some error as non-recoverable 92 // and return error from here 92 if (hide_failure) { 93 pipe->refcount_soft++; 94 phone = EOK; 95 } 93 96 pipe_release(pipe); 94 goto another_try;97 return phone; 95 98 } 96 99 /* … … 114 117 { 115 118 pipe_acquire(pipe); 119 if (pipe->refcount_soft > 0) { 120 pipe->refcount_soft--; 121 pipe_release(pipe); 122 return; 123 } 116 124 assert(pipe->refcount > 0); 117 125 pipe->refcount--; -
uspace/lib/usb/src/pipepriv.h
rc7dd69d rda1dd48 37 37 38 38 #include <usb/pipes.h> 39 #include <bool.h> 39 40 40 41 void pipe_acquire(usb_pipe_t *); … … 44 45 void pipe_end_transaction(usb_pipe_t *); 45 46 46 int pipe_add_ref(usb_pipe_t * );47 int pipe_add_ref(usb_pipe_t *, bool); 47 48 void pipe_drop_ref(usb_pipe_t *); 48 49 -
uspace/lib/usb/src/pipes.c
rc7dd69d rda1dd48 229 229 } 230 230 231 232 /** Start a session on the endpoint pipe.233 *234 * A session is something inside what any communication occurs.235 * It is expected that sessions would be started right before the transfer236 * and ended - see usb_pipe_end_session() - after the last237 * transfer.238 * The reason for this is that session actually opens some communication239 * channel to the host controller (or to the physical hardware if you240 * wish) and thus it involves acquiring kernel resources.241 * Since they are limited, sessions shall not be longer than strictly242 * necessary.243 *244 * @deprecated245 * Obsoleted with introduction of usb_pipe_start_long_transfer246 *247 * @param pipe Endpoint pipe to start the session on.248 * @return Error code.249 */250 int usb_pipe_start_session(usb_pipe_t *pipe)251 {252 usb_log_warning("usb_pipe_start_session() was deprecated.\n");253 return EOK;254 }255 256 257 /** Ends a session on the endpoint pipe.258 *259 * @deprecated260 * Obsoleted with introduction of usb_pipe_end_long_transfer261 *262 * @see usb_pipe_start_session263 *264 * @param pipe Endpoint pipe to end the session on.265 * @return Error code.266 */267 int usb_pipe_end_session(usb_pipe_t *pipe)268 {269 usb_log_warning("usb_pipe_end_session() was deprecated.\n");270 return EOK;271 }272 273 /** Tell whether a session is started (open) on the endpoint pipe.274 *275 * The expected usage of this function is in assertions for some276 * nested functions.277 *278 * @param pipe Endpoint pipe in question.279 * @return Whether @p pipe has opened a session.280 */281 bool usb_pipe_is_session_started(usb_pipe_t *pipe)282 {283 pipe_acquire(pipe);284 bool started = pipe->refcount > 0;285 pipe_release(pipe);286 return started;287 }288 289 231 /** Prepare pipe for a long transfer. 290 232 * … … 297 239 * @return Error code. 298 240 */ 299 intusb_pipe_start_long_transfer(usb_pipe_t *pipe)300 { 301 return pipe_add_ref(pipe);241 void usb_pipe_start_long_transfer(usb_pipe_t *pipe) 242 { 243 (void) pipe_add_ref(pipe, true); 302 244 } 303 245 -
uspace/lib/usb/src/pipesinit.c
rc7dd69d rda1dd48 365 365 pipe->direction = direction; 366 366 pipe->refcount = 0; 367 pipe->refcount_soft = 0; 367 368 pipe->auto_reset_halt = false; 368 369 … … 419 420 int rc; 420 421 421 rc = usb_pipe_start_long_transfer(pipe); 422 if (rc != EOK) { 423 return rc; 424 } 425 422 usb_pipe_start_long_transfer(pipe); 426 423 427 424 uint8_t dev_descr_start[CTRL_PIPE_MIN_PACKET_SIZE]; -
uspace/lib/usb/src/pipesio.c
rc7dd69d rda1dd48 173 173 174 174 int rc; 175 rc = pipe_add_ref(pipe );175 rc = pipe_add_ref(pipe, false); 176 176 if (rc != EOK) { 177 177 return rc; … … 296 296 int rc; 297 297 298 rc = pipe_add_ref(pipe );298 rc = pipe_add_ref(pipe, false); 299 299 if (rc != EOK) { 300 300 return rc; … … 447 447 int rc; 448 448 449 rc = pipe_add_ref(pipe );449 rc = pipe_add_ref(pipe, false); 450 450 if (rc != EOK) { 451 451 return rc; … … 579 579 int rc; 580 580 581 rc = pipe_add_ref(pipe );581 rc = pipe_add_ref(pipe, false); 582 582 if (rc != EOK) { 583 583 return rc;
Note:
See TracChangeset
for help on using the changeset viewer.