summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--Boot/makefile2
-rw-r--r--Kernel/Builtins/GX/GX15
-rw-r--r--Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cpp55
-rw-r--r--Kernel/NetworkKit/GSM.hxx16
-rw-r--r--Kernel/NetworkKit/IPCEP.hxx4
5 files changed, 58 insertions, 34 deletions
diff --git a/Boot/makefile b/Boot/makefile
index e54b1aa8..4bee19a2 100644
--- a/Boot/makefile
+++ b/Boot/makefile
@@ -26,7 +26,7 @@ BIOS=OVMF.fd
IMG=epm.img
IMG_2=epm-slave.img
-EMU_FLAGS=-net none -smp 4 -m 4G -M q35 \
+EMU_FLAGS=-net none -smp 4 -serial stdio -m 4G -M q35 \
-bios $(BIOS) -device piix3-ide,id=ide \
-drive id=disk,file=$(IMG),format=raw,if=none \
-device ide-hd,drive=disk,bus=ide.0 -drive \
diff --git a/Kernel/Builtins/GX/GX b/Kernel/Builtins/GX/GX
index 9aabb458..62fdb006 100644
--- a/Kernel/Builtins/GX/GX
+++ b/Kernel/Builtins/GX/GX
@@ -8,13 +8,6 @@
#include <NewKit/Defines.hpp>
-EXTERN_C NewOS::Void _hal_init_mouse();
-EXTERN_C NewOS::Boolean _hal_draw_mouse();
-EXTERN_C NewOS::Void _hal_handle_mouse();
-EXTERN_C NewOS::Boolean _hal_left_button_pressed();
-EXTERN_C NewOS::Boolean _hal_middle_button_pressed();
-EXTERN_C NewOS::Boolean _hal_right_button_pressed();
-
#define GXInit() NewOS::SizeT __GXCursor = 0
#define gxClearClr RGB(00, 00, 00)
@@ -83,11 +76,11 @@ EXTERN_C NewOS::Boolean _hal_right_button_pressed();
} \
}
-
+/// This is enabled if Cairo is compiled with GX.
#ifdef __CG_USE_GX__
/// @brief This function creates a new framebuffer for GX.
-/// @return
-inline cairo_surface_t* GXCreateFramebufferCairo()
+/// @return
+inline cairo_surface_t* GXCreateFramebufferCairo()
{
cairo_format_t format = CAIRO_FORMAT_ARGB32;
@@ -95,4 +88,4 @@ inline cairo_surface_t* GXCreateFramebufferCairo()
return cairo_image_surface_create_for_data((unsigned char *)kHandoverHeader->f_GOP.f_The, format, kHandoverHeader->f_GOP.f_Width, kHandoverHeader->f_GOP.f_Height, stride);
}
-#endif \ No newline at end of file
+#endif
diff --git a/Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cpp b/Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cpp
index a395305c..f15faf3c 100644
--- a/Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cpp
+++ b/Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cpp
@@ -178,7 +178,10 @@ namespace NewOS::HAL
}
}
- EXTERN_C StackFramePtr _hal_leak_current_context(Void) { return cFramePtr; }
+ EXTERN_C StackFramePtr _hal_leak_current_context(Void)
+ {
+ return cFramePtr;
+ }
EXTERN_C Void hal_apic_acknowledge(Void)
{
@@ -192,9 +195,10 @@ namespace NewOS::HAL
STATIC Void hal_switch_context(HAL::StackFramePtr stackFrame)
{
- /// TODO:
Semaphore sem;
- while (sem.IsLocked()) {}
+ while (sem.IsLocked())
+ {
+ }
sem.Lock(&ProcessScheduler::The().Leak().GetCurrent().Leak());
@@ -206,6 +210,8 @@ namespace NewOS::HAL
sem.Unlock();
}
+ /// @brief Fetch and enable cores inside main CPU.
+ /// @param rsdPtr RSD PTR structure.
Void hal_system_get_cores(voidPtr rsdPtr)
{
auto acpi = ACPIFactoryInterface(rsdPtr);
@@ -215,41 +221,50 @@ namespace NewOS::HAL
{
MadtType* madt = (MadtType*)kApicMadt;
- constexpr auto cMaxProbableCores = 4;
+ constexpr auto cMaxProbableCores = 4; // the amount of cores we want.
+ constexpr auto cStartAt = 0; // start here to avoid boot core.
- for (SizeT i = 2; i < cMaxProbableCores; ++i)
+ for (SizeT coreAt = cStartAt; coreAt < cMaxProbableCores; ++coreAt)
{
- if (madt->MadtRecords[i].Flags == kThreadLAPIC) // if local apic.
+ if (madt->MadtRecords[coreAt].Flags == kThreadLAPIC) // if local apic.
{
- MadtType::MadtAddress& madtRecord = madt->MadtRecords[i];
+ MadtType::MadtAddress& madtRecord = madt->MadtRecords[coreAt];
+
// then register as a core for scheduler.
kcout << "newoskrnl: register core as scheduler thread.\r";
kApicMadtAddresses[kApicMadtAddressesCount] = madtRecord.Address;
++kApicMadtAddressesCount;
+ }
+ }
- auto flagsSet = NewOS::ke_dma_read(madtRecord.Address, 0xF0); // SVR register.
+ ///////////////////////////////////////////////////////////////////////////
+ /// Start local APIC now.
+ ///////////////////////////////////////////////////////////////////////////
- // enable APIC.
- flagsSet |= 0x100;
+ auto flagsSet = NewOS::ke_dma_read(cBaseAddressAPIC, 0xF0); // SVR register.
- NewOS::ke_dma_write(cBaseAddressAPIC, 0xF0, flagsSet);
+ // enable APIC.
+ flagsSet |= 0x100;
- /// Set sprurious interrupt vector.
- NewOS::ke_dma_write(cBaseAddressAPIC, 0xF0, 0x100 | 0xFF);
+ NewOS::ke_dma_write(cBaseAddressAPIC, 0xF0, flagsSet);
- // highest task priority. for our realtime kernel.
- NewOS::ke_dma_write(cBaseAddressAPIC, 0x21, 0);
+ /// Set sprurious interrupt vector.
+ NewOS::ke_dma_write(cBaseAddressAPIC, 0xF0, 0x100 | 0xFF);
- cProgramInitialized = new Boolean(true);
+ // highest task priority. for our realtime kernel.
+ NewOS::ke_dma_write(cBaseAddressAPIC, 0x21, 0);
- hal_send_start_ipi(kApicMadtAddressesCount, 0x40, cBaseAddressAPIC);
- }
- }
+ cProgramInitialized = new Boolean(true);
+
+ constexpr auto cWhereToInterrupt = 0x40;
+ constexpr auto cWhatCore = 1;
+
+ hal_send_start_ipi(cWhatCore, cWhereToInterrupt, cBaseAddressAPIC);
}
else
{
- kcout << "newoskrnl: APIC is not present! it is a vital component.\r";
+ kcout << "newoskrnl: APIC is not present! it is a vital component to enable SMP.\r";
ke_stop(RUNTIME_CHECK_FAILED);
}
}
diff --git a/Kernel/NetworkKit/GSM.hxx b/Kernel/NetworkKit/GSM.hxx
new file mode 100644
index 00000000..9a785344
--- /dev/null
+++ b/Kernel/NetworkKit/GSM.hxx
@@ -0,0 +1,16 @@
+/* -------------------------------------------
+
+ Copyright Zeta Electronics Corporation.
+
+ File: GSM.hxx.
+ Purpose: GSM protocol.
+
+------------------------------------------- */
+
+#ifndef _INC_NETWORK_GSM_HXX_
+#define _INC_NETWORK_GSM_HXX_
+
+#include <NewKit/Defines.hpp>
+#include <NewKit/String.hpp>
+
+#endif // ifndef _INC_NETWORK_GSM_HXX_
diff --git a/Kernel/NetworkKit/IPCEP.hxx b/Kernel/NetworkKit/IPCEP.hxx
index a6b288bf..a00fa98e 100644
--- a/Kernel/NetworkKit/IPCEP.hxx
+++ b/Kernel/NetworkKit/IPCEP.hxx
@@ -50,8 +50,8 @@ namespace NewOS
IPCEPAddressType IpcFrom;
IPCEPAddressType IpcTo;
UInt32 IpcCRC32;
- SizeT IpcDataSize;
- Char IpcData[];
+ UInt32 IpcMsg;
+ UInt32 IpcMsgSz;
} PACKED IPCEPConnectionHeader;
} // namespace NewOS