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