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