Files
lk/dev/bus/pci/backend/ecam.h
2025-10-05 14:22:41 -07:00

43 lines
1.4 KiB
C++

/*
* Copyright (c) 2021 Travis Geiselbrecht
*
* Use of this source code is governed by a MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT
*/
#pragma once
#include "pci_backend.h"
class pci_ecam final : public pci_backend {
public:
virtual ~pci_ecam();
// factory to detect and create an instance
static pci_ecam *detect(paddr_t ecam_base, uint16_t segment, uint8_t start_bus, uint8_t end_bus);
// a few overridden methods
int read_config_byte(pci_location_t state, uint32_t reg, uint8_t *value) override;
int read_config_half(pci_location_t state, uint32_t reg, uint16_t *value) override;
int read_config_word(pci_location_t state, uint32_t reg, uint32_t *value) override;
int write_config_byte(pci_location_t state, uint32_t reg, uint8_t value) override;
int write_config_half(pci_location_t state, uint32_t reg, uint16_t value) override;
int write_config_word(pci_location_t state, uint32_t reg, uint32_t value) override;
private:
// only created via the detect() factory
pci_ecam(paddr_t base, uint16_t segment, uint8_t start_bus, uint8_t end_bus);
// allocate vm resources for the object
status_t initialize();
paddr_t base_;
uint16_t segment_;
uint16_t start_bus_;
uint16_t end_bus_;
// vm region where the ecam is mapped
uint8_t *ecam_ptr_ = nullptr;
};