gemini_lpcvar.h revision 1.2 1 1.2 cliff /* $NetBSD: gemini_lpcvar.h,v 1.2 2008/11/15 05:48:34 cliff Exp $ */
2 1.1 cliff
3 1.1 cliff #ifndef _ARM_GEMINI_LPCVAR_H
4 1.1 cliff #define _ARM_GEMINI_LPCVAR_H
5 1.1 cliff
6 1.1 cliff #include <sys/types.h>
7 1.1 cliff #include <sys/device.h>
8 1.1 cliff #include <machine/bus.h>
9 1.1 cliff
10 1.1 cliff #define GEMINI_LPC_LDN_ALL -1 /* "global" LDN */
11 1.1 cliff
12 1.1 cliff typedef void * lpctag_t;
13 1.1 cliff typedef void * lpcintrtag_t;
14 1.1 cliff
15 1.1 cliff typedef struct gemini_lpc_attach_args {
16 1.2 cliff lpctag_t lpc_tag;
17 1.1 cliff uint lpc_ldn;
18 1.1 cliff bus_addr_t lpc_base;
19 1.1 cliff bus_addr_t lpc_addr;
20 1.1 cliff bus_size_t lpc_size;
21 1.1 cliff uint lpc_intr;
22 1.1 cliff bus_space_tag_t lpc_iot;
23 1.1 cliff } gemini_lpc_attach_args_t;
24 1.1 cliff
25 1.2 cliff /* la_flags */
26 1.2 cliff #define LPC_FL_ENABLED 0x01 /* device is enabled */
27 1.2 cliff
28 1.2 cliff typedef struct gemini_lpc_bus_ops {
29 1.2 cliff uint8_t (*lpc_pnp_read)(lpctag_t, int, uint);
30 1.2 cliff void (*lpc_pnp_write)(lpctag_t, int, uint, uint8_t);
31 1.2 cliff void (*lpc_pnp_enter)(lpctag_t);
32 1.2 cliff void (*lpc_pnp_exit)(lpctag_t);
33 1.2 cliff void *(*lpc_intr_establish)(lpctag_t, uint, int, int,
34 1.2 cliff int (*)(void *), void *);
35 1.2 cliff void (*lpc_intr_disestablish)(lpctag_t, void *);
36 1.2 cliff } gemini_lpc_bus_ops_t;
37 1.2 cliff
38 1.1 cliff typedef struct gemini_lpc_softc {
39 1.2 cliff struct device sc_dev;
40 1.2 cliff bus_addr_t sc_addr;
41 1.2 cliff bus_size_t sc_size;
42 1.2 cliff int sc_intr;
43 1.2 cliff bus_space_tag_t sc_iot;
44 1.2 cliff bus_space_handle_t sc_ioh;
45 1.2 cliff void *sc_lpchctag;
46 1.2 cliff struct gemini_lpc_bus_ops *sc_bus_ops;
47 1.1 cliff } gemini_lpc_softc_t;
48 1.1 cliff
49 1.1 cliff
50 1.2 cliff static inline uint8_t
51 1.2 cliff lpc_pnp_read(lpctag_t tag, int ldn, uint off)
52 1.2 cliff {
53 1.2 cliff gemini_lpc_softc_t *sc = tag;
54 1.2 cliff return (*sc->sc_bus_ops->lpc_pnp_read)(tag, ldn, off);
55 1.2 cliff }
56 1.2 cliff
57 1.2 cliff static inline void
58 1.2 cliff lpc_pnp_write(lpctag_t tag, int ldn, uint off, uint8_t val)
59 1.2 cliff {
60 1.2 cliff gemini_lpc_softc_t *sc = tag;
61 1.2 cliff return (*sc->sc_bus_ops->lpc_pnp_write)(tag, ldn, off, val);
62 1.2 cliff }
63 1.2 cliff
64 1.2 cliff static inline void
65 1.2 cliff lpc_pnp_enter(lpctag_t tag)
66 1.2 cliff {
67 1.2 cliff gemini_lpc_softc_t *sc = tag;
68 1.2 cliff return (*sc->sc_bus_ops->lpc_pnp_enter)(tag);
69 1.2 cliff }
70 1.2 cliff
71 1.2 cliff static inline void
72 1.2 cliff lpc_pnp_exit(lpctag_t tag)
73 1.2 cliff {
74 1.2 cliff gemini_lpc_softc_t *sc = tag;
75 1.2 cliff return (*sc->sc_bus_ops->lpc_pnp_exit)(tag);
76 1.2 cliff }
77 1.2 cliff
78 1.2 cliff static inline void *
79 1.2 cliff lpc_intr_establish(lpctag_t tag, uint intr, int ipl, int ist,
80 1.2 cliff int (*func)(void *), void *arg)
81 1.2 cliff {
82 1.2 cliff gemini_lpc_softc_t *sc = tag;
83 1.2 cliff void *ih;
84 1.2 cliff
85 1.2 cliff ih = (*sc->sc_bus_ops->lpc_intr_establish)
86 1.2 cliff (tag, intr, ipl, ist, func, arg);
87 1.2 cliff
88 1.2 cliff return ih;
89 1.2 cliff }
90 1.2 cliff
91 1.2 cliff static inline void
92 1.2 cliff lpc_intr_disestablish(lpctag_t tag, void *ih)
93 1.2 cliff {
94 1.2 cliff gemini_lpc_softc_t *sc = tag;
95 1.2 cliff return (*sc->sc_bus_ops->lpc_intr_disestablish)(tag, ih);
96 1.2 cliff }
97 1.2 cliff
98 1.2 cliff
99 1.1 cliff
100 1.1 cliff
101 1.1 cliff
102 1.1 cliff #endif /* _ARM_GEMINI_LPCVAR_H */
103