57 lines
1.2 KiB
C++
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;
|
|
}
|
|
};
|