1 /// @file 2 /// IPF specific External Interrupt Control Registers accessing functions 3 /// 4 /// Copyright (c) 2006, Intel Corporation. All rights reserved.<BR> 5 /// This program and the accompanying materials 6 /// are licensed and made available under the terms and conditions of the BSD License 7 /// which accompanies this distribution. The full text of the license may be found at 8 /// http://opensource.org/licenses/bsd-license.php. 9 /// 10 /// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 11 /// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 12 /// 13 /// Module Name: AccessEicr.s 14 /// 15 /// 16 17 //--------------------------------------------------------------------------------- 18 //++ 19 // AsmReadLid 20 // 21 // This routine is used to read the value of Local Interrupt ID Register (LID). 22 // 23 // Arguments : 24 // 25 // On Entry : 26 // 27 // Return Value: The current value of LID. 28 // 29 //-- 30 //---------------------------------------------------------------------------------- 31 .text 32 .type AsmReadLid, @function 33 .proc AsmReadLid 34 35 AsmReadLid:: 36 mov r8 = cr.lid;; 37 srlz.d;; 38 br.ret.dpnt b0;; 39 .endp AsmReadLid 40 41 //--------------------------------------------------------------------------------- 42 //++ 43 // AsmWriteLid 44 // 45 // This routine is used to write the value to Local Interrupt ID Register (LID). 46 // 47 // Arguments : 48 // 49 // On Entry : The value need to be written to LID. 50 // 51 // Return Value: The value written to LID. 52 // 53 //-- 54 //---------------------------------------------------------------------------------- 55 .text 56 .type AsmWriteLid, @function 57 .proc AsmWriteLid 58 .regstk 1, 0, 0, 0 59 60 AsmWriteLid:: 61 mov cr.lid = in0 62 mov r8 = in0;; 63 srlz.d;; 64 br.ret.dpnt b0;; 65 .endp AsmWriteLid 66 67 68 //--------------------------------------------------------------------------------- 69 //++ 70 // AsmReadIvr 71 // 72 // This routine is used to read the value of External Interrupt Vector Register (IVR). 73 // 74 // Arguments : 75 // 76 // On Entry : 77 // 78 // Return Value: The current value of IVR. 79 // 80 //-- 81 //---------------------------------------------------------------------------------- 82 .text 83 .type AsmReadIvr, @function 84 .proc AsmReadIvr 85 86 AsmReadIvr:: 87 mov r8 = cr.ivr;; 88 srlz.d;; 89 br.ret.dpnt b0;; 90 .endp AsmReadIvr 91 92 93 //--------------------------------------------------------------------------------- 94 //++ 95 // AsmReadTpr 96 // 97 // This routine is used to read the value of Task Priority Register (TPR). 98 // 99 // Arguments : 100 // 101 // On Entry : 102 // 103 // Return Value: The current value of TPR. 104 // 105 //-- 106 //---------------------------------------------------------------------------------- 107 .text 108 .type AsmReadTpr, @function 109 .proc AsmReadTpr 110 111 AsmReadTpr:: 112 mov r8 = cr.tpr;; 113 br.ret.dpnt b0;; 114 .endp AsmReadTpr 115 116 //--------------------------------------------------------------------------------- 117 //++ 118 // AsmWriteTpr 119 // 120 // This routine is used to write the value to Task Priority Register (TPR). 121 // 122 // Arguments : 123 // 124 // On Entry : The value need to be written to TPR. 125 // 126 // Return Value: The value written to TPR. 127 // 128 //-- 129 //---------------------------------------------------------------------------------- 130 .text 131 .type AsmWriteTpr, @function 132 .proc AsmWriteTpr 133 .regstk 1, 0, 0, 0 134 135 AsmWriteTpr:: 136 mov cr.tpr = in0 137 mov r8 = in0;; 138 srlz.d;; 139 br.ret.dpnt b0;; 140 .endp AsmWriteTpr 141 142 143 //--------------------------------------------------------------------------------- 144 //++ 145 // AsmWriteEoi 146 // 147 // This routine is used to write the value to End of External Interrupt Register (EOI). 148 // 149 // Arguments : 150 // 151 // On Entry : The value need to be written to EOI. 152 // 153 // Return Value: The value written to EOI. 154 // 155 //-- 156 //---------------------------------------------------------------------------------- 157 .text 158 .type AsmWriteEoi, @function 159 .proc AsmWriteEoi 160 161 AsmWriteEoi:: 162 mov cr.eoi = r0;; 163 srlz.d;; 164 br.ret.dpnt b0;; 165 .endp AsmWriteEoi 166 167 168 //--------------------------------------------------------------------------------- 169 //++ 170 // AsmReadIrr0 171 // 172 // This routine is used to Read the value of External Interrupt Request Register 0 (IRR0). 173 // 174 // Arguments : 175 // 176 // On Entry : 177 // 178 // Return Value: The current value of IRR0. 179 // 180 //-- 181 //---------------------------------------------------------------------------------- 182 .text 183 .type AsmReadIrr0, @function 184 .proc AsmReadIrr0 185 186 AsmReadIrr0:: 187 mov r8 = cr.irr0;; 188 br.ret.dpnt b0;; 189 .endp AsmReadIrr0 190 191 192 //--------------------------------------------------------------------------------- 193 //++ 194 // AsmReadIrr1 195 // 196 // This routine is used to Read the value of External Interrupt Request Register 1 (IRR1). 197 // 198 // Arguments : 199 // 200 // On Entry : 201 // 202 // Return Value: The current value of IRR1. 203 // 204 //-- 205 //---------------------------------------------------------------------------------- 206 .text 207 .type AsmReadIrr1, @function 208 .proc AsmReadIrr1 209 210 AsmReadIrr1:: 211 mov r8 = cr.irr1;; 212 br.ret.dpnt b0;; 213 .endp AsmReadIrr1 214 215 216 //--------------------------------------------------------------------------------- 217 //++ 218 // AsmReadIrr2 219 // 220 // This routine is used to Read the value of External Interrupt Request Register 2 (IRR2). 221 // 222 // Arguments : 223 // 224 // On Entry : 225 // 226 // Return Value: The current value of IRR2. 227 // 228 //-- 229 //---------------------------------------------------------------------------------- 230 .text 231 .type AsmReadIrr2, @function 232 .proc AsmReadIrr2 233 234 AsmReadIrr2:: 235 mov r8 = cr.irr2;; 236 br.ret.dpnt b0;; 237 .endp AsmReadIrr2 238 239 240 //--------------------------------------------------------------------------------- 241 //++ 242 // AsmReadIrr3 243 // 244 // This routine is used to Read the value of External Interrupt Request Register 3 (IRR3). 245 // 246 // Arguments : 247 // 248 // On Entry : 249 // 250 // Return Value: The current value of IRR3. 251 // 252 //-- 253 //---------------------------------------------------------------------------------- 254 .text 255 .type AsmReadIrr3, @function 256 .proc AsmReadIrr3 257 258 AsmReadIrr3:: 259 mov r8 = cr.irr3;; 260 br.ret.dpnt b0;; 261 .endp AsmReadIrr3 262 263 264 //--------------------------------------------------------------------------------- 265 //++ 266 // AsmReadItv 267 // 268 // This routine is used to Read the value of Interval Timer Vector Register (ITV). 269 // 270 // Arguments : 271 // 272 // On Entry : 273 // 274 // Return Value: The current value of ITV. 275 // 276 //-- 277 //---------------------------------------------------------------------------------- 278 .text 279 .type AsmReadItv, @function 280 .proc AsmReadItv 281 282 AsmReadItv:: 283 mov r8 = cr.itv;; 284 br.ret.dpnt b0;; 285 .endp AsmReadItv 286 287 //--------------------------------------------------------------------------------- 288 //++ 289 // AsmWriteItv 290 // 291 // This routine is used to write the value to Interval Timer Vector Register (ITV). 292 // 293 // Arguments : 294 // 295 // On Entry : The value need to be written to ITV 296 // 297 // Return Value: The value written to ITV. 298 // 299 //-- 300 //---------------------------------------------------------------------------------- 301 .text 302 .type AsmWriteItv, @function 303 .proc AsmWriteItv 304 .regstk 1, 0, 0, 0 305 306 AsmWriteItv:: 307 mov cr.itv = in0 308 mov r8 = in0;; 309 srlz.d;; 310 br.ret.dpnt b0;; 311 .endp AsmWriteItv 312 313 314 //--------------------------------------------------------------------------------- 315 //++ 316 // AsmReadPmv 317 // 318 // This routine is used to Read the value of Performance Monitoring Vector Register (PMV). 319 // 320 // Arguments : 321 // 322 // On Entry : 323 // 324 // Return Value: The current value of PMV. 325 // 326 //-- 327 //---------------------------------------------------------------------------------- 328 .text 329 .type AsmReadPmv, @function 330 .proc AsmReadPmv 331 332 AsmReadPmv:: 333 mov r8 = cr.pmv;; 334 br.ret.dpnt b0;; 335 .endp AsmReadPmv 336 337 //--------------------------------------------------------------------------------- 338 //++ 339 // AsmWritePmv 340 // 341 // This routine is used to write the value to Performance Monitoring Vector Register (PMV). 342 // 343 // Arguments : 344 // 345 // On Entry : The value need to be written to PMV 346 // 347 // Return Value: The value written to PMV. 348 // 349 //-- 350 //---------------------------------------------------------------------------------- 351 .text 352 .type AsmWritePmv, @function 353 .proc AsmWritePmv 354 .regstk 1, 0, 0, 0 355 356 AsmWritePmv:: 357 mov cr.pmv = in0 358 mov r8 = in0;; 359 srlz.d;; 360 br.ret.dpnt b0;; 361 .endp AsmWritePmv 362 363 364 //--------------------------------------------------------------------------------- 365 //++ 366 // AsmReadCmcv 367 // 368 // This routine is used to Read the value of Corrected Machine Check Vector Register (CMCV). 369 // 370 // Arguments : 371 // 372 // On Entry : 373 // 374 // Return Value: The current value of CMCV. 375 // 376 //-- 377 //---------------------------------------------------------------------------------- 378 .text 379 .type AsmReadCmcv, @function 380 .proc AsmReadCmcv 381 382 AsmReadCmcv:: 383 mov r8 = cr.cmcv;; 384 br.ret.dpnt b0;; 385 .endp AsmReadCmcv 386 387 //--------------------------------------------------------------------------------- 388 //++ 389 // AsmWriteCmcv 390 // 391 // This routine is used to write the value to Corrected Machine Check Vector Register (CMCV). 392 // 393 // Arguments : 394 // 395 // On Entry : The value need to be written to CMCV 396 // 397 // Return Value: The value written to CMCV. 398 // 399 //-- 400 //---------------------------------------------------------------------------------- 401 .text 402 .type AsmWriteCmcv, @function 403 .proc AsmWriteCmcv 404 .regstk 1, 0, 0, 0 405 406 AsmWriteCmcv:: 407 mov cr.cmcv = in0 408 mov r8 = in0;; 409 srlz.d;; 410 br.ret.dpnt b0;; 411 .endp AsmWriteCmcv 412 413 414 //--------------------------------------------------------------------------------- 415 //++ 416 // AsmReadLrr0 417 // 418 // This routine is used to read the value of Local Redirection Register 0 (LRR0). 419 // 420 // Arguments : 421 // 422 // On Entry : 423 // 424 // Return Value: The current value of LRR0. 425 // 426 //-- 427 //---------------------------------------------------------------------------------- 428 .text 429 .type AsmReadLrr0, @function 430 .proc AsmReadLrr0 431 432 AsmReadLrr0:: 433 mov r8 = cr.lrr0;; 434 br.ret.dpnt b0;; 435 .endp AsmReadLrr0 436 437 //--------------------------------------------------------------------------------- 438 //++ 439 // AsmWriteLrr0 440 // 441 // This routine is used to write the value to Local Redirection Register 0 (LRR0). 442 // 443 // Arguments : 444 // 445 // On Entry : The value need to be written to LRR0. 446 // 447 // Return Value: The value written to LRR0. 448 // 449 //-- 450 //---------------------------------------------------------------------------------- 451 .text 452 .type AsmWriteLrr0, @function 453 .proc AsmWriteLrr0 454 .regstk 1, 0, 0, 0 455 456 AsmWriteLrr0:: 457 mov cr.lrr0 = in0 458 mov r8 = in0;; 459 srlz.d;; 460 br.ret.dpnt b0;; 461 .endp AsmWriteLrr0 462 463 464 //--------------------------------------------------------------------------------- 465 //++ 466 // AsmReadLrr1 467 // 468 // This routine is used to read the value of Local Redirection Register 1 (LRR1). 469 // 470 // Arguments : 471 // 472 // On Entry : 473 // 474 // Return Value: The current value of LRR1. 475 // 476 //-- 477 //---------------------------------------------------------------------------------- 478 .text 479 .type AsmReadLrr1, @function 480 .proc AsmReadLrr1 481 482 AsmReadLrr1:: 483 mov r8 = cr.lrr1;; 484 br.ret.dpnt b0;; 485 .endp AsmReadLrr1 486 487 //--------------------------------------------------------------------------------- 488 //++ 489 // AsmWriteLrr1 490 // 491 // This routine is used to write the value to Local Redirection Register 1 (LRR1). 492 // 493 // Arguments : 494 // 495 // On Entry : The value need to be written to LRR1. 496 // 497 // Return Value: The value written to LRR1. 498 // 499 //-- 500 //---------------------------------------------------------------------------------- 501 .text 502 .type AsmWriteLrr1, @function 503 .proc AsmWriteLrr1 504 .regstk 1, 0, 0, 0 505 506 AsmWriteLrr1:: 507 mov cr.lrr1 = in0 508 mov r8 = in0;; 509 srlz.d;; 510 br.ret.dpnt b0;; 511 .endp AsmWriteLrr1 512 513