isa_fake.cc (11793:ef606668d247) | isa_fake.cc (13342:1ddb43f47325) |
---|---|
1/* 2 * Copyright (c) 2004-2005 The Regents of The University of Michigan 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are 7 * met: redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer; --- 55 unchanged lines hidden (view full) --- 64 pkt->getAddr(), pkt->getSize()); 65 pkt->setBadAddress(); 66 } else { 67 assert(pkt->getAddr() >= pioAddr && pkt->getAddr() < pioAddr + pioSize); 68 DPRINTF(IsaFake, "read va=%#x size=%d\n", 69 pkt->getAddr(), pkt->getSize()); 70 switch (pkt->getSize()) { 71 case sizeof(uint64_t): | 1/* 2 * Copyright (c) 2004-2005 The Regents of The University of Michigan 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are 7 * met: redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer; --- 55 unchanged lines hidden (view full) --- 64 pkt->getAddr(), pkt->getSize()); 65 pkt->setBadAddress(); 66 } else { 67 assert(pkt->getAddr() >= pioAddr && pkt->getAddr() < pioAddr + pioSize); 68 DPRINTF(IsaFake, "read va=%#x size=%d\n", 69 pkt->getAddr(), pkt->getSize()); 70 switch (pkt->getSize()) { 71 case sizeof(uint64_t): |
72 pkt->set(retData64); | 72 pkt->setLE(retData64); |
73 break; 74 case sizeof(uint32_t): | 73 break; 74 case sizeof(uint32_t): |
75 pkt->set(retData32); | 75 pkt->setLE(retData32); |
76 break; 77 case sizeof(uint16_t): | 76 break; 77 case sizeof(uint16_t): |
78 pkt->set(retData16); | 78 pkt->setLE(retData16); |
79 break; 80 case sizeof(uint8_t): | 79 break; 80 case sizeof(uint8_t): |
81 pkt->set(retData8); | 81 pkt->setLE(retData8); |
82 break; 83 default: 84 if (params()->fake_mem) 85 std::memset(pkt->getPtr<uint8_t>(), 0, pkt->getSize()); 86 else 87 panic("invalid access size! Device being accessed by cache?\n"); 88 } 89 } 90 return pioDelay; 91} 92 93Tick 94IsaFake::write(PacketPtr pkt) 95{ 96 pkt->makeAtomicResponse(); 97 if (params()->warn_access != "") { 98 uint64_t data; 99 switch (pkt->getSize()) { 100 case sizeof(uint64_t): | 82 break; 83 default: 84 if (params()->fake_mem) 85 std::memset(pkt->getPtr<uint8_t>(), 0, pkt->getSize()); 86 else 87 panic("invalid access size! Device being accessed by cache?\n"); 88 } 89 } 90 return pioDelay; 91} 92 93Tick 94IsaFake::write(PacketPtr pkt) 95{ 96 pkt->makeAtomicResponse(); 97 if (params()->warn_access != "") { 98 uint64_t data; 99 switch (pkt->getSize()) { 100 case sizeof(uint64_t): |
101 data = pkt->get | 101 data = pkt->getLE<uint64_t>(); |
102 break; 103 case sizeof(uint32_t): | 102 break; 103 case sizeof(uint32_t): |
104 data = pkt->get | 104 data = pkt->getLE<uint32_t>(); |
105 break; 106 case sizeof(uint16_t): | 105 break; 106 case sizeof(uint16_t): |
107 data = pkt->get | 107 data = pkt->getLE<uint16_t>(); |
108 break; 109 case sizeof(uint8_t): | 108 break; 109 case sizeof(uint8_t): |
110 data = pkt->get | 110 data = pkt->getLE<uint8_t>(); |
111 break; 112 default: 113 panic("invalid access size: %u\n", pkt->getSize()); 114 } 115 warn("Device %s accessed by write to address %#x size=%d data=%#x\n", 116 name(), pkt->getAddr(), pkt->getSize(), data); 117 } 118 if (params()->ret_bad_addr) { 119 DPRINTF(IsaFake, "write to bad address va=%#x size=%d \n", 120 pkt->getAddr(), pkt->getSize()); 121 pkt->setBadAddress(); 122 } else { 123 DPRINTF(IsaFake, "write - va=%#x size=%d \n", 124 pkt->getAddr(), pkt->getSize()); 125 126 if (params()->update_data) { 127 switch (pkt->getSize()) { 128 case sizeof(uint64_t): | 111 break; 112 default: 113 panic("invalid access size: %u\n", pkt->getSize()); 114 } 115 warn("Device %s accessed by write to address %#x size=%d data=%#x\n", 116 name(), pkt->getAddr(), pkt->getSize(), data); 117 } 118 if (params()->ret_bad_addr) { 119 DPRINTF(IsaFake, "write to bad address va=%#x size=%d \n", 120 pkt->getAddr(), pkt->getSize()); 121 pkt->setBadAddress(); 122 } else { 123 DPRINTF(IsaFake, "write - va=%#x size=%d \n", 124 pkt->getAddr(), pkt->getSize()); 125 126 if (params()->update_data) { 127 switch (pkt->getSize()) { 128 case sizeof(uint64_t): |
129 retData64 = pkt->get | 129 retData64 = pkt->getLE<uint64_t>(); |
130 break; 131 case sizeof(uint32_t): | 130 break; 131 case sizeof(uint32_t): |
132 retData32 = pkt->get | 132 retData32 = pkt->getLE<uint32_t>(); |
133 break; 134 case sizeof(uint16_t): | 133 break; 134 case sizeof(uint16_t): |
135 retData16 = pkt->get | 135 retData16 = pkt->getLE<uint16_t>(); |
136 break; 137 case sizeof(uint8_t): | 136 break; 137 case sizeof(uint8_t): |
138 retData8 = pkt->get | 138 retData8 = pkt->getLE<uint8_t>(); |
139 break; 140 default: 141 panic("invalid access size!\n"); 142 } 143 } 144 } 145 return pioDelay; 146} 147 148IsaFake * 149IsaFakeParams::create() 150{ 151 return new IsaFake(this); 152} | 139 break; 140 default: 141 panic("invalid access size!\n"); 142 } 143 } 144 } 145 return pioDelay; 146} 147 148IsaFake * 149IsaFakeParams::create() 150{ 151 return new IsaFake(this); 152} |