xref: /DragonOS/kernel/src/driver/base/block/disk_info.rs (revision da152319797436368304cbc3f85a3b9ec049134b)
1 #![allow(dead_code)]
2 use alloc::sync::{Arc, Weak};
3 
4 use super::block_device::BlockDevice;
5 
6 pub type SectorT = u64;
7 
8 pub const BLK_TYPE_AHCI: u64 = 0;
9 pub const DISK_NAME_LEN: usize = 32; // 磁盘名称的最大长度
10 pub const BLK_GF_AHCI: u16 = 1 << 0; // 定义blk_gendisk中的标志位
11 
12 /// @brief: 磁盘的分区信息 - (保留了c版本的数据信息)
13 #[derive(Debug)]
14 pub struct Partition {
15     pub start_sector: SectorT,   // 该分区的起始扇区
16     pub lba_start: u64,          // 起始LBA号
17     pub sectors_num: u64,        // 该分区的扇区数
18     disk: Weak<dyn BlockDevice>, // 当前分区所属的磁盘
19     pub partno: u16,             // 在磁盘上的分区号
20 }
21 
22 /// @brief: 分区信息 - 成员函数
23 impl Partition {
24     /// @brief: 为 disk new 一个分区结构体
25     pub fn new(
26         start_sector: SectorT,
27         lba_start: u64,
28         sectors_num: u64,
29         disk: Weak<dyn BlockDevice>,
30         partno: u16,
31     ) -> Arc<Self> {
32         return Arc::new(Partition {
33             start_sector,
34             lba_start,
35             sectors_num,
36             disk,
37             partno,
38         });
39     }
40 
41     /// @brief 获取当前分区所属的磁盘的Arc指针
42     #[inline]
43     pub fn disk(&self) -> Arc<dyn BlockDevice> {
44         return self.disk.upgrade().unwrap();
45     }
46 }
47