1 /* 2 * Copyright (C) 2006 Michael Brown <mbrown (at) fensystems.co.uk>. 3 * 4 * This program is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU General Public License as 6 * published by the Free Software Foundation; either version 2 of the 7 * License, or any later version. 8 * 9 * This program is distributed in the hope that it will be useful, but 10 * WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * General Public License for more details. 13 * 14 * You should have received a copy of the GNU General Public License 15 * along with this program; if not, write to the Free Software 16 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 17 */ 18 19 FILE_LICENCE ( GPL2_OR_LATER ); 20 21 #include <gpxe/bitbash.h> 22 23 /** @file 24 * 25 * Bit-bashing interfaces 26 * 27 */ 28 29 /** 30 * Set/clear output bit 31 * 32 * @v basher Bit-bashing interface 33 * @v bit_id Bit number 34 * @v data Value to write 35 * 36 * If @c data is 0, a logic 0 will be written. If @c data is 37 * non-zero, a logic 1 will be written. 38 */ 39 void write_bit ( struct bit_basher *basher, unsigned int bit_id, 40 unsigned long data ) { 41 basher->op->write ( basher, bit_id, ( data ? -1UL : 0 ) ); 42 } 43 44 /** 45 * Read input bit 46 * 47 * @v basher Bit-bashing interface 48 * @v bit_id Bit number 49 * @ret data Value read 50 * 51 * @c data will always be either 0 or -1UL. The idea is that the 52 * caller can simply binary-AND the returned value with whatever mask 53 * it needs to apply. 54 */ 55 int read_bit ( struct bit_basher *basher, unsigned int bit_id ) { 56 return ( basher->op->read ( basher, bit_id ) ? -1UL : 0 ); 57 } 58