Changeset f1be95c8 in mainline
- Timestamp:
- 2011-04-09T00:22:30Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 4c28d17
- Parents:
- e42dd32
- Location:
- uspace/drv/ohci
- Files:
-
- 1 added
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/ohci/batch.c
re42dd32 rf1be95c8 118 118 { 119 119 assert(instance); 120 ohci_batch_t *data = instance->private_data; 121 assert(data); 122 free32(data->ed); 123 free32(data->tds); 124 free32(instance->setup_buffer); 120 125 free32(instance->transport_buffer); 121 free 32(instance->setup_buffer);126 free(data); 122 127 free(instance); 123 128 } … … 125 130 bool batch_is_complete(usb_transfer_batch_t *instance) 126 131 { 127 // TODO: implement 128 return false; 132 assert(instance); 133 ohci_batch_t *data = instance->private_data; 134 assert(data); 135 size_t tds = data->td_count - 1; 136 usb_log_debug2("Batch(%p) checking %d td(s) for completion.\n", 137 instance, tds); 138 size_t i = 0; 139 for (; i < tds; ++i) { 140 if (!td_is_finished(&data->tds[i])) 141 return false; 142 instance->error = td_error(&data->tds[i]); 143 /* FIXME: calculate real transfered size */ 144 instance->transfered_size = instance->buffer_size; 145 if (instance->error != EOK) { 146 usb_log_debug("Batch(%p) found error TD(%d):%x.\n", 147 instance, i, data->tds[i].status); 148 return true; 149 // endpoint_toggle_set(instance->ep, 150 } 151 } 152 return true; 129 153 } 130 154 /*----------------------------------------------------------------------------*/ -
uspace/drv/ohci/hw_struct/completion_codes.h
re42dd32 rf1be95c8 35 35 #define DRV_OHCI_HW_STRUCT_COMPLETION_CODES_H 36 36 37 #include <errno.h> 38 37 39 #define CC_NOERROR (0x0) 38 40 #define CC_CRC (0x1) … … 50 52 #define CC_NOACCESS2 (0xf) 51 53 54 inline static int cc_to_rc(int cc) 55 { 56 switch (cc) { 57 case CC_NOERROR: 58 return EOK; 59 60 case CC_CRC: 61 return EBADCHECKSUM; 62 63 case CC_PIDUNEXPECTED: 64 case CC_PIDFAIL: 65 case CC_BITSTUFF: 66 return EIO; 67 68 case CC_TOGGLE: 69 case CC_STALL: 70 return ESTALL; 71 72 case CC_NORESPONSE: 73 return ETIMEOUT; 74 75 case CC_DATAOVERRRUN: 76 case CC_DATAUNDERRRUN: 77 case CC_BUFFEROVERRRUN: 78 case CC_BUFFERUNDERRUN: 79 return EOVERFLOW; 80 81 case CC_NOACCESS1: 82 case CC_NOACCESS2: 83 default: 84 return ENOTSUP; 85 } 86 } 87 52 88 #endif 53 89 /** -
uspace/drv/ohci/hw_struct/transfer_descriptor.h
re42dd32 rf1be95c8 35 35 #define DRV_OHCI_HW_STRUCT_TRANSFER_DESCRIPTOR_H 36 36 37 #include <bool.h> 37 38 #include <stdint.h> 38 39 #include "utils/malloc32.h" … … 79 80 instance->next = addr_to_phys(next) & TD_NEXT_PTR_MASK; 80 81 } 82 83 inline static bool td_is_finished(td_t *instance) 84 { 85 assert(instance); 86 int cc = (instance->status >> TD_STATUS_CC_SHIFT) & TD_STATUS_CC_MASK; 87 /* something went wrong, error code is set */ 88 if (cc != CC_NOACCESS1 && cc != CC_NOACCESS2 && cc != CC_NOERROR) { 89 return true; 90 } 91 /* everything done */ 92 if (cc == CC_NOERROR && instance->cbp == 0) { 93 return true; 94 } 95 return false; 96 } 97 98 static inline int td_error(td_t *instance) 99 { 100 assert(instance); 101 int cc = (instance->status >> TD_STATUS_CC_SHIFT) & TD_STATUS_CC_MASK; 102 return cc_to_rc(cc); 103 } 81 104 #endif 82 105 /**
Note:
See TracChangeset
for help on using the changeset viewer.