1 #-
2 # SPDX-License-Identifier: BSD-2-Clause
3 #
4 # Copyright © 2021-2022 Dmitry Salychev
5 #
6 # Redistribution and use in source and binary forms, with or without
7 # modification, are permitted provided that the following conditions
8 # are met:
9 # 1. Redistributions of source code must retain the above copyright
10 # notice, this list of conditions and the following disclaimer.
11 # 2. Redistributions in binary form must reproduce the above copyright
12 # notice, this list of conditions and the following disclaimer in the
13 # documentation and/or other materials provided with the distribution.
14 #
15 # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16 # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18 # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19 # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20 # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21 # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22 # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23 # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24 # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25 # SUCH DAMAGE.
26 #
27
28 #include <machine/bus.h>
29 #include <dev/dpaa2/dpaa2_mc.h>
30
31 /**
32 * @brief Interface of the DPAA2 Management Complex (MC) bus driver.
33 *
34 * It helps to manipulate DPAA2-specific resources (DPIOs, DPBPs, etc.)
35 */
36 INTERFACE dpaa2_mc;
37
38 #
39 # Default implementation of the commands.
40 #
41 CODE {
42 static int
43 bypass_manage_dev(device_t dev, device_t dpaa2_dev, uint32_t flags)
44 {
45 if (device_get_parent(dev) != NULL)
46 return (DPAA2_MC_MANAGE_DEV(device_get_parent(dev),
47 dpaa2_dev, flags));
48 return (ENXIO);
49 }
50
51 static int
52 bypass_get_free_dev(device_t dev, device_t *dpaa2_dev,
53 enum dpaa2_dev_type devtype)
54 {
55 if (device_get_parent(dev) != NULL)
56 return (DPAA2_MC_GET_FREE_DEV(device_get_parent(dev),
57 dpaa2_dev, devtype));
58 return (ENXIO);
59 }
60
61 static int
62 bypass_get_dev(device_t dev, device_t *dpaa2_dev,
63 enum dpaa2_dev_type devtype, uint32_t obj_id)
64 {
65 if (device_get_parent(dev) != NULL)
66 return (DPAA2_MC_GET_DEV(device_get_parent(dev),
67 dpaa2_dev, devtype, obj_id));
68 return (ENXIO);
69 }
70
71 static int
72 bypass_get_shared_dev(device_t dev, device_t *dpaa2_dev,
73 enum dpaa2_dev_type devtype)
74 {
75 if (device_get_parent(dev) != NULL)
76 return (DPAA2_MC_GET_SHARED_DEV(device_get_parent(dev),
77 dpaa2_dev, devtype));
78 return (ENXIO);
79 }
80
81 static int
82 bypass_reserve_dev(device_t dev, device_t dpaa2_dev,
83 enum dpaa2_dev_type devtype)
84 {
85 if (device_get_parent(dev) != NULL)
86 return (DPAA2_MC_RESERVE_DEV(device_get_parent(dev),
87 dpaa2_dev, devtype));
88 return (ENXIO);
89 }
90
91 static int
92 bypass_release_dev(device_t dev, device_t dpaa2_dev,
93 enum dpaa2_dev_type devtype)
94 {
95 if (device_get_parent(dev) != NULL)
96 return (DPAA2_MC_RELEASE_DEV(device_get_parent(dev),
97 dpaa2_dev, devtype));
98 return (ENXIO);
99 }
100
101 static int
102 bypass_get_phy_dev(device_t dev, device_t *phy_dev, uint32_t id)
103 {
104 if (device_get_parent(dev) != NULL)
105 return (DPAA2_MC_GET_PHY_DEV(device_get_parent(dev),
106 phy_dev, id));
107 return (ENXIO);
108 }
109 }
110
111 METHOD int manage_dev {
112 device_t dev;
113 device_t dpaa2_dev;
114 uint32_t flags;
115 } DEFAULT bypass_manage_dev;
116
117 METHOD int get_free_dev {
118 device_t dev;
119 device_t *dpaa2_dev;
120 enum dpaa2_dev_type devtype;
121 } DEFAULT bypass_get_free_dev;
122
123 METHOD int get_dev {
124 device_t dev;
125 device_t *dpaa2_dev;
126 enum dpaa2_dev_type devtype;
127 uint32_t obj_id;
128 } DEFAULT bypass_get_dev;
129
130 METHOD int get_shared_dev {
131 device_t dev;
132 device_t *dpaa2_dev;
133 enum dpaa2_dev_type devtype;
134 } DEFAULT bypass_get_shared_dev;
135
136 METHOD int reserve_dev {
137 device_t dev;
138 device_t dpaa2_dev;
139 enum dpaa2_dev_type devtype;
140 } DEFAULT bypass_reserve_dev;
141
142 METHOD int release_dev {
143 device_t dev;
144 device_t dpaa2_dev;
145 enum dpaa2_dev_type devtype;
146 } DEFAULT bypass_release_dev;
147
148 METHOD int get_phy_dev {
149 device_t dev;
150 device_t *phy_dev;
151 uint32_t id;
152 } DEFAULT bypass_get_phy_dev;
Cache object: c757a0e15beef732ca01bf4916d8d428
|