Home | History | Annotate | Line # | Download | only in gemini
gemini_lpcvar.h revision 1.3.2.1
      1  1.3.2.1    yamt /*	$NetBSD: gemini_lpcvar.h,v 1.3.2.1 2012/10/30 17:19:02 yamt 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.3  dyoung #include <sys/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 	bus_addr_t			sc_addr;
     40      1.2   cliff 	bus_size_t			sc_size;
     41      1.2   cliff 	int				sc_intr;
     42      1.2   cliff 	bus_space_tag_t			sc_iot;
     43      1.2   cliff 	bus_space_handle_t		sc_ioh;
     44      1.2   cliff 	void			       *sc_lpchctag;
     45      1.2   cliff 	struct gemini_lpc_bus_ops      *sc_bus_ops;
     46      1.1   cliff } gemini_lpc_softc_t;
     47      1.1   cliff 
     48      1.1   cliff 
     49      1.2   cliff static inline uint8_t
     50      1.2   cliff lpc_pnp_read(lpctag_t tag, int ldn, uint off)
     51      1.2   cliff {
     52      1.2   cliff 	gemini_lpc_softc_t *sc = tag;
     53      1.2   cliff 	return (*sc->sc_bus_ops->lpc_pnp_read)(tag, ldn, off);
     54      1.2   cliff }
     55      1.2   cliff 
     56      1.2   cliff static inline void
     57      1.2   cliff lpc_pnp_write(lpctag_t tag, int ldn, uint off, uint8_t val)
     58      1.2   cliff {
     59      1.2   cliff 	gemini_lpc_softc_t *sc = tag;
     60      1.2   cliff 	return (*sc->sc_bus_ops->lpc_pnp_write)(tag, ldn, off, val);
     61      1.2   cliff }
     62      1.2   cliff 
     63      1.2   cliff static inline void
     64      1.2   cliff lpc_pnp_enter(lpctag_t tag)
     65      1.2   cliff {
     66      1.2   cliff 	gemini_lpc_softc_t *sc = tag;
     67      1.2   cliff 	return (*sc->sc_bus_ops->lpc_pnp_enter)(tag);
     68      1.2   cliff }
     69      1.2   cliff 
     70      1.2   cliff static inline void
     71      1.2   cliff lpc_pnp_exit(lpctag_t tag)
     72      1.2   cliff {
     73      1.2   cliff 	gemini_lpc_softc_t *sc = tag;
     74      1.2   cliff 	return (*sc->sc_bus_ops->lpc_pnp_exit)(tag);
     75      1.2   cliff }
     76      1.2   cliff 
     77      1.2   cliff static inline void *
     78      1.2   cliff lpc_intr_establish(lpctag_t tag, uint intr, int ipl, int ist,
     79      1.2   cliff 	int (*func)(void *), void *arg)
     80      1.2   cliff {
     81      1.2   cliff 	gemini_lpc_softc_t *sc = tag;
     82      1.2   cliff 	void *ih;
     83      1.2   cliff 
     84      1.2   cliff 	ih = (*sc->sc_bus_ops->lpc_intr_establish)
     85      1.2   cliff 		(tag, intr, ipl, ist, func, arg);
     86      1.2   cliff 
     87      1.2   cliff 	return ih;
     88      1.2   cliff }
     89      1.2   cliff 
     90      1.2   cliff static inline void
     91      1.2   cliff lpc_intr_disestablish(lpctag_t tag, void *ih)
     92      1.2   cliff {
     93      1.2   cliff 	gemini_lpc_softc_t *sc = tag;
     94      1.2   cliff 	return (*sc->sc_bus_ops->lpc_intr_disestablish)(tag, ih);
     95      1.2   cliff }
     96      1.2   cliff 
     97      1.2   cliff 
     98      1.1   cliff 
     99      1.1   cliff 
    100      1.1   cliff 
    101      1.1   cliff #endif	/* _ARM_GEMINI_LPCVAR_H */
    102