Switch to unified view

a b/src/policies/DIF/RMT/Scheduler/LongestQFirst/LongestQFirst.cc
1
//
2
// This program is free software: you can redistribute it and/or modify
3
// it under the terms of the GNU Lesser General Public License as published by
4
// the Free Software Foundation, either version 3 of the License, or
5
// (at your option) any later version.
6
// 
7
// This program is distributed in the hope that it will be useful,
8
// but WITHOUT ANY WARRANTY; without even the implied warranty of
9
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10
// GNU Lesser General Public License for more details.
11
// 
12
// You should have received a copy of the GNU Lesser General Public License
13
// along with this program.  If not, see http://www.gnu.org/licenses/.
14
// 
15
16
#include "LongestQFirst.h"
17
18
Define_Module(LongestQFirst);
19
20
void LongestQFirst::processQueues(RMTPort* port, RMTQueueType direction)
21
{
22
23
    if (direction == RMTQueue::OUTPUT)
24
    {
25
        if (port->isReady())
26
        {
27
            port->setBusy();
28
29
            RMTQueue* outQ = port->getLongestQueue(RMTQueue::OUTPUT);
30
            outQ->startTransmitting();
31
        }
32
        else
33
        {
34
            waitingOnOutput[port] += 1;
35
        }
36
    }
37
    else if (direction == RMTQueue::INPUT)
38
    {
39
        if (inputBusy[port] != true)
40
        {
41
            inputBusy[port] = true;
42
43
            RMTQueue* inQ = port->getLongestQueue(RMTQueue::INPUT);
44
            inQ->startTransmitting();
45
        }
46
        else
47
        {
48
            waitingOnInput[port] += 1;
49
        }
50
    }
51
}