gem5 [DEVELOP-FOR-25.0]
Loading...
Searching...
No Matches
intpin.hh
Go to the documentation of this file.
1/*
2 * Copyright 2019 Google, Inc.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are
6 * met: redistributions of source code must retain the above copyright
7 * notice, this list of conditions and the following disclaimer;
8 * redistributions in binary form must reproduce the above copyright
9 * notice, this list of conditions and the following disclaimer in the
10 * documentation and/or other materials provided with the distribution;
11 * neither the name of the copyright holders nor the names of its
12 * contributors may be used to endorse or promote products derived from
13 * this software without specific prior written permission.
14 *
15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
16 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
17 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
18 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
19 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
20 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
21 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28#ifndef __DEV_INTPIN_HH__
29#define __DEV_INTPIN_HH__
30
31#include <type_traits>
32
33#include "base/trace.hh"
34#include "debug/IntPin.hh"
35#include "sim/signal.hh"
36
37namespace gem5
38{
39
40class IntSinkPinBase : public SignalSinkPort<bool>
41{
42 private:
43 const int _number = 0;
44
45 public:
46
47 template <class Device>
48 IntSinkPinBase(const std::string &_name, PortID _id, Device *dev,
49 int num) :
50 SignalSinkPort(_name, _id), _number(num)
51 {
52 onChange([dev, num](const bool &new_val) {
53 if (new_val)
54 dev->raiseInterruptPin(num);
55 else
56 dev->lowerInterruptPin(num);
57 });
58 }
59
60 template <class Device>
61 IntSinkPinBase(const std::string &_name, PortID _id, Device *dev) :
62 IntSinkPinBase(_name, _id, dev, _id)
63 {}
64
65 IntSinkPinBase(const std::string &_name, PortID _id, int num) :
66 SignalSinkPort(_name, _id), _number(num)
67 {}
68
69 IntSinkPinBase(const std::string &_name, PortID _id) :
70 IntSinkPinBase(_name, _id, _id)
71 {}
72
73 int number() { return _number; }
74};
75
76template <class Compat>
78
80{
81 public:
82 template <class Device>
83 IntSourcePinBase(const std::string &_name, PortID _id, Device *owner) :
84 SignalSourcePort(_name, _id)
85 {}
86
87 IntSourcePinBase(const std::string &_name, PortID _id) :
88 SignalSourcePort(_name, _id)
89 {}
90
91 void raise() {
92 DPRINTF(IntPin, "Raise interrupt.\n");
93 set(true);
94 }
95 void lower() {
96 DPRINTF(IntPin, "Lower interrupt.\n");
97 set(false);
98 }
99};
100
101template <class Compat>
103
104} // namespace gem5
105
106#endif //__DEV_INTPIN_HH__
#define DPRINTF(x,...)
Definition trace.hh:209
IntSinkPinBase(const std::string &_name, PortID _id)
Definition intpin.hh:69
IntSinkPinBase(const std::string &_name, PortID _id, Device *dev)
Definition intpin.hh:61
IntSinkPinBase(const std::string &_name, PortID _id, Device *dev, int num)
Definition intpin.hh:48
const int _number
Definition intpin.hh:43
IntSinkPinBase(const std::string &_name, PortID _id, int num)
Definition intpin.hh:65
IntSourcePinBase(const std::string &_name, PortID _id, Device *owner)
Definition intpin.hh:83
IntSourcePinBase(const std::string &_name, PortID _id)
Definition intpin.hh:87
void onChange(OnChangeFunc func)
Definition signal.hh:77
SignalSinkPort(const std::string &_name, PortID _id=InvalidPortID)
Definition signal.hh:72
SignalSourcePort(const std::string &_name, PortID _id=InvalidPortID)
Definition signal.hh:105
Bitfield< 12, 11 > set
Copyright (c) 2024 Arm Limited All rights reserved.
Definition binary32.hh:36
IntSourcePinBase IntSourcePin
Definition intpin.hh:102
int16_t PortID
Port index/ID type, and a symbolic name for an invalid port id.
Definition types.hh:245
IntSinkPinBase IntSinkPin
Definition intpin.hh:77

Generated on Mon May 26 2025 09:19:09 for gem5 by doxygen 1.13.2