tlb.cc (5440:51d24253bcd9) tlb.cc (5647:b06b49498c79)
1/*
2 * Copyright (c) 2007-2008 The Hewlett-Packard Development Company
3 * All rights reserved.
4 *
5 * Redistribution and use of this software in source and binary forms,
6 * with or without modification, are permitted provided that the
7 * following conditions are met:
8 *

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

658 if ((paddr & ~mask(3)) != ((paddr + req->getSize()) & ~mask(3)))
659 panic("Accessed more than one register at a time in the APIC!\n");
660 MiscReg regNum;
661 Addr offset = paddr & mask(3);
662 paddr &= ~mask(3);
663 switch (paddr - baseAddr)
664 {
665 case 0x20:
1/*
2 * Copyright (c) 2007-2008 The Hewlett-Packard Development Company
3 * All rights reserved.
4 *
5 * Redistribution and use of this software in source and binary forms,
6 * with or without modification, are permitted provided that the
7 * following conditions are met:
8 *

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

658 if ((paddr & ~mask(3)) != ((paddr + req->getSize()) & ~mask(3)))
659 panic("Accessed more than one register at a time in the APIC!\n");
660 MiscReg regNum;
661 Addr offset = paddr & mask(3);
662 paddr &= ~mask(3);
663 switch (paddr - baseAddr)
664 {
665 case 0x20:
666 regNum = MISCREG_APIC_ID;
666 regNum = APIC_ID;
667 break;
668 case 0x30:
667 break;
668 case 0x30:
669 regNum = MISCREG_APIC_VERSION;
669 regNum = APIC_VERSION;
670 break;
671 case 0x80:
670 break;
671 case 0x80:
672 regNum = MISCREG_APIC_TASK_PRIORITY;
672 regNum = APIC_TASK_PRIORITY;
673 break;
674 case 0x90:
673 break;
674 case 0x90:
675 regNum = MISCREG_APIC_ARBITRATION_PRIORITY;
675 regNum = APIC_ARBITRATION_PRIORITY;
676 break;
677 case 0xA0:
676 break;
677 case 0xA0:
678 regNum = MISCREG_APIC_PROCESSOR_PRIORITY;
678 regNum = APIC_PROCESSOR_PRIORITY;
679 break;
680 case 0xB0:
679 break;
680 case 0xB0:
681 regNum = MISCREG_APIC_EOI;
681 regNum = APIC_EOI;
682 break;
683 case 0xD0:
682 break;
683 case 0xD0:
684 regNum = MISCREG_APIC_LOGICAL_DESTINATION;
684 regNum = APIC_LOGICAL_DESTINATION;
685 break;
686 case 0xE0:
685 break;
686 case 0xE0:
687 regNum = MISCREG_APIC_DESTINATION_FORMAT;
687 regNum = APIC_DESTINATION_FORMAT;
688 break;
689 case 0xF0:
688 break;
689 case 0xF0:
690 regNum = MISCREG_APIC_SPURIOUS_INTERRUPT_VECTOR;
690 regNum = APIC_SPURIOUS_INTERRUPT_VECTOR;
691 break;
692 case 0x100:
693 case 0x108:
694 case 0x110:
695 case 0x118:
696 case 0x120:
697 case 0x128:
698 case 0x130:
699 case 0x138:
700 case 0x140:
701 case 0x148:
702 case 0x150:
703 case 0x158:
704 case 0x160:
705 case 0x168:
706 case 0x170:
707 case 0x178:
691 break;
692 case 0x100:
693 case 0x108:
694 case 0x110:
695 case 0x118:
696 case 0x120:
697 case 0x128:
698 case 0x130:
699 case 0x138:
700 case 0x140:
701 case 0x148:
702 case 0x150:
703 case 0x158:
704 case 0x160:
705 case 0x168:
706 case 0x170:
707 case 0x178:
708 regNum = MISCREG_APIC_IN_SERVICE(
709 (paddr - baseAddr - 0x100) / 0x8);
708 regNum = APIC_IN_SERVICE((paddr - baseAddr - 0x100) / 0x8);
710 break;
711 case 0x180:
712 case 0x188:
713 case 0x190:
714 case 0x198:
715 case 0x1A0:
716 case 0x1A8:
717 case 0x1B0:
718 case 0x1B8:
719 case 0x1C0:
720 case 0x1C8:
721 case 0x1D0:
722 case 0x1D8:
723 case 0x1E0:
724 case 0x1E8:
725 case 0x1F0:
726 case 0x1F8:
709 break;
710 case 0x180:
711 case 0x188:
712 case 0x190:
713 case 0x198:
714 case 0x1A0:
715 case 0x1A8:
716 case 0x1B0:
717 case 0x1B8:
718 case 0x1C0:
719 case 0x1C8:
720 case 0x1D0:
721 case 0x1D8:
722 case 0x1E0:
723 case 0x1E8:
724 case 0x1F0:
725 case 0x1F8:
727 regNum = MISCREG_APIC_TRIGGER_MODE(
728 (paddr - baseAddr - 0x180) / 0x8);
726 regNum = APIC_TRIGGER_MODE((paddr - baseAddr - 0x180) / 0x8);
729 break;
730 case 0x200:
731 case 0x208:
732 case 0x210:
733 case 0x218:
734 case 0x220:
735 case 0x228:
736 case 0x230:
737 case 0x238:
738 case 0x240:
739 case 0x248:
740 case 0x250:
741 case 0x258:
742 case 0x260:
743 case 0x268:
744 case 0x270:
745 case 0x278:
727 break;
728 case 0x200:
729 case 0x208:
730 case 0x210:
731 case 0x218:
732 case 0x220:
733 case 0x228:
734 case 0x230:
735 case 0x238:
736 case 0x240:
737 case 0x248:
738 case 0x250:
739 case 0x258:
740 case 0x260:
741 case 0x268:
742 case 0x270:
743 case 0x278:
746 regNum = MISCREG_APIC_INTERRUPT_REQUEST(
747 (paddr - baseAddr - 0x200) / 0x8);
744 regNum = APIC_INTERRUPT_REQUEST((paddr - baseAddr - 0x200) / 0x8);
748 break;
749 case 0x280:
745 break;
746 case 0x280:
750 regNum = MISCREG_APIC_ERROR_STATUS;
747 regNum = APIC_ERROR_STATUS;
751 break;
752 case 0x300:
748 break;
749 case 0x300:
753 regNum = MISCREG_APIC_INTERRUPT_COMMAND_LOW;
750 regNum = APIC_INTERRUPT_COMMAND_LOW;
754 break;
755 case 0x310:
751 break;
752 case 0x310:
756 regNum = MISCREG_APIC_INTERRUPT_COMMAND_HIGH;
753 regNum = APIC_INTERRUPT_COMMAND_HIGH;
757 break;
758 case 0x320:
754 break;
755 case 0x320:
759 regNum = MISCREG_APIC_LVT_TIMER;
756 regNum = APIC_LVT_TIMER;
760 break;
761 case 0x330:
757 break;
758 case 0x330:
762 regNum = MISCREG_APIC_LVT_THERMAL_SENSOR;
759 regNum = APIC_LVT_THERMAL_SENSOR;
763 break;
764 case 0x340:
760 break;
761 case 0x340:
765 regNum = MISCREG_APIC_LVT_PERFORMANCE_MONITORING_COUNTERS;
762 regNum = APIC_LVT_PERFORMANCE_MONITORING_COUNTERS;
766 break;
767 case 0x350:
763 break;
764 case 0x350:
768 regNum = MISCREG_APIC_LVT_LINT0;
765 regNum = APIC_LVT_LINT0;
769 break;
770 case 0x360:
766 break;
767 case 0x360:
771 regNum = MISCREG_APIC_LVT_LINT1;
768 regNum = APIC_LVT_LINT1;
772 break;
773 case 0x370:
769 break;
770 case 0x370:
774 regNum = MISCREG_APIC_LVT_ERROR;
771 regNum = APIC_LVT_ERROR;
775 break;
776 case 0x380:
772 break;
773 case 0x380:
777 regNum = MISCREG_APIC_INITIAL_COUNT;
774 regNum = APIC_INITIAL_COUNT;
778 break;
779 case 0x390:
775 break;
776 case 0x390:
780 regNum = MISCREG_APIC_CURRENT_COUNT;
777 regNum = APIC_CURRENT_COUNT;
781 break;
782 case 0x3E0:
778 break;
779 case 0x3E0:
783 regNum = MISCREG_APIC_DIVIDE_CONFIGURATION;
780 regNum = APIC_DIVIDE_CONFIGURATION;
784 break;
785 default:
786 // A reserved register field.
787 return new GeneralProtection(0);
788 break;
789 }
781 break;
782 default:
783 // A reserved register field.
784 return new GeneralProtection(0);
785 break;
786 }
787 regNum += MISCREG_APIC_START;
790 req->setPaddr(regNum * sizeof(MiscReg) + offset);
791 }
792#endif
793 return NoFault;
794};
795
796Fault
797DTB::translate(RequestPtr &req, ThreadContext *tc, bool write)

--- 61 unchanged lines hidden ---
788 req->setPaddr(regNum * sizeof(MiscReg) + offset);
789 }
790#endif
791 return NoFault;
792};
793
794Fault
795DTB::translate(RequestPtr &req, ThreadContext *tc, bool write)

--- 61 unchanged lines hidden ---