new Fn77 - fast user-space locking

git-svn-id: svn://kolibrios.org@6079 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Sergey Semyonov (Serge)
2016-01-19 01:02:44 +00:00
parent a6e137e674
commit 25ecf7263e
6 changed files with 804 additions and 483 deletions

View File

@@ -919,7 +919,7 @@ Format of the table: short version:
For example, for the standard configuration from one 1.44-drive
here will be 40h, and for the case 1.2Mb on A: and 1.44Mb on B:
the value is 24h.
First IDE controller:
* +1: byte: information about hard disks and CD-drives, AABBCCDD,
where AA corresponds to the controller IDE0, ..., DD - IDE3:
@@ -930,7 +930,7 @@ Format of the table: short version:
this field contains 48h.
* +2: 4 db: number of the retrieved partitions on hard disks
at accordingly IDE0,...,IDE3.
Second IDE controller:
* +6: byte: information about hard disks and CD-drives, AABBCCDD,
where AA corresponds to the controller IDE4, ..., DD - IDE7:
@@ -951,8 +951,8 @@ Format of the table: short version:
For example, in the case HD on IDE8 and CD on IDE10
this field contains 48h.
* +12: 4 db: number of the retrieved partitions on hard disks
at accordingly IDE8,...,IDE11.
at accordingly IDE8,...,IDE11.
If the hard disk on IDEx is absent, appropriate byte is zero,
otherwise it shows number of the recognized partitions, which
can be not presented (if the drive is not formatted or if
@@ -1631,7 +1631,7 @@ Returned value:
Remarks:
* Counter takes modulo 2^32, that correspond to a little more
than 497 days.
* To get system time use function 3.
* To get system time use function 3.
---------------------- Constants for registers: ----------------------
eax - SF_SYSTEM_GET (26)
@@ -1645,7 +1645,7 @@ Parameters:
* ebx = 10 - subfunction number
Returned value:
* eax = number of nanoseconds since system boot time (lower DWORD)
* edx = number of nanoseconds since system boot time (high DWORD)
* edx = number of nanoseconds since system boot time (high DWORD)
Remarks:
* The counter is based on HPET, if HPET is not available, resolution
will be reduced to 10 000 000 nanoseconds.
@@ -2517,7 +2517,7 @@ Returned value:
* eax = if successful - pointer to a memory with data
* eax = 1 - error
* eax = -1 - main list area not found
---------------------- Constants for registers: ----------------------
eax - SF_CLIPBOARD (54)
ebx - SSF_READ_CB (1)
@@ -4665,7 +4665,7 @@ Returned value:
* ebx = errorcode
Remarks:
Optstruct:
Optstruct:
dd level
dd optionname
dd optlength
@@ -4687,7 +4687,7 @@ Returned value:
* ebx = errorcode
Remarks:
Optstruct:
Optstruct:
dd level
dd optionname
dd optlength
@@ -4720,7 +4720,7 @@ Parameters:
Ethernet (0)
0 - Read MAC
IPv4 (1)
0 - Read # IP packets sent
1 - Read # IP packets received
@@ -4732,7 +4732,7 @@ IPv4 (1)
7 - Write subnet
8 - Read gateway
9 - Write gateway
ICMP (2)
0 - Read # ICMP packets sent
1 - Read # ICMP packets received
@@ -4744,8 +4744,8 @@ UDP (3)
TCP (4)
0 - Read # TCP packets sent
1 - Read # TCP packets received
1 - Read # TCP packets received
ARP (5)
0 - Read # ARP packets sent
1 - Read # ARP packets received
@@ -4754,10 +4754,70 @@ ARP (5)
4 - Add static ARP entry
5 - Remove ARP entry (-1 = remove all)
6 - Send ARP announce on specified interface
7 - Read # ARP conflicts (IP address conflicts)
7 - Read # ARP conflicts (IP address conflicts)
---------------------- Constants for registers: ----------------------
eax - SF_NETWORK_PROTOCOL (76)
======================================================================
========== Function 77, Subfunction 0, Create futex object ===========
======================================================================
Parameters:
* eax = 77 - function number
* ebx = 0 - subfunction number
* ecx = pointer to futex dword
Returned value:
* eax = futex handle, 0 on error
Remarks:
* Use subfunction 1 to destroy the futex.
The kernel destroys the futexes automatically when the process
terminates.
======================================================================
========= Function 77, Subfunction 1, Destroy futex object ===========
======================================================================
Parameters:
* eax = 77 - function number
* ebx = 1 - subfunction number
* ecx = futex handle
Returned value:
* eax = 0 - successfull, -1 on error
Remarks:
* The futex handle must have been created by subfunction 0
======================================================================
=============== Function 77, Subfunction 2, Futex wait ===============
======================================================================
Parameters:
* eax = 77 - function number
* ebx = 2 - subfunction number
* ecx = futex handle
* edx = control value
* esi = timeout in system ticks or 0 for infinity
Returned value:
* eax = 0 - successfull, -1 on timeout
Remarks:
* This functionn tests that the value at the futex dword still
contains the expected control value, and if so, then sleeps
waiting for a wake operation on the futex.
* The futex handle must have been created by subfunction 0
======================================================================
=============== Function 77, Subfunction 3, Futex wake ===============
======================================================================
Parameters:
* eax = 77 - function number
* ebx = 3 - subfunction number
* ecx = futex handle
* edx = number of waiters to wake
Returned value:
* eax = number of waiters that were woken up
Remarks:
* This function wakes at most edx of the waiters that are
waiting (e.g., inside futex wait) on the futex dword
* The futex handle must have been created by subfunction 0
======================================================================
=============== Function -1 - terminate thread/process ===============
======================================================================