Sfoglia il codice sorgente

[hw] Eliminate polling while waiting for window to open

Polling for the data-transfer window to become open is wasteful.  We
can eliminate the polling loop by using hw_step() as the handler for
an xfer_window_changed() event.

If the window is already open at the time of instantiation, then
xfer_window_changed() may never be called.  We can cover this case by
using hw_step() as the step() method of a one-shot process.  Since the
signature for an xfer_window_changed() method is identical to the
signature for a process step() method, the same function can be used
for both.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
tags/v1.20.1
Michael Brown 13 anni fa
parent
commit
3915b660fd
1 ha cambiato i file con 2 aggiunte e 1 eliminazioni
  1. 2
    1
      src/core/hw.c

+ 2
- 1
src/core/hw.c Vedi File

36
 }
36
 }
37
 
37
 
38
 static struct interface_operation hw_xfer_operations[] = {
38
 static struct interface_operation hw_xfer_operations[] = {
39
+	INTF_OP ( xfer_window_changed, struct hw *, hw_step ),
39
 	INTF_OP ( intf_close, struct hw *, hw_finished ),
40
 	INTF_OP ( intf_close, struct hw *, hw_finished ),
40
 };
41
 };
41
 
42
 
43
 	INTF_DESC ( struct hw, xfer, hw_xfer_operations );
44
 	INTF_DESC ( struct hw, xfer, hw_xfer_operations );
44
 
45
 
45
 static struct process_descriptor hw_process_desc =
46
 static struct process_descriptor hw_process_desc =
46
-	PROC_DESC ( struct hw, process, hw_step );
47
+	PROC_DESC_ONCE ( struct hw, process, hw_step );
47
 
48
 
48
 static int hw_open ( struct interface *xfer, struct uri *uri __unused ) {
49
 static int hw_open ( struct interface *xfer, struct uri *uri __unused ) {
49
 	struct hw *hw;
50
 	struct hw *hw;

Loading…
Annulla
Salva