Voxia OS v0.0.1
Hobby Project Operating System Targeting x86-64
Loading...
Searching...
No Matches
pci.c
Go to the documentation of this file.
1#include "./pci.h"
2#include <ioforge/ioforge.h>
4#include <libk/io.h>
5#include <libk/serial.h>
6
7#define PCI_COMMAND 0XCF8
8#define PCI_DATA 0xCFC
9
10static uint32_t
13 uint32_t tmp = 0;
14 address = (uint32_t) (((uint32_t) bus << 16) | ((uint32_t) device << 11)
15 | ((uint32_t) func << 8) | (offset & 0xFC)
16 | ((uint32_t) 0x80000000));
18 tmp = inl(PCI_DATA);
19 return tmp;
20}
21
22static void pci_writel(uint8_t bus, uint8_t device, uint8_t func,
25 address = (uint32_t) (((uint32_t) bus << 16) | ((uint32_t) device << 11)
26 | ((uint32_t) func << 8) | (offset & 0xFC)
27 | ((uint32_t) 0x80000000));
30}
31
34 (void) base;
35 return pci_readl(bus, dev, func, (uint8_t) offset); /* existing impl */
36}
37
40 (void) base;
41 pci_writel(bus, dev, func, (uint8_t) offset, val);
42}
43
44// static struct buddy_allocator *pci_allocator;
45
46// uint16_t pci_readw(uint8_t bus, uint8_t device, uint8_t func, uint8_t offset) {
47// uint32_t address;
48// uint16_t tmp = 0;
49// address = (uint32_t) (((uint32_t) bus << 16) | ((uint32_t) device << 11)
50// | ((uint32_t) func << 8) | (offset & 0xFC)
51// | ((uint32_t) 0x80000000));
52
53// outl(PCI_COMMAND, address);
54// tmp = (uint16_t) ((inl(PCI_DATA) >> ((offset & 2) * 8)) & 0xFFFF);
55// return tmp;
56// }
57// uint8_t pci_readb(uint8_t bus, uint8_t device, uint8_t func, uint8_t offset) {
58// uint32_t address = (0x80000000U | (bus << 16) | (device << 11)
59// | (func << 8) | (offset & 0xFC));
60// outl(PCI_COMMAND, address);
61// uint32_t data = inl(PCI_DATA);
62// return (uint8_t) ((data >> ((offset & 3) * 8)) & 0xFF);
63// }
64// void pci_writew(uint8_t bus, uint8_t device, uint8_t func, uint8_t offset,
65// uint16_t value) {
66// uint32_t address = 0x80000000 | (bus << 16) | (device << 11)
67// | (func << 8) | (offset & 0xFC);
68// outl(0xCF8, address);
69// if (offset & 2)
70// outw(0xCFC + 2, value); // upper 16-bit
71// else
72// outw(0xCFC, value); // lower 16-bit
73// }
74
75// void pci_write_command(uint8_t bus, uint8_t dev, uint8_t func, uint16_t value) {
76// uint32_t address =
77// 0x80000000 | (bus << 16) | (dev << 11) | (func << 8) | 0x04;
78
79// outl(0xCF8, address);
80
81// uint32_t data = inl(0xCFC);
82// data = (data & 0xFFFF0000) | value;
83// outl(0xCFC, data);
84// }
elf_section_map uintptr_t base
Definition elf.h:296
uint64_t address
Definition hpet.h:4
static void outl(uint16_t port, uint32_t value)
Definition io.h:18
static uint32_t inl(uint16_t port)
Definition io.h:22
return value
Definition oct2bin.h:22
static void pci_writel(uint8_t bus, uint8_t device, uint8_t func, uint8_t offset, uint32_t value)
Definition pci.c:22
void legacy_write32(uintptr_t base, uint8_t bus, uint8_t dev, uint8_t func, uint16_t offset, uint32_t val)
Definition pci.c:38
#define PCI_DATA
Definition pci.c:8
static uint32_t pci_readl(uint8_t bus, uint8_t device, uint8_t func, uint8_t offset)
Definition pci.c:11
uint32_t legacy_read32(uintptr_t base, uint8_t bus, uint8_t dev, uint8_t func, uint16_t offset)
Definition pci.c:32
#define PCI_COMMAND
Definition pci.c:7
unsigned short uint16_t
Definition type.h:13
unsigned int uint32_t
Definition type.h:19
unsigned long uintptr_t
Definition type.h:73
unsigned char uint8_t
Definition type.h:7
uint32_t offset
Definition virtio.h:6
struct device_id device
Definition vnode.h:13