Expand PMF_FN_* macros.
[netbsd-mini2440.git] / sys / dev / gpib / hil_gpib.c
blobe1b3a20ea84db3a69334fb22f09c3697359bc5f2
1 /* $NetBSD: hil_gpib.c,v 1.10 2009/05/12 12:13:21 cegger Exp $ */
3 #include <sys/cdefs.h>
4 __KERNEL_RCSID(0, "$NetBSD: hil_gpib.c,v 1.10 2009/05/12 12:13:21 cegger Exp $");
6 #include <sys/param.h>
7 #include <sys/systm.h>
8 #include <sys/callout.h>
9 #include <sys/conf.h>
10 #include <sys/device.h>
12 #include <dev/gpib/gpibvar.h>
14 #ifdef DEBUG
15 int hildebug = 0;
16 #define HDB_FOLLOW 0x01
17 #define HDB_MMAP 0x02
18 #define HDB_MASK 0x04
19 #define HDB_CONFIG 0x08
20 #define HDB_KEYBOARD 0x10
21 #define HDB_IDMODULE 0x20
22 #define HDB_EVENTS 0x80
23 #define DPRINTF(mask, str) if (hildebug & (mask)) printf str
24 #else
25 #define DPRINTF(mask, str) /* nothing */
26 #endif
28 struct hil_softc {
29 struct device sc_dev;
30 gpib_chipset_tag_t sc_ic;
31 gpib_handle_t sc_hdl;
33 int sc_address; /* GPIB address */
34 int sc_flags;
35 #define HILF_ALIVE 0x01
36 #define HILF_OPEN 0x02
37 #define HILF_UIO 0x04
38 #define HILF_TIMO 0x08
39 #define HILF_DELAY 0x10
42 int hilmatch(device_t, cfdata_t, void *);
43 void hilattach(device_t, device_t, void *);
45 const struct cfattach hil_ca = {
46 sizeof(struct hil_softc), hilmatch, hilattach,
49 void hilcallback(void *, int);
50 void hilstart(void *);
52 int
53 hilmatch(device_t parent, cfdata_t match, void *aux)
55 struct gpib_attach_args *ga = aux;
56 u_int8_t *cmd = "SE;";
57 u_int8_t stat;
59 if (gpibsend(ga->ga_ic, ga->ga_address, -1, cmd, 3) != 3)
60 return (0);
61 if (gpibrecv(ga->ga_ic, ga->ga_address, -1, &stat, 1) != 1)
62 return (0);
63 printf("hilmatch: enable status byte 0x%x\n", stat);
64 return (1);
67 void
68 hilattach(device_t parent, device_t self, void *aux)
70 struct hil_softc *sc = device_private(self);
71 struct gpib_attach_args *ga = aux;
73 printf("\n");
75 sc->sc_ic = ga->ga_ic;
76 sc->sc_address = ga->ga_address;
78 if (gpibregister(sc->sc_ic, sc->sc_address, hilcallback, sc,
79 &sc->sc_hdl)) {
80 aprint_error_dev(&sc->sc_dev, "can't register callback\n");
81 return;
84 sc->sc_flags = HILF_ALIVE;
87 void
88 hilcallback(void *v, int action)
90 struct hil_softc *sc = v;
92 DPRINTF(HDB_FOLLOW, ("hilcallback: v=%p, action=%d\n", v, action));
94 switch (action) {
95 case GPIBCBF_START:
96 hilstart(sc);
97 case GPIBCBF_INTR:
98 /* no-op */
99 break;
100 #ifdef DEBUG
101 default:
102 DPRINTF(HDB_FOLLOW, ("hilcallback: unknown action %d\n",
103 action));
104 break;
105 #endif
109 void
110 hilstart(void *v)
112 struct hil_softc *sc = v;
114 DPRINTF(HDB_FOLLOW, ("hilstart(%x)\n", device_unit(&sc->sc_dev)));
116 sc->sc_flags &= ~HILF_DELAY;