console.cc (11793:ef606668d247) | console.cc (12237:fdd8c4c63356) |
---|---|
1/* 2 * Copyright (c) 2014 ARM Limited 3 * All rights reserved 4 * 5 * The license below extends only to copyright in the software and shall 6 * not be construed as granting a license to any other intellectual 7 * property including but not limited to intellectual property relating 8 * to a hardware implementation of the functionality of the software --- 33 unchanged lines hidden (view full) --- 42#include "debug/VIOConsole.hh" 43#include "params/VirtIOConsole.hh" 44#include "sim/system.hh" 45 46VirtIOConsole::VirtIOConsole(Params *params) 47 : VirtIODeviceBase(params, ID_CONSOLE, sizeof(Config), F_SIZE), 48 qRecv(params->system->physProxy, params->qRecvSize, *this), 49 qTrans(params->system->physProxy, params->qTransSize, *this), | 1/* 2 * Copyright (c) 2014 ARM Limited 3 * All rights reserved 4 * 5 * The license below extends only to copyright in the software and shall 6 * not be construed as granting a license to any other intellectual 7 * property including but not limited to intellectual property relating 8 * to a hardware implementation of the functionality of the software --- 33 unchanged lines hidden (view full) --- 42#include "debug/VIOConsole.hh" 43#include "params/VirtIOConsole.hh" 44#include "sim/system.hh" 45 46VirtIOConsole::VirtIOConsole(Params *params) 47 : VirtIODeviceBase(params, ID_CONSOLE, sizeof(Config), F_SIZE), 48 qRecv(params->system->physProxy, params->qRecvSize, *this), 49 qTrans(params->system->physProxy, params->qTransSize, *this), |
50 term(*params->terminal), callbackDataAvail(qRecv) | 50 device(*params->device), callbackDataAvail(qRecv) |
51{ 52 registerQueue(qRecv); 53 registerQueue(qTrans); 54 55 config.cols = 80; 56 config.rows = 24; 57 | 51{ 52 registerQueue(qRecv); 53 registerQueue(qTrans); 54 55 config.cols = 80; 56 config.rows = 24; 57 |
58 term.regDataAvailCallback(&callbackDataAvail); | 58 device.regInterfaceCallback(&callbackDataAvail); |
59} 60 61 62VirtIOConsole::~VirtIOConsole() 63{ 64} 65void 66VirtIOConsole::readConfig(PacketPtr pkt, Addr cfgOffset) --- 9 unchanged lines hidden (view full) --- 76VirtIOConsole::TermRecvQueue::trySend() 77{ 78 DPRINTF(VIOConsole, "trySend\n"); 79 80 // Send data as long as the terminal has outgoing data and we can 81 // get free descriptors (i.e., there are buffers available to 82 // send) from the guest. 83 VirtDescriptor *d; | 59} 60 61 62VirtIOConsole::~VirtIOConsole() 63{ 64} 65void 66VirtIOConsole::readConfig(PacketPtr pkt, Addr cfgOffset) --- 9 unchanged lines hidden (view full) --- 76VirtIOConsole::TermRecvQueue::trySend() 77{ 78 DPRINTF(VIOConsole, "trySend\n"); 79 80 // Send data as long as the terminal has outgoing data and we can 81 // get free descriptors (i.e., there are buffers available to 82 // send) from the guest. 83 VirtDescriptor *d; |
84 while (parent.term.dataAvailable() && (d = consumeDescriptor())) { | 84 while (parent.device.dataAvailable() && (d = consumeDescriptor())) { |
85 DPRINTF(VIOConsole, "Got descriptor (len: %i)\n", d->size()); 86 size_t len(0); | 85 DPRINTF(VIOConsole, "Got descriptor (len: %i)\n", d->size()); 86 size_t len(0); |
87 while (parent.term.dataAvailable() && len < d->size()) { 88 uint8_t in(parent.term.in()); | 87 while (parent.device.dataAvailable() && len < d->size()) { 88 uint8_t in(parent.device.readData()); |
89 d->chainWrite(len, &in, sizeof(uint8_t)); 90 ++len; 91 } 92 93 // Tell the guest that we are done with this descriptor. 94 produceDescriptor(d, len); 95 parent.kick(); 96 } --- 6 unchanged lines hidden (view full) --- 103 desc->size()); 104 105 // Copy the data from the guest and forward it to the 106 // terminal. 107 const size_t size(desc->chainSize()); 108 uint8_t data[size]; 109 desc->chainRead(0, data, size); 110 for (int i = 0; i < desc->size(); ++i) | 89 d->chainWrite(len, &in, sizeof(uint8_t)); 90 ++len; 91 } 92 93 // Tell the guest that we are done with this descriptor. 94 produceDescriptor(d, len); 95 parent.kick(); 96 } --- 6 unchanged lines hidden (view full) --- 103 desc->size()); 104 105 // Copy the data from the guest and forward it to the 106 // terminal. 107 const size_t size(desc->chainSize()); 108 uint8_t data[size]; 109 desc->chainRead(0, data, size); 110 for (int i = 0; i < desc->size(); ++i) |
111 parent.term.out(data[i]); | 111 parent.device.writeData(data[i]); |
112 113 // Tell the guest that we are done with this descriptor. 114 produceDescriptor(desc, 0); 115 parent.kick(); 116} 117 118VirtIOConsole * 119VirtIOConsoleParams::create() 120{ 121 return new VirtIOConsole(this); 122} | 112 113 // Tell the guest that we are done with this descriptor. 114 produceDescriptor(desc, 0); 115 parent.kick(); 116} 117 118VirtIOConsole * 119VirtIOConsoleParams::create() 120{ 121 return new VirtIOConsole(this); 122} |