00001 00007 /* 00008 * Copyright (C) 2004 Bregmasoft 00009 * 00010 * This program is free software; you can redistribute it and/or modify it 00011 * under the terms of the GNU General Public License as published by the Free 00012 * Software Foundation; either version 2 of the License, or (at your option) 00013 * any later version. 00014 * 00015 * This program is distributed in the hope that it will be useful, but WITHOUT 00016 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 00017 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 00018 * more details. 00019 * 00020 * You should have received a copy of the GNU General Public License along 00021 * with this program; if not, write to the Free Software Foundation, Inc., 59 00022 * Temple Place, Suite 330, Boston, MA 02111-1307 USA 00023 */ 00024 #ifndef ZYGOMA_IA32_APIC_H_ 00025 #define ZYGOMA_IA32_APIC_H_ 00026 00027 #include <config.h> 00028 #include <iosfwd> 00029 #include <types.h> 00030 00031 namespace Zygoma 00032 { 00033 namespace ia32 00034 { 00111 class LocalApic 00112 { 00113 public: 00114 LocalApic(); 00115 00117 u32 00118 id() const; 00119 00121 u32 00122 version() const; 00123 00125 u32 00126 maxLVTEntry() const; 00127 00129 u32 00130 spuriousVector() const; 00131 00133 bool 00134 isSoftwareEnabled() const; 00135 00137 void 00138 enable(); 00139 00141 void 00142 setId(u32 id); 00143 00145 std::ostream& 00146 printStream(std::ostream& ostr) const; 00147 00148 private: 00149 u32 volatile m_reserved_0000 ZYGOMA_ALIGN(16); 00150 u32 volatile m_reserved_0010 ZYGOMA_ALIGN(16); 00151 u32 volatile m_reg_id ZYGOMA_ALIGN(16); 00152 u32 volatile m_reg_version ZYGOMA_ALIGN(16); 00153 u32 volatile m_reserved_0040 ZYGOMA_ALIGN(16); 00154 u32 volatile m_reserved_0050 ZYGOMA_ALIGN(16); 00155 u32 volatile m_reserved_0060 ZYGOMA_ALIGN(16); 00156 u32 volatile m_reserved_0070 ZYGOMA_ALIGN(16); 00157 u32 volatile m_taskPriority ZYGOMA_ALIGN(16); 00158 u32 volatile m_arbitrationPriority ZYGOMA_ALIGN(16); 00159 u32 volatile m_processorPriority ZYGOMA_ALIGN(16); 00160 u32 volatile m_eoi ZYGOMA_ALIGN(16); 00161 u32 volatile m_reserved_00c0 ZYGOMA_ALIGN(16); 00162 u32 volatile m_logicalDestination ZYGOMA_ALIGN(16); 00163 u32 volatile m_destinationFormat ZYGOMA_ALIGN(16); 00164 u32 volatile m_spuriousInterrupt ZYGOMA_ALIGN(16); 00165 u32 volatile m_inService_0 ZYGOMA_ALIGN(16); 00166 u32 volatile m_inService_1 ZYGOMA_ALIGN(16); 00167 u32 volatile m_inService_2 ZYGOMA_ALIGN(16); 00168 u32 volatile m_inService_3 ZYGOMA_ALIGN(16); 00169 u32 volatile m_inService_4 ZYGOMA_ALIGN(16); 00170 u32 volatile m_inService_5 ZYGOMA_ALIGN(16); 00171 u32 volatile m_inService_6 ZYGOMA_ALIGN(16); 00172 u32 volatile m_inService_7 ZYGOMA_ALIGN(16); 00173 u32 volatile m_triggerMode_0 ZYGOMA_ALIGN(16); 00174 u32 volatile m_triggerMode_1 ZYGOMA_ALIGN(16); 00175 u32 volatile m_triggerMode_2 ZYGOMA_ALIGN(16); 00176 u32 volatile m_triggerMode_3 ZYGOMA_ALIGN(16); 00177 u32 volatile m_triggerMode_4 ZYGOMA_ALIGN(16); 00178 u32 volatile m_triggerMode_5 ZYGOMA_ALIGN(16); 00179 u32 volatile m_triggerMode_6 ZYGOMA_ALIGN(16); 00180 u32 volatile m_triggerMode_7 ZYGOMA_ALIGN(16); 00181 u32 volatile m_interruptRequest_0 ZYGOMA_ALIGN(16); 00182 u32 volatile m_interruptRequest_1 ZYGOMA_ALIGN(16); 00183 u32 volatile m_interruptRequest_2 ZYGOMA_ALIGN(16); 00184 u32 volatile m_interruptRequest_3 ZYGOMA_ALIGN(16); 00185 u32 volatile m_interruptRequest_4 ZYGOMA_ALIGN(16); 00186 u32 volatile m_interruptRequest_5 ZYGOMA_ALIGN(16); 00187 u32 volatile m_interruptRequest_6 ZYGOMA_ALIGN(16); 00188 u32 volatile m_interruptRequest_7 ZYGOMA_ALIGN(16); 00189 u32 volatile m_errorStatus ZYGOMA_ALIGN(16); 00190 u32 volatile m_reserved_0290 ZYGOMA_ALIGN(16); 00191 u32 volatile m_reserved_02a0 ZYGOMA_ALIGN(16); 00192 u32 volatile m_reserved_02b0 ZYGOMA_ALIGN(16); 00193 u32 volatile m_reserved_02c0 ZYGOMA_ALIGN(16); 00194 u32 volatile m_reserved_02d0 ZYGOMA_ALIGN(16); 00195 u32 volatile m_reserved_02e0 ZYGOMA_ALIGN(16); 00196 u32 volatile m_reserved_02f0 ZYGOMA_ALIGN(16); 00197 u32 volatile m_interruptCommand_00 ZYGOMA_ALIGN(16); 00198 u32 volatile m_interruptCommand_32 ZYGOMA_ALIGN(16); 00199 u32 volatile m_lvtTimer ZYGOMA_ALIGN(16); 00200 u32 volatile m_lvtThermalSensor ZYGOMA_ALIGN(16); 00201 u32 volatile m_lvtPerformanceMonitor ZYGOMA_ALIGN(16); 00202 u32 volatile m_lvtLINT0 ZYGOMA_ALIGN(16); 00203 u32 volatile m_lvtLINT1 ZYGOMA_ALIGN(16); 00204 u32 volatile m_lvtError ZYGOMA_ALIGN(16); 00205 u32 volatile m_timerInitialCount ZYGOMA_ALIGN(16); 00206 u32 volatile m_timerCurrentCount ZYGOMA_ALIGN(16); 00207 u32 volatile m_reserved_3a0[6] ZYGOMA_ALIGN(16); 00208 u32 volatile m_timerDivide ZYGOMA_ALIGN(16); 00209 u32 volatile m_reserved_03f0 ZYGOMA_ALIGN(16); 00210 }; 00211 00213 inline std::ostream& 00214 operator<<(std::ostream& ostr, LocalApic& apic) 00215 { 00216 return apic.printStream(ostr); 00217 } 00218 00219 } // namespace ia32 00220 } // namespace Zygoma 00221 00222 #endif // ZYGOMA_IA32_APIC_H_