Subversion Repositories Kolibri OS

Rev

Rev 3531 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3531 Rev 3573
Line 56... Line 56...
56
;;
56
;;
57
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
57
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Line 58... Line 58...
58
 
58
 
Line 59... Line 59...
59
include 'macros.inc'
59
include 'macros.inc'
Line 60... Line 60...
60
 
60
 
Line 61... Line 61...
61
$Revision: 3531 $
61
$Revision: 3573 $
Line 626... Line 626...
626
	mov eax, [def_cursor]
626
	mov eax, [def_cursor]
627
	mov [SLOT_BASE+APPDATA.cursor],eax
627
	mov [SLOT_BASE+APPDATA.cursor],eax
628
	mov [SLOT_BASE+APPDATA.cursor+256],eax
628
	mov [SLOT_BASE+APPDATA.cursor+256],eax
Line 629... Line 629...
629
 
629
 
-
 
630
 
-
 
631
  ; READ TSC / SECOND === Fusion fam.14h only! ===
-
 
632
 
-
 
633
uglobal
-
 
634
align 4
-
 
635
diff16 "pll_freq : ", 0, $
-
 
636
pll_frequency:
-
 
637
	.main	dd ?
-
 
638
	.divd	dd ?
-
 
639
	.nclk	dd ?
-
 
640
	.osc	dd ?
-
 
641
endg
-
 
642
	mov	ecx, 0xC0010064 	; P0-state register
-
 
643
	rdmsr
-
 
644
	and	eax, 0x000001F3
-
 
645
	xor	ebx, ebx
-
 
646
	mov	bl, al
-
 
647
	shr	eax, 2			; divd = 4*((1 + bits[8:4]) + 0.25*(bits[1:0]))
-
 
648
	add	al, 4
-
 
649
	and	bl, 3
-
 
650
	add	al, bl
-
 
651
	mov	[pll_frequency.divd], eax
-
 
652
 
-
 
653
 
-
 
654
	mov	eax, [PCIe_CONFIG_SPACE + 0xC30D4]  ; bdf: 0.18.3; reg.0xD4
-
 
655
	and	eax, 0x0000003F 	; 100 * (16 + bits[5:0]) = MHz
-
 
656
	add	al, 16
-
 
657
	imul	eax, 100
-
 
658
	mov	[pll_frequency.main], eax
-
 
659
 
-
 
660
	shl	eax, 2
-
 
661
	xor	edx, edx
-
 
662
	mov	ebx, [pll_frequency.divd]
-
 
663
	div	ebx
-
 
664
	mov	ecx, 1000000
-
 
665
	push	edx
-
 
666
	xor	edx, edx
-
 
667
	mul	ecx
-
 
668
	mov	[CPU_FREQ], eax 	; Hz
-
 
669
	pop	eax
-
 
670
	xor	edx, edx
-
 
671
	mov	ecx, 250000		; remainder in MHz/4
-
 
672
	mul	ecx
-
 
673
	div	ebx
-
 
674
	add	eax, [CPU_FREQ]
-
 
675
 
-
 
676
	mov	[CPU_FREQ],eax		; save tsc / sec
-
 
677
	mov	ebx, 1000000
-
 
678
	div	ebx
-
 
679
	mov	[stall_mcs], eax	; (core/memory.inc:stall)
-
 
680
 
-
 
681
	mov	ebx, [PCIe_CONFIG_SPACE + 0xC30DC]  ; bdf: 0.18.3; reg.0xDC
-
 
682
	shr	ebx, 20
-
 
683
	and	bx, 0x3F		; NbP0NclkDiv
-
 
684
	mov	eax, [pll_frequency.main]
-
 
685
	shl	eax, 2
-
 
686
	xor	edx, edx
-
 
687
	div	ebx
-
 
688
	push	edx
-
 
689
	imul	eax, 1000000
-
 
690
	mov	[pll_frequency.nclk], eax  ; +-MHz
-
 
691
	pop	eax
-
 
692
	xor	edx, edx
-
 
693
	imul	eax, 1000000
-
 
694
	div	ebx
-
 
695
	add	[pll_frequency.nclk], eax  ; precise bus clk
-
 
696
	mov	eax, 200000000
Line 630... Line -...
630
 
-
 
631
  ; READ TSC / SECOND == Fusion only!
-
 
632
 
-
 
633
	cli
-
 
634
	mov	edx, PCIe_CONFIG_SPACE + 0xE0
-
 
635
	mov	eax, 0x013080F0 	; BIOS timer reg.
-
 
636
	mov	[edx], eax
-
 
637
	add	dl, 4
-
 
638
	mov	edi, edx
-
 
639
	mov	eax, [edi]		; old microseconds
-
 
640
	inc	eax			; next precise microsecond
-
 
641
	mov	esi, eax
-
 
642
 @@:
-
 
643
	mov	eax, [edi]
-
 
644
	cmp	eax, esi
-
 
645
	jne	@b
-
 
646
 
-
 
647
	rdtsc
-
 
648
	mov	ebp, eax		; clockmark
-
 
649
	add	esi, 20 		; wait 20us
-
 
650
 @@:
-
 
651
	mov	eax, [edi]
-
 
652
	cmp	eax, esi
-
 
653
	jne	@b
-
 
654
 
-
 
655
	rdtsc
-
 
656
	sub	eax, ebp
-
 
657
	mov	ebx, 50000
-
 
658
	mul	ebx		      ; clks per second
-
 
659
	sti
-
 
660
 
-
 
661
	mov   [CPU_FREQ],eax	      ; save tsc / sec
-
 
662
	mov   ebx, 1000000
697
	mov	[pll_frequency.osc], eax   ; 200MHz main oscillator
663
	div   ebx
698
 
664
	mov [stall_mcs], eax
699
 
Line -... Line 700...
-
 
700
; PRINT CPU FREQUENCY
-
 
701
	mov	esi, boot_cpufreq
-
 
702
	call	boot_log
-
 
703
 
665
; PRINT CPU FREQUENCY
704
	mov	eax, [CPU_FREQ]
666
	mov	esi, boot_cpufreq
705
	xor	edx, edx
667
	call	boot_log
706
	mov	ebx, 1000000
668
 
707
	div	ebx
669
	mov	ebx, eax
708
	mov	ebx, eax
670
	movzx	ecx, word [boot_y]
709
	movzx	ecx, word [boot_y]
671
	add	ecx, (10+17*6) shl 16 - 10 ; 'CPU frequency is '
710
	add	ecx, (10+17*6) shl 16 - 10 ; 'CPU frequency is '
672
	mov	edx, 0xFFFFFF
711
	mov	edx, 0xFFFFFF
Line 673... Line 712...
673
	xor	edi,edi
712
	xor	edi,edi
Line 674... Line 713...
674
	mov	eax, 0x00040000
713
	mov	eax, 0x00040000