Add linux-next specific files for 20110831
[linux-2.6/next.git] / tools / kvm / tests / pit / tick.S
blobb9e5a80b9fea3676da6bff80e9df05a4fe697f7e
1 #define IO_PIC          0x20
2 #define IRQ_OFFSET      32
3 #define IO_PIT          0x40
4 #define TIMER_FREQ      1193182
5 #define TIMER_DIV(x)    ((TIMER_FREQ+(x)/2)/(x))
7 /*
8  * hpa noted:
9  *
10  * 0xe0..0xef are "motherboard specific", but 0xe9 is
11  * used for Bochs debugging and 0xed is the Phoenix-reserved
12  * delay port
13  */
14 #define DBG_PORT        0xe0
16 #define TEST_COUNT      0x0200
18         .code16gcc
19         .text
20         .globl  _start
21         .type   _start, @function
22 _start:
24  * fill up noop handlers
25  */
26         xorw    %ax, %ax
27         xorw    %di, %di
28         movw    %ax, %es
29         movw    $256, %cx
30 fill_noop_idt:
31         movw    $noop_handler, %es:(%di)
32         movw    %cs, %es:2(%di)
33         add     $4, %di
34         loop    fill_noop_idt
36 set_idt:
37         movw    $timer_isr, %es:(IRQ_OFFSET*4)
38         movw    %cs, %es:(IRQ_OFFSET*4+2)
40 set_pic:
41         # ICW1
42         mov     $0x11, %al
43         mov     $(IO_PIC), %dx
44         out     %al,%dx
45         # ICW2
46         mov     $(IRQ_OFFSET), %al
47         mov     $(IO_PIC+1), %dx
48         out     %al, %dx
49         # ICW3
50         mov     $0x00, %al
51         mov     $(IO_PIC+1), %dx
52         out     %al, %dx
53         # ICW4
54         mov     $0x3, %al
55         mov     $(IO_PIC+1), %dx
56         out     %al, %dx
58 set_pit:
59         # set 8254 mode
60         mov     $(IO_PIT+3), %dx
61         mov     $0x34, %al
62         outb    %al, %dx
63         # set 8254 freq 1KHz
64         mov     $(IO_PIT), %dx
65         movb    $(TIMER_DIV(1000) % 256), %al
66         outb    %al, %dx
67         movb    $(TIMER_DIV(1000) / 256), %al
68         outb    %al, %dx
70 enable_irq0:
71         mov     $0xfe, %al
72         mov     $(IO_PIC+1), %dx
73         out     %al, %dx
74         sti
75 loop:
76         1:
77         jmp     1b
79 test_ok:
80         mov     $0x3f8,%dx
81         cs lea  msg2, %si
82         mov     $(msg2_end-msg2), %cx
83         cs rep/outsb
85         /* not a valid port to force exit */
86         outb    %al, $DBG_PORT
88 timer_isr:
89         cli
90         pushaw
91         pushfw
92         mov     $0x3f8,%dx
93         mov     $0x2e, %al      # .
94         out     %al,%dx
95         decw    count
96         jz      test_ok
97         popfw
98         popaw
99         iretw
101 noop_handler:
102         iretw
104 count:
105         .word   TEST_COUNT
107 msg2:
108         .asciz "\nTest OK\n"
109 msg2_end: