From daa8ed9274d91a157dc049f00792f62c98b0a11a Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Wed, 16 Nov 2016 22:22:13 +0000 Subject: [interface] Provide intf_reinit() to reinitialise nullified interfaces Provide an abstraction intf_reinit() to restore the descriptor of a previously nullified interface. Signed-off-by: Michael Brown --- src/include/ipxe/interface.h | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'src/include') diff --git a/src/include/ipxe/interface.h b/src/include/ipxe/interface.h index a8d823775..ebb1b6911 100644 --- a/src/include/ipxe/interface.h +++ b/src/include/ipxe/interface.h @@ -123,6 +123,11 @@ struct interface { struct refcnt *refcnt; /** Interface descriptor */ struct interface_descriptor *desc; + /** Original interface descriptor + * + * Used by intf_reinit(). + */ + struct interface_descriptor *original; }; extern void intf_plug ( struct interface *intf, struct interface *dest ); @@ -166,6 +171,7 @@ static inline void intf_init ( struct interface *intf, intf->dest = &null_intf; intf->refcnt = refcnt; intf->desc = desc; + intf->original = desc; } /** @@ -177,6 +183,7 @@ static inline void intf_init ( struct interface *intf, .dest = &null_intf, \ .refcnt = NULL, \ .desc = &(descriptor), \ + .original = &(descriptor), \ } /** @@ -236,4 +243,15 @@ static inline void intf_init ( struct interface *intf, */ #define INTF_INTF_DBG( intf, dest ) INTF_DBG ( intf ), INTF_DBG ( dest ) +/** + * Reinitialise an object interface + * + * @v intf Object interface + */ +static inline void intf_reinit ( struct interface *intf ) { + + /* Restore original interface descriptor */ + intf->desc = intf->original; +} + #endif /* _IPXE_INTERFACE_H */ -- cgit v1.2.3-55-g7522