diff options
| -rw-r--r-- | Boot/makefile | 2 | ||||
| -rw-r--r-- | Kernel/Builtins/GX/GX | 15 | ||||
| -rw-r--r-- | Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cpp | 55 | ||||
| -rw-r--r-- | Kernel/NetworkKit/GSM.hxx | 16 | ||||
| -rw-r--r-- | Kernel/NetworkKit/IPCEP.hxx | 4 |
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 |
