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