1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
|
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License (the "License").
* You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
* Copyright 2019, Joyent, Inc.
*/
#ifndef _SYS_PCI_H
#define _SYS_PCI_H
#ifdef __cplusplus
extern "C" {
#endif
/*
* PCI Configuration Header offsets
*/
#define PCI_CONF_VENID 0x0 /* vendor id, 2 bytes */
#define PCI_CONF_DEVID 0x2 /* device id, 2 bytes */
#define PCI_CONF_COMM 0x4 /* command register, 2 bytes */
#define PCI_CONF_STAT 0x6 /* status register, 2 bytes */
#define PCI_CONF_REVID 0x8 /* revision id, 1 byte */
#define PCI_CONF_PROGCLASS 0x9 /* programming class code, 1 byte */
#define PCI_CONF_SUBCLASS 0xA /* sub-class code, 1 byte */
#define PCI_CONF_BASCLASS 0xB /* basic class code, 1 byte */
#define PCI_CONF_CACHE_LINESZ 0xC /* cache line size, 1 byte */
#define PCI_CONF_LATENCY_TIMER 0xD /* latency timer, 1 byte */
#define PCI_CONF_HEADER 0xE /* header type, 1 byte */
#define PCI_CONF_BIST 0xF /* builtin self test, 1 byte */
/*
* Header type 0 offsets
*/
#define PCI_CONF_BASE0 0x10 /* base register 0, 4 bytes */
#define PCI_CONF_BASE1 0x14 /* base register 1, 4 bytes */
#define PCI_CONF_BASE2 0x18 /* base register 2, 4 bytes */
#define PCI_CONF_BASE3 0x1c /* base register 3, 4 bytes */
#define PCI_CONF_BASE4 0x20 /* base register 4, 4 bytes */
#define PCI_CONF_BASE5 0x24 /* base register 5, 4 bytes */
#define PCI_CONF_CIS 0x28 /* Cardbus CIS Pointer */
#define PCI_CONF_SUBVENID 0x2c /* Subsystem Vendor ID */
#define PCI_CONF_SUBSYSID 0x2e /* Subsystem ID */
#define PCI_CONF_ROM 0x30 /* ROM base register, 4 bytes */
#define PCI_CONF_CAP_PTR 0x34 /* capabilities pointer, 1 byte */
#define PCI_CONF_ILINE 0x3c /* interrupt line, 1 byte */
#define PCI_CONF_IPIN 0x3d /* interrupt pin, 1 byte */
#define PCI_CONF_MIN_G 0x3e /* minimum grant, 1 byte */
#define PCI_CONF_MAX_L 0x3f /* maximum grant, 1 byte */
/*
* PCI to PCI bridge configuration space header format
*/
#define PCI_BCNF_PRIBUS 0x18 /* primary bus number */
#define PCI_BCNF_SECBUS 0x19 /* secondary bus number */
#define PCI_BCNF_SUBBUS 0x1a /* subordinate bus number */
#define PCI_BCNF_LATENCY_TIMER 0x1b
#define PCI_BCNF_IO_BASE_LOW 0x1c
#define PCI_BCNF_IO_LIMIT_LOW 0x1d
#define PCI_BCNF_SEC_STATUS 0x1e
#define PCI_BCNF_MEM_BASE 0x20
#define PCI_BCNF_MEM_LIMIT 0x22
#define PCI_BCNF_PF_BASE_LOW 0x24
#define PCI_BCNF_PF_LIMIT_LOW 0x26
#define PCI_BCNF_PF_BASE_HIGH 0x28
#define PCI_BCNF_PF_LIMIT_HIGH 0x2c
#define PCI_BCNF_IO_BASE_HI 0x30
#define PCI_BCNF_IO_LIMIT_HI 0x32
#define PCI_BCNF_CAP_PTR 0x34
#define PCI_BCNF_ROM 0x38
#define PCI_BCNF_ILINE 0x3c
#define PCI_BCNF_IPIN 0x3d
#define PCI_BCNF_BCNTRL 0x3e
#define PCI_BCNF_BASE_NUM 0x2
/*
* PCI to PCI bridge control register (0x3e) format
*/
#define PCI_BCNF_BCNTRL_PARITY_ENABLE 0x1
#define PCI_BCNF_BCNTRL_SERR_ENABLE 0x2
#define PCI_BCNF_BCNTRL_ISA_ENABLE 0x4
#define PCI_BCNF_BCNTRL_VGA_ENABLE 0x8
#define PCI_BCNF_BCNTRL_MAST_AB_MODE 0x20
#define PCI_BCNF_BCNTRL_DTO_STAT 0x400
#define PCI_BCNF_BCNTRL_RESET 0x0040
#define PCI_BCNF_BCNTRL_B2B_ENAB 0x0080
#define PCI_BCNF_IO_MASK 0xf0
#define PCI_BCNF_IO_SHIFT 8
#define PCI_BCNF_MEM_MASK 0xfff0
#define PCI_BCNF_MEM_SHIFT 16
#define PCI_BCNF_ADDR_MASK 0x000f
#define PCI_BCNF_IO_32BIT 0x01
#define PCI_BCNF_PF_MEM_64BIT 0x01
/*
* Header type 2 (Cardbus) offsets
*/
#define PCI_CBUS_SOCK_REG 0x10 /* Cardbus socket regs, 4 bytes */
#define PCI_CBUS_CAP_PTR 0x14 /* Capability ptr, 1 byte */
#define PCI_CBUS_RESERVED1 0x15 /* Reserved, 1 byte */
#define PCI_CBUS_SEC_STATUS 0x16 /* Secondary status, 2 bytes */
#define PCI_CBUS_PCI_BUS_NO 0x18 /* PCI bus number, 1 byte */
#define PCI_CBUS_CBUS_NO 0x19 /* Cardbus bus number, 1 byte */
#define PCI_CBUS_SUB_BUS_NO 0x1a /* Subordinate bus number, 1 byte */
#define PCI_CBUS_LATENCY_TIMER 0x1b /* Cardbus latency timer, 1 byte */
#define PCI_CBUS_MEM_BASE0 0x1c /* Memory base reg 0, 4 bytes */
#define PCI_CBUS_MEM_LIMIT0 0x20 /* Memory limit reg 0, 4 bytes */
#define PCI_CBUS_MEM_BASE1 0x24 /* Memory base reg 1, 4 bytes */
#define PCI_CBUS_MEM_LIMIT1 0x28 /* Memory limit reg 1, 4 bytes */
#define PCI_CBUS_IO_BASE0 0x2c /* IO base reg 0, 4 bytes */
#define PCI_CBUS_IO_LIMIT0 0x30 /* IO limit reg 0, 4 bytes */
#define PCI_CBUS_IO_BASE1 0x34 /* IO base reg 1, 4 bytes */
#define PCI_CBUS_IO_LIMIT1 0x38 /* IO limit reg 1, 4 bytes */
#define PCI_CBUS_ILINE 0x3c /* interrupt line, 1 byte */
#define PCI_CBUS_IPIN 0x3d /* interrupt pin, 1 byte */
#define PCI_CBUS_BRIDGE_CTRL 0x3e /* Bridge control, 2 bytes */
#define PCI_CBUS_SUBVENID 0x40 /* Subsystem Vendor ID, 2 bytes */
#define PCI_CBUS_SUBSYSID 0x42 /* Subsystem ID, 2 bytes */
#define PCI_CBUS_LEG_MODE_ADDR 0x44 /* PCCard 16bit IF legacy mode addr */
#define PCI_CBUS_BASE_NUM 0x1 /* number of base registers */
/*
* PCI command register bits
*/
#define PCI_COMM_IO 0x1 /* I/O access enable */
#define PCI_COMM_MAE 0x2 /* memory access enable */
#define PCI_COMM_ME 0x4 /* master enable */
#define PCI_COMM_SPEC_CYC 0x8
#define PCI_COMM_MEMWR_INVAL 0x10
#define PCI_COMM_PALETTE_SNOOP 0x20
#define PCI_COMM_PARITY_DETECT 0x40
#define PCI_COMM_WAIT_CYC_ENAB 0x80
#define PCI_COMM_SERR_ENABLE 0x100
#define PCI_COMM_BACK2BACK_ENAB 0x200
#define PCI_COMM_INTX_DISABLE 0x400 /* INTx emulation disable */
/*
* PCI Interrupt pin value
*/
#define PCI_INTA 1
#define PCI_INTB 2
#define PCI_INTC 3
#define PCI_INTD 4
/*
* PCI status register bits
*/
#define PCI_STAT_READY 0x1 /* Immediate Readiness */
#define PCI_STAT_INTR 0x8 /* Interrupt state */
#define PCI_STAT_CAP 0x10 /* Implements Capabilities */
#define PCI_STAT_66MHZ 0x20 /* 66 MHz capable */
#define PCI_STAT_UDF 0x40 /* UDF supported */
#define PCI_STAT_FBBC 0x80 /* Fast Back-to-Back Capable */
#define PCI_STAT_S_PERROR 0x100 /* Data Parity Reported */
#define PCI_STAT_DEVSELT 0x600 /* Device select timing */
#define PCI_STAT_S_TARG_AB 0x800 /* Signaled Target Abort */
#define PCI_STAT_R_TARG_AB 0x1000 /* Received Target Abort */
#define PCI_STAT_R_MAST_AB 0x2000 /* Received Master Abort */
#define PCI_STAT_S_SYSERR 0x4000 /* Signaled System Error */
#define PCI_STAT_PERROR 0x8000 /* Detected Parity Error */
/*
* DEVSEL timing values
*/
#define PCI_STAT_DEVSELT_FAST 0x0000
#define PCI_STAT_DEVSELT_MEDIUM 0x0200
#define PCI_STAT_DEVSELT_SLOW 0x0400
/*
* BIST values
*/
#define PCI_BIST_SUPPORTED 0x80
#define PCI_BIST_GO 0x40
#define PCI_BIST_RESULT_M 0x0f
#define PCI_BIST_RESULT_OK 0x00
/*
* PCI class codes
*/
#define PCI_CLASS_NONE 0x0 /* class code for pre-2.0 devices */
#define PCI_CLASS_MASS 0x1 /* Mass storage Controller class */
#define PCI_CLASS_NET 0x2 /* Network Controller class */
#define PCI_CLASS_DISPLAY 0x3 /* Display Controller class */
#define PCI_CLASS_MM 0x4 /* Multimedia Controller class */
#define PCI_CLASS_MEM 0x5 /* Memory Controller class */
#define PCI_CLASS_BRIDGE 0x6 /* Bridge Controller class */
#define PCI_CLASS_COMM 0x7 /* Communications Controller class */
#define PCI_CLASS_PERIPH 0x8 /* Peripheral Controller class */
#define PCI_CLASS_INPUT 0x9 /* Input Device class */
#define PCI_CLASS_DOCK 0xa /* Docking Station class */
#define PCI_CLASS_PROCESSOR 0xb /* Processor class */
#define PCI_CLASS_SERIALBUS 0xc /* Serial Bus class */
#define PCI_CLASS_WIRELESS 0xd /* Wireless Controller class */
#define PCI_CLASS_INTIO 0xe /* Intelligent IO Controller class */
#define PCI_CLASS_SATELLITE 0xf /* Satellite Communication class */
#define PCI_CLASS_CRYPT 0x10 /* Encrytion/Decryption class */
#define PCI_CLASS_SIGNAL 0x11 /* Signal Processing class */
/*
* PCI Sub-class codes - base class 0x0 (no new devices should use this code).
*/
#define PCI_NONE_NOTVGA 0x0 /* All devices except VGA compatible */
#define PCI_NONE_VGA 0x1 /* VGA compatible */
/*
* PCI Sub-class codes - base class 0x1 (mass storage controllers)
*/
#define PCI_MASS_SCSI 0x0 /* SCSI bus Controller */
#define PCI_MASS_IDE 0x1 /* IDE Controller */
#define PCI_MASS_FD 0x2 /* Floppy disk Controller */
#define PCI_MASS_IPI 0x3 /* IPI bus Controller */
#define PCI_MASS_RAID 0x4 /* RAID Controller */
#define PCI_MASS_ATA 0x5 /* ATA Controller */
#define PCI_MASS_SATA 0x6 /* Serial ATA */
#define PCI_MASS_SAS 0x7 /* Serial Attached SCSI (SAS) Cntrlr */
#define PCI_MASS_NVME 0x8 /* Non-Volatile memory controller */
#define PCI_MASS_OTHER 0x80 /* Other Mass Storage Controller */
/*
* programming interface for IDE (subclass 1)
*/
#define PCI_IDE_IF_NATIVE_PRI 0x1 /* primary channel is native */
#define PCI_IDE_IF_PROG_PRI 0x2 /* primary can operate in either mode */
#define PCI_IDE_IF_NATIVE_SEC 0x4 /* secondary channel is native */
#define PCI_IDE_IF_PROG_SEC 0x8 /* sec. can operate in either mode */
#define PCI_IDE_IF_MASK 0xf /* programming interface mask */
/*
* programming interface for ATA (subclass 5)
*/
#define PCI_ATA_IF_SINGLE_DMA 0x20 /* ATA controller with single DMA */
#define PCI_ATA_IF_CHAINED_DMA 0x30 /* ATA controller with chained DMA */
/*
* programming interface for ATA (subclass 6) for SATA
*/
#define PCI_SATA_VS_INTERFACE 0x0 /* SATA Ctlr Vendor Specific Intfc */
#define PCI_SATA_AHCI_INTERFACE 0x1 /* SATA Ctlr AHCI 1.0 Interface */
#define PCI_SATA_SSB_INTERFACE 0x2 /* Serial Storage Bus Interface */
/*
* programming interface for ATA (subclass 7) for SAS
*/
#define PCI_SAS_CONTROLLER 0x0 /* SAS Controller */
#define PCI_SAS_BUS_INTERFACE 0x1 /* Serial Storage Bus Interface */
/*
* PCI Sub-class codes - base class 0x2 (Network controllers)
*/
#define PCI_NET_ENET 0x0 /* Ethernet Controller */
#define PCI_NET_TOKEN 0x1 /* Token Ring Controller */
#define PCI_NET_FDDI 0x2 /* FDDI Controller */
#define PCI_NET_ATM 0x3 /* ATM Controller */
#define PCI_NET_ISDN 0x4 /* ISDN Controller */
#define PCI_NET_WFIP 0x5 /* WorldFip Controller */
#define PCI_NET_PICMG 0x6 /* PICMG 2.14 Multi Computing */
#define PCI_NET_OTHER 0x80 /* Other Network Controller */
/*
* PCI Sub-class codes - base class 03 (display controllers)
*/
#define PCI_DISPLAY_VGA 0x0 /* VGA device */
#define PCI_DISPLAY_XGA 0x1 /* XGA device */
#define PCI_DISPLAY_3D 0x2 /* 3D controller */
#define PCI_DISPLAY_OTHER 0x80 /* Other Display Device */
/*
* programming interface for display for display class (subclass 0) VGA ctrlrs
*/
#define PCI_DISPLAY_IF_VGA 0x0 /* VGA compatible */
#define PCI_DISPLAY_IF_8514 0x1 /* 8514 compatible */
/*
* PCI Sub-class codes - base class 0x4 (multi-media devices)
*/
#define PCI_MM_VIDEO 0x0 /* Video device */
#define PCI_MM_AUDIO 0x1 /* Audio device */
#define PCI_MM_TELEPHONY 0x2 /* Computer Telephony device */
#define PCI_MM_MIXED_MODE 0x3 /* Mixed Mode device */
#define PCI_MM_OTHER 0x80 /* Other Multimedia Device */
/*
* PCI Sub-class codes - base class 0x5 (memory controllers)
*/
#define PCI_MEM_RAM 0x0 /* RAM device */
#define PCI_MEM_FLASH 0x1 /* FLASH device */
#define PCI_MEM_OTHER 0x80 /* Other Memory Controller */
/*
* PCI Sub-class codes - base class 0x6 (Bridge devices)
*/
#define PCI_BRIDGE_HOST 0x0 /* Host/PCI Bridge */
#define PCI_BRIDGE_ISA 0x1 /* PCI/ISA Bridge */
#define PCI_BRIDGE_EISA 0x2 /* PCI/EISA Bridge */
#define PCI_BRIDGE_MC 0x3 /* PCI/MC Bridge */
#define PCI_BRIDGE_PCI 0x4 /* PCI/PCI Bridge */
#define PCI_BRIDGE_PCMCIA 0x5 /* PCI/PCMCIA Bridge */
#define PCI_BRIDGE_NUBUS 0x6 /* PCI/NUBUS Bridge */
#define PCI_BRIDGE_CARDBUS 0x7 /* PCI/CARDBUS Bridge */
#define PCI_BRIDGE_RACE 0x8 /* RACE-way Bridge */
#define PCI_BRIDGE_STPCI 0x9 /* Semi-transparent PCI/PCI Bridge */
#define PCI_BRIDGE_IB 0xA /* InfiniBand/PCI host Bridge */
#define PCI_BRIDGE_AS 0xB /* AS/PCI host Bridge */
#define PCI_BRIDGE_OTHER 0x80 /* PCI/Other Bridge Device */
/*
* programming interface for Bridges class 0x6 (subclass 4) PCI-PCI bridge
*/
#define PCI_BRIDGE_PCI_IF_PCI2PCI 0x0 /* PCI-PCI bridge */
#define PCI_BRIDGE_PCI_IF_SUBDECODE 0x1 /* Subtractive Decode */
/* PCI/PCI bridge */
/*
* programming interface for Bridges class 0x6 (subclass 08) RACEway bridge
*/
#define PCI_BRIDGE_RACE_IF_TRANSPARENT 0x0 /* Transport mode */
#define PCI_BRIDGE_RACE_IF_ENDPOINT 0x1 /* Endpoint mode */
/*
* programming interface for Bridges class 0x6 (subclass 09)
* Semi-transparent PCI-to-PCI bridge
*/
#define PCI_BRIDGE_STPCI_IF_PRIMARY 0x40 /* primary PCI side bus */
/* facing system processor */
#define PCI_BRIDGE_STPCI_IF_SECONDARY 0x80 /* secondary PCI side bus */
/* facing system processor */
/*
* programming interface for Bridges class 0x6 (subclass 0B) AS bridge
*/
#define PCI_BRIDGE_AS_CUSTOM_INTFC 0x0 /* Custom interface */
#define PCI_BRIDGE_AS_PORTAL_INTFC 0x1 /* ASI-SIG Portal Interface */
/*
* PCI Sub-class codes - base class 0x7 (communication devices)
*/
#define PCI_COMM_GENERIC_XT 0x0 /* XT Compatible Serial Controller */
#define PCI_COMM_PARALLEL 0x1 /* Parallel Port Controller */
#define PCI_COMM_MSC 0x2 /* Multiport Serial Controller */
#define PCI_COMM_MODEM 0x3 /* Modem Controller */
#define PCI_COMM_GPIB 0x4 /* GPIB Controller */
#define PCI_COMM_SMARTCARD 0x5 /* Smart Card Controller */
#define PCI_COMM_OTHER 0x80 /* Other Communications Controller */
/*
* Programming interfaces for class 0x7 / subclass 0x0 (Serial)
*/
#define PCI_COMM_SERIAL_IF_GENERIC 0x0 /* Generic XT-compat serial */
#define PCI_COMM_SERIAL_IF_16450 0x1 /* 16450-compat serial ctrlr */
#define PCI_COMM_SERIAL_IF_16550 0x2 /* 16550-compat serial ctrlr */
#define PCI_COMM_SERIAL_IF_16650 0x3 /* 16650-compat serial ctrlr */
#define PCI_COMM_SERIAL_IF_16750 0x4 /* 16750-compat serial ctrlr */
#define PCI_COMM_SERIAL_IF_16850 0x5 /* 16850-compat serial ctrlr */
#define PCI_COMM_SERIAL_IF_16950 0x6 /* 16950-compat serial ctrlr */
/*
* Programming interfaces for class 0x7 / subclass 0x1 (Parallel)
*/
#define PCI_COMM_PARALLEL_IF_GENERIC 0x0 /* Generic Parallel port */
#define PCI_COMM_PARALLEL_IF_BIDIRECT 0x1 /* Bi-directional Parallel */
#define PCI_COMM_PARALLEL_IF_ECP 0x2 /* ECP 1.X Parallel port */
#define PCI_COMM_PARALLEL_IF_1284 0x3 /* IEEE 1284 Parallel port */
#define PCI_COMM_PARALLEL_IF_1284_TARG 0xFE /* IEEE 1284 target device */
/*
* Programming interfaces for class 0x7 / subclass 0x3 (Modem)
*/
#define PCI_COMM_MODEM_IF_GENERIC 0x0 /* Generic Modem */
#define PCI_COMM_MODEM_IF_HAYES_16450 0x1 /* Hayes 16450-compat Modem */
#define PCI_COMM_MODEM_IF_HAYES_16550 0x2 /* Hayes 16550-compat Modem */
#define PCI_COMM_MODEM_IF_HAYES_16650 0x3 /* Hayes 16650-compat Modem */
#define PCI_COMM_MODEM_IF_HAYES_16750 0x4 /* Hayes 16750-compat Modem */
/*
* PCI Sub-class codes - base class 0x8
*/
#define PCI_PERIPH_PIC 0x0 /* Generic PIC */
#define PCI_PERIPH_DMA 0x1 /* Generic DMA Controller */
#define PCI_PERIPH_TIMER 0x2 /* Generic System Timer Controller */
#define PCI_PERIPH_RTC 0x3 /* Generic RTC Controller */
#define PCI_PERIPH_HPC 0x4 /* Generic PCI Hot-Plug Controller */
#define PCI_PERIPH_SD_HC 0x5 /* SD Host Controller */
#define PCI_PERIPH_IOMMU 0x6 /* IOMMU */
#define PCI_PERIPH_OTHER 0x80 /* Other System Peripheral */
/*
* Programming interfaces for class 0x8 / subclass 0x0 (interrupt controller)
*/
#define PCI_PERIPH_PIC_IF_GENERIC 0x0 /* Generic 8259 APIC */
#define PCI_PERIPH_PIC_IF_ISA 0x1 /* ISA PIC */
#define PCI_PERIPH_PIC_IF_EISA 0x2 /* EISA PIC */
#define PCI_PERIPH_PIC_IF_IO_APIC 0x10 /* I/O APIC interrupt ctrlr */
#define PCI_PERIPH_PIC_IF_IOX_APIC 0x20 /* I/O(x) APIC intr ctrlr */
/*
* Programming interfaces for class 0x8 / subclass 0x1 (DMA controller)
*/
#define PCI_PERIPH_DMA_IF_GENERIC 0x0 /* Generic 8237 DMA ctrlr */
#define PCI_PERIPH_DMA_IF_ISA 0x1 /* ISA DMA ctrlr */
#define PCI_PERIPH_DMA_IF_EISA 0x2 /* EISA DMA ctrlr */
/*
* Programming interfaces for class 0x8 / subclass 0x2 (timer)
*/
#define PCI_PERIPH_TIMER_IF_GENERIC 0x0 /* Generic 8254 system timer */
#define PCI_PERIPH_TIMER_IF_ISA 0x1 /* ISA system timers */
#define PCI_PERIPH_TIMER_IF_EISA 0x2 /* EISA system timers (two) */
#define PCI_PERIPH_TIMER_IF_HPET 0x3 /* High Perf Event timer */
/*
* Programming interfaces for class 0x8 / subclass 0x3 (realtime clock)
*/
#define PCI_PERIPH_RTC_IF_GENERIC 0x0 /* Generic RTC controller */
#define PCI_PERIPH_RTC_IF_ISA 0x1 /* ISA RTC controller */
/*
* PCI Sub-class codes - base class 0x9
*/
#define PCI_INPUT_KEYBOARD 0x0 /* Keyboard Controller */
#define PCI_INPUT_DIGITIZ 0x1 /* Digitizer (Pen) */
#define PCI_INPUT_MOUSE 0x2 /* Mouse Controller */
#define PCI_INPUT_SCANNER 0x3 /* Scanner Controller */
#define PCI_INPUT_GAMEPORT 0x4 /* Gameport Controller */
#define PCI_INPUT_OTHER 0x80 /* Other Input Controller */
/*
* Programming interfaces for class 0x9 / subclass 0x4 (Gameport controller)
*/
#define PCI_INPUT_GAMEPORT_IF_GENERIC 0x00 /* Generic controller */
#define PCI_INPUT_GAMEPORT_IF_LEGACY 0x10 /* Legacy controller */
/*
* PCI Sub-class codes - base class 0xA
*/
#define PCI_DOCK_GENERIC 0x00 /* Generic Docking Station */
#define PCI_DOCK_OTHER 0x80 /* Other Type of Docking Station */
/*
* PCI Sub-class codes - base class 0xB
*/
#define PCI_PROCESSOR_386 0x0 /* 386 */
#define PCI_PROCESSOR_486 0x1 /* 486 */
#define PCI_PROCESSOR_PENT 0x2 /* Pentium */
#define PCI_PROCESSOR_ALPHA 0x10 /* Alpha */
#define PCI_PROCESSOR_POWERPC 0x20 /* PowerPC */
#define PCI_PROCESSOR_MIPS 0x30 /* MIPS */
#define PCI_PROCESSOR_COPROC 0x40 /* Co-processor */
#define PCI_PROCESSOR_OTHER 0x80 /* Other processors */
/*
* PCI Sub-class codes - base class 0xC (Serial Controllers)
*/
#define PCI_SERIAL_FIRE 0x0 /* FireWire (IEEE 1394) */
#define PCI_SERIAL_ACCESS 0x1 /* ACCESS.bus */
#define PCI_SERIAL_SSA 0x2 /* SSA */
#define PCI_SERIAL_USB 0x3 /* Universal Serial Bus */
#define PCI_SERIAL_FIBRE 0x4 /* Fibre Channel */
#define PCI_SERIAL_SMBUS 0x5 /* System Management Bus */
#define PCI_SERIAL_IB 0x6 /* InfiniBand */
#define PCI_SERIAL_IPMI 0x7 /* IPMI */
#define PCI_SERIAL_SERCOS 0x8 /* SERCOS Interface Std (IEC 61491) */
#define PCI_SERIAL_CANBUS 0x9 /* CANbus */
#define PCI_SERIAL_OTHER 0x80 /* Other Serial Bus Controllers */
/*
* Programming interfaces for class 0xC / subclass 0x0 (Firewire)
*/
#define PCI_SERIAL_FIRE_WIRE 0x00 /* IEEE 1394 (Firewire) */
#define PCI_SERIAL_FIRE_1394_HCI 0x10 /* 1394 OpenHCI Host Cntrlr */
/*
* Programming interfaces for class 0xC / subclass 0x3 (USB controller)
*/
#define PCI_SERIAL_USB_IF_UHCI 0x00 /* UHCI Compliant */
#define PCI_SERIAL_USB_IF_OHCI 0x10 /* OHCI Compliant */
#define PCI_SERIAL_USB_IF_EHCI 0x20 /* EHCI Compliant */
#define PCI_SERIAL_USB_IF_GENERIC 0x80 /* no specific HCD */
#define PCI_SERIAL_USB_IF_DEVICE 0xFE /* not a HCD */
/*
* Programming interfaces for class 0xC / subclass 0x7 (IPMI controller)
*/
#define PCI_SERIAL_IPMI_IF_SMIC 0x0 /* SMIC Interface */
#define PCI_SERIAL_IPMI_IF_KBD 0x1 /* Keyboard Ctrl Style Intfc */
#define PCI_SERIAL_IPMI_IF_BTI 0x2 /* Block Transfer Interface */
/*
* PCI Sub-class codes - base class 0xD (Wireless controllers)
*/
#define PCI_WIRELESS_IRDA 0x0 /* iRDA Compatible Controller */
#define PCI_WIRELESS_IR 0x1 /* Consumer IR Controller */
#define PCI_WIRELESS_RF 0x10 /* RF Controller */
#define PCI_WIRELESS_BLUETOOTH 0x11 /* Bluetooth Controller */
#define PCI_WIRELESS_BROADBAND 0x12 /* Broadband Controller */
#define PCI_WIRELESS_80211A 0x20 /* Ethernet 802.11a 5 GHz */
#define PCI_WIRELESS_80211B 0x21 /* Ethernet 802.11b 2.4 GHz */
#define PCI_WIRELESS_OTHER 0x80 /* Other Wireless Controllers */
/*
* Programming interfaces for class 0xD / subclass 0x1 (Consumer IR controller)
*/
#define PCI_WIRELESS_IR_CONSUMER 0x00 /* Consumer IR Controller */
#define PCI_WIRELESS_IR_UWB_RC 0x10 /* UWB Radio Controller */
/*
* PCI Sub-class codes - base class 0xE (Intelligent I/O controllers)
*/
#define PCI_INTIO_MSG_FIFO 0x0 /* Message FIFO at off 40h */
#define PCI_INTIO_I20 0x1 /* I20 Arch Spec 1.0 */
/*
* PCI Sub-class codes - base class 0xF (Satellite Communication controllers)
*/
#define PCI_SATELLITE_COMM_TV 0x01 /* TV */
#define PCI_SATELLITE_COMM_AUDIO 0x02 /* Audio */
#define PCI_SATELLITE_COMM_VOICE 0x03 /* Voice */
#define PCI_SATELLITE_COMM_DATA 0x04 /* DATA */
#define PCI_SATELLITE_COMM_OTHER 0x80 /* Other Satelite Comm Cntrlr */
/*
* PCI Sub-class codes - base class 0x10 (Encryption/Decryption controllers)
*/
#define PCI_CRYPT_NETWORK 0x00 /* Network and Computing */
#define PCI_CRYPT_ENTERTAINMENT 0x10 /* Entertainment en/decrypt */
#define PCI_CRYPT_OTHER 0x80 /* Other en/decryption ctrlrs */
/*
* PCI Sub-class codes - base class 0x11 (Signal Processing controllers)
*/
#define PCI_SIGNAL_DPIO 0x00 /* DPIO modules */
#define PCI_SIGNAL_PERF_COUNTERS 0x01 /* Performance counters */
#define PCI_SIGNAL_COMM_SYNC 0x10 /* Comm. synchronization plus */
/* time and freq test ctrlr */
#define PCI_SIGNAL_MANAGEMENT 0x20 /* Management card */
#define PCI_SIGNAL_OTHER 0x80 /* DSP/DAP controller */
/* PCI header decode */
#define PCI_HEADER_MULTI 0x80 /* multi-function device */
#define PCI_HEADER_ZERO 0x00 /* type zero PCI header */
#define PCI_HEADER_ONE 0x01 /* type one PCI header */
#define PCI_HEADER_TWO 0x02 /* type two PCI header */
#define PCI_HEADER_PPB PCI_HEADER_ONE /* type one PCI to PCI Bridge */
#define PCI_HEADER_CARDBUS PCI_HEADER_TWO /* type one PCI header */
#define PCI_HEADER_TYPE_M 0x7f /* type mask for header */
/*
* Base register bit definitions.
*/
#define PCI_BASE_SPACE_M 0x1 /* memory space indicator */
#define PCI_BASE_SPACE_IO 0x1 /* IO space */
#define PCI_BASE_SPACE_MEM 0x0 /* memory space */
#define PCI_BASE_TYPE_MEM 0x0 /* 32-bit memory address */
#define PCI_BASE_TYPE_LOW 0x2 /* less than 1Mb address */
#define PCI_BASE_TYPE_ALL 0x4 /* 64-bit memory address */
#define PCI_BASE_TYPE_RES 0x6 /* reserved */
#define PCI_BASE_TYPE_M 0x00000006 /* type indicator mask */
#define PCI_BASE_PREF_M 0x00000008 /* prefetch mask */
#define PCI_BASE_M_ADDR_M 0xfffffff0 /* memory address mask */
#define PCI_BASE_M_ADDR64_M 0xfffffffffffffff0ULL /* 64bit mem addr mask */
#define PCI_BASE_IO_ADDR_M 0xfffffffe /* I/O address mask */
#define PCI_BASE_ROM_ADDR_M 0xfffff800 /* ROM address mask */
#define PCI_BASE_ROM_ENABLE 0x00000001 /* ROM decoder enable */
/*
* Capabilities linked list entry offsets
*/
#define PCI_CAP_ID 0x0 /* capability identifier, 1 byte */
#define PCI_CAP_NEXT_PTR 0x1 /* next entry pointer, 1 byte */
#define PCI_CAP_ID_REGS_OFF 0x2 /* cap id register offset */
#define PCI_CAP_MAX_PTR 0x30 /* maximum number of cap pointers */
#define PCI_CAP_PTR_OFF 0x40 /* minimum cap pointer offset */
#define PCI_CAP_PTR_MASK 0xFC /* mask for capability pointer */
/*
* Capability identifier values
*/
#define PCI_CAP_ID_PM 0x1 /* power management entry */
#define PCI_CAP_ID_AGP 0x2 /* AGP supported */
#define PCI_CAP_ID_VPD 0x3 /* VPD supported */
#define PCI_CAP_ID_SLOT_ID 0x4 /* Slot Identification supported */
#define PCI_CAP_ID_MSI 0x5 /* MSI supported */
#define PCI_CAP_ID_cPCI_HS 0x6 /* CompactPCI Host Swap supported */
#define PCI_CAP_ID_PCIX 0x7 /* PCI-X supported */
#define PCI_CAP_ID_HT 0x8 /* HyperTransport supported */
#define PCI_CAP_ID_VS 0x9 /* Vendor Specific */
#define PCI_CAP_ID_DEBUG_PORT 0xA /* Debug Port supported */
#define PCI_CAP_ID_cPCI_CRC 0xB /* CompactPCI central resource ctrl */
#define PCI_CAP_ID_PCI_HOTPLUG 0xC /* PCI Hot Plug (SHPC) supported */
#define PCI_CAP_ID_P2P_SUBSYS 0xD /* PCI bridge Sub-system ID */
#define PCI_CAP_ID_AGP_8X 0xE /* AGP 8X supported */
#define PCI_CAP_ID_SECURE_DEV 0xF /* Secure Device supported */
#define PCI_CAP_ID_PCI_E 0x10 /* PCI Express supported */
#define PCI_CAP_ID_MSI_X 0x11 /* MSI-X supported */
#define PCI_CAP_ID_SATA 0x12 /* SATA Data/Index Config supported */
#define PCI_CAP_ID_FLR 0x13 /* Function Level Reset supported */
#define PCI_CAP_ID_EA 0x14 /* Enhanced Allocation */
#define PCI_CAP_ID_FPB 0x15 /* Flattening Portal Bridge */
/*
* Capability next entry pointer values
*/
#define PCI_CAP_NEXT_PTR_NULL 0x0 /* no more entries in the list */
/*
* PCI power management (PM) capability entry offsets
*/
#define PCI_PMCAP 0x2 /* PM capabilities, 2 bytes */
#define PCI_PMCSR 0x4 /* PM control/status reg, 2 bytes */
#define PCI_PMCSR_BSE 0x6 /* PCI-PCI bridge extensions, 1 byte */
#define PCI_PMDATA 0x7 /* PM data, 1 byte */
/*
* PM capabilities values - 2 bytes
*/
#define PCI_PMCAP_VER_1_0 0x1 /* PCI PM spec 1.0 */
#define PCI_PMCAP_VER_1_1 0x2 /* PCI PM spec 1.1 */
#define PCI_PMCAP_VER_MASK 0x7 /* version mask */
#define PCI_PMCAP_PME_CLOCK 0x8 /* needs PCI clock for PME */
#define PCI_PMCAP_DSI 0x20 /* needs device specific init */
#define PCI_PMCAP_AUX_CUR_SELF 0x0 /* 0 aux current - self powered */
#define PCI_PMCAP_AUX_CUR_55mA 0x40 /* 55 mA aux current */
#define PCI_PMCAP_AUX_CUR_100mA 0x80 /* 100 mA aux current */
#define PCI_PMCAP_AUX_CUR_160mA 0xc0 /* 160 mA aux current */
#define PCI_PMCAP_AUX_CUR_220mA 0x100 /* 220 mA aux current */
#define PCI_PMCAP_AUX_CUR_270mA 0x140 /* 270 mA aux current */
#define PCI_PMCAP_AUX_CUR_320mA 0x180 /* 320 mA aux current */
#define PCI_PMCAP_AUX_CUR_375mA 0x1c0 /* 375 mA aux current */
#define PCI_PMCAP_AUX_CUR_MASK 0x1c0 /* 3.3Vaux aux current needs */
#define PCI_PMCAP_D1 0x200 /* D1 state supported */
#define PCI_PMCAP_D2 0x400 /* D2 state supported */
#define PCI_PMCAP_D0_PME 0x800 /* PME from D0 */
#define PCI_PMCAP_D1_PME 0x1000 /* PME from D1 */
#define PCI_PMCAP_D2_PME 0x2000 /* PME from D2 */
#define PCI_PMCAP_D3HOT_PME 0x4000 /* PME from D3hot */
#define PCI_PMCAP_D3COLD_PME 0x8000 /* PME from D3cold */
#define PCI_PMCAP_PME_MASK 0xf800 /* PME support mask */
/*
* PM control/status values - 2 bytes
*/
#define PCI_PMCSR_D0 0x0 /* power state D0 */
#define PCI_PMCSR_D1 0x1 /* power state D1 */
#define PCI_PMCSR_D2 0x2 /* power state D2 */
#define PCI_PMCSR_D3HOT 0x3 /* power state D3hot */
#define PCI_PMCSR_STATE_MASK 0x3 /* power state mask */
#define PCI_PMCSR_PME_EN 0x100 /* enable PME assertion */
#define PCI_PMCSR_DSEL_D0_PWR_C 0x0 /* D0 power consumed */
#define PCI_PMCSR_DSEL_D1_PWR_C 0x200 /* D1 power consumed */
#define PCI_PMCSR_DSEL_D2_PWR_C 0x400 /* D2 power consumed */
#define PCI_PMCSR_DSEL_D3_PWR_C 0x600 /* D3 power consumed */
#define PCI_PMCSR_DSEL_D0_PWR_D 0x800 /* D0 power dissipated */
#define PCI_PMCSR_DSEL_D1_PWR_D 0xa00 /* D1 power dissipated */
#define PCI_PMCSR_DSEL_D2_PWR_D 0xc00 /* D2 power dissipated */
#define PCI_PMCSR_DSEL_D3_PWR_D 0xe00 /* D3 power dissipated */
#define PCI_PMCSR_DSEL_COM_C 0x1000 /* common power consumption */
#define PCI_PMCSR_DSEL_MASK 0x1e00 /* data select mask */
#define PCI_PMCSR_DSCL_UNKNOWN 0x0 /* data scale unknown */
#define PCI_PMCSR_DSCL_1_BY_10 0x2000 /* data scale 0.1x */
#define PCI_PMCSR_DSCL_1_BY_100 0x4000 /* data scale 0.01x */
#define PCI_PMCSR_DSCL_1_BY_1000 0x6000 /* data scale 0.001x */
#define PCI_PMCSR_DSCL_MASK 0x6000 /* data scale mask */
#define PCI_PMCSR_PME_STAT 0x8000 /* PME status */
/*
* PM PMCSR PCI to PCI bridge support extension values - 1 byte
*/
#define PCI_PMCSR_BSE_B2_B3 0x40 /* bridge D3hot -> secondary B2 */
#define PCI_PMCSR_BSE_BPCC_EN 0x80 /* bus power/clock control enabled */
/*
* PCI-X capability related definitions
*/
#define PCI_PCIX_COMMAND 0x2 /* Command register offset */
#define PCI_PCIX_STATUS 0x4 /* Status register offset */
#define PCI_PCIX_ECC_STATUS 0x8 /* ECC Status register offset */
#define PCI_PCIX_ECC_FST_AD 0xC /* ECC First address register offset */
#define PCI_PCIX_ECC_SEC_AD 0x10 /* ECC Second address register offset */
#define PCI_PCIX_ECC_ATTR 0x14 /* ECC Attribute register offset */
/*
* PCI-X bridge capability related definitions
*/
#define PCI_PCIX_SEC_STATUS 0x2 /* Secondary Status offset */
#define PCI_PCIX_SEC_STATUS_SCD 0x4 /* Split Completion Discarded */
#define PCI_PCIX_SEC_STATUS_USC 0x8 /* Unexpected Split Complete */
#define PCI_PCIX_SEC_STATUS_SCO 0x10 /* Split Completion Overrun */
#define PCI_PCIX_SEC_STATUS_SRD 0x20 /* Split Completion Delayed */
#define PCI_PCIX_SEC_STATUS_ERR_MASK 0x3C
#define PCI_PCIX_BDG_STATUS 0x4 /* Bridge Status offset */
#define PCI_PCIX_BDG_STATUS_USC 0x80000
#define PCI_PCIX_BDG_STATUS_SCO 0x100000
#define PCI_PCIX_BDG_STATUS_SRD 0x200000
#define PCI_PCIX_BDG_STATUS_ERR_MASK 0x380000
#define PCI_PCIX_UP_SPL_CTL 0x8 /* Upstream split ctrl reg offset */
#define PCI_PCIX_DOWN_SPL_CTL 0xC /* Downstream split ctrl reg offset */
#define PCI_PCIX_BDG_ECC_STATUS 0x10 /* ECC Status register offset */
#define PCI_PCIX_BDG_ECC_FST_AD 0x14 /* ECC First address register offset */
#define PCI_PCIX_BDG_ECC_SEC_AD 0x18 /* ECC Second address register offset */
#define PCI_PCIX_BDG_ECC_ATTR 0x1C /* ECC Attribute register offset */
/*
* PCIX capabilities values
*/
#define PCI_PCIX_VER_MASK 0x3000 /* Bits 12 and 13 */
#define PCI_PCIX_VER_0 0x0000 /* PCIX cap list item version 0 */
#define PCI_PCIX_VER_1 0x1000 /* PCIX cap list item version 1 */
#define PCI_PCIX_VER_2 0x2000 /* PCIX cap list item version 2 */
#define PCI_PCIX_SPL_DSCD 0x40000 /* Split Completion Discarded */
#define PCI_PCIX_UNEX_SPL 0x80000 /* Unexpected Split Completion */
#define PCI_PCIX_RX_SPL_MSG 0x20000000 /* Recieved Spl Comp Error Message */
#define PCI_PCIX_ECC_SEL 0x1 /* Secondary ECC register select */
#define PCI_PCIX_ECC_EP 0x2 /* Error Present on other side */
#define PCI_PCIX_ECC_S_CE 0x4 /* Addl Correctable ECC Error */
#define PCI_PCIX_ECC_S_UE 0x8 /* Addl Uncorrectable ECC Error */
#define PCI_PCIX_ECC_PHASE 0x70 /* ECC Error Phase */
#define PCI_PCIX_ECC_CORR 0x80 /* ECC Error Corrected */
#define PCI_PCIX_ECC_SYN 0xff00 /* ECC Error Syndrome */
#define PCI_PCIX_ECC_FST_CMD 0xf0000 /* ECC Error First Command */
#define PCI_PCIX_ECC_SEC_CMD 0xf00000 /* ECC Error Second Command */
#define PCI_PCIX_ECC_UP_ATTR 0xf000000 /* ECC Error Upper Attributes */
/*
* PCIX ECC Phase Values
*/
#define PCI_PCIX_ECC_PHASE_NOERR 0x0
#define PCI_PCIX_ECC_PHASE_FADDR 0x1
#define PCI_PCIX_ECC_PHASE_SADDR 0x2
#define PCI_PCIX_ECC_PHASE_ATTR 0x3
#define PCI_PCIX_ECC_PHASE_DATA32 0x4
#define PCI_PCIX_ECC_PHASE_DATA64 0x5
/*
* PCI-X Command Encoding
*/
#define PCI_PCIX_CMD_INTR 0x0
#define PCI_PCIX_CMD_SPEC 0x1
#define PCI_PCIX_CMD_IORD 0x2
#define PCI_PCIX_CMD_IOWR 0x3
#define PCI_PCIX_CMD_DEVID 0x5
#define PCI_PCIX_CMD_MEMRD_DW 0x6
#define PCI_PCIX_CMD_MEMWR 0x7
#define PCI_PCIX_CMD_MEMRD_BL 0x8
#define PCI_PCIX_CMD_MEMWR_BL 0x9
#define PCI_PCIX_CMD_CFRD 0xA
#define PCI_PCIX_CMD_CFWR 0xB
#define PCI_PCIX_CMD_SPL 0xC
#define PCI_PCIX_CMD_DADR 0xD
#define PCI_PCIX_CMD_MEMRDBL 0xE
#define PCI_PCIX_CMD_MEMWRBL 0xF
#if defined(_BIT_FIELDS_LTOH)
typedef struct pcix_attr {
uint32_t lbc :8,
rid :16,
tag :5,
ro :1,
ns :1,
r :1;
} pcix_attr_t;
#elif defined(_BIT_FIELDS_HTOL)
typedef struct pcix_attr {
uint32_t r :1,
ns :1,
ro :1,
tag :5,
rid :16,
lbc :8;
} pcix_attr_t;
#else
#error "bit field not defined"
#endif
#define PCI_PCIX_BSS_SPL_DSCD 0x4 /* Secondary split comp discarded */
#define PCI_PCIX_BSS_UNEX_SPL 0x8 /* Secondary unexpected split comp */
#define PCI_PCIX_BSS_SPL_OR 0x10 /* Secondary split comp overrun */
#define PCI_PCIX_BSS_SPL_DLY 0x20 /* Secondary split comp delayed */
/*
* PCI Hotplug capability entry offsets
*
* SHPC based PCI hotplug controller registers accessed via the DWORD
* select and DATA registers in PCI configuration space relative to the
* PCI HP capibility pointer.
*/
#define PCI_HP_DWORD_SELECT_OFF 0x2
#define PCI_HP_DWORD_DATA_OFF 0x4
#define PCI_HP_BASE_OFFSET_REG 0x00
#define PCI_HP_SLOTS_AVAIL_I_REG 0x01
#define PCI_HP_SLOTS_AVAIL_II_REG 0x02
#define PCI_HP_SLOT_CONFIGURATION_REG 0x03
#define PCI_HP_PROF_IF_SBCR_REG 0x04
#define PCI_HP_COMMAND_STATUS_REG 0x05
#define PCI_HP_IRQ_LOCATOR_REG 0x06
#define PCI_HP_SERR_LOCATOR_REG 0x07
#define PCI_HP_CTRL_SERR_INT_REG 0x08
#define PCI_HP_LOGICAL_SLOT_REGS 0x09
#define PCI_HP_VENDOR_SPECIFIC 0x28
/* Definitions used with the PCI_HP_SLOTS_AVAIL_I_REG register */
#define PCI_HP_AVAIL_33MHZ_CONV_SPEED_SHIFT 0
#define PCI_HP_AVAIL_66MHZ_PCIX_SPEED_SHIFT 8
#define PCI_HP_AVAIL_100MHZ_PCIX_SPEED_SHIFT 16
#define PCI_HP_AVAIL_133MHZ_PCIX_SPEED_SHIFT 24
#define PCI_HP_AVAIL_SPEED_MASK 0x1F
/* Definitions used with the PCI_HP_SLOTS_AVAIL_II_REG register */
#define PCI_HP_AVAIL_66MHZ_CONV_SPEED_SHIFT 0
/* Register bits used with the PCI_HP_PROF_IF_SBCR_REG register */
#define PCI_HP_SBCR_33MHZ_CONV_SPEED 0x0
#define PCI_HP_SBCR_66MHZ_CONV_SPEED 0x1
#define PCI_HP_SBCR_66MHZ_PCIX_SPEED 0x2
#define PCI_HP_SBCR_100MHZ_PCIX_SPEED 0x3
#define PCI_HP_SBCR_133MHZ_PCIX_SPEED 0x4
#define PCI_HP_SBCR_SPEED_MASK 0x7
/* Register bits used with the PCI_HP_COMMAND_STATUS_REG register */
#define PCI_HP_COMM_STS_ERR_INVALID_SPEED 0x80000
#define PCI_HP_COMM_STS_ERR_INVALID_COMMAND 0x40000
#define PCI_HP_COMM_STS_ERR_MRL_OPEN 0x20000
#define PCI_HP_COMM_STS_ERR_MASK 0xe0000
#define PCI_HP_COMM_STS_CTRL_BUSY 0x10000
#define PCI_HP_COMM_STS_SET_SPEED 0x40
/* Register bits used with the PCI_HP_CTRL_SERR_INT_REG register */
#define PCI_HP_SERR_INT_GLOBAL_IRQ_MASK 0x1
#define PCI_HP_SERR_INT_GLOBAL_SERR_MASK 0x2
#define PCI_HP_SERR_INT_CMD_COMPLETE_MASK 0x4
#define PCI_HP_SERR_INT_ARBITER_SERR_MASK 0x8
#define PCI_HP_SERR_INT_CMD_COMPLETE_IRQ 0x10000
#define PCI_HP_SERR_INT_ARBITER_IRQ 0x20000
#define PCI_HP_SERR_INT_MASK_ALL 0xf
/* Register bits used with the PCI_HP_LOGICAL_SLOT_REGS register */
#define PCI_HP_SLOT_POWER_ONLY 0x1
#define PCI_HP_SLOT_ENABLED 0x2
#define PCI_HP_SLOT_DISABLED 0x3
#define PCI_HP_SLOT_STATE_MASK 0x3
#define PCI_HP_SLOT_MRL_STATE_MASK 0x100
#define PCI_HP_SLOT_66MHZ_CONV_CAPABLE 0x200
#define PCI_HP_SLOT_CARD_EMPTY_MASK 0xc00
#define PCI_HP_SLOT_66MHZ_PCIX_CAPABLE 0x1000
#define PCI_HP_SLOT_100MHZ_PCIX_CAPABLE 0x2000
#define PCI_HP_SLOT_133MHZ_PCIX_CAPABLE 0x3000
#define PCI_HP_SLOT_PCIX_CAPABLE_MASK 0x3000
#define PCI_HP_SLOT_PCIX_CAPABLE_SHIFT 12
#define PCI_HP_SLOT_PRESENCE_DETECTED 0x10000
#define PCI_HP_SLOT_ISO_PWR_DETECTED 0x20000
#define PCI_HP_SLOT_ATTN_DETECTED 0x40000
#define PCI_HP_SLOT_MRL_DETECTED 0x80000
#define PCI_HP_SLOT_POWER_DETECTED 0x100000
#define PCI_HP_SLOT_PRESENCE_MASK 0x1000000
#define PCI_HP_SLOT_ISO_PWR_MASK 0x2000000
#define PCI_HP_SLOT_ATTN_MASK 0x4000000
#define PCI_HP_SLOT_MRL_MASK 0x8000000
#define PCI_HP_SLOT_POWER_MASK 0x10000000
#define PCI_HP_SLOT_MRL_SERR_MASK 0x20000000
#define PCI_HP_SLOT_POWER_SERR_MASK 0x40000000
#define PCI_HP_SLOT_MASK_ALL 0x5f000000
/* Register bits used with the PCI_HP_IRQ_LOCATOR_REG register */
#define PCI_HP_IRQ_CMD_COMPLETE 0x1
#define PCI_HP_IRQ_SLOT_N_PENDING 0x2
/* Register bits used with the PCI_HP_SERR_LOCATOR_REG register */
#define PCI_HP_IRQ_SERR_ARBITER_PENDING 0x1
#define PCI_HP_IRQ_SERR_SLOT_N_PENDING 0x2
/* Register bits used with the PCI_HP_SLOT_CONFIGURATION_REG register */
#define PCI_HP_SLOT_CONFIG_MRL_SENSOR 0x40000000
#define PCI_HP_SLOT_CONFIG_ATTN_BUTTON 0x80000000
#define PCI_HP_SLOT_CONFIG_PHY_SLOT_NUM_SHIFT 16
#define PCI_HP_SLOT_CONFIG_PHY_SLOT_NUM_MASK 0x3FF
/*
* PCI Message Signalled Interrupts (MSI) capability entry offsets for 32-bit
*/
#define PCI_MSI_CTRL 0x02 /* MSI control register, 2 bytes */
#define PCI_MSI_ADDR_OFFSET 0x04 /* MSI 32-bit msg address, 4 bytes */
#define PCI_MSI_32BIT_DATA 0x08 /* MSI 32-bit msg data, 2 bytes */
#define PCI_MSI_32BIT_EXTDATA 0x0A /* MSI 32-bit msg ext data, 2 bytes */
#define PCI_MSI_32BIT_MASK 0x0C /* MSI 32-bit mask bits, 4 bytes */
#define PCI_MSI_32BIT_PENDING 0x10 /* MSI 32-bit pending bits, 4 bytes */
/*
* PCI Message Signalled Interrupts (MSI) capability entry offsets for 64-bit
*/
#define PCI_MSI_64BIT_ADDR 0x08 /* MSI 64-bit upper address, 4 bytes */
#define PCI_MSI_64BIT_DATA 0x0C /* MSI 64-bit msg data, 2 bytes */
#define PCI_MSI_64BIT_EXTDATA 0x0E /* MSI 64-bit msg ext data, 2 bytes */
#define PCI_MSI_64BIT_MASKBITS 0x10 /* MSI 64-bit mask bits, 4 bytes */
#define PCI_MSI_64BIT_PENDING 0x14 /* MSI 64-bit pending bits, 4 bytes */
/*
* PCI Message Signalled Interrupts (MSI) capability masks and shifts
*/
#define PCI_MSI_ENABLE_BIT 0x0001 /* MSI enable mask in MSI ctrl reg */
#define PCI_MSI_MMC_MASK 0x000E /* MMC mask in MSI ctrl reg */
#define PCI_MSI_MMC_SHIFT 0x1 /* Shift for MMC bits */
#define PCI_MSI_MME_MASK 0x0070 /* MME mask in MSI ctrl reg */
#define PCI_MSI_MME_SHIFT 0x4 /* Shift for MME bits */
#define PCI_MSI_64BIT_MASK 0x0080 /* 64bit support mask in MSI ctrl reg */
#define PCI_MSI_PVM_MASK 0x0100 /* PVM support mask in MSI ctrl reg */
#define PCI_MSI_EMD_MASK 0x0200 /* EMD Capable Mask */
#define PCI_MSI_EMD_ENABLE 0x0400 /* EMD Enable bit */
/*
* PCI Extended Message Signalled Interrupts (MSI-X) capability entry offsets
*/
#define PCI_MSIX_CTRL 0x02 /* MSI-X control register, 2 bytes */
#define PCI_MSIX_TBL_OFFSET 0x04 /* MSI-X table offset, 4 bytes */
#define PCI_MSIX_TBL_BIR_MASK 0x0007 /* MSI-X table BIR mask */
#define PCI_MSIX_PBA_OFFSET 0x08 /* MSI-X pending bit array, 4 bytes */
#define PCI_MSIX_PBA_BIR_MASK 0x0007 /* MSI-X PBA BIR mask */
#define PCI_MSIX_TBL_SIZE_MASK 0x07FF /* table size mask in MSI-X ctrl reg */
#define PCI_MSIX_FUNCTION_MASK 0x4000 /* function mask in MSI-X ctrl reg */
#define PCI_MSIX_ENABLE_BIT 0x8000 /* MSI-X enable mask in MSI-X ctl reg */
#define PCI_MSIX_LOWER_ADDR_OFFSET 0 /* MSI-X lower addr offset */
#define PCI_MSIX_UPPER_ADDR_OFFSET 4 /* MSI-X upper addr offset */
#define PCI_MSIX_DATA_OFFSET 8 /* MSI-X data offset */
#define PCI_MSIX_VECTOR_CTRL_OFFSET 12 /* MSI-X vector ctrl offset */
#define PCI_MSIX_VECTOR_SIZE 16 /* MSI-X size of each vector */
/*
* PCI Message Signalled Interrupts: other interesting constants
*/
#define PCI_MSI_MAX_INTRS 32 /* maximum MSI interrupts supported */
#define PCI_MSIX_MAX_INTRS 2048 /* maximum MSI-X interrupts supported */
/*
* PCI Slot Id Capabilities, 2 bytes
*/
/* Byte 1: Expansion Slot Register (ESR), Byte 2: Chassis Number Register */
#define PCI_CAPSLOT_ESR_NSLOTS_MASK 0x1F /* Number of slots mask */
#define PCI_CAPSLOT_ESR_FIC 0x20 /* First In Chassis bit */
#define PCI_CAPSLOT_ESR_FIC_MASK 0x01 /* First In Chassis mask */
#define PCI_CAPSLOT_ESR_FIC_SHIFT 5 /* First In Chassis shift */
#define PCI_CAPSLOT_FIC(esr_reg) ((esr_reg) & PCI_CAPSLOT_ESR_FIC)
#define PCI_CAPSLOT_NSLOTS(esr_reg) ((esr_reg) & \
PCI_CAPSLOT_ESR_NSLOTS_MASK)
/*
* HyperTransport Capabilities; each HT cap uses the same PCI cap id of
* PCI_CAP_ID_HT. The header's upper 16-bits (command reg) contains an HT
* cap type reg at bits [15:11]. For Slave/Pri Interface and Host/Sec
* Interface types, only bits [15:13] are used.
*/
#define PCI_HTCAP_TYPE_MASK 0xF800
#define PCI_HTCAP_TYPE_SLHOST_MASK 0xE000 /* SLPRI and HOSTSEC types */
#define PCI_HTCAP_TYPE_SHIFT 11
#define PCI_HTCAP_SLPRI_ID 0x00
#define PCI_HTCAP_HOSTSEC_ID 0x04
#define PCI_HTCAP_SWITCH_ID 0x08
#define PCI_HTCAP_INTCONF_ID 0x10
#define PCI_HTCAP_REVID_ID 0x11
#define PCI_HTCAP_UNITID_CLUMP_ID 0x12
#define PCI_HTCAP_ECFG_ID 0x13
#define PCI_HTCAP_ADDRMAP_ID 0x14
#define PCI_HTCAP_MSIMAP_ID 0x15
#define PCI_HTCAP_DIRROUTE_ID 0x16
#define PCI_HTCAP_VCSET_ID 0x17
#define PCI_HTCAP_RETRYMODE_ID 0x18
#define PCI_HTCAP_X86ENC_ID 0x19
#define PCI_HTCAP_GEN3_ID 0x1A
#define PCI_HTCAP_FUNCEXT_ID 0x1B
#define PCI_HTCAP_PM_ID 0x1C
#define PCI_HTCAP_SLPRI_TYPE /* 0x0000 */ \
(PCI_HTCAP_SLPRI_ID << PCI_HTCAP_TYPE_SHIFT)
#define PCI_HTCAP_HOSTSEC_TYPE /* 0x2000 */ \
(PCI_HTCAP_HOSTSEC_ID << PCI_HTCAP_TYPE_SHIFT)
#define PCI_HTCAP_SWITCH_TYPE /* 0x4000 */ \
(PCI_HTCAP_SWITCH_ID << PCI_HTCAP_TYPE_SHIFT)
#define PCI_HTCAP_INTCONF_TYPE /* 0x8000 */ \
(PCI_HTCAP_INTCONF_ID << PCI_HTCAP_TYPE_SHIFT)
#define PCI_HTCAP_REVID_TYPE /* 0x8800 */ \
(PCI_HTCAP_REVID_ID << PCI_HTCAP_TYPE_SHIFT)
#define PCI_HTCAP_UNITID_CLUMP_TYPE /* 0x9000 */ \
(PCI_HTCAP_UNITID_CLUMP_ID << PCI_HTCAP_TYPE_SHIFT)
#define PCI_HTCAP_ECFG_TYPE /* 0x9800 */ \
(PCI_HTCAP_ECFG_ID << PCI_HTCAP_TYPE_SHIFT)
#define PCI_HTCAP_ADDRMAP_TYPE /* 0xA000 */ \
(PCI_HTCAP_ADDRMAP_ID << PCI_HTCAP_TYPE_SHIFT)
#define PCI_HTCAP_MSIMAP_TYPE /* 0xA800 */ \
(PCI_HTCAP_MSIMAP_ID << PCI_HTCAP_TYPE_SHIFT)
#define PCI_HTCAP_DIRROUTE_TYPE /* 0xB000 */ \
(PCI_HTCAP_DIRROUTE_ID << PCI_HTCAP_TYPE_SHIFT)
#define PCI_HTCAP_VCSET_TYPE /* 0xB800 */ \
(PCI_HTCAP_VCSET_ID << PCI_HTCAP_TYPE_SHIFT)
#define PCI_HTCAP_RETRYMODE_TYPE /* 0xC000 */ \
(PCI_HTCAP_RETRYMODE_ID << PCI_HTCAP_TYPE_SHIFT)
#define PCI_HTCAP_X86ENC_TYPE /* 0xC800 */ \
(PCI_HTCAP_X86ENC_ID << PCI_HTCAP_TYPE_SHIFT)
#define PCI_HTCAP_GEN3_TYPE /* 0xD000 */ \
(PCI_HTCAP_GEN3_ID << PCI_HTCAP_TYPE_SHIFT)
#define PCI_HTCAP_FUNCEXT_TYPE /* 0xD800 */ \
(PCI_HTCAP_FUNCEXT_ID << PCI_HTCAP_TYPE_SHIFT)
#define PCI_HTCAP_PM_TYPE /* 0xE000 */ \
(PCI_HTCAP_PM_ID << PCI_HTCAP_TYPE_SHIFT)
#define PCI_HTCAP_MSIMAP_ENABLE 0x0001
#define PCI_HTCAP_MSIMAP_ENABLE_MASK 0x0001
#define PCI_HTCAP_ADDRMAP_MAPTYPE_MASK 0x600
#define PCI_HTCAP_ADDRMAP_MAPTYPE_SHIFT 9
#define PCI_HTCAP_ADDRMAP_NUMMAP_MASK 0xF
#define PCI_HTCAP_ADDRMAP_40BIT_ID 0x0
#define PCI_HTCAP_ADDRMAP_64BIT_ID 0x1
#define PCI_HTCAP_FUNCEXT_LEN_MASK 0xFF
/*
* other interesting PCI constants
*/
#define PCI_BASE_NUM 6 /* num of base regs in configuration header */
#define PCI_BAR_SZ_32 4 /* size of 32 bit base addr reg in bytes */
#define PCI_BAR_SZ_64 8 /* size of 64 bit base addr reg in bytes */
#define PCI_BASE_SIZE 4 /* size of base reg in bytes */
#define PCI_CONF_HDR_SIZE 256 /* configuration header size */
#define PCI_MAX_BUS_NUM 256 /* Maximum PCI buses allowed */
#define PCI_MAX_DEVICES 32 /* Max PCI devices allowed */
#define PCI_MAX_FUNCTIONS 8 /* Max PCI functions allowed */
#define PCI_MAX_CHILDREN PCI_MAX_DEVICES * PCI_MAX_FUNCTIONS
#define PCI_CLK_33MHZ (33 * 1000 * 1000) /* 33MHz clock speed */
#define PCI_CLK_66MHZ (66 * 1000 * 1000) /* 66MHz clock speed */
#define PCI_CLK_133MHZ (133 * 1000 * 1000) /* 133MHz clock speed */
/*
* pci bus range definition
*/
typedef struct pci_bus_range {
uint32_t lo;
uint32_t hi;
} pci_bus_range_t;
/*
* The following typedef is used to represent an entry in the "ranges"
* property of a pci hostbridge device node.
*/
typedef struct pci_ranges {
uint32_t child_high;
uint32_t child_mid;
uint32_t child_low;
uint32_t parent_high;
uint32_t parent_low;
uint32_t size_high;
uint32_t size_low;
} pci_ranges_t;
/*
* The following typedef is used to represent an entry in the "ranges"
* property of a pci-pci bridge device node.
*/
typedef struct {
uint32_t child_high;
uint32_t child_mid;
uint32_t child_low;
uint32_t parent_high;
uint32_t parent_mid;
uint32_t parent_low;
uint32_t size_high;
uint32_t size_low;
} ppb_ranges_t;
/*
* This structure represents one entry of the 1275 "reg" property and
* "assigned-addresses" property for a PCI node. For the "reg" property, it
* may be one of an arbitrary length array for devices with multiple address
* windows. For the "assigned-addresses" property, it denotes an assigned
* physical address on the PCI bus. It may be one entry of the six entries
* for devices with multiple base registers.
*
* The physical address format is:
*
* Bit#: 33222222 22221111 11111100 00000000
* 10987654 32109876 54321098 76543210
*
* pci_phys_hi cell: npt000ss bbbbbbbb dddddfff rrrrrrrr
* pci_phys_mid cell: hhhhhhhh hhhhhhhh hhhhhhhh hhhhhhhh
* pci_phys_low cell: llllllll llllllll llllllll llllllll
*
* n is 0 if the address is relocatable, 1 otherwise
* p is 1 if the addressable region is "prefetchable", 0 otherwise
* t is 1 if the address is aliased (for non-relocatable I/O), below
* 1MB (for mem), or below 64 KB (for relocatable I/O).
* ss is the type code, denoting which address space
* bbbbbbbb is the 8-bit bus number
* ddddd is the 5-bit device number
* fff is the 3-bit function number
* rrrrrrrr is the 8-bit register number
* should be zero for non-relocatable, when ss is 01, or 10
* hh...hhh is the 32-bit unsigned number
* ll...lll is the 32-bit unsigned number
*
* The physical size format is:
*
* pci_size_hi cell: hhhhhhhh hhhhhhhh hhhhhhhh hhhhhhhh
* pci_size_low cell: llllllll llllllll llllllll llllllll
*
* hh...hhh is the 32-bit unsigned number
* ll...lll is the 32-bit unsigned number
*/
struct pci_phys_spec {
uint_t pci_phys_hi; /* child's address, hi word */
uint_t pci_phys_mid; /* child's address, middle word */
uint_t pci_phys_low; /* child's address, low word */
uint_t pci_size_hi; /* high word of size field */
uint_t pci_size_low; /* low word of size field */
};
typedef struct pci_phys_spec pci_regspec_t;
/*
* PCI masks for pci_phy_hi of PCI 1275 address cell.
*/
#define PCI_REG_REG_M 0xff /* register mask */
#define PCI_REG_FUNC_M 0x700 /* function mask */
#define PCI_REG_DEV_M 0xf800 /* device mask */
#define PCI_REG_BUS_M 0xff0000 /* bus number mask */
#define PCI_REG_ADDR_M 0x3000000 /* address space mask */
#define PCI_REG_ALIAS_M 0x20000000 /* aliased bit mask */
#define PCI_REG_PF_M 0x40000000 /* prefetch bit mask */
#define PCI_REG_REL_M 0x80000000 /* relocation bit mask */
#define PCI_REG_BDFR_M 0xffffff /* bus, dev, func, reg mask */
#define PCI_REG_EXTREG_M 0xF0000000 /* extended config bits mask */
#define PCI_REG_FUNC_SHIFT 8 /* Offset of function bits */
#define PCI_REG_DEV_SHIFT 11 /* Offset of device bits */
#define PCI_REG_BUS_SHIFT 16 /* Offset of bus bits */
#define PCI_REG_ADDR_SHIFT 24 /* Offset of address bits */
#define PCI_REG_EXTREG_SHIFT 28 /* Offset of ext. config bits */
#define PCI_REG_REG_G(x) ((x) & PCI_REG_REG_M)
#define PCI_REG_FUNC_G(x) (((x) & PCI_REG_FUNC_M) >> PCI_REG_FUNC_SHIFT)
#define PCI_REG_DEV_G(x) (((x) & PCI_REG_DEV_M) >> PCI_REG_DEV_SHIFT)
#define PCI_REG_BUS_G(x) (((x) & PCI_REG_BUS_M) >> PCI_REG_BUS_SHIFT)
#define PCI_REG_ADDR_G(x) (((x) & PCI_REG_ADDR_M) >> PCI_REG_ADDR_SHIFT)
#define PCI_REG_BDFR_G(x) ((x) & PCI_REG_BDFR_M)
/*
* PCI bit encodings of pci_phys_hi of PCI 1275 address cell.
*/
#define PCI_ADDR_MASK PCI_REG_ADDR_M
#define PCI_ADDR_CONFIG 0x00000000 /* configuration address */
#define PCI_ADDR_IO 0x01000000 /* I/O address */
#define PCI_ADDR_MEM32 0x02000000 /* 32-bit memory address */
#define PCI_ADDR_MEM64 0x03000000 /* 64-bit memory address */
#define PCI_ALIAS_B PCI_REG_ALIAS_M /* aliased bit */
#define PCI_PREFETCH_B PCI_REG_PF_M /* prefetch bit */
#define PCI_RELOCAT_B PCI_REG_REL_M /* non-relocatable bit */
#define PCI_CONF_ADDR_MASK 0x00ffffff /* mask for config address */
#define PCI_HARDDEC_8514 2 /* number of reg entries for 8514 hard-decode */
#define PCI_HARDDEC_VGA 3 /* number of reg entries for VGA hard-decode */
#define PCI_HARDDEC_IDE 4 /* number of reg entries for IDE hard-decode */
#define PCI_HARDDEC_IDE_PRI 2 /* number of reg entries for IDE primary */
#define PCI_HARDDEC_IDE_SEC 2 /* number of reg entries for IDE secondary */
/*
* PCI Expansion ROM Header Format
*/
#define PCI_ROM_SIGNATURE 0x0 /* ROM Signature 0xaa55 */
#define PCI_ROM_ARCH_UNIQUE_START 0x2 /* Start of processor unique */
#define PCI_ROM_PCI_DATA_STRUCT_PTR 0x18 /* Ptr to PCI Data Structure */
/*
* PCI Data Structure
*
* The PCI Data Structure is located within the first 64KB
* of the ROM image and must be DWORD aligned.
*/
#define PCI_PDS_SIGNATURE 0x0 /* Signature, the string 'PCIR' */
#define PCI_PDS_VENDOR_ID 0x4 /* Vendor Identification */
#define PCI_PDS_DEVICE_ID 0x6 /* Device Identification */
#define PCI_PDS_VPD_PTR 0x8 /* Pointer to Vital Product Data */
#define PCI_PDS_PDS_LENGTH 0xa /* PCI Data Structure Length */
#define PCI_PDS_PDS_REVISION 0xc /* PCI Data Structure Revision */
#define PCI_PDS_CLASS_CODE 0xd /* Class Code */
#define PCI_PDS_IMAGE_LENGTH 0x10 /* Image Length in 512 byte units */
#define PCI_PDS_CODE_REVISON 0x12 /* Revision Level of Code/Data */
#define PCI_PDS_CODE_TYPE 0x14 /* Code Type */
#define PCI_PDS_INDICATOR 0x15 /* Indicates if image is last in ROM */
#define PCI_PDS_CODE_TYPE_PCAT 0x0 /* Intel x86/PC-AT Type */
#define PCI_PDS_CODE_TYPE_OPEN_FW 0x1 /* Open Firmware */
/*
* we recognize the non transparent bridge child nodes with the
* following property. This is specific to an implementation only.
* This property is specific to AP nodes only.
*/
#define PCI_DEV_CONF_MAP_PROP "pci-parent-indirect"
/*
* If a bridge device provides its own config space access services,
* and supports a hotplug/hotswap bus below at any level, then
* the following property must be defined for the node either by
* the driver or the OBP.
*/
#define PCI_BUS_CONF_MAP_PROP "pci-conf-indirect"
/*
* PCI returns all 1s for an invalid read.
*/
#define PCI_EINVAL8 0xff
#define PCI_EINVAL16 0xffff
#define PCI_EINVAL32 0xffffffff
#ifdef __cplusplus
}
#endif
#endif /* _SYS_PCI_H */
|