Lines 26-32
Link Here
|
26 |
#include <asm/io.h> |
26 |
#include <asm/io.h> |
27 |
#include <asm/system.h> |
27 |
#include <asm/system.h> |
28 |
|
28 |
|
29 |
#include <pcmcia/version.h> |
|
|
30 |
#include <pcmcia/cs_types.h> |
29 |
#include <pcmcia/cs_types.h> |
31 |
#include <pcmcia/cs.h> |
30 |
#include <pcmcia/cs.h> |
32 |
#include <pcmcia/cistpl.h> |
31 |
#include <pcmcia/cistpl.h> |
Lines 177-191
Link Here
|
177 |
static int get_tuple(struct pcmcia_device *handle, tuple_t *tuple, cisparse_t *parse) |
176 |
static int get_tuple(struct pcmcia_device *handle, tuple_t *tuple, cisparse_t *parse) |
178 |
{ |
177 |
{ |
179 |
int i = pcmcia_get_tuple_data(handle, tuple); |
178 |
int i = pcmcia_get_tuple_data(handle, tuple); |
180 |
if (i != CS_SUCCESS) return i; |
179 |
if (i != 0) return i; |
181 |
return pcmcia_parse_tuple(handle, tuple, parse); |
180 |
return pcmcia_parse_tuple(tuple, parse); |
182 |
} |
181 |
} |
183 |
|
182 |
|
184 |
static int first_tuple(struct pcmcia_device *handle, tuple_t *tuple, |
183 |
static int first_tuple(struct pcmcia_device *handle, tuple_t *tuple, |
185 |
cisparse_t *parse) |
184 |
cisparse_t *parse) |
186 |
{ |
185 |
{ |
187 |
int i = pcmcia_get_first_tuple(handle, tuple); |
186 |
int i = pcmcia_get_first_tuple(handle, tuple); |
188 |
if (i != CS_SUCCESS) return i; |
187 |
if (i != 0) return i; |
189 |
return get_tuple(handle, tuple, parse); |
188 |
return get_tuple(handle, tuple, parse); |
190 |
} |
189 |
} |
191 |
|
190 |
|
Lines 193-199
Link Here
|
193 |
cisparse_t *parse) |
192 |
cisparse_t *parse) |
194 |
{ |
193 |
{ |
195 |
int i = pcmcia_get_next_tuple(handle, tuple); |
194 |
int i = pcmcia_get_next_tuple(handle, tuple); |
196 |
if (i != CS_SUCCESS) return i; |
195 |
if (i != 0) return i; |
197 |
return get_tuple(handle, tuple, parse); |
196 |
return get_tuple(handle, tuple, parse); |
198 |
} |
197 |
} |
199 |
|
198 |
|
Lines 216-232
Link Here
|
216 |
do { |
215 |
do { |
217 |
tuple.DesiredTuple = CISTPL_CONFIG; |
216 |
tuple.DesiredTuple = CISTPL_CONFIG; |
218 |
i = pcmcia_get_first_tuple(link, &tuple); |
217 |
i = pcmcia_get_first_tuple(link, &tuple); |
219 |
if (i != CS_SUCCESS) break; |
218 |
if (i != 0) break; |
220 |
tuple.TupleData = buf; |
219 |
tuple.TupleData = buf; |
221 |
tuple.TupleDataMax = 64; |
220 |
tuple.TupleDataMax = 64; |
222 |
tuple.TupleOffset = 0; |
221 |
tuple.TupleOffset = 0; |
223 |
i = pcmcia_get_tuple_data(link, &tuple); |
222 |
i = pcmcia_get_tuple_data(link, &tuple); |
224 |
if (i != CS_SUCCESS) break; |
223 |
if (i != 0) break; |
225 |
i = pcmcia_parse_tuple(link, &tuple, &parse); |
224 |
i = pcmcia_parse_tuple(&tuple, &parse); |
226 |
if (i != CS_SUCCESS) break; |
225 |
if (i != 0) break; |
227 |
link->conf.ConfigBase = parse.config.base; |
226 |
link->conf.ConfigBase = parse.config.base; |
228 |
} while (0); |
227 |
} while (0); |
229 |
if (i != CS_SUCCESS) { |
228 |
if (i != 0) { |
230 |
cs_error(link, ParseTuple, i); |
229 |
cs_error(link, ParseTuple, i); |
231 |
return -ENODEV; |
230 |
return -ENODEV; |
232 |
} |
231 |
} |
Lines 251-257
Link Here
|
251 |
tuple.Attributes = 0; |
250 |
tuple.Attributes = 0; |
252 |
tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; |
251 |
tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; |
253 |
i = first_tuple(link, &tuple, &parse); |
252 |
i = first_tuple(link, &tuple, &parse); |
254 |
while (i == CS_SUCCESS) { |
253 |
while (i == 0) { |
255 |
if (cf->io.nwin > 0) { |
254 |
if (cf->io.nwin > 0) { |
256 |
link->conf.ConfigIndex = cf->index; |
255 |
link->conf.ConfigIndex = cf->index; |
257 |
link->io.BasePort1 = cf->io.win[0].base; |
256 |
link->io.BasePort1 = cf->io.win[0].base; |
Lines 261-273
Link Here
|
261 |
link->io.BasePort1, |
260 |
link->io.BasePort1, |
262 |
link->io.BasePort1+link->io.NumPorts1-1); |
261 |
link->io.BasePort1+link->io.NumPorts1-1); |
263 |
i = pcmcia_request_io(link, &link->io); |
262 |
i = pcmcia_request_io(link, &link->io); |
264 |
if (i == CS_SUCCESS) goto found_port; |
263 |
if (i == 0) goto found_port; |
265 |
} |
264 |
} |
266 |
i = next_tuple(link, &tuple, &parse); |
265 |
i = next_tuple(link, &tuple, &parse); |
267 |
} |
266 |
} |
268 |
|
267 |
|
269 |
found_port: |
268 |
found_port: |
270 |
if (i != CS_SUCCESS) { |
269 |
if (i != 0) { |
271 |
cs_error(link, RequestIO, i); |
270 |
cs_error(link, RequestIO, i); |
272 |
break; |
271 |
break; |
273 |
} |
272 |
} |
Lines 276-282
Link Here
|
276 |
* allocate an interrupt line |
275 |
* allocate an interrupt line |
277 |
*/ |
276 |
*/ |
278 |
i = pcmcia_request_irq(link, &link->irq); |
277 |
i = pcmcia_request_irq(link, &link->irq); |
279 |
if (i != CS_SUCCESS) { |
278 |
if (i != 0) { |
280 |
cs_error(link, RequestIRQ, i); |
279 |
cs_error(link, RequestIRQ, i); |
281 |
/* undo */ |
280 |
/* undo */ |
282 |
pcmcia_disable_device(link); |
281 |
pcmcia_disable_device(link); |
Lines 287-293
Link Here
|
287 |
* configure the PCMCIA socket |
286 |
* configure the PCMCIA socket |
288 |
*/ |
287 |
*/ |
289 |
i = pcmcia_request_configuration(link, &link->conf); |
288 |
i = pcmcia_request_configuration(link, &link->conf); |
290 |
if (i != CS_SUCCESS) { |
289 |
if (i != 0) { |
291 |
cs_error(link, RequestConfiguration, i); |
290 |
cs_error(link, RequestConfiguration, i); |
292 |
pcmcia_disable_device(link); |
291 |
pcmcia_disable_device(link); |
293 |
break; |
292 |
break; |