• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/linux/linux-2.6.36/drivers/block/paride/

Lines Matching refs:pi

44 void pi_write_regr(PIA * pi, int cont, int regr, int val)
46 pi->proto->write_regr(pi, cont, regr, val);
51 int pi_read_regr(PIA * pi, int cont, int regr)
53 return pi->proto->read_regr(pi, cont, regr);
58 void pi_write_block(PIA * pi, char *buf, int count)
60 pi->proto->write_block(pi, buf, count);
65 void pi_read_block(PIA * pi, char *buf, int count)
67 pi->proto->read_block(pi, buf, count);
74 PIA *pi = (PIA *) p;
80 if (pi->claim_cont && !parport_claim(pi->pardev)) {
81 cont = pi->claim_cont;
82 pi->claim_cont = NULL;
83 pi->claimed = 1;
88 wake_up(&(pi->parq));
94 int pi_schedule_claimed(PIA * pi, void (*cont) (void))
99 if (pi->pardev && parport_claim(pi->pardev)) {
100 pi->claim_cont = cont;
104 pi->claimed = 1;
110 void pi_do_claimed(PIA * pi, void (*cont) (void))
112 if (pi_schedule_claimed(pi, cont))
118 static void pi_claim(PIA * pi)
120 if (pi->claimed)
122 pi->claimed = 1;
123 if (pi->pardev)
124 wait_event(pi->parq,
125 !parport_claim((struct pardevice *) pi->pardev));
128 static void pi_unclaim(PIA * pi)
130 pi->claimed = 0;
131 if (pi->pardev)
132 parport_release((struct pardevice *) (pi->pardev));
135 void pi_connect(PIA * pi)
137 pi_claim(pi);
138 pi->proto->connect(pi);
143 void pi_disconnect(PIA * pi)
145 pi->proto->disconnect(pi);
146 pi_unclaim(pi);
151 static void pi_unregister_parport(PIA * pi)
153 if (pi->pardev) {
154 parport_unregister_device((struct pardevice *) (pi->pardev));
155 pi->pardev = NULL;
159 void pi_release(PIA * pi)
161 pi_unregister_parport(pi);
162 if (pi->proto->release_proto)
163 pi->proto->release_proto(pi);
164 module_put(pi->proto->owner);
169 static int default_test_proto(PIA * pi, char *scratch, int verbose)
174 pi->proto->connect(pi);
177 pi_write_regr(pi, 0, 6, 0xa0 + j * 0x10);
179 pi_write_regr(pi, 0, 2, k ^ 0xaa);
180 pi_write_regr(pi, 0, 3, k ^ 0x55);
181 if (pi_read_regr(pi, 0, 2) != (k ^ 0xaa))
185 pi->proto->disconnect(pi);
189 pi->device, pi->proto->name, pi->port,
190 pi->mode, e[0], e[1]);
195 static int pi_test_proto(PIA * pi, char *scratch, int verbose)
199 pi_claim(pi);
200 if (pi->proto->test_proto)
201 res = pi->proto->test_proto(pi, scratch, verbose);
203 res = default_test_proto(pi, scratch, verbose);
204 pi_unclaim(pi);
247 static int pi_register_parport(PIA * pi, int verbose)
251 port = parport_find_base(pi->port);
255 pi->pardev = parport_register_device(port,
256 pi->device, NULL,
257 pi_wake_up, NULL, 0, (void *) pi);
259 if (!pi->pardev)
262 init_waitqueue_head(&pi->parq);
265 printk("%s: 0x%x is %s\n", pi->device, pi->port, port->name);
267 pi->parname = (char *) port->name;
272 static int pi_probe_mode(PIA * pi, int max, char *scratch, int verbose)
276 if (pi->mode != -1) {
277 if (pi->mode >= max)
280 if (pi->mode >= pi->proto->epp_first)
282 if ((range == 8) && (pi->port % 8))
284 pi->reserved = range;
285 return (!pi_test_proto(pi, scratch, verbose));
288 for (pi->mode = 0; pi->mode < max; pi->mode++) {
290 if (pi->mode >= pi->proto->epp_first)
292 if ((range == 8) && (pi->port % 8))
294 pi->reserved = range;
295 if (!pi_test_proto(pi, scratch, verbose))
296 best = pi->mode;
298 pi->mode = best;
302 static int pi_probe_unit(PIA * pi, int unit, char *scratch, int verbose)
311 e = pi->proto->max_units;
314 if (!pi_register_parport(pi, verbose))
317 if (pi->proto->test_port) {
318 pi_claim(pi);
319 max = pi->proto->test_port(pi);
320 pi_unclaim(pi);
322 max = pi->proto->max_mode;
324 if (pi->proto->probe_unit) {
325 pi_claim(pi);
326 for (pi->unit = s; pi->unit < e; pi->unit++)
327 if (pi->proto->probe_unit(pi)) {
328 pi_unclaim(pi);
329 if (pi_probe_mode(pi, max, scratch, verbose))
331 pi_unregister_parport(pi);
334 pi_unclaim(pi);
335 pi_unregister_parport(pi);
339 if (!pi_probe_mode(pi, max, scratch, verbose)) {
340 pi_unregister_parport(pi);
347 int pi_init(PIA * pi, int autoprobe, int port, int mode,
377 pi->proto = proto;
378 pi->private = 0;
379 if (proto->init_proto && proto->init_proto(pi) < 0) {
380 pi->proto = NULL;
385 pi->delay = pi->proto->default_delay;
387 pi->delay = delay;
388 pi->devtype = devtype;
389 pi->device = device;
391 pi->parname = NULL;
392 pi->pardev = NULL;
393 init_waitqueue_head(&pi->parq);
394 pi->claimed = 0;
395 pi->claim_cont = NULL;
397 pi->mode = mode;
399 pi->port = port;
400 if (pi_probe_unit(pi, unit, scratch, verbose))
402 pi->port = 0;
405 while ((pi->port = lpts[k++]))
407 (pi, unit, scratch, verbose))
409 if (pi->port)
412 if (pi->proto->release_proto)
413 pi->proto->release_proto(pi);
417 if (!pi->port) {
425 if (pi->parname)
426 printk("%s: Sharing %s at 0x%x\n", pi->device,
427 pi->parname, pi->port);
429 pi->proto->log_adapter(pi, scratch, verbose);