NeKernel dev
Loading...
Searching...
No Matches
DriveMgr.h
Go to the documentation of this file.
1/* ========================================
2
3 Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license.
4
5======================================== */
6
7#ifndef INC_DRIVE_MANAGER_H
8#define INC_DRIVE_MANAGER_H
9
13
16#include <KernelKit/DeviceMgr.h>
17#include <KernelKit/KPC.h>
19#include <NeKit/Config.h>
20#include <NeKit/KString.h>
21#include <NeKit/Ref.h>
22
23#define kDriveMaxCount (4U)
24#define kDriveSectorSz (512U)
25#define kDriveInvalidID (-1)
26#define kDriveNameLen (32)
27
28#define drv_sector_cnt(SIZE, SECTOR_SZ) (((SIZE) + (SECTOR_SZ)) / (SECTOR_SZ))
29
30#define kDriveHiddenPrefix '~'
31
32namespace Kernel {
33enum {
35
40 kOpticalDrive = 0xDC, // CD-ROM/DVD-ROM/Blu-Ray
41 kTapeDrive = 0xD7,
42
44 kReadOnlyDrive = 0x10, // Read only drive
45 kEPMDrive = 0x11, // Explicit Partition Map.
46 kVEPMDrive = 0x12, // ESP w/ EPM partition.
47 kMBRDrive = 0x13, // PC classic partition scheme
48 kGPTDrive = 0x14, // PC new partition scheme
51};
52
54struct DriveTrait final {
55 Char fName[kDriveNameLen] = "/media/null"; // /System, /boot, //./Devices/USB...
56 UInt32 fKind{}; // fMassStorage, fFloppy, fOpticalDrive.
57 UInt32 fFlags{}; // fReadOnly, fEPMDrive...
58
69
72
73 Void (*fInput)(DrivePacket& packet){nullptr};
74 Void (*fOutput)(DrivePacket& packet){nullptr};
75 Void (*fVerify)(DrivePacket& packet){nullptr};
76 Void (*fInit)(DrivePacket& packet){nullptr};
77 const Char* (*fProtocol)(Void) {nullptr};
78};
79
80namespace Probe {
82}
83
86
92class IMountpoint final {
93 public:
94 explicit IMountpoint() = default;
95 ~IMountpoint() = default;
96
98
99 public:
100 DriveTrait& A() { return mA; }
101
102 DriveTrait& B() { return mB; }
103
104 DriveTrait& C() { return mC; }
105
106 DriveTrait& D() { return mD; }
107
108 enum {
114 };
115
118
119 switch (index) {
120 case kDriveIndexA:
121 return &mA;
122 case kDriveIndexB:
123 return &mB;
124 case kDriveIndexC:
125 return &mC;
126 case kDriveIndexD:
127 return &mD;
128 default: {
130 kout << "No such disc letter.\n";
131
132 break;
133 }
134 }
135
136 return nullptr;
137 }
138
139 private:
141};
142
147
151const Char* io_drv_kind(Void);
152
156
160
165
166namespace Detect {
168}
169
171
173} // namespace Kernel
174
175#endif /* ifndef INC_DRIVE_MANAGER_H */
#define kout
Definition DebugOutput.h:189
#define NE_COPY_DEFAULT(KLASS)
Definition Detail.h:17
#define kDriveSectorSz
Definition DriveMgr.h:24
#define kDriveNameLen
Definition DriveMgr.h:26
#define YES
#define NO
Kernel Procedure Code.
#define err_local_get()
Definition KPC.h:20
DriveTrait mC
Definition DriveMgr.h:140
DriveTrait mA
Definition DriveMgr.h:140
~IMountpoint()=default
DriveTraitPtr GetAddressOf(const Int32 &index)
Definition DriveMgr.h:116
@ kDriveIndexA
Definition DriveMgr.h:109
@ kDriveIndexC
Definition DriveMgr.h:111
@ kDriveIndexB
Definition DriveMgr.h:110
@ kDriveIndexD
Definition DriveMgr.h:112
@ kDriveIndexInvalid
Definition DriveMgr.h:113
DriveTrait & B()
Definition DriveMgr.h:102
DriveTrait mD
Definition DriveMgr.h:140
DriveTrait & D()
Definition DriveMgr.h:106
DriveTrait & A()
Definition DriveMgr.h:100
DriveTrait & C()
Definition DriveMgr.h:104
DriveTrait mB
Definition DriveMgr.h:140
Definition DriveMgr.h:166
Void io_detect_drive(DriveTrait &trait)
Definition DriveMgr.h:80
Void io_detect_drive(DriveTrait &trait)
Definition DriveMgr.cc:153
UPS inline definitions.
Definition Device.h:12
char Char
Definition Config.h:51
void Void
Definition Config.h:87
constexpr KPCError kErrorSuccess
Definition KPC.h:32
DriveTrait io_construct_blank_drive()
Makes a new drive.
Definition DriveMgr.cc:133
@ kGPTDrive
Definition DriveMgr.h:48
@ kEPMDrive
Definition DriveMgr.h:45
@ kMBRDrive
Definition DriveMgr.h:47
@ kInvalidDrive
Definition DriveMgr.h:34
@ kTapeDrive
Definition DriveMgr.h:41
@ kReadOnlyDrive
Storage flags, combine with types.
Definition DriveMgr.h:44
@ kUnformattedDrive
Definition DriveMgr.h:49
@ kMassStorageDrive
Definition DriveMgr.h:38
@ kFloppyDrive
Definition DriveMgr.h:39
@ kVEPMDrive
Definition DriveMgr.h:46
@ kOpticalDrive
Definition DriveMgr.h:40
@ kStorageCount
Definition DriveMgr.h:50
@ kBlockDevice
Storage types, combine with flags.
Definition DriveMgr.h:37
constexpr KPCError kErrorNoSuchDisk
Definition KPC.h:45
DriveTrait * DriveTraitPtr
! drive as a device.
Definition DriveMgr.h:85
UInt64 Lba
Definition Config.h:90
__SIZE_TYPE__ SizeT
Definition Config.h:60
Void io_drv_unimplemented(DriveTrait::DrivePacket *pckt)
Unimplemented drive.
Void io_drv_output(DriveTrait::DrivePacket pckt)
const Char * io_drv_kind(Void)
Gets the drive kind (ATA, SCSI, AHCI...).
Definition DriveMgr.cc:120
__UINT32_TYPE__ UInt32
Definition Config.h:44
void * VoidPtr
Definition Config.h:33
__INT32_TYPE__ Int32
Definition Config.h:38
bool Boolean
Definition Config.h:49
Void io_drv_input(DriveTrait::DrivePacket pckt)
DriveTrait io_construct_main_drive()
Fetches the main drive.
Definition DriveMgr.cc:219
Packet drive (StorageKit compilant.).
Definition DriveMgr.h:60
Char fPacketMime[kDriveNameLen]
packet body.
Definition DriveMgr.h:62
SizeT fPacketSize
identify what we're sending.
Definition DriveMgr.h:63
UInt32 fPacketCRC32
packet size
Definition DriveMgr.h:64
VoidPtr fPacketContent
Definition DriveMgr.h:61
Boolean fPacketReadOnly
Definition DriveMgr.h:67
Boolean fPacketGood
sanity crc, in case if good is set to false
Definition DriveMgr.h:65
Lba fPacketLba
Definition DriveMgr.h:66
Media drive trait type.
Definition DriveMgr.h:54
Void(* fVerify)(DrivePacket &packet)
Definition DriveMgr.h:75
Char fName[kDriveNameLen]
Definition DriveMgr.h:55
SizeT fSectorSz
Definition DriveMgr.h:71
Void(* fOutput)(DrivePacket &packet)
Definition DriveMgr.h:74
UInt32 fKind
Definition DriveMgr.h:56
struct Kernel::DriveTrait::DrivePacket fPacket
Lba fLbaEnd
Definition DriveMgr.h:70
UInt32 fFlags
Definition DriveMgr.h:57
Void(* fInput)(DrivePacket &packet)
Definition DriveMgr.h:73
Lba fLbaStart
Definition DriveMgr.h:70
Void(* fInit)(DrivePacket &packet)
Definition DriveMgr.h:76