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