xref: /netbsd/sys/arch/i386/stand/lib/biospci.c (revision bf9ec67e)
1 /*	$NetBSD: biospci.c,v 1.2 1997/03/22 01:48:27 thorpej Exp $	 */
2 
3 /*
4  * Copyright (c) 1996
5  *	Matthias Drochner.  All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  * 1. Redistributions of source code must retain the above copyright
11  *    notice, this list of conditions and the following disclaimer.
12  * 2. Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  * 3. All advertising materials mentioning features or use of this software
16  *    must display the following acknowledgement:
17  *	This product includes software developed for the NetBSD Project
18  *	by Matthias Drochner.
19  * 4. The name of the author may not be used to endorse or promote products
20  *    derived from this software without specific prior written permission.
21  *
22  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
23  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
24  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
25  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
26  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
27  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
31  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32  *
33  */
34 
35 /*
36  * basic PCI functions for libsa needs lowlevel parts from bios_pci.S
37  */
38 
39 #include <lib/libsa/stand.h>
40 
41 #include "pcivar.h"
42 
43 extern int pcibios_present __P((int *));
44 extern int pcibios_finddev __P((int, int, int, unsigned int *));
45 extern int pcibios_cfgread __P((unsigned int, int, int *));
46 extern int pcibios_cfgwrite __P((unsigned int, int, int));
47 
48 #define PCISIG ('P' | ('C' << 8) | ('I' << 16) | (' ' << 24))
49 
50 int
51 pcicheck()
52 {
53 	int             ret, sig;
54 
55 	ret = pcibios_present(&sig);
56 
57 	if ((ret & 0xff00) || (sig != PCISIG))
58 		return (-1);
59 
60 	return (0);
61 }
62 
63 int
64 pcifinddev(vid, did, handle)
65 	int             vid, did;
66 	pcihdl_t       *handle;
67 {
68 	int             ret;
69 
70 	*handle = 0;
71 
72 	ret = pcibios_finddev(vid, did, 0, handle);
73 
74 	if (ret)
75 		return (-1);
76 
77 	return (0);
78 }
79 
80 int
81 pcicfgread(handle, off, val)
82 	pcihdl_t       *handle;
83 	int             off;
84 	int            *val;
85 {
86 	int             ret;
87 
88 	ret = pcibios_cfgread(*handle, off, val);
89 
90 	if (ret)
91 		return (-1);
92 
93 	return (0);
94 }
95 
96 int
97 pcicfgwrite(handle, off, val)
98 	pcihdl_t       *handle;
99 	int             off;
100 	int             val;
101 {
102 	int             ret;
103 
104 	ret = pcibios_cfgwrite(*handle, off, val);
105 
106 	if (ret)
107 		return (-1);
108 
109 	return (0);
110 }
111