Subversion Repositories Kolibri OS

Rev

Rev 736 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 736 Rev 791
Line 64... Line 64...
64
   Rickard E. Faith 
64
   Rickard E. Faith 
65
   Alan Hourihane 
65
   Alan Hourihane 
Line 66... Line 66...
66
 
66
 
Line -... Line 67...
-
 
67
end if
-
 
68
 
-
 
69
RADEON_CP_ME_RAM_ADDR            equ 0x07d4
-
 
70
RADEON_CP_ME_RAM_RADDR           equ 0x07d8
-
 
71
RADEON_CP_ME_RAM_DATAH           equ 0x07dc
-
 
72
RADEON_CP_ME_RAM_DATAL           equ 0x07e0
-
 
73
 
-
 
74
RADEON_CP_RB_BASE                equ 0x0700
-
 
75
RADEON_CP_RB_CNTL                equ 0x0704
-
 
76
  RADEON_RB_NO_UPDATE            equ (1 shl 27)
-
 
77
RADEON_CP_RB_RPTR_ADDR           equ 0x070c
-
 
78
RADEON_CP_RB_RPTR                equ 0x0710
-
 
79
RADEON_CP_RB_WPTR                equ 0x0714
-
 
80
 
-
 
81
RADEON_CP_CSQ_CNTL               equ 0x0740
-
 
82
  RADEON_CSQ_CNT_PRIMARY_MASK    equ (0xff shl 0)
-
 
83
  RADEON_CSQ_PRIDIS_INDDIS       equ (0    shl 28)
-
 
84
  RADEON_CSQ_PRIPIO_INDDIS       equ (1    shl 28)
-
 
85
  RADEON_CSQ_PRIBM_INDDIS        equ (2    shl 28)
-
 
86
  RADEON_CSQ_PRIPIO_INDBM        equ (3    shl 28)
-
 
87
  RADEON_CSQ_PRIBM_INDBM         equ (4    shl 28)
-
 
88
  RADEON_CSQ_PRIPIO_INDPIO       equ (15   shl 28)
-
 
89
 
-
 
90
RADEON_CP_RB_WPTR_DELAY          equ 0x0718
-
 
91
 
-
 
92
RADEON_SCRATCH_UMSK              equ 0x0770
-
 
93
RADEON_SCRATCH_ADDR              equ 0x0774
-
 
94
 
-
 
95
RADEON_ISYNC_CNTL                equ 0x1724
-
 
96
  RADEON_ISYNC_ANY2D_IDLE3D      equ (1 shl 0)
-
 
97
  RADEON_ISYNC_ANY3D_IDLE2D      equ (1 shl 1)
-
 
98
  RADEON_ISYNC_TRIG2D_IDLE3D     equ (1 shl 2)
-
 
99
  RADEON_ISYNC_TRIG3D_IDLE2D     equ (1 shl 3)
-
 
100
  RADEON_ISYNC_WAIT_IDLEGUI      equ (1 shl 4)
-
 
101
  RADEON_ISYNC_CPSCRATCH_IDLEGUI equ (1 shl 5)
-
 
102
 
-
 
103
RADEON_AIC_CNTL                  equ 0x01d0
-
 
104
  RADEON_PCIGART_TRANSLATE_EN    equ (1 shl 0)
-
 
105
RADEON_AIC_STAT                  equ 0x01d4
-
 
106
RADEON_AIC_PT_BASE               equ 0x01d8
-
 
107
RADEON_AIC_LO_ADDR               equ 0x01dc
-
 
108
RADEON_AIC_HI_ADDR               equ 0x01e0
-
 
109
RADEON_AIC_TLB_ADDR              equ 0x01e4
-
 
110
RADEON_AIC_TLB_DATA              equ 0x01e8
-
 
111
 
-
 
112
RADEON_WAIT_UNTIL                equ 0x1720
-
 
113
  RADEON_WAIT_CRTC_PFLIP         equ (1 shl 0)
-
 
114
  RADEON_WAIT_2D_IDLE            equ (1 shl 14)
-
 
115
  RADEON_WAIT_3D_IDLE            equ (1 shl 15)
-
 
116
  RADEON_WAIT_2D_IDLECLEAN       equ (1 shl 16)
-
 
117
  RADEON_WAIT_3D_IDLECLEAN       equ (1 shl 17)
67
end if
118
  RADEON_WAIT_HOST_IDLECLEAN     equ (1 shl 18)
68
 
119
 
69
D1GRPH_PITCH                     equ 0x6120
120
D1GRPH_PITCH                     equ 0x6120
Line 101... Line 152...
101
  R5XX_DP_DST_TILE_LINEAR        equ (0 shl  3)
152
  R5XX_DP_DST_TILE_LINEAR        equ (0 shl  3)
102
  R5XX_DP_DST_TILE_MACRO         equ (1 shl  3)
153
  R5XX_DP_DST_TILE_MACRO         equ (1 shl  3)
103
  R5XX_DP_DST_TILE_MICRO         equ (2 shl  3)
154
  R5XX_DP_DST_TILE_MICRO         equ (2 shl  3)
104
  R5XX_DP_DST_TILE_BOTH          equ (3 shl  3)
155
  R5XX_DP_DST_TILE_BOTH          equ (3 shl  3)
Line -... Line 156...
-
 
156
 
-
 
157
RADEON_RB3D_ZCACHE_CTLSTAT       equ 0x3254
-
 
158
  RADEON_RB3D_ZC_FLUSH           equ (1 shl 0)
-
 
159
  RADEON_RB3D_ZC_FREE            equ (1 shl 2)
-
 
160
  RADEON_RB3D_ZC_FLUSH_ALL       equ 0x5
Line 105... Line 161...
105
 
161
  RADEON_RB3D_ZC_BUSY            equ (1 shl 31)
106
 
162
 
107
R5XX_RB3D_DSTCACHE_CTLSTAT       equ  0x325C
163
R5XX_RB3D_DSTCACHE_CTLSTAT       equ  0x325C
108
  R5XX_RB3D_DC_FLUSH             equ  (3 shl 0)
164
  R5XX_RB3D_DC_FLUSH             equ  (3 shl 0)
Line 247... Line 303...
247
R5XX_DP_SRC_BKGD_CLR                equ  0x15dc
303
R5XX_DP_SRC_BKGD_CLR                equ  0x15dc
248
R5XX_DP_SRC_FRGD_CLR                equ  0x15d8
304
R5XX_DP_SRC_FRGD_CLR                equ  0x15d8
Line 249... Line 305...
249
 
305
 
Line -... Line 306...
-
 
306
R5XX_DP_WRITE_MASK                  equ  0x16cc
-
 
307
 
-
 
308
 
250
R5XX_DP_WRITE_MASK                  equ  0x16cc
309
RADEON_CP_PACKET0                   equ 0x00000000
251
 
310
 
252
struc RHD
311
struc RHD
253
{
312
{
254
  .control           rd 1
313
  .control           rd 1
255
  .control_saved     rd 1
314
  .control_saved     rd 1
256
  .datatype          rd 1
315
  .datatype          rd 1
-
 
316
  .surface_cntl      rd 1
-
 
317
  .dst_pitch_offset  rd 1
-
 
318
  .ring_base         rd 1
257
  .surface_cntl      rd 1
319
  .ring_rp           rd 1
Line 258... Line 320...
258
  .dst_pitch_offset  rd 1
320
  .ring_wp           rd 1
Line -... Line 321...
-
 
321
};
-
 
322
 
259
};
323
R5XX_LOOP_COUNT equ 2000000
260
 
324
 
Line 261... Line 325...
261
R5XX_LOOP_COUNT equ 2000000
325
 
262
 
326
 
Line 482... Line 546...
482
 
546
 
Line 483... Line 547...
483
           mov [rhd.dst_pitch_offset], eax
547
           mov [rhd.dst_pitch_offset], eax
Line -... Line 548...
-
 
548
 
-
 
549
           ret
-
 
550
 
-
 
551
RADEON_BUS_CNTL            equ 0x0030
-
 
552
  RADEON_BUS_MASTER_DIS    equ (1 shl 6)
-
 
553
 
-
 
554
align 4
-
 
555
R5xxCpInit:
-
 
556
           stdcall CreateRingBuffer, 0x8000, PG_SW+PG_NOCACHE
-
 
557
           test eax, eax
-
 
558
           jz .fail
-
 
559
 
-
 
560
           mov [rhd.ring_base], eax
-
 
561
           call GetPgAddr
-
 
562
 
-
 
563
           wrr RADEON_CP_RB_BASE, eax
-
 
564
 
-
 
565
           wrr RADEON_CP_RB_WPTR_DELAY, 0
-
 
566
 
-
 
567
           rdr ebx, RADEON_CP_RB_RPTR
-
 
568
           wrr RADEON_CP_RB_WPTR, ebx
-
 
569
 
-
 
570
           mov [rhd.ring_rp], ebx
-
 
571
           mov [rhd.ring_wp], ebx
-
 
572
 
-
 
573
           wrr RADEON_CP_RB_RPTR_ADDR, 0       ;ring buffer read pointer
-
 
574
                                               ;no update
-
 
575
 
-
 
576
           wrr RADEON_CP_RB_CNTL, RADEON_RB_NO_UPDATE + 12
-
 
577
           wrr RADEON_SCRATCH_UMSK, 0          ;no scratch update
-
 
578
 
-
 
579
           rdr ebx, RADEON_BUS_CNTL
-
 
580
           and ebx, not RADEON_BUS_MASTER_DIS
-
 
581
 
-
 
582
           wrr RADEON_BUS_CNTL, ebx
-
 
583
 
-
 
584
         ;  wrr RADEON_LAST_FRAME_REG, 0
-
 
585
         ;  wrr RADEON_LAST_DISPATCH_REG, 0
-
 
586
         ;  wrr RADEON_LAST_CLEAR_REG, 0
-
 
587
 
-
 
588
           call R5xx2DIdleLocal
-
 
589
 
-
 
590
           wrr RADEON_ISYNC_CNTL, RADEON_ISYNC_ANY2D_IDLE3D + \
-
 
591
                                  RADEON_ISYNC_ANY3D_IDLE2D + \
-
 
592
                                  RADEON_ISYNC_WAIT_IDLEGUI + \
-
 
593
                                  RADEON_ISYNC_CPSCRATCH_IDLEGUI
-
 
594
.fail:
-
 
595
           ret
-
 
596
 
-
 
597
align 4
-
 
598
load_microcode:
-
 
599
 
-
 
600
           pushfd
-
 
601
           cli
-
 
602
 
-
 
603
           call R5xx2DIdleLocal
-
 
604
 
-
 
605
           wrr RADEON_CP_ME_RAM_ADDR, 0
-
 
606
 
-
 
607
           lea esi, [R520_cp_microcode]
-
 
608
           mov ecx, 256
-
 
609
@@:
-
 
610
           mov eax, [esi]
-
 
611
           mov ebx, [esi+4]
-
 
612
           wrr RADEON_CP_ME_RAM_DATAH, ebx
-
 
613
           wrr RADEON_CP_ME_RAM_DATAL, eax
-
 
614
           add esi, 8
-
 
615
           loop @B
-
 
616
 
-
 
617
           popfd
484
 
618
           ret
485
           ret
619
 
Line 486... Line 620...
486
 
620
 
487
align 4
621
align 4
-
 
622
R5xx2DInit:
488
R5xx2DInit:
623
 
489
 
624
           call R5xx2DPreInit
Line -... Line 625...
-
 
625
           wrr R5XX_RB3D_CNTL, 0
-
 
626
 
-
 
627
           call R5xx2DReset
-
 
628
           call R5xx2DSetup
-
 
629
 
-
 
630
           rdr eax, RADEON_AIC_CNTL                     ;disable GART
-
 
631
           and eax, not RADEON_PCIGART_TRANSLATE_EN
-
 
632
           wrr RADEON_AIC_CNTL, eax
490
           call R5xx2DPreInit
633
 
491
           wrr R5XX_RB3D_CNTL, 0
634
           call load_microcode
492
           call R5xx2DReset
635
 
493
           call R5xx2DSetup
636
           call R5xxCpInit
Line 494... Line 637...
494
 
637
 
495
           rdr eax, D1GRPH_X_END
638
           rdr eax, D1GRPH_X_END
496
           rdr ebx, D1GRPH_Y_END
639
           rdr ebx, D1GRPH_Y_END
497
           dec eax
640
           dec eax
Line -... Line 641...
-
 
641
           dec ebx
-
 
642
 
-
 
643
           mov [__xmin], 0         ;set clip
-
 
644
           mov [__ymin], 0
-
 
645
           mov [__xmax], eax
-
 
646
           mov [__ymax], ebx
-
 
647
 
-
 
648
           wrr RADEON_CP_CSQ_CNTL, RADEON_CSQ_PRIBM_INDBM
498
           dec ebx
649
 
Line 499... Line 650...
499
 
650
       ;    BEGIN_RING
Line 500... Line 651...
500
           mov [__xmin], 0         ;set clip
651
       ;    RADEON_PURGE_CACHE
Line 663... Line 814...
663
  LINE2P LINE2P
814
  LINE2P LINE2P
664
end virtual
815
end virtual
Line 665... Line 816...
665
 
816
 
Line -... Line 817...
-
 
817
GXcopy  equ 3
-
 
818
 
-
 
819
RADEON_CP_PACKET3         equ 0xC0000000
-
 
820
 
-
 
821
PAINT_MULTI               equ 0xC0009A00
-
 
822
 
-
 
823
DST_PITCH_OFFSET_CNTL     equ (  1 shl  1)
-
 
824
BRUSH_SOLID_COLOR         equ ( 13 shl  4)
-
 
825
COLOR_ARGB                equ (  6 shl  8)
-
 
826
SRC_DATATYPE_COLOR        equ (  3 shl 12)
-
 
827
 
666
GXcopy  equ 3
828
;RADEON_ROP3_P             equ
667
 
829
 
668
; esi= input params
830
; esi= input params
Line 669... Line 831...
669
align 4
831
align 4
Line 694... Line 856...
694
           call _BlockClip
856
           call _BlockClip
695
           add esp, 16
857
           add esp, 16
696
           test eax, eax
858
           test eax, eax
697
           jnz .exit
859
           jnz .exit
Line 698... Line 860...
698
 
860
 
699
           mov edx, [R5xxRops+4+GXcopy*8]
861
           ;mov edx, [R5xxRops+4+GXcopy*8]
700
           or edx, [rhd.control]
862
           ;or edx, [rhd.control]
Line 701... Line 863...
701
           or edx, (R5XX_GMC_BRUSH_SOLID_COLOR or R5XX_GMC_SRC_DATATYPE_COLOR)
863
           ;or edx, (R5XX_GMC_BRUSH_SOLID_COLOR or R5XX_GMC_SRC_DATATYPE_COLOR)
702
 
864
 
Line 703... Line -...
703
           pushfd
-
 
704
           cli
-
 
Line -... Line 865...
-
 
865
           pushfd
-
 
866
           cli
705
 
867
 
-
 
868
 
-
 
869
       BEGIN_RING
-
 
870
         OUT_PACKET3 PAINT_MULTI, 4
-
 
871
         OUT_RING (DST_PITCH_OFFSET_CNTL + \
-
 
872
                     BRUSH_SOLID_COLOR     + \
Line 706... Line -...
706
           mov eax, 7
-
 
707
           call R5xxFIFOWait
-
 
708
 
-
 
709
           wrr R5XX_DP_GUI_MASTER_CNTL, edx
-
 
710
 
-
 
711
           mov eax, [esi+FILL.color]
-
 
712
           wrr R5XX_DP_BRUSH_FRGD_CLR, eax
-
 
713
 
873
                     COLOR_ARGB            + \
714
           wrr R5XX_DP_WRITE_MASK, 0xFFFFFFFF
874
                     SRC_DATATYPE_COLOR    + \
Line 715... Line 875...
715
 
875
                     (1 shl 28)+(1 shl 30) + \
716
           wrr R5XX_DP_CNTL, (R5XX_DST_X_LEFT_TO_RIGHT or R5XX_DST_Y_TOP_TO_BOTTOM)
876
                     R5XX_ROP3_P)
717
 
877
 
718
           mov eax, [rhd.dst_pitch_offset]
878
         OUT_RING [rhd.dst_pitch_offset]
Line 719... Line 879...
719
           wrr R5XX_DST_PITCH_OFFSET, eax
879
         OUT_RING [esi+FILL.color]
720
 
880
 
721
           mov ebx, [esi+FILL.y]
881
           mov ebx, [esi+FILL.y]
Line 731... Line 891...
731
           sub eax, [esi+FILL.y]
891
           sub eax, [esi+FILL.y]
732
           inc eax                      ;h
892
           inc eax                      ;h
Line 733... Line 893...
733
 
893
 
734
           shl ecx, 16
894
           shl ecx, 16
-
 
895
           mov cx, ax                   ;w|h
-
 
896
 
-
 
897
         OUT_RING ecx
-
 
898
       COMMIT_RING
-
 
899
 
-
 
900
if 0
-
 
901
;           mov eax, 7
-
 
902
;           call R5xxFIFOWait
-
 
903
 
-
 
904
;           wrr R5XX_DP_GUI_MASTER_CNTL, edx
-
 
905
 
-
 
906
;           mov eax, [esi+FILL.color]
-
 
907
;           wrr R5XX_DP_BRUSH_FRGD_CLR, eax
-
 
908
 
-
 
909
;           wrr R5XX_DP_WRITE_MASK, 0xFFFFFFFF
-
 
910
 
-
 
911
;           wrr R5XX_DP_CNTL, (R5XX_DST_X_LEFT_TO_RIGHT or R5XX_DST_Y_TOP_TO_BOTTOM)
-
 
912
 
-
 
913
;           mov eax, [rhd.dst_pitch_offset]
-
 
914
;           wrr R5XX_DST_PITCH_OFFSET, eax
-
 
915
 
-
 
916
;           mov ebx, [esi+FILL.y]
-
 
917
;           shl ebx, 16
-
 
918
;           mov bx, word [esi+FILL.x]
-
 
919
;           wrr R5XX_DST_Y_X, ebx
-
 
920
 
-
 
921
;           mov ecx, [esp+4]             ;x2
-
 
922
;           sub ecx, [esi+FILL.x]
-
 
923
;           inc ecx                      ;w
-
 
924
 
-
 
925
;           mov eax, [esp+8]             ;y2
-
 
926
;           sub eax, [esi+FILL.y]
-
 
927
;           inc eax                      ;h
-
 
928
 
-
 
929
;           shl ecx, 16
735
           mov cx, ax                        ;w|h
930
;           mov cx, ax                        ;w|h
-
 
931
;           wrr R5XX_DST_WIDTH_HEIGHT, ecx
736
           wrr R5XX_DST_WIDTH_HEIGHT, ecx
932
end if
737
           popfd
933
           popfd
738
.exit:
934
.exit:
739
           add esp, 8
935
           add esp, 8