source: rtems/cpukit/libdrvmgr/drvmgr_drvinf.c @ c130387

Last change on this file since c130387 was 246fe22, checked in by Daniel Hellstrom <daniel@…>, on Apr 13, 2015 at 9:07:54 AM

DRVMGR: change name of freq_get to get_freq

  • Property mode set to 100644
File size: 2.9 KB
Line 
1/* Driver Manager Driver Interface Implementation.
2 *
3 * COPYRIGHT (c) 2009 Cobham Gaisler AB.
4 *
5 * The license and distribution terms for this file may be
6 * found in the file LICENSE in this distribution or at
7 * http://www.rtems.org/license/LICENSE.
8 *
9 */
10
11/*
12 * This is the part the device driver API, the functions rely on that the
13 * parent bus driver has implemented the neccessary operations correctly.
14 *
15 */
16
17#include <stdio.h>
18#include <stdlib.h>
19#include <string.h>
20
21#include <drvmgr/drvmgr.h>
22#include "drvmgr_internal.h"
23
24/* Get device pointer from knowing the Driver and the Driver minor
25 * that was assigned to it
26 */
27int drvmgr_get_dev(
28        struct drvmgr_drv *drv,
29        int minor,
30        struct drvmgr_dev **pdev)
31{
32        struct drvmgr_dev *dev;
33        if (!drv)
34                return -1;
35
36        DRVMGR_LOCK_READ();
37        dev = drv->dev;
38        while (dev) {
39                if (dev->minor_drv == minor)
40                        break;
41                dev = dev->next_in_drv;
42        }
43        DRVMGR_UNLOCK();
44        if (!dev)
45                return -1;
46        if (pdev)
47                *pdev = dev;
48        return 0;
49}
50
51/* Get Bus frequency in HZ from bus driver */
52int drvmgr_freq_get(
53        struct drvmgr_dev *dev,
54        int options,
55        unsigned int *freq_hz)
56{
57        if (!dev || !dev->parent || !dev->parent->ops->get_freq)
58                return -1;
59
60        return dev->parent->ops->get_freq(dev, options, freq_hz);
61}
62
63/* Get driver prefix */
64int drvmgr_get_dev_prefix(struct drvmgr_dev *dev, char *dev_prefix)
65{
66        struct drvmgr_bus_params params;
67        if (!dev || !dev->parent || !dev->parent->ops->get_params)
68                return -1;
69
70        dev->parent->ops->get_params(dev, &params);
71        if (!params.dev_prefix)
72                return -1;
73        if (dev_prefix)
74                strcpy(dev_prefix, params.dev_prefix);
75        return 0;
76}
77
78/* Register an interrupt */
79int drvmgr_interrupt_register(
80        struct drvmgr_dev *dev,
81        int index,
82        const char *info,
83        drvmgr_isr isr,
84        void *arg)
85{
86        if (!dev || !dev->parent || !dev->parent->ops->int_register)
87                return -1;
88
89        if (!isr)
90                return -1;
91
92        return dev->parent->ops->int_register(dev, index, info, isr, arg);
93}
94
95/* Unregister an interrupt */
96int drvmgr_interrupt_unregister(
97        struct drvmgr_dev *dev,
98        int index,
99        drvmgr_isr isr,
100        void *arg)
101{
102        if (!dev || !dev->parent || !dev->parent->ops->int_unregister)
103                return -1;
104
105        if (!isr)
106                return -1;
107
108        return dev->parent->ops->int_unregister(dev, index, isr, arg);
109}
110
111int drvmgr_interrupt_clear(
112        struct drvmgr_dev *dev,
113        int index)
114{
115        if (!dev || !dev->parent || !dev->parent->ops->int_clear)
116                return -1;
117
118        return dev->parent->ops->int_clear(dev, index);
119}
120
121int drvmgr_interrupt_unmask(
122        struct drvmgr_dev *dev,
123        int index)
124{
125        if (!dev || !dev->parent || !dev->parent->ops->int_unmask)
126                return -1;
127
128        return dev->parent->ops->int_unmask(dev, index);
129}
130
131int drvmgr_interrupt_mask(
132        struct drvmgr_dev *dev,
133        int index)
134{
135        if (!dev || !dev->parent || !dev->parent->ops->int_mask)
136                return -1;
137
138        return dev->parent->ops->int_mask(dev, index);
139}
140
141int drvmgr_on_rootbus(struct drvmgr_dev *dev)
142{
143        if (dev->parent && dev->parent->dev && dev->parent->dev->parent)
144                return 0;
145        else
146                return 1;
147}
Note: See TracBrowser for help on using the repository browser.