2020-01-18 09:38:21 +01:00
|
|
|
/*
|
2020-03-06 16:59:29 +02:00
|
|
|
* Copyright (c) 2020, Liav A. <liavalb@hotmail.co.il>
|
2020-01-18 09:38:21 +01:00
|
|
|
*
|
2021-04-22 01:24:48 -07:00
|
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
2020-01-18 09:38:21 +01:00
|
|
|
*/
|
|
|
|
|
|
2019-12-31 13:04:30 +02:00
|
|
|
#pragma once
|
2020-05-28 20:40:53 +02:00
|
|
|
|
2021-06-25 09:46:17 +03:00
|
|
|
#include <Kernel/Bus/PCI/Access.h>
|
2019-12-31 13:04:30 +02:00
|
|
|
|
2020-02-16 01:27:42 +01:00
|
|
|
namespace Kernel {
|
2020-04-08 17:09:49 +02:00
|
|
|
namespace PCI {
|
2020-02-16 01:27:42 +01:00
|
|
|
|
2020-04-08 17:09:49 +02:00
|
|
|
class IOAccess final : public PCI::Access {
|
2019-12-31 13:04:30 +02:00
|
|
|
public:
|
|
|
|
|
static void initialize();
|
2020-03-08 16:50:46 +02:00
|
|
|
|
2019-12-31 13:04:30 +02:00
|
|
|
protected:
|
|
|
|
|
IOAccess();
|
|
|
|
|
|
|
|
|
|
private:
|
2020-04-10 20:25:03 +03:00
|
|
|
virtual void enumerate_hardware(Function<void(Address, ID)>) override;
|
2020-04-08 17:09:49 +02:00
|
|
|
virtual uint32_t segment_count() const override { return 1; };
|
|
|
|
|
virtual void write8_field(Address address, u32, u8) override final;
|
|
|
|
|
virtual void write16_field(Address address, u32, u16) override final;
|
|
|
|
|
virtual void write32_field(Address address, u32, u32) override final;
|
|
|
|
|
virtual u8 read8_field(Address address, u32) override;
|
|
|
|
|
virtual u16 read16_field(Address address, u32) override;
|
|
|
|
|
virtual u32 read32_field(Address address, u32) override;
|
2020-02-16 01:27:42 +01:00
|
|
|
|
2020-04-08 17:09:49 +02:00
|
|
|
virtual uint8_t segment_start_bus(u32) const override { return 0x0; }
|
|
|
|
|
virtual uint8_t segment_end_bus(u32) const override { return 0xFF; }
|
2020-02-16 01:27:42 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
}
|
2020-04-08 17:09:49 +02:00
|
|
|
}
|