kolibrios/drivers/usb/usbftdi/linkedlist.inc
gtament 53b63538c0 The very first version of FTDI driver. The only request is 'set_pins'. Not tested yet
git-svn-id: svn://kolibrios.org@4975 a494cfbc-eb01-0410-851d-a64ba20cac60
2014-06-14 21:01:22 +00:00

55 lines
1.1 KiB
PHP

head dd 1
node equ ftdi_context
node.next equ ftdi_context.next_context
linkedlist:
.init:
push eax
xor eax, eax
mov [head], eax
pop eax
ret
.add:
push ebx
mov ebx, [head]
mov [head], eax
mov [eax + node.next], ebx
pop ebx
ret
.delete:
push ebx ecx
mov ebx, eax ; eax - pointer to node for delete
cmp eax, [head]
jz .unlink_head
.getnext:
cmp [ebx+node.next], eax
jz .unlink
cmp [ebx+node.next], 0
jz .invalid_pointer
mov ebx, [ebx+node.next]
jmp .getnext
.unlink:
mov ecx, [eax+node.next]
mov [ebx+node.next], ecx
jmp @f
.unlink_head:
mov ebx, [eax+node.next]
mov [head], ebx
@@:
mov ecx, eax
call Kfree
.invalid_pointer:
pop ecx ebx
ret
.gethead:
mov eax, [head]
ret
restore node
restore next