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

Function disk_add_blk_dev

components/drivers/block/blk_dev.c:176–238  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

174}
175
176rt_err_t disk_add_blk_dev(struct rt_blk_disk *disk, struct rt_blk_device *blk)
177{
178 rt_err_t err;
179#ifdef RT_USING_DM
180 int device_id;
181#endif
182 const char *disk_name, *name_fmt;
183
184 if (!disk || !blk)
185 {
186 return -RT_EINVAL;
187 }
188
189#ifdef RT_USING_DM
190 if ((device_id = rt_dm_ida_alloc(disk->ida)) < 0)
191 {
192 return -RT_EFULL;
193 }
194#endif
195
196 blk->disk = disk;
197 rt_list_init(&blk->list);
198
199 disk_name = to_disk_name(disk);
200
201 /* End is [a-zA-Z] or [0-9] */
202 if (disk_name[rt_strlen(disk_name) - 1] < 'a')
203 {
204 name_fmt = "%sp%d";
205 }
206 else
207 {
208 name_fmt = "%s%d";
209 }
210
211#ifdef RT_USING_DM
212 rt_dm_dev_set_name(&blk->parent, name_fmt, disk_name, blk->partno);
213 blk->parent.master_id = disk->ida->master_id;
214 blk->parent.device_id = device_id;
215#else
216 rt_snprintf(blk->parent.parent.name, RT_NAME_MAX, name_fmt, disk_name, blk->partno);
217#endif
218 device_set_blk_fops(&blk->parent);
219
220 err = rt_device_register(&blk->parent, to_blk_name(blk),
221 disk->parent.flag & RT_DEVICE_FLAG_RDWR);
222
223 if (err)
224 {
225 #ifdef RT_USING_DM
226 rt_dm_ida_free(disk->ida, device_id);
227 #endif
228 return err;
229 }
230
231 spin_lock(&disk->lock);
232
233 rt_list_insert_before(&disk->part_nodes, &blk->list);

Callers 1

blk_put_partitionFunction · 0.85

Calls 11

rt_dm_ida_allocFunction · 0.85
rt_list_initFunction · 0.85
rt_strlenFunction · 0.85
rt_dm_dev_set_nameFunction · 0.85
rt_snprintfFunction · 0.85
device_set_blk_fopsFunction · 0.85
rt_device_registerFunction · 0.85
rt_dm_ida_freeFunction · 0.85
rt_list_insert_beforeFunction · 0.85
spin_lockFunction · 0.70
spin_unlockFunction · 0.70

Tested by

no test coverage detected