ruby: network: garnet: remove functions for computing power
[gem5.git] / src / dev / pcidev.hh
index c0c3df0a610f1cc959ca6adcdc518235de5e0be0..4f3dfd21909966070d18aa0c18feefae5e2ceb87 100644 (file)
@@ -1,4 +1,16 @@
 /*
+ * 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.
  *
@@ -38,8 +50,9 @@
 #define __DEV_PCIDEV_HH__
 
 #include <cstring>
+#include <vector>
 
-#include "dev/io_device.hh"
+#include "dev/dma_device.hh"
 #include "dev/pcireg.h"
 #include "dev/platform.hh"
 #include "params/PciDevice.hh"
 /**
  * PCI device, base implementation is only config space.
  */
-class PciDev : public DmaDevice
+class PciDevice : public DmaDevice
 {
     class PciConfigPort : public SimpleTimingPort
     {
       protected:
-        PciDev *device;
+        PciDevice *device;
 
         virtual Tick recvAtomic(PacketPtr pkt);
 
-        virtual AddrRangeList getAddrRanges();
+        virtual AddrRangeList getAddrRanges() const;
 
         Platform *platform;
 
@@ -76,7 +89,7 @@ class PciDev : public DmaDevice
         Addr configAddr;
 
       public:
-        PciConfigPort(PciDev *dev, int busid, int devid, int funcid,
+        PciConfigPort(PciDevice *dev, int busid, int devid, int funcid,
                       Platform *p);
     };
 
@@ -91,6 +104,25 @@ class PciDev : public DmaDevice
   protected:
     /** The current config space.  */
     PCIConfig config;
+    /** The capability list structures and base addresses
+     * @{
+     */
+    const int PMCAP_BASE;
+    PMCAP pmcap;
+
+    const int MSICAP_BASE;
+    MSICAP msicap;
+
+    const int MSIXCAP_BASE;
+    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];
@@ -151,7 +183,7 @@ class PciDev : public DmaDevice
     Platform *platform;
     Tick pioDelay;
     Tick configDelay;
-    PciConfigPort *configPort;
+    PciConfigPort configPort;
 
     /**
      * Write to the PCI config space data that is stored locally. This may be
@@ -191,14 +223,14 @@ class PciDev : public DmaDevice
      *
      * @return a list of non-overlapping address ranges
      */
-    AddrRangeList getAddrRanges();
+    AddrRangeList getAddrRanges() const;
 
     /**
      * Constructor for PCI Dev. This function copies data from the
      * config file object PCIConfigData and registers the device with
      * a PciConfigAll object.
      */
-    PciDev(const Params *params);
+    PciDevice(const Params *params);
 
     virtual void init();
 
@@ -216,19 +248,15 @@ class PciDev : public DmaDevice
     virtual void unserialize(Checkpoint *cp, const std::string &section);
 
 
-    virtual unsigned int drain(Event *de);
+    virtual unsigned int drain(DrainManager *dm);
 
-    virtual Port *getPort(const std::string &if_name, int idx = -1)
+    virtual BaseSlavePort &getSlavePort(const std::string &if_name,
+                                        PortID idx = InvalidPortID)
     {
         if (if_name == "config") {
-            if (configPort != NULL)
-                panic("pciconfig port already connected to.");
-            configPort = new PciConfigPort(this, params()->pci_bus,
-                    params()->pci_dev, params()->pci_func,
-                    params()->platform);
             return configPort;
         }
-        return DmaDevice::getPort(if_name, idx);
+        return DmaDevice::getSlavePort(if_name, idx);
     }
 
 };