00001 /* 00002 * Copyright (C) 2007 Michael Brown <mbrown@fensystems.co.uk>. 00003 * 00004 * This program is free software; you can redistribute it and/or 00005 * modify it under the terms of the GNU General Public License as 00006 * published by the Free Software Foundation; either version 2 of the 00007 * License, or any later version. 00008 * 00009 * This program is distributed in the hope that it will be useful, but 00010 * WITHOUT ANY WARRANTY; without even the implied warranty of 00011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00012 * General Public License for more details. 00013 * 00014 * You should have received a copy of the GNU General Public License 00015 * along with this program; if not, write to the Free Software 00016 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 00017 */ 00018 00019 FILE_LICENCE ( GPL2_OR_LATER ); 00020 00021 #include <gpxe/interface.h> 00022 00023 /** @file 00024 * 00025 * Object communication interfaces 00026 * 00027 */ 00028 00029 /** 00030 * Plug an interface into a new destination interface 00031 * 00032 * @v intf Interface 00033 * @v dest New destination interface 00034 * 00035 * The reference to the existing destination interface is dropped, a 00036 * reference to the new destination interface is obtained, and the 00037 * interface is updated to point to the new destination interface. 00038 * 00039 * Note that there is no "unplug" call; instead you must plug the 00040 * interface into a null interface. 00041 */ 00042 void plug ( struct interface *intf, struct interface *dest ) { 00043 DBGC ( intf, "INTF %p moving from INTF %p to INTF %p\n", 00044 intf, intf->dest, dest ); 00045 intf_put ( intf->dest ); 00046 intf->dest = intf_get ( dest ); 00047 } 00048 00049 /** 00050 * Plug two interfaces together 00051 * 00052 * @v a Interface A 00053 * @v b Interface B 00054 * 00055 * Plugs interface A into interface B, and interface B into interface 00056 * A. (The basic plug() function is unidirectional; this function is 00057 * merely a shorthand for two calls to plug(), hence the name.) 00058 */ 00059 void plug_plug ( struct interface *a, struct interface *b ) { 00060 plug ( a, b ); 00061 plug ( b, a ); 00062 }
1.5.7.1