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 &section)
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