tlb.cc (5570:13592d41f290) tlb.cc (5646:0a488a147fb8)
1/*
2 * Copyright (c) 2001-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;

--- 994 unchanged lines hidden (view full) ---

1003 pkt->set(MakeTsbPtr(Ps1,
1004 itb->tag_access,
1005 itb->c0_tsb_ps1,
1006 itb->c0_config,
1007 itb->cx_tsb_ps1,
1008 itb->cx_config));
1009 break;
1010 case ASI_SWVR_INTR_RECEIVE:
1/*
2 * Copyright (c) 2001-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;

--- 994 unchanged lines hidden (view full) ---

1003 pkt->set(MakeTsbPtr(Ps1,
1004 itb->tag_access,
1005 itb->c0_tsb_ps1,
1006 itb->c0_config,
1007 itb->cx_tsb_ps1,
1008 itb->cx_config));
1009 break;
1010 case ASI_SWVR_INTR_RECEIVE:
1011 pkt->set(tc->getCpuPtr()->get_interrupts(IT_INT_VEC));
1011 {
1012 SparcISA::Interrupts * interrupts =
1013 dynamic_cast<SparcISA::Interrupts *>(
1014 tc->getCpuPtr()->getInterruptController());
1015 pkt->set(interrupts->get_vec(IT_INT_VEC));
1016 }
1012 break;
1013 case ASI_SWVR_UDB_INTR_R:
1017 break;
1018 case ASI_SWVR_UDB_INTR_R:
1014 temp = findMsbSet(tc->getCpuPtr()->get_interrupts(IT_INT_VEC));
1015 tc->getCpuPtr()->clear_interrupt(IT_INT_VEC, temp);
1016 pkt->set(temp);
1019 {
1020 SparcISA::Interrupts * interrupts =
1021 dynamic_cast<SparcISA::Interrupts *>(
1022 tc->getCpuPtr()->getInterruptController());
1023 temp = findMsbSet(interrupts->get_vec(IT_INT_VEC));
1024 tc->getCpuPtr()->clear_interrupt(IT_INT_VEC, temp);
1025 pkt->set(temp);
1026 }
1017 break;
1018 default:
1019doMmuReadError:
1020 panic("need to impl DTB::doMmuRegRead() got asi=%#x, va=%#x\n",
1021 (uint32_t)asi, va);
1022 }
1023 pkt->makeAtomicResponse();
1024 return tc->getCpuPtr()->ticks(1);

--- 222 unchanged lines hidden (view full) ---

1247 case 2:
1248 demapAll(part_id);
1249 break;
1250 default:
1251 panic("Invalid type for IMMU demap\n");
1252 }
1253 break;
1254 case ASI_SWVR_INTR_RECEIVE:
1027 break;
1028 default:
1029doMmuReadError:
1030 panic("need to impl DTB::doMmuRegRead() got asi=%#x, va=%#x\n",
1031 (uint32_t)asi, va);
1032 }
1033 pkt->makeAtomicResponse();
1034 return tc->getCpuPtr()->ticks(1);

--- 222 unchanged lines hidden (view full) ---

1257 case 2:
1258 demapAll(part_id);
1259 break;
1260 default:
1261 panic("Invalid type for IMMU demap\n");
1262 }
1263 break;
1264 case ASI_SWVR_INTR_RECEIVE:
1255 int msb;
1256 // clear all the interrupts that aren't set in the write
1257 while(tc->getCpuPtr()->get_interrupts(IT_INT_VEC) & data) {
1258 msb = findMsbSet(tc->getCpuPtr()->get_interrupts(IT_INT_VEC) & data);
1259 tc->getCpuPtr()->clear_interrupt(IT_INT_VEC, msb);
1265 {
1266 int msb;
1267 // clear all the interrupts that aren't set in the write
1268 SparcISA::Interrupts * interrupts =
1269 dynamic_cast<SparcISA::Interrupts *>(
1270 tc->getCpuPtr()->getInterruptController());
1271 while(interrupts->get_vec(IT_INT_VEC) & data) {
1272 msb = findMsbSet(interrupts->get_vec(IT_INT_VEC) & data);
1273 tc->getCpuPtr()->clear_interrupt(IT_INT_VEC, msb);
1274 }
1260 }
1261 break;
1262 case ASI_SWVR_UDB_INTR_W:
1263 tc->getSystemPtr()->threadContexts[bits(data,12,8)]->getCpuPtr()->
1264 post_interrupt(bits(data,5,0),0);
1265 break;
1266 default:
1267doMmuWriteError:

--- 162 unchanged lines hidden ---
1275 }
1276 break;
1277 case ASI_SWVR_UDB_INTR_W:
1278 tc->getSystemPtr()->threadContexts[bits(data,12,8)]->getCpuPtr()->
1279 post_interrupt(bits(data,5,0),0);
1280 break;
1281 default:
1282doMmuWriteError:

--- 162 unchanged lines hidden ---