mirror of https://github.com/ipxe/ipxe.git
55 lines
1.2 KiB
C
55 lines
1.2 KiB
C
#ifndef _GPXE_INTERFACE_H
|
|
#define _GPXE_INTERFACE_H
|
|
|
|
/** @file
|
|
*
|
|
* Object communication interfaces
|
|
*
|
|
*/
|
|
|
|
#include <gpxe/refcnt.h>
|
|
|
|
/** An object communication interface */
|
|
struct interface {
|
|
/** Destination interface
|
|
*
|
|
* When messages are sent via this interface, they will be
|
|
* delivered to the destination interface.
|
|
*
|
|
* This pointer may never be NULL. When the interface is
|
|
* unplugged, it should point to a null interface.
|
|
*/
|
|
struct interface *dest;
|
|
/** Reference counter
|
|
*
|
|
* If this interface is not part of a reference-counted
|
|
* object, this field may be NULL.
|
|
*/
|
|
struct refcnt *refcnt;
|
|
};
|
|
|
|
/**
|
|
* Increment reference count on an interface
|
|
*
|
|
* @v intf Interface
|
|
* @ret intf Interface
|
|
*/
|
|
static inline struct interface * intf_get ( struct interface *intf ) {
|
|
ref_get ( intf->refcnt );
|
|
return intf;
|
|
}
|
|
|
|
/**
|
|
* Decrement reference count on an interface
|
|
*
|
|
* @v intf Interface
|
|
*/
|
|
static inline void intf_put ( struct interface *intf ) {
|
|
ref_put ( intf->refcnt );
|
|
}
|
|
|
|
extern void plug ( struct interface *intf, struct interface *dest );
|
|
extern void plug_plug ( struct interface *a, struct interface *b );
|
|
|
|
#endif /* _GPXE_INTERFACE_H */
|