Subversion Repositories Kolibri OS

Rev

Rev 1357 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1356 diamond 1
;***************************************************************
132 diamond 2
; project name:    PCI Device Enumeration
475 Ghost 3
; target platform: KolibriOS
1351 art_zh 4
; compiler:        flat assembler 1.68
5
; version:         2.2
6
; last update:     December 2007
475 Ghost 7
; maintained by:   Jason Delozier (cordata51@hotmail.com)
8
;                  Sergey Kuzmin (kuzmin_serg@list.ru)
9
;                  Mihailov Ilia (ghost.nsk@gmail.com)
1351 art_zh 10
;                  Artem Jerdev  (art_zh@yahoo.com)
205 heavyiron 11
; project site:    http://www.coolthemes.narod.ru/pcidev.html
132 diamond 12
;***************************************************************
13
;Summary: This program will attempt to scan the PCI Bus
14
;        and display basic information about each device
15
;        connected to the PCI Bus.
16
;***************************************************************
17
;HISTORY:
18
;keep dates in european format (dd/mm/yyyy), please
19
; '!' means big changes
205 heavyiron 20
;
21
;to-do:
475 Ghost 22
; more vendors
205 heavyiron 23
; vendor's website
24
; Subsystem id and Subsystem vendor id detection
25
 
26
; Full device detection (like "ATI Radeon 9200") will increase app
27
; size a lot and probably it is function of particular drivers
132 diamond 28
;----------------------------------------------------------------
1351 art_zh 29
;2.2: PCIDEV   31/12/2009
30
;Author:    Artem Jerdev 
31
;Features:
32
;           fixed
33
;                 * English in some comments ;)
34
;           added
35
;                 * ! user-accessible PCI memory channels detection
36
;                 * ! ASCII-dump as PCI memory access demonstration
37
;           optimization
38
;                 * (yet needed)
39
;----------------------------------------------------------------
475 Ghost 40
;2.1: PCIDEV   ??/04/2007
41
;Author:    Mihailov Ilia aka Ghost 
42
;Features:
43
;           fixed
1351 art_zh 44
;                 * Some little bugs
475 Ghost 45
;                 * Source code formating
46
;                 * PCI version normalized 0210 -> 2.10
47
;           added
48
;                 * + 13 vendor (total now 1000!)
49
;                 * + 3 class type
50
;                 * Fast call source ready
51
;                 * Device IRQ detection
52
;           optimized
53
;                 * ! size optimized (61025 -> 32501 see added)
54
;                 * easy to add new vendor & class names
55
;----------------------------------------------------------------
205 heavyiron 56
;2.0: PCIDEV   30/08/2006
57
;(it differs a lot from the version 1.0, which was introduced 19 months ago)
58
;Author:    Marat Zakiyanov aka Mario79 
59
;           Sergey Kuzmin aka Wildwest 
60
;Features:
61
;           added
62
;                 * Detection of Interface by Mario79
63
;                 * 122 vendor id's by Wildwest
64
;                 * Description is based on Class, SubClass and Interface now (PCI 3.0) by Wildwest
65
;----------------------------------------------------------------
132 diamond 66
;1.31: PCIDEV   13/05/2006
67
;Author:    Jason Delozier 
68
;Features:
69
;           fixed
70
;                 * ! bug in Company Name look up code that would cause Unknown Name errors.
71
;                 * ! possible bugs, many instructions missing byte, word, dword prefixes
72
;                 * ! possible bug which could have occured after removing  "PREVIOUSVERSIONLIST"
73
;                     entry in loop up code and not fixing jump parameters.
74
;           added
75
;                 *  comments to various parts of the code
76
;           optimized
77
;                 * various parts of the source, too many to remember and mention.
78
;                 * changed entries for Subclasses in vendors.inc to Byte format, saves a little space.
79
;----------------------------------------------------------------
80
;1.30: PCIDEV   11/05/2006
81
;Author:    Sergey Kuzmin aka Wildwest 
82
;Features:
83
;           added
84
;                * 3 new vendor id's (ESS from Madis Kalme and 2 id's
85
;                  forgotten from 1.15 release: Broadcom -SiByte and Chaintech Comp.)
205 heavyiron 86
;           changed
87
;                * I don't know why other devs (Jason or Victor) changed window style
132 diamond 88
;                  to old ugly one, so I changed it back to skinned type 3.
89
;                * the same goes to the use of macroc.inc - it is enabled again.
90
;           deleted
91
;                * there is no more label "PREVIOUSVERSIONLIST" - id's moved to the
92
;                  appropriate parts of global list.
93
;----------------------------------------------------------------
94
;1.29: PCIDEV   30/04/2006
95
;Author:    Jason Delozier 
96
;Features:
97
;           fixed
98
;                 * ! bug that would not allow devices with device
99
;                   numbers > 16 to be displayed.
100
;           added
101
;                 * ! another heading called "FNC" (function) which allows
102
;                   the multipurpose Device/Function varible to be split and
103
;                   displayed to the user properly.
104
;                 * horizontal bars to display for easier reading.
105
;           optimized
106
;                 * vendor/description search routines for speed and space.
107
;----------------------------------------------------------------
108
;1.25: PCIDEV   02/10/2005
109
;Author:    Sergey Kuzmin aka Wildwest 
110
;Features:
111
;            changed
205 heavyiron 112
;                  * ! Description is based on Class and SubClass
132 diamond 113
;                     now (PCI 3.0). The Names of Classes and SubClasses
114
;                     are in the end of Vendors.inc
115
;            deleted
116
;                  * label "Descriptions" (names of Classes)
117
;
118
;----------------------------------------------------------------
119
;1.20: PCIDEV   16/08/2005
120
;Author:    Victor Alberto Gil Hanla a.k.a. vhanla 
121
;Features:
122
;           added
123
;                  * ! many vendor lists (865)
124
;           deleted
125
;                  * previous version's list
126
;           changed
127
;                  * previous Company Name searching and printing
128
;----------------------------------------------------------------
129
;1.15: PCIDEV   03/06/2005
130
;Author:    Sergey Kuzmin aka Wildwest 
131
;Features:
132
;           added
475 Ghost 133
;                 * quantity of devices,
134
;                 * ! detection of Company Name based on Vendor ID,
135
;                 * database of VenID (35 ID's),
136
;                 * macros.inc for smaller size,
132 diamond 137
;           changed
475 Ghost 138
;                 * interface+(skinned window),
139
;                 * VenID before DevID in 'table'(was DevID before VenID)
132 diamond 140
;----------------------------------------------------------------
141
;1.0: PCIDEV    30/01/2005
142
;Author:    Jason Delozier
143
;Features:
144
;          able to
145
;                 * detect PCI version,
146
;                 * quantity of PCI buses,
147
;                 * Vendor&Device ID for appropriate Device on Bus;
148
;                 * detect Revision, Class and Subclass of Device,
149
;                 * and make Description based on Class
150
;-------------------------------------------------------------
1351 art_zh 151
;include '..\..\macros.inc'
152
include 'macros.inc'
153
 
475 Ghost 154
MEOS_APP_START
155
CODE
156
	call draw_window
132 diamond 157
 
475 Ghost 158
still:	mcall	10			; wait here for event
159
	dec	eax			; redraw request ?
160
	jz	red
161
	dec	eax			; key in buffer ?
162
	jz	key
163
	dec	eax			; button in buffer ?
164
	jz	button
165
	jmp	still
132 diamond 166
 
475 Ghost 167
red:					; redraw
168
	mcall	9, Proc_Info, -1	; window redraw requested so get new window coordinates and size
485 heavyiron 169
	mov	eax, [Proc_Info.box.left]; store the window coordinates into the Form Structure
475 Ghost 170
	mov	[Form + 2], ax		; x start position
485 heavyiron 171
	mov	eax, [Proc_Info.box.top];
475 Ghost 172
	mov	[Form + 6], ax		; ystart position
485 heavyiron 173
	mov	eax, [Proc_Info.box.width]	;
475 Ghost 174
	mov	[Form], ax		; window width
485 heavyiron 175
	mov	eax, [Proc_Info.box.height]	;
475 Ghost 176
	mov	[Form + 4] ,ax		; window height
177
	call	draw_window		; go redraw window now
178
	jmp	still
132 diamond 179
 
475 Ghost 180
key:					; key
181
	mcall	2			; just read it and ignore
182
	jmp	still
1351 art_zh 183
button: 				; button
475 Ghost 184
	mcall	17			; get id
185
	cmp	ah, 1			; button id = 1 ?
186
	jne	still
187
	mcall	-1			; close this program
132 diamond 188
 
189
draw_window:
475 Ghost 190
	mov	byte [total], 0
191
	mcall	12, 1			; start of draw
192
	; DRAW WINDOW
193
	mcall	0, dword [Form], dword [Form + 4], 0x13ffffff, 0x805080d0, title
194
	; Insert horizontal bars  in list area
1351 art_zh 195
	mov	eax, 13 		; draw bar system function
196
	mov	ebx, 18 		; set Xstart position of bar
197
	shl	ebx, 16 		;
198
	mov	bx, word [Form] ; get width of window
475 Ghost 199
	sub	bx, 32			; bar is 32 pixels shorter then window width
200
	mov	ecx, 119 * 65536 + 10	; set Ystart(109) and Height(10) of bar   109
201
	mov	edx, 0xC0C0C0		; set color of bar
202
again:	;begin draw bar loop
203
	mcall				; draw bar to window area
1351 art_zh 204
	shr	ecx, 16 		; move the Ystart position to working area
205
	add	ecx, 34 		; add 34 pixels to Y Start (moves bar down)
475 Ghost 206
	cmp	cx, word [Form + 4]	; is the Ystart position outside of window area
207
	jae	nomo			; if so stop drawing bars
1351 art_zh 208
	sub	ecx, 14 		; if not, we only need 20 pixels between bar tops
209
	shl	ecx, 16 		; set that values as Ystart
210
	add	ecx, 10 		; Bar Height is always 10 pixels
475 Ghost 211
	jmp	again			; draw another bar
212
nomo:					;done drawing bars here
213
	; start PCI stuff
214
	call	Get_PCI_Info		; get pci version and last bus, scan for and draw each pci device
132 diamond 215
 
475 Ghost 216
	; Window inteface
217
	mov	cx, [PCI_Version]
218
	add	ch, '0'
1351 art_zh 219
	mov	[PCIWin + 85], ch	; 0xBADCODE but it works !
475 Ghost 220
	mov	ch, cl
221
	shr	cl, 4
222
	and	ch, 0x0f
223
	add	cx, '00'
224
	mov	[PCIWin + 87], cx
1351 art_zh 225
	mov	cl, [PCI_LastBus]	; will only work if [PCI_LastBus] < 10
475 Ghost 226
	add	cl, '0'
1351 art_zh 227
	mov	[PCIWin + 106], cl
228
 
475 Ghost 229
	mov	edx, PCIWin
230
	mov	ebx, 20 * 65536 + 25	; x start, ystart of text
231
	mov	ecx, 0x224466		; color of text
232
	mov	eax, 4
233
@@:	movzx	esi, byte[edx]
234
	inc	edx
235
	mcall
236
	add	ebx, 10
237
	add	edx, esi
238
	cmp	byte[edx], -1
239
	jne	@b
240
	; Quantity of devices...
241
	movzx	ecx, byte [total]	; number to draw
242
	mcall	47, 0x00020000,,150 * 65536 + 65, 0x224466
132 diamond 243
 
1351 art_zh 244
	call	Try_MMIO
475 Ghost 245
	mcall	12, 2			; end of draw
246
	ret
132 diamond 247
 
475 Ghost 248
;------------------------------------------------------------------
205 heavyiron 249
;* Gets the PCI Version and Last Bus
132 diamond 250
Get_PCI_Info:
475 Ghost 251
	mcall	62, 0
252
	mov	word [PCI_Version], ax
253
	mcall	62, 1
254
	mov	byte [PCI_LastBus], al
255
	;----------------------------------------------------------
256
	;* Get all devices on PCI Bus
257
	cmp	al, 0xff		; 0xFF means no pci bus found
258
	jne	Pci_Exists		;
259
	ret				; if no bus then leave
132 diamond 260
Pci_Exists:
1351 art_zh 261
	mov	byte [V_Bus], 0 	; reset varibles
262
	mov	byte [V_Dev], 0 	;
475 Ghost 263
	mov	edx,  20 * 65536 + 110	; set start write position
132 diamond 264
Start_Enum:
475 Ghost 265
	mov	bl, 6			; get a dword
266
	mov	bh, byte [V_Bus]	; bus of pci device
267
	mov	ch, byte [V_Dev]	; device number/function
268
	mov	cl, 0			; offset to device/vendor id
269
	mcall	62			; get ID's
132 diamond 270
 
475 Ghost 271
	cmp	ax, 0			; Vendor ID should not be 0 or 0xFFFF
1351 art_zh 272
	je	nextDev 		; check next device if nothing exists here
475 Ghost 273
	cmp	ax, 0xffff		;
1351 art_zh 274
	je	nextDev 		;
132 diamond 275
 
475 Ghost 276
	mov	word [PCI_Vendor], ax	; There is a device here, save the ID's
1351 art_zh 277
	shr	eax, 16 		;
475 Ghost 278
	mov	word [PCI_Device], ax	;
279
	mov	bl, 4			; Read config byte
280
	mov	bh, byte [V_Bus]	; Bus #
281
	mov	ch, byte [V_Dev]	; Device # on bus
282
	mov	cl, 0x08		; Register to read (Get Revision)
283
	mcall	62			; Read it
284
	mov	byte [PCI_Rev], al	; Save it
285
	mov	cl, 0x0b		; Register to read (Get class)
286
	mcall	62			; Read it
1351 art_zh 287
 
475 Ghost 288
	mov	byte [PCI_Class], al	; Save it
289
	mov	cl, 0x0a		; Register to read (Get Subclass)
290
	mcall	62			; Read it
291
	mov	byte [PCI_SubClass], al; Save it
1351 art_zh 292
; by Mario79 august 2006
475 Ghost 293
	mov	cl, 0x09		; Register to read (Get Interface)
294
	mcall	62			; Read it
295
	mov  [PCI_Interface], al	; Save it
205 heavyiron 296
;
1351 art_zh 297
; by Ghost april 2007
475 Ghost 298
	mov	cl, 0x3c		; Register to read (Get IRQ)
299
@@:	mcall	62			; Read it
300
	mov	[PCI_IRQ], al		; Save it
301
;
302
	inc	byte [total]		; one more device found
303
	call	Print_New_Device	; print device info to screen
132 diamond 304
nextDev:
475 Ghost 305
	inc	byte [V_Dev]		; next device on this bus
306
	jnz	Start_Enum		; jump until we reach zero
307
	;(used to be JNO which caused bug!!! 30-4-2006, JMD)
1351 art_zh 308
	mov	byte [V_Dev], 0 	; reset device number
475 Ghost 309
	inc	byte [V_Bus]		; next bus
310
	mov	al, byte [PCI_LastBus]	; get last bus
311
	cmp	byte [V_Bus], al	; was it last bus
312
	jbe	Start_Enum		; if not jump to keep searching
313
	ret
132 diamond 314
 
475 Ghost 315
;------------------------------------------------------------------
132 diamond 316
;* Print device info to screen
317
Print_New_Device:
1351 art_zh 318
	xor esi, esi	    ; default text color
319
; by art_zh December 2009
320
	mov ch, byte [V_Bus]
321
	mov cl, byte [V_Dev]
322
	mcall	62, 11		; detect uMMIO
323
	cmp eax, -2
324
	je no_ummio_here
325
	mov esi, 0x990033   ; highlighted text color
326
	mov bh, byte [V_Bus]
327
	mov bl, byte [V_Dev]
328
	mov byte [MMIO_Bus], bh
329
	mov byte [MMIO_Dev], bl
330
	add bh,'0'
331
	mov [PCIWin + 129], bh	; uMMIO bus
332
	mov al, bl
333
	shr al, 1
334
	shr al, 1
335
	shr al, 1
336
	add al,'0'
337
	mov [PCIWin + 131], al	; uMMIO device
338
	and bl, 7
339
	add bl, '0'
340
	mov [PCIWin + 133], bl	; uMMIO function
341
 
342
no_ummio_here:
475 Ghost 343
	movzx	ecx,word [PCI_Vendor]	; Pointer to number to be written
344
	mcall	47, 0x00040100		; Write Vendor ID
345
	and	edx, 0xFFFF		;*****************************************
1351 art_zh 346
	or	edx, 54 * 65536 ; X start becomes 54
475 Ghost 347
	movzx	ecx, word [PCI_Device]	; get Vendor ID
348
	mcall				; Draw Vendor ID to Window
349
	and	edx, 0xFFFF		;*****************************************
1351 art_zh 350
	or	edx, 98 * 65536 ; X start becomes 98
475 Ghost 351
	movzx	ecx, byte [V_Bus]	; get bus number
352
	mcall	,0x00020100		; draw bus number to screen
353
	and	edx, 0xFFFF		;*****************************************
354
	or	edx, 128 * 65536	; X start becomes 128
355
	movzx	ecx, byte [V_Dev]	; get device number
356
	shr	ecx, 3			; device number is bits 3-7
357
	mcall				; Draw device Number To Window
1351 art_zh 358
 
475 Ghost 359
	and	edx, 0xFFFF		;*****************************************
360
	or	edx, 155 * 65536	; X start becomes 155
361
	movzx	ecx, byte [V_Dev]	; get Function number
362
	and	ecx, 7			; function is first 3 bits
363
	mcall				; Draw Function Number To Window
364
	and	edx, 0xFFFF		;*****************************************
365
	or	edx, 179 * 65536	; X start becomes 179
366
	movzx	ecx, byte [PCI_Rev]	; get revision number
367
	mcall				; Draw Revision to screen
368
	and	edx, 0xFFFF		;*****************************************
369
	or	edx, 215*65536		; X start becomes 215
370
	movzx	ecx, byte [PCI_Class]	; get PCI_Class
371
	mcall				; Draw Class to screen
372
	and	edx, 0xFFFF		;*****************************************
373
	or	edx, 250*65536		; X start becomes 250
374
	movzx	ecx, byte [PCI_SubClass]; get sub class
375
	mcall				; Draw Sub Class to screen
205 heavyiron 376
; from Mario79 august 2006
475 Ghost 377
	and	edx, 0xFFFF		;*****************************************
378
	or	edx, 280 * 65536	; X start becomes 280
379
	movzx	ecx, [PCI_Interface]	; get Interface
380
	mcall
205 heavyiron 381
;
1351 art_zh 382
; from Ghost april 2007                 ;*****************************************
475 Ghost 383
	movzx	ecx, [PCI_IRQ]		; get Interface
384
	cmp	cl, 0x0f		; IRQ between 0..15
385
	ja	@f
386
	and	edx, 0xFFFF
387
	or	edx, 310 * 65536	; X start becomes 310
388
	mcall
389
@@:
390
;
391
	;Write Names
1351 art_zh 392
	movzx	ebx, dx 	; Set y position
475 Ghost 393
	or	ebx, 340 * 65536	; set Xposition to 340
132 diamond 394
 
475 Ghost 395
;------------------------------------------------------------------
396
; Prints the Vendor's Name based on Vendor ID
132 diamond 397
;
475 Ghost 398
; Modified on ??-04-2007 by Ghost for size
399
;------------------------------------------------------------------
400
	mov	edx, VendorsTab
401
	mov	cx, word[PCI_Vendor]
1351 art_zh 402
 
475 Ghost 403
.fn:	mov	ax, [edx]
404
	add	edx, 6
405
	test	ax, ax
406
	jz	.find
407
	cmp	ax, cx
408
	jne	.fn
409
.find:	mov	edx, [edx - 4]
410
	mcall	4,, 0x80000000		; lets print the vendor Name
132 diamond 411
 
412
;------------------------------------------------------------------
475 Ghost 413
; Get description based on Class/Subclass
414
;
415
; Modified on ??-04-2007 by Ghost for size
416
;------------------------------------------------------------------
417
	mov	eax, dword [PCI_Class]
418
	and	eax, 0xffffff
419
	xor	edx, edx
420
	xor	esi, esi
421
.fnc:	inc	esi
422
	mov	ecx, [Classes + esi * 8 - 8]
423
	cmp	cx, 0xffff
424
	je	.endfc
425
	cmp	cx, ax
426
	jne	.fnc
427
	test	ecx, 0xff000000
428
	jz	@f
429
	mov	edx, [Classes + esi * 8 - 4]
430
	jmp	.fnc
431
@@:	cmp	eax, ecx
432
	jne	.fnc
433
	xor	edx, edx
1351 art_zh 434
.endfc: test	edx, edx
475 Ghost 435
	jnz	@f
436
	mov	edx, [Classes + esi * 8 - 4]
1351 art_zh 437
@@:
438
	and	ebx, 0x0000FFFF 	; clear X position
475 Ghost 439
	or	ebx, 0x24E0000		; set X position to 590 pixels
440
	mcall	4,, 0x80000000,, 32	; draw the text
1351 art_zh 441
	movzx	edx, bx 	; get y coordinate
442
	add	edx, 0x0014000A 	; add 10 to y coordinate and set x coordinate to 20
443
	mov	[gr_pos], edx
475 Ghost 444
	ret
1351 art_zh 445
;------------------------------------------------------------------
446
; Get the user-MMIO related info
447
;
448
; Added on ??-12-2009 by art_zh
449
;------------------------------------------------------------------
450
Try_MMIO:
451
	xor	ebx, ebx
452
	mov	edx, ebx
1358 art_zh 453
	mov	bh, [MMIO_BAR]
1351 art_zh 454
	or	bx, 12			; function 12
455
	mov	ecx, 4096		; =1 page to map
456
	mcall	62
1358 art_zh 457
	mov	[MMIO_Map], eax 	; store MMIO lin.addr.
1351 art_zh 458
	mov	ecx, 0x80990022 	; print color : red
459
	add	bh, '0'
460
	cmp	eax, -3
461
	jne	@f
462
	mov	[bar_um+3], bh
463
	mov	ebx, [gr_pos]
464
	mov	edx, bar_um
465
	mcall	4
466
	jmp	mmio_next_bar
467
@@:
468
	cmp	eax, -4
469
	jne	@f
470
	mov	[bar_io+3], bh
471
	mov	ebx, [gr_pos]
472
	mov	edx, bar_io
473
	mcall	4
474
	jmp	mmio_next_bar
475
@@:
1358 art_zh 476
	cmp	bh, '6' 	; expansion ROM ?
477
	je	@f
1351 art_zh 478
	mov	[bar_ram+3], bh
479
	mov	ebx, [gr_pos]
480
	mov	edx, bar_ram
481
	mcall	4
1358 art_zh 482
	jmp	mmio_dump
1353 art_zh 483
@@:
484
	mov	ebx, [gr_pos]
485
	mov	edx, bar_rom
486
	mcall	4
205 heavyiron 487
 
1353 art_zh 488
mmio_dump:
1358 art_zh 489
	mov	edx, [MMIO_Map]
1351 art_zh 490
	mov	esi, 64
491
	mov	ecx, 0x099		; dump color : blue
492
	add	ebx, 10
493
	mov	[gr_pos], ebx
494
	mcall	4
1358 art_zh 495
	mov	ecx, [MMIO_Map] 	; release the tried page
1351 art_zh 496
	mcall	62,13
497
 
498
mmio_next_bar:
499
	mov	bh, [MMIO_BAR]
500
	inc	bh
1353 art_zh 501
	cmp	bh,7
1351 art_zh 502
	je	@f
503
	mov	[MMIO_BAR], bh
504
	add	[gr_pos], 10
505
	jmp	Try_MMIO
506
 
507
@@:
508
	xor	bh,bh
509
	mov	[MMIO_BAR], bh
510
	ret
511
 
512
 
513
include 'VENDORS.INC'
132 diamond 514
;------------------------------------------------------------------
515
; DATA AREA
475 Ghost 516
DATA
132 diamond 517
 
518
 
475 Ghost 519
Form:	dw 800 ; window width (no more, special for 800x600)
520
	dw 100 ; window x start
1358 art_zh 521
	dw 620 ; window height
522
	dw 20 ; window y start
205 heavyiron 523
 
1351 art_zh 524
title	db 'PCI Device Enumerator v 2.2 by J.Delozier, S.Kuzmin, V.Hanla, M.Zakiyanov, A.Jerdev', 0
205 heavyiron 525
 
475 Ghost 526
PCIWin mls \
1351 art_zh 527
	'   Don`t forget to enable PCI Access to Applications in Setup Menu.',\
475 Ghost 528
	'',\
1351 art_zh 529
	'PCI Version  = x.xx; Last PCI Bus = x',\
530
	'User MMIO channel = 0F.F:F ',\
531
	'Number of PCI units =',\
475 Ghost 532
	'',\
533
	'VenID DevID Bus# Dev# Fnc Rev  Class  Subclass/ IRQ                 Company                      Description',\
534
	'                                      Interface',\
535
	'----- ----- ---- ---- --- ---  -----  --------- --- ------------------------------------------ ----------------'
205 heavyiron 536
 
1351 art_zh 537
bar_ram db 'BARx: MMIO block', 0
538
bar_io	db 'BARx: IO ports',0
539
bar_um	db 'BARx: unmapped',0
1358 art_zh 540
bar_rom db 'BAR6: Expansion ROM', 0
1351 art_zh 541
 
475 Ghost 542
;------------------------------------------------------------------
543
; UNINITIALIZED DATA AREA
544
UDATA
205 heavyiron 545
 
475 Ghost 546
total		db ?
547
V_Bus		db ?
548
V_Dev		db ?
549
PCI_Version	dw ?
550
PCI_LastBus	db ?
551
PCI_Device	dw ?
552
PCI_Vendor	dw ?
1351 art_zh 553
PCI_Bus 	db ?
554
PCI_Dev 	db ?
555
PCI_Rev 	db ?
475 Ghost 556
; don`t change order!!!
557
PCI_Class	db ?
558
PCI_SubClass	db ?
559
PCI_Interface	db ?
1351 art_zh 560
PCI_IRQ 	db ?
205 heavyiron 561
 
1351 art_zh 562
align 4
563
MMIO_Bus	db ?
564
MMIO_Dev	db ?
565
MMIO_BAR	db 0
566
MMIO_Blk	db 0
567
MMIO_Map	rd 8
568
 
569
gr_pos		dd ?
570
 
475 Ghost 571
Proc_Info	process_information
572
MEOS_APP_END
1351 art_zh 573