Project

General

Profile

Statistics
| Revision:

root / lab4 / .minix-src / include / dev / pci / pciio.h @ 14

History | View | Annotate | Download (3.97 KB)

1
/*        $NetBSD: pciio.h,v 1.4 2014/07/25 01:38:26 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
 */
52
struct 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
 */
70
struct 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
 */
89
struct 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
 *      Must be run on the correct bus.
101
 */
102

    
103
#define PCI_IO_DRVNAME_LEN        16
104
struct 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

    
110
#define        PCI_IOC_DRVNAME                _IOWR('P', 5, struct pciio_drvname)
111

    
112

    
113
#if defined(__minix)
114
struct pciio_map {
115
        int        flags;                /* reserved, must be 0 */
116
        u_int        phys_offset;
117
        size_t        size;
118
        int        readonly;
119
        char        reserved[36];        /* reserved, must be 0 */
120
        void        *vaddr;
121
        void        *vaddr_ret;
122
};
123

    
124
#define        PCI_IOC_MAP                _IOWR('P', 100, struct pciio_map)
125
#define        PCI_IOC_UNMAP                 _IOW('P', 101, struct pciio_map)
126

    
127
struct pciio_acl {
128
        u_int        domain;
129
        u_int        bus;
130
        u_int        device;
131
        u_int        function;
132
};
133

    
134
#define        PCI_IOC_RESERVE                 _IOW('P', 102, struct pciio_acl)
135
#define        PCI_IOC_RELEASE                 _IOW('P', 103, struct pciio_acl)
136
#endif /* defined(__minix) */
137
#endif /* _DEV_PCI_PCIIO_H_ */