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