xref: /freebsd/sys/dev/pci/pci_if.m (revision c668000b692a29b66b3836d8af066d17dccfc779)
1098ca2bdSWarner Losh#-
26182fdbdSPeter Wemm# Copyright (c) 1998 Doug Rabson
36182fdbdSPeter Wemm# All rights reserved.
46182fdbdSPeter Wemm#
56182fdbdSPeter Wemm# Redistribution and use in source and binary forms, with or without
66182fdbdSPeter Wemm# modification, are permitted provided that the following conditions
76182fdbdSPeter Wemm# are met:
86182fdbdSPeter Wemm# 1. Redistributions of source code must retain the above copyright
96182fdbdSPeter Wemm#    notice, this list of conditions and the following disclaimer.
106182fdbdSPeter Wemm# 2. Redistributions in binary form must reproduce the above copyright
116182fdbdSPeter Wemm#    notice, this list of conditions and the following disclaimer in the
126182fdbdSPeter Wemm#    documentation and/or other materials provided with the distribution.
136182fdbdSPeter Wemm#
146182fdbdSPeter Wemm# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
156182fdbdSPeter Wemm# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
166182fdbdSPeter Wemm# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
176182fdbdSPeter Wemm# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
186182fdbdSPeter Wemm# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
196182fdbdSPeter Wemm# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
206182fdbdSPeter Wemm# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
216182fdbdSPeter Wemm# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
226182fdbdSPeter Wemm# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
236182fdbdSPeter Wemm# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
246182fdbdSPeter Wemm# SUCH DAMAGE.
256182fdbdSPeter Wemm#
26c3aac50fSPeter Wemm# $FreeBSD$
276182fdbdSPeter Wemm#
286182fdbdSPeter Wemm
29f7b77691SDoug Rabson#include <sys/bus.h>
30f7b77691SDoug Rabson
316182fdbdSPeter WemmINTERFACE pci;
326182fdbdSPeter Wemm
339bf4c9c1SJohn BaldwinCODE {
349bf4c9c1SJohn Baldwin	static int
359bf4c9c1SJohn Baldwin	null_msi_count(device_t dev, device_t child)
369bf4c9c1SJohn Baldwin	{
379bf4c9c1SJohn Baldwin		return (0);
389bf4c9c1SJohn Baldwin	}
399bf4c9c1SJohn Baldwin};
409bf4c9c1SJohn Baldwin
419bf4c9c1SJohn Baldwin
426182fdbdSPeter WemmMETHOD u_int32_t read_config {
436182fdbdSPeter Wemm	device_t	dev;
446182fdbdSPeter Wemm	device_t	child;
456182fdbdSPeter Wemm	int		reg;
466182fdbdSPeter Wemm	int		width;
476182fdbdSPeter Wemm};
486182fdbdSPeter Wemm
496182fdbdSPeter WemmMETHOD void write_config {
506182fdbdSPeter Wemm	device_t	dev;
516182fdbdSPeter Wemm	device_t	child;
526182fdbdSPeter Wemm	int		reg;
536182fdbdSPeter Wemm	u_int32_t	val;
546182fdbdSPeter Wemm	int		width;
556182fdbdSPeter Wemm};
569eb13b39SPeter Wemm
579eb13b39SPeter WemmMETHOD int get_powerstate {
589eb13b39SPeter Wemm	device_t	dev;
599eb13b39SPeter Wemm	device_t	child;
609eb13b39SPeter Wemm};
619eb13b39SPeter Wemm
629eb13b39SPeter WemmMETHOD int set_powerstate {
639eb13b39SPeter Wemm	device_t	dev;
649eb13b39SPeter Wemm	device_t	child;
659eb13b39SPeter Wemm	int		state;
669eb13b39SPeter Wemm};
679eb13b39SPeter Wemm
68667dc26eSJohn-Mark GurneyMETHOD int get_vpd_ident {
69667dc26eSJohn-Mark Gurney	device_t	dev;
70667dc26eSJohn-Mark Gurney	device_t	child;
71667dc26eSJohn-Mark Gurney	const char	**identptr;
72667dc26eSJohn-Mark Gurney};
73667dc26eSJohn-Mark Gurney
74667dc26eSJohn-Mark GurneyMETHOD int get_vpd_readonly {
75667dc26eSJohn-Mark Gurney	device_t	dev;
76667dc26eSJohn-Mark Gurney	device_t	child;
77667dc26eSJohn-Mark Gurney	const char	*kw;
78667dc26eSJohn-Mark Gurney	const char	**vptr;
79667dc26eSJohn-Mark Gurney};
80667dc26eSJohn-Mark Gurney
81c047e5b1SMatthew N. DoddMETHOD int enable_busmaster {
829eb13b39SPeter Wemm	device_t	dev;
839eb13b39SPeter Wemm	device_t	child;
849eb13b39SPeter Wemm};
859eb13b39SPeter Wemm
86c047e5b1SMatthew N. DoddMETHOD int disable_busmaster {
879eb13b39SPeter Wemm	device_t	dev;
889eb13b39SPeter Wemm	device_t	child;
899eb13b39SPeter Wemm};
909eb13b39SPeter Wemm
91c047e5b1SMatthew N. DoddMETHOD int enable_io {
929eb13b39SPeter Wemm	device_t	dev;
939eb13b39SPeter Wemm	device_t	child;
949eb13b39SPeter Wemm	int		space;
959eb13b39SPeter Wemm};
969eb13b39SPeter Wemm
97c047e5b1SMatthew N. DoddMETHOD int disable_io {
989eb13b39SPeter Wemm	device_t	dev;
999eb13b39SPeter Wemm	device_t	child;
1009eb13b39SPeter Wemm	int		space;
1019eb13b39SPeter Wemm};
1023920999dSThomas Moestl
1033920999dSThomas MoestlMETHOD int assign_interrupt {
1043920999dSThomas Moestl	device_t	dev;
1053920999dSThomas Moestl	device_t	child;
1063920999dSThomas Moestl};
1074f9795b9SJohn Baldwin
108*c668000bSJohn BaldwinMETHOD int find_cap {
109*c668000bSJohn Baldwin	device_t	dev;
110*c668000bSJohn Baldwin	device_t	child;
111*c668000bSJohn Baldwin	int		capability;
112*c668000bSJohn Baldwin	int		*capreg;
113*c668000bSJohn Baldwin};
114*c668000bSJohn Baldwin
1154f9795b9SJohn BaldwinMETHOD int find_extcap {
1164f9795b9SJohn Baldwin	device_t	dev;
1174f9795b9SJohn Baldwin	device_t	child;
1184f9795b9SJohn Baldwin	int		capability;
1194f9795b9SJohn Baldwin	int		*capreg;
1204f9795b9SJohn Baldwin};
1219bf4c9c1SJohn Baldwin
122*c668000bSJohn BaldwinMETHOD int find_htcap {
123*c668000bSJohn Baldwin	device_t	dev;
124*c668000bSJohn Baldwin	device_t	child;
125*c668000bSJohn Baldwin	int		capability;
126*c668000bSJohn Baldwin	int		*capreg;
127*c668000bSJohn Baldwin};
128*c668000bSJohn Baldwin
1299bf4c9c1SJohn BaldwinMETHOD int alloc_msi {
1309bf4c9c1SJohn Baldwin	device_t	dev;
1319bf4c9c1SJohn Baldwin	device_t	child;
1329bf4c9c1SJohn Baldwin	int		*count;
1339bf4c9c1SJohn Baldwin};
1349bf4c9c1SJohn Baldwin
1355fe82bcaSJohn BaldwinMETHOD int alloc_msix {
1365fe82bcaSJohn Baldwin	device_t	dev;
1375fe82bcaSJohn Baldwin	device_t	child;
1385fe82bcaSJohn Baldwin	int		*count;
1395fe82bcaSJohn Baldwin};
1405fe82bcaSJohn Baldwin
1415fe82bcaSJohn BaldwinMETHOD int remap_msix {
1425fe82bcaSJohn Baldwin	device_t	dev;
1435fe82bcaSJohn Baldwin	device_t	child;
144e706f7f0SJohn Baldwin	int		count;
145e706f7f0SJohn Baldwin	const u_int	*vectors;
1465fe82bcaSJohn Baldwin};
1475fe82bcaSJohn Baldwin
1489bf4c9c1SJohn BaldwinMETHOD int release_msi {
1499bf4c9c1SJohn Baldwin	device_t	dev;
1509bf4c9c1SJohn Baldwin	device_t	child;
1519bf4c9c1SJohn Baldwin};
1529bf4c9c1SJohn Baldwin
1539bf4c9c1SJohn BaldwinMETHOD int msi_count {
1549bf4c9c1SJohn Baldwin	device_t	dev;
1559bf4c9c1SJohn Baldwin	device_t	child;
1569bf4c9c1SJohn Baldwin} DEFAULT null_msi_count;
1575fe82bcaSJohn Baldwin
1585fe82bcaSJohn BaldwinMETHOD int msix_count {
1595fe82bcaSJohn Baldwin	device_t	dev;
1605fe82bcaSJohn Baldwin	device_t	child;
1615fe82bcaSJohn Baldwin} DEFAULT null_msi_count;
162