mirror of
https://github.com/gbowne1/ClassicOS.git
synced 2024-11-21 22:06:51 -08:00
working on types and eisa bus driver
This commit is contained in:
parent
79a27d232c
commit
c4749319be
@ -22,7 +22,36 @@ void eisa_init()
|
||||
// Detect and configure EISA devices
|
||||
void eisa_detect_devices()
|
||||
{
|
||||
// Add any necessary device detection and configuration code here
|
||||
uint32_t bus, slot, func;
|
||||
uint16_t vendor_id, device_id, class_code;
|
||||
|
||||
for (bus = 0; bus < 256; bus++)
|
||||
{
|
||||
for (slot = 0; slot < 32; slot++)
|
||||
{
|
||||
for (func = 0; func < 8; func++)
|
||||
{
|
||||
uint32_t address = (bus << 16) | (slot << 11) | (func << 8);
|
||||
uint32_t id = eisa_read_config_dword(address, 0);
|
||||
vendor_id = id & 0xFFFF;
|
||||
device_id = (id >> 16) & 0xFFFF;
|
||||
class_code = eisa_read_config_word(address, 10);
|
||||
if (vendor_id != 0xFFFF)
|
||||
{
|
||||
// Device detected, do something with it
|
||||
if (vendor_id == MY_DEVICE_VENDOR_ID &&
|
||||
device_id == MY_DEVICE_DEVICE_ID &&
|
||||
class_code == MY_DEVICE_CLASS_CODE)
|
||||
{
|
||||
// This is my device, configure it
|
||||
uint32_t config1 = eisa_read_config_dword(address, 4);
|
||||
uint32_t config2 = eisa_read_config_dword(address, 8);
|
||||
// Do something with the configuration data
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Read from an EISA device
|
||||
|
@ -4,12 +4,11 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "../display.h"
|
||||
#include "../interrupts.h"
|
||||
#include "../display/display.h"
|
||||
#include "../io/io.h"
|
||||
#include "../keyboard.h"
|
||||
#include "../keyboard/keyboard.h"
|
||||
#include "../screen/screen.h"
|
||||
#include "../string.h"
|
||||
#include "./screen/screen.h"
|
||||
|
||||
#include "./tty.h"
|
||||
|
||||
|
18
src/kernel/arch/x86/include/types.c
Normal file
18
src/kernel/arch/x86/include/types.c
Normal file
@ -0,0 +1,18 @@
|
||||
#include "./types.h"
|
||||
|
||||
void gdt_set_entry(gdt_entry_t *entry, uint32_t base, uint32_t limit,
|
||||
uint16_t flags)
|
||||
{
|
||||
entry->base = base;
|
||||
entry->limit = limit;
|
||||
entry->flags = flags;
|
||||
}
|
||||
|
||||
void idt_set_entry(idt_entry_t *entry, uint32_t base, uint16_t selector,
|
||||
uint16_t flags)
|
||||
{
|
||||
entry->base_low = base & 0xFFFF;
|
||||
entry->base_high = (base >> 16) & 0xFFFF;
|
||||
entry->selector = selector;
|
||||
entry->flags = flags;
|
||||
}
|
@ -14,11 +14,11 @@ typedef struct
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint16_t base_lo; // Lower 16 bits of handler function address
|
||||
uint16_t selector; // Kernel segment selector
|
||||
uint8_t always0; // Always 0
|
||||
uint8_t flags; // Flags
|
||||
uint16_t base_hi; // Upper 16 bits of handler function address
|
||||
} idt_entry_t;
|
||||
uint16_t base_low;
|
||||
uint16_t selector;
|
||||
uint8_t zero;
|
||||
uint8_t flags;
|
||||
uint16_t base_high;
|
||||
} __attribute__((packed)) idt_entry_t;
|
||||
|
||||
#endif /* TYPES_H */
|
@ -16,7 +16,7 @@ struct isr_regs
|
||||
};
|
||||
|
||||
// Register an ISR
|
||||
void isr_register(uint8_t num, void (*handler)(void));
|
||||
void isr_register(uint8_t num, void (*handler)(struct isr_regs *regs));
|
||||
|
||||
// ISR handler
|
||||
void isr_handler(struct isr_regs *regs);
|
||||
|
Loading…
Reference in New Issue
Block a user