interrupts.hh (5648:e8abda6e0980) interrupts.hh (5651:7f0c8006c3d7)
1/*
2 * Copyright (c) 2007 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 *

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

57
58#ifndef __ARCH_X86_INTERRUPTS_HH__
59#define __ARCH_X86_INTERRUPTS_HH__
60
61#include "arch/x86/apicregs.hh"
62#include "arch/x86/faults.hh"
63#include "cpu/thread_context.hh"
64#include "dev/io_device.hh"
1/*
2 * Copyright (c) 2007 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 *

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

57
58#ifndef __ARCH_X86_INTERRUPTS_HH__
59#define __ARCH_X86_INTERRUPTS_HH__
60
61#include "arch/x86/apicregs.hh"
62#include "arch/x86/faults.hh"
63#include "cpu/thread_context.hh"
64#include "dev/io_device.hh"
65#include "dev/x86/intdev.hh"
65#include "params/X86LocalApic.hh"
66#include "sim/eventq.hh"
66#include "params/X86LocalApic.hh"
67#include "sim/eventq.hh"
67#include "sim/sim_object.hh"
68
69class ThreadContext;
70
71namespace X86ISA
72{
73
68
69class ThreadContext;
70
71namespace X86ISA
72{
73
74class Interrupts : public BasicPioDevice
74class Interrupts : public BasicPioDevice, IntDev
75{
76 protected:
77 uint32_t regs[NUM_APIC_REGS];
78 Tick latency;
79 Tick clock;
80
81 class ApicTimerEvent : public Event
82 {

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

103 const Params *
104 params() const
105 {
106 return dynamic_cast<const Params *>(_params);
107 }
108
109 Tick read(PacketPtr pkt);
110 Tick write(PacketPtr pkt);
75{
76 protected:
77 uint32_t regs[NUM_APIC_REGS];
78 Tick latency;
79 Tick clock;
80
81 class ApicTimerEvent : public Event
82 {

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

103 const Params *
104 params() const
105 {
106 return dynamic_cast<const Params *>(_params);
107 }
108
109 Tick read(PacketPtr pkt);
110 Tick write(PacketPtr pkt);
111 Tick recvMessage(PacketPtr pkt);
111
112 void addressRanges(AddrRangeList &range_list)
113 {
114 range_list.clear();
115 range_list.push_back(RangeEx(x86LocalAPICAddress(0, 0),
116 x86LocalAPICAddress(0, 0) + PageBytes));
117 }
118
112
113 void addressRanges(AddrRangeList &range_list)
114 {
115 range_list.clear();
116 range_list.push_back(RangeEx(x86LocalAPICAddress(0, 0),
117 x86LocalAPICAddress(0, 0) + PageBytes));
118 }
119
120 void getIntAddrRange(AddrRangeList &range_list)
121 {
122 range_list.clear();
123 range_list.push_back(RangeEx(x86InterruptAddress(0, 0),
124 x86InterruptAddress(0, 0) + PhysAddrAPICRangeSize));
125 }
126
119 uint32_t readReg(ApicRegIndex miscReg);
120 void setReg(ApicRegIndex reg, uint32_t val);
121 void setRegNoEffect(ApicRegIndex reg, uint32_t val)
122 {
123 regs[reg] = val;
124 }
125
127 uint32_t readReg(ApicRegIndex miscReg);
128 void setReg(ApicRegIndex reg, uint32_t val);
129 void setRegNoEffect(ApicRegIndex reg, uint32_t val)
130 {
131 regs[reg] = val;
132 }
133
126 Interrupts(Params * p) : BasicPioDevice(p),
134 Interrupts(Params * p) : BasicPioDevice(p), IntDev(this),
127 latency(p->pio_latency), clock(0)
128 {
129 pioSize = PageBytes;
130 //Set the local apic DFR to the flat model.
131 regs[APIC_DESTINATION_FORMAT] = (uint32_t)(-1);
132 memset(regs, 0, sizeof(regs));
133 clear_all();
134 }
135
135 latency(p->pio_latency), clock(0)
136 {
137 pioSize = PageBytes;
138 //Set the local apic DFR to the flat model.
139 regs[APIC_DESTINATION_FORMAT] = (uint32_t)(-1);
140 memset(regs, 0, sizeof(regs));
141 clear_all();
142 }
143
144 Port *getPort(const std::string &if_name, int idx = -1)
145 {
146 if (if_name == "int_port")
147 return intPort;
148 return BasicPioDevice::getPort(if_name, idx);
149 }
150
136 int InterruptLevel(uint64_t softint)
137 {
138 panic("Interrupts::InterruptLevel unimplemented!\n");
139 return 0;
140 }
141
142 void post(int int_num, int index)
143 {

--- 42 unchanged lines hidden ---
151 int InterruptLevel(uint64_t softint)
152 {
153 panic("Interrupts::InterruptLevel unimplemented!\n");
154 return 0;
155 }
156
157 void post(int int_num, int index)
158 {

--- 42 unchanged lines hidden ---