mirror of
https://github.com/Fennix-Project/Kernel.git
synced 2025-07-11 07:19:20 +00:00
Update files
This commit is contained in:
293
include/cpu.hpp
293
include/cpu.hpp
@ -53,6 +53,11 @@ namespace CPU
|
||||
*/
|
||||
void Pause();
|
||||
|
||||
/**
|
||||
* @brief Stop the CPU (infinite loop)
|
||||
*/
|
||||
void Stop();
|
||||
|
||||
/**
|
||||
* @brief Halt the CPU
|
||||
*/
|
||||
@ -127,6 +132,294 @@ namespace CPU
|
||||
|
||||
namespace x64
|
||||
{
|
||||
typedef enum
|
||||
{
|
||||
DivideByZero = 0x0,
|
||||
Debug = 0x1,
|
||||
NonMaskableInterrupt = 0x2,
|
||||
Breakpoint = 0x3,
|
||||
Overflow = 0x4,
|
||||
BoundRange = 0x5,
|
||||
InvalidOpcode = 0x6,
|
||||
DeviceNotAvailable = 0x7,
|
||||
DoubleFault = 0x8,
|
||||
CoprocessorSegmentOverrun = 0x9,
|
||||
InvalidTSS = 0xa,
|
||||
SegmentNotPresent = 0xb,
|
||||
StackSegmentFault = 0xc,
|
||||
GeneralProtectionFault = 0xd,
|
||||
PageFault = 0xe,
|
||||
x87FloatingPoint = 0x10,
|
||||
AlignmentCheck = 0x11,
|
||||
MachineCheck = 0x12,
|
||||
SIMDFloatingPoint = 0x13,
|
||||
Virtualization = 0x14,
|
||||
Security = 0x1e
|
||||
} ISRExceptions;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
ISR0 = 0x0, // Divide-by-zero Error
|
||||
ISR1 = 0x1, // Debug
|
||||
ISR2 = 0x2, // Non-maskable Interrupt
|
||||
ISR3 = 0x3, // Breakpoint
|
||||
ISR4 = 0x4, // Overflow
|
||||
ISR5 = 0x5, // Bound Range Exceeded
|
||||
ISR6 = 0x6, // Invalid Opcode
|
||||
ISR7 = 0x7, // Device Not Available
|
||||
ISR8 = 0x8, // Double Fault
|
||||
ISR9 = 0x9, // Coprocessor Segment Overrun
|
||||
ISR10 = 0xa, // Invalid TSS
|
||||
ISR11 = 0xb, // Segment Not P
|
||||
ISR12 = 0xc, // Stack-Segment Fault
|
||||
ISR13 = 0xd, // General Protection Fault
|
||||
ISR14 = 0xe, // Page Fault
|
||||
ISR15 = 0xf, // Reserved
|
||||
ISR16 = 0x10, // x87 Floating-Point Exception
|
||||
ISR17 = 0x11, // Alignment Check
|
||||
ISR18 = 0x12, // Machine Check
|
||||
ISR19 = 0x13, // SIMD Floating-Point Exception
|
||||
ISR20 = 0x14, // Virtualization Exception
|
||||
ISR21 = 0x15, // Reserved
|
||||
ISR22 = 0x16, // Reserved
|
||||
ISR23 = 0x17, // Reserved
|
||||
ISR24 = 0x18, // Reserved
|
||||
ISR25 = 0x19, // Reserved
|
||||
ISR26 = 0x1a, // Reserved
|
||||
ISR27 = 0x1b, // Reserved
|
||||
ISR28 = 0x1c, // Reserved
|
||||
ISR29 = 0x1d, // Reserved
|
||||
ISR30 = 0x1e, // Security Exception
|
||||
ISR31 = 0x1f, // Reserved
|
||||
|
||||
IRQ0 = 0x20, // Programmable Interrupt Timer Interrupt
|
||||
IRQ1 = 0x21, // Keyboard Interrupt
|
||||
IRQ2 = 0x22, // Cascade (used internally by the two PICs. never raised)
|
||||
IRQ3 = 0x23, // COM2 (if enabled)
|
||||
IRQ4 = 0x24, // COM1 (if enabled)
|
||||
IRQ5 = 0x25, // LPT2 (if enabled)
|
||||
IRQ6 = 0x26, // Floppy Disk
|
||||
IRQ7 = 0x27, // LPT1 / Unreliable "spurious" interrupt (usually)
|
||||
IRQ8 = 0x28, // CMOS real-time clock (if enabled)
|
||||
IRQ9 = 0x29, // Free for peripherals / legacy SCSI / NIC
|
||||
IRQ10 = 0x2a, // Free for peripherals / SCSI / NIC
|
||||
IRQ11 = 0x2b, // Free for peripherals / SCSI / NIC
|
||||
IRQ12 = 0x2c, // PS2 Mouse
|
||||
IRQ13 = 0x2d, // FPU / Coprocessor / Inter-processor
|
||||
IRQ14 = 0x2e, // Primary ATA Hard Disk
|
||||
IRQ15 = 0x2f, // Secondary ATA Hard Disk
|
||||
|
||||
IRQ16 = 0x30, // Reserved for multitasking
|
||||
IRQ17 = 0x31, // Reserved for monotasking
|
||||
|
||||
IRQ18 = 0x32,
|
||||
IRQ19 = 0x33,
|
||||
IRQ20 = 0x34,
|
||||
IRQ21 = 0x35,
|
||||
IRQ22 = 0x36,
|
||||
IRQ23 = 0x37,
|
||||
IRQ24 = 0x38,
|
||||
IRQ25 = 0x39,
|
||||
IRQ26 = 0x3a,
|
||||
IRQ27 = 0x3b,
|
||||
IRQ28 = 0x3c,
|
||||
IRQ29 = 0x3d,
|
||||
IRQ30 = 0x3e,
|
||||
IRQ31 = 0x3f,
|
||||
IRQ32 = 0x40,
|
||||
IRQ33 = 0x41,
|
||||
IRQ34 = 0x42,
|
||||
IRQ35 = 0x43,
|
||||
IRQ36 = 0x44,
|
||||
IRQ37 = 0x45,
|
||||
IRQ38 = 0x46,
|
||||
IRQ39 = 0x47,
|
||||
IRQ40 = 0x48,
|
||||
IRQ41 = 0x49,
|
||||
IRQ42 = 0x4a,
|
||||
IRQ43 = 0x4b,
|
||||
IRQ44 = 0x4c,
|
||||
IRQ45 = 0x4d,
|
||||
IRQ46 = 0x4e,
|
||||
IRQ47 = 0x4f,
|
||||
IRQ48 = 0x50,
|
||||
IRQ49 = 0x51,
|
||||
IRQ50 = 0x52,
|
||||
IRQ51 = 0x53,
|
||||
IRQ52 = 0x54,
|
||||
IRQ53 = 0x55,
|
||||
IRQ54 = 0x56,
|
||||
IRQ55 = 0x57,
|
||||
IRQ56 = 0x58,
|
||||
IRQ57 = 0x59,
|
||||
IRQ58 = 0x5a,
|
||||
IRQ59 = 0x5b,
|
||||
IRQ60 = 0x5c,
|
||||
IRQ61 = 0x5d,
|
||||
IRQ62 = 0x5e,
|
||||
IRQ63 = 0x5f,
|
||||
IRQ64 = 0x60,
|
||||
IRQ65 = 0x61,
|
||||
IRQ66 = 0x62,
|
||||
IRQ67 = 0x63,
|
||||
IRQ68 = 0x64,
|
||||
IRQ69 = 0x65,
|
||||
IRQ70 = 0x66,
|
||||
IRQ71 = 0x67,
|
||||
IRQ72 = 0x68,
|
||||
IRQ73 = 0x69,
|
||||
IRQ74 = 0x6a,
|
||||
IRQ75 = 0x6b,
|
||||
IRQ76 = 0x6c,
|
||||
IRQ77 = 0x6d,
|
||||
IRQ78 = 0x6e,
|
||||
IRQ79 = 0x6f,
|
||||
IRQ80 = 0x70,
|
||||
IRQ81 = 0x71,
|
||||
IRQ82 = 0x72,
|
||||
IRQ83 = 0x73,
|
||||
IRQ84 = 0x74,
|
||||
IRQ85 = 0x75,
|
||||
IRQ86 = 0x76,
|
||||
IRQ87 = 0x77,
|
||||
IRQ88 = 0x78,
|
||||
IRQ89 = 0x79,
|
||||
IRQ90 = 0x7a,
|
||||
IRQ91 = 0x7b,
|
||||
IRQ92 = 0x7c,
|
||||
IRQ93 = 0x7d,
|
||||
IRQ94 = 0x7e,
|
||||
IRQ95 = 0x7f,
|
||||
IRQ96 = 0x80,
|
||||
IRQ97 = 0x81,
|
||||
IRQ98 = 0x82,
|
||||
IRQ99 = 0x83,
|
||||
IRQ100 = 0x84,
|
||||
IRQ101 = 0x85,
|
||||
IRQ102 = 0x86,
|
||||
IRQ103 = 0x87,
|
||||
IRQ104 = 0x88,
|
||||
IRQ105 = 0x89,
|
||||
IRQ106 = 0x8a,
|
||||
IRQ107 = 0x8b,
|
||||
IRQ108 = 0x8c,
|
||||
IRQ109 = 0x8d,
|
||||
IRQ110 = 0x8e,
|
||||
IRQ111 = 0x8f,
|
||||
IRQ112 = 0x90,
|
||||
IRQ113 = 0x91,
|
||||
IRQ114 = 0x92,
|
||||
IRQ115 = 0x93,
|
||||
IRQ116 = 0x94,
|
||||
IRQ117 = 0x95,
|
||||
IRQ118 = 0x96,
|
||||
IRQ119 = 0x97,
|
||||
IRQ120 = 0x98,
|
||||
IRQ121 = 0x99,
|
||||
IRQ122 = 0x9a,
|
||||
IRQ123 = 0x9b,
|
||||
IRQ124 = 0x9c,
|
||||
IRQ125 = 0x9d,
|
||||
IRQ126 = 0x9e,
|
||||
IRQ127 = 0x9f,
|
||||
IRQ128 = 0xa0,
|
||||
IRQ129 = 0xa1,
|
||||
IRQ130 = 0xa2,
|
||||
IRQ131 = 0xa3,
|
||||
IRQ132 = 0xa4,
|
||||
IRQ133 = 0xa5,
|
||||
IRQ134 = 0xa6,
|
||||
IRQ135 = 0xa7,
|
||||
IRQ136 = 0xa8,
|
||||
IRQ137 = 0xa9,
|
||||
IRQ138 = 0xaa,
|
||||
IRQ139 = 0xab,
|
||||
IRQ140 = 0xac,
|
||||
IRQ141 = 0xad,
|
||||
IRQ142 = 0xae,
|
||||
IRQ143 = 0xaf,
|
||||
IRQ144 = 0xb0,
|
||||
IRQ145 = 0xb1,
|
||||
IRQ146 = 0xb2,
|
||||
IRQ147 = 0xb3,
|
||||
IRQ148 = 0xb4,
|
||||
IRQ149 = 0xb5,
|
||||
IRQ150 = 0xb6,
|
||||
IRQ151 = 0xb7,
|
||||
IRQ152 = 0xb8,
|
||||
IRQ153 = 0xb9,
|
||||
IRQ154 = 0xba,
|
||||
IRQ155 = 0xbb,
|
||||
IRQ156 = 0xbc,
|
||||
IRQ157 = 0xbd,
|
||||
IRQ158 = 0xbe,
|
||||
IRQ159 = 0xbf,
|
||||
IRQ160 = 0xc0,
|
||||
IRQ161 = 0xc1,
|
||||
IRQ162 = 0xc2,
|
||||
IRQ163 = 0xc3,
|
||||
IRQ164 = 0xc4,
|
||||
IRQ165 = 0xc5,
|
||||
IRQ166 = 0xc6,
|
||||
IRQ167 = 0xc7,
|
||||
IRQ168 = 0xc8,
|
||||
IRQ169 = 0xc9,
|
||||
IRQ170 = 0xca,
|
||||
IRQ171 = 0xcb,
|
||||
IRQ172 = 0xcc,
|
||||
IRQ173 = 0xcd,
|
||||
IRQ174 = 0xce,
|
||||
IRQ175 = 0xcf,
|
||||
IRQ176 = 0xd0,
|
||||
IRQ177 = 0xd1,
|
||||
IRQ178 = 0xd2,
|
||||
IRQ179 = 0xd3,
|
||||
IRQ180 = 0xd4,
|
||||
IRQ181 = 0xd5,
|
||||
IRQ182 = 0xd6,
|
||||
IRQ183 = 0xd7,
|
||||
IRQ184 = 0xd8,
|
||||
IRQ185 = 0xd9,
|
||||
IRQ186 = 0xda,
|
||||
IRQ187 = 0xdb,
|
||||
IRQ188 = 0xdc,
|
||||
IRQ189 = 0xdd,
|
||||
IRQ190 = 0xde,
|
||||
IRQ191 = 0xdf,
|
||||
IRQ192 = 0xe0,
|
||||
IRQ193 = 0xe1,
|
||||
IRQ194 = 0xe2,
|
||||
IRQ195 = 0xe3,
|
||||
IRQ196 = 0xe4,
|
||||
IRQ197 = 0xe5,
|
||||
IRQ198 = 0xe6,
|
||||
IRQ199 = 0xe7,
|
||||
IRQ200 = 0xe8,
|
||||
IRQ201 = 0xe9,
|
||||
IRQ202 = 0xea,
|
||||
IRQ203 = 0xeb,
|
||||
IRQ204 = 0xec,
|
||||
IRQ205 = 0xed,
|
||||
IRQ206 = 0xee,
|
||||
IRQ207 = 0xef,
|
||||
IRQ208 = 0xf0,
|
||||
IRQ209 = 0xf1,
|
||||
IRQ210 = 0xf2,
|
||||
IRQ211 = 0xf3,
|
||||
IRQ212 = 0xf4,
|
||||
IRQ213 = 0xf5,
|
||||
IRQ214 = 0xf6,
|
||||
IRQ215 = 0xf7,
|
||||
IRQ216 = 0xf8,
|
||||
IRQ217 = 0xf9,
|
||||
IRQ218 = 0xfa,
|
||||
IRQ219 = 0xfb,
|
||||
IRQ220 = 0xfc,
|
||||
IRQ221 = 0xfd,
|
||||
IRQ222 = 0xfe,
|
||||
IRQ223 = 0xff,
|
||||
} Interrupts;
|
||||
|
||||
typedef union
|
||||
{
|
||||
struct
|
||||
|
156
include/pci.hpp
Normal file
156
include/pci.hpp
Normal file
@ -0,0 +1,156 @@
|
||||
#ifndef __FENNIX_KERNEL_PCI_H__
|
||||
#define __FENNIX_KERNEL_PCI_H__
|
||||
|
||||
#include <types.h>
|
||||
|
||||
#include <vector.hpp>
|
||||
#include <debug.h>
|
||||
|
||||
namespace PCI
|
||||
{
|
||||
namespace Descriptors
|
||||
{
|
||||
enum PCIVendors
|
||||
{
|
||||
SymbiosLogic = 0x1000,
|
||||
RedHat = 0x1AF4,
|
||||
REDHat2 = 0x1B36,
|
||||
Realtek = 0x10EC,
|
||||
VirtualBox = 0x80EE,
|
||||
Ensoniq = 0x1274,
|
||||
QEMU = 0x1234,
|
||||
VMware = 0x15AD,
|
||||
IntelCorporation = 0x8086,
|
||||
AdvancedMicroDevices = 0x1022,
|
||||
NVIDIACorporation = 0x10DE
|
||||
};
|
||||
|
||||
const char *const DeviceClasses[]{
|
||||
"Unclassified",
|
||||
"Mass Storage Controller",
|
||||
"Network Controller",
|
||||
"Display Controller",
|
||||
"Multimedia Controller",
|
||||
"Memory Controller",
|
||||
"Bridge Device",
|
||||
"Simple Communication Controller",
|
||||
"Base System Peripheral",
|
||||
"Input Device Controller",
|
||||
"Docking Station",
|
||||
"Processor",
|
||||
"Serial Bus Controller",
|
||||
"Wireless Controller",
|
||||
"Intelligent Controller",
|
||||
"Satellite Communication Controller",
|
||||
"Encryption Controller",
|
||||
"Signal Processing Controller",
|
||||
"Processing Accelerator",
|
||||
"Non Essential Instrumentation"};
|
||||
|
||||
const char *MassStorageControllerSubclassName(uint8_t SubclassCode);
|
||||
const char *NetworkControllerSubclassName(uint8_t SubclassCode);
|
||||
const char *DisplayControllerSubclassName(uint8_t SubclassCode);
|
||||
const char *CommunicationControllerSubclassName(uint8_t SubclassCode);
|
||||
const char *BaseSystemPeripheralSubclassName(uint8_t SubclassCode);
|
||||
const char *SerialBusControllerSubclassName(uint8_t SubclassCode);
|
||||
const char *BridgeDeviceSubclassName(uint8_t SubclassCode);
|
||||
const char *WirelessControllerSubclassName(uint8_t SubclassCode);
|
||||
const char *GetVendorName(uint32_t VendorID);
|
||||
const char *GetDeviceName(uint32_t VendorID, uint32_t DeviceID);
|
||||
const char *GetSubclassName(uint8_t ClassCode, uint8_t SubclassCode);
|
||||
const char *GetProgIFName(uint8_t ClassCode, uint8_t SubclassCode, uint8_t ProgIF);
|
||||
}
|
||||
|
||||
/* https://sites.uclouvain.be/SystInfo/usr/include/linux/pci_regs.h.html */
|
||||
enum PCICommands
|
||||
{
|
||||
/** @brief Enable response in I/O space */
|
||||
PCI_COMMAND_IO = 0x1,
|
||||
/** @brief Enable response in Memory space */
|
||||
PCI_COMMAND_MEMORY = 0x2,
|
||||
/** @brief Enable bus mastering */
|
||||
PCI_COMMAND_MASTER = 0x4,
|
||||
/** @brief Enable response to special cycles */
|
||||
PCI_COMMAND_SPECIAL = 0x8,
|
||||
/** @brief Use memory write and invalidate */
|
||||
PCI_COMMAND_INVALIDATE = 0x10,
|
||||
/** @brief Enable palette snooping */
|
||||
PCI_COMMAND_VGA_PALETTE = 0x20,
|
||||
/** @brief Enable parity checking */
|
||||
PCI_COMMAND_PARITY = 0x40,
|
||||
/** @brief Enable address/data stepping */
|
||||
PCI_COMMAND_WAIT = 0x80,
|
||||
/** @brief Enable SERR */
|
||||
PCI_COMMAND_SERR = 0x100,
|
||||
/** @brief Enable back-to-back writes */
|
||||
PCI_COMMAND_FAST_BACK = 0x200,
|
||||
/** @brief INTx Emulation Disable */
|
||||
PCI_COMMAND_INTX_DISABLE = 0x400
|
||||
};
|
||||
|
||||
struct PCIDeviceHeader
|
||||
{
|
||||
uint16_t VendorID;
|
||||
uint16_t DeviceID;
|
||||
uint16_t Command;
|
||||
uint16_t Status;
|
||||
uint8_t RevisionID;
|
||||
uint8_t ProgIF;
|
||||
uint8_t Subclass;
|
||||
uint8_t Class;
|
||||
uint8_t CacheLineSize;
|
||||
uint8_t LatencyTimer;
|
||||
uint8_t HeaderType;
|
||||
uint8_t BIST;
|
||||
};
|
||||
|
||||
struct PCIHeader0
|
||||
{
|
||||
PCIDeviceHeader Header;
|
||||
uint32_t BAR0;
|
||||
uint32_t BAR1;
|
||||
uint32_t BAR2;
|
||||
uint32_t BAR3;
|
||||
uint32_t BAR4;
|
||||
uint32_t BAR5;
|
||||
uint32_t CardbusCISPtr;
|
||||
uint16_t SubsystemVendorID;
|
||||
uint16_t SubsystemID;
|
||||
uint32_t ExpansionROMBaseAddr;
|
||||
uint8_t CapabilitiesPtr;
|
||||
uint8_t Rsv0;
|
||||
uint16_t Rsv1;
|
||||
uint32_t Rsv2;
|
||||
uint8_t InterruptLine;
|
||||
uint8_t InterruptPin;
|
||||
uint8_t MinGrant;
|
||||
uint8_t MaxLatency;
|
||||
};
|
||||
|
||||
struct DeviceConfig
|
||||
{
|
||||
uint64_t BaseAddress;
|
||||
uint16_t PCISegGroup;
|
||||
uint8_t StartBus;
|
||||
uint8_t EndBus;
|
||||
uint32_t Reserved;
|
||||
} __attribute__((packed));
|
||||
|
||||
class PCI
|
||||
{
|
||||
private:
|
||||
Vector<PCIDeviceHeader *> Devices;
|
||||
|
||||
public:
|
||||
void EnumerateFunction(uint64_t DeviceAddress, uint64_t Function);
|
||||
void EnumerateDevice(uint64_t BusAddress, uint64_t Device);
|
||||
void EnumerateBus(uint64_t BaseAddress, uint64_t Bus);
|
||||
Vector<PCIDeviceHeader *> FindPCIDevice(uint8_t Class, uint8_t Subclass, uint8_t ProgIF);
|
||||
Vector<PCIDeviceHeader *> FindPCIDevice(int VendorID, int DeviceID);
|
||||
|
||||
PCI();
|
||||
~PCI();
|
||||
};
|
||||
}
|
||||
|
||||
#endif // !__FENNIX_KERNEL_PCI_H__
|
24
include/power.hpp
Normal file
24
include/power.hpp
Normal file
@ -0,0 +1,24 @@
|
||||
#ifndef __FENNIX_KERNEL_POWER_H__
|
||||
#define __FENNIX_KERNEL_POWER_H__
|
||||
|
||||
#include <types.h>
|
||||
|
||||
namespace Power
|
||||
{
|
||||
class Power
|
||||
{
|
||||
private:
|
||||
// specific for 64 and 32 bit
|
||||
void *acpi;
|
||||
void *dsdt;
|
||||
void *madt;
|
||||
|
||||
public:
|
||||
void Reboot();
|
||||
void Shutdown();
|
||||
Power();
|
||||
~Power();
|
||||
};
|
||||
}
|
||||
|
||||
#endif // !__FENNIX_KERNEL_POWER_H__
|
Reference in New Issue
Block a user