Serenity Operating System
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}