pl011.cc revision 8245:a9d06c894afe
112027Sjungma@eit.uni-kl.de/* 212027Sjungma@eit.uni-kl.de * Copyright (c) 2010 ARM Limited 312027Sjungma@eit.uni-kl.de * All rights reserved 412027Sjungma@eit.uni-kl.de * 512027Sjungma@eit.uni-kl.de * The license below extends only to copyright in the software and shall 612027Sjungma@eit.uni-kl.de * not be construed as granting a license to any other intellectual 712027Sjungma@eit.uni-kl.de * property including but not limited to intellectual property relating 812027Sjungma@eit.uni-kl.de * to a hardware implementation of the functionality of the software 912027Sjungma@eit.uni-kl.de * licensed hereunder. You may use the software subject to the license 1012027Sjungma@eit.uni-kl.de * terms below provided that you ensure that this notice is replicated 1112027Sjungma@eit.uni-kl.de * unmodified and in its entirety in all distributions of the software, 1212027Sjungma@eit.uni-kl.de * modified or unmodified, in source code or in binary form. 1312027Sjungma@eit.uni-kl.de * 1412027Sjungma@eit.uni-kl.de * Copyright (c) 2005 The Regents of The University of Michigan 1512027Sjungma@eit.uni-kl.de * All rights reserved. 1612027Sjungma@eit.uni-kl.de * 1712027Sjungma@eit.uni-kl.de * Redistribution and use in source and binary forms, with or without 1812027Sjungma@eit.uni-kl.de * modification, are permitted provided that the following conditions are 1912027Sjungma@eit.uni-kl.de * met: redistributions of source code must retain the above copyright 2012027Sjungma@eit.uni-kl.de * notice, this list of conditions and the following disclaimer; 2112027Sjungma@eit.uni-kl.de * redistributions in binary form must reproduce the above copyright 2212027Sjungma@eit.uni-kl.de * notice, this list of conditions and the following disclaimer in the 2312027Sjungma@eit.uni-kl.de * documentation and/or other materials provided with the distribution; 2412027Sjungma@eit.uni-kl.de * neither the name of the copyright holders nor the names of its 2512027Sjungma@eit.uni-kl.de * contributors may be used to endorse or promote products derived from 2612027Sjungma@eit.uni-kl.de * this software without specific prior written permission. 2712027Sjungma@eit.uni-kl.de * 2812027Sjungma@eit.uni-kl.de * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 2912027Sjungma@eit.uni-kl.de * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 3012027Sjungma@eit.uni-kl.de * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 3112027Sjungma@eit.uni-kl.de * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 3212027Sjungma@eit.uni-kl.de * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 3312027Sjungma@eit.uni-kl.de * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 3412027Sjungma@eit.uni-kl.de * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 3512027Sjungma@eit.uni-kl.de * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 3612027Sjungma@eit.uni-kl.de * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 3712027Sjungma@eit.uni-kl.de * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 3812027Sjungma@eit.uni-kl.de * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 3912027Sjungma@eit.uni-kl.de * 4012027Sjungma@eit.uni-kl.de * Authors: Ali Saidi 4112027Sjungma@eit.uni-kl.de */ 4212027Sjungma@eit.uni-kl.de 4312027Sjungma@eit.uni-kl.de#include "base/trace.hh" 4412027Sjungma@eit.uni-kl.de#include "debug/Checkpoint.hh" 4512027Sjungma@eit.uni-kl.de#include "debug/Uart.hh" 4612027Sjungma@eit.uni-kl.de#include "dev/arm/amba_device.hh" 4712027Sjungma@eit.uni-kl.de#include "dev/arm/gic.hh" 4812027Sjungma@eit.uni-kl.de#include "dev/arm/pl011.hh" 4912027Sjungma@eit.uni-kl.de#include "dev/terminal.hh" 5012027Sjungma@eit.uni-kl.de#include "mem/packet.hh" 5112027Sjungma@eit.uni-kl.de#include "mem/packet_access.hh" 5212027Sjungma@eit.uni-kl.de#include "sim/sim_exit.hh" 5312027Sjungma@eit.uni-kl.de 5412027Sjungma@eit.uni-kl.dePl011::Pl011(const Params *p) 5512027Sjungma@eit.uni-kl.de : Uart(p), control(0x300), fbrd(0), ibrd(0), lcrh(0), ifls(0x12), imsc(0), 5612027Sjungma@eit.uni-kl.de rawInt(0), maskInt(0), intNum(p->int_num), gic(p->gic), 5712027Sjungma@eit.uni-kl.de endOnEOT(p->end_on_eot), intDelay(p->int_delay), intEvent(this) 5812027Sjungma@eit.uni-kl.de{ 5912027Sjungma@eit.uni-kl.de pioSize = 0xfff; 6012027Sjungma@eit.uni-kl.de} 6112027Sjungma@eit.uni-kl.de 6212027Sjungma@eit.uni-kl.deTick 6312027Sjungma@eit.uni-kl.dePl011::read(PacketPtr pkt) 6412027Sjungma@eit.uni-kl.de{ 6512027Sjungma@eit.uni-kl.de assert(pkt->getAddr() >= pioAddr && pkt->getAddr() < pioAddr + pioSize); 6612027Sjungma@eit.uni-kl.de 6712027Sjungma@eit.uni-kl.de Addr daddr = pkt->getAddr() - pioAddr; 6812027Sjungma@eit.uni-kl.de pkt->allocate(); 6912027Sjungma@eit.uni-kl.de 7012027Sjungma@eit.uni-kl.de DPRINTF(Uart, " read register %#x size=%d\n", daddr, pkt->getSize()); 7112027Sjungma@eit.uni-kl.de 7212027Sjungma@eit.uni-kl.de // use a temporary data since the uart registers are read/written with 7312027Sjungma@eit.uni-kl.de // different size operations 7412027Sjungma@eit.uni-kl.de // 7512027Sjungma@eit.uni-kl.de uint32_t data = 0; 7612027Sjungma@eit.uni-kl.de 7712027Sjungma@eit.uni-kl.de switch(daddr) { 7812027Sjungma@eit.uni-kl.de case UART_DR: 7912027Sjungma@eit.uni-kl.de data = 0; 8012027Sjungma@eit.uni-kl.de if (term->dataAvailable()) 8112027Sjungma@eit.uni-kl.de data = term->in(); 8212027Sjungma@eit.uni-kl.de break; 8312027Sjungma@eit.uni-kl.de case UART_FR: 8412027Sjungma@eit.uni-kl.de // For now we're infintely fast, so TX is never full, always empty, 8512027Sjungma@eit.uni-kl.de // always clear to send 8612027Sjungma@eit.uni-kl.de data = UART_FR_TXFE | UART_FR_CTS; 8712027Sjungma@eit.uni-kl.de if (!term->dataAvailable()) 8812027Sjungma@eit.uni-kl.de data |= UART_FR_RXFE; 8912027Sjungma@eit.uni-kl.de DPRINTF(Uart, "Reading FR register as %#x rawInt=0x%x imsc=0x%x maskInt=0x%x\n", 9012027Sjungma@eit.uni-kl.de data, rawInt, imsc, maskInt); 9112027Sjungma@eit.uni-kl.de break; 9212027Sjungma@eit.uni-kl.de case UART_CR: 9312027Sjungma@eit.uni-kl.de data = control; 9412027Sjungma@eit.uni-kl.de break; 9512027Sjungma@eit.uni-kl.de case UART_IBRD: 9612027Sjungma@eit.uni-kl.de data = ibrd; 9712027Sjungma@eit.uni-kl.de break; 9812027Sjungma@eit.uni-kl.de case UART_FBRD: 9912027Sjungma@eit.uni-kl.de data = fbrd; 10012027Sjungma@eit.uni-kl.de break; 10112027Sjungma@eit.uni-kl.de case UART_LCRH: 10212027Sjungma@eit.uni-kl.de data = lcrh; 10312027Sjungma@eit.uni-kl.de break; 10412027Sjungma@eit.uni-kl.de case UART_IFLS: 10512027Sjungma@eit.uni-kl.de data = ifls; 10612027Sjungma@eit.uni-kl.de break; 10712027Sjungma@eit.uni-kl.de case UART_IMSC: 10812027Sjungma@eit.uni-kl.de data = imsc; 10912027Sjungma@eit.uni-kl.de break; 11012027Sjungma@eit.uni-kl.de case UART_RIS: 11112027Sjungma@eit.uni-kl.de data = rawInt; 11212027Sjungma@eit.uni-kl.de DPRINTF(Uart, "Reading Raw Int status as 0x%x\n", rawInt); 11312027Sjungma@eit.uni-kl.de break; 11412027Sjungma@eit.uni-kl.de case UART_MIS: 11512027Sjungma@eit.uni-kl.de DPRINTF(Uart, "Reading Masked Int status as 0x%x\n", rawInt); 11612027Sjungma@eit.uni-kl.de data = maskInt; 11712027Sjungma@eit.uni-kl.de break; 11812027Sjungma@eit.uni-kl.de default: 11912027Sjungma@eit.uni-kl.de if (AmbaDev::readId(pkt, AMBA_ID, pioAddr)) { 12012027Sjungma@eit.uni-kl.de // Hack for variable size accesses 12112027Sjungma@eit.uni-kl.de data = pkt->get<uint32_t>(); 12212027Sjungma@eit.uni-kl.de break; 12312027Sjungma@eit.uni-kl.de } 12412027Sjungma@eit.uni-kl.de 12512027Sjungma@eit.uni-kl.de panic("Tried to read PL011 at offset %#x that doesn't exist\n", daddr); 12612027Sjungma@eit.uni-kl.de break; 12712027Sjungma@eit.uni-kl.de } 12812027Sjungma@eit.uni-kl.de 12912027Sjungma@eit.uni-kl.de switch(pkt->getSize()) { 13012027Sjungma@eit.uni-kl.de case 1: 13112027Sjungma@eit.uni-kl.de pkt->set<uint8_t>(data); 13212027Sjungma@eit.uni-kl.de break; 13312027Sjungma@eit.uni-kl.de case 2: 13412027Sjungma@eit.uni-kl.de pkt->set<uint16_t>(data); 13512027Sjungma@eit.uni-kl.de break; 13612027Sjungma@eit.uni-kl.de case 4: 13712027Sjungma@eit.uni-kl.de pkt->set<uint32_t>(data); 13812027Sjungma@eit.uni-kl.de break; 13912027Sjungma@eit.uni-kl.de default: 14012027Sjungma@eit.uni-kl.de panic("Uart read size too big?\n"); 14112027Sjungma@eit.uni-kl.de break; 14212027Sjungma@eit.uni-kl.de } 14312027Sjungma@eit.uni-kl.de 14412027Sjungma@eit.uni-kl.de 14512027Sjungma@eit.uni-kl.de pkt->makeAtomicResponse(); 14612027Sjungma@eit.uni-kl.de return pioDelay; 14712027Sjungma@eit.uni-kl.de} 14812027Sjungma@eit.uni-kl.de 14912027Sjungma@eit.uni-kl.deTick 15012027Sjungma@eit.uni-kl.dePl011::write(PacketPtr pkt) 15112027Sjungma@eit.uni-kl.de{ 15212027Sjungma@eit.uni-kl.de 15312027Sjungma@eit.uni-kl.de assert(pkt->getAddr() >= pioAddr && pkt->getAddr() < pioAddr + pioSize); 15412027Sjungma@eit.uni-kl.de 15512027Sjungma@eit.uni-kl.de Addr daddr = pkt->getAddr() - pioAddr; 15612027Sjungma@eit.uni-kl.de 15712027Sjungma@eit.uni-kl.de DPRINTF(Uart, " write register %#x value %#x size=%d\n", daddr, 15812027Sjungma@eit.uni-kl.de pkt->get<uint8_t>(), pkt->getSize()); 15912027Sjungma@eit.uni-kl.de 16012027Sjungma@eit.uni-kl.de // use a temporary data since the uart registers are read/written with 16112027Sjungma@eit.uni-kl.de // different size operations 16212027Sjungma@eit.uni-kl.de // 16312027Sjungma@eit.uni-kl.de uint32_t data = 0; 16412027Sjungma@eit.uni-kl.de 16512027Sjungma@eit.uni-kl.de switch(pkt->getSize()) { 16612027Sjungma@eit.uni-kl.de case 1: 16712027Sjungma@eit.uni-kl.de data = pkt->get<uint8_t>(); 16812027Sjungma@eit.uni-kl.de break; 16912027Sjungma@eit.uni-kl.de case 2: 17012027Sjungma@eit.uni-kl.de data = pkt->get<uint16_t>(); 17112027Sjungma@eit.uni-kl.de break; 17212027Sjungma@eit.uni-kl.de case 4: 17312027Sjungma@eit.uni-kl.de data = pkt->get<uint32_t>(); 17412027Sjungma@eit.uni-kl.de break; 17512027Sjungma@eit.uni-kl.de default: 17612027Sjungma@eit.uni-kl.de panic("Uart write size too big?\n"); 17712027Sjungma@eit.uni-kl.de break; 17812027Sjungma@eit.uni-kl.de } 17912027Sjungma@eit.uni-kl.de 18012027Sjungma@eit.uni-kl.de 18112027Sjungma@eit.uni-kl.de switch (daddr) { 18212027Sjungma@eit.uni-kl.de case UART_DR: 18312027Sjungma@eit.uni-kl.de if ((data & 0xFF) == 0x04 && endOnEOT) 18412027Sjungma@eit.uni-kl.de exitSimLoop("UART received EOT", 0); 18512027Sjungma@eit.uni-kl.de 18612027Sjungma@eit.uni-kl.de term->out(data & 0xFF); 18712027Sjungma@eit.uni-kl.de 18812027Sjungma@eit.uni-kl.de if (imsc.txim) { 18912027Sjungma@eit.uni-kl.de DPRINTF(Uart, "TX int enabled, scheduling interruptt\n"); 19012027Sjungma@eit.uni-kl.de rawInt.txim = 1; 19112027Sjungma@eit.uni-kl.de if (!intEvent.scheduled()) 19212027Sjungma@eit.uni-kl.de schedule(intEvent, curTick() + intDelay); 19312027Sjungma@eit.uni-kl.de } 19412027Sjungma@eit.uni-kl.de 19512027Sjungma@eit.uni-kl.de break; 19612027Sjungma@eit.uni-kl.de case UART_CR: 19712027Sjungma@eit.uni-kl.de control = data; 19812027Sjungma@eit.uni-kl.de break; 19912027Sjungma@eit.uni-kl.de case UART_IBRD: 20012027Sjungma@eit.uni-kl.de ibrd = data; 20112027Sjungma@eit.uni-kl.de break; 20212027Sjungma@eit.uni-kl.de case UART_FBRD: 20312027Sjungma@eit.uni-kl.de fbrd = data; 20412027Sjungma@eit.uni-kl.de break; 20512027Sjungma@eit.uni-kl.de case UART_LCRH: 20612027Sjungma@eit.uni-kl.de lcrh = data; 20712027Sjungma@eit.uni-kl.de break; 20812027Sjungma@eit.uni-kl.de case UART_IFLS: 20912027Sjungma@eit.uni-kl.de ifls = data; 21012027Sjungma@eit.uni-kl.de break; 21112027Sjungma@eit.uni-kl.de case UART_IMSC: 21212027Sjungma@eit.uni-kl.de imsc = data; 21312027Sjungma@eit.uni-kl.de 21412027Sjungma@eit.uni-kl.de if (imsc.rimim || imsc.ctsmim || imsc.dcdmim || imsc.dsrmim 21512027Sjungma@eit.uni-kl.de || imsc.feim || imsc.peim || imsc.beim || imsc.oeim || imsc.rsvd) 21612027Sjungma@eit.uni-kl.de panic("Unknown interrupt enabled\n"); 21712027Sjungma@eit.uni-kl.de 21812027Sjungma@eit.uni-kl.de if (imsc.txim) { 21912027Sjungma@eit.uni-kl.de DPRINTF(Uart, "Writing to IMSC: TX int enabled, scheduling interruptt\n"); 22012027Sjungma@eit.uni-kl.de rawInt.txim = 1; 22112027Sjungma@eit.uni-kl.de if (!intEvent.scheduled()) 22212027Sjungma@eit.uni-kl.de schedule(intEvent, curTick() + intDelay); 22312027Sjungma@eit.uni-kl.de } 22412027Sjungma@eit.uni-kl.de 22512027Sjungma@eit.uni-kl.de break; 22612027Sjungma@eit.uni-kl.de 22712027Sjungma@eit.uni-kl.de case UART_ICR: 22812027Sjungma@eit.uni-kl.de DPRINTF(Uart, "Clearing interrupts 0x%x\n", data); 22912027Sjungma@eit.uni-kl.de rawInt = rawInt & ~data; 23012027Sjungma@eit.uni-kl.de maskInt = rawInt & imsc; 23112027Sjungma@eit.uni-kl.de 23212027Sjungma@eit.uni-kl.de DPRINTF(Uart, " -- Masked interrupts 0x%x\n", maskInt); 23312027Sjungma@eit.uni-kl.de 23412027Sjungma@eit.uni-kl.de if (!maskInt) 23512027Sjungma@eit.uni-kl.de gic->clearInt(intNum); 23612027Sjungma@eit.uni-kl.de 23712027Sjungma@eit.uni-kl.de break; 23812027Sjungma@eit.uni-kl.de default: 23912027Sjungma@eit.uni-kl.de panic("Tried to write PL011 at offset %#x that doesn't exist\n", daddr); 24012027Sjungma@eit.uni-kl.de break; 24112027Sjungma@eit.uni-kl.de } 24212027Sjungma@eit.uni-kl.de pkt->makeAtomicResponse(); 24312027Sjungma@eit.uni-kl.de return pioDelay; 24412027Sjungma@eit.uni-kl.de} 24512027Sjungma@eit.uni-kl.de 24612027Sjungma@eit.uni-kl.devoid 24712027Sjungma@eit.uni-kl.dePl011::dataAvailable() 24812027Sjungma@eit.uni-kl.de{ 24912027Sjungma@eit.uni-kl.de /*@todo ignore the fifo, just say we have data now 25012027Sjungma@eit.uni-kl.de * We might want to fix this, or we might not care */ 25112027Sjungma@eit.uni-kl.de rawInt.rxim = 1; 25212027Sjungma@eit.uni-kl.de rawInt.rtim = 1; 25312027Sjungma@eit.uni-kl.de 25412027Sjungma@eit.uni-kl.de DPRINTF(Uart, "Data available, scheduling interrupt\n"); 25512027Sjungma@eit.uni-kl.de 25612027Sjungma@eit.uni-kl.de if (!intEvent.scheduled()) 25712027Sjungma@eit.uni-kl.de schedule(intEvent, curTick() + intDelay); 25812027Sjungma@eit.uni-kl.de} 25912027Sjungma@eit.uni-kl.de 26012027Sjungma@eit.uni-kl.devoid 26112027Sjungma@eit.uni-kl.dePl011::generateInterrupt() 26212027Sjungma@eit.uni-kl.de{ 26312027Sjungma@eit.uni-kl.de DPRINTF(Uart, "Generate Interrupt: imsc=0x%x rawInt=0x%x maskInt=0x%x\n", 26412027Sjungma@eit.uni-kl.de imsc, rawInt, maskInt); 26512027Sjungma@eit.uni-kl.de maskInt = imsc & rawInt; 26612027Sjungma@eit.uni-kl.de 26712027Sjungma@eit.uni-kl.de if (maskInt.rxim || maskInt.rtim || maskInt.txim) { 26812027Sjungma@eit.uni-kl.de gic->sendInt(intNum); 26912027Sjungma@eit.uni-kl.de DPRINTF(Uart, " -- Generated\n"); 27012027Sjungma@eit.uni-kl.de } 27112027Sjungma@eit.uni-kl.de 27212027Sjungma@eit.uni-kl.de} 27312027Sjungma@eit.uni-kl.de 27412027Sjungma@eit.uni-kl.de 27512027Sjungma@eit.uni-kl.de 27612027Sjungma@eit.uni-kl.devoid 27712027Sjungma@eit.uni-kl.dePl011::serialize(std::ostream &os) 27812027Sjungma@eit.uni-kl.de{ 27912027Sjungma@eit.uni-kl.de DPRINTF(Checkpoint, "Serializing Arm PL011\n"); 28012027Sjungma@eit.uni-kl.de SERIALIZE_SCALAR(control); 28112027Sjungma@eit.uni-kl.de SERIALIZE_SCALAR(fbrd); 28212027Sjungma@eit.uni-kl.de SERIALIZE_SCALAR(ibrd); 28312027Sjungma@eit.uni-kl.de SERIALIZE_SCALAR(lcrh); 28412027Sjungma@eit.uni-kl.de SERIALIZE_SCALAR(ifls); 28512027Sjungma@eit.uni-kl.de 28612027Sjungma@eit.uni-kl.de uint16_t imsc_serial = imsc; 28712027Sjungma@eit.uni-kl.de SERIALIZE_SCALAR(imsc_serial); 28812027Sjungma@eit.uni-kl.de 28912027Sjungma@eit.uni-kl.de uint16_t rawInt_serial = rawInt; 29012027Sjungma@eit.uni-kl.de SERIALIZE_SCALAR(rawInt_serial); 29112027Sjungma@eit.uni-kl.de 29212027Sjungma@eit.uni-kl.de uint16_t maskInt_serial = maskInt; 29312027Sjungma@eit.uni-kl.de SERIALIZE_SCALAR(maskInt_serial); 29412027Sjungma@eit.uni-kl.de 29512027Sjungma@eit.uni-kl.de SERIALIZE_SCALAR(endOnEOT); 29612027Sjungma@eit.uni-kl.de SERIALIZE_SCALAR(intDelay); 29712027Sjungma@eit.uni-kl.de} 29812027Sjungma@eit.uni-kl.de 29912027Sjungma@eit.uni-kl.devoid 30012027Sjungma@eit.uni-kl.dePl011::unserialize(Checkpoint *cp, const std::string §ion) 30112027Sjungma@eit.uni-kl.de{ 30212027Sjungma@eit.uni-kl.de DPRINTF(Checkpoint, "Unserializing Arm PL011\n"); 30312027Sjungma@eit.uni-kl.de 30412027Sjungma@eit.uni-kl.de UNSERIALIZE_SCALAR(control); 30512027Sjungma@eit.uni-kl.de UNSERIALIZE_SCALAR(fbrd); 30612027Sjungma@eit.uni-kl.de UNSERIALIZE_SCALAR(ibrd); 30712027Sjungma@eit.uni-kl.de UNSERIALIZE_SCALAR(lcrh); 30812027Sjungma@eit.uni-kl.de UNSERIALIZE_SCALAR(ifls); 30912027Sjungma@eit.uni-kl.de 31012027Sjungma@eit.uni-kl.de uint16_t imsc_serial; 31112027Sjungma@eit.uni-kl.de UNSERIALIZE_SCALAR(imsc_serial); 31212027Sjungma@eit.uni-kl.de imsc = imsc_serial; 31312027Sjungma@eit.uni-kl.de 31412027Sjungma@eit.uni-kl.de uint16_t rawInt_serial; 31512027Sjungma@eit.uni-kl.de UNSERIALIZE_SCALAR(rawInt_serial); 31612027Sjungma@eit.uni-kl.de rawInt = rawInt_serial; 31712027Sjungma@eit.uni-kl.de 31812027Sjungma@eit.uni-kl.de uint16_t maskInt_serial; 31912027Sjungma@eit.uni-kl.de UNSERIALIZE_SCALAR(maskInt_serial); 32012027Sjungma@eit.uni-kl.de maskInt = maskInt_serial; 32112027Sjungma@eit.uni-kl.de 32212027Sjungma@eit.uni-kl.de UNSERIALIZE_SCALAR(endOnEOT); 32312027Sjungma@eit.uni-kl.de UNSERIALIZE_SCALAR(intDelay); 32412027Sjungma@eit.uni-kl.de} 32512027Sjungma@eit.uni-kl.de 32612027Sjungma@eit.uni-kl.dePl011 * 32712027Sjungma@eit.uni-kl.dePl011Params::create() 32812027Sjungma@eit.uni-kl.de{ 32912027Sjungma@eit.uni-kl.de return new Pl011(this); 33012027Sjungma@eit.uni-kl.de} 33112027Sjungma@eit.uni-kl.de