Changeset 9600516 in mainline for uspace/drv/uhci/uhci.c
- Timestamp:
- 2011-01-21T16:49:47Z (13 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 643b983
- Parents:
- 1062c8d
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/uhci/uhci.c
r1062c8d r9600516 3 3 #include <usb/usb.h> 4 4 5 #include "translating_malloc.h" 6 5 7 #include "debug.h" 6 8 #include "name.h" 7 9 #include "uhci.h" 10 11 static int init_tranfer_lists(transfer_list_t list[]); 8 12 9 13 int uhci_init(device_t *device, void *regs) … … 26 30 if (ret < 0) { 27 31 free( instance ); 28 printf(NAME":Failed to gain access to registers at %p\n", io);32 uhci_print_error("Failed to gain access to registers at %p\n", io); 29 33 return ret; 30 34 } … … 32 36 33 37 /* init root hub */ 34 ret = uhci_root_hub_init( 35 (char*)regs + UHCI_ROOT_HUB_PORT_REGISTERS_OFFSET 38 ret = uhci_root_hub_init(&instance->root_hub, device, 39 (char*)regs + UHCI_ROOT_HUB_PORT_REGISTERS_OFFSET); 36 40 if (ret < 0) { 37 free( instance ); 38 printf(NAME": Failed to initialize root hub driver.\n"); 41 free(instance); 42 uhci_print_error("Failed to initialize root hub driver.\n"); 43 return ret; 44 } 45 46 instance->frame_list = trans_malloc(sizeof(frame_list_t)); 47 if (instance->frame_list == NULL) { 48 uhci_print_error("Failed to allocate frame list pointer.\n"); 49 uhci_root_hub_fini(&instance->root_hub); 50 free(instance); 51 return ENOMEM; 52 } 53 54 const uintptr_t pa = (uintptr_t)addr_to_phys(instance->frame_list); 55 56 pio_write_32(&instance->registers->flbaseadd, (uint32_t)pa); 57 58 ret = init_tranfer_lists(instance->transfers); 59 if (ret != EOK) { 60 uhci_print_error("Transfer list initialization failed.\n"); 61 uhci_root_hub_fini(&instance->root_hub); 62 free(instance); 39 63 return ret; 40 64 } 41 65 42 66 device->driver_data = instance; 67 return EOK; 68 } 69 /*----------------------------------------------------------------------------*/ 70 int init_tranfer_lists(transfer_list_t transfers[]) 71 { 72 //TODO:refactor 73 int ret; 74 ret = transfer_list_init(&transfers[USB_TRANSFER_BULK], NULL); 75 if (ret != EOK) { 76 uhci_print_error("Failed to inititalize bulk queue.\n"); 77 return ret; 78 } 79 80 ret = transfer_list_init( 81 &transfers[USB_TRANSFER_CONTROL], &transfers[USB_TRANSFER_BULK]); 82 if (ret != EOK) { 83 uhci_print_error("Failed to inititalize control queue.\n"); 84 transfer_list_fini(&transfers[USB_TRANSFER_BULK]); 85 return ret; 86 } 87 88 ret = transfer_list_init( 89 &transfers[USB_TRANSFER_INTERRUPT], &transfers[USB_TRANSFER_CONTROL]); 90 if (ret != EOK) { 91 uhci_print_error("Failed to interrupt control queue.\n"); 92 transfer_list_fini(&transfers[USB_TRANSFER_CONTROL]); 93 transfer_list_fini(&transfers[USB_TRANSFER_BULK]); 94 return ret; 95 } 96 43 97 return EOK; 44 98 }
Note:
See TracChangeset
for help on using the changeset viewer.