12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- #ifndef _GPXE_INTERFACE_H
- #define _GPXE_INTERFACE_H
-
- /** @file
- *
- * Object communication interfaces
- *
- */
-
- FILE_LICENCE ( GPL2_OR_LATER );
-
- #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 */
|