tag | line | file | source code |
stuffp | 291 | drivers/cdrom/mcdx.c | struct s_drive_stuff *stuffp = mcdx_stuffp[MINOR(ip->i_rdev)]; |
stuffp | 293 | drivers/cdrom/mcdx.c | if (!stuffp->present) return -ENXIO; |
stuffp | 304 | drivers/cdrom/mcdx.c | stuffp->audiostatus = CDROM_AUDIO_INVALID; |
stuffp | 305 | drivers/cdrom/mcdx.c | if (-1 == mcdx_stop(stuffp, 1)) |
stuffp | 318 | drivers/cdrom/mcdx.c | if ((ti.cdti_trk0 < stuffp->di.n_first) |
stuffp | 319 | drivers/cdrom/mcdx.c | || (ti.cdti_trk0 > stuffp->di.n_last) |
stuffp | 320 | drivers/cdrom/mcdx.c | || (ti.cdti_trk1 < stuffp->di.n_first)) |
stuffp | 322 | drivers/cdrom/mcdx.c | if (ti.cdti_trk1 > stuffp->di.n_last) ti.cdti_trk1 = stuffp->di.n_last; |
stuffp | 325 | drivers/cdrom/mcdx.c | return mcdx_playtrk(stuffp, &ti); |
stuffp | 334 | drivers/cdrom/mcdx.c | if ((stuffp->audiostatus == CDROM_AUDIO_PLAY) |
stuffp | 335 | drivers/cdrom/mcdx.c | && (-1 == mcdx_hold(stuffp, 1))) return -EIO; |
stuffp | 351 | drivers/cdrom/mcdx.c | return mcdx_playmsf(stuffp, &msf); |
stuffp | 356 | drivers/cdrom/mcdx.c | return mcdx_playtrk(stuffp, NULL); |
stuffp | 366 | drivers/cdrom/mcdx.c | if (-1 == mcdx_readtoc(stuffp)) return -1; |
stuffp | 372 | drivers/cdrom/mcdx.c | tp = &stuffp->toc[stuffp->di.n_last - stuffp->di.n_first + 1]; |
stuffp | 373 | drivers/cdrom/mcdx.c | else if (entry.cdte_track > stuffp->di.n_last |
stuffp | 374 | drivers/cdrom/mcdx.c | || entry.cdte_track < stuffp->di.n_first) return -EINVAL; |
stuffp | 375 | drivers/cdrom/mcdx.c | else tp = &stuffp->toc[entry.cdte_track - stuffp->di.n_first]; |
stuffp | 408 | drivers/cdrom/mcdx.c | if (-1 == mcdx_requestsubqcode(stuffp, &q, 2)) return -EIO; |
stuffp | 410 | drivers/cdrom/mcdx.c | TRACE((SUBCHNL, "audiostatus: %x\n", stuffp->audiostatus)); |
stuffp | 411 | drivers/cdrom/mcdx.c | sub.cdsc_audiostatus = stuffp->audiostatus; |
stuffp | 457 | drivers/cdrom/mcdx.c | toc.cdth_trk0 = stuffp->di.n_first; |
stuffp | 458 | drivers/cdrom/mcdx.c | toc.cdth_trk1 = stuffp->di.n_last; |
stuffp | 461 | drivers/cdrom/mcdx.c | stuffp->di.n_first, stuffp->di.n_last)); |
stuffp | 467 | drivers/cdrom/mcdx.c | if (stuffp->audiostatus != CDROM_AUDIO_PLAY) return -EINVAL; |
stuffp | 468 | drivers/cdrom/mcdx.c | if (-1 == mcdx_stop(stuffp, 1)) return -EIO; |
stuffp | 469 | drivers/cdrom/mcdx.c | stuffp->audiostatus = CDROM_AUDIO_PAUSED; |
stuffp | 470 | drivers/cdrom/mcdx.c | if (-1 == mcdx_requestsubqcode(stuffp, &stuffp->start, 1)) |
stuffp | 485 | drivers/cdrom/mcdx.c | ms.addr.msf.minute = bcd2uint(stuffp->multi.msf_last.minute); |
stuffp | 486 | drivers/cdrom/mcdx.c | ms.addr.msf.second = bcd2uint(stuffp->multi.msf_last.second); |
stuffp | 487 | drivers/cdrom/mcdx.c | ms.addr.msf.frame = bcd2uint(stuffp->multi.msf_last.frame); |
stuffp | 489 | drivers/cdrom/mcdx.c | ms.addr.lba = msf2log(&stuffp->multi.msf_last); |
stuffp | 492 | drivers/cdrom/mcdx.c | ms.xa_flag = stuffp->xa; |
stuffp | 506 | drivers/cdrom/mcdx.c | stuffp->multi.msf_last.minute, |
stuffp | 507 | drivers/cdrom/mcdx.c | stuffp->multi.msf_last.second, |
stuffp | 508 | drivers/cdrom/mcdx.c | stuffp->multi.msf_last.frame)); |
stuffp | 515 | drivers/cdrom/mcdx.c | stuffp->multi.msf_last.minute, |
stuffp | 516 | drivers/cdrom/mcdx.c | stuffp->multi.msf_last.second, |
stuffp | 517 | drivers/cdrom/mcdx.c | stuffp->multi.msf_last.frame)); |
stuffp | 524 | drivers/cdrom/mcdx.c | if (stuffp->users > 1) return -EBUSY; |
stuffp | 525 | drivers/cdrom/mcdx.c | if (-1 == mcdx_eject(stuffp, 1)) return -EIO; |
stuffp | 530 | drivers/cdrom/mcdx.c | stuffp->eject_sw = arg; |
stuffp | 546 | drivers/cdrom/mcdx.c | return mcdx_setattentuator(stuffp, &volctrl, 1); |
stuffp | 558 | drivers/cdrom/mcdx.c | struct s_drive_stuff *stuffp; |
stuffp | 574 | drivers/cdrom/mcdx.c | stuffp = mcdx_stuffp[MINOR(CURRENT->dev)]; |
stuffp | 576 | drivers/cdrom/mcdx.c | stuffp = mcdx_stuffp[MINOR(CURRENT->rq_dev)]; |
stuffp | 578 | drivers/cdrom/mcdx.c | TRACE((REQUEST, "do_request() stuffp = %p\n", stuffp)); |
stuffp | 587 | drivers/cdrom/mcdx.c | if ((dev < 0) || (dev >= MCDX_NDRIVES) || (!stuffp->present)) { |
stuffp | 598 | drivers/cdrom/mcdx.c | if (stuffp->audio) { |
stuffp | 611 | drivers/cdrom/mcdx.c | stuffp->errno = 0; |
stuffp | 616 | drivers/cdrom/mcdx.c | stuffp, |
stuffp | 621 | drivers/cdrom/mcdx.c | if (stuffp->errno == MCDX_EOM) { |
stuffp | 650 | drivers/cdrom/mcdx.c | struct s_drive_stuff *stuffp; |
stuffp | 653 | drivers/cdrom/mcdx.c | stuffp = mcdx_stuffp[MINOR(ip->i_rdev)]; |
stuffp | 654 | drivers/cdrom/mcdx.c | if (!stuffp->present) return -ENXIO; |
stuffp | 657 | drivers/cdrom/mcdx.c | if (-1 == mcdx_getstatus(stuffp, 1)) return -EIO; |
stuffp | 664 | drivers/cdrom/mcdx.c | if (inb((unsigned int) stuffp->rreg_status) & MCDX_RBIT_DOOR) { |
stuffp | 665 | drivers/cdrom/mcdx.c | if (jiffies - stuffp->ejected < ACLOSE_INHIBIT) return -EIO; |
stuffp | 666 | drivers/cdrom/mcdx.c | if (stuffp->autoclose) mcdx_closedoor(stuffp, 1); |
stuffp | 671 | drivers/cdrom/mcdx.c | if (stuffp->xxx < stuffp->changed) { |
stuffp | 679 | drivers/cdrom/mcdx.c | stuffp->audiostatus = CDROM_AUDIO_INVALID; |
stuffp | 686 | drivers/cdrom/mcdx.c | ans = mcdx_requestmultidiskinfo(stuffp, &stuffp->multi, 6); |
stuffp | 688 | drivers/cdrom/mcdx.c | stuffp->autoclose = 0; |
stuffp | 689 | drivers/cdrom/mcdx.c | mcdx_eject(stuffp, 1); |
stuffp | 695 | drivers/cdrom/mcdx.c | stuffp->autoclose = 1; |
stuffp | 697 | drivers/cdrom/mcdx.c | if (stuffp->multi.multi > 2) |
stuffp | 698 | drivers/cdrom/mcdx.c | WARN(("open() unknown multisession value (%d)\n", stuffp->multi.multi)); |
stuffp | 701 | drivers/cdrom/mcdx.c | if (!stuffp->multi.multi) |
stuffp | 702 | drivers/cdrom/mcdx.c | stuffp->multi.msf_last.second = 2; |
stuffp | 705 | drivers/cdrom/mcdx.c | stuffp->multi.multi, |
stuffp | 706 | drivers/cdrom/mcdx.c | stuffp->multi.msf_last.minute, |
stuffp | 707 | drivers/cdrom/mcdx.c | stuffp->multi.msf_last.second, |
stuffp | 708 | drivers/cdrom/mcdx.c | stuffp->multi.msf_last.frame)); |
stuffp | 712 | drivers/cdrom/mcdx.c | if (-1 == mcdx_requesttocdata(stuffp, &stuffp->di, 1)) return -EIO; |
stuffp | 714 | drivers/cdrom/mcdx.c | stuffp->lastsector = (CD_FRAMESIZE / 512) |
stuffp | 715 | drivers/cdrom/mcdx.c | * msf2log(&stuffp->di.msf_leadout) - 1; |
stuffp | 718 | drivers/cdrom/mcdx.c | stuffp->di.n_first, |
stuffp | 719 | drivers/cdrom/mcdx.c | stuffp->di.msf_first.minute, |
stuffp | 720 | drivers/cdrom/mcdx.c | stuffp->di.msf_first.second, |
stuffp | 721 | drivers/cdrom/mcdx.c | stuffp->di.msf_first.frame, |
stuffp | 722 | drivers/cdrom/mcdx.c | msf2log(&stuffp->di.msf_first))); |
stuffp | 724 | drivers/cdrom/mcdx.c | stuffp->di.n_last, |
stuffp | 725 | drivers/cdrom/mcdx.c | stuffp->di.msf_leadout.minute, |
stuffp | 726 | drivers/cdrom/mcdx.c | stuffp->di.msf_leadout.second, |
stuffp | 727 | drivers/cdrom/mcdx.c | stuffp->di.msf_leadout.frame, |
stuffp | 728 | drivers/cdrom/mcdx.c | msf2log(&stuffp->di.msf_leadout))); |
stuffp | 730 | drivers/cdrom/mcdx.c | if (stuffp->toc) { |
stuffp | 731 | drivers/cdrom/mcdx.c | TRACE((MALLOC, "open() free toc @ %p\n", stuffp->toc)); |
stuffp | 732 | drivers/cdrom/mcdx.c | kfree(stuffp->toc); |
stuffp | 734 | drivers/cdrom/mcdx.c | stuffp->toc = NULL; |
stuffp | 737 | drivers/cdrom/mcdx.c | if (-1 == mcdx_config(stuffp, 1)) return -EIO; |
stuffp | 745 | drivers/cdrom/mcdx.c | stuffp->xa = 0; |
stuffp | 746 | drivers/cdrom/mcdx.c | stuffp->audio = 0; |
stuffp | 750 | drivers/cdrom/mcdx.c | stuffp->xa ? "XA" : "normal")); |
stuffp | 753 | drivers/cdrom/mcdx.c | if (-1 == (ans = mcdx_setdatamode(stuffp, |
stuffp | 754 | drivers/cdrom/mcdx.c | stuffp->xa ? MODE2 : MODE1, 1))) |
stuffp | 757 | drivers/cdrom/mcdx.c | if ((stuffp->audio = e_audio(ans))) break; |
stuffp | 759 | drivers/cdrom/mcdx.c | while (0 == (ans = mcdx_transfer(stuffp, buf, 0, 1))) |
stuffp | 763 | drivers/cdrom/mcdx.c | stuffp->xa = !stuffp->xa; |
stuffp | 769 | drivers/cdrom/mcdx.c | if (-1 == mcdx_setdrivemode(stuffp, |
stuffp | 770 | drivers/cdrom/mcdx.c | stuffp->xa ? RAW : COOKED, 1)) |
stuffp | 773 | drivers/cdrom/mcdx.c | if (stuffp->audio) { |
stuffp | 777 | drivers/cdrom/mcdx.c | stuffp->xa ? "XA / " : "", |
stuffp | 778 | drivers/cdrom/mcdx.c | stuffp->multi.multi ? "Multi Session" : "Single Session")); |
stuffp | 781 | drivers/cdrom/mcdx.c | stuffp->xxx = jiffies; |
stuffp | 785 | drivers/cdrom/mcdx.c | if (0 == stuffp->users && (-1 == mcdx_lockdoor(stuffp, 1, 1))) |
stuffp | 788 | drivers/cdrom/mcdx.c | stuffp->users++; |
stuffp | 796 | drivers/cdrom/mcdx.c | struct s_drive_stuff *stuffp; |
stuffp | 800 | drivers/cdrom/mcdx.c | stuffp = mcdx_stuffp[MINOR(ip->i_rdev)]; |
stuffp | 802 | drivers/cdrom/mcdx.c | if (0 == --stuffp->users) { |
stuffp | 808 | drivers/cdrom/mcdx.c | if (-1 == mcdx_lockdoor(stuffp, 0, 3)) |
stuffp | 812 | drivers/cdrom/mcdx.c | if (stuffp->eject_sw) mcdx_eject(stuffp, 1); |
stuffp | 886 | drivers/cdrom/mcdx.c | struct s_drive_stuff *stuffp; |
stuffp | 889 | drivers/cdrom/mcdx.c | stuffp = mcdx_irq_map[irq]; |
stuffp | 891 | drivers/cdrom/mcdx.c | if (stuffp == NULL || !stuffp->busy) { |
stuffp | 897 | drivers/cdrom/mcdx.c | if (0 == (stuffp->introk = |
stuffp | 898 | drivers/cdrom/mcdx.c | (~(x = inb((unsigned int) stuffp->rreg_status)) & MCDX_RBIT_DTEN))) |
stuffp | 900 | drivers/cdrom/mcdx.c | irq, x, inb((unsigned int) stuffp->rreg_data))); |
stuffp | 906 | drivers/cdrom/mcdx.c | stuffp->busy = 0; |
stuffp | 907 | drivers/cdrom/mcdx.c | wake_up_interruptible(&stuffp->busyq); |
stuffp | 913 | drivers/cdrom/mcdx.c | struct s_drive_stuff *stuffp, |
stuffp | 930 | drivers/cdrom/mcdx.c | while (stuffp->lock) |
stuffp | 931 | drivers/cdrom/mcdx.c | interruptible_sleep_on(&stuffp->lockq); |
stuffp | 938 | drivers/cdrom/mcdx.c | stuffp->lock = 1; |
stuffp | 939 | drivers/cdrom/mcdx.c | stuffp->valid = 0; |
stuffp | 958 | drivers/cdrom/mcdx.c | outsb((unsigned int) stuffp->wreg_data, cmd, cmdlen); |
stuffp | 962 | drivers/cdrom/mcdx.c | if (-1 == mcdx_getval(stuffp, timeout, 0, bp)) { |
stuffp | 982 | drivers/cdrom/mcdx.c | if (stuffp->audiostatus == CDROM_AUDIO_INVALID) |
stuffp | 983 | drivers/cdrom/mcdx.c | stuffp->audiostatus = |
stuffp | 985 | drivers/cdrom/mcdx.c | else if (stuffp->audiostatus == CDROM_AUDIO_PLAY |
stuffp | 987 | drivers/cdrom/mcdx.c | stuffp->audiostatus = CDROM_AUDIO_COMPLETED; |
stuffp | 992 | drivers/cdrom/mcdx.c | stuffp->changed = jiffies; |
stuffp | 997 | drivers/cdrom/mcdx.c | if (-1 == mcdx_getval(stuffp, timeout, -1, bp)) { |
stuffp | 1009 | drivers/cdrom/mcdx.c | stuffp->lock = 0; |
stuffp | 1010 | drivers/cdrom/mcdx.c | wake_up_interruptible(&stuffp->lockq); |
stuffp | 1051 | drivers/cdrom/mcdx.c | struct s_drive_stuff *stuffp; |
stuffp | 1052 | drivers/cdrom/mcdx.c | stuffp = mcdx_stuffp[i]; |
stuffp | 1053 | drivers/cdrom/mcdx.c | if (!stuffp) continue; |
stuffp | 1054 | drivers/cdrom/mcdx.c | release_region((unsigned long) stuffp->wreg_data, MCDX_IO_SIZE); |
stuffp | 1055 | drivers/cdrom/mcdx.c | free_irq(stuffp->irq); |
stuffp | 1056 | drivers/cdrom/mcdx.c | if (stuffp->toc) { |
stuffp | 1057 | drivers/cdrom/mcdx.c | TRACE((MALLOC, "cleanup_module() free toc @ %p\n", stuffp->toc)); |
stuffp | 1058 | drivers/cdrom/mcdx.c | kfree(stuffp->toc); |
stuffp | 1060 | drivers/cdrom/mcdx.c | TRACE((MALLOC, "cleanup_module() free stuffp @ %p\n", stuffp)); |
stuffp | 1062 | drivers/cdrom/mcdx.c | kfree(stuffp); |
stuffp | 1120 | drivers/cdrom/mcdx.c | struct s_drive_stuff* stuffp; |
stuffp | 1123 | drivers/cdrom/mcdx.c | size = sizeof(*stuffp); |
stuffp | 1130 | drivers/cdrom/mcdx.c | if (!(stuffp = kmalloc(size, GFP_KERNEL))) { |
stuffp | 1136 | drivers/cdrom/mcdx.c | stuffp = (struct s_drive_stuff *) mem_start; |
stuffp | 1140 | drivers/cdrom/mcdx.c | TRACE((INIT, "init() got %d bytes for drive stuff @ %p\n", sizeof(*stuffp), stuffp)); |
stuffp | 1143 | drivers/cdrom/mcdx.c | memset(stuffp, 0, sizeof(*stuffp)); |
stuffp | 1144 | drivers/cdrom/mcdx.c | stuffp->autoclose = 1; /* close the door on open(2) */ |
stuffp | 1146 | drivers/cdrom/mcdx.c | stuffp->present = 0; /* this should be 0 already */ |
stuffp | 1147 | drivers/cdrom/mcdx.c | stuffp->toc = NULL; /* this should be NULL already */ |
stuffp | 1148 | drivers/cdrom/mcdx.c | stuffp->changed = jiffies; |
stuffp | 1151 | drivers/cdrom/mcdx.c | stuffp->irq = irq(mcdx_drive_map[drive]); |
stuffp | 1152 | drivers/cdrom/mcdx.c | stuffp->wreg_data = stuffp->rreg_data = port(mcdx_drive_map[drive]); |
stuffp | 1153 | drivers/cdrom/mcdx.c | stuffp->wreg_reset = stuffp->rreg_status = stuffp->wreg_data + 1; |
stuffp | 1154 | drivers/cdrom/mcdx.c | stuffp->wreg_hcon = stuffp->wreg_reset + 1; |
stuffp | 1155 | drivers/cdrom/mcdx.c | stuffp->wreg_chn = stuffp->wreg_hcon + 1; |
stuffp | 1158 | drivers/cdrom/mcdx.c | if (0 != check_region((unsigned int) stuffp->wreg_data, MCDX_IO_SIZE)) { |
stuffp | 1162 | drivers/cdrom/mcdx.c | stuffp->wreg_data, stuffp->irq, |
stuffp | 1163 | drivers/cdrom/mcdx.c | stuffp->wreg_data, |
stuffp | 1164 | drivers/cdrom/mcdx.c | stuffp->wreg_data + MCDX_IO_SIZE - 1)); |
stuffp | 1165 | drivers/cdrom/mcdx.c | TRACE((MALLOC, "init() free stuffp @ %p\n", stuffp)); |
stuffp | 1166 | drivers/cdrom/mcdx.c | kfree(stuffp); |
stuffp | 1171 | drivers/cdrom/mcdx.c | TRACE((INIT, "init() i/o port is available at 0x%3p\n", stuffp->wreg_data)); |
stuffp | 1174 | drivers/cdrom/mcdx.c | mcdx_reset(stuffp, HARD, 1); |
stuffp | 1177 | drivers/cdrom/mcdx.c | if (-1 == mcdx_requestversion(stuffp, &version, 4)) { |
stuffp | 1181 | drivers/cdrom/mcdx.c | stuffp->wreg_data, stuffp->irq)); |
stuffp | 1182 | drivers/cdrom/mcdx.c | TRACE((MALLOC, "init() free stuffp @ %p\n", stuffp)); |
stuffp | 1183 | drivers/cdrom/mcdx.c | kfree(stuffp); |
stuffp | 1190 | drivers/cdrom/mcdx.c | stuffp->readcmd = READDSPEED; |
stuffp | 1191 | drivers/cdrom/mcdx.c | stuffp->present = DOUBLE | DOOR | MULTI; |
stuffp | 1194 | drivers/cdrom/mcdx.c | stuffp->readcmd = READSSPEED; |
stuffp | 1195 | drivers/cdrom/mcdx.c | stuffp->present = SINGLE | DOOR | MULTI; |
stuffp | 1198 | drivers/cdrom/mcdx.c | stuffp->readcmd = READSSPEED; |
stuffp | 1199 | drivers/cdrom/mcdx.c | stuffp->present = SINGLE; |
stuffp | 1202 | drivers/cdrom/mcdx.c | stuffp->present = 0; break; |
stuffp | 1205 | drivers/cdrom/mcdx.c | stuffp->playcmd = READSSPEED; |
stuffp | 1208 | drivers/cdrom/mcdx.c | if (!stuffp->present) { |
stuffp | 1210 | drivers/cdrom/mcdx.c | MCDX, stuffp->wreg_data, stuffp->irq)); |
stuffp | 1211 | drivers/cdrom/mcdx.c | kfree(stuffp); |
stuffp | 1219 | drivers/cdrom/mcdx.c | stuffp->wreg_data, stuffp->irq, MAJOR_NR)); |
stuffp | 1220 | drivers/cdrom/mcdx.c | kfree(stuffp); |
stuffp | 1232 | drivers/cdrom/mcdx.c | mcdx_irq_map[stuffp->irq] = stuffp; |
stuffp | 1233 | drivers/cdrom/mcdx.c | if (request_irq(stuffp->irq, mcdx_intr, SA_INTERRUPT, DEVICE_NAME)) { |
stuffp | 1236 | drivers/cdrom/mcdx.c | stuffp->wreg_data, stuffp->irq, stuffp->irq)); |
stuffp | 1237 | drivers/cdrom/mcdx.c | stuffp->irq = 0; |
stuffp | 1238 | drivers/cdrom/mcdx.c | kfree(stuffp); |
stuffp | 1241 | drivers/cdrom/mcdx.c | request_region((unsigned int) stuffp->wreg_data, |
stuffp | 1248 | drivers/cdrom/mcdx.c | mcdx_delay(stuffp, HZ/2); |
stuffp | 1249 | drivers/cdrom/mcdx.c | for (i = 100; i; i--) (void) inb((unsigned int) stuffp->rreg_status); |
stuffp | 1254 | drivers/cdrom/mcdx.c | outb(0x50, (unsigned int) stuffp->wreg_chn); /* irq 11 -> channel register */ |
stuffp | 1258 | drivers/cdrom/mcdx.c | mcdx_config(stuffp, 1); |
stuffp | 1260 | drivers/cdrom/mcdx.c | stuffp->minor = drive; |
stuffp | 1264 | drivers/cdrom/mcdx.c | stuffp->wreg_data, stuffp->irq, version.code, |
stuffp | 1266 | drivers/cdrom/mcdx.c | mcdx_stuffp[drive] = stuffp; |
stuffp | 1267 | drivers/cdrom/mcdx.c | TRACE((INIT, "init() mcdx_stuffp[%d] = %p\n", drive, stuffp)); |
stuffp | 1278 | drivers/cdrom/mcdx.c | static int mcdx_transfer(struct s_drive_stuff *stuffp, |
stuffp | 1290 | drivers/cdrom/mcdx.c | if (stuffp->audio) { |
stuffp | 1295 | drivers/cdrom/mcdx.c | while (stuffp->lock) |
stuffp | 1296 | drivers/cdrom/mcdx.c | interruptible_sleep_on(&stuffp->lockq); |
stuffp | 1301 | drivers/cdrom/mcdx.c | if (stuffp->valid |
stuffp | 1302 | drivers/cdrom/mcdx.c | && (sector >= stuffp->pending) |
stuffp | 1303 | drivers/cdrom/mcdx.c | && (sector < stuffp->off_direct)) { |
stuffp | 1306 | drivers/cdrom/mcdx.c | off = stuffp->off_requested < (off = sector + nr_sectors) |
stuffp | 1307 | drivers/cdrom/mcdx.c | ? stuffp->off_requested : off; |
stuffp | 1309 | drivers/cdrom/mcdx.c | stuffp->lock = current->pid; |
stuffp | 1317 | drivers/cdrom/mcdx.c | while (stuffp->busy) { |
stuffp | 1318 | drivers/cdrom/mcdx.c | interruptible_sleep_on(&stuffp->busyq); |
stuffp | 1324 | drivers/cdrom/mcdx.c | if (((stuffp->busy == 0) && !stuffp->introk) |
stuffp | 1326 | drivers/cdrom/mcdx.c | if ((stuffp->busy == 0) && !stuffp->introk) |
stuffp | 1330 | drivers/cdrom/mcdx.c | stuffp->lock = 0; |
stuffp | 1331 | drivers/cdrom/mcdx.c | stuffp->busy = 0; |
stuffp | 1332 | drivers/cdrom/mcdx.c | wake_up_interruptible(&stuffp->lockq); |
stuffp | 1333 | drivers/cdrom/mcdx.c | wake_up_interruptible(&stuffp->busyq); |
stuffp | 1334 | drivers/cdrom/mcdx.c | stuffp->errno = MCDX_E; |
stuffp | 1341 | drivers/cdrom/mcdx.c | if (stuffp->xa && (0 == (stuffp->pending & 3))) { |
stuffp | 1344 | drivers/cdrom/mcdx.c | stuffp->pending, HEAD)); |
stuffp | 1345 | drivers/cdrom/mcdx.c | insb((unsigned int) stuffp->rreg_data, p, HEAD); |
stuffp | 1350 | drivers/cdrom/mcdx.c | TRACE((TRANSFER, "transfer() read sector %d\n", stuffp->pending)); |
stuffp | 1351 | drivers/cdrom/mcdx.c | insb((unsigned int) stuffp->rreg_data, p, 512); |
stuffp | 1356 | drivers/cdrom/mcdx.c | if ((stuffp->busy = (3 == (stuffp->pending & 3))) && stuffp->xa) { |
stuffp | 1359 | drivers/cdrom/mcdx.c | stuffp->pending, CD_XA_TAIL)); |
stuffp | 1360 | drivers/cdrom/mcdx.c | insb((unsigned int) stuffp->rreg_data, &dummy[0], CD_XA_TAIL); |
stuffp | 1363 | drivers/cdrom/mcdx.c | if (stuffp->pending == sector) { |
stuffp | 1369 | drivers/cdrom/mcdx.c | while (++(stuffp->pending) < off); |
stuffp | 1371 | drivers/cdrom/mcdx.c | stuffp->lock = 0; |
stuffp | 1372 | drivers/cdrom/mcdx.c | wake_up_interruptible(&stuffp->lockq); |
stuffp | 1382 | drivers/cdrom/mcdx.c | cmd[0] = stuffp->readcmd; |
stuffp | 1384 | drivers/cdrom/mcdx.c | stuffp->valid = 1; |
stuffp | 1385 | drivers/cdrom/mcdx.c | stuffp->pending = sector & ~3; |
stuffp | 1388 | drivers/cdrom/mcdx.c | TRACE((TRANSFER, "transfer() request sector %d\n", stuffp->pending)); |
stuffp | 1389 | drivers/cdrom/mcdx.c | if (stuffp->pending > stuffp->lastsector) { |
stuffp | 1391 | drivers/cdrom/mcdx.c | stuffp->pending)); |
stuffp | 1392 | drivers/cdrom/mcdx.c | stuffp->errno = MCDX_EOM; |
stuffp | 1397 | drivers/cdrom/mcdx.c | if ((stuffp->off_direct = stuffp->pending + DIRECT_SIZE) |
stuffp | 1398 | drivers/cdrom/mcdx.c | > stuffp->lastsector + 1) |
stuffp | 1399 | drivers/cdrom/mcdx.c | stuffp->off_direct = stuffp->lastsector + 1; |
stuffp | 1400 | drivers/cdrom/mcdx.c | if ((stuffp->off_requested = stuffp->pending + REQUEST_SIZE) |
stuffp | 1401 | drivers/cdrom/mcdx.c | > stuffp->lastsector + 1) |
stuffp | 1402 | drivers/cdrom/mcdx.c | stuffp->off_requested = stuffp->lastsector + 1; |
stuffp | 1404 | drivers/cdrom/mcdx.c | TRACE((TRANSFER, "transfer() pending %d\n", stuffp->pending)); |
stuffp | 1405 | drivers/cdrom/mcdx.c | TRACE((TRANSFER, "transfer() off_dir %d\n", stuffp->off_direct)); |
stuffp | 1406 | drivers/cdrom/mcdx.c | TRACE((TRANSFER, "transfer() off_req %d\n", stuffp->off_requested)); |
stuffp | 1410 | drivers/cdrom/mcdx.c | log2msf(stuffp->pending / 4, &pending); |
stuffp | 1416 | drivers/cdrom/mcdx.c | stuffp->busy = 1; |
stuffp | 1417 | drivers/cdrom/mcdx.c | cmd[6] = (unsigned char) (stuffp->off_requested - stuffp->pending) / 4; |
stuffp | 1419 | drivers/cdrom/mcdx.c | outsb((unsigned int) stuffp->wreg_data, cmd, sizeof cmd); |
stuffp | 1423 | drivers/cdrom/mcdx.c | stuffp->off_direct = (stuffp->off_direct += done) < stuffp->off_requested |
stuffp | 1424 | drivers/cdrom/mcdx.c | ? stuffp->off_direct : stuffp->off_requested; |
stuffp | 1460 | drivers/cdrom/mcdx.c | int mcdx_readtoc(struct s_drive_stuff* stuffp) |
stuffp | 1465 | drivers/cdrom/mcdx.c | if (stuffp->toc) { |
stuffp | 1471 | drivers/cdrom/mcdx.c | stuffp->di.n_last - stuffp->di.n_first + 1)); |
stuffp | 1473 | drivers/cdrom/mcdx.c | if (-1 == mcdx_hold(stuffp, 1)) return -1; |
stuffp | 1476 | drivers/cdrom/mcdx.c | if (-1 == mcdx_setdrivemode(stuffp, TOC, 1)) return -EIO; |
stuffp | 1481 | drivers/cdrom/mcdx.c | size = sizeof(struct s_subqcode) * (stuffp->di.n_last - stuffp->di.n_first + 2); |
stuffp | 1484 | drivers/cdrom/mcdx.c | stuffp->toc = kmalloc(size, GFP_KERNEL); |
stuffp | 1485 | drivers/cdrom/mcdx.c | if (!stuffp->toc) { |
stuffp | 1487 | drivers/cdrom/mcdx.c | mcdx_setdrivemode(stuffp, DATA, 1); |
stuffp | 1498 | drivers/cdrom/mcdx.c | trk < (stuffp->di.n_last - stuffp->di.n_first + 1); |
stuffp | 1500 | drivers/cdrom/mcdx.c | stuffp->toc[trk].index = 0; |
stuffp | 1506 | drivers/cdrom/mcdx.c | if (-1 == mcdx_requestsubqcode(stuffp, &q, 1)) { |
stuffp | 1507 | drivers/cdrom/mcdx.c | mcdx_setdrivemode(stuffp, DATA, 1); |
stuffp | 1514 | drivers/cdrom/mcdx.c | && (idx <= stuffp->di.n_last) |
stuffp | 1516 | drivers/cdrom/mcdx.c | && (stuffp->toc[idx - stuffp->di.n_first].index == 0)) { |
stuffp | 1517 | drivers/cdrom/mcdx.c | stuffp->toc[idx - stuffp->di.n_first] = q; |
stuffp | 1523 | drivers/cdrom/mcdx.c | memset(&stuffp->toc[stuffp->di.n_last - stuffp->di.n_first + 1], |
stuffp | 1524 | drivers/cdrom/mcdx.c | 0, sizeof(stuffp->toc[0])); |
stuffp | 1525 | drivers/cdrom/mcdx.c | stuffp->toc[stuffp->di.n_last - stuffp->di.n_first + 1].dt |
stuffp | 1526 | drivers/cdrom/mcdx.c | = stuffp->di.msf_leadout; |
stuffp | 1531 | drivers/cdrom/mcdx.c | if (-1 == mcdx_setdrivemode(stuffp, DATA, 2)) |
stuffp | 1537 | drivers/cdrom/mcdx.c | trk < (stuffp->di.n_last - stuffp->di.n_first + 2); |
stuffp | 1541 | drivers/cdrom/mcdx.c | trk + stuffp->di.n_first, |
stuffp | 1542 | drivers/cdrom/mcdx.c | stuffp->toc[trk].control, stuffp->toc[trk].tno, stuffp->toc[trk].index, |
stuffp | 1543 | drivers/cdrom/mcdx.c | stuffp->toc[trk].tt.minute, stuffp->toc[trk].tt.second, stuffp->toc[trk].tt.frame, |
stuffp | 1544 | drivers/cdrom/mcdx.c | stuffp->toc[trk].dt.minute, stuffp->toc[trk].dt.second, stuffp->toc[trk].dt.frame)); |
stuffp | 1552 | drivers/cdrom/mcdx.c | mcdx_playmsf(struct s_drive_stuff* stuffp, const struct cdrom_msf* msf) |
stuffp | 1558 | drivers/cdrom/mcdx.c | cmd[0] = stuffp->playcmd; |
stuffp | 1572 | drivers/cdrom/mcdx.c | outsb((unsigned int) stuffp->wreg_data, cmd, sizeof cmd); |
stuffp | 1574 | drivers/cdrom/mcdx.c | if (-1 == mcdx_getval(stuffp, 3*HZ, 0, NULL)) { |
stuffp | 1579 | drivers/cdrom/mcdx.c | stuffp->audiostatus = CDROM_AUDIO_PLAY; |
stuffp | 1584 | drivers/cdrom/mcdx.c | mcdx_playtrk(struct s_drive_stuff* stuffp, const struct cdrom_ti* ti) |
stuffp | 1589 | drivers/cdrom/mcdx.c | if (-1 == mcdx_readtoc(stuffp)) return -1; |
stuffp | 1591 | drivers/cdrom/mcdx.c | if (ti) p = &stuffp->toc[ti->cdti_trk0 - stuffp->di.n_first]; |
stuffp | 1592 | drivers/cdrom/mcdx.c | else p = &stuffp->start; |
stuffp | 1599 | drivers/cdrom/mcdx.c | p = &stuffp->toc[ti->cdti_trk1 - stuffp->di.n_first + 1]; |
stuffp | 1600 | drivers/cdrom/mcdx.c | stuffp->stop = *p; |
stuffp | 1601 | drivers/cdrom/mcdx.c | } else p = &stuffp->stop; |
stuffp | 1607 | drivers/cdrom/mcdx.c | return mcdx_playmsf(stuffp, &msf); |
stuffp | 1614 | drivers/cdrom/mcdx.c | mcdx_closedoor(struct s_drive_stuff *stuffp, int tries) |
stuffp | 1616 | drivers/cdrom/mcdx.c | if (stuffp->present & DOOR) |
stuffp | 1617 | drivers/cdrom/mcdx.c | return mcdx_talk(stuffp, "\xf8", 1, NULL, 1, 5*HZ, tries); |
stuffp | 1623 | drivers/cdrom/mcdx.c | mcdx_stop(struct s_drive_stuff *stuffp, int tries) |
stuffp | 1624 | drivers/cdrom/mcdx.c | { return mcdx_talk(stuffp, "\xf0", 1, NULL, 1, 2*HZ, tries); } |
stuffp | 1627 | drivers/cdrom/mcdx.c | mcdx_hold(struct s_drive_stuff *stuffp, int tries) |
stuffp | 1628 | drivers/cdrom/mcdx.c | { return mcdx_talk(stuffp, "\x70", 1, NULL, 1, 2*HZ, tries); } |
stuffp | 1631 | drivers/cdrom/mcdx.c | mcdx_eject(struct s_drive_stuff *stuffp, int tries) |
stuffp | 1633 | drivers/cdrom/mcdx.c | if (stuffp->present & DOOR) { |
stuffp | 1634 | drivers/cdrom/mcdx.c | stuffp->ejected = jiffies; |
stuffp | 1635 | drivers/cdrom/mcdx.c | return mcdx_talk(stuffp, "\xf6", 1, NULL, 1, 5*HZ, tries); |
stuffp | 1640 | drivers/cdrom/mcdx.c | mcdx_requestsubqcode(struct s_drive_stuff *stuffp, |
stuffp | 1648 | drivers/cdrom/mcdx.c | stuffp, "\x20", 1, buf, sizeof(buf), |
stuffp | 1665 | drivers/cdrom/mcdx.c | mcdx_requestmultidiskinfo(struct s_drive_stuff *stuffp, struct s_multi *multi, int tries) |
stuffp | 1670 | drivers/cdrom/mcdx.c | if (stuffp->present & MULTI) { |
stuffp | 1671 | drivers/cdrom/mcdx.c | ans = mcdx_talk(stuffp, "\x11", 1, buf, sizeof(buf), 2*HZ, tries); |
stuffp | 1684 | drivers/cdrom/mcdx.c | mcdx_requesttocdata(struct s_drive_stuff *stuffp, struct s_diskinfo *info, int tries) |
stuffp | 1688 | drivers/cdrom/mcdx.c | ans = mcdx_talk(stuffp, "\x10", 1, buf, sizeof(buf), 2*HZ, tries); |
stuffp | 1701 | drivers/cdrom/mcdx.c | mcdx_setdrivemode(struct s_drive_stuff *stuffp, enum drivemodes mode, int tries) |
stuffp | 1708 | drivers/cdrom/mcdx.c | if (-1 == (ans = mcdx_talk(stuffp, "\xc2", 1, cmd, sizeof(cmd), 5*HZ, tries))) |
stuffp | 1719 | drivers/cdrom/mcdx.c | return mcdx_talk(stuffp, cmd, 2, NULL, 1, 5*HZ, tries); |
stuffp | 1724 | drivers/cdrom/mcdx.c | mcdx_setdatamode(struct s_drive_stuff *stuffp, enum datamodes mode, int tries) |
stuffp | 1734 | drivers/cdrom/mcdx.c | return mcdx_talk(stuffp, cmd, 2, NULL, 1, 5*HZ, tries); |
stuffp | 1738 | drivers/cdrom/mcdx.c | mcdx_config(struct s_drive_stuff *stuffp, int tries) |
stuffp | 1749 | drivers/cdrom/mcdx.c | if (-1 == mcdx_talk(stuffp, cmd, 3, NULL, 1, 1*HZ, tries)) |
stuffp | 1755 | drivers/cdrom/mcdx.c | return mcdx_talk(stuffp, cmd, 3, NULL, 1, 1*HZ, tries); |
stuffp | 1759 | drivers/cdrom/mcdx.c | mcdx_requestversion(struct s_drive_stuff *stuffp, struct s_version *ver, int tries) |
stuffp | 1764 | drivers/cdrom/mcdx.c | if (-1 == (ans = mcdx_talk(stuffp, "\xdc", 1, buf, sizeof(buf), 2*HZ, tries))) |
stuffp | 1774 | drivers/cdrom/mcdx.c | mcdx_reset(struct s_drive_stuff *stuffp, enum resetmodes mode, int tries) |
stuffp | 1777 | drivers/cdrom/mcdx.c | outb(0, (unsigned int) stuffp->wreg_chn); /* no dma, no irq -> hardware */ |
stuffp | 1778 | drivers/cdrom/mcdx.c | outb(0, (unsigned int) stuffp->wreg_reset); /* hw reset */ |
stuffp | 1780 | drivers/cdrom/mcdx.c | } else return mcdx_talk(stuffp, "\x60", 1, NULL, 1, 5*HZ, tries); |
stuffp | 1784 | drivers/cdrom/mcdx.c | mcdx_lockdoor(struct s_drive_stuff *stuffp, int lock, int tries) |
stuffp | 1787 | drivers/cdrom/mcdx.c | if (stuffp->present & DOOR) { |
stuffp | 1789 | drivers/cdrom/mcdx.c | return mcdx_talk(stuffp, cmd, sizeof(cmd), NULL, 1, 5*HZ, tries); |
stuffp | 1795 | drivers/cdrom/mcdx.c | mcdx_getstatus(struct s_drive_stuff *stuffp, int tries) |
stuffp | 1796 | drivers/cdrom/mcdx.c | { return mcdx_talk(stuffp, "\x40", 1, NULL, 1, 5*HZ, tries); } |
stuffp | 1799 | drivers/cdrom/mcdx.c | mcdx_getval(struct s_drive_stuff *stuffp, int to, int delay, char* buf) |
stuffp | 1806 | drivers/cdrom/mcdx.c | while (inb((unsigned int) stuffp->rreg_status) & MCDX_RBIT_STEN) { |
stuffp | 1808 | drivers/cdrom/mcdx.c | mcdx_delay(stuffp, delay); |
stuffp | 1811 | drivers/cdrom/mcdx.c | *buf = (unsigned char) inb((unsigned int) stuffp->rreg_data) & 0xff; |
stuffp | 1818 | drivers/cdrom/mcdx.c | struct s_drive_stuff* stuffp, |
stuffp | 1829 | drivers/cdrom/mcdx.c | return mcdx_talk(stuffp, cmd, sizeof(cmd), NULL, 5, 200, tries); |