1a9f23e00c17567cc4b7ce50cd07226f7bfb70da6David Schleef/*
2a9f23e00c17567cc4b7ce50cd07226f7bfb70da6David Schleef    comedi/drivers/comedi_pci.h
3a9f23e00c17567cc4b7ce50cd07226f7bfb70da6David Schleef    Various PCI functions for drivers.
4a9f23e00c17567cc4b7ce50cd07226f7bfb70da6David Schleef
5a9f23e00c17567cc4b7ce50cd07226f7bfb70da6David Schleef    Copyright (C) 2007 MEV Ltd. <http://www.mev.co.uk/>
6a9f23e00c17567cc4b7ce50cd07226f7bfb70da6David Schleef
7a9f23e00c17567cc4b7ce50cd07226f7bfb70da6David Schleef    COMEDI - Linux Control and Measurement Device Interface
8a9f23e00c17567cc4b7ce50cd07226f7bfb70da6David Schleef    Copyright (C) 2000 David A. Schleef <ds@schleef.org>
9a9f23e00c17567cc4b7ce50cd07226f7bfb70da6David Schleef
10a9f23e00c17567cc4b7ce50cd07226f7bfb70da6David Schleef    This program is free software; you can redistribute it and/or modify
11a9f23e00c17567cc4b7ce50cd07226f7bfb70da6David Schleef    it under the terms of the GNU General Public License as published by
12a9f23e00c17567cc4b7ce50cd07226f7bfb70da6David Schleef    the Free Software Foundation; either version 2 of the License, or
13a9f23e00c17567cc4b7ce50cd07226f7bfb70da6David Schleef    (at your option) any later version.
14a9f23e00c17567cc4b7ce50cd07226f7bfb70da6David Schleef
15a9f23e00c17567cc4b7ce50cd07226f7bfb70da6David Schleef    This program is distributed in the hope that it will be useful,
16a9f23e00c17567cc4b7ce50cd07226f7bfb70da6David Schleef    but WITHOUT ANY WARRANTY; without even the implied warranty of
17a9f23e00c17567cc4b7ce50cd07226f7bfb70da6David Schleef    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18a9f23e00c17567cc4b7ce50cd07226f7bfb70da6David Schleef    GNU General Public License for more details.
19a9f23e00c17567cc4b7ce50cd07226f7bfb70da6David Schleef
20a9f23e00c17567cc4b7ce50cd07226f7bfb70da6David Schleef    You should have received a copy of the GNU General Public License
21a9f23e00c17567cc4b7ce50cd07226f7bfb70da6David Schleef    along with this program; if not, write to the Free Software
22a9f23e00c17567cc4b7ce50cd07226f7bfb70da6David Schleef    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
23a9f23e00c17567cc4b7ce50cd07226f7bfb70da6David Schleef
24a9f23e00c17567cc4b7ce50cd07226f7bfb70da6David Schleef*/
25a9f23e00c17567cc4b7ce50cd07226f7bfb70da6David Schleef
26a9f23e00c17567cc4b7ce50cd07226f7bfb70da6David Schleef#ifndef _COMEDI_PCI_H_
27a9f23e00c17567cc4b7ce50cd07226f7bfb70da6David Schleef#define _COMEDI_PCI_H_
28a9f23e00c17567cc4b7ce50cd07226f7bfb70da6David Schleef
29a9f23e00c17567cc4b7ce50cd07226f7bfb70da6David Schleef#include <linux/pci.h>
30a9f23e00c17567cc4b7ce50cd07226f7bfb70da6David Schleef
31a9f23e00c17567cc4b7ce50cd07226f7bfb70da6David Schleef/*
32a9f23e00c17567cc4b7ce50cd07226f7bfb70da6David Schleef * Enable the PCI device and request the regions.
33a9f23e00c17567cc4b7ce50cd07226f7bfb70da6David Schleef */
34a9f23e00c17567cc4b7ce50cd07226f7bfb70da6David Schleefstatic inline int comedi_pci_enable(struct pci_dev *pdev, const char *res_name)
35a9f23e00c17567cc4b7ce50cd07226f7bfb70da6David Schleef{
36a9f23e00c17567cc4b7ce50cd07226f7bfb70da6David Schleef	int rc;
37a9f23e00c17567cc4b7ce50cd07226f7bfb70da6David Schleef
38a9f23e00c17567cc4b7ce50cd07226f7bfb70da6David Schleef	rc = pci_enable_device(pdev);
39d72187b7cd4bac8eb9f87cabbb8d537145dc4badGreg Kroah-Hartman	if (rc < 0)
40a9f23e00c17567cc4b7ce50cd07226f7bfb70da6David Schleef		return rc;
41d72187b7cd4bac8eb9f87cabbb8d537145dc4badGreg Kroah-Hartman
42a9f23e00c17567cc4b7ce50cd07226f7bfb70da6David Schleef	rc = pci_request_regions(pdev, res_name);
43d72187b7cd4bac8eb9f87cabbb8d537145dc4badGreg Kroah-Hartman	if (rc < 0)
445604ec6fb65ba388b698d8490f797267470b8b23Greg Kroah-Hartman		pci_disable_device(pdev);
45d72187b7cd4bac8eb9f87cabbb8d537145dc4badGreg Kroah-Hartman
46a9f23e00c17567cc4b7ce50cd07226f7bfb70da6David Schleef	return rc;
47a9f23e00c17567cc4b7ce50cd07226f7bfb70da6David Schleef}
48a9f23e00c17567cc4b7ce50cd07226f7bfb70da6David Schleef
49a9f23e00c17567cc4b7ce50cd07226f7bfb70da6David Schleef/*
50a9f23e00c17567cc4b7ce50cd07226f7bfb70da6David Schleef * Release the regions and disable the PCI device.
51a9f23e00c17567cc4b7ce50cd07226f7bfb70da6David Schleef *
52a9f23e00c17567cc4b7ce50cd07226f7bfb70da6David Schleef * This must be matched with a previous successful call to comedi_pci_enable().
53a9f23e00c17567cc4b7ce50cd07226f7bfb70da6David Schleef */
54a9f23e00c17567cc4b7ce50cd07226f7bfb70da6David Schleefstatic inline void comedi_pci_disable(struct pci_dev *pdev)
55a9f23e00c17567cc4b7ce50cd07226f7bfb70da6David Schleef{
56a9f23e00c17567cc4b7ce50cd07226f7bfb70da6David Schleef	pci_release_regions(pdev);
57a9f23e00c17567cc4b7ce50cd07226f7bfb70da6David Schleef	pci_disable_device(pdev);
58a9f23e00c17567cc4b7ce50cd07226f7bfb70da6David Schleef}
59a9f23e00c17567cc4b7ce50cd07226f7bfb70da6David Schleef
60a9f23e00c17567cc4b7ce50cd07226f7bfb70da6David Schleef#endif
61