1 /** 2 * @file me8200_do.h 3 * 4 * @brief ME-8200 digital output 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 _ME8200_DO_H_ 28 #define _ME8200_DO_H_ 29 30 #include "mesubdevice.h" 31 32 #ifdef __KERNEL__ 33 34 /** 35 * @brief The template subdevice class. 36 */ 37 typedef struct me8200_do_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 *irq_mode_lock; 44 45 int irq; /**< The number of the interrupt request */ 46 int rised; /**< Flag to indicate if an interrupt occured */ 47 int count; /**< Counts the number of interrupts occured */ 48 wait_queue_head_t wait_queue; /**< To wait on interrupts */ 49 50 unsigned int do_idx; /**< The number of the digital output */ 51 52 unsigned long port_reg; /**< The digital output port */ 53 unsigned long irq_ctrl_reg; /**< The interrupt control register */ 54 unsigned long irq_status_reg; /**< The interrupt status register */ 55 #ifdef MEDEBUG_DEBUG_REG 56 unsigned long reg_base; 57 #endif 58 } me8200_do_subdevice_t; 59 60 /** 61 * @brief The constructor to generate a ME-8200 digital output subdevice instance. 62 * 63 * @param reg_base The register base address of the device as returned by the PCI BIOS. 64 * @param do_idx The index of the digital output subdevice on this device. 65 * 66 * @return Pointer to new instance on success.\n 67 * NULL on error. 68 */ 69 me8200_do_subdevice_t *me8200_do_constructor(uint32_t reg_base, 70 unsigned int do_idx, 71 int irq, 72 spinlock_t * irq_mode_lock); 73 74 #endif 75 #endif 76