Changeset 56fd7cf in mainline for uspace/drv/bus/usb
- Timestamp:
- 2012-08-17T11:37:03Z (13 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 1d5a540
- Parents:
- be2a38ad
- Location:
- uspace/drv/bus/usb
- Files:
-
- 32 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/bus/usb/ehci/main.c
rbe2a38ad r56fd7cf 84 84 CHECK_RET_RETURN(ret, 85 85 "Failed to get memory addresses for %" PRIun ": %s.\n", 86 d evice->handle, str_error(ret));86 ddf_dev_get_handle(device), str_error(ret)); 87 87 usb_log_info("Memory mapped regs at 0x%" PRIxn " (size %zu), IRQ %d.\n", 88 88 reg_base, reg_size, irq); … … 104 104 /* High Speed, no bandwidth */ 105 105 hcd_init(ehci_hc, USB_SPEED_HIGH, 0, NULL); 106 hc_fun->ops = &hc_ops;106 ddf_fun_set_ops(hc_fun, &hc_ops); 107 107 108 108 ret = ddf_fun_bind(hc_fun); … … 116 116 117 117 usb_log_info("Controlling new EHCI device `%s' (handle %" PRIun ").\n", 118 d evice->name, device->handle);118 ddf_dev_get_name(device), ddf_dev_get_handle(device)); 119 119 120 120 return EOK; -
uspace/drv/bus/usb/ehci/res.c
rbe2a38ad r56fd7cf 76 76 * @return Error code. 77 77 */ 78 int get_my_registers( constddf_dev_t *dev,78 int get_my_registers(ddf_dev_t *dev, 79 79 uintptr_t *mem_reg_address, size_t *mem_reg_size, int *irq_no) 80 80 { … … 82 82 83 83 async_sess_t *parent_sess = devman_parent_device_connect( 84 EXCHANGE_SERIALIZE, d ev->handle, IPC_FLAG_BLOCKING);84 EXCHANGE_SERIALIZE, ddf_dev_get_handle(dev), IPC_FLAG_BLOCKING); 85 85 if (!parent_sess) 86 86 return ENOMEM; … … 115 115 * @return Error code. 116 116 */ 117 int enable_interrupts( constddf_dev_t *device)117 int enable_interrupts(ddf_dev_t *device) 118 118 { 119 119 async_sess_t *parent_sess = devman_parent_device_connect( 120 EXCHANGE_SERIALIZE, d evice->handle, IPC_FLAG_BLOCKING);120 EXCHANGE_SERIALIZE, ddf_dev_get_handle(device), IPC_FLAG_BLOCKING); 121 121 if (!parent_sess) 122 122 return ENOMEM; … … 134 134 * @return Error code. 135 135 */ 136 static int disable_extended_caps( constddf_dev_t *device, unsigned eecp)136 static int disable_extended_caps(ddf_dev_t *device, unsigned eecp) 137 137 { 138 138 /* nothing to do */ … … 141 141 142 142 async_sess_t *parent_sess = devman_parent_device_connect( 143 EXCHANGE_SERIALIZE, d evice->handle, IPC_FLAG_BLOCKING);143 EXCHANGE_SERIALIZE, ddf_dev_get_handle(device), IPC_FLAG_BLOCKING); 144 144 if (!parent_sess) 145 145 return ENOMEM; … … 234 234 } 235 235 236 int disable_legacy( constddf_dev_t *device, uintptr_t reg_base, size_t reg_size)236 int disable_legacy(ddf_dev_t *device, uintptr_t reg_base, size_t reg_size) 237 237 { 238 238 assert(device); -
uspace/drv/bus/usb/ehci/res.h
rbe2a38ad r56fd7cf 38 38 #include <ddf/driver.h> 39 39 40 int get_my_registers( constddf_dev_t *, uintptr_t *, size_t *, int *);41 int enable_interrupts( constddf_dev_t *);42 int disable_legacy( constddf_dev_t *, uintptr_t, size_t);40 int get_my_registers(ddf_dev_t *, uintptr_t *, size_t *, int *); 41 int enable_interrupts(ddf_dev_t *); 42 int disable_legacy(ddf_dev_t *, uintptr_t, size_t); 43 43 44 44 #endif -
uspace/drv/bus/usb/ohci/hc.c
rbe2a38ad r56fd7cf 187 187 188 188 ret = usb_device_manager_bind_address(&instance->generic.dev_manager, 189 instance->rh.address, hub_fun->handle);189 instance->rh.address, ddf_fun_get_handle(hub_fun)); 190 190 if (ret != EOK) 191 191 usb_log_warning("Failed to bind root hub address: %s.\n", -
uspace/drv/bus/usb/ohci/main.c
rbe2a38ad r56fd7cf 59 59 return ret; 60 60 } 61 usb_log_info("Controlling new OHCI device '%s'.\n", d evice->name);61 usb_log_info("Controlling new OHCI device '%s'.\n", ddf_dev_get_name(device)); 62 62 63 63 return EOK; -
uspace/drv/bus/usb/ohci/ohci.c
rbe2a38ad r56fd7cf 33 33 * @brief OHCI driver 34 34 */ 35 36 /* XXX Fix this */ 37 #define _DDF_DATA_IMPLANT 38 35 39 #include <errno.h> 36 40 #include <str_error.h> … … 52 56 } ohci_t; 53 57 54 static inline ohci_t * dev_to_ohci(ddf_dev_t *dev) 55 { 56 assert(dev); 57 return dev->driver_data; 58 static inline ohci_t *dev_to_ohci(ddf_dev_t *dev) 59 { 60 return ddf_dev_data_get(dev); 58 61 } 59 62 /** IRQ handling callback, identifies device … … 87 90 88 91 if (address != NULL) { 89 *address = dev_to_ohci( fun->dev)->hc.rh.address;92 *address = dev_to_ohci(ddf_fun_get_dev(fun))->hc.rh.address; 90 93 } 91 94 … … 103 106 { 104 107 assert(fun); 105 ddf_fun_t *hc_fun = dev_to_ohci( fun->dev)->hc_fun;108 ddf_fun_t *hc_fun = dev_to_ohci(ddf_fun_get_dev(fun))->hc_fun; 106 109 assert(hc_fun); 107 110 108 111 if (handle != NULL) 109 *handle = hc_fun->handle;112 *handle = ddf_fun_get_handle(hc_fun); 110 113 return EOK; 111 114 } … … 152 155 if (ret != EOK) { \ 153 156 if (instance->hc_fun) { \ 154 instance->hc_fun->driver_data = NULL; \155 157 ddf_fun_destroy(instance->hc_fun); \ 156 158 } \ 157 159 if (instance->rh_fun) { \ 158 instance->rh_fun->driver_data = NULL; \159 160 ddf_fun_destroy(instance->rh_fun); \ 160 161 } \ … … 167 168 CHECK_RET_DEST_FREE_RETURN(ret, 168 169 "Failed to create OHCI HC function: %s.\n", str_error(ret)); 169 instance->hc_fun->ops = &hc_ops;170 instance->hc_fun->driver_data = &instance->hc;170 ddf_fun_set_ops(instance->hc_fun, &hc_ops); 171 ddf_fun_data_implant(instance->hc_fun, &instance->hc); 171 172 172 173 instance->rh_fun = ddf_fun_create(device, fun_inner, "ohci_rh"); … … 174 175 CHECK_RET_DEST_FREE_RETURN(ret, 175 176 "Failed to create OHCI RH function: %s.\n", str_error(ret)); 176 instance->rh_fun->ops = &rh_ops;177 ddf_fun_set_ops(instance->rh_fun, &rh_ops); 177 178 178 179 uintptr_t reg_base = 0; … … 183 184 CHECK_RET_DEST_FREE_RETURN(ret, 184 185 "Failed to get register memory addresses for %" PRIun ": %s.\n", 185 d evice->handle, str_error(ret));186 ddf_dev_get_handle(device), str_error(ret)); 186 187 usb_log_debug("Memory mapped regs at %p (size %zu), IRQ %d.\n", 187 188 (void *) reg_base, reg_size, irq); -
uspace/drv/bus/usb/ohci/res.c
rbe2a38ad r56fd7cf 53 53 * @return Error code. 54 54 */ 55 int get_my_registers( constddf_dev_t *dev,55 int get_my_registers(ddf_dev_t *dev, 56 56 uintptr_t *mem_reg_address, size_t *mem_reg_size, int *irq_no) 57 57 { … … 59 59 60 60 async_sess_t *parent_sess = 61 devman_parent_device_connect(EXCHANGE_SERIALIZE, dev->handle,62 IPC_FLAG_BLOCKING);61 devman_parent_device_connect(EXCHANGE_SERIALIZE, 62 ddf_dev_get_handle(dev), IPC_FLAG_BLOCKING); 63 63 if (!parent_sess) 64 64 return ENOMEM; … … 94 94 * @return Error code. 95 95 */ 96 int enable_interrupts( constddf_dev_t *device)96 int enable_interrupts(ddf_dev_t *device) 97 97 { 98 98 async_sess_t *parent_sess = 99 devman_parent_device_connect(EXCHANGE_SERIALIZE, device->handle,100 IPC_FLAG_BLOCKING);99 devman_parent_device_connect(EXCHANGE_SERIALIZE, 100 ddf_dev_get_handle(device), IPC_FLAG_BLOCKING); 101 101 if (!parent_sess) 102 102 return ENOMEM; -
uspace/drv/bus/usb/ohci/res.h
rbe2a38ad r56fd7cf 37 37 #include <ddf/driver.h> 38 38 39 int get_my_registers( constddf_dev_t *, uintptr_t *, size_t *, int *);40 int enable_interrupts( constddf_dev_t *);39 int get_my_registers(ddf_dev_t *, uintptr_t *, size_t *, int *); 40 int enable_interrupts(ddf_dev_t *); 41 41 42 42 #endif -
uspace/drv/bus/usb/uhci/main.c
rbe2a38ad r56fd7cf 70 70 } else { 71 71 usb_log_info("Controlling new UHCI device '%s'.\n", 72 d evice->name);72 ddf_dev_get_name(device)); 73 73 } 74 74 -
uspace/drv/bus/usb/uhci/res.c
rbe2a38ad r56fd7cf 51 51 * @return Error code. 52 52 */ 53 int get_my_registers( constddf_dev_t *dev,53 int get_my_registers(ddf_dev_t *dev, 54 54 uintptr_t *io_reg_address, size_t *io_reg_size, int *irq_no) 55 55 { … … 57 57 58 58 async_sess_t *parent_sess = 59 devman_parent_device_connect(EXCHANGE_SERIALIZE, dev->handle,60 IPC_FLAG_BLOCKING);59 devman_parent_device_connect(EXCHANGE_SERIALIZE, 60 ddf_dev_get_handle(dev), IPC_FLAG_BLOCKING); 61 61 if (!parent_sess) 62 62 return ENOMEM; … … 92 92 * @return Error code. 93 93 */ 94 int enable_interrupts( constddf_dev_t *device)94 int enable_interrupts(ddf_dev_t *device) 95 95 { 96 96 async_sess_t *parent_sess = 97 devman_parent_device_connect(EXCHANGE_SERIALIZE, device->handle,98 IPC_FLAG_BLOCKING);97 devman_parent_device_connect(EXCHANGE_SERIALIZE, 98 ddf_dev_get_handle(device), IPC_FLAG_BLOCKING); 99 99 if (!parent_sess) 100 100 return ENOMEM; … … 111 111 * @return Error code. 112 112 */ 113 int disable_legacy( constddf_dev_t *device)113 int disable_legacy(ddf_dev_t *device) 114 114 { 115 115 assert(device); 116 116 117 117 async_sess_t *parent_sess = devman_parent_device_connect( 118 EXCHANGE_SERIALIZE, d evice->handle, IPC_FLAG_BLOCKING);118 EXCHANGE_SERIALIZE, ddf_dev_get_handle(device), IPC_FLAG_BLOCKING); 119 119 if (!parent_sess) 120 120 return ENOMEM; -
uspace/drv/bus/usb/uhci/res.h
rbe2a38ad r56fd7cf 38 38 #include <ddf/driver.h> 39 39 40 int get_my_registers( constddf_dev_t *, uintptr_t *, size_t *, int *);41 int enable_interrupts( constddf_dev_t *);42 int disable_legacy( constddf_dev_t *);40 int get_my_registers(ddf_dev_t *, uintptr_t *, size_t *, int *); 41 int enable_interrupts(ddf_dev_t *); 42 int disable_legacy(ddf_dev_t *); 43 43 44 44 #endif -
uspace/drv/bus/usb/uhci/uhci.c
rbe2a38ad r56fd7cf 33 33 * @brief UHCI driver 34 34 */ 35 36 /* XXX Fix this */ 37 #define _DDF_DATA_IMPLANT 38 35 39 #include <errno.h> 36 40 #include <str_error.h> … … 60 64 } uhci_t; 61 65 62 static inline uhci_t * dev_to_uhci(const ddf_dev_t *dev) 63 { 64 assert(dev); 65 return dev->driver_data; 66 static inline uhci_t *dev_to_uhci(ddf_dev_t *dev) 67 { 68 return ddf_dev_data_get(dev); 66 69 } 67 70 … … 97 100 static int usb_iface_get_hc_handle(ddf_fun_t *fun, devman_handle_t *handle) 98 101 { 99 assert(fun); 100 ddf_fun_t *hc_fun = dev_to_uhci(fun->dev)->hc_fun; 102 ddf_fun_t *hc_fun = dev_to_uhci(ddf_fun_get_dev(fun))->hc_fun; 101 103 assert(hc_fun); 102 104 103 105 if (handle != NULL) 104 *handle = hc_fun->handle;106 *handle = ddf_fun_get_handle(hc_fun); 105 107 return EOK; 106 108 } … … 118 120 static hw_resource_list_t *get_resource_list(ddf_fun_t *fun) 119 121 { 120 assert(fun); 121 rh_t *rh = fun->driver_data; 122 rh_t *rh = ddf_fun_data_get(fun); 122 123 assert(rh); 123 124 return &rh->resource_list; … … 160 161 if (ret != EOK) { \ 161 162 if (instance->hc_fun) \ 162 instance->hc_fun->driver_data = NULL; \163 163 ddf_fun_destroy(instance->hc_fun); \ 164 164 if (instance->rh_fun) {\ 165 instance->rh_fun->driver_data = NULL; \166 165 ddf_fun_destroy(instance->rh_fun); \ 167 166 } \ … … 174 173 int ret = (instance->hc_fun == NULL) ? ENOMEM : EOK; 175 174 CHECK_RET_DEST_FREE_RETURN(ret, "Failed to create UHCI HC function.\n"); 176 instance->hc_fun->ops = &hc_ops;177 instance->hc_fun->driver_data = &instance->hc.generic;175 ddf_fun_set_ops(instance->hc_fun, &hc_ops); 176 ddf_fun_data_implant(instance->hc_fun, &instance->hc.generic); 178 177 179 178 instance->rh_fun = ddf_fun_create(device, fun_inner, "uhci_rh"); 180 179 ret = (instance->rh_fun == NULL) ? ENOMEM : EOK; 181 180 CHECK_RET_DEST_FREE_RETURN(ret, "Failed to create UHCI RH function.\n"); 182 instance->rh_fun->ops = &rh_ops;183 instance->rh_fun->driver_data = &instance->rh;181 ddf_fun_set_ops(instance->rh_fun, &rh_ops); 182 ddf_fun_data_implant(instance->rh_fun, &instance->rh); 184 183 185 184 uintptr_t reg_base = 0; … … 190 189 CHECK_RET_DEST_FREE_RETURN(ret, 191 190 "Failed to get I/O addresses for %" PRIun ": %s.\n", 192 d evice->handle, str_error(ret));191 ddf_dev_get_handle(device), str_error(ret)); 193 192 usb_log_debug("I/O regs at 0x%p (size %zu), IRQ %d.\n", 194 193 (void *) reg_base, reg_size, irq); -
uspace/drv/bus/usb/uhcirh/main.c
rbe2a38ad r56fd7cf 48 48 #define NAME "uhcirh" 49 49 50 static int hc_get_my_registers( constddf_dev_t *dev,50 static int hc_get_my_registers(ddf_dev_t *dev, 51 51 uintptr_t *io_reg_address, size_t *io_reg_size); 52 52 … … 88 88 89 89 usb_log_debug2("uhci_rh_dev_add(handle=%" PRIun ")\n", 90 d evice->handle);90 ddf_dev_get_handle(device)); 91 91 92 92 uintptr_t io_regs = 0; … … 98 98 if (ret != EOK) { \ 99 99 usb_log_error(message); \ 100 if (rh) \101 free(rh); \102 100 return ret; \ 103 101 } else (void)0 … … 109 107 (void *) io_regs, io_size); 110 108 111 rh = malloc(sizeof(uhci_root_hub_t));109 rh = ddf_dev_data_alloc(device, sizeof(uhci_root_hub_t)); 112 110 ret = (rh == NULL) ? ENOMEM : EOK; 113 111 CHECK_RET_FREE_RH_RETURN(ret, … … 119 117 ret, str_error(ret)); 120 118 121 device->driver_data = rh;122 119 usb_log_info("Controlling root hub '%s' (%" PRIun ").\n", 123 d evice->name, device->handle);120 ddf_dev_get_name(device), ddf_dev_get_handle(device)); 124 121 return EOK; 125 122 } … … 133 130 */ 134 131 int hc_get_my_registers( 135 constddf_dev_t *dev, uintptr_t *io_reg_address, size_t *io_reg_size)132 ddf_dev_t *dev, uintptr_t *io_reg_address, size_t *io_reg_size) 136 133 { 137 assert(dev);138 139 134 async_sess_t *parent_sess = 140 devman_parent_device_connect(EXCHANGE_SERIALIZE, dev->handle,141 IPC_FLAG_BLOCKING);135 devman_parent_device_connect(EXCHANGE_SERIALIZE, 136 ddf_dev_get_handle(dev), IPC_FLAG_BLOCKING); 142 137 if (!parent_sess) 143 138 return ENOMEM; -
uspace/drv/bus/usb/uhcirh/port.c
rbe2a38ad r56fd7cf 279 279 usb_log_info("%s: New device, address %d (handle %" PRIun ").\n", 280 280 port->id_string, port->attached_device.address, 281 port->attached_device.fun->handle);281 ddf_fun_get_handle(port->attached_device.fun)); 282 282 return EOK; 283 283 } -
uspace/drv/bus/usb/usbflbk/main.c
rbe2a38ad r56fd7cf 69 69 " (node `%s', handle %" PRIun ").\n", 70 70 dev->interface_no < 0 ? "device" : "interface", 71 d ev->ddf_dev->name, fun_name, dev->ddf_dev->handle);71 ddf_dev_get_name(dev->ddf_dev), fun_name, ddf_dev_get_handle(dev->ddf_dev)); 72 72 73 73 return EOK; … … 85 85 const int ret = ddf_fun_unbind(ctl_fun); 86 86 if (ret != EOK) { 87 usb_log_error("Failed to unbind %s.\n", ctl_fun->name);87 usb_log_error("Failed to unbind %s.\n", ddf_fun_get_name(ctl_fun)); 88 88 return ret; 89 89 } -
uspace/drv/bus/usb/usbhid/generic/hiddev.c
rbe2a38ad r56fd7cf 35 35 */ 36 36 37 /* XXX Fix this */ 38 #define _DDF_DATA_IMPLANT 39 37 40 #include <usb/debug.h> 38 41 #include <usb/classes/classes.h> … … 81 84 }; 82 85 86 /** Return hid_dev_t * for generic HID function node. 87 * 88 * For the generic HID subdriver the 'hid' function has usb_hid_gen_fun_t 89 * as soft state. Through that we can get to the usb_hid_dev_t. 90 */ 91 static usb_hid_dev_t *fun_hid_dev(ddf_fun_t *fun) 92 { 93 return ((usb_hid_gen_fun_t *)ddf_fun_data_get(fun))->hid_dev; 94 } 95 83 96 static size_t usb_generic_hid_get_event_length(ddf_fun_t *fun) 84 97 { 85 98 usb_log_debug2("Generic HID: Get event length (fun: %p, " 86 "fun->driver_data: %p.\n", fun, fun->driver_data); 87 88 if (fun == NULL || fun->driver_data == NULL) { 89 return 0; 90 } 91 92 const usb_hid_dev_t *hid_dev = fun->driver_data; 99 "fun->driver_data: %p.\n", fun, ddf_fun_data_get(fun)); 100 101 const usb_hid_dev_t *hid_dev = fun_hid_dev(fun); 93 102 94 103 usb_log_debug2("hid_dev: %p, Max input report size (%zu).\n", … … 103 112 usb_log_debug2("Generic HID: Get event.\n"); 104 113 105 if (fun == NULL || fun->driver_data == NULL || buffer == NULL 106 || act_size == NULL || event_nr == NULL) { 114 if (buffer == NULL || act_size == NULL || event_nr == NULL) { 107 115 usb_log_debug("No function"); 108 116 return EINVAL; 109 117 } 110 118 111 const usb_hid_dev_t *hid_dev = (usb_hid_dev_t *)fun->driver_data;119 const usb_hid_dev_t *hid_dev = fun_hid_dev(fun); 112 120 113 121 if (hid_dev->input_report_size > size) { … … 132 140 usb_log_debug("Generic HID: Get report descriptor length.\n"); 133 141 134 if (fun == NULL || fun->driver_data == NULL) { 135 usb_log_debug("No function"); 136 return EINVAL; 137 } 138 139 const usb_hid_dev_t *hid_dev = fun->driver_data; 142 const usb_hid_dev_t *hid_dev = fun_hid_dev(fun); 140 143 141 144 usb_log_debug2("hid_dev->report_desc_size = %zu\n", … … 150 153 usb_log_debug2("Generic HID: Get report descriptor.\n"); 151 154 152 if (fun == NULL || fun->driver_data == NULL) { 153 usb_log_debug("No function"); 154 return EINVAL; 155 } 156 157 const usb_hid_dev_t *hid_dev = fun->driver_data; 155 const usb_hid_dev_t *hid_dev = fun_hid_dev(fun); 158 156 159 157 if (hid_dev->report_desc_size > size) { … … 183 181 return; 184 182 } 185 usb_log_debug2("%s unbound.\n", fun->name); 186 /* We did not allocate this, so leave this alone 187 * the device would take care of it */ 188 fun->driver_data = NULL; 183 usb_log_debug2("%s unbound.\n", ddf_fun_get_name(fun)); 189 184 ddf_fun_destroy(fun); 190 185 } … … 192 187 int usb_generic_hid_init(usb_hid_dev_t *hid_dev, void **data) 193 188 { 189 usb_hid_gen_fun_t *hid_fun; 190 194 191 if (hid_dev == NULL) { 195 192 return EINVAL; … … 205 202 } 206 203 207 /* This is nasty, both device and this function have the same208 * driver data, thus destruction causes to double free */209 fun->driver_data= hid_dev;210 fun->ops = &usb_generic_hid_ops;204 /* Create softstate */ 205 hid_fun = ddf_fun_data_alloc(fun, sizeof(usb_hid_gen_fun_t)); 206 hid_fun->hid_dev = hid_dev; 207 ddf_fun_set_ops(fun, &usb_generic_hid_ops); 211 208 212 209 int rc = ddf_fun_bind(fun); … … 214 211 usb_log_error("Could not bind DDF function: %s.\n", 215 212 str_error(rc)); 216 fun->driver_data = NULL;217 213 ddf_fun_destroy(fun); 218 214 return rc; 219 215 } 220 216 221 usb_log_debug("HID function created. Handle: %" PRIun "\n", fun->handle); 217 usb_log_debug("HID function created. Handle: %" PRIun "\n", 218 ddf_fun_get_handle(fun)); 222 219 *data = fun; 223 220 -
uspace/drv/bus/usb/usbhid/generic/hiddev.h
rbe2a38ad r56fd7cf 47 47 const char *HID_GENERIC_CLASS_NAME; 48 48 49 49 /** The USB HID generic 'hid' function softstate */ 50 typedef struct { 51 struct usb_hid_dev *hid_dev; 52 } usb_hid_gen_fun_t; 50 53 51 54 int usb_generic_hid_init(struct usb_hid_dev *hid_dev, void **data); -
uspace/drv/bus/usb/usbhid/kbd/kbddev.c
rbe2a38ad r56fd7cf 34 34 * USB HID keyboard device structure and API. 35 35 */ 36 37 /* XXX Fix this */ 38 #define _DDF_DATA_IMPLANT 36 39 37 40 #include <errno.h> … … 162 165 ipc_callid_t icallid, ipc_call_t *icall) 163 166 { 164 if (fun == NULL || fun->driver_data == NULL) {165 usb_log_error("%s: Missing parameter.\n", __FUNCTION__);166 async_answer_0(icallid, EINVAL);167 return;168 }169 170 167 const sysarg_t method = IPC_GET_IMETHOD(*icall); 171 usb_kbd_t *kbd_dev = fun->driver_data;168 usb_kbd_t *kbd_dev = ddf_fun_data_get(fun); 172 169 173 170 switch (method) { … … 501 498 /* Store the initialized HID device and HID ops 502 499 * to the DDF function. */ 503 fun->ops = &kbdops;504 fun->driver_data = kbd_dev;500 ddf_fun_set_ops(fun, &kbdops); 501 ddf_fun_data_implant(fun, kbd_dev); 505 502 506 503 int rc = ddf_fun_bind(fun); … … 508 505 usb_log_error("Could not bind DDF function: %s.\n", 509 506 str_error(rc)); 510 fun->driver_data = NULL; /* We did not allocate this. */511 507 ddf_fun_destroy(fun); 512 508 return rc; … … 514 510 515 511 usb_log_debug("%s function created. Handle: %" PRIun "\n", 516 HID_KBD_FUN_NAME, fun->handle);512 HID_KBD_FUN_NAME, ddf_fun_get_handle(fun)); 517 513 518 514 usb_log_debug("Adding DDF function to category %s...\n", … … 524 520 HID_KBD_CLASS_NAME, str_error(rc)); 525 521 if (ddf_fun_unbind(fun) == EOK) { 526 fun->driver_data = NULL; /* We did not allocate this. */527 522 ddf_fun_destroy(fun); 528 523 } else { 529 524 usb_log_error( 530 525 "Failed to unbind `%s', will not destroy.\n", 531 fun->name);526 ddf_fun_get_name(fun)); 532 527 } 533 528 return rc; … … 757 752 if (ddf_fun_unbind(kbd_dev->fun) != EOK) { 758 753 usb_log_warning("Failed to unbind %s.\n", 759 kbd_dev->fun->name);754 ddf_fun_get_name(kbd_dev->fun)); 760 755 } else { 761 usb_log_debug2("%s unbound.\n", kbd_dev->fun->name);762 kbd_dev->fun->driver_data = NULL;756 usb_log_debug2("%s unbound.\n", 757 ddf_fun_get_name(kbd_dev->fun)); 763 758 ddf_fun_destroy(kbd_dev->fun); 764 759 } 765 760 } 766 free(kbd_dev);767 761 } 768 762 -
uspace/drv/bus/usb/usbhid/main.c
rbe2a38ad r56fd7cf 103 103 if (rc != EOK) { 104 104 usb_log_error("Failed to start polling fibril for `%s'.\n", 105 d ev->ddf_dev->name);105 ddf_dev_get_name(dev->ddf_dev)); 106 106 usb_hid_deinit(hid_dev); 107 107 return rc; … … 109 109 hid_dev->running = true; 110 110 111 usb_log_info("HID device `%s' ready to use.\n", dev->ddf_dev->name); 111 usb_log_info("HID device `%s' ready to use.\n", 112 ddf_dev_get_name(dev->ddf_dev)); 112 113 113 114 return EOK; … … 149 150 150 151 usb_hid_deinit(hid_dev); 151 usb_log_debug2("%s destruction complete.\n", d ev->ddf_dev->name);152 usb_log_debug2("%s destruction complete.\n", ddf_dev_get_name(dev->ddf_dev)); 152 153 return EOK; 153 154 } -
uspace/drv/bus/usb/usbhid/mouse/mousedev.c
rbe2a38ad r56fd7cf 34 34 * USB Mouse driver API. 35 35 */ 36 37 /* XXX Fix this */ 38 #define _DDF_DATA_IMPLANT 36 39 37 40 #include <usb/debug.h> … … 115 118 ipc_callid_t icallid, ipc_call_t *icall) 116 119 { 117 usb_mouse_t *mouse_dev = fun->driver_data;120 usb_mouse_t *mouse_dev = ddf_fun_data_get(fun); 118 121 119 122 if (mouse_dev == NULL) { … … 123 126 } 124 127 125 usb_log_debug("%s: fun->name: %s\n", __FUNCTION__, fun->name);128 usb_log_debug("%s: fun->name: %s\n", __FUNCTION__, ddf_fun_get_name(fun)); 126 129 usb_log_debug("%s: mouse_sess: %p\n", 127 130 __FUNCTION__, mouse_dev->mouse_sess); … … 133 136 mouse_dev->mouse_sess = sess; 134 137 usb_log_debug("Console session to %s set ok (%p).\n", 135 fun->name, sess);138 ddf_fun_get_name(fun), sess); 136 139 async_answer_0(icallid, EOK); 137 140 } else { 138 141 usb_log_error("Console session to %s already set.\n", 139 fun->name);142 ddf_fun_get_name(fun)); 140 143 async_answer_0(icallid, ELIMIT); 141 144 async_hangup(sess); … … 249 252 if (fun) { \ 250 253 if (ddf_fun_unbind((fun)) == EOK) { \ 251 (fun)->driver_data = NULL; \252 254 ddf_fun_destroy((fun)); \ 253 255 } else { \ 254 256 usb_log_error("Could not unbind function `%s', it " \ 255 "will not be destroyed.\n", (fun)->name); \257 "will not be destroyed.\n", ddf_fun_get_name(fun)); \ 256 258 } \ 257 259 } else (void)0 … … 272 274 } 273 275 274 fun->ops = &ops;275 fun->driver_data = mouse;276 ddf_fun_set_ops(fun, &ops); 277 ddf_fun_data_implant(fun, mouse); 276 278 277 279 int rc = ddf_fun_bind(fun); 278 280 if (rc != EOK) { 279 281 usb_log_error("Could not bind DDF function `%s': %s.\n", 280 fun->name, str_error(rc)); 281 fun->driver_data = NULL; 282 ddf_fun_get_name(fun), str_error(rc)); 282 283 ddf_fun_destroy(fun); 283 284 return rc; … … 285 286 286 287 usb_log_debug("Adding DDF function `%s' to category %s...\n", 287 fun->name, HID_MOUSE_CATEGORY);288 ddf_fun_get_name(fun), HID_MOUSE_CATEGORY); 288 289 rc = ddf_fun_add_to_category(fun, HID_MOUSE_CATEGORY); 289 290 if (rc != EOK) { … … 419 420 420 421 free(mouse_dev->buttons); 421 free(mouse_dev);422 422 } 423 423 -
uspace/drv/bus/usb/usbhid/multimedia/multimedia.c
rbe2a38ad r56fd7cf 86 86 { 87 87 usb_log_debug(NAME " default_connection_handler()\n"); 88 if (fun == NULL || fun->driver_data == NULL) { 89 async_answer_0(icallid, EINVAL); 90 return; 91 } 92 93 usb_multimedia_t *multim_dev = fun->driver_data; 88 89 usb_multimedia_t *multim_dev = ddf_fun_data_get(fun); 94 90 95 91 async_sess_t *sess = … … 172 168 } 173 169 174 fun->ops = &multimedia_ops;170 ddf_fun_set_ops(fun, &multimedia_ops); 175 171 176 172 usb_multimedia_t *multim_dev = … … 194 190 195 191 usb_log_debug(NAME " function created (handle: %" PRIun ").\n", 196 fun->handle);192 ddf_fun_get_handle(fun)); 197 193 198 194 rc = ddf_fun_add_to_category(fun, "keyboard"); … … 203 199 if (ddf_fun_unbind(fun) != EOK) { 204 200 usb_log_error("Failed to unbind %s, won't destroy.\n", 205 fun->name);201 ddf_fun_get_name(fun)); 206 202 } else { 207 203 ddf_fun_destroy(fun); … … 220 216 { 221 217 ddf_fun_t *fun = data; 222 if (fun != NULL && fun->driver_data != NULL) { 223 usb_multimedia_t *multim_dev = fun->driver_data; 224 /* Hangup session to the console */ 225 if (multim_dev->console_sess) 226 async_hangup(multim_dev->console_sess); 227 if (ddf_fun_unbind(fun) != EOK) { 228 usb_log_error("Failed to unbind %s, won't destroy.\n", 229 fun->name); 230 } else { 231 usb_log_debug2("%s unbound.\n", fun->name); 232 /* This frees multim_dev too as it was stored in 233 * fun->data */ 234 ddf_fun_destroy(fun); 235 } 218 219 usb_multimedia_t *multim_dev = ddf_fun_data_get(fun); 220 221 /* Hangup session to the console */ 222 if (multim_dev->console_sess) 223 async_hangup(multim_dev->console_sess); 224 if (ddf_fun_unbind(fun) != EOK) { 225 usb_log_error("Failed to unbind %s, won't destroy.\n", 226 ddf_fun_get_name(fun)); 236 227 } else { 237 usb_log_error( 238 "Failed to deinit multimedia subdriver, data missing.\n"); 228 usb_log_debug2("%s unbound.\n", ddf_fun_get_name(fun)); 229 /* This frees multim_dev too as it was stored in 230 * fun->data */ 231 ddf_fun_destroy(fun); 239 232 } 240 233 } … … 244 237 // TODO: checks 245 238 ddf_fun_t *fun = data; 246 if (hid_dev == NULL || fun == NULL || fun->driver_data == NULL) {239 if (hid_dev == NULL) { 247 240 return false; 248 241 } 249 242 250 usb_multimedia_t *multim_dev = fun->driver_data;243 usb_multimedia_t *multim_dev = ddf_fun_data_get(fun); 251 244 252 245 usb_hid_report_path_t *path = usb_hid_report_path(); -
uspace/drv/bus/usb/usbhub/port.c
rbe2a38ad r56fd7cf 436 436 usb_log_info("Detected new device on `%s' (port %zu), " 437 437 "address %d (handle %" PRIun ").\n", 438 data->hub->usb_device->ddf_dev->name, 439 data->port->port_number, new_address, child_fun->handle); 438 ddf_dev_get_name(data->hub->usb_device->ddf_dev), 439 data->port->port_number, new_address, 440 ddf_fun_get_handle(child_fun)); 440 441 } else { 441 442 usb_log_error("Failed registering device on port %zu: %s.\n", -
uspace/drv/bus/usb/usbhub/usbhub.c
rbe2a38ad r56fd7cf 160 160 hub_dev->running = true; 161 161 usb_log_info("Controlling hub '%s' (%zu ports).\n", 162 hub_dev->usb_device->ddf_dev->name, hub_dev->port_count);162 ddf_dev_get_name(hub_dev->usb_device->ddf_dev), hub_dev->port_count); 163 163 164 164 usb_pipe_end_long_transfer(&usb_dev->ctrl_pipe); -
uspace/drv/bus/usb/usbmast/main.c
rbe2a38ad r56fd7cf 160 160 mdev->usb_dev = dev; 161 161 162 usb_log_info("Initializing mass storage `%s'.\n", d ev->ddf_dev->name);162 usb_log_info("Initializing mass storage `%s'.\n", ddf_dev_get_name(dev->ddf_dev)); 163 163 usb_log_debug("Bulk in endpoint: %d [%zuB].\n", 164 164 dev->pipes[BULK_IN_EP].pipe.endpoint_no, … … 245 245 246 246 /* Set up a connection handler. */ 247 fun->conn_handler = usbmast_bd_connection;247 ddf_fun_set_conn_handler(fun, usbmast_bd_connection); 248 248 249 249 usb_log_debug("Inquire...\n"); … … 252 252 if (rc != EOK) { 253 253 usb_log_warning("Failed to inquire device `%s': %s.\n", 254 mdev->ddf_dev->name, str_error(rc));254 ddf_dev_get_name(mdev->ddf_dev), str_error(rc)); 255 255 rc = EIO; 256 256 goto error; … … 259 259 usb_log_info("Mass storage `%s' LUN %u: " \ 260 260 "%s by %s rev. %s is %s (%s).\n", 261 mdev->ddf_dev->name,261 ddf_dev_get_name(mdev->ddf_dev), 262 262 lun, 263 263 inquiry.product, … … 272 272 if (rc != EOK) { 273 273 usb_log_warning("Failed to read capacity, device `%s': %s.\n", 274 mdev->ddf_dev->name, str_error(rc));274 ddf_dev_get_name(mdev->ddf_dev), str_error(rc)); 275 275 rc = EIO; 276 276 goto error; … … 310 310 usbmast_fun_t *mfun; 311 311 312 mfun = (usbmast_fun_t *) ((ddf_fun_t *)arg)->driver_data;312 mfun = (usbmast_fun_t *) ddf_fun_data_get((ddf_fun_t *)arg); 313 313 bd_conn(iid, icall, &mfun->bds); 314 314 } -
uspace/drv/bus/usb/usbmast/scsi_ms.c
rbe2a38ad r56fd7cf 88 88 if (rc != EOK) { 89 89 usb_log_error("Inquiry transport failed, device %s: %s.\n", 90 mfun->mdev->ddf_dev->name, str_error(rc));90 ddf_dev_get_name(mfun->mdev->ddf_dev), str_error(rc)); 91 91 return rc; 92 92 } … … 96 96 97 97 usb_log_error("SCSI command failed, device %s.\n", 98 mfun->mdev->ddf_dev->name);98 ddf_dev_get_name(mfun->mdev->ddf_dev)); 99 99 100 100 rc = usbmast_request_sense(mfun, &sense_buf, sizeof(sense_buf)); … … 147 147 if (rc != EOK) { 148 148 usb_log_error("Inquiry transport failed, device %s: %s.\n", 149 mfun->mdev->ddf_dev->name, str_error(rc));149 ddf_dev_get_name(mfun->mdev->ddf_dev), str_error(rc)); 150 150 return rc; 151 151 } … … 153 153 if (cmd.status != CMDS_GOOD) { 154 154 usb_log_error("Inquiry command failed, device %s.\n", 155 mfun->mdev->ddf_dev->name);155 ddf_dev_get_name(mfun->mdev->ddf_dev)); 156 156 return EIO; 157 157 } … … 215 215 if (rc != EOK || cmd.status != CMDS_GOOD) { 216 216 usb_log_error("Request Sense failed, device %s: %s.\n", 217 mfun->mdev->ddf_dev->name, str_error(rc));217 ddf_dev_get_name(mfun->mdev->ddf_dev), str_error(rc)); 218 218 return rc; 219 219 } … … 257 257 if (rc != EOK) { 258 258 usb_log_error("Read Capacity (10) transport failed, device %s: %s.\n", 259 mfun->mdev->ddf_dev->name, str_error(rc));259 ddf_dev_get_name(mfun->mdev->ddf_dev), str_error(rc)); 260 260 return rc; 261 261 } … … 263 263 if (cmd.status != CMDS_GOOD) { 264 264 usb_log_error("Read Capacity (10) command failed, device %s.\n", 265 mfun->mdev->ddf_dev->name);265 ddf_dev_get_name(mfun->mdev->ddf_dev)); 266 266 return EIO; 267 267 } … … 314 314 if (rc != EOK) { 315 315 usb_log_error("Read (10) transport failed, device %s: %s.\n", 316 mfun->mdev->ddf_dev->name, str_error(rc));316 ddf_dev_get_name(mfun->mdev->ddf_dev), str_error(rc)); 317 317 return rc; 318 318 } … … 320 320 if (cmd.status != CMDS_GOOD) { 321 321 usb_log_error("Read (10) command failed, device %s.\n", 322 mfun->mdev->ddf_dev->name);322 ddf_dev_get_name(mfun->mdev->ddf_dev)); 323 323 return EIO; 324 324 } … … 370 370 if (rc != EOK) { 371 371 usb_log_error("Write (10) transport failed, device %s: %s.\n", 372 mfun->mdev->ddf_dev->name, str_error(rc));372 ddf_dev_get_name(mfun->mdev->ddf_dev), str_error(rc)); 373 373 return rc; 374 374 } … … 376 376 if (cmd.status != CMDS_GOOD) { 377 377 usb_log_error("Write (10) command failed, device %s.\n", 378 mfun->mdev->ddf_dev->name);378 ddf_dev_get_name(mfun->mdev->ddf_dev)); 379 379 return EIO; 380 380 } -
uspace/drv/bus/usb/usbmid/explore.c
rbe2a38ad r56fd7cf 172 172 return false; 173 173 } 174 usb_mid->ctl_fun->ops = &mid_device_ops;174 ddf_fun_set_ops(usb_mid->ctl_fun, &mid_device_ops); 175 175 176 176 /* Bind control function. */ -
uspace/drv/bus/usb/usbmid/main.c
rbe2a38ad r56fd7cf 51 51 static int usbmid_device_add(usb_device_t *dev) 52 52 { 53 usb_log_info("Taking care of new MID `%s'.\n", d ev->ddf_dev->name);53 usb_log_info("Taking care of new MID `%s'.\n", ddf_dev_get_name(dev->ddf_dev)); 54 54 55 55 const bool accept = usbmid_explore_device(dev); … … 127 127 assert(usb_mid); 128 128 129 usb_log_info("USB MID gone: `%s'.\n", d ev->ddf_dev->name);129 usb_log_info("USB MID gone: `%s'.\n", ddf_dev_get_name(dev->ddf_dev)); 130 130 131 131 /* Remove ctl function */ -
uspace/drv/bus/usb/usbmid/usbmid.c
rbe2a38ad r56fd7cf 30 30 * @{ 31 31 */ 32 33 /* XXX Fix this */ 34 #define _DDF_DATA_IMPLANT 35 32 36 /** 33 37 * @file … … 47 51 static int usb_iface_get_interface_impl(ddf_fun_t *fun, int *iface_no) 48 52 { 49 assert(fun); 50 51 usbmid_interface_t *iface = fun->driver_data; 53 usbmid_interface_t *iface = ddf_fun_data_get(fun); 52 54 assert(iface); 53 55 … … 123 125 } 124 126 127 match_id_list_t match_ids; 128 init_match_ids(&match_ids); 129 125 130 rc = usb_device_create_match_ids_from_interface(device_descriptor, 126 interface_descriptor, & child->match_ids);131 interface_descriptor, &match_ids); 127 132 if (rc != EOK) { 128 133 ddf_fun_destroy(child); 129 134 return rc; 130 135 } 136 137 list_foreach(match_ids.ids, link) { 138 match_id_t *match_id = list_get_instance(link, match_id_t, link); 139 rc = ddf_fun_add_match_id(child, match_id->id, match_id->score); 140 if (rc != EOK) { 141 clean_match_ids(&match_ids); 142 ddf_fun_destroy(child); 143 return rc; 144 } 145 } 146 clean_match_ids(&match_ids); 131 147 132 148 rc = ddf_fun_bind(child); … … 138 154 139 155 iface->fun = child; 140 child->driver_data = iface;141 child->ops = &child_device_ops;156 ddf_fun_data_implant(child, iface); 157 ddf_fun_set_ops(child, &child_device_ops); 142 158 143 159 return EOK; -
uspace/drv/bus/usb/vhc/conndev.c
rbe2a38ad r56fd7cf 94 94 ipc_call_t *icall) 95 95 { 96 vhc_data_t *vhc = fun->dev->driver_data;96 vhc_data_t *vhc = ddf_dev_data_get(ddf_fun_get_dev(fun)); 97 97 98 98 async_sess_t *callback = … … 125 125 void on_client_close(ddf_fun_t *fun) 126 126 { 127 vhc_data_t *vhc = fun->dev->driver_data;127 vhc_data_t *vhc = ddf_dev_data_get(ddf_fun_get_dev(fun)); 128 128 129 129 if (plugged_device_handle != 0) { -
uspace/drv/bus/usb/vhc/connhost.c
rbe2a38ad r56fd7cf 42 42 43 43 #define GET_VHC_DATA(fun) \ 44 ((vhc_data_t *) fun->dev->driver_data)44 ((vhc_data_t *)ddf_dev_data_get(ddf_fun_get_dev(fun))) 45 45 #define VHC_DATA(vhc, fun) \ 46 46 vhc_data_t *vhc = GET_VHC_DATA(fun); assert(vhc->magic == 0xdeadbeef) … … 483 483 VHC_DATA(vhc, root_hub_fun); 484 484 485 *handle = vhc->hc_fun->handle;485 *handle = ddf_fun_get_handle(vhc->hc_fun); 486 486 487 487 return EOK; … … 492 492 VHC_DATA(vhc, root_hub_fun); 493 493 494 devman_handle_t handle = root_hub_fun->handle;494 devman_handle_t handle = ddf_fun_get_handle(root_hub_fun); 495 495 496 496 usb_log_debug("tell_address_rh(handle=%" PRIun ")\n", handle); -
uspace/drv/bus/usb/vhc/hub.c
rbe2a38ad r56fd7cf 100 100 async_sess_t *sess; 101 101 do { 102 sess = devman_device_connect(EXCHANGE_SERIALIZE, hc_dev->handle, 0); 102 sess = devman_device_connect(EXCHANGE_SERIALIZE, 103 ddf_fun_get_handle(hc_dev), 0); 103 104 } while (!sess); 104 105 async_hangup(sess); … … 107 108 108 109 usb_hc_connection_t hc_conn; 109 usb_hc_connection_initialize(&hc_conn, hc_dev->handle);110 usb_hc_connection_initialize(&hc_conn, ddf_fun_get_handle(hc_dev)); 110 111 111 112 rc = usb_hc_connection_open(&hc_conn); … … 113 114 114 115 ddf_fun_t *hub_dev; 115 rc = usb_hc_new_device_wrapper( hc_dev->dev, &hc_conn, USB_SPEED_FULL,116 rc = usb_hc_new_device_wrapper(ddf_fun_get_dev(hc_dev), &hc_conn, USB_SPEED_FULL, 116 117 pretend_port_rest, NULL, NULL, &rh_ops, hc_dev, &hub_dev); 117 118 if (rc != EOK) { … … 123 124 124 125 usb_log_info("Created root hub function (handle %zu).\n", 125 (size_t) hub_dev->handle);126 (size_t) ddf_fun_get_handle(hub_dev)); 126 127 127 128 return 0; -
uspace/drv/bus/usb/vhc/main.c
rbe2a38ad r56fd7cf 67 67 } 68 68 69 vhc_data_t *data = malloc(sizeof(vhc_data_t));69 vhc_data_t *data = ddf_dev_data_alloc(dev, sizeof(vhc_data_t)); 70 70 if (data == NULL) { 71 71 usb_log_fatal("Failed to allocate memory.\n"); … … 89 89 } 90 90 91 hc->ops = &vhc_ops;91 ddf_fun_set_ops(hc, &vhc_ops); 92 92 list_initialize(&data->devices); 93 93 fibril_mutex_initialize(&data->guard); 94 94 data->hub = &virtual_hub_device; 95 95 data->hc_fun = hc; 96 97 dev->driver_data = data;98 96 99 97 rc = ddf_fun_bind(hc); … … 116 114 117 115 usb_log_info("Virtual USB host controller ready (dev %zu, hc %zu).\n", 118 (size_t) dev->handle, (size_t) hc->handle); 119 120 116 (size_t) ddf_dev_get_handle(dev), (size_t) ddf_fun_get_handle(hc)); 121 117 122 118 rc = vhc_virtdev_plug_hub(data, data->hub, NULL);
Note:
See TracChangeset
for help on using the changeset viewer.