Rev 3531 | Rev 3934 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3531 | Rev 3573 | ||
---|---|---|---|
Line 296... | Line 296... | ||
296 | rdmsr |
296 | rdmsr |
297 | mov [esp+16], edx |
297 | mov [esp+16], edx |
298 | pop edx ecx |
298 | pop edx ecx |
299 | ret |
299 | ret |
Line -... | Line 300... | ||
- | 300 | ||
- | 301 | ;------------------------------------------------ |
|
- | 302 | uglobal |
|
- | 303 | ||
- | 304 | align 4 |
|
- | 305 | diff16 "apic_data : ", 0, $ |
|
- | 306 | apic_data: |
|
- | 307 | ||
- | 308 | .counter dd ? |
|
- | 309 | .ticks dd ? |
|
- | 310 | .t_freq dd ? |
|
- | 311 | endg |
|
300 | 312 | ||
- | 313 | apic_timer_reset: |
|
- | 314 | mov eax, [pll_frequency.osc] |
|
301 | apic_timer_reset: |
315 | shr eax, 1 ; default prescaler - fix it !! |
- | 316 | mov [apic_data.t_freq], eax |
|
302 | xor eax, eax |
317 | shr eax, 4 ; 16 per second |
- | 318 | mov [apic_data.ticks], eax |
|
303 | mov [apic_data+0], eax |
319 | |
304 | mov ebx, LAPIC_BAR+ 0x320 |
320 | mov ebx, LAPIC_BAR+ 0x320 |
305 | mov eax, [ebx] |
321 | mov edx, [ebx] |
306 | and eax, 0xFFFEFF00 |
322 | and edx, 0xFFFEFF00 |
307 | or eax, 0x0000003F ; int vector + norestart |
323 | or edx, 0x0002003F ; int vector + restart |
308 | mov [ebx], eax |
324 | mov [ebx], edx |
309 | mov dword[apic_data + 8], 100000000 |
325 | mov dword [LAPIC_BAR + 0x380], eax ; load APICTIC |
Line 310... | Line 326... | ||
310 | ret |
326 | ret |
311 | 327 | ||
312 | 328 | ||
313 | apic_timer_int: |
329 | apic_timer_int: |
314 | push eax |
330 | push eax |
315 | inc dword [apic_data + 0] |
331 | inc dword [apic_data.counter] |
316 | mov eax, [apic_data + 8] |
332 | ; mov eax, [apic_data.ticks] |
317 | mov dword [LAPIC_BAR + 0x380], eax ; load APICTIC |
333 | ; mov dword [LAPIC_BAR + 0x380], eax ; reload APICTIC |
318 | mov dword [LAPIC_BAR + 0x0B0], 0 ; end of interrupt |
334 | mov dword [LAPIC_BAR + 0x0B0], 0 ; end of interrupt |