Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1.  
  2. .section .text
  3.  
  4. .global ___io_alloc
  5. .global ___io_free
  6. .global ___io_tab
  7.  
  8. .align 8
  9. ___io_alloc:
  10.            pushl $__io_mutex
  11.            call ___mutex_lock
  12.            popl %eax
  13.  
  14.            xorl %ecx, %ecx
  15.            bsfl __io_map, %eax
  16.            jnz .done
  17.  
  18.            movl $32, %ecx
  19.            bsfl __io_map+4, %eax
  20.            jnz .done
  21.  
  22.            xorl %eax, %eax
  23.            mov %eax, __io_mutex
  24.            notl %eax
  25.            ret
  26.  
  27. .done:
  28.            addl %ecx, %eax
  29.            btrl %eax, __io_map
  30.            movl $0, __io_mutex
  31.            ret
  32.  
  33. .align 8
  34. ___io_free:
  35.            movl 4(%esp), %eax
  36.            bts  %eax, __io_map
  37.            ret
  38.  
  39. .section .data
  40.  
  41. __io_map:         .long(0xFFFFFFFF)
  42.                   .long(0xFFFFFFFF)
  43.  
  44. .section .bss
  45.  
  46. .align 16
  47.  
  48. ___io_tab:        .space 64*24
  49. __io_mutex:       .space 4
  50.  
  51.