comedi_pci.h revision d72187b7cd4bac8eb9f87cabbb8d537145dc4bad
1/* 2 comedi/drivers/comedi_pci.h 3 Various PCI functions for drivers. 4 5 Copyright (C) 2007 MEV Ltd. <http://www.mev.co.uk/> 6 7 COMEDI - Linux Control and Measurement Device Interface 8 Copyright (C) 2000 David A. Schleef <ds@schleef.org> 9 10 This program is free software; you can redistribute it and/or modify 11 it under the terms of the GNU General Public License as published by 12 the Free Software Foundation; either version 2 of the License, or 13 (at your option) any later version. 14 15 This program is distributed in the hope that it will be useful, 16 but WITHOUT ANY WARRANTY; without even the implied warranty of 17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 GNU General Public License for more details. 19 20 You should have received a copy of the GNU General Public License 21 along with this program; if not, write to the Free Software 22 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 23 24*/ 25 26#ifndef _COMEDI_PCI_H_ 27#define _COMEDI_PCI_H_ 28 29#include <linux/pci.h> 30 31/* 32 * Enables PCI device without requesting regions. Just a simple wrapper 33 * for pci_enable_device(). 34 */ 35static inline int comedi_pci_enable_no_regions(struct pci_dev *pdev) 36{ 37 return pci_enable_device(pdev); 38} 39 40/* 41 * Called to disable PCI device if PCI device has been enabled, but 42 * PCI regions have not been reserved. 43 * 44 * It only disables the PCI device if the kernel supports reference 45 * counting of PCI enables, otherwise it might stop the device working 46 * in another driver instance. 47 */ 48static inline void comedi_pci_disable_no_regions(struct pci_dev *pdev) 49{ 50 pci_disable_device(pdev); 51} 52 53/* 54 * Enable the PCI device and request the regions. 55 */ 56static inline int comedi_pci_enable(struct pci_dev *pdev, const char *res_name) 57{ 58 int rc; 59 60 rc = pci_enable_device(pdev); 61 if (rc < 0) 62 return rc; 63 64 rc = pci_request_regions(pdev, res_name); 65 if (rc < 0) 66 comedi_pci_disable_no_regions(pdev); 67 68 return rc; 69} 70 71/* 72 * Release the regions and disable the PCI device. 73 * 74 * This must be matched with a previous successful call to comedi_pci_enable(). 75 */ 76static inline void comedi_pci_disable(struct pci_dev *pdev) 77{ 78 pci_release_regions(pdev); 79 pci_disable_device(pdev); 80} 81 82#endif 83