]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/dev/superio/superio.h
Avoid relying on header pollution from sys/refcount.h.
[FreeBSD/FreeBSD.git] / sys / dev / superio / superio.h
1 /*
2  * Copyright (c) 2016 Andriy Gapon
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS AS IS'' AND
14  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
17  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
23  * SUCH DAMAGE.
24  *
25  * $FreeBSD$
26  */
27
28 #ifndef SUPERIO_H
29 #define SUPERIO_H
30
31 typedef enum superio_vendor {
32         SUPERIO_VENDOR_NONE,
33         SUPERIO_VENDOR_ITE,
34         SUPERIO_VENDOR_NUVOTON,
35         SUPERIO_VENDOR_MAX
36 } superio_vendor_t;
37
38 typedef enum superio_dev_type {
39         SUPERIO_DEV_NONE,
40         SUPERIO_DEV_HWM,
41         SUPERIO_DEV_WDT,
42         SUPERIO_DEV_GPIO,
43         SUPERIO_DEV_MAX
44 } superio_dev_type_t;
45
46 superio_vendor_t superio_vendor(device_t dev);
47 uint16_t superio_devid(device_t dev);
48 uint8_t superio_revid(device_t dev);
49 uint8_t superio_read(device_t dev, uint8_t reg);
50 void superio_write(device_t dev, uint8_t reg, uint8_t val);
51 bool superio_dev_enabled(device_t dev, uint8_t mask);
52 void superio_dev_enable(device_t dev, uint8_t mask);
53 void superio_dev_disable(device_t dev, uint8_t mask);
54
55 device_t superio_find_dev(device_t superio, superio_dev_type_t type,
56     int ldn);
57
58 enum superio_ivars {
59         SUPERIO_IVAR_LDN =      10600,
60         SUPERIO_IVAR_TYPE,
61         SUPERIO_IVAR_IOBASE,
62         SUPERIO_IVAR_IOBASE2,
63         SUPERIO_IVAR_IRQ,
64         SUPERIO_IVAR_DMA
65 };
66
67 #define SUPERIO_ACCESSOR(var, ivar, type)                               \
68         __BUS_ACCESSOR(superio, var, SUPERIO, ivar, type)
69
70 SUPERIO_ACCESSOR(ldn,           LDN,            uint8_t)
71 SUPERIO_ACCESSOR(type,          TYPE,           superio_dev_type_t)
72 SUPERIO_ACCESSOR(iobase,        IOBASE,         uint16_t)
73 SUPERIO_ACCESSOR(iobase2,       IOBASE2,        uint16_t)
74 SUPERIO_ACCESSOR(irq,           IRQ,            uint8_t)
75 SUPERIO_ACCESSOR(dma,           DMA,            uint8_t)
76
77 #undef SUPERIO_ACCESSOR
78
79 #endif /*SUPERIO_H*/