Lines Matching refs:dev
225 static int pg_identify(struct pg *dev, int log);
249 struct pg *dev = &devices[unit]; in pg_init_units() local
250 dev->pi = &dev->pia; in pg_init_units()
251 clear_bit(0, &dev->access); in pg_init_units()
252 dev->busy = 0; in pg_init_units()
253 dev->present = 0; in pg_init_units()
254 dev->bufptr = NULL; in pg_init_units()
255 dev->drive = parm[D_SLV]; in pg_init_units()
256 snprintf(dev->name, PG_NAMELEN, "%s%c", name, 'a'+unit); in pg_init_units()
262 static inline int status_reg(struct pg *dev) in status_reg() argument
264 return pi_read_regr(dev->pi, 1, 6); in status_reg()
267 static inline int read_reg(struct pg *dev, int reg) in read_reg() argument
269 return pi_read_regr(dev->pi, 0, reg); in read_reg()
272 static inline void write_reg(struct pg *dev, int reg, int val) in write_reg() argument
274 pi_write_regr(dev->pi, 0, reg, val); in write_reg()
277 static inline u8 DRIVE(struct pg *dev) in DRIVE() argument
279 return 0xa0+0x10*dev->drive; in DRIVE()
287 static int pg_wait(struct pg *dev, int go, int stop, unsigned long tmo, char *msg) in pg_wait() argument
291 dev->status = 0; in pg_wait()
294 while ((((r = status_reg(dev)) & go) || (stop && (!(r & stop)))) in pg_wait()
305 s = read_reg(dev, 7); in pg_wait()
306 e = read_reg(dev, 1); in pg_wait()
307 p = read_reg(dev, 2); in pg_wait()
310 dev->name, msg, s, e, p, to ? " timeout" : ""); in pg_wait()
313 dev->status = (e >> 4) & 0xff; in pg_wait()
319 static int pg_command(struct pg *dev, char *cmd, int dlen, unsigned long tmo) in pg_command() argument
323 pi_connect(dev->pi); in pg_command()
325 write_reg(dev, 6, DRIVE(dev)); in pg_command()
327 if (pg_wait(dev, STAT_BUSY | STAT_DRQ, 0, tmo, "before command")) in pg_command()
330 write_reg(dev, 4, dlen % 256); in pg_command()
331 write_reg(dev, 5, dlen / 256); in pg_command()
332 write_reg(dev, 7, 0xa0); /* ATAPI packet command */ in pg_command()
334 if (pg_wait(dev, STAT_BUSY, STAT_DRQ, tmo, "command DRQ")) in pg_command()
337 if (read_reg(dev, 2) != 1) { in pg_command()
338 printk("%s: command phase error\n", dev->name); in pg_command()
342 pi_write_block(dev->pi, cmd, 12); in pg_command()
345 printk("%s: Command sent, dlen=%d packet= ", dev->name, dlen); in pg_command()
352 pi_disconnect(dev->pi); in pg_command()
356 static int pg_completion(struct pg *dev, char *buf, unsigned long tmo) in pg_completion() argument
360 r = pg_wait(dev, STAT_BUSY, STAT_DRQ | STAT_READY | STAT_ERR, in pg_completion()
363 dev->dlen = 0; in pg_completion()
365 while (read_reg(dev, 7) & STAT_DRQ) { in pg_completion()
366 d = (read_reg(dev, 4) + 256 * read_reg(dev, 5)); in pg_completion()
368 p = read_reg(dev, 2) & 3; in pg_completion()
370 pi_write_block(dev->pi, buf, n); in pg_completion()
372 pi_read_block(dev->pi, buf, n); in pg_completion()
374 printk("%s: %s %d bytes\n", dev->name, in pg_completion()
376 dev->dlen += (1 - p) * d; in pg_completion()
378 r = pg_wait(dev, STAT_BUSY, STAT_DRQ | STAT_READY | STAT_ERR, in pg_completion()
382 pi_disconnect(dev->pi); in pg_completion()
387 static int pg_reset(struct pg *dev) in pg_reset() argument
393 pi_connect(dev->pi); in pg_reset()
394 write_reg(dev, 6, DRIVE(dev)); in pg_reset()
395 write_reg(dev, 7, 8); in pg_reset()
400 while ((k++ < PG_RESET_TMO) && (status_reg(dev) & STAT_BUSY)) in pg_reset()
404 got[i] = read_reg(dev, i + 1); in pg_reset()
409 printk("%s: Reset (%d) signature = ", dev->name, k); in pg_reset()
417 pi_disconnect(dev->pi); in pg_reset()
436 static int pg_identify(struct pg *dev, int log) in pg_identify() argument
444 s = pg_command(dev, id_cmd, 36, jiffies + PG_TMO); in pg_identify()
447 s = pg_completion(dev, buf, jiffies + PG_TMO); in pg_identify()
454 printk("%s: %s %s, %s\n", dev->name, mf, id, ms[dev->drive]); in pg_identify()
464 static int pg_probe(struct pg *dev) in pg_probe() argument
466 if (dev->drive == -1) { in pg_probe()
467 for (dev->drive = 0; dev->drive <= 1; dev->drive++) in pg_probe()
468 if (!pg_reset(dev)) in pg_probe()
469 return pg_identify(dev, 1); in pg_probe()
471 if (!pg_reset(dev)) in pg_probe()
472 return pg_identify(dev, 1); in pg_probe()
479 struct pg *dev = &devices[0]; in pg_detect() local
486 if (pi_init(dev->pi, 1, -1, -1, -1, -1, -1, pg_scratch, in pg_detect()
487 PI_PG, verbose, dev->name)) { in pg_detect()
488 if (!pg_probe(dev)) { in pg_detect()
489 dev->present = 1; in pg_detect()
492 pi_release(dev->pi); in pg_detect()
496 for (unit = 0; unit < PG_UNITS; unit++, dev++) { in pg_detect()
500 if (pi_init(dev->pi, 0, parm[D_PRT], parm[D_MOD], in pg_detect()
502 pg_scratch, PI_PG, verbose, dev->name)) { in pg_detect()
503 if (!pg_probe(dev)) { in pg_detect()
504 dev->present = 1; in pg_detect()
507 pi_release(dev->pi); in pg_detect()
521 struct pg *dev = &devices[unit]; in pg_open() local
525 if ((unit >= PG_UNITS) || (!dev->present)) { in pg_open()
530 if (test_and_set_bit(0, &dev->access)) { in pg_open()
535 if (dev->busy) { in pg_open()
536 pg_reset(dev); in pg_open()
537 dev->busy = 0; in pg_open()
540 pg_identify(dev, (verbose > 1)); in pg_open()
542 dev->bufptr = kmalloc(PG_MAX_DATA, GFP_KERNEL); in pg_open()
543 if (dev->bufptr == NULL) { in pg_open()
544 clear_bit(0, &dev->access); in pg_open()
545 printk("%s: buffer allocation failed\n", dev->name); in pg_open()
550 file->private_data = dev; in pg_open()
559 struct pg *dev = file->private_data; in pg_release() local
561 kfree(dev->bufptr); in pg_release()
562 dev->bufptr = NULL; in pg_release()
563 clear_bit(0, &dev->access); in pg_release()
570 struct pg *dev = filp->private_data; in pg_write() local
574 if (dev->busy) in pg_write()
592 if (pg_reset(dev)) in pg_write()
600 dev->start = jiffies; in pg_write()
601 dev->timeout = hdr.timeout * HZ + HZ / 2 + jiffies; in pg_write()
603 if (pg_command(dev, hdr.packet, hdr.dlen, jiffies + PG_TMO)) { in pg_write()
604 if (dev->status & 0x10) in pg_write()
609 dev->busy = 1; in pg_write()
611 if (copy_from_user(dev->bufptr, buf + hs, count - hs)) in pg_write()
618 struct pg *dev = filp->private_data; in pg_read() local
623 if (!dev->busy) in pg_read()
628 dev->busy = 0; in pg_read()
630 if (pg_completion(dev, dev->bufptr, dev->timeout)) in pg_read()
631 if (dev->status & 0x10) in pg_read()
636 hdr.dlen = dev->dlen; in pg_read()
646 hdr.duration = (jiffies - dev->start + HZ / 2) / HZ; in pg_read()
647 hdr.scsi = dev->status & 0x0f; in pg_read()
652 if (copy_to_user(buf + hs, dev->bufptr, copy)) in pg_read()
678 struct pg *dev = &devices[unit]; in pg_init() local
679 if (dev->present) in pg_init()
680 pi_release(dev->pi); in pg_init()
691 struct pg *dev = &devices[unit]; in pg_init() local
692 if (dev->present) in pg_init()
710 struct pg *dev = &devices[unit]; in pg_exit() local
711 if (dev->present) in pg_exit()
718 struct pg *dev = &devices[unit]; in pg_exit() local
719 if (dev->present) in pg_exit()
720 pi_release(dev->pi); in pg_exit()