1 /** 2 * @file me4600_di.h 3 * 4 * @brief ME-4000 digital input subdevice class. 5 * @note Copyright (C) 2007 Meilhaus Electronic GmbH (support@meilhaus.de) 6 * @author Guenter Gebhardt 7 */ 8 9 /* 10 * Copyright (C) 2007 Meilhaus Electronic GmbH (support@meilhaus.de) 11 * 12 * This file is free software; you can redistribute it and/or modify 13 * it under the terms of the GNU General Public License as published by 14 * the Free Software Foundation; either version 2 of the License, or 15 * (at your option) any later version. 16 * 17 * This program is distributed in the hope that it will be useful, 18 * but WITHOUT ANY WARRANTY; without even the implied warranty of 19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 20 * GNU General Public License for more details. 21 * 22 * You should have received a copy of the GNU General Public License 23 * along with this program; if not, write to the Free Software 24 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 25 */ 26 27 #ifndef _ME4600_DI_H_ 28 #define _ME4600_DI_H_ 29 30 #include "mesubdevice.h" 31 32 #ifdef __KERNEL__ 33 34 /** 35 * @brief The template subdevice class. 36 */ 37 typedef struct me4600_di_subdevice { 38 /* Inheritance */ 39 me_subdevice_t base; /**< The subdevice base class. */ 40 41 /* Attributes */ 42 spinlock_t subdevice_lock; /**< Spin lock to protect the subdevice from concurrent access. */ 43 spinlock_t *ctrl_reg_lock; /**< Spin lock to protect #ctrl_reg from concurrent access. */ 44 45 unsigned long port_reg; /**< Register holding the port status. */ 46 unsigned long ctrl_reg; /**< Register to configure the port direction. */ 47 #ifdef MEDEBUG_DEBUG_REG 48 unsigned long reg_base; 49 #endif 50 } me4600_di_subdevice_t; 51 52 /** 53 * @brief The constructor to generate a ME-4000 digital input subdevice instance. 54 * 55 * @param reg_base The register base address of the device as returned by the PCI BIOS. 56 * 57 * @return Pointer to new instance on success.\n 58 * NULL on error. 59 */ 60 me4600_di_subdevice_t *me4600_di_constructor(uint32_t reg_base, 61 spinlock_t * ctrl_reg_lock); 62 63 #endif 64 #endif 65