1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- #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 __attribute__ (( always_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 __attribute__ (( always_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 */
|