1/*	$NetBSD: pciio.h,v 1.5 2016/09/24 23:12:54 mrg Exp $	*/
  2
  3/*
  4 * Copyright 2001 Wasabi Systems, Inc.
  5 * All rights reserved.
  6 *
  7 * Written by Jason R. Thorpe for Wasabi Systems, Inc.
  8 *
  9 * Redistribution and use in source and binary forms, with or without
 10 * modification, are permitted provided that the following conditions
 11 * are met:
 12 * 1. Redistributions of source code must retain the above copyright
 13 *    notice, this list of conditions and the following disclaimer.
 14 * 2. Redistributions in binary form must reproduce the above copyright
 15 *    notice, this list of conditions and the following disclaimer in the
 16 *    documentation and/or other materials provided with the distribution.
 17 * 3. All advertising materials mentioning features or use of this software
 18 *    must display the following acknowledgement:
 19 *	This product includes software developed for the NetBSD Project by
 20 *	Wasabi Systems, Inc.
 21 * 4. The name of Wasabi Systems, Inc. may not be used to endorse
 22 *    or promote products derived from this software without specific prior
 23 *    written permission.
 24 *
 25 * THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``AS IS'' AND
 26 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
 27 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 28 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL WASABI SYSTEMS, INC
 29 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 30 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 31 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 32 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 33 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 34 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 35 * POSSIBILITY OF SUCH DAMAGE.
 36 */
 37
 38#ifndef _DEV_PCI_PCIIO_H_
 39#define	_DEV_PCI_PCIIO_H_
 40
 41/*
 42 * User -> kernel interface for PCI bus access.
 43 */
 44
 45#include <sys/ioccom.h>
 46
 47/*
 48 * pciio_cfgreg:
 49 *
 50 *	Representation of a PCI config space register.
 51 */
 52struct pciio_cfgreg {
 53	u_int	 reg;	/* offset into PCI configuration space */
 54	uint32_t val;	/* value of the register */
 55};
 56
 57/*
 58 * Read and write PCI configuration space registers on a
 59 * specific device.
 60 */
 61#define	PCI_IOC_CFGREAD		_IOWR('P', 0, struct pciio_cfgreg)
 62#define	PCI_IOC_CFGWRITE	 _IOW('P', 1, struct pciio_cfgreg)
 63
 64/*
 65 * pciio_bdf_cfgreg:
 66 *
 67 *	Like pciio_cfgreg, except for any bus/dev/func within
 68 *	a given PCI domain.
 69 */
 70struct pciio_bdf_cfgreg {
 71	u_int	bus;
 72	u_int	device;
 73	u_int	function;
 74	struct pciio_cfgreg cfgreg;
 75};
 76
 77/*
 78 * Read and write PCI configuration space registers on any
 79 * device within a given PCI domain.
 80 */
 81#define	PCI_IOC_BDF_CFGREAD	_IOWR('P', 2, struct pciio_bdf_cfgreg)
 82#define	PCI_IOC_BDF_CFGWRITE	 _IOW('P', 3, struct pciio_bdf_cfgreg)
 83
 84/*
 85 * pciio_businfo:
 86 *
 87 *	Information for a PCI bus (autoconfiguration node) instance.
 88 */
 89struct pciio_businfo {
 90	u_int	busno;		/* bus number */
 91	u_int	maxdevs;	/* max devices on bus */
 92};
 93
 94#define	PCI_IOC_BUSINFO		 _IOR('P', 4, struct pciio_businfo)
 95
 96/*
 97 * pciio_drvname:
 98 *
 99 *      Driver info for a PCI device (autoconfiguration node) instance.
100 */
101
102/* The old drvname must be run on the correct bus. */
103#define PCI_IO_DRVNAME_LEN	16
104struct pciio_drvname {
105	u_int	device;				/* in: device number */
106	u_int	function;			/* in: function number */
107	char	name[PCI_IO_DRVNAME_LEN];
108};
109#define	PCI_IOC_DRVNAME		_IOWR('P', 5, struct pciio_drvname)
110
111struct pciio_drvnameonbus {
112	u_int	bus;				/* in: (autoconf) bus number */
113	u_int	device;				/* in: device number */
114	u_int	function;			/* in: function number */
115	char	name[PCI_IO_DRVNAME_LEN];
116};
117#define	PCI_IOC_DRVNAMEONBUS	_IOWR('P', 5, struct pciio_drvnameonbus)
118
119
120#endif /* _DEV_PCI_PCIIO_H_ */