1 /*
2  * Copyright (c) 2006-2023, RT-Thread Development Team
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  *
6  * Change Logs:
7  * Date           Author       Notes
8  * 2023-02-25     GuEe-GUI     first version
9  */
10 
11 #ifndef __BLK_DEV_H__
12 #define __BLK_DEV_H__
13 
14 #include <rthw.h>
15 #include <rtthread.h>
16 #include <drivers/blk.h>
17 #include <drivers/misc.h>
18 
19 #define to_blk_disk(dev)    rt_container_of(dev, struct rt_blk_disk, parent)
20 #define to_blk(dev)         rt_container_of(dev, struct rt_blk_device, parent)
21 
22 #ifdef RT_USING_DM
23 #define to_disk_name(disk)  rt_dm_dev_get_name(&(disk)->parent)
24 #define to_blk_name(blk)    rt_dm_dev_get_name(&(blk)->parent)
25 #else
26 #define to_disk_name(disk)  (disk)->parent.parent.name
27 #define to_blk_name(blk)    (blk)->parent.parent.name
28 #endif
29 
30 /* %c%c name */
31 #define letter_name(n)      ('a' + (n) / ((n) >= 26 ? (26 * 2) : 1)), ((n) >= 26 ? 'a' + (n) % 26 : '\0')
32 
spin_lock(struct rt_spinlock * spinlock)33 rt_inline void spin_lock(struct rt_spinlock *spinlock)
34 {
35     rt_hw_spin_lock(&spinlock->lock);
36 }
37 
spin_unlock(struct rt_spinlock * spinlock)38 rt_inline void spin_unlock(struct rt_spinlock *spinlock)
39 {
40     rt_hw_spin_unlock(&spinlock->lock);
41 }
42 
43 rt_err_t blk_dev_initialize(struct rt_blk_device *blk);
44 rt_err_t disk_add_blk_dev(struct rt_blk_disk *disk, struct rt_blk_device *blk);
45 rt_err_t disk_remove_blk_dev(struct rt_blk_device *blk, rt_bool_t lockless);
46 
47 rt_uint32_t blk_request_ioprio(void);
48 
49 #endif /* __BLK_DEV_H__ */
50