etherlink.cc (11263:8dcc6b40f164) | etherlink.cc (11701:5e7599457b97) |
---|---|
1/* 2 * Copyright (c) 2015 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 --- 178 unchanged lines hidden (view full) --- 187 DPRINTF(Ethernet, "packet not sent, link busy\n"); 188 return false; 189 } 190 191 DPRINTF(Ethernet, "packet sent: len=%d\n", pkt->length); 192 DDUMP(EthernetData, pkt->data, pkt->length); 193 194 packet = pkt; | 1/* 2 * Copyright (c) 2015 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 --- 178 unchanged lines hidden (view full) --- 187 DPRINTF(Ethernet, "packet not sent, link busy\n"); 188 return false; 189 } 190 191 DPRINTF(Ethernet, "packet sent: len=%d\n", pkt->length); 192 DDUMP(EthernetData, pkt->data, pkt->length); 193 194 packet = pkt; |
195 Tick delay = (Tick)ceil(((double)pkt->length * ticksPerByte) + 1.0); | 195 Tick delay = (Tick)ceil(((double)pkt->simLength * ticksPerByte) + 1.0); |
196 if (delayVar != 0) 197 delay += random_mt.random<Tick>(0, delayVar); 198 199 DPRINTF(Ethernet, "scheduling packet: delay=%d, (rate=%f)\n", 200 delay, ticksPerByte); 201 parent->schedule(doneEvent, curTick() + delay); 202 203 return true; --- 26 unchanged lines hidden (view full) --- 230} 231 232void 233EtherLink::Link::unserialize(const string &base, CheckpointIn &cp) 234{ 235 bool packet_exists; 236 paramIn(cp, base + ".packet_exists", packet_exists); 237 if (packet_exists) { | 196 if (delayVar != 0) 197 delay += random_mt.random<Tick>(0, delayVar); 198 199 DPRINTF(Ethernet, "scheduling packet: delay=%d, (rate=%f)\n", 200 delay, ticksPerByte); 201 parent->schedule(doneEvent, curTick() + delay); 202 203 return true; --- 26 unchanged lines hidden (view full) --- 230} 231 232void 233EtherLink::Link::unserialize(const string &base, CheckpointIn &cp) 234{ 235 bool packet_exists; 236 paramIn(cp, base + ".packet_exists", packet_exists); 237 if (packet_exists) { |
238 packet = make_shared<EthPacketData>(16384); | 238 packet = make_shared |
239 packet->unserialize(base + ".packet", cp); 240 } 241 242 bool event_scheduled; 243 paramIn(cp, base + ".event_scheduled", event_scheduled); 244 if (event_scheduled) { 245 Tick event_time; 246 paramIn(cp, base + ".event_time", event_time); 247 parent->schedule(doneEvent, event_time); 248 } 249 250 size_t tx_queue_size; 251 if (optParamIn(cp, base + ".tx_queue_size", tx_queue_size)) { 252 for (size_t idx = 0; idx < tx_queue_size; ++idx) { 253 Tick tick; | 239 packet->unserialize(base + ".packet", cp); 240 } 241 242 bool event_scheduled; 243 paramIn(cp, base + ".event_scheduled", event_scheduled); 244 if (event_scheduled) { 245 Tick event_time; 246 paramIn(cp, base + ".event_time", event_time); 247 parent->schedule(doneEvent, event_time); 248 } 249 250 size_t tx_queue_size; 251 if (optParamIn(cp, base + ".tx_queue_size", tx_queue_size)) { 252 for (size_t idx = 0; idx < tx_queue_size; ++idx) { 253 Tick tick; |
254 EthPacketPtr delayed_packet = make_shared<EthPacketData>(16384); | 254 EthPacketPtr delayed_packet = make_shared |
255 256 paramIn(cp, csprintf("%s.txQueue[%i].tick", base, idx), tick); 257 delayed_packet->unserialize( 258 csprintf("%s.txQueue[%i].packet", base, idx), cp); 259 260 fatal_if(!txQueue.empty() && txQueue.back().first > tick, 261 "Invalid txQueue packet order in EtherLink!\n"); 262 txQueue.emplace_back(std::make_pair(tick, delayed_packet)); --- 18 unchanged lines hidden --- | 255 256 paramIn(cp, csprintf("%s.txQueue[%i].tick", base, idx), tick); 257 delayed_packet->unserialize( 258 csprintf("%s.txQueue[%i].packet", base, idx), cp); 259 260 fatal_if(!txQueue.empty() && txQueue.back().first > tick, 261 "Invalid txQueue packet order in EtherLink!\n"); 262 txQueue.emplace_back(std::make_pair(tick, delayed_packet)); --- 18 unchanged lines hidden --- |