Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. checkidle:
  2.         pushad
  3.  
  4.         cmp  [check_idle_semaphore],0
  5.         jne  no_idle_state
  6.  
  7.         call change_task
  8.         mov  eax,[idlemem]
  9.         mov  ebx,[timer_ticks] ;[0xfdf0]
  10.         cmp  eax,ebx
  11.         jnz  idle_exit
  12.         call _rdtsc
  13.         mov  ecx,eax
  14.       idle_loop:
  15.         hlt
  16.         cmp  [check_idle_semaphore],0
  17.         jne  idle_loop_exit
  18.         mov  eax,[timer_ticks] ;[0xfdf0]
  19.         cmp  ebx,eax
  20.         jz   idle_loop
  21.       idle_loop_exit:
  22.         mov  [idlemem],eax
  23.         call _rdtsc
  24.         sub  eax,ecx
  25.         mov  ebx,[idleuse]
  26.         add  ebx,eax
  27.         mov  [idleuse],ebx
  28.  
  29.         popad
  30.         ret
  31.  
  32.       idle_exit:
  33.  
  34.         mov  ebx,[timer_ticks] ;[0xfdf0]
  35.         mov  [idlemem],ebx
  36.         call change_task
  37.  
  38.         popad
  39.         ret
  40.  
  41.       no_idle_state:
  42.  
  43.         dec  [check_idle_semaphore]
  44.  
  45.         mov  ebx,[timer_ticks] ;[0xfdf0]
  46.         mov  [idlemem],ebx
  47.         call change_task
  48.  
  49.         popad
  50.         ret
  51.  
  52. uglobal
  53.   idlemem               dd   0x0
  54.   idleuse               dd   0x0
  55.   idleusesec            dd   0x0
  56.   check_idle_semaphore  dd   0x0
  57. endg