1 | /*- |
---|
2 | * Copyright (c) 1998 Doug Rabson |
---|
3 | * All rights reserved. |
---|
4 | * |
---|
5 | * Redistribution and use in source and binary forms, with or without |
---|
6 | * modification, are permitted provided that the following conditions |
---|
7 | * are met: |
---|
8 | * 1. Redistributions of source code must retain the above copyright |
---|
9 | * notice, this list of conditions and the following disclaimer. |
---|
10 | * 2. Redistributions in binary form must reproduce the above copyright |
---|
11 | * notice, this list of conditions and the following disclaimer in the |
---|
12 | * documentation and/or other materials provided with the distribution. |
---|
13 | * |
---|
14 | * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND |
---|
15 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
---|
16 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
---|
17 | * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE |
---|
18 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
---|
19 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
---|
20 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
---|
21 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
---|
22 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
---|
23 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
---|
24 | * SUCH DAMAGE. |
---|
25 | * |
---|
26 | * $FreeBSD$ |
---|
27 | */ |
---|
28 | |
---|
29 | #ifndef _ISA_ISAVAR_H_ |
---|
30 | #define _ISA_ISAVAR_H_ |
---|
31 | |
---|
32 | struct isa_config; |
---|
33 | struct isa_pnp_id; |
---|
34 | typedef void isa_config_cb(void *arg, struct isa_config *config, int enable); |
---|
35 | |
---|
36 | #ifndef __rtems__ |
---|
37 | #include <rtems/bsd/local/isa_if.h> |
---|
38 | #endif /* __rtems__ */ |
---|
39 | #include <isa/pnpvar.h> |
---|
40 | |
---|
41 | #ifdef _KERNEL |
---|
42 | |
---|
43 | /* |
---|
44 | * ISA devices are partially ordered. This is to ensure that hardwired |
---|
45 | * devices the BIOS tells us are there appear first, then speculative |
---|
46 | * devices that are sensitive to the probe order, then devices that |
---|
47 | * are hinted to be there, then the most flexible devices which support |
---|
48 | * the ISA bus PNP standard. |
---|
49 | */ |
---|
50 | #define ISA_ORDER_PNPBIOS 10 /* plug-and-play BIOS inflexible hardware */ |
---|
51 | #define ISA_ORDER_SENSITIVE 20 /* legacy sensitive hardware */ |
---|
52 | #define ISA_ORDER_SPECULATIVE 30 /* legacy non-sensitive hardware */ |
---|
53 | #define ISA_ORDER_PNP 40 /* plug-and-play flexible hardware */ |
---|
54 | |
---|
55 | /* |
---|
56 | * Limits on resources that we can manage |
---|
57 | */ |
---|
58 | #define ISA_NPORT 50 |
---|
59 | #define ISA_NMEM 50 |
---|
60 | #define ISA_NIRQ 50 |
---|
61 | #define ISA_NDRQ 50 |
---|
62 | |
---|
63 | /* |
---|
64 | * Limits on resources the hardware can actually handle |
---|
65 | */ |
---|
66 | #define ISA_PNP_NPORT 8 |
---|
67 | #define ISA_PNP_NMEM 4 |
---|
68 | #define ISA_PNP_NIRQ 2 |
---|
69 | #define ISA_PNP_NDRQ 2 |
---|
70 | |
---|
71 | #define ISADMA_READ 0x00100000 |
---|
72 | #define ISADMA_WRITE 0 |
---|
73 | #define ISADMA_RAW 0x00080000 |
---|
74 | /* |
---|
75 | * Plug and play cards can support a range of resource |
---|
76 | * configurations. This structure is used by the isapnp parser to |
---|
77 | * inform the isa bus about the resource possibilities of the |
---|
78 | * device. Each different alternative should be supplied by calling |
---|
79 | * ISA_ADD_CONFIG(). |
---|
80 | */ |
---|
81 | struct isa_range { |
---|
82 | u_int32_t ir_start; |
---|
83 | u_int32_t ir_end; |
---|
84 | u_int32_t ir_size; |
---|
85 | u_int32_t ir_align; |
---|
86 | }; |
---|
87 | |
---|
88 | struct isa_config { |
---|
89 | struct isa_range ic_mem[ISA_NMEM]; |
---|
90 | struct isa_range ic_port[ISA_NPORT]; |
---|
91 | u_int32_t ic_irqmask[ISA_NIRQ]; |
---|
92 | u_int32_t ic_drqmask[ISA_NDRQ]; |
---|
93 | int ic_nmem; |
---|
94 | int ic_nport; |
---|
95 | int ic_nirq; |
---|
96 | int ic_ndrq; |
---|
97 | }; |
---|
98 | |
---|
99 | /* |
---|
100 | * Used to build lists of IDs and description strings for PnP drivers. |
---|
101 | */ |
---|
102 | struct isa_pnp_id { |
---|
103 | u_int32_t ip_id; |
---|
104 | const char *ip_desc; |
---|
105 | }; |
---|
106 | |
---|
107 | enum isa_device_ivars { |
---|
108 | ISA_IVAR_PORT, |
---|
109 | ISA_IVAR_PORT_0 = ISA_IVAR_PORT, |
---|
110 | ISA_IVAR_PORT_1, |
---|
111 | ISA_IVAR_PORTSIZE, |
---|
112 | ISA_IVAR_PORTSIZE_0 = ISA_IVAR_PORTSIZE, |
---|
113 | ISA_IVAR_PORTSIZE_1, |
---|
114 | ISA_IVAR_MADDR, |
---|
115 | ISA_IVAR_MADDR_0 = ISA_IVAR_MADDR, |
---|
116 | ISA_IVAR_MADDR_1, |
---|
117 | ISA_IVAR_MEMSIZE, |
---|
118 | ISA_IVAR_MEMSIZE_0 = ISA_IVAR_MEMSIZE, |
---|
119 | ISA_IVAR_MEMSIZE_1, |
---|
120 | ISA_IVAR_IRQ, |
---|
121 | ISA_IVAR_IRQ_0 = ISA_IVAR_IRQ, |
---|
122 | ISA_IVAR_IRQ_1, |
---|
123 | ISA_IVAR_DRQ, |
---|
124 | ISA_IVAR_DRQ_0 = ISA_IVAR_DRQ, |
---|
125 | ISA_IVAR_DRQ_1, |
---|
126 | ISA_IVAR_VENDORID, |
---|
127 | ISA_IVAR_SERIAL, |
---|
128 | ISA_IVAR_LOGICALID, |
---|
129 | ISA_IVAR_COMPATID, |
---|
130 | ISA_IVAR_CONFIGATTR, |
---|
131 | ISA_IVAR_PNP_CSN, |
---|
132 | ISA_IVAR_PNP_LDN, |
---|
133 | ISA_IVAR_PNPBIOS_HANDLE |
---|
134 | }; |
---|
135 | |
---|
136 | /* |
---|
137 | * ISA_IVAR_CONFIGATTR bits |
---|
138 | */ |
---|
139 | #define ISACFGATTR_CANDISABLE (1 << 0) /* can be disabled */ |
---|
140 | #define ISACFGATTR_DYNAMIC (1 << 1) /* dynamic configuration */ |
---|
141 | #define ISACFGATTR_HINTS (1 << 3) /* source of config is hints */ |
---|
142 | |
---|
143 | /* |
---|
144 | * Simplified accessors for isa devices |
---|
145 | */ |
---|
146 | #define ISA_ACCESSOR(var, ivar, type) \ |
---|
147 | __BUS_ACCESSOR(isa, var, ISA, ivar, type) |
---|
148 | |
---|
149 | ISA_ACCESSOR(port, PORT, int) |
---|
150 | ISA_ACCESSOR(portsize, PORTSIZE, int) |
---|
151 | ISA_ACCESSOR(irq, IRQ, int) |
---|
152 | ISA_ACCESSOR(drq, DRQ, int) |
---|
153 | ISA_ACCESSOR(maddr, MADDR, int) |
---|
154 | ISA_ACCESSOR(msize, MEMSIZE, int) |
---|
155 | ISA_ACCESSOR(vendorid, VENDORID, int) |
---|
156 | ISA_ACCESSOR(serial, SERIAL, int) |
---|
157 | ISA_ACCESSOR(logicalid, LOGICALID, int) |
---|
158 | ISA_ACCESSOR(compatid, COMPATID, int) |
---|
159 | ISA_ACCESSOR(configattr, CONFIGATTR, int) |
---|
160 | ISA_ACCESSOR(pnp_csn, PNP_CSN, int) |
---|
161 | ISA_ACCESSOR(pnp_ldn, PNP_LDN, int) |
---|
162 | ISA_ACCESSOR(pnpbios_handle, PNPBIOS_HANDLE, int) |
---|
163 | |
---|
164 | /* Device class for ISA bridges. */ |
---|
165 | extern devclass_t isab_devclass; |
---|
166 | |
---|
167 | extern intrmask_t isa_irq_pending(void); |
---|
168 | extern void isa_probe_children(device_t dev); |
---|
169 | |
---|
170 | void isa_dmacascade(int chan); |
---|
171 | void isa_dmadone(int flags, caddr_t addr, int nbytes, int chan); |
---|
172 | int isa_dma_init(int chan, u_int bouncebufsize, int flag); |
---|
173 | void isa_dmastart(int flags, caddr_t addr, u_int nbytes, int chan); |
---|
174 | int isa_dma_acquire(int chan); |
---|
175 | void isa_dma_release(int chan); |
---|
176 | int isa_dmastatus(int chan); |
---|
177 | int isa_dmastop(int chan); |
---|
178 | int isa_dmatc(int chan); |
---|
179 | |
---|
180 | #define isa_dmainit(chan, size) do { \ |
---|
181 | if (isa_dma_init(chan, size, M_NOWAIT)) \ |
---|
182 | printf("WARNING: isa_dma_init(%d, %ju) failed\n", \ |
---|
183 | (int)(chan), (uintmax_t)(size)); \ |
---|
184 | } while (0) |
---|
185 | |
---|
186 | void isa_hinted_child(device_t parent, const char *name, int unit); |
---|
187 | void isa_hint_device_unit(device_t bus, device_t child, const char *name, |
---|
188 | int *unitp); |
---|
189 | int isab_attach(device_t dev); |
---|
190 | |
---|
191 | #endif /* _KERNEL */ |
---|
192 | |
---|
193 | #endif /* !_ISA_ISAVAR_H_ */ |
---|