diff options
author | Andreas Sandberg <andreas.sandberg@arm.com> | 2015-12-10 10:35:15 +0000 |
---|---|---|
committer | Andreas Sandberg <andreas.sandberg@arm.com> | 2015-12-10 10:35:15 +0000 |
commit | 139c97c9772be38577eaa52af5d1ef3607da4bcb (patch) | |
tree | ce65908298ab9e146ea43541ebbe57b6277a9ee2 /src/dev/pcidev.hh | |
parent | 2d79bf3d4dfd997d352b8399c4c9f3ff9d05de41 (diff) | |
download | gem5-139c97c9772be38577eaa52af5d1ef3607da4bcb.tar.xz |
dev: Move existing PCI device functionality to src/dev/pci
Move pcidev.(hh|cc) to src/dev/pci/device.(hh|cc) and update existing
devices to use the new header location. This also renames the PCIDEV
debug flag to have a capitalization that is consistent with the PCI
host and other devices.
--HG--
rename : src/dev/Pci.py => src/dev/pci/PciDevice.py
rename : src/dev/pcidev.cc => src/dev/pci/device.cc
rename : src/dev/pcidev.hh => src/dev/pci/device.hh
rename : src/dev/pcireg.h => src/dev/pci/pcireg.h
Diffstat (limited to 'src/dev/pcidev.hh')
-rw-r--r-- | src/dev/pcidev.hh | 227 |
1 files changed, 0 insertions, 227 deletions
diff --git a/src/dev/pcidev.hh b/src/dev/pcidev.hh deleted file mode 100644 index a7a2137b0..000000000 --- a/src/dev/pcidev.hh +++ /dev/null @@ -1,227 +0,0 @@ -/* - * Copyright (c) 2013 ARM Limited - * All rights reserved - * - * The license below extends only to copyright in the software and shall - * not be construed as granting a license to any other intellectual - * property including but not limited to intellectual property relating - * to a hardware implementation of the functionality of the software - * licensed hereunder. You may use the software subject to the license - * terms below provided that you ensure that this notice is replicated - * unmodified and in its entirety in all distributions of the software, - * modified or unmodified, in source code or in binary form. - * - * Copyright (c) 2004-2005 The Regents of The University of Michigan - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer; - * redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution; - * neither the name of the copyright holders nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * Authors: Ali Saidi - * Andrew Schultz - * Nathan Binkert - */ - -/* @file - * Interface for devices using PCI configuration - */ - -#ifndef __DEV_PCIDEV_HH__ -#define __DEV_PCIDEV_HH__ - -#include <cstring> -#include <vector> - -#include "dev/dma_device.hh" -#include "dev/pcireg.h" -#include "dev/pci/host.hh" -#include "params/PciDevice.hh" -#include "sim/byteswap.hh" - -#define BAR_IO_MASK 0x3 -#define BAR_MEM_MASK 0xF -#define BAR_IO_SPACE_BIT 0x1 -#define BAR_IO_SPACE(x) ((x) & BAR_IO_SPACE_BIT) -#define BAR_NUMBER(x) (((x) - PCI0_BASE_ADDR0) >> 0x2); - -/** - * PCI device, base implementation is only config space. - */ -class PciDevice : public DmaDevice -{ - protected: - const PciBusAddr _busAddr; - - /** The current config space. */ - PCIConfig config; - - /** The capability list structures and base addresses - * @{ - */ - const int PMCAP_BASE; - const int PMCAP_ID_OFFSET; - const int PMCAP_PC_OFFSET; - const int PMCAP_PMCS_OFFSET; - PMCAP pmcap; - - const int MSICAP_BASE; - MSICAP msicap; - - const int MSIXCAP_BASE; - const int MSIXCAP_ID_OFFSET; - const int MSIXCAP_MXC_OFFSET; - const int MSIXCAP_MTAB_OFFSET; - const int MSIXCAP_MPBA_OFFSET; - int MSIX_TABLE_OFFSET; - int MSIX_TABLE_END; - int MSIX_PBA_OFFSET; - int MSIX_PBA_END; - MSIXCAP msixcap; - - const int PXCAP_BASE; - PXCAP pxcap; - /** @} */ - - /** MSIX Table and PBA Structures */ - std::vector<MSIXTable> msix_table; - std::vector<MSIXPbaEntry> msix_pba; - - /** The size of the BARs */ - uint32_t BARSize[6]; - - /** The current address mapping of the BARs */ - Addr BARAddrs[6]; - - /** Whether the BARs are really hardwired legacy IO locations. */ - bool legacyIO[6]; - - /** - * Does the given address lie within the space mapped by the given - * base address register? - */ - bool - isBAR(Addr addr, int bar) const - { - assert(bar >= 0 && bar < 6); - return BARAddrs[bar] <= addr && addr < BARAddrs[bar] + BARSize[bar]; - } - - /** - * Which base address register (if any) maps the given address? - * @return The BAR number (0-5 inclusive), or -1 if none. - */ - int - getBAR(Addr addr) - { - for (int i = 0; i <= 5; ++i) - if (isBAR(addr, i)) - return i; - - return -1; - } - - /** - * Which base address register (if any) maps the given address? - * @param addr The address to check. - * @retval bar The BAR number (0-5 inclusive), - * only valid if return value is true. - * @retval offs The offset from the base address, - * only valid if return value is true. - * @return True iff address maps to a base address register's region. - */ - bool - getBAR(Addr addr, int &bar, Addr &offs) - { - int b = getBAR(addr); - if (b < 0) - return false; - - offs = addr - BARAddrs[b]; - bar = b; - return true; - } - - public: // Host configuration interface - /** - * Write to the PCI config space data that is stored locally. This may be - * overridden by the device but at some point it will eventually call this - * for normal operations that it does not need to override. - * @param pkt packet containing the write the offset into config space - */ - virtual Tick writeConfig(PacketPtr pkt); - - - /** - * Read from the PCI config space data that is stored locally. This may be - * overridden by the device but at some point it will eventually call this - * for normal operations that it does not need to override. - * @param pkt packet containing the write the offset into config space - */ - virtual Tick readConfig(PacketPtr pkt); - - protected: - PciHost::DeviceInterface hostInterface; - - Tick pioDelay; - Tick configDelay; - - public: - Addr pciToDma(Addr pci_addr) const { - return hostInterface.dmaAddr(pci_addr); - } - - void intrPost() { hostInterface.postInt(); } - void intrClear() { hostInterface.clearInt(); } - - uint8_t interruptLine() const { return letoh(config.interruptLine); } - - /** - * Determine the address ranges that this device responds to. - * - * @return a list of non-overlapping address ranges - */ - AddrRangeList getAddrRanges() const override; - - /** - * Constructor for PCI Dev. This function copies data from the - * config file object PCIConfigData and registers the device with - * a PciHost object. - */ - PciDevice(const PciDeviceParams *params); - - /** - * Serialize this object to the given output stream. - * @param os The stream to serialize to. - */ - void serialize(CheckpointOut &cp) const override; - - /** - * Reconstruct the state of this object from a checkpoint. - * @param cp The checkpoint use. - * @param section The section name of this object - */ - void unserialize(CheckpointIn &cp) override; - - const PciBusAddr &busAddr() const { return _busAddr; } -}; -#endif // __DEV_PCIDEV_HH__ |