[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 <mcb30@ipxe.org>
This commit is contained in:
Michael Brown
2016-11-16 22:22:13 +00:00
parent b991c67c1d
commit daa8ed9274
3 changed files with 20 additions and 6 deletions

View File

@@ -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 */