1# Copyright 2019 Google, Inc. 2# 3# Redistribution and use in source and binary forms, with or without 4# modification, are permitted provided that the following conditions are 5# met: redistributions of source code must retain the above copyright 6# notice, this list of conditions and the following disclaimer; 7# redistributions in binary form must reproduce the above copyright 8# notice, this list of conditions and the following disclaimer in the 9# documentation and/or other materials provided with the distribution; 10# neither the name of the copyright holders nor the names of its 11# contributors may be used to endorse or promote products derived from 12# this software without specific prior written permission. 13# 14# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 15# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 16# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 17# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 18# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 19# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 20# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 21# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 22# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 24# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25# 26# Authors: Gabe Black 27 28from m5.params import Port, VectorPort 29 30def TLM_TARGET_ROLE(width): 31 return 'TLM TARGET %d' % width 32 33def TLM_INITIATOR_ROLE(width): 34 return 'TLM INITIATOR %d' % width 35 36class TlmTargetSocket(Port): 37 def __init__(self, width, desc): 38 my_role = TLM_TARGET_ROLE(width) 39 peer_role = TLM_INITIATOR_ROLE(width) 40 Port.compat(my_role, peer_role) 41 42 super(TlmTargetSocket, self).__init__(my_role, desc) 43 44class VectorTlmTargetSocket(VectorPort): 45 def __init__(self, width, desc): 46 my_role = TLM_TARGET_ROLE(width) 47 peer_role = TLM_INITIATOR_ROLE(width) 48 Port.compat(my_role, peer_role) 49 50 super(VectorTlmTargetSocket, self).__init__(my_role, desc) 51 52class TlmInitiatorSocket(Port): 53 def __init__(self, width, desc): 54 my_role = TLM_INITIATOR_ROLE(width) 55 peer_role = TLM_TARGET_ROLE(width) 56 Port.compat(my_role, peer_role) 57 58 super(TlmInitiatorSocket, self).__init__(my_role, desc, is_source=True) 59 60class VectorTlmInitiatorSocket(VectorPort): 61 def __init__(self, width, desc): 62 my_role = TLM_INITIATOR_ROLE(width) 63 peer_role = TLM_TARGET_ROLE(width) 64 Port.compat(my_role, peer_role) 65 66 super(VectorTlmInitiatorSocket, self).__init__( 67 my_role, desc, is_source=True) 68