Serenity Operating System
at master 50 lines 2.0 kB view raw
1/* 2 * Copyright (c) 2021, Liav A. <liavalb@hotmail.co.il> 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#pragma once 8 9#include <AK/Error.h> 10#include <AK/Try.h> 11#include <Kernel/Bus/PCI/Definitions.h> 12 13namespace Kernel::PCI { 14 15void write8_locked(DeviceIdentifier const&, PCI::RegisterOffset field, u8 value); 16void write16_locked(DeviceIdentifier const&, PCI::RegisterOffset field, u16 value); 17void write32_locked(DeviceIdentifier const&, PCI::RegisterOffset field, u32 value); 18u8 read8_locked(DeviceIdentifier const&, PCI::RegisterOffset field); 19u16 read16_locked(DeviceIdentifier const&, PCI::RegisterOffset field); 20u32 read32_locked(DeviceIdentifier const&, PCI::RegisterOffset field); 21 22HardwareID get_hardware_id(DeviceIdentifier const&); 23bool is_io_space_enabled(DeviceIdentifier const&); 24ErrorOr<void> enumerate(Function<void(DeviceIdentifier const&)> callback); 25void enable_interrupt_line(DeviceIdentifier const&); 26void disable_interrupt_line(DeviceIdentifier const&); 27void raw_access(DeviceIdentifier const&, u32, size_t, u32); 28 29u32 get_BAR0(DeviceIdentifier const&); 30u32 get_BAR1(DeviceIdentifier const&); 31u32 get_BAR2(DeviceIdentifier const&); 32u32 get_BAR3(DeviceIdentifier const&); 33u32 get_BAR4(DeviceIdentifier const&); 34u32 get_BAR5(DeviceIdentifier const&); 35u32 get_BAR(DeviceIdentifier const&, HeaderType0BaseRegister); 36size_t get_BAR_space_size(DeviceIdentifier const&, HeaderType0BaseRegister); 37BARSpaceType get_BAR_space_type(u32 pci_bar_value); 38size_t get_expansion_rom_space_size(DeviceIdentifier const&); 39 40void enable_bus_mastering(DeviceIdentifier const&); 41void disable_bus_mastering(DeviceIdentifier const&); 42void enable_io_space(DeviceIdentifier const&); 43void disable_io_space(DeviceIdentifier const&); 44void enable_memory_space(DeviceIdentifier const&); 45void disable_memory_space(DeviceIdentifier const&); 46 47// FIXME: Remove this once we can use PCI::Capability with inline buffer 48// so we don't need this method 49DeviceIdentifier const& get_device_identifier(Address address); 50}