Lines Matching +full:0 +full:- +full:dev

2  * Copyright (c) 2006-2018, RT-Thread Development Team
4 * SPDX-License-Identifier: Apache-2.0
8 * 2011-12-12 Yi Qiu first version
19 static rt_uint8_t _udisk_idset = 0;
25 for(i=0; i< UDISK_MAX_COUNT; i++) in udisk_get_id()
27 if((_udisk_idset & (1 << i)) != 0) continue; in udisk_get_id()
32 if(i == UDISK_MAX_COUNT) RT_ASSERT(0); in udisk_get_id()
48 * @param dev the pointer of device driver structure
52 static rt_err_t rt_udisk_init(rt_device_t dev) in rt_udisk_init() argument
60 * @param dev the pointer of device driver structure
67 static rt_size_t rt_udisk_read(rt_device_t dev, rt_off_t pos, void* buffer, in rt_udisk_read() argument
76 RT_ASSERT(dev != RT_NULL); in rt_udisk_read()
81 data = (struct ustor_data*)dev->user_data; in rt_udisk_read()
82 intf = data->intf; in rt_udisk_read()
89 return 0; in rt_udisk_read()
98 * @param dev the pointer of device driver structure
105 static rt_size_t rt_udisk_write (rt_device_t dev, rt_off_t pos, const void* buffer, in rt_udisk_write() argument
114 RT_ASSERT(dev != RT_NULL); in rt_udisk_write()
119 data = (struct ustor_data*)dev->user_data; in rt_udisk_write()
120 intf = data->intf; in rt_udisk_write()
126 return 0; in rt_udisk_write()
140 static rt_err_t rt_udisk_control(rt_device_t dev, int cmd, void *args) in rt_udisk_control() argument
146 RT_ASSERT(dev != RT_NULL); in rt_udisk_control()
148 data = (struct ustor_data*)dev->user_data; in rt_udisk_control()
149 stor = (ustor_t)data->intf->user_data; in rt_udisk_control()
156 if (geometry == RT_NULL) return -RT_ERROR; in rt_udisk_control()
158 geometry->bytes_per_sector = SECTOR_SIZE; in rt_udisk_control()
159 geometry->block_size = stor->capicity[1]; in rt_udisk_control()
160 geometry->sector_count = stor->capicity[0]; in rt_udisk_control()
187 int i = 0; in rt_udisk_run()
199 // ret = rt_usbh_set_interface(intf->device, intf->intf_desc->bInterfaceNumber); in rt_udisk_run()
201 // rt_usbh_clear_feature(intf->device, 0, USB_FEATURE_ENDPOINT_HALT); in rt_udisk_run()
206 stor = (ustor_t)intf->user_data; in rt_udisk_run()
211 rt_usbh_clear_feature(intf->device, 0, USB_FEATURE_ENDPOINT_HALT); in rt_udisk_run()
214 if(stor->pipe_in->status == UPIPE_STATUS_STALL) in rt_udisk_run()
216 ret = rt_usbh_clear_feature(intf->device, in rt_udisk_run()
217 stor->pipe_in->ep.bEndpointAddress, USB_FEATURE_ENDPOINT_HALT); in rt_udisk_run()
223 if(stor->pipe_out->status == UPIPE_STATUS_STALL) in rt_udisk_run()
225 ret = rt_usbh_clear_feature(intf->device, in rt_udisk_run()
226 stor->pipe_out->ep.bEndpointAddress, USB_FEATURE_ENDPOINT_HALT); in rt_udisk_run()
232 if(ret == -RT_EIO) return ret; in rt_udisk_run()
237 return -RT_ERROR; in rt_udisk_run()
240 i = 0; in rt_udisk_run()
245 if(ret == -RT_EIO) return ret; in rt_udisk_run()
248 if(ret == -RT_EIO) return ret; in rt_udisk_run()
254 return -RT_ERROR; in rt_udisk_run()
257 i = 0; in rt_udisk_run()
258 rt_memset(stor->capicity, 0, sizeof(stor->capicity)); in rt_udisk_run()
262 (rt_uint8_t*)stor->capicity)) != RT_EOK) in rt_udisk_run()
264 if(ret == -RT_EIO) return ret; in rt_udisk_run()
269 stor->capicity[0] = 2880; in rt_udisk_run()
270 stor->capicity[1] = 0x200; in rt_udisk_run()
276 stor->capicity[0] = uswap_32(stor->capicity[0]); in rt_udisk_run()
277 stor->capicity[1] = uswap_32(stor->capicity[1]); in rt_udisk_run()
278 stor->capicity[0] += 1; in rt_udisk_run()
281 stor->capicity[0], stor->capicity[1])); in rt_udisk_run()
288 return -RT_ERROR; in rt_udisk_run()
291 rt_memset(sector, 0, SECTOR_SIZE); in rt_udisk_run()
296 ret = rt_usbh_storage_read10(intf, sector, 0, 1, USB_TIMEOUT_LONG); in rt_udisk_run()
302 return -RT_ERROR; in rt_udisk_run()
307 for(i=0; i<MAX_PARTITION_COUNT; i++) in rt_udisk_run()
314 rt_memset(data, 0, sizeof(struct ustor_data)); in rt_udisk_run()
315 data->intf = intf; in rt_udisk_run()
316 data->udisk_id = udisk_get_id(); in rt_udisk_run()
317 rt_snprintf(dname, 6, "ud%d-%d", data->udisk_id, i); in rt_udisk_run()
319 data->part.lock = rt_sem_create(sname, 1, RT_IPC_FLAG_FIFO); in rt_udisk_run()
322 stor->dev[i].type = RT_Device_Class_Block; in rt_udisk_run()
324 stor->dev[i].ops = &udisk_device_ops; in rt_udisk_run()
326 stor->dev[i].init = rt_udisk_init; in rt_udisk_run()
327 stor->dev[i].read = rt_udisk_read; in rt_udisk_run()
328 stor->dev[i].write = rt_udisk_write; in rt_udisk_run()
329 stor->dev[i].control = rt_udisk_control; in rt_udisk_run()
331 stor->dev[i].user_data = (void*)data; in rt_udisk_run()
333 rt_device_register(&stor->dev[i], dname, RT_DEVICE_FLAG_RDWR | in rt_udisk_run()
336 stor->dev_cnt++; in rt_udisk_run()
337 if (dfs_mount(stor->dev[i].parent.name, UDISK_MOUNTPOINT, "elm", in rt_udisk_run()
338 0, 0) == 0) in rt_udisk_run()
349 if(i == 0) in rt_udisk_run()
352 rt_memset(data, 0, sizeof(struct ustor_data)); in rt_udisk_run()
353 data->udisk_id = udisk_get_id(); in rt_udisk_run()
356 data->part.offset = 0; in rt_udisk_run()
357 data->part.size = 0; in rt_udisk_run()
358 data->intf = intf; in rt_udisk_run()
359 data->part.lock = rt_sem_create("sem_ud", 1, RT_IPC_FLAG_FIFO); in rt_udisk_run()
361 rt_snprintf(dname, 7, "udisk%d", data->udisk_id); in rt_udisk_run()
364 stor->dev[0].type = RT_Device_Class_Block; in rt_udisk_run()
366 stor->dev[i].ops = &udisk_device_ops; in rt_udisk_run()
368 stor->dev[0].init = rt_udisk_init; in rt_udisk_run()
369 stor->dev[0].read = rt_udisk_read; in rt_udisk_run()
370 stor->dev[0].write = rt_udisk_write; in rt_udisk_run()
371 stor->dev[0].control = rt_udisk_control; in rt_udisk_run()
373 stor->dev[0].user_data = (void*)data; in rt_udisk_run()
375 rt_device_register(&stor->dev[0], dname, in rt_udisk_run()
379 stor->dev_cnt++; in rt_udisk_run()
380 if (dfs_mount(stor->dev[0].parent.name, UDISK_MOUNTPOINT, in rt_udisk_run()
381 "elm", 0, 0) == 0) in rt_udisk_run()
416 RT_ASSERT(intf->device != RT_NULL); in rt_udisk_stop()
418 stor = (ustor_t)intf->user_data; in rt_udisk_stop()
421 for(i=0; i<stor->dev_cnt; i++) in rt_udisk_stop()
423 rt_device_t dev = &stor->dev[i]; in rt_udisk_stop() local
424 data = (struct ustor_data*)dev->user_data; in rt_udisk_stop()
430 rt_sem_delete(data->part.lock); in rt_udisk_stop()
431 udisk_free_id(data->udisk_id); in rt_udisk_stop()
435 rt_device_unregister(&stor->dev[i]); in rt_udisk_stop()