mirror of
https://github.com/gbowne1/ClassicOS.git
synced 2024-11-22 06:06:52 -08:00
Moar fixes to pci.c and pci.h
This commit is contained in:
parent
6809c6f1bf
commit
168f9ebb62
@ -1,15 +1,21 @@
|
|||||||
cmake_minimum_required(VERSION 3.13.4)
|
cmake_minimum_required(VERSION 3.13.4)
|
||||||
project(ClassicOS VERSION 0.0.1 LANGUAGES C)
|
project(ClassicOS
|
||||||
|
VERSION 0.0.1
|
||||||
|
DESCRIPTION "An x86 Operating System for your pleasure and enjoyment"
|
||||||
|
HOMEPAGE_URL "https://github.com/gbowne1/ClassicOS"
|
||||||
|
LANGUAGES C ASM_NASM)
|
||||||
|
|
||||||
# Source files
|
# Source files
|
||||||
set(BOOT_SOURCE_FILES
|
set(BOOT_SOURCE_FILES
|
||||||
src/boot/boot.asm
|
src/boot/boot.asm
|
||||||
src/boot/linker.ld
|
src/boot/linker.ld
|
||||||
)
|
)
|
||||||
|
|
||||||
set(GRUB_SOURCE_FILES
|
set(GRUB_SOURCE_FILES
|
||||||
src/boot/grub/grub.cfg
|
src/boot/grub/grub.cfg
|
||||||
src/boot/grub/menu.lst
|
src/boot/grub/menu.lst
|
||||||
)
|
)
|
||||||
|
|
||||||
set(DRIVERS_SOURCE_FILES
|
set(DRIVERS_SOURCE_FILES
|
||||||
src/drivers/audio/audio.c
|
src/drivers/audio/audio.c
|
||||||
src/drivers/audio/audio.h
|
src/drivers/audio/audio.h
|
||||||
@ -78,6 +84,7 @@ set(CMAKE_CXX_FLAGS_DEBUG "-g -O0")
|
|||||||
set(CMAKE_CXX_COMPILER g++)
|
set(CMAKE_CXX_COMPILER g++)
|
||||||
set(CMAKE_ASM_COMPILER nasm)
|
set(CMAKE_ASM_COMPILER nasm)
|
||||||
set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} --32")
|
set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} --32")
|
||||||
|
set(CMAKE_ASM_NASM_OBJECT_FORMAT bin)
|
||||||
set(CMAKE_SYSTEM_PROCESSOR i386)
|
set(CMAKE_SYSTEM_PROCESSOR i386)
|
||||||
set(CMAKE_SYSTEM_NAME None)
|
set(CMAKE_SYSTEM_NAME None)
|
||||||
set(CMAKE_ASM_NASM_COMPILER nasm)
|
set(CMAKE_ASM_NASM_COMPILER nasm)
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
[BITS 16]
|
||||||
|
|
||||||
; Set up the segment registers
|
; Set up the segment registers
|
||||||
xor ax, ax
|
xor ax, ax
|
||||||
mov ds, ax
|
mov ds, ax
|
||||||
|
@ -16,18 +16,42 @@
|
|||||||
// Initialize the PCI bus
|
// Initialize the PCI bus
|
||||||
void pci_init()
|
void pci_init()
|
||||||
{
|
{
|
||||||
// Add any necessary initialization code here
|
// Enable PCI bus master
|
||||||
|
pci_write(PCI_COMMAND_PORT, 0x04);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Detect and configure PCI devices
|
// Detect and configure PCI devices
|
||||||
void pci_detect_devices()
|
void pci_detect_devices()
|
||||||
{
|
{
|
||||||
|
// Scan all PCI buses and devices
|
||||||
|
for (int bus = 0; bus < 256; bus++) {
|
||||||
|
for (int device = 0; device < 32; device++) {
|
||||||
|
for (int function = 0; function < 8; function++) {
|
||||||
|
uint16_t vendor_id = pci_read(bus, device, function, 0x00);
|
||||||
|
if (vendor_id != 0xFFFF) {
|
||||||
|
uint16_t device_id = pci_read(bus, device, function, 0x02);
|
||||||
|
uint8_t class_code = pci_read(bus, device, function, 0x0B);
|
||||||
|
uint8_t subclass_code = pci_read(bus, device, function, 0x0A);
|
||||||
|
uint8_t prog_if = pci_read(bus, device, function, 0x09);
|
||||||
|
uint8_t header_type = pci_read(bus, device, function, 0x0E);
|
||||||
|
uint8_t irq_line = pci_read(bus, device, function, 0x3C);
|
||||||
|
uint32_t bar0 = pci_read(bus, device, function, 0x10);
|
||||||
|
uint32_t bar1 = pci_read(bus, device, function, 0x14);
|
||||||
|
uint32_t bar2 = pci_read(bus, device, function, 0x18);
|
||||||
|
uint32_t bar3 = pci_read(bus, device, function, 0x1C);
|
||||||
|
uint32_t bar4 = pci_read(bus, device, function, 0x20);
|
||||||
|
uint32_t bar5 = pci_read(bus, device, function, 0x24);
|
||||||
// Add any necessary device detection and configuration code here
|
// Add any necessary device detection and configuration code here
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Read from a PCI device
|
// Read from a PCI device
|
||||||
uint8_t pci_read(uint16_t port)
|
uint8_t pci_read(uint8_t bus, uint8_t device, uint8_t function, uint8_t offset)
|
||||||
{
|
{
|
||||||
|
uint16_t port = PCI_BASE_ADDRESS | ((uint16_t)bus << 8) | ((uint16_t)device << 3) | ((uint16_t)function << 0x0B) | ((uint16_t)offset & 0xFC);
|
||||||
uint8_t value;
|
uint8_t value;
|
||||||
|
|
||||||
// Read from the specified port
|
// Read from the specified port
|
||||||
|
@ -11,8 +11,7 @@ void pci_init();
|
|||||||
// Detect and configure PCI devices
|
// Detect and configure PCI devices
|
||||||
void pci_detect_devices();
|
void pci_detect_devices();
|
||||||
|
|
||||||
// Read from a PCI device
|
uint8_t pci_read(uint8_t bus, uint8_t device, uint8_t function, uint8_t offset);
|
||||||
uint8_t pci_read(uint16_t port);
|
|
||||||
|
|
||||||
// Write to a PCI device
|
// Write to a PCI device
|
||||||
void pci_write(uint16_t port, uint8_t value);
|
void pci_write(uint16_t port, uint8_t value);
|
||||||
|
Loading…
Reference in New Issue
Block a user