Changeset 20a3465 in mainline for uspace/drv/bus/usb/usbmast/main.c
- Timestamp:
- 2011-10-30T19:50:54Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 3ce78580, 48902fa
- Parents:
- 4c3ad56 (diff), 45bf63c (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. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/bus/usb/usbmast/main.c
r4c3ad56 r20a3465 55 55 #define GET_BULK_OUT(dev) ((dev)->pipes[BULK_OUT_EP].pipe) 56 56 57 static usb_endpoint_description_t bulk_in_ep = {57 static const usb_endpoint_description_t bulk_in_ep = { 58 58 .transfer_type = USB_TRANSFER_BULK, 59 59 .direction = USB_DIRECTION_IN, … … 63 63 .flags = 0 64 64 }; 65 static usb_endpoint_description_t bulk_out_ep = {65 static const usb_endpoint_description_t bulk_out_ep = { 66 66 .transfer_type = USB_TRANSFER_BULK, 67 67 .direction = USB_DIRECTION_OUT, … … 72 72 }; 73 73 74 usb_endpoint_description_t *mast_endpoints[] = {74 static const usb_endpoint_description_t *mast_endpoints[] = { 75 75 &bulk_in_ep, 76 76 &bulk_out_ep, … … 82 82 void *arg); 83 83 84 /** Callback when a device is removed from the system. 85 * 86 * @param dev Representation of USB device. 87 * @return Error code. 88 */ 89 static int usbmast_device_gone(usb_device_t *dev) 90 { 91 usbmast_dev_t *mdev = dev->driver_data; 92 assert(mdev); 93 94 for (size_t i = 0; i < mdev->lun_count; ++i) { 95 const int rc = ddf_fun_unbind(mdev->luns[i]); 96 if (rc != EOK) { 97 usb_log_error("Failed to unbind LUN function %zu: " 98 "%s\n", i, str_error(rc)); 99 return rc; 100 } 101 ddf_fun_destroy(mdev->luns[i]); 102 mdev->luns[i] = NULL; 103 } 104 free(mdev->luns); 105 return EOK; 106 } 107 108 /** Callback when a device is about to be removed. 109 * 110 * @param dev Representation of USB device. 111 * @return Error code. 112 */ 113 static int usbmast_device_remove(usb_device_t *dev) 114 { 115 //TODO: flush buffers, or whatever. 116 return ENOTSUP; 117 } 118 84 119 /** Callback when new device is attached and recognized as a mass storage. 85 120 * 86 * @param dev Representation of a theUSB device.121 * @param dev Representation of USB device. 87 122 * @return Error code. 88 123 */ … … 94 129 95 130 /* Allocate softstate */ 96 dev->driver_data = mdev = malloc(sizeof(usbmast_dev_t));131 mdev = usb_device_data_alloc(dev, sizeof(usbmast_dev_t)); 97 132 if (mdev == NULL) { 98 133 usb_log_error("Failed allocating softstate.\n"); … … 112 147 113 148 usb_log_debug("Get LUN count...\n"); 114 mdev->luns = usb_masstor_get_lun_count(mdev); 115 116 for (i = 0; i < mdev->luns; i++) { 149 mdev->lun_count = usb_masstor_get_lun_count(mdev); 150 mdev->luns = calloc(mdev->lun_count, sizeof(ddf_fun_t*)); 151 if (mdev->luns == NULL) { 152 rc = ENOMEM; 153 usb_log_error("Failed allocating luns table.\n"); 154 goto error; 155 } 156 157 for (i = 0; i < mdev->lun_count; i++) { 117 158 rc = usbmast_fun_create(mdev, i); 118 159 if (rc != EOK) … … 122 163 return EOK; 123 164 error: 124 /* XXX Destroy functions */ 165 /* Destroy functions */ 166 for (size_t i = 0; i < mdev->lun_count; ++i) { 167 if (mdev->luns[i] == NULL) 168 continue; 169 const int rc = ddf_fun_unbind(mdev->luns[i]); 170 if (rc != EOK) { 171 usb_log_warning("Failed to unbind LUN function %zu: " 172 "%s.\n", i, str_error(rc)); 173 } 174 ddf_fun_destroy(mdev->luns[i]); 175 } 176 free(mdev->luns); 125 177 return rc; 126 178 } … … 162 214 } 163 215 216 mfun->ddf_fun = fun; 164 217 mfun->mdev = mdev; 165 218 mfun->lun = lun; … … 212 265 213 266 free(fun_name); 267 mdev->luns[lun] = fun; 214 268 215 269 return EOK; … … 293 347 294 348 /** USB mass storage driver ops. */ 295 static usb_driver_ops_t usbmast_driver_ops = {349 static const usb_driver_ops_t usbmast_driver_ops = { 296 350 .device_add = usbmast_device_add, 351 .device_rem = usbmast_device_remove, 352 .device_gone = usbmast_device_gone, 297 353 }; 298 354 299 355 /** USB mass storage driver. */ 300 static usb_driver_t usbmast_driver = {356 static const usb_driver_t usbmast_driver = { 301 357 .name = NAME, 302 358 .ops = &usbmast_driver_ops,
Note:
See TracChangeset
for help on using the changeset viewer.