1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- /* SPDX-License-Identifier: MIT */
- /* SPDX-FileCopyrightText: 2023 Nicholas Chin */
- #if defined(__linux__)
- #include <sys/io.h>
- #endif
- #if defined(__OpenBSD__)
- #include <machine/sysarch.h>
- #include <sys/types.h>
- #if defined(__amd64__)
- #include <amd64/pio.h>
- #elif defined(__i386__)
- #include <i386/pio.h>
- #endif /* __i386__ */
- #endif /* __OpenBSD__ */
- #include <errno.h>
- #include "accessors.h"
- uint32_t
- pci_read_32(uint32_t dev, uint8_t reg)
- {
- sys_outl(PCI_CFG_ADDR, dev | reg);
- return sys_inl(PCI_CFG_DATA);
- }
- void
- pci_write_32(uint32_t dev, uint8_t reg, uint32_t value)
- {
- sys_outl(PCI_CFG_ADDR, dev | reg);
- sys_outl(PCI_CFG_DATA, value);
- }
- void
- sys_outb(unsigned int port, uint8_t data)
- {
- #if defined(__linux__)
- outb(data, port);
- #endif
- #if defined(__OpenBSD__)
- outb(port, data);
- #endif
- }
- void
- sys_outl(unsigned int port, uint32_t data)
- {
- #if defined(__linux__)
- outl(data, port);
- #endif
- #if defined(__OpenBSD__)
- outl(port, data);
- #endif
- }
- uint8_t
- sys_inb(unsigned int port)
- {
- #if defined(__linux__) || defined (__OpenBSD__)
- return inb(port);
- #endif
- return 0;
- }
- uint32_t
- sys_inl(unsigned int port)
- {
- #if defined(__linux__) || defined (__OpenBSD__)
- return inl(port);
- #endif
- return 0;
- }
- int
- sys_iopl(int level)
- {
- #if defined(__linux__)
- return iopl(level);
- #endif
- #if defined(__OpenBSD__)
- #if defined(__i386__)
- return i386_iopl(level);
- #elif defined(__amd64__)
- return amd64_iopl(level);
- #endif /* __amd64__ */
- #endif /* __OpenBSD__ */
- errno = ENOSYS;
- return -1;
- }
|