summaryrefslogtreecommitdiffhomepage
path: root/dev
diff options
context:
space:
mode:
Diffstat (limited to 'dev')
-rw-r--r--dev/Modules/FB/WS.h24
-rw-r--r--dev/Modules/WSGL/WSGL.h26
-rw-r--r--dev/ZKAKit/HALKit/AMD64/Storage/AHCI-DMA.cc10
-rw-r--r--dev/ZKAKit/KernelKit/DriveMgr.h29
-rw-r--r--dev/ZKAKit/KernelKit/IDLLObject.h7
-rw-r--r--dev/ZKAKit/KernelKit/IPEFDLLObject.h4
-rw-r--r--dev/ZKAKit/KernelKit/ThreadLocalStorage.h10
-rw-r--r--dev/ZKAKit/KernelKit/UserProcessScheduler.h1
-rw-r--r--dev/ZKAKit/NewKit/Macros.h24
-rw-r--r--dev/ZKAKit/src/DriveMgr.cc2
-rw-r--r--dev/ZKAKit/src/IPEFDLLObject.cc11
-rw-r--r--dev/ZKAKit/src/ThreadLocalStorage.cc2
-rw-r--r--dev/ZKAKit/src/UserProcessScheduler.cc23
13 files changed, 104 insertions, 69 deletions
diff --git a/dev/Modules/FB/WS.h b/dev/Modules/FB/WS.h
index d8c5c991..60c7a78c 100644
--- a/dev/Modules/FB/WS.h
+++ b/dev/Modules/FB/WS.h
@@ -7,18 +7,21 @@
#pragma once
#include <ArchKit/ArchKit.h>
-#include <Modules/FB/FB.h>
-#include <Modules/FB/Text.h>
#include <NewKit/Utils.h>
/// @file WS.h
-/// @brief WindowServer's endpoint implementation. (within the zka-dev subsystem)
+/// @brief WindowServer's window ownership implementation.
+/// It is used to draw within a window.
+
+#define rtl_allocate_backbuffer(width, height) new WS::WSBackBufferKind[width * height]
+#define rtl_compute_fb_geometry(width, height) (width * height)
namespace WS
{
using namespace Kernel;
- struct WSWindowContainer;
+ class WSWindowTexture;
+ class WSWindowContainer;
typedef UInt32* WSBackBufferKind;
@@ -31,7 +34,7 @@ namespace WS
ZKA_COPY_DEFAULT(WSWindowContainer);
/// @note the trick is, it could be GPU processed data, that's the cool thing.
- BOOL PopulateWindow(WSBackBufferKind contents_buf, SizeT contents_len)
+ BOOL Fill(WSBackBufferKind contents_buf, SizeT contents_len)
{
if (contents_len > BackBufferLength)
return NO;
@@ -47,11 +50,16 @@ namespace WS
return YES;
}
+ BOOL Fill(WSWindowContainer* container)
+ {
+ if (!container)
+ return NO;
+
+ return this->Fill(container->BackBuffer, container->BackBufferLength);
+ }
+
public:
WSBackBufferKind BackBuffer{nullptr};
SizeT BackBufferLength{0UL};
};
} // namespace WS
-
-#define rtl_allocate_backbuffer(width, height) new WS::WSBackBufferKind[width * height]
-#define rtl_compute_fb_geometry(width, height) (width * height)
diff --git a/dev/Modules/WSGL/WSGL.h b/dev/Modules/WSGL/WSGL.h
index 47bf402f..59cf6f5c 100644
--- a/dev/Modules/WSGL/WSGL.h
+++ b/dev/Modules/WSGL/WSGL.h
@@ -7,3 +7,29 @@
#pragma once
#include <NewKit/Defines.h>
+#include <Modules/FB/WS.h>
+
+namespace WS
+{
+ /// @brief GPU texture class.
+ class WSWindowTexture final
+ {
+ public:
+ explicit WSWindowTexture() = default;
+ ~WSWindowTexture() = default;
+
+ ZKA_COPY_DEFAULT(WSWindowTexture);
+
+ VoidPtr InputData{nullptr};
+ VoidPtr ProcessUnit{nullptr};
+ BOOL* IsDone{nullptr};
+
+ const BOOL TryIsDone()
+ {
+ if (IsDone && *IsDone)
+ return YES;
+
+ return NO;
+ }
+ };
+} // namespace WS
diff --git a/dev/ZKAKit/HALKit/AMD64/Storage/AHCI-DMA.cc b/dev/ZKAKit/HALKit/AMD64/Storage/AHCI-DMA.cc
index e3bf1c12..e201f0fb 100644
--- a/dev/ZKAKit/HALKit/AMD64/Storage/AHCI-DMA.cc
+++ b/dev/ZKAKit/HALKit/AMD64/Storage/AHCI-DMA.cc
@@ -31,6 +31,8 @@
#define HBA_PxCMD_FR 0x4000
#define HBA_PxCMD_CR 0x8000
+#define AHCI_LBA_MODE (1 << 6)
+
#define kMaxAhciPoll (100000U)
#define kCmdOrCtrlCmd 1
@@ -219,13 +221,13 @@ Kernel::Void drv_std_read(Kernel::UInt64 lba, Kernel::Char* buffer, Kernel::Size
for (int i = 0; i < cmd_hdr->Prdtl - 1; i++)
{
cmd_tbl->PrdtEntries[i].Dba = (Kernel::UInt32)(Kernel::UInt64)buffer;
- cmd_tbl->PrdtEntries[i].Dba = (Kernel::UInt32)((Kernel::UInt64)(buffer) >> 32);
+ cmd_tbl->PrdtEntries[i].Dbau = (Kernel::UInt32)((Kernel::UInt64)(buffer) >> 32);
cmd_tbl->PrdtEntries[i].Dbc = size_buffer - 1; // 8K bytes (this value should always be set to 1 less than the actual value)
cmd_tbl->PrdtEntries[i].InterruptBit = 1;
}
cmd_tbl->PrdtEntries[i].Dba = (Kernel::UInt32)(Kernel::UInt64)buffer;
- cmd_tbl->PrdtEntries[i].Dba = (Kernel::UInt32)((Kernel::UInt64)(buffer) >> 32);
+ cmd_tbl->PrdtEntries[i].Dbau = (Kernel::UInt32)((Kernel::UInt64)(buffer) >> 32);
cmd_tbl->PrdtEntries[i].Dbc = size_buffer - 1; // 8K bytes (this value should always be set to 1 less than the actual value)
cmd_tbl->PrdtEntries[i].InterruptBit = 1;
@@ -238,7 +240,7 @@ Kernel::Void drv_std_read(Kernel::UInt64 lba, Kernel::Char* buffer, Kernel::Size
cmd_fis->Lba0 = (Kernel::UInt8)(Kernel::UInt32)lba & 0xFF;
cmd_fis->Lba1 = (Kernel::UInt8)((Kernel::UInt32)lba >> 8);
cmd_fis->Lba2 = (Kernel::UInt8)((Kernel::UInt32)lba >> 16);
- cmd_fis->Device = (1 << 6); // LBA mode
+ cmd_fis->Device = AHCI_LBA_MODE; // LBA mode
cmd_fis->Lba3 = (Kernel::UInt8)((Kernel::UInt32)lba >> 24);
cmd_fis->Lba4 = (Kernel::UInt8)(lba >> 32);
@@ -300,4 +302,4 @@ Kernel::SizeT drv_get_size()
return drv_get_sector_count() * kAHCISectorSize;
}
-#endif // ifdef __AHCI__ \ No newline at end of file
+#endif // ifdef __AHCI__
diff --git a/dev/ZKAKit/KernelKit/DriveMgr.h b/dev/ZKAKit/KernelKit/DriveMgr.h
index e3955a39..a630180b 100644
--- a/dev/ZKAKit/KernelKit/DriveMgr.h
+++ b/dev/ZKAKit/KernelKit/DriveMgr.h
@@ -93,36 +93,48 @@ namespace Kernel
{
return mA;
}
+
DriveTrait& B()
{
return mB;
}
+
DriveTrait& C()
{
return mC;
}
+
DriveTrait& D()
{
return mD;
}
- DriveTraitPtr GetAddressOf(Int32 index)
+ enum
+ {
+ kDriveIndexA = 0,
+ kDriveIndexB,
+ kDriveIndexC,
+ kDriveIndexD,
+ kDriveIndexInvalid,
+ };
+
+ DriveTraitPtr GetAddressOf(const Int32& index)
{
ErrLocal() = kErrorSuccess;
switch (index)
{
- case 0:
+ case kDriveIndexA:
return &mA;
- case 1:
+ case kDriveIndexB:
return &mB;
- case 2:
+ case kDriveIndexC:
return &mC;
- case 3:
+ case kDriveIndexD:
return &mD;
default: {
ErrLocal() = kErrorNoSuchDisk;
- kcout << "No such disk.\n";
+ kcout << "No such disk index.\n";
break;
}
@@ -133,15 +145,16 @@ namespace Kernel
private:
DriveTrait mA, mB, mC, mD;
+
};
/// @brief Unimplemented drive.
- /// @param pckt
+ /// @param pckt the packet to read.
/// @return
Void io_drv_unimplemented(DriveTrait::DrivePacket* pckt);
/// @brief Gets the drive kind (ATA, SCSI, AHCI...)
- /// @param
+ /// @param void none.
/// @return the drive kind (ATA, Flash, NVM)
const Char* io_drv_kind(Void);
diff --git a/dev/ZKAKit/KernelKit/IDLLObject.h b/dev/ZKAKit/KernelKit/IDLLObject.h
index 81b43ae8..bf336267 100644
--- a/dev/ZKAKit/KernelKit/IDLLObject.h
+++ b/dev/ZKAKit/KernelKit/IDLLObject.h
@@ -14,6 +14,7 @@
namespace Kernel
{
+ /// @brief DLL class object. A handle to a shared library.
class IDLLObject
{
public:
@@ -22,12 +23,12 @@ namespace Kernel
struct DLL_TRAITS final
{
- VoidPtr fImageObject{nullptr};
- VoidPtr fImageEntrypointOffset{nullptr};
+ VoidPtr ImageObject{nullptr};
+ VoidPtr ImageEntrypointOffset{nullptr};
Bool IsValid()
{
- return fImageObject && fImageEntrypointOffset;
+ return ImageObject && ImageEntrypointOffset;
}
};
diff --git a/dev/ZKAKit/KernelKit/IPEFDLLObject.h b/dev/ZKAKit/KernelKit/IPEFDLLObject.h
index 64e5c2fd..450b3a13 100644
--- a/dev/ZKAKit/KernelKit/IPEFDLLObject.h
+++ b/dev/ZKAKit/KernelKit/IPEFDLLObject.h
@@ -48,7 +48,7 @@ namespace Kernel
public:
void Mount(DLL_TRAITS* to_mount)
{
- if (!to_mount || !to_mount->fImageObject)
+ if (!to_mount || !to_mount->ImageObject)
return;
fMounted = to_mount;
@@ -61,7 +61,7 @@ namespace Kernel
if (!fLoader)
{
- fLoader = new PEFLoader(fMounted->fImageObject);
+ fLoader = new PEFLoader(fMounted->ImageObject);
}
}
diff --git a/dev/ZKAKit/KernelKit/ThreadLocalStorage.h b/dev/ZKAKit/KernelKit/ThreadLocalStorage.h
index 680a10ed..808951a2 100644
--- a/dev/ZKAKit/KernelKit/ThreadLocalStorage.h
+++ b/dev/ZKAKit/KernelKit/ThreadLocalStorage.h
@@ -4,8 +4,8 @@
------------------------------------------- */
-#ifndef _KERNELKIT_TLS_H
-#define _KERNELKIT_TLS_H
+#ifndef KERNELKIT_TLS_H
+#define KERNELKIT_TLS_H
#include <NewKit/Defines.h>
@@ -23,8 +23,8 @@ struct THREAD_INFORMATION_BLOCK;
/// Located in GS on AMD64, other architectures have their own stuff. (64x0, 32x0, ARM64)
struct PACKED THREAD_INFORMATION_BLOCK final
{
- Kernel::Char f_Cookie[kTLSCookieLen]{0}; //! Thread magic number.
- Kernel::VoidPtr f_ThreadRecord{nullptr}; //! Thread information record.
+ Kernel::Char Cookie[kTLSCookieLen]{0}; //! Thread magic number.
+ Kernel::VoidPtr Record{nullptr}; //! Thread information record.
};
///! @brief Cookie Sanity check.
@@ -51,4 +51,4 @@ EXTERN_C Kernel::Bool tls_check_syscall_impl(Kernel::VoidPtr TIB) noexcept;
// last rev 7/7/24
-#endif /* ifndef _KERNELKIT_TLS_H */
+#endif /* ifndef KERNELKIT_TLS_H */
diff --git a/dev/ZKAKit/KernelKit/UserProcessScheduler.h b/dev/ZKAKit/KernelKit/UserProcessScheduler.h
index fd9d6455..545acf6d 100644
--- a/dev/ZKAKit/KernelKit/UserProcessScheduler.h
+++ b/dev/ZKAKit/KernelKit/UserProcessScheduler.h
@@ -50,7 +50,6 @@ namespace Kernel
kRunning,
kKilled,
kFrozen,
- KFinishing,
kFinished,
kCount,
};
diff --git a/dev/ZKAKit/NewKit/Macros.h b/dev/ZKAKit/NewKit/Macros.h
index 9683d743..70245ce1 100644
--- a/dev/ZKAKit/NewKit/Macros.h
+++ b/dev/ZKAKit/NewKit/Macros.h
@@ -120,25 +120,11 @@
#define RGB(R, G, B) (Kernel::UInt32)(R | G << 0x8 | B << 0x10)
#endif // !RGB
-#define BREAK_POINT() asm volatile("int $3")
-
-/// @brief The system page file, located on the mount directory, as mulitple system pages can be mounted.
-#define kPageSys "/Disks/syspage.sys"
-
-/// @brief The main system driver.
-#define kStartupSys "/Boot/startup.sys"
-
-/// @brief The main font file.
-#define kUrbanistTTF "/Resources/Fonts/urbanist.ttf"
-
-/// @brief License file
-#define kEulaTxt "/Resources/EULA.txt"
-
-/// @brief The main kernel file.
-#define kStartupWav "/Resources/startup.wav"
-
-/// @brief The main system loader.
-#define kUserName "ZKA AUTHORITY/KERNEL"
+#ifdef __ZKA_AMD64__
+#define dbg_break_point() asm volatile("int $3")
+#else
+#define dbg_break_point() ((void)0)
+#endif
#define rtl_deduce_endianess(address, value) \
(((reinterpret_cast<Kernel::Char*>(address)[0]) == (value)) \
diff --git a/dev/ZKAKit/src/DriveMgr.cc b/dev/ZKAKit/src/DriveMgr.cc
index 4946e714..d2c08c19 100644
--- a/dev/ZKAKit/src/DriveMgr.cc
+++ b/dev/ZKAKit/src/DriveMgr.cc
@@ -14,7 +14,7 @@
/***********************************************************************************/
/// @file DriveMgr.cc
-/// @brief Drive Manager API.
+/// @brief Drive Manager of minoskrnl.
/***********************************************************************************/
namespace Kernel
diff --git a/dev/ZKAKit/src/IPEFDLLObject.cc b/dev/ZKAKit/src/IPEFDLLObject.cc
index 145f3409..4edf35b5 100644
--- a/dev/ZKAKit/src/IPEFDLLObject.cc
+++ b/dev/ZKAKit/src/IPEFDLLObject.cc
@@ -46,7 +46,6 @@ EXTERN_C IDLL rtl_init_dll(UserProcess* header)
if (!dll_obj)
{
header->Crash();
-
return nullptr;
}
@@ -54,22 +53,22 @@ EXTERN_C IDLL rtl_init_dll(UserProcess* header)
if (!dll_obj->Get())
{
+ tls_delete_class(dll_obj);
header->Crash();
-
return nullptr;
}
- dll_obj->Get()->fImageObject =
+ dll_obj->Get()->ImageObject =
header->Image.fBlob;
- if (!dll_obj->Get()->fImageObject)
+ if (!dll_obj->Get()->ImageObject)
{
+ tls_delete_class(dll_obj);
header->Crash();
-
return nullptr;
}
- dll_obj->Get()->fImageEntrypointOffset =
+ dll_obj->Get()->ImageEntrypointOffset =
dll_obj->Load<VoidPtr>(kPefStart, rt_string_len(kPefStart, 0), kPefCode);
return dll_obj;
diff --git a/dev/ZKAKit/src/ThreadLocalStorage.cc b/dev/ZKAKit/src/ThreadLocalStorage.cc
index fbe9a5f0..69da2f94 100644
--- a/dev/ZKAKit/src/ThreadLocalStorage.cc
+++ b/dev/ZKAKit/src/ThreadLocalStorage.cc
@@ -29,7 +29,7 @@ using namespace Kernel;
Boolean tls_check_tib(THREAD_INFORMATION_BLOCK* tib_ptr)
{
if (!tib_ptr ||
- !tib_ptr->f_ThreadRecord)
+ !tib_ptr->Record)
return false;
IEncoderObject encoder;
diff --git a/dev/ZKAKit/src/UserProcessScheduler.cc b/dev/ZKAKit/src/UserProcessScheduler.cc
index 313f1532..9a4918af 100644
--- a/dev/ZKAKit/src/UserProcessScheduler.cc
+++ b/dev/ZKAKit/src/UserProcessScheduler.cc
@@ -229,18 +229,19 @@ namespace Kernel
/***********************************************************************************/
/**
- @brief Process exit method.
+ @brief Exit process method.
+ @param exit_code The process's exit code.
*/
/***********************************************************************************/
- void UserProcess::Exit(const Int32& exit_code)
+ Void UserProcess::Exit(const Int32& exit_code)
{
- this->Status = exit_code > 0 ? ProcessStatusKind::kKilled : ProcessStatusKind::KFinishing;
+ this->Status = exit_code > 0 ? ProcessStatusKind::kKilled : ProcessStatusKind::kFrozen;
this->fLastExitCode = exit_code;
kLastExitCode = exit_code;
- auto memory_list = this->MemoryHeap;
+ auto memory_heap_list = this->MemoryHeap;
#ifdef __ZKA_AMD64__
auto pd = hal_read_cr3();
@@ -248,23 +249,23 @@ namespace Kernel
#endif
// Deleting memory lists. Make sure to free all of them.
- while (memory_list)
+ while (memory_heap_list)
{
- if (memory_list->MemoryEntry)
+ if (memory_heap_list->MemoryEntry)
{
- MUST_PASS(mm_delete_heap(memory_list->MemoryEntry));
+ MUST_PASS(mm_delete_heap(memory_heap_list->MemoryEntry));
}
#ifdef __ZKA_AMD64__
hal_write_cr3(pd);
#endif
- auto next = memory_list->MemoryNext;
+ auto next = memory_heap_list->MemoryNext;
- mm_delete_heap(memory_list);
- memory_list = nullptr;
+ mm_delete_heap(memory_heap_list);
- memory_list = next;
+ memory_heap_list = nullptr;
+ memory_heap_list = next;
}
//! Free the memory's page directory.