00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
#include "ki.h"
00028
00029 ULONG
00030 KiGetRegisterValue (
00031 IN ULONG Register,
00032 IN PKEXCEPTION_FRAME ExceptionFrame,
00033 IN PKTRAP_FRAME TrapFrame
00034 )
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059 {
00060
00061
00062
00063
00064
00065
if (Register == 0) {
00066
return 0;
00067
00068 }
else if (Register < 32) {
00069
return (ULONG)(&TrapFrame->XIntZero)[Register];
00070
00071 }
else {
00072
switch (Register) {
00073
00074
00075
00076
00077
00078
case 32:
00079
return TrapFrame->FltF0;
00080
00081
00082
00083
00084
00085
case 33:
00086
return TrapFrame->FltF1;
00087
00088
00089
00090
00091
00092
case 34:
00093
return TrapFrame->FltF2;
00094
00095
00096
00097
00098
00099
case 35:
00100
return TrapFrame->FltF3;
00101
00102
00103
00104
00105
00106
case 36:
00107
return TrapFrame->FltF4;
00108
00109
00110
00111
00112
00113
case 37:
00114
return TrapFrame->FltF5;
00115
00116
00117
00118
00119
00120
case 38:
00121
return TrapFrame->FltF6;
00122
00123
00124
00125
00126
00127
case 39:
00128
return TrapFrame->FltF7;
00129
00130
00131
00132
00133
00134
case 40:
00135
return TrapFrame->FltF8;
00136
00137
00138
00139
00140
00141
case 41:
00142
return TrapFrame->FltF9;
00143
00144
00145
00146
00147
00148
case 42:
00149
return TrapFrame->FltF10;
00150
00151
00152
00153
00154
00155
case 43:
00156
return TrapFrame->FltF11;
00157
00158
00159
00160
00161
00162
case 44:
00163
return TrapFrame->FltF12;
00164
00165
00166
00167
00168
00169
case 45:
00170
return TrapFrame->FltF13;
00171
00172
00173
00174
00175
00176
case 46:
00177
return TrapFrame->FltF14;
00178
00179
00180
00181
00182
00183
case 47:
00184
return TrapFrame->FltF15;
00185
00186
00187
00188
00189
00190
case 48:
00191
return TrapFrame->FltF16;
00192
00193
00194
00195
00196
00197
case 49:
00198
return TrapFrame->FltF17;
00199
00200
00201
00202
00203
00204
case 50:
00205
return TrapFrame->FltF18;
00206
00207
00208
00209
00210
00211
case 51:
00212
return TrapFrame->FltF19;
00213
00214
00215
00216
00217
00218
case 52:
00219
return ExceptionFrame->FltF20;
00220
00221
00222
00223
00224
00225
case 53:
00226
return ExceptionFrame->FltF21;
00227
00228
00229
00230
00231
00232
case 54:
00233
return ExceptionFrame->FltF22;
00234
00235
00236
00237
00238
00239
case 55:
00240
return ExceptionFrame->FltF23;
00241
00242
00243
00244
00245
00246
case 56:
00247
return ExceptionFrame->FltF24;
00248
00249
00250
00251
00252
00253
case 57:
00254
return ExceptionFrame->FltF25;
00255
00256
00257
00258
00259
00260
case 58:
00261
return ExceptionFrame->FltF26;
00262
00263
00264
00265
00266
00267
case 59:
00268
return ExceptionFrame->FltF27;
00269
00270
00271
00272
00273
00274
case 60:
00275
return ExceptionFrame->FltF28;
00276
00277
00278
00279
00280
00281
case 61:
00282
return ExceptionFrame->FltF29;
00283
00284
00285
00286
00287
00288
case 62:
00289
return ExceptionFrame->FltF30;
00290
00291
00292
00293
00294
00295
case 63:
00296
return ExceptionFrame->FltF31;
00297 }
00298 }
00299 }
00300
00301 ULONGLONG
00302 KiGetRegisterValue64 (
00303 IN ULONG Register,
00304 IN PKEXCEPTION_FRAME ExceptionFrame,
00305 IN PKTRAP_FRAME TrapFrame
00306 )
00307
00308
00309
00310
00311
00312
00313
00314
00315
00316
00317
00318
00319
00320
00321
00322
00323
00324
00325
00326
00327
00328
00329
00330
00331 {
00332
00333
00334
00335
00336
00337
if (Register == 0) {
00338
return 0;
00339
00340 }
else if (Register < 32) {
00341
return (&TrapFrame->XIntZero)[Register];
00342
00343 }
else {
00344
switch (Register) {
00345
00346
00347
00348
00349
00350
case 32:
00351
return TrapFrame->XFltF0;
00352
00353
00354
00355
00356
00357
case 33:
00358
return TrapFrame->XFltF1;
00359
00360
00361
00362
00363
00364
case 34:
00365
return TrapFrame->XFltF2;
00366
00367
00368
00369
00370
00371
case 35:
00372
return TrapFrame->XFltF3;
00373
00374
00375
00376
00377
00378
case 36:
00379
return TrapFrame->XFltF4;
00380
00381
00382
00383
00384
00385
case 37:
00386
return TrapFrame->XFltF5;
00387
00388
00389
00390
00391
00392
case 38:
00393
return TrapFrame->XFltF6;
00394
00395
00396
00397
00398
00399
case 39:
00400
return TrapFrame->XFltF7;
00401
00402
00403
00404
00405
00406
case 40:
00407
return TrapFrame->XFltF8;
00408
00409
00410
00411
00412
00413
case 41:
00414
return TrapFrame->XFltF9;
00415
00416
00417
00418
00419
00420
case 42:
00421
return TrapFrame->XFltF10;
00422
00423
00424
00425
00426
00427
case 43:
00428
return TrapFrame->XFltF11;
00429
00430
00431
00432
00433
00434
case 44:
00435
return TrapFrame->XFltF12;
00436
00437
00438
00439
00440
00441
case 45:
00442
return TrapFrame->XFltF13;
00443
00444
00445
00446
00447
00448
case 46:
00449
return TrapFrame->XFltF14;
00450
00451
00452
00453
00454
00455
case 47:
00456
return TrapFrame->XFltF15;
00457
00458
00459
00460
00461
00462
case 48:
00463
return TrapFrame->XFltF16;
00464
00465
00466
00467
00468
00469
case 49:
00470
return TrapFrame->XFltF17;
00471
00472
00473
00474
00475
00476
case 50:
00477
return TrapFrame->XFltF18;
00478
00479
00480
00481
00482
00483
case 51:
00484
return TrapFrame->XFltF19;
00485
00486
00487
00488
00489
00490
case 52:
00491
return ExceptionFrame->XFltF20;
00492
00493
00494
00495
00496
00497
case 53:
00498
return TrapFrame->XFltF21;
00499
00500
00501
00502
00503
00504
case 54:
00505
return ExceptionFrame->XFltF22;
00506
00507
00508
00509
00510
00511
case 55:
00512
return TrapFrame->XFltF23;
00513
00514
00515
00516
00517
00518
case 56:
00519
return ExceptionFrame->XFltF24;
00520
00521
00522
00523
00524
00525
case 57:
00526
return TrapFrame->XFltF25;
00527
00528
00529
00530
00531
00532
case 58:
00533
return ExceptionFrame->XFltF26;
00534
00535
00536
00537
00538
00539
case 59:
00540
return TrapFrame->XFltF27;
00541
00542
00543
00544
00545
00546
case 60:
00547
return ExceptionFrame->XFltF28;
00548
00549
00550
00551
00552
00553
case 61:
00554
return TrapFrame->XFltF29;
00555
00556
00557
00558
00559
00560
case 62:
00561
return ExceptionFrame->XFltF30;
00562
00563
00564
00565
00566
00567
case 63:
00568
return TrapFrame->XFltF31;
00569 }
00570 }
00571 }
00572
00573
VOID
00574 KiSetRegisterValue (
00575 IN ULONG Register,
00576 IN ULONG Value,
00577 OUT PKEXCEPTION_FRAME ExceptionFrame,
00578 OUT PKTRAP_FRAME TrapFrame
00579 )
00580
00581
00582
00583
00584
00585
00586
00587
00588
00589
00590
00591
00592
00593
00594
00595
00596
00597
00598
00599
00600
00601
00602
00603
00604
00605
00606 {
00607
00608
00609
00610
00611
00612
if (Register < 32) {
00613 (&TrapFrame->XIntZero)[Register] = (LONG)Value;
00614
00615 }
else {
00616
switch (Register) {
00617
00618
00619
00620
00621
00622
case 32:
00623 TrapFrame->FltF0 = Value;
00624
return;
00625
00626
00627
00628
00629
00630
case 33:
00631 TrapFrame->FltF1 = Value;
00632
return;
00633
00634
00635
00636
00637
00638
case 34:
00639 TrapFrame->FltF2 = Value;
00640
return;
00641
00642
00643
00644
00645
00646
case 35:
00647 TrapFrame->FltF3 = Value;
00648
return;
00649
00650
00651
00652
00653
00654
case 36:
00655 TrapFrame->FltF4 = Value;
00656
return;
00657
00658
00659
00660
00661
00662
case 37:
00663 TrapFrame->FltF5 = Value;
00664
return;
00665
00666
00667
00668
00669
00670
case 38:
00671 TrapFrame->FltF6 = Value;
00672
return;
00673
00674
00675
00676
00677
00678
case 39:
00679 TrapFrame->FltF7 = Value;
00680
return;
00681
00682
00683
00684
00685
00686
case 40:
00687 TrapFrame->FltF8 = Value;
00688
return;
00689
00690
00691
00692
00693
00694
case 41:
00695 TrapFrame->FltF9 = Value;
00696
return;
00697
00698
00699
00700
00701
00702
case 42:
00703 TrapFrame->FltF10 = Value;
00704
return;
00705
00706
00707
00708
00709
00710
case 43:
00711 TrapFrame->FltF11 = Value;
00712
return;
00713
00714
00715
00716
00717
00718
case 44:
00719 TrapFrame->FltF12 = Value;
00720
return;
00721
00722
00723
00724
00725
00726
case 45:
00727 TrapFrame->FltF13 = Value;
00728
return;
00729
00730
00731
00732
00733
00734
case 46:
00735 TrapFrame->FltF14 = Value;
00736
return;
00737
00738
00739
00740
00741
00742
case 47:
00743 TrapFrame->FltF15 = Value;
00744
return;
00745
00746
00747
00748
00749
00750
case 48:
00751 TrapFrame->FltF16 = Value;
00752
return;
00753
00754
00755
00756
00757
00758
case 49:
00759 TrapFrame->FltF17 = Value;
00760
return;
00761
00762
00763
00764
00765
00766
case 50:
00767 TrapFrame->FltF18 = Value;
00768
return;
00769
00770
00771
00772
00773
00774
case 51:
00775 TrapFrame->FltF19 = Value;
00776
return;
00777
00778
00779
00780
00781
00782
case 52:
00783 ExceptionFrame->FltF20 = Value;
00784
return;
00785
00786
00787
00788
00789
00790
case 53:
00791 ExceptionFrame->FltF21 = Value;
00792
return;
00793
00794
00795
00796
00797
00798
case 54:
00799 ExceptionFrame->FltF22 = Value;
00800
return;
00801
00802
00803
00804
00805
00806
case 55:
00807 ExceptionFrame->FltF23 = Value;
00808
return;
00809
00810
00811
00812
00813
00814
case 56:
00815 ExceptionFrame->FltF24 = Value;
00816
return;
00817
00818
00819
00820
00821
00822
case 57:
00823 ExceptionFrame->FltF25 = Value;
00824
return;
00825
00826
00827
00828
00829
00830
case 58:
00831 ExceptionFrame->FltF26 = Value;
00832
return;
00833
00834
00835
00836
00837
00838
case 59:
00839 ExceptionFrame->FltF27 = Value;
00840
return;
00841
00842
00843
00844
00845
00846
case 60:
00847 ExceptionFrame->FltF28 = Value;
00848
return;
00849
00850
00851
00852
00853
00854
case 61:
00855 ExceptionFrame->FltF29 = Value;
00856
return;
00857
00858
00859
00860
00861
00862
case 62:
00863 ExceptionFrame->FltF30 = Value;
00864
return;
00865
00866
00867
00868
00869
00870
case 63:
00871 ExceptionFrame->FltF31 = Value;
00872
return;
00873 }
00874 }
00875 }
00876
00877
VOID
00878 KiSetRegisterValue64 (
00879 IN ULONG Register,
00880 IN ULONGLONG Value,
00881 OUT PKEXCEPTION_FRAME ExceptionFrame,
00882 OUT PKTRAP_FRAME TrapFrame
00883 )
00884
00885
00886
00887
00888
00889
00890
00891
00892
00893
00894
00895
00896
00897
00898
00899
00900
00901
00902
00903
00904
00905
00906
00907
00908
00909
00910 {
00911
00912
00913
00914
00915
00916
if (Register < 32) {
00917 (&TrapFrame->XIntZero)[Register] = Value;
00918
00919 }
else {
00920
switch (Register) {
00921
00922
00923
00924
00925
00926
case 32:
00927 TrapFrame->XFltF0 = Value;
00928
return;
00929
00930
00931
00932
00933
00934
case 33:
00935 TrapFrame->XFltF1 = Value;
00936
return;
00937
00938
00939
00940
00941
00942
case 34:
00943 TrapFrame->XFltF2 = Value;
00944
return;
00945
00946
00947
00948
00949
00950
case 35:
00951 TrapFrame->XFltF3 = Value;
00952
return;
00953
00954
00955
00956
00957
00958
case 36:
00959 TrapFrame->XFltF4 = Value;
00960
return;
00961
00962
00963
00964
00965
00966
case 37:
00967 TrapFrame->XFltF5 = Value;
00968
return;
00969
00970
00971
00972
00973
00974
case 38:
00975 TrapFrame->XFltF6 = Value;
00976
return;
00977
00978
00979
00980
00981
00982
case 39:
00983 TrapFrame->XFltF7 = Value;
00984
return;
00985
00986
00987
00988
00989
00990
case 40:
00991 TrapFrame->XFltF8 = Value;
00992
return;
00993
00994
00995
00996
00997
00998
case 41:
00999 TrapFrame->XFltF9 = Value;
01000
return;
01001
01002
01003
01004
01005
01006
case 42:
01007 TrapFrame->XFltF10 = Value;
01008
return;
01009
01010
01011
01012
01013
01014
case 43:
01015 TrapFrame->XFltF11 = Value;
01016
return;
01017
01018
01019
01020
01021
01022
case 44:
01023 TrapFrame->XFltF12 = Value;
01024
return;
01025
01026
01027
01028
01029
01030
case 45:
01031 TrapFrame->XFltF13 = Value;
01032
return;
01033
01034
01035
01036
01037
01038
case 46:
01039 TrapFrame->XFltF14 = Value;
01040
return;
01041
01042
01043
01044
01045
01046
case 47:
01047 TrapFrame->XFltF15 = Value;
01048
return;
01049
01050
01051
01052
01053
01054
case 48:
01055 TrapFrame->XFltF16 = Value;
01056
return;
01057
01058
01059
01060
01061
01062
case 49:
01063 TrapFrame->XFltF17 = Value;
01064
return;
01065
01066
01067
01068
01069
01070
case 50:
01071 TrapFrame->XFltF18 = Value;
01072
return;
01073
01074
01075
01076
01077
01078
case 51:
01079 TrapFrame->XFltF19 = Value;
01080
return;
01081
01082
01083
01084
01085
01086
case 52:
01087 ExceptionFrame->XFltF20 = Value;
01088
return;
01089
01090
01091
01092
01093
01094
case 53:
01095 TrapFrame->XFltF21 = Value;
01096
return;
01097
01098
01099
01100
01101
01102
case 54:
01103 ExceptionFrame->XFltF22 = Value;
01104
return;
01105
01106
01107
01108
01109
01110
case 55:
01111 TrapFrame->XFltF23 = Value;
01112
return;
01113
01114
01115
01116
01117
01118
case 56:
01119 ExceptionFrame->XFltF24 = Value;
01120
return;
01121
01122
01123
01124
01125
01126
case 57:
01127 TrapFrame->XFltF25 = Value;
01128
return;
01129
01130
01131
01132
01133
01134
case 58:
01135 ExceptionFrame->XFltF26 = Value;
01136
return;
01137
01138
01139
01140
01141
01142
case 59:
01143 TrapFrame->XFltF27 = Value;
01144
return;
01145
01146
01147
01148
01149
01150
case 60:
01151 ExceptionFrame->XFltF28 = Value;
01152
return;
01153
01154
01155
01156
01157
01158
case 61:
01159 TrapFrame->XFltF29 = Value;
01160
return;
01161
01162
01163
01164
01165
01166
case 62:
01167 ExceptionFrame->XFltF30 = Value;
01168
return;
01169
01170
01171
01172
01173
01174
case 63:
01175 TrapFrame->XFltF31 = Value;
01176
return;
01177 }
01178 }
01179 }