diff options
Diffstat (limited to 'dev/boot')
| -rw-r--r-- | dev/boot/BootKit/BootKit.h | 12 | ||||
| -rw-r--r-- | dev/boot/BootKit/HW/SATA.h | 10 | ||||
| -rw-r--r-- | dev/boot/modules/SysChk/SysChk.cc | 14 | ||||
| -rw-r--r-- | dev/boot/modules/SysChk/amd64-ahci-epm.json | 12 | ||||
| -rw-r--r-- | dev/boot/modules/SysChk/amd64-ahci-gpt.json | 15 | ||||
| -rw-r--r-- | dev/boot/modules/SysChk/amd64-pio-gpt.json | 2 | ||||
| -rw-r--r-- | dev/boot/src/HEL/AMD64/BootATA.cc | 4 | ||||
| -rw-r--r-- | dev/boot/src/HEL/AMD64/BootPlatform.cc | 10 | ||||
| -rw-r--r-- | dev/boot/src/HEL/AMD64/BootSATA.cc | 62 | ||||
| -rw-r--r-- | dev/boot/src/HEL/ARM64/BootPlatform.cc | 2 |
10 files changed, 102 insertions, 41 deletions
diff --git a/dev/boot/BootKit/BootKit.h b/dev/boot/BootKit/BootKit.h index aa7dde85..7a25e2a5 100644 --- a/dev/boot/BootKit/BootKit.h +++ b/dev/boot/BootKit/BootKit.h @@ -170,7 +170,7 @@ EXTERN_C UInt8 rt_in8(UInt16 port); EXTERN_C UInt16 In16(UInt16 port); EXTERN_C UInt32 rt_in32(UInt16 port); -EXTERN_C void rt_hlt(); +EXTERN_C void rt_halt(); EXTERN_C void rt_cli(); EXTERN_C void rt_sti(); EXTERN_C void rt_cld(); @@ -256,16 +256,6 @@ class BDiskFormatFactory final { template <typename BootDev> inline Boolean BDiskFormatFactory<BootDev>::Format(const Char* part_name) { #if defined(BOOTZ_EPM_SUPPORT) - /// @note A catalog roughly equal to a sector in NeFS terms. - constexpr auto kMinimumDiskSize = kNeFSMinimumDiskSize; // at minimum. - - /// @note also look at EPM headers, for free part blocks. (only applies if EPM or vEPM is used) - - if (fDiskDev.GetDiskSize() < kMinimumDiskSize) { - Boot::ThrowError(L"Drive-Too-Tiny", L"Can't format a EPM partition here."); - return false; - } - EPM_PART_BLOCK epm_boot{}; const auto kFsName = "HeFS"; diff --git a/dev/boot/BootKit/HW/SATA.h b/dev/boot/BootKit/HW/SATA.h index 7e84c061..5c70c18c 100644 --- a/dev/boot/BootKit/HW/SATA.h +++ b/dev/boot/BootKit/HW/SATA.h @@ -6,6 +6,7 @@ #pragma once +#include <BootKit/BootKit.h> #include <CompilerKit/CompilerKit.h> #include <modules/AHCI/AHCI.h> @@ -20,14 +21,19 @@ class BootDeviceSATA final { Kernel::SizeT mBase{1024}; Kernel::Boolean mErr{false}; Kernel::Boolean mDetected{false}; + Kernel::SizeT mSize{0}; operator bool() { return !this->mErr; } }; operator bool() { return this->Leak().mDetected; } - BootDeviceSATA& Read(Kernel::WideChar* Buf, const Kernel::SizeT SecCount); - BootDeviceSATA& Write(Kernel::WideChar* Buf, const Kernel::SizeT SecCount); + SizeT GetDiskSize() { return drv_get_size(); } + + constexpr static auto kSectorSize = kAHCISectorSize; + + BootDeviceSATA& Read(Boot::CharacterTypeUTF8* Buf, const Kernel::SizeT SecCount); + BootDeviceSATA& Write(Boot::CharacterTypeUTF8* Buf, const Kernel::SizeT SecCount); SATATrait& Leak(); diff --git a/dev/boot/modules/SysChk/SysChk.cc b/dev/boot/modules/SysChk/SysChk.cc index a3697bb1..05ac6da0 100644 --- a/dev/boot/modules/SysChk/SysChk.cc +++ b/dev/boot/modules/SysChk/SysChk.cc @@ -9,6 +9,7 @@ #include <BootKit/BootKit.h> #include <BootKit/BootThread.h> +#include <BootKit/HW/SATA.h> #include <FirmwareKit/EFI.h> #include <FirmwareKit/EFI/API.h> #include <FirmwareKit/Handover.h> @@ -26,17 +27,16 @@ #endif // !kMachineModel EXTERN_C Int32 SysChkModuleMain(Kernel::HEL::BootInfoHeader* handover) { -#if defined(__ATA_PIO__) fw_init_efi((EfiSystemTable*) handover->f_FirmwareCustomTables[1]); +#if defined(__ATA_PIO__) Boot::BDiskFormatFactory<BootDeviceATA> partition_factory; - +#elif defined(__AHCI__) + Boot::BDiskFormatFactory<BootDeviceSATA> partition_factory; +#endif if (partition_factory.IsPartitionValid()) return kEfiOk; - return partition_factory.Format(kMachineModel) == YES; -#else - NE_UNUSED(handover); + auto ret = partition_factory.Format(kMachineModel) == YES; - return kEfiOk; -#endif + return ret; } diff --git a/dev/boot/modules/SysChk/amd64-ahci-epm.json b/dev/boot/modules/SysChk/amd64-ahci-epm.json index 1a82cf55..3c56cfe8 100644 --- a/dev/boot/modules/SysChk/amd64-ahci-epm.json +++ b/dev/boot/modules/SysChk/amd64-ahci-epm.json @@ -10,7 +10,13 @@ "../../src/HEL/AMD64/BootAPI.S", "../../src/BootTextWriter.cc", "../../src/BootSupport.cc", - "../../src/New+Delete.cc" + "../../src/New+Delete.cc", + "../../../kernel/HALKit/AMD64/PCI/*.cc", + "../../../kernel/HALKit/AMD64/Storage/*.cc", + "../../../kernel/src/Storage/*.cc", + "../../../kernel/HALKit/AMD64/*.cc", + "../../../kernel/HALKit/AMD64/*.s", + "../../../kernel/src/*.cc" ], "output_name": "chk.efi", "compiler_flags": [ @@ -22,11 +28,11 @@ ], "cpp_macros": [ "__NEOSKRNL__", - "__BOOTZ__", - "__BOOTZ_STANDALONE__", "__NE_AMD64__", "__AHCI__", + "__SYSCHK__", "BOOTZ_EPM_SUPPORT", + "__NE_MODULAR_KERNEL_COMPONENTS__", "kChkVersionHighest=0x0100", "kChkVersionLowest=0x0100", "kChkVersion=0x0100" diff --git a/dev/boot/modules/SysChk/amd64-ahci-gpt.json b/dev/boot/modules/SysChk/amd64-ahci-gpt.json index cb538eed..80bb433e 100644 --- a/dev/boot/modules/SysChk/amd64-ahci-gpt.json +++ b/dev/boot/modules/SysChk/amd64-ahci-gpt.json @@ -10,7 +10,13 @@ "../../src/HEL/AMD64/BootAPI.S", "../../src/BootTextWriter.cc", "../../src/BootSupport.cc", - "../../src/New+Delete.cc" + "../../src/New+Delete.cc", + "../../../kernel/HALKit/AMD64/PCI/*.cc", + "../../../kernel/HALKit/AMD64/Storage/*.cc", + "../../../kernel/src/Storage/*.cc", + "../../../kernel/HALKit/AMD64/*.cc", + "../../../kernel/HALKit/AMD64/*.s", + "../../../kernel/src/*.cc" ], "output_name": "chk.efi", "compiler_flags": [ @@ -22,12 +28,11 @@ ], "cpp_macros": [ "__NEOSKRNL__", - "__BOOTZ__", - "__BOOTZ_STANDALONE__", "__NE_AMD64__", "__AHCI__", - "__NE_VEPM__", - "BOOTZ_VEPM_SUPPORT", + "__SYSCHK__", + "BOOTZ_GPT_SUPPORT", + "__NE_MODULAR_KERNEL_COMPONENTS__", "kChkVersionHighest=0x0100", "kChkVersionLowest=0x0100", "kChkVersion=0x0100" diff --git a/dev/boot/modules/SysChk/amd64-pio-gpt.json b/dev/boot/modules/SysChk/amd64-pio-gpt.json index 21c81667..b1a4d38b 100644 --- a/dev/boot/modules/SysChk/amd64-pio-gpt.json +++ b/dev/boot/modules/SysChk/amd64-pio-gpt.json @@ -33,7 +33,7 @@ "__NE_AMD64__", "__ATA_PIO__", "__NE_VEPM__", - "BOOTZ_VEPM_SUPPORT", + "BOOTZ_GPT_SUPPORT", "kChkVersionHighest=0x0100", "kChkVersionLowest=0x0100", "kChkVersion=0x0100" diff --git a/dev/boot/src/HEL/AMD64/BootATA.cc b/dev/boot/src/HEL/AMD64/BootATA.cc index 693513e0..7557f941 100644 --- a/dev/boot/src/HEL/AMD64/BootATA.cc +++ b/dev/boot/src/HEL/AMD64/BootATA.cc @@ -19,12 +19,12 @@ #include <BootKit/HW/ATA.h> #include <FirmwareKit/EFI.h> +#define kATADataLen (256) + /// bugs: 0 using namespace Boot; -#define kATADataLen (256) - static Boolean kATADetected = false; static UInt16 kATAData[kATADataLen] = {0}; diff --git a/dev/boot/src/HEL/AMD64/BootPlatform.cc b/dev/boot/src/HEL/AMD64/BootPlatform.cc index 8b4d57c4..4cc783d6 100644 --- a/dev/boot/src/HEL/AMD64/BootPlatform.cc +++ b/dev/boot/src/HEL/AMD64/BootPlatform.cc @@ -13,7 +13,7 @@ using namespace Boot; -EXTERN_C void rt_hlt() { +EXTERN_C void rt_halt() { asm volatile("hlt"); } @@ -33,12 +33,4 @@ EXTERN_C void rt_std() { asm volatile("std"); } -#else - -#include <HALKit/AMD64/Processor.h> - -void rt_hlt() { - Kernel::HAL::rt_halt(); -} - #endif // __BOOTZ_STANDALONE__ diff --git a/dev/boot/src/HEL/AMD64/BootSATA.cc b/dev/boot/src/HEL/AMD64/BootSATA.cc index ef5d2096..783acb4c 100644 --- a/dev/boot/src/HEL/AMD64/BootSATA.cc +++ b/dev/boot/src/HEL/AMD64/BootSATA.cc @@ -18,3 +18,65 @@ #include <BootKit/HW/SATA.h> #include <BootKit/Platform.h> #include <BootKit/Protocol.h> + +#include <BootKit/BootKit.h> +#include <FirmwareKit/EFI.h> + +#if defined(__AHCI__) && defined(__SYSCHK__) + +using namespace Boot; + +/*** + * + * + * @brief SATA Device class. + * + * + */ + +/** + * @brief ATA Device constructor. + * @param void none. + */ +BootDeviceSATA::BootDeviceSATA() noexcept { + UInt16 pi = 0u; + drv_std_init(pi); +} + +/** + @brief Read Buf from disk + @param Sz Sector size + @param Buf buffer +*/ +BootDeviceSATA& BootDeviceSATA::Read(CharacterTypeUTF8* Buf, SizeT SectorSz) { + NE_UNUSED(Buf); + NE_UNUSED(SectorSz); + + drv_std_read(mTrait.mBase, Buf, SectorSz, mTrait.mSize); + + return *this; +} + +/** + @brief Write Buf into disk + @param Sz Sector size + @param Buf buffer +*/ +BootDeviceSATA& BootDeviceSATA::Write(CharacterTypeUTF8* Buf, SizeT SectorSz) { + NE_UNUSED(Buf); + NE_UNUSED(SectorSz); + + drv_std_write(mTrait.mBase, Buf, SectorSz, mTrait.mSize); + + return *this; +} + +/** + * @brief ATA trait getter. + * @return BootDeviceSATA::ATATrait& the drive config. + */ +BootDeviceSATA::SATATrait& BootDeviceSATA::Leak() { + return mTrait; +} + +#endif
\ No newline at end of file diff --git a/dev/boot/src/HEL/ARM64/BootPlatform.cc b/dev/boot/src/HEL/ARM64/BootPlatform.cc index 0f6a738f..683245fb 100644 --- a/dev/boot/src/HEL/ARM64/BootPlatform.cc +++ b/dev/boot/src/HEL/ARM64/BootPlatform.cc @@ -12,7 +12,7 @@ using namespace Boot; -EXTERN_C void rt_hlt() { +EXTERN_C void rt_halt() { while (Yes); } |
