MCPcopy Create free account
hub / github.com/RT-Thread/rt-thread / blk_dev_control

Function blk_dev_control

components/fal/src/fal_rtt.c:38–82  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

36static rt_err_t blk_dev_control(rt_device_t dev, int cmd, void *args)
37#else
38static rt_err_t blk_dev_control(rt_device_t dev, rt_uint8_t cmd, void *args)
39#endif
40{
41 struct fal_blk_device *part = (struct fal_blk_device*) dev;
42
43 RT_ASSERT(part != RT_NULL);
44
45 if (cmd == RT_DEVICE_CTRL_BLK_GETGEOME)
46 {
47 struct rt_device_blk_geometry *geometry;
48
49 geometry = (struct rt_device_blk_geometry *) args;
50 if (geometry == RT_NULL)
51 {
52 return -RT_ERROR;
53 }
54
55 rt_memcpy(geometry, &part->geometry, sizeof(struct rt_device_blk_geometry));
56 }
57 else if (cmd == RT_DEVICE_CTRL_BLK_ERASE)
58 {
59 rt_uint32_t *addrs = (rt_uint32_t *) args, start_addr = addrs[0], end_addr = addrs[1], phy_start_addr;
60 rt_size_t phy_size;
61
62 if (addrs == RT_NULL || start_addr > end_addr)
63 {
64 return -RT_ERROR;
65 }
66
67 if (end_addr == start_addr)
68 {
69 end_addr++;
70 }
71
72 phy_start_addr = start_addr * part->geometry.bytes_per_sector;
73 phy_size = (end_addr - start_addr) * part->geometry.bytes_per_sector;
74
75 if (fal_partition_erase(part->fal_part, phy_start_addr, phy_size) < 0)
76 {
77 return -RT_ERROR;
78 }
79 }
80
81 return RT_EOK;
82}
83
84static rt_ssize_t blk_dev_read(rt_device_t dev, rt_off_t pos, void* buffer, rt_size_t size)
85{

Callers

nothing calls this directly

Calls 2

rt_memcpyFunction · 0.85
fal_partition_eraseFunction · 0.85

Tested by

no test coverage detected