genode/repos/os/src/drivers/platform/x86/pci_bridge.h

57 lines
1.2 KiB
C++

/*
* \brief PCI bridge discovery
* \author Sebastian Sumpf <sebastian.sumpf@genode-labs.com>
* \date 2012-02-25
*/
/*
* Copyright (C) 2009-2015 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.
*/
#pragma once
namespace Platform { class Bridge; }
#include <util/list.h>
/**
* List of PCI-bridge devices
*/
class Platform::Bridge : public Genode::List<Bridge>::Element
{
private:
/* PCI config space fields of bridge */
unsigned char _bus;
unsigned char _dev;
unsigned char _fun;
unsigned char _secondary_bus;
unsigned char _subordinate_bus;
public:
Bridge(unsigned char bus, unsigned char dev, unsigned char fun,
unsigned char secondary_bus, unsigned char subordinate_bus)
:
_bus(bus), _dev(dev), _fun(fun), _secondary_bus(secondary_bus),
_subordinate_bus(subordinate_bus)
{ }
bool part_of (unsigned char bus) const
{
return _secondary_bus <= bus && bus <= _subordinate_bus;
}
unsigned short bdf()
{
unsigned short bdf = _bus;
bdf = (bdf << 8) | ((_dev & 0x1f) << 3) | (_fun & 0x7);
return bdf;
}
};