taglinefilesource code
drive396drivers/block/cmd640.cvoid cmd640_tune_drive(ide_drive_t* drive) {
drive408drivers/block/cmd640.cinterface_number = HWIF(drive) - ide_hwifs;
drive412drivers/block/cmd640.cdrive_number = drive - HWIF(drive)->drives;
drive414drivers/block/cmd640.cid = drive->id;
drive223drivers/block/floppy.c#define UDP (&drive_params[drive])
drive224drivers/block/floppy.c#define UDRS (&drive_state[drive])
drive225drivers/block/floppy.c#define UDRWE (&write_errors[drive])
drive226drivers/block/floppy.c#define UFDCS (&fdc_state[FDC(drive)])
drive575drivers/block/floppy.cstatic void reschedule_timeout(int drive, const char *message, int marg)
drive577drivers/block/floppy.cif (drive == CURRENTD)
drive578drivers/block/floppy.cdrive = current_drive;
drive580drivers/block/floppy.cif (drive < 0 || drive > N_DRIVE) {
drive582drivers/block/floppy.cdrive=0;
drive646drivers/block/floppy.cstatic int disk_change(int drive)
drive648drivers/block/floppy.cint fdc=FDC(drive);
drive652drivers/block/floppy.cif (!(FDCS->dor & (0x10 << UNIT(drive))) ||
drive653drivers/block/floppy.c(FDCS->dor & 3) != UNIT(drive) ||
drive654drivers/block/floppy.cfdc != FDC(drive)){
drive656drivers/block/floppy.cDPRINT3("drive=%d fdc=%d dor=%x\n",drive, FDC(drive),
drive663drivers/block/floppy.cDPRINT1("checking disk change line for drive %d\n",drive);
drive680drivers/block/floppy.ccurrent_type[drive] != NULL)
drive683drivers/block/floppy.ccurrent_type[drive] = NULL;
drive703drivers/block/floppy.cregister unsigned char drive, unit, newdor,olddor;
drive713drivers/block/floppy.cdrive = REVDRIVE(fdc,unit);
drive719drivers/block/floppy.cdisk_change(drive);
drive726drivers/block/floppy.cdrive = REVDRIVE(fdc,unit);
drive750drivers/block/floppy.cint drive;
drive756drivers/block/floppy.cfor (drive = 0; drive < N_DRIVE; drive++)
drive757drivers/block/floppy.cif (FDC(drive) == fdc &&
drive763drivers/block/floppy.cstatic void set_fdc(int drive)
drive765drivers/block/floppy.cif (drive >= 0 && drive < N_DRIVE){
drive766drivers/block/floppy.cfdc = FDC(drive);
drive767drivers/block/floppy.ccurrent_drive = drive;
drive782drivers/block/floppy.cstatic int lock_fdc(int drive, int interruptible)
drive799drivers/block/floppy.creschedule_timeout(drive, "lock fdc", 0);
drive800drivers/block/floppy.cset_fdc(drive);
drive804drivers/block/floppy.c#define LOCK_FDC(drive,interruptible) \
drive805drivers/block/floppy.cif (lock_fdc(drive,interruptible)) return -EINTR;
drive846drivers/block/floppy.cstatic void floppy_off(unsigned int drive)
drive849drivers/block/floppy.cregister int fdc=FDC(drive);
drive851drivers/block/floppy.cif (!(FDCS->dor & (0x10 << UNIT(drive))))
drive854drivers/block/floppy.cdel_timer(motor_off_timer+drive);
drive862drivers/block/floppy.cmotor_off_timer[drive].expires = jiffies + UDP->spindown - delta;
drive864drivers/block/floppy.cadd_timer(motor_off_timer+drive);
drive874drivers/block/floppy.cint i, drive, saved_drive;
drive881drivers/block/floppy.cdrive = (saved_drive + i + 1) % N_DRIVE;
drive884drivers/block/floppy.cset_fdc(drive);
drive885drivers/block/floppy.cif (!(set_dor(fdc, ~3, UNIT(drive) | (0x10 << UNIT(drive))) &
drive886drivers/block/floppy.c(0x10 << UNIT(drive))))
drive889drivers/block/floppy.cset_dor(fdc, ~(0x10 << UNIT(drive)), 0);
drive2047drivers/block/floppy.cint drive=DRIVE(device);
drive2049drivers/block/floppy.cLOCK_FDC(drive,1);
drive2728drivers/block/floppy.cstatic int user_reset_fdc(int drive, int arg, int interruptible)
drive2733drivers/block/floppy.cLOCK_FDC(drive,interruptible);
drive2772drivers/block/floppy.cstatic inline const char *drive_name(int type, int drive)
drive2959drivers/block/floppy.cint drive, ret, ret2;
drive2964drivers/block/floppy.cfor (drive= 0; drive < N_DRIVE; drive++){
drive2965drivers/block/floppy.cif (FDC(drive) != fdc)
drive2967drivers/block/floppy.cif (drive == current_drive){
drive3018drivers/block/floppy.cstatic inline void clear_write_error(int drive)
drive3024drivers/block/floppy.cint drive, int type, int device)
drive3039drivers/block/floppy.cLOCK_FDC(drive,1);
drive3043drivers/block/floppy.cset_bit(drive, &fake_change);
drive3059drivers/block/floppy.cLOCK_FDC(drive,1);
drive3064drivers/block/floppy.cuser_params[drive] = *g;
drive3065drivers/block/floppy.cif (buffer_drive == drive)
drive3066drivers/block/floppy.cSUPBOUND(buffer_max, user_params[drive].sect);
drive3067drivers/block/floppy.ccurrent_type[drive] = &user_params[drive];
drive3068drivers/block/floppy.cfloppy_sizes[drive] = user_params[drive].size >> 1;
drive3078drivers/block/floppy.cif (DRS->maxblock > user_params[drive].sect || DRS->maxtrack)
drive3182drivers/block/floppy.cint i,drive,type;
drive3199drivers/block/floppy.cdrive = DRIVE(device);
drive3225drivers/block/floppy.cLOCK_FDC(drive,1);
drive3226drivers/block/floppy.ccurrent_type[drive] = NULL;
drive3227drivers/block/floppy.cfloppy_sizes[drive] = MAX_DISK_SIZE;
drive3233drivers/block/floppy.cdrive, type, device);
drive3238drivers/block/floppy.coutparam = (char *) current_type[drive];
drive3258drivers/block/floppy.cLOCK_FDC(drive,1);
drive3269drivers/block/floppy.coutparam = drive_name(type,drive);
drive3277drivers/block/floppy.cLOCK_FDC(drive,1);
drive3284drivers/block/floppy.creturn user_reset_fdc(drive, (int)param, 1);
drive3297drivers/block/floppy.cLOCK_FDC(drive,1);
drive3304drivers/block/floppy.cLOCK_FDC(drive,1);
drive3325drivers/block/floppy.cint drive;
drive3328drivers/block/floppy.cdrive=0;
drive3331drivers/block/floppy.cdrive=1;
drive3338drivers/block/floppy.cfor (drive=0; drive < N_DRIVE; drive++){
drive3350drivers/block/floppy.callowed_drive_mask |= 1 << drive;
drive3351drivers/block/floppy.cprintk("fd%d is %s", drive,
drive3354drivers/block/floppy.cprintk("fd%d is unknown type %d",drive,
drive3365drivers/block/floppy.cint drive = DRIVE(inode->i_rdev);
drive3378drivers/block/floppy.cint drive = DRIVE(inode->i_rdev);
drive3395drivers/block/floppy.cint drive;
drive3397drivers/block/floppy.cdrive = DRIVE(inode->i_rdev);
drive3422drivers/block/floppy.cint drive;
drive3432drivers/block/floppy.cdrive = DRIVE(inode->i_rdev);
drive3433drivers/block/floppy.cif (drive >= N_DRIVE ||
drive3434drivers/block/floppy.c!(allowed_drive_mask & (1 << drive)) ||
drive3435drivers/block/floppy.cfdc_state[FDC(drive)].version == FDC_NONE)
drive3489drivers/block/floppy.cif (buffer_drive == drive)
drive3522drivers/block/floppy.cint drive = DRIVE(dev);
drive3533drivers/block/floppy.clock_fdc(drive,0);
drive3540drivers/block/floppy.ctest_bit(drive, &fake_change) ||
drive3541drivers/block/floppy.c(!TYPE(dev) && !current_type[drive]))
drive3552drivers/block/floppy.c#define NO_GEOM (!current_type[drive] && !TYPE(dev))
drive3554drivers/block/floppy.cint drive=DRIVE(dev);
drive3559drivers/block/floppy.ctest_bit(drive, &fake_change) ||
drive3561drivers/block/floppy.clock_fdc(drive,0);
drive3563drivers/block/floppy.cif (!(cf || test_bit(drive, &fake_change) || NO_GEOM)){
drive3569drivers/block/floppy.cif (buffer_drive == drive)
drive3571drivers/block/floppy.cclear_bit(drive, &fake_change);
drive3793drivers/block/floppy.cint i,unit,drive;
drive3835drivers/block/floppy.cfor (drive = 0; drive < N_DRIVE; drive++) {
drive3930drivers/block/floppy.cint drive;
drive3962drivers/block/floppy.cfor (drive=0; drive < N_FDC * 4; drive++)
drive3963drivers/block/floppy.cif (motor_off_timer[drive].next)
drive3964drivers/block/floppy.cprintk("motor off timer %d still active\n", drive);
drive496drivers/block/genhd.cvoid resetup_one_dev(struct gendisk *dev, int drive)
drive499drivers/block/genhd.cint first_minor  = drive << dev->minor_shift;
drive519drivers/block/genhd.cint i, drive;
drive528drivers/block/genhd.cfor (drive = 0 ; drive < dev->nr_real ; drive++) {
drive529drivers/block/genhd.cint first_minor  = drive << dev->minor_shift;
drive206drivers/block/hd.cstatic int controller_ready(unsigned int drive, unsigned int head)
drive213drivers/block/hd.coutb_p(0xA0 | (drive<<4) | head, HD_CURRENT);
drive220drivers/block/hd.cstatic void hd_out(unsigned int drive,unsigned int nsect,unsigned int sect,
drive232drivers/block/hd.cif (!controller_ready(drive, head)) {
drive237drivers/block/hd.coutb_p(hd_info[drive].ctl,HD_CMD);
drive239drivers/block/hd.coutb_p(hd_info[drive].wpcom>>2,++port);
drive244drivers/block/hd.coutb_p(0xA0|(drive<<4)|head,++port);
drive962drivers/block/hd.cint cmos_disks, drive;
drive964drivers/block/hd.cfor (drive=0 ; drive<2 ; drive++) {
drive965drivers/block/hd.cbios_info[drive].cyl   = hd_info[drive].cyl = *(unsigned short *) BIOS;
drive966drivers/block/hd.cbios_info[drive].head  = hd_info[drive].head = *(2+BIOS);
drive967drivers/block/hd.cbios_info[drive].wpcom = hd_info[drive].wpcom = *(unsigned short *) (5+BIOS);
drive968drivers/block/hd.cbios_info[drive].ctl   = hd_info[drive].ctl = *(8+BIOS);
drive969drivers/block/hd.cbios_info[drive].lzone = hd_info[drive].lzone = *(unsigned short *) (12+BIOS);
drive970drivers/block/hd.cbios_info[drive].sect  = hd_info[drive].sect = *(14+BIOS);
drive972drivers/block/hd.cif (hd_info[drive].cyl && NR_HD == drive)
drive169drivers/block/ide-cd.c#define CDROM_CONFIG_FLAGS(drive) ((struct ide_cd_config_flags *)&((drive)->bios_sect))
drive181drivers/block/ide-cd.c#define CDROM_STATE_FLAGS(drive)  ((struct ide_cd_state_flags *)&((drive)->bios_head))
drive199drivers/block/ide-cd.cvoid cdrom_in_bytes (ide_drive_t *drive, void *buffer, uint bytecount)
drive202drivers/block/ide-cd.cide_input_data (drive, buffer, bytecount / 4);
drive211drivers/block/ide-cd.cvoid cdrom_out_bytes (ide_drive_t *drive, void *buffer, uint bytecount)
drive214drivers/block/ide-cd.cide_output_data (drive, buffer, bytecount / 4);
drive371drivers/block/ide-cd.cvoid cdrom_analyze_sense_data (ide_drive_t *drive, 
drive389drivers/block/ide-cd.cprintk ("ATAPI device %s:\n", drive->name);
drive476drivers/block/ide-cd.cdrive->name,
drive497drivers/block/ide-cd.cstatic void cdrom_queue_request_sense (ide_drive_t *drive, 
drive507drivers/block/ide-cd.cint major = HWIF(drive)->major;
drive512drivers/block/ide-cd.crq = HWGROUP(drive)->rq;
drive520drivers/block/ide-cd.cHWGROUP(drive)->rq = NULL;
drive528drivers/block/ide-cd.creqbuf = &drive->cdrom_info.sense_data;
drive532drivers/block/ide-cd.cpc = &HWIF(drive)->request_sense_pc;
drive548drivers/block/ide-cd.crq = &HWIF(drive)->request_sense_request;
drive550drivers/block/ide-cd.crq->rq_dev = MKDEV (major, (drive->select.b.unit) << PARTN_BITS);
drive573drivers/block/ide-cd.cstatic void cdrom_end_request (int uptodate, ide_drive_t *drive)
drive575drivers/block/ide-cd.cstruct request *rq = HWGROUP(drive)->rq;
drive589drivers/block/ide-cd.ccdrom_analyze_sense_data (drive,
drive594drivers/block/ide-cd.cide_end_request (uptodate, HWGROUP(drive));
drive600drivers/block/ide-cd.cstatic void cdrom_saw_media_change (ide_drive_t *drive)
drive602drivers/block/ide-cd.cCDROM_STATE_FLAGS (drive)->media_changed = 1;
drive603drivers/block/ide-cd.cCDROM_STATE_FLAGS (drive)->toc_valid = 0;
drive604drivers/block/ide-cd.cdrive->cdrom_info.nsectors_buffered = 0;
drive610drivers/block/ide-cd.cstatic int cdrom_decode_status (ide_drive_t *drive, int good_stat, int *stat_ret)
drive612drivers/block/ide-cd.cstruct request *rq = HWGROUP(drive)->rq;
drive627drivers/block/ide-cd.cprintk ("%s : missing request in cdrom_decode_status\n", drive->name);
drive640drivers/block/ide-cd.ccdrom_end_request (1, drive);
drive641drivers/block/ide-cd.cif (ide_error (drive, "request sense failure", stat))
drive655drivers/block/ide-cd.ccdrom_saw_media_change (drive);
drive663drivers/block/ide-cd.cprintk ("%s : tray open or drive not ready\n", drive->name);
drive669drivers/block/ide-cd.ccdrom_saw_media_change (drive);
drive670drivers/block/ide-cd.cprintk ("%s: media changed\n", drive->name);
drive676drivers/block/ide-cd.cide_dump_status (drive, "packet command error", stat);
drive694drivers/block/ide-cd.ccdrom_end_request (1, drive);
drive697drivers/block/ide-cd.ccdrom_queue_request_sense (drive, sem, pc->sense_data, pc);
drive707drivers/block/ide-cd.ccdrom_saw_media_change (drive);
drive710drivers/block/ide-cd.cprintk ("%s : tray open\n", drive->name);
drive711drivers/block/ide-cd.ccdrom_end_request (0, drive);
drive717drivers/block/ide-cd.ccdrom_saw_media_change (drive);
drive723drivers/block/ide-cd.ccdrom_end_request (0, drive);
drive730drivers/block/ide-cd.cide_dump_status (drive, "command error", stat);
drive731drivers/block/ide-cd.ccdrom_end_request (0, drive);
drive737drivers/block/ide-cd.cif (ide_error (drive, "cdrom_decode_status", stat))
drive744drivers/block/ide-cd.ccdrom_end_request (0, drive);
drive750drivers/block/ide-cd.ccdrom_queue_request_sense (drive, NULL, NULL, NULL);
drive767drivers/block/ide-cd.cstatic int cdrom_start_packet_command (ide_drive_t *drive, int xferlen,
drive771drivers/block/ide-cd.cif (ide_wait_stat (drive, 0, BUSY_STAT, WAIT_READY)) return 1;
drive780drivers/block/ide-cd.cOUT_BYTE (drive->ctl, IDE_CONTROL_REG);
drive782drivers/block/ide-cd.cif (CDROM_CONFIG_FLAGS (drive)->drq_interrupt)
drive784drivers/block/ide-cd.cide_set_handler (drive, handler);
drive790drivers/block/ide-cd.c(*handler) (drive);
drive802drivers/block/ide-cd.cstatic int cdrom_transfer_packet_command (ide_drive_t *drive,
drive806drivers/block/ide-cd.cif (CDROM_CONFIG_FLAGS (drive)->drq_interrupt)
drive813drivers/block/ide-cd.cif (cdrom_decode_status (drive, DRQ_STAT, &stat_dum)) return 1;
drive818drivers/block/ide-cd.cif (ide_wait_stat (drive, DRQ_STAT, BUSY_STAT, WAIT_READY)) return 1;
drive822drivers/block/ide-cd.cide_set_handler (drive, handler);
drive825drivers/block/ide-cd.ccdrom_out_bytes (drive, cmd_buf, cmd_len);
drive843drivers/block/ide-cd.cstatic void cdrom_buffer_sectors (ide_drive_t *drive, unsigned long sector,
drive846drivers/block/ide-cd.cstruct cdrom_info *info = &drive->cdrom_info;
drive875drivers/block/ide-cd.ccdrom_in_bytes (drive, dest, SECTOR_SIZE);
drive886drivers/block/ide-cd.ccdrom_in_bytes (drive, dum, sizeof (dum));
drive898drivers/block/ide-cd.cint cdrom_read_check_ireason (ide_drive_t *drive, int len, int ireason)
drive908drivers/block/ide-cd.cdrive->name);
drive915drivers/block/ide-cd.ccdrom_out_bytes (drive, &dum, sizeof (dum));
drive924drivers/block/ide-cd.cdrive->name, ireason);
drive927drivers/block/ide-cd.ccdrom_end_request (0, drive);
drive936drivers/block/ide-cd.cstatic void cdrom_read_intr (ide_drive_t *drive)
drive941drivers/block/ide-cd.cstruct request *rq = HWGROUP(drive)->rq;
drive944drivers/block/ide-cd.cif (cdrom_decode_status (drive, 0, &stat)) return;
drive958drivers/block/ide-cd.cdrive->name, rq->current_nr_sectors);
drive959drivers/block/ide-cd.ccdrom_end_request (0, drive);
drive962drivers/block/ide-cd.ccdrom_end_request (1, drive);
drive969drivers/block/ide-cd.cif (cdrom_read_check_ireason (drive, len, ireason)) return;
drive976drivers/block/ide-cd.cdrive->name, len);
drive978drivers/block/ide-cd.ccdrom_end_request (0, drive);
drive994drivers/block/ide-cd.ccdrom_in_bytes (drive, dum, sizeof (dum));
drive1010drivers/block/ide-cd.ccdrom_end_request (1, drive);
drive1016drivers/block/ide-cd.ccdrom_buffer_sectors (drive, rq->sector, sectors_to_transfer);
drive1030drivers/block/ide-cd.ccdrom_in_bytes (drive, rq->buffer, SECTOR_SIZE);
drive1043drivers/block/ide-cd.cide_set_handler (drive, &cdrom_read_intr);
drive1051drivers/block/ide-cd.cstatic int cdrom_read_from_buffer (ide_drive_t *drive)
drive1053drivers/block/ide-cd.cstruct cdrom_info *info = &drive->cdrom_info;
drive1054drivers/block/ide-cd.cstruct request *rq = HWGROUP(drive)->rq;
drive1066drivers/block/ide-cd.ccdrom_end_request (1, drive);
drive1081drivers/block/ide-cd.ccdrom_end_request (1, drive);
drive1087drivers/block/ide-cd.ccdrom_end_request (1, drive);
drive1097drivers/block/ide-cd.cdrive->name, rq->sector);
drive1098drivers/block/ide-cd.ccdrom_end_request (0, drive);
drive1113drivers/block/ide-cd.cstatic void cdrom_start_read_continuation (ide_drive_t *drive)
drive1116drivers/block/ide-cd.cstruct request *rq = HWGROUP(drive)->rq;
drive1139drivers/block/ide-cd.cdrive->name, rq->current_nr_sectors);
drive1140drivers/block/ide-cd.ccdrom_end_request (0, drive);
drive1178drivers/block/ide-cd.c(void) cdrom_transfer_packet_command (drive, pc.c, sizeof (pc.c),
drive1186drivers/block/ide-cd.cstatic void cdrom_start_read (ide_drive_t *drive, unsigned int block)
drive1188drivers/block/ide-cd.cstruct request *rq = HWGROUP(drive)->rq;
drive1195drivers/block/ide-cd.cif (cdrom_read_from_buffer (drive))
drive1199drivers/block/ide-cd.cdrive->cdrom_info.nsectors_buffered = 0;
drive1202drivers/block/ide-cd.ccdrom_start_packet_command (drive, 32768, cdrom_start_read_continuation);
drive1214drivers/block/ide-cd.ccdrom_lockdoor (ide_drive_t *drive, int lockflag,
drive1220drivers/block/ide-cd.cstatic void cdrom_pc_intr (ide_drive_t *drive)
drive1223drivers/block/ide-cd.cstruct request *rq = HWGROUP(drive)->rq;
drive1227drivers/block/ide-cd.cif (cdrom_decode_status (drive, 0, &stat)) return;
drive1247drivers/block/ide-cd.ccdrom_end_request (1, drive);
drive1251drivers/block/ide-cd.cdrive->name, pc->buflen);
drive1253drivers/block/ide-cd.ccdrom_end_request (1, drive);
drive1271drivers/block/ide-cd.cdrive->name);
drive1277drivers/block/ide-cd.ccdrom_out_bytes (drive, pc->buffer, thislen);
drive1284drivers/block/ide-cd.ccdrom_out_bytes (drive, &dum, sizeof (dum));
drive1300drivers/block/ide-cd.cdrive->name);
drive1306drivers/block/ide-cd.ccdrom_in_bytes (drive, pc->buffer, thislen);
drive1313drivers/block/ide-cd.ccdrom_in_bytes (drive, &dum, sizeof (dum));
drive1325drivers/block/ide-cd.cdrive->name, ireason);
drive1330drivers/block/ide-cd.cide_set_handler (drive, &cdrom_pc_intr);
drive1334drivers/block/ide-cd.cstatic void cdrom_do_pc_continuation (ide_drive_t *drive)
drive1336drivers/block/ide-cd.cstruct request *rq = HWGROUP(drive)->rq;
drive1340drivers/block/ide-cd.ccdrom_transfer_packet_command (drive, pc->c, sizeof (pc->c), &cdrom_pc_intr);
drive1344drivers/block/ide-cd.cstatic void cdrom_do_packet_command (ide_drive_t *drive)
drive1347drivers/block/ide-cd.cstruct request *rq = HWGROUP(drive)->rq;
drive1356drivers/block/ide-cd.ccdrom_start_packet_command (drive, len, cdrom_do_pc_continuation);
drive1372drivers/block/ide-cd.cvoid cdrom_queue_request (ide_drive_t *drive, struct request *req)
drive1376drivers/block/ide-cd.cint major = HWIF(drive)->major;
drive1379drivers/block/ide-cd.creq->rq_dev = MKDEV (major, (drive->select.b.unit) << PARTN_BITS);
drive1405drivers/block/ide-cd.cint cdrom_queue_packet_command (ide_drive_t *drive, struct packet_command *pc)
drive1427drivers/block/ide-cd.ccdrom_queue_request (drive, &req);
drive1467drivers/block/ide-cd.cif (CDROM_STATE_FLAGS (drive)->door_locked == 0 &&
drive1472drivers/block/ide-cd.c(void) cdrom_lockdoor (drive, 1, NULL);
drive1484drivers/block/ide-cd.cvoid ide_do_rw_cdrom (ide_drive_t *drive, unsigned long block)
drive1486drivers/block/ide-cd.cstruct request *rq = HWGROUP(drive)->rq;
drive1489drivers/block/ide-cd.ccdrom_do_packet_command (drive);
drive1493drivers/block/ide-cd.ccdrom_end_request (1, drive);
drive1494drivers/block/ide-cd.cif (ide_do_reset (drive))
drive1501drivers/block/ide-cd.ccdrom_end_request (0, drive);
drive1504drivers/block/ide-cd.ccdrom_start_read (drive, block);
drive1569drivers/block/ide-cd.ccdrom_check_status (ide_drive_t  *drive,
drive1579drivers/block/ide-cd.creturn cdrom_queue_packet_command (drive, &pc);
drive1585drivers/block/ide-cd.ccdrom_lockdoor (ide_drive_t *drive, int lockflag,
drive1596drivers/block/ide-cd.cif (CDROM_CONFIG_FLAGS (drive)->no_doorlock)
drive1605drivers/block/ide-cd.cstat = cdrom_queue_packet_command (drive, &pc);
drive1609drivers/block/ide-cd.cCDROM_STATE_FLAGS (drive)->door_locked = lockflag;
drive1616drivers/block/ide-cd.cprintk ("%s: door locking not supported\n", drive->name);
drive1617drivers/block/ide-cd.cCDROM_CONFIG_FLAGS (drive)->no_doorlock = 1;
drive1619drivers/block/ide-cd.cCDROM_STATE_FLAGS (drive)->door_locked = lockflag;
drive1629drivers/block/ide-cd.ccdrom_eject (ide_drive_t *drive, int ejectflag,
drive1639drivers/block/ide-cd.creturn cdrom_queue_packet_command (drive, &pc);
drive1644drivers/block/ide-cd.ccdrom_pause (ide_drive_t *drive, int pauseflag,
drive1654drivers/block/ide-cd.creturn cdrom_queue_packet_command (drive, &pc);
drive1659drivers/block/ide-cd.ccdrom_startstop (ide_drive_t *drive, int startflag,
drive1670drivers/block/ide-cd.creturn cdrom_queue_packet_command (drive, &pc);
drive1675drivers/block/ide-cd.ccdrom_read_capacity (ide_drive_t *drive, unsigned *capacity,
drive1693drivers/block/ide-cd.cstat = cdrom_queue_packet_command (drive, &pc);
drive1705drivers/block/ide-cd.ccdrom_read_tocentry (ide_drive_t *drive, int trackno, int msf_flag,
drive1722drivers/block/ide-cd.creturn cdrom_queue_packet_command (drive, &pc);
drive1728drivers/block/ide-cd.ccdrom_read_toc (ide_drive_t *drive,
drive1733drivers/block/ide-cd.cstruct atapi_toc *toc = drive->cdrom_info.toc;
drive1744drivers/block/ide-cd.cdrive->cdrom_info.toc = toc;
drive1749drivers/block/ide-cd.cprintk ("%s: No cdrom TOC buffer!\n", drive->name);
drive1755drivers/block/ide-cd.cif (CDROM_STATE_FLAGS (drive)->toc_valid)
drive1756drivers/block/ide-cd.c(void) cdrom_check_status (drive, NULL);
drive1758drivers/block/ide-cd.cif (CDROM_STATE_FLAGS (drive)->toc_valid) return 0;
drive1761drivers/block/ide-cd.cmsf_flag = (CDROM_CONFIG_FLAGS (drive)->no_lba_toc);
drive1764drivers/block/ide-cd.cstat = cdrom_read_tocentry (drive, 0, msf_flag, 0, (char *)&toc->hdr,
drive1775drivers/block/ide-cd.cstat = cdrom_read_tocentry (drive, 0, msf_flag, 0, (char *)&toc->hdr,
drive1793drivers/block/ide-cd.cstat = cdrom_read_tocentry (drive, 0, msf_flag, 1,
drive1810drivers/block/ide-cd.cstat = cdrom_read_capacity (drive, &toc->capacity, reqbuf);
drive1813drivers/block/ide-cd.cHWIF(drive)->gd->sizes[drive->select.b.unit << PARTN_BITS]
drive1815drivers/block/ide-cd.cdrive->part[0].nr_sects = toc->capacity * SECTORS_PER_FRAME;
drive1818drivers/block/ide-cd.cCDROM_STATE_FLAGS (drive)->toc_valid = 1;
drive1825drivers/block/ide-cd.ccdrom_read_subchannel (ide_drive_t *drive,
drive1841drivers/block/ide-cd.creturn cdrom_queue_packet_command (drive, &pc);
drive1847drivers/block/ide-cd.ccdrom_mode_sense (ide_drive_t *drive, int pageno, int modeflag,
drive1862drivers/block/ide-cd.creturn cdrom_queue_packet_command (drive, &pc);
drive1867drivers/block/ide-cd.ccdrom_mode_select (ide_drive_t *drive, int pageno, char *buf, int buflen,
drive1882drivers/block/ide-cd.creturn cdrom_queue_packet_command (drive, &pc);
drive1887drivers/block/ide-cd.ccdrom_play_lba_range_play12 (ide_drive_t *drive, int lba_start, int lba_end,
drive1901drivers/block/ide-cd.creturn cdrom_queue_packet_command (drive, &pc);
drive1906drivers/block/ide-cd.ccdrom_play_lba_range_msf (ide_drive_t *drive, int lba_start, int lba_end,
drive1918drivers/block/ide-cd.cif (CDROM_CONFIG_FLAGS (drive)->msf_as_bcd)
drive1928drivers/block/ide-cd.creturn cdrom_queue_packet_command (drive, &pc);
drive1935drivers/block/ide-cd.ccdrom_play_lba_range (ide_drive_t *drive, int lba_start, int lba_end,
drive1949drivers/block/ide-cd.cif (CDROM_CONFIG_FLAGS (drive)->no_playaudio12)
drive1950drivers/block/ide-cd.creturn cdrom_play_lba_range_msf (drive, lba_start, lba_end, reqbuf);
drive1959drivers/block/ide-cd.cstat = cdrom_play_lba_range_play12 (drive, lba_start, lba_end, reqbuf);
drive1968drivers/block/ide-cd.c"trying PLAYAUDIO_MSF\n", drive->name);
drive1969drivers/block/ide-cd.cCDROM_CONFIG_FLAGS (drive)->no_playaudio12 = 1;
drive1970drivers/block/ide-cd.cCDROM_CONFIG_FLAGS (drive)->msf_as_bcd = 1;
drive1971drivers/block/ide-cd.creturn cdrom_play_lba_range_msf (drive, lba_start, lba_end, reqbuf);
drive1981drivers/block/ide-cd.cint cdrom_get_toc_entry (ide_drive_t *drive, int track,
drive1989drivers/block/ide-cd.cstat = cdrom_read_toc (drive, reqbuf);
drive1992drivers/block/ide-cd.ctoc = drive->cdrom_info.toc;
drive2009drivers/block/ide-cd.ccdrom_read_block (ide_drive_t *drive, int format, int lba,
drive2026drivers/block/ide-cd.cif (CDROM_CONFIG_FLAGS (drive)->old_readcd)
drive2037drivers/block/ide-cd.cstat = cdrom_queue_packet_command (drive, &pc);
drive2042drivers/block/ide-cd.cCDROM_CONFIG_FLAGS (drive)->old_readcd == 0)
drive2045drivers/block/ide-cd.cdrive->name);
drive2046drivers/block/ide-cd.cCDROM_CONFIG_FLAGS (drive)->old_readcd = 1;
drive2047drivers/block/ide-cd.creturn cdrom_read_block (drive, format, lba, buf, buflen, reqbuf);
drive2054drivers/block/ide-cd.cint ide_cdrom_ioctl (ide_drive_t *drive, struct inode *inode,
drive2063drivers/block/ide-cd.cif (drive->usage > 1)
drive2066drivers/block/ide-cd.cstat = cdrom_lockdoor (drive, 0, NULL);
drive2069drivers/block/ide-cd.creturn cdrom_eject (drive, 0, NULL);
drive2074drivers/block/ide-cd.cCDROM_STATE_FLAGS (drive)->eject_on_close = arg;
drive2079drivers/block/ide-cd.creturn cdrom_pause (drive, 1, NULL);
drive2082drivers/block/ide-cd.creturn cdrom_pause (drive, 0, NULL);
drive2085drivers/block/ide-cd.creturn cdrom_startstop (drive, 1, NULL);
drive2091drivers/block/ide-cd.cstat = cdrom_startstop (drive, 0, NULL);
drive2094drivers/block/ide-cd.creturn cdrom_eject (drive, 1, NULL);
drive2114drivers/block/ide-cd.creturn cdrom_play_lba_range (drive, lba_start, lba_end, NULL);
drive2130drivers/block/ide-cd.cstat = cdrom_get_toc_entry (drive, ti.cdti_trk0, &first_toc, NULL);
drive2132drivers/block/ide-cd.cstat = cdrom_get_toc_entry (drive, ti.cdti_trk1, &last_toc, NULL);
drive2141drivers/block/ide-cd.creturn cdrom_play_lba_range (drive, lba_start, lba_end, NULL);
drive2154drivers/block/ide-cd.cstat = cdrom_read_toc (drive, NULL);
drive2157drivers/block/ide-cd.ctoc = drive->cdrom_info.toc;
drive2179drivers/block/ide-cd.cstat = cdrom_get_toc_entry (drive, tocentry.cdte_track, &toce, NULL);
drive2214drivers/block/ide-cd.cstat = cdrom_read_subchannel (drive, buffer, sizeof (buffer), NULL);
drive2259drivers/block/ide-cd.cstat = cdrom_mode_sense (drive, 0x0e, 0, buffer, sizeof (buffer),NULL);
drive2261drivers/block/ide-cd.cstat = cdrom_mode_sense (drive, 0x0e, 1, mask  , sizeof (buffer),NULL);
drive2271drivers/block/ide-cd.creturn cdrom_mode_select (drive, 0x0e, buffer, sizeof (buffer), NULL);
drive2283drivers/block/ide-cd.cstat = cdrom_mode_sense (drive, 0x0e, 0, buffer, sizeof (buffer), NULL);
drive2310drivers/block/ide-cd.cstat = cdrom_read_toc (drive, NULL);
drive2313drivers/block/ide-cd.ctoc = drive->cdrom_info.toc;
drive2343drivers/block/ide-cd.cstat = cdrom_read_toc (drive, NULL);
drive2346drivers/block/ide-cd.ctoc = drive->cdrom_info.toc;
drive2377drivers/block/ide-cd.cstat = cdrom_read_block (drive, 1, lba, buf,
drive2418drivers/block/ide-cd.cstat = cdrom_read_toc (drive, NULL);
drive2421drivers/block/ide-cd.ctoc = drive->cdrom_info.toc;
drive2426drivers/block/ide-cd.cstat = cdrom_read_block (drive, format, lba, buf, blocksize, NULL);
drive2439drivers/block/ide-cd.ccdrom_queue_request (drive, &req);
drive2479drivers/block/ide-cd.cstat = cdrom_queue_packet_command (drive, &pc);
drive2501drivers/block/ide-cd.cint ide_cdrom_check_media_change (ide_drive_t *drive)
drive2505drivers/block/ide-cd.c(void) cdrom_check_status (drive, NULL);
drive2507drivers/block/ide-cd.cretval = CDROM_STATE_FLAGS (drive)->media_changed;
drive2508drivers/block/ide-cd.cCDROM_STATE_FLAGS (drive)->media_changed = 0;
drive2514drivers/block/ide-cd.cint ide_cdrom_open (struct inode *ip, struct file *fp, ide_drive_t *drive)
drive2519drivers/block/ide-cd.c--drive->usage;
drive2524drivers/block/ide-cd.cif (drive->usage == 1)
drive2531drivers/block/ide-cd.cstat = cdrom_check_status (drive, &my_reqbuf);
drive2536drivers/block/ide-cd.ccdrom_eject (drive, 1, &my_reqbuf);
drive2537drivers/block/ide-cd.cstat = cdrom_check_status (drive, &my_reqbuf);
drive2543drivers/block/ide-cd.c--drive->usage;
drive2548drivers/block/ide-cd.c(void) cdrom_lockdoor (drive, 1, &my_reqbuf);
drive2551drivers/block/ide-cd.c(void) cdrom_read_toc (drive, &my_reqbuf);
drive2562drivers/block/ide-cd.cvoid ide_cdrom_release (struct inode *inode, struct file *file, ide_drive_t *drive)
drive2564drivers/block/ide-cd.cif (drive->usage == 0)
drive2569drivers/block/ide-cd.c(void) cdrom_lockdoor (drive, 0, NULL);
drive2572drivers/block/ide-cd.cif (CDROM_STATE_FLAGS (drive)->eject_on_close)
drive2573drivers/block/ide-cd.c(void) cdrom_eject (drive, 0, NULL);
drive2583drivers/block/ide-cd.cvoid ide_cdrom_setup (ide_drive_t *drive)
drive2585drivers/block/ide-cd.cblksize_size[HWIF(drive)->major][drive->select.b.unit << PARTN_BITS] = CD_FRAMESIZE;
drive2587drivers/block/ide-cd.cdrive->special.all = 0;
drive2588drivers/block/ide-cd.cdrive->ready_stat = 0;
drive2590drivers/block/ide-cd.cCDROM_STATE_FLAGS (drive)->media_changed = 0;
drive2591drivers/block/ide-cd.cCDROM_STATE_FLAGS (drive)->toc_valid     = 0;
drive2592drivers/block/ide-cd.cCDROM_STATE_FLAGS (drive)->door_locked   = 0;
drive2595drivers/block/ide-cd.cCDROM_STATE_FLAGS (drive)->eject_on_close= 0;
drive2597drivers/block/ide-cd.cCDROM_CONFIG_FLAGS (drive)->no_doorlock = 0;
drive2598drivers/block/ide-cd.cCDROM_CONFIG_FLAGS (drive)->no_playaudio12 = 0;
drive2599drivers/block/ide-cd.cCDROM_CONFIG_FLAGS (drive)->old_readcd = 0;
drive2600drivers/block/ide-cd.cCDROM_CONFIG_FLAGS (drive)->no_lba_toc = 0;
drive2601drivers/block/ide-cd.cCDROM_CONFIG_FLAGS (drive)->msf_as_bcd = 0;
drive2602drivers/block/ide-cd.cCDROM_CONFIG_FLAGS (drive)->drq_interrupt =
drive2603drivers/block/ide-cd.c((drive->id->config & 0x0060) == 0x20);
drive2606drivers/block/ide-cd.cif (strcmp (drive->id->model, "CD220E") == 0 ||
drive2607drivers/block/ide-cd.cstrcmp (drive->id->model, "CD")     == 0)        /* Creative Labs */
drive2608drivers/block/ide-cd.cCDROM_CONFIG_FLAGS (drive)->no_lba_toc = 1;
drive2610drivers/block/ide-cd.celse if (strcmp (drive->id->model, "TO-ICSLYAL") == 0 ||  /* Acer CD525E */
drive2611drivers/block/ide-cd.cstrcmp (drive->id->model, "OTI-SCYLLA") == 0)
drive2612drivers/block/ide-cd.cCDROM_CONFIG_FLAGS (drive)->no_lba_toc = 1;
drive2616drivers/block/ide-cd.celse if (strcmp (drive->id->model, "DCI-2S10") == 0)
drive2617drivers/block/ide-cd.cCDROM_CONFIG_FLAGS (drive)->no_lba_toc = 1;
drive2619drivers/block/ide-cd.celse if (strcmp (drive->id->model, "CDA26803I SE") == 0) /* Aztech */
drive2621drivers/block/ide-cd.cCDROM_CONFIG_FLAGS (drive)->no_lba_toc = 1;
drive2624drivers/block/ide-cd.cCDROM_CONFIG_FLAGS (drive)->no_playaudio12 = 1;
drive2627drivers/block/ide-cd.celse if (strcmp (drive->id->model, "V003S0DS") == 0 ||  /* Vertros */
drive2628drivers/block/ide-cd.cstrcmp (drive->id->model, "0V300SSD") == 0 ||
drive2629drivers/block/ide-cd.cstrcmp (drive->id->model, "V004E0DT") == 0 ||
drive2630drivers/block/ide-cd.cstrcmp (drive->id->model, "0V400ETD") == 0)
drive2631drivers/block/ide-cd.cCDROM_CONFIG_FLAGS (drive)->no_lba_toc = 1;
drive2633drivers/block/ide-cd.cdrive->cdrom_info.toc               = NULL;
drive2634drivers/block/ide-cd.cdrive->cdrom_info.sector_buffer     = NULL;
drive2635drivers/block/ide-cd.cdrive->cdrom_info.sector_buffered   = 0;
drive2636drivers/block/ide-cd.cdrive->cdrom_info.nsectors_buffered = 0;
drive307drivers/block/ide.cide_drive_t *drive = &hwif->drives[unit];
drive310drivers/block/ide.cdrive->select.all    = (unit<<4)|0xa0;
drive311drivers/block/ide.cdrive->hwif      = hwif;
drive312drivers/block/ide.cdrive->ctl      = 0x08;
drive313drivers/block/ide.cdrive->ready_stat    = READY_STAT;
drive314drivers/block/ide.cdrive->bad_wstat    = BAD_W_STAT;
drive315drivers/block/ide.cdrive->special.b.recalibrate  = 1;
drive316drivers/block/ide.cdrive->special.b.set_geometry  = 1;
drive317drivers/block/ide.cdrive->name[0]      = 'h';
drive318drivers/block/ide.cdrive->name[1]      = 'd';
drive319drivers/block/ide.cdrive->name[2]      = 'a' + (h * MAX_DRIVES) + unit;
drive341drivers/block/ide.cvoid ide_input_data (ide_drive_t *drive, void *buffer, unsigned int wcount)
drive343drivers/block/ide.cunsigned short io_base  = HWIF(drive)->io_base;
drive346drivers/block/ide.cif (drive->vlb_32bit) {
drive348drivers/block/ide.cif (drive->vlb_sync) {
drive352drivers/block/ide.cif (drive->unmask)
drive364drivers/block/ide.cvoid ide_output_data (ide_drive_t *drive, void *buffer, unsigned int wcount)
drive366drivers/block/ide.cunsigned short io_base  = HWIF(drive)->io_base;
drive369drivers/block/ide.cif (drive->vlb_32bit) {
drive371drivers/block/ide.cif (drive->vlb_sync) {
drive375drivers/block/ide.cif (drive->unmask)
drive422drivers/block/ide.cvoid ide_set_handler (ide_drive_t *drive, ide_handler_t *handler)
drive424drivers/block/ide.cide_hwgroup_t *hwgroup = HWGROUP(drive);
drive427drivers/block/ide.cprintk("%s: ide_set_handler: old handler not null\n", drive->name);
drive464drivers/block/ide.cstatic unsigned long current_capacity (ide_drive_t  *drive)
drive466drivers/block/ide.cstruct hd_driveid *id = drive->id;
drive469drivers/block/ide.cif (!drive->present)
drive471drivers/block/ide.cif (drive->media != disk)
drive475drivers/block/ide.cdrive->select.b.lba = 1;
drive478drivers/block/ide.cdrive->select.b.lba = 0;
drive479drivers/block/ide.ccapacity = drive->cyl * drive->head * drive->sect;
drive481drivers/block/ide.creturn (capacity - drive->sect0);
drive494drivers/block/ide.cide_drive_t *drive = &hwif->drives[unit];
drive496drivers/block/ide.cif (drive->present && drive->media == cdrom)
drive497drivers/block/ide.cide_cdrom_setup(drive);
drive499drivers/block/ide.cdrive->part[0].nr_sects = current_capacity(drive);
drive500drivers/block/ide.cif (!drive->present || drive->media != disk) {
drive501drivers/block/ide.cdrive->part[0].start_sect = -1; /* skip partition check */
drive565drivers/block/ide.cstatic void reset_ihandler (ide_drive_t *drive)
drive571drivers/block/ide.cunexpected_intr (HWIF(drive)->irq, HWGROUP(drive));
drive601drivers/block/ide.cide_drive_t *drive = hwgroup->drive;
drive604drivers/block/ide.cOUT_BYTE (drive->select.all, IDE_SELECT_REG);
drive612drivers/block/ide.cprintk("%s: ATAPI reset timed-out, status=0x%02x\n", drive->name, stat);
drive613drivers/block/ide.creturn ide_do_reset (drive);  /* do it the old fashioned way */
drive618drivers/block/ide.cprintk("%s: ATAPI reset complete\n", drive->name);
drive634drivers/block/ide.cide_drive_t *drive = hwgroup->drive;
drive692drivers/block/ide.cint ide_do_reset (ide_drive_t *drive)
drive696drivers/block/ide.cide_hwif_t *hwif = HWIF(drive);
drive697drivers/block/ide.cide_hwgroup_t *hwgroup = HWGROUP(drive);
drive704drivers/block/ide.cif (drive->media == cdrom) {
drive707drivers/block/ide.cif (!drive->keep_settings)
drive708drivers/block/ide.cdrive->unmask = 0;
drive709drivers/block/ide.cOUT_BYTE (drive->select.all, IDE_SELECT_REG);
drive749drivers/block/ide.cOUT_BYTE(drive->ctl|6,IDE_CONTROL_REG);  /* set SRST and nIEN */
drive751drivers/block/ide.cOUT_BYTE(drive->ctl|2,IDE_CONTROL_REG);  /* clear SRST, leave nIEN */
drive763drivers/block/ide.cstatic void end_drive_cmd (ide_drive_t *drive, byte stat, byte err)
drive766drivers/block/ide.cstruct request *rq = HWGROUP(drive)->rq;
drive778drivers/block/ide.cHWGROUP(drive)->rq = NULL;
drive785drivers/block/ide.cbyte ide_dump_status (ide_drive_t *drive, const char *msg, byte stat)
drive792drivers/block/ide.cprintk("%s: %s: status=0x%02x", drive->name, msg, stat);
drive794drivers/block/ide.cif (drive->media == disk) {
drive813drivers/block/ide.cprintk("%s: %s: error=0x%02x", drive->name, msg, err);
drive815drivers/block/ide.cif (drive->media == disk) {
drive839drivers/block/ide.cif (HWGROUP(drive)->rq)
drive840drivers/block/ide.cprintk(", sector=%ld", HWGROUP(drive)->rq->sector);
drive857drivers/block/ide.cstatic void try_to_flush_leftover_data (ide_drive_t *drive)
drive859drivers/block/ide.cint i = (drive->mult_count ? drive->mult_count : 1) * SECTOR_WORDS;
drive865drivers/block/ide.cide_input_data (drive, buffer, wcount);
drive876drivers/block/ide.cint ide_error (ide_drive_t *drive, const char *msg, byte stat)
drive881drivers/block/ide.cerr = ide_dump_status(drive, msg, stat);
drive882drivers/block/ide.cif ((rq = HWGROUP(drive)->rq) == NULL || drive == NULL)
drive885drivers/block/ide.cend_drive_cmd(drive, stat, err);
drive891drivers/block/ide.cif (drive->media == disk && (stat & ERR_STAT)) {
drive899drivers/block/ide.ctry_to_flush_leftover_data(drive);
drive905drivers/block/ide.cif (rq->errors > 3 && drive->using_dma) {  /* DMA troubles? */
drive906drivers/block/ide.cdrive->using_dma = 0;
drive907drivers/block/ide.cprintk("%s: DMA disabled\n", drive->name);
drive913drivers/block/ide.cide_end_request(0, HWGROUP(drive));
drive917drivers/block/ide.creturn ide_do_reset(drive);
drive919drivers/block/ide.cdrive->special.b.recalibrate = 1;
drive928drivers/block/ide.cstatic void read_intr (ide_drive_t *drive)
drive937drivers/block/ide.cif (!ide_error(drive, "read_intr", stat))
drive941drivers/block/ide.cmsect = drive->mult_count;
drive943drivers/block/ide.crq = HWGROUP(drive)->rq;
drive950drivers/block/ide.cide_input_data(drive, rq->buffer, nsect * SECTOR_WORDS);
drive953drivers/block/ide.cdrive->name, rq->sector, rq->sector+nsect-1,
drive961drivers/block/ide.cide_end_request(1, HWGROUP(drive));
drive965drivers/block/ide.cide_set_handler (drive, &read_intr);
drive974drivers/block/ide.cstatic void write_intr (ide_drive_t *drive)
drive978drivers/block/ide.cstruct request *rq = HWGROUP(drive)->rq;
drive980drivers/block/ide.cif (OK_STAT(stat=GET_STAT(),DRIVE_READY,drive->bad_wstat)) {
drive983drivers/block/ide.cdrive->name, rq->sector, (unsigned long) rq->buffer,
drive993drivers/block/ide.cide_end_request(1, HWGROUP(drive));
drive995drivers/block/ide.cide_output_data (drive, rq->buffer, SECTOR_WORDS);
drive996drivers/block/ide.cide_set_handler (drive, &write_intr);
drive1004drivers/block/ide.cif (!ide_error(drive, "write_intr", stat))
drive1012drivers/block/ide.cstatic void multwrite (ide_drive_t *drive)
drive1014drivers/block/ide.cstruct request *rq = &HWGROUP(drive)->wrq;
drive1015drivers/block/ide.cunsigned int mcount = drive->mult_count;
drive1023drivers/block/ide.cide_output_data(drive, rq->buffer, nsect<<7);
drive1026drivers/block/ide.cdrive->name, rq->sector, (unsigned long) rq->buffer,
drive1036drivers/block/ide.cpanic("%s: buffer list corrupted\n", drive->name);
drive1048drivers/block/ide.cstatic void multwrite_intr (ide_drive_t *drive)
drive1052drivers/block/ide.cstruct request *rq = &HWGROUP(drive)->wrq;
drive1054drivers/block/ide.cif (OK_STAT(stat=GET_STAT(),DRIVE_READY,drive->bad_wstat)) {
drive1057drivers/block/ide.cmultwrite(drive);
drive1058drivers/block/ide.cide_set_handler (drive, &multwrite_intr);
drive1063drivers/block/ide.crq = HWGROUP(drive)->rq;
drive1066drivers/block/ide.cide_end_request(1, HWGROUP(drive));
drive1074drivers/block/ide.cif (!ide_error(drive, "multwrite_intr", stat))
drive1082drivers/block/ide.cstatic void ide_cmd(ide_drive_t *drive, byte cmd, byte nsect, ide_handler_t *handler)
drive1084drivers/block/ide.cide_set_handler (drive, handler);
drive1085drivers/block/ide.cOUT_BYTE(drive->ctl,IDE_CONTROL_REG);
drive1093drivers/block/ide.cstatic void set_multmode_intr (ide_drive_t *drive)
drive1099drivers/block/ide.cdrive->mult_count = drive->mult_req;
drive1101drivers/block/ide.cdrive->mult_req = drive->mult_count = 0;
drive1102drivers/block/ide.cdrive->special.b.recalibrate = 1;
drive1103drivers/block/ide.c(void) ide_dump_status(drive, "set_multmode", stat);
drive1111drivers/block/ide.cstatic void set_geometry_intr (ide_drive_t *drive)
drive1117drivers/block/ide.cif (ide_error(drive, "set_geometry_intr", stat))
drive1125drivers/block/ide.cstatic void recal_intr (ide_drive_t *drive)
drive1131drivers/block/ide.cif (ide_error(drive, "recal_intr", stat))
drive1139drivers/block/ide.cstatic void drive_cmd_intr (ide_drive_t *drive)
drive1145drivers/block/ide.cend_drive_cmd (drive, stat, GET_ERR());
drive1146drivers/block/ide.celse if (ide_error(drive, "drive_cmd", stat)) /* calls end_drive_cmd */
drive1156drivers/block/ide.cstatic inline void do_special (ide_drive_t *drive)
drive1158drivers/block/ide.cspecial_t *s = &drive->special;
drive1160drivers/block/ide.cprintk("%s: do_special: 0x%02x\n", drive->name, s->all);
drive1164drivers/block/ide.cif (drive->media == disk) {
drive1165drivers/block/ide.cOUT_BYTE(drive->sect,IDE_SECTOR_REG);
drive1166drivers/block/ide.cOUT_BYTE(drive->cyl,IDE_LCYL_REG);
drive1167drivers/block/ide.cOUT_BYTE(drive->cyl>>8,IDE_HCYL_REG);
drive1168drivers/block/ide.cOUT_BYTE(((drive->head-1)|drive->select.all)&0xBF,IDE_SELECT_REG);
drive1169drivers/block/ide.cide_cmd(drive, WIN_SPECIFY, drive->sect, &set_geometry_intr);
drive1173drivers/block/ide.cif (drive->media == disk) {
drive1174drivers/block/ide.cide_cmd(drive, WIN_RESTORE, drive->sect, &recal_intr);
drive1178drivers/block/ide.cif (drive->media == disk) {
drive1179drivers/block/ide.cif (drive->id && drive->mult_req > drive->id->max_multsect)
drive1180drivers/block/ide.cdrive->mult_req = drive->id->max_multsect;
drive1181drivers/block/ide.cide_cmd(drive, WIN_SETMULT, drive->mult_req, &set_multmode_intr);
drive1183drivers/block/ide.cdrive->mult_req = 0;
drive1186drivers/block/ide.cprintk("%s: bad special flag: 0x%02x\n", drive->name, s->all);
drive1201drivers/block/ide.cint ide_wait_stat (ide_drive_t *drive, byte good, byte bad, unsigned long timeout)
drive1210drivers/block/ide.c(void) ide_error(drive, "status error", stat);
drive1225drivers/block/ide.c(void) ide_error(drive, "status timeout", GET_STAT());
drive1234drivers/block/ide.cstatic inline void do_rw_disk (ide_drive_t *drive, struct request *rq, unsigned long block)
drive1236drivers/block/ide.cunsigned short io_base = HWIF(drive)->io_base;
drive1238drivers/block/ide.cOUT_BYTE(drive->ctl,IDE_CONTROL_REG);
drive1240drivers/block/ide.cif (drive->select.b.lba) {
drive1243drivers/block/ide.cdrive->name, (rq->cmd==READ)?"read":"writ",
drive1249drivers/block/ide.cOUT_BYTE(((block>>8)&0x0f)|drive->select.all,io_base+IDE_SELECT_OFFSET);
drive1252drivers/block/ide.ctrack = block / drive->sect;
drive1253drivers/block/ide.csect  = block % drive->sect + 1;
drive1255drivers/block/ide.chead  = track % drive->head;
drive1256drivers/block/ide.ccyl   = track / drive->head;
drive1259drivers/block/ide.cOUT_BYTE(head|drive->select.all,io_base+IDE_SELECT_OFFSET);
drive1262drivers/block/ide.cdrive->name, (rq->cmd==READ)?"read":"writ", cyl,
drive1268drivers/block/ide.cif (drive->using_dma && !(HWIF(drive)->dmaproc(ide_dma_read, drive)))
drive1271drivers/block/ide.cide_set_handler(drive, &read_intr);
drive1272drivers/block/ide.cOUT_BYTE(drive->mult_count ? WIN_MULTREAD : WIN_READ, io_base+IDE_COMMAND_OFFSET);
drive1277drivers/block/ide.cif (drive->using_dma && !(HWIF(drive)->dmaproc(ide_dma_write, drive)))
drive1280drivers/block/ide.cOUT_BYTE(drive->mult_count ? WIN_MULTWRITE : WIN_WRITE, io_base+IDE_COMMAND_OFFSET);
drive1281drivers/block/ide.cif (ide_wait_stat(drive, DATA_READY, drive->bad_wstat, WAIT_DRQ)) {
drive1282drivers/block/ide.cprintk("%s: no DRQ after issuing %s\n", drive->name,
drive1283drivers/block/ide.cdrive->mult_count ? "MULTWRITE" : "WRITE");
drive1286drivers/block/ide.cif (!drive->unmask)
drive1288drivers/block/ide.cif (drive->mult_count) {
drive1289drivers/block/ide.cHWGROUP(drive)->wrq = *rq; /* scratchpad */
drive1290drivers/block/ide.cide_set_handler (drive, &multwrite_intr);
drive1291drivers/block/ide.cmultwrite(drive);
drive1293drivers/block/ide.cide_set_handler (drive, &write_intr);
drive1294drivers/block/ide.cide_output_data(drive, rq->buffer, SECTOR_WORDS);
drive1302drivers/block/ide.cdrive->name, args[0], args[1], args[2]);
drive1304drivers/block/ide.cide_cmd(drive, args[0], args[1], &drive_cmd_intr);
drive1312drivers/block/ide.cprintk("%s: DRIVE_CMD (null)\n", drive->name);
drive1314drivers/block/ide.cend_drive_cmd(drive, GET_STAT(), GET_ERR());
drive1318drivers/block/ide.cprintk("%s: bad command: %d\n", drive->name, rq->cmd);
drive1319drivers/block/ide.cide_end_request(0, HWGROUP(drive));
drive1329drivers/block/ide.cide_drive_t *drive;
drive1342drivers/block/ide.cdrive = &hwif->drives[unit];
drive1345drivers/block/ide.cprintk("%s: block not locked\n", drive->name);
drive1351drivers/block/ide.cif ((blockend < block) || (blockend > drive->part[minor&PARTN_MASK].nr_sects)) {
drive1352drivers/block/ide.cprintk("%s%c: bad access: block=%ld, count=%ld\n", drive->name,
drive1356drivers/block/ide.cblock += drive->part[minor&PARTN_MASK].start_sect + drive->sect0;
drive1358drivers/block/ide.cif (block == 0 && drive->ezdrive) {
drive1360drivers/block/ide.cprintk("%s: [EZD] accessing sector 1 instead of sector 0\n", drive->name);
drive1363drivers/block/ide.c((ide_hwgroup_t *)hwif->hwgroup)->drive = drive;
drive1371drivers/block/ide.cOUT_BYTE(drive->select.all,IDE_SELECT_REG);
drive1372drivers/block/ide.cif (ide_wait_stat(drive, drive->ready_stat, BUSY_STAT|DRQ_STAT, WAIT_READY)) {
drive1373drivers/block/ide.cprintk("%s: drive not ready for command\n", drive->name);
drive1377drivers/block/ide.cif (!drive->special.all) {
drive1379drivers/block/ide.cswitch (drive->media) {
drive1381drivers/block/ide.cdo_rw_disk (drive, rq, block);
drive1384drivers/block/ide.cide_do_rw_cdrom (drive, block);
drive1388drivers/block/ide.cdrive->name, drive->media);
drive1392drivers/block/ide.cdo_rw_disk (drive, rq, block); /* simpler and faster */
drive1396drivers/block/ide.cdo_special(drive);
drive1428drivers/block/ide.chwgroup->drive = NULL;  /* paranoia */
drive1492drivers/block/ide.cide_drive_t   *drive   = hwgroup->drive;
drive1503drivers/block/ide.cprintk("%s: marginal timeout\n", drive->name);
drive1507drivers/block/ide.c(void) hwgroup->hwif->dmaproc (ide_dma_abort, drive);
drive1508drivers/block/ide.cif (!ide_error(drive, "irq timeout", GET_STAT()))
drive1562drivers/block/ide.cide_drive_t *drive = &hwif->drives[unit];
drive1563drivers/block/ide.cif (!drive->present)
drive1565drivers/block/ide.cif (!OK_STAT(stat=GET_STAT(), drive->ready_stat, BAD_STAT))
drive1566drivers/block/ide.c(void) ide_dump_status(drive, "unexpected_intr", stat);
drive1568drivers/block/ide.ctry_to_flush_leftover_data(drive);
drive1583drivers/block/ide.cide_drive_t *drive = hwgroup->drive;
drive1586drivers/block/ide.cif (drive->unmask)
drive1588drivers/block/ide.chandler(drive);
drive1609drivers/block/ide.cide_drive_t *drive = &hwif->drives[unit];
drive1610drivers/block/ide.cif (drive->present)
drive1611drivers/block/ide.creturn drive;
drive1671drivers/block/ide.cide_drive_t *drive;
drive1674drivers/block/ide.cif ((drive = get_info_ptr(inode->i_rdev)) == NULL)
drive1678drivers/block/ide.cwhile (drive->busy)
drive1679drivers/block/ide.csleep_on(&drive->wqueue);
drive1680drivers/block/ide.cdrive->usage++;
drive1683drivers/block/ide.cif (drive->media == cdrom)
drive1684drivers/block/ide.creturn ide_cdrom_open (inode, filp, drive);
drive1686drivers/block/ide.cif (drive->removeable) {
drive1700drivers/block/ide.cide_drive_t *drive;
drive1702drivers/block/ide.cif ((drive = get_info_ptr(inode->i_rdev)) != NULL) {
drive1704drivers/block/ide.cdrive->usage--;
drive1706drivers/block/ide.cif (drive->media == cdrom)
drive1707drivers/block/ide.cide_cdrom_release (inode, file, drive);
drive1710drivers/block/ide.cif (drive->removeable) {
drive1728drivers/block/ide.cide_drive_t *drive;
drive1732drivers/block/ide.cif ((drive = get_info_ptr(i_rdev)) == NULL)
drive1736drivers/block/ide.cminor = drive->select.b.unit << PARTN_BITS;
drive1739drivers/block/ide.cif (drive->busy || (drive->usage > 1)) {
drive1743drivers/block/ide.cdrive->busy = 1;
drive1747drivers/block/ide.cif (drive->part[p].nr_sects > 0) {
drive1753drivers/block/ide.cdrive->part[p].start_sect = 0;
drive1754drivers/block/ide.cdrive->part[p].nr_sects   = 0;
drive1757drivers/block/ide.cdrive->part[0].nr_sects = current_capacity(drive);
drive1758drivers/block/ide.cif (drive->media == disk)
drive1759drivers/block/ide.cresetup_one_dev(HWIF(drive)->gd, drive->select.b.unit);
drive1761drivers/block/ide.cdrive->busy = 0;
drive1762drivers/block/ide.cwake_up(&drive->wqueue);
drive1783drivers/block/ide.cide_drive_t *drive;
drive1788drivers/block/ide.cif ((drive = get_info_ptr(inode->i_rdev)) == NULL)
drive1792drivers/block/ide.cif (!loc || drive->media != disk) return -EINVAL;
drive1795drivers/block/ide.cput_user(drive->bios_head, (byte *) &loc->heads);
drive1796drivers/block/ide.cput_user(drive->bios_sect, (byte *) &loc->sectors);
drive1797drivers/block/ide.cput_user(drive->bios_cyl, (unsigned short *) &loc->cylinders);
drive1798drivers/block/ide.cput_user((unsigned)drive->part[MINOR(inode->i_rdev)&PARTN_MASK].start_sect,
drive1818drivers/block/ide.creturn write_fs_long(arg, drive->part[MINOR(inode->i_rdev)&PARTN_MASK].nr_sects);
drive1823drivers/block/ide.creturn write_fs_long(arg, drive->keep_settings);
drive1826drivers/block/ide.creturn write_fs_long(arg, drive->unmask);
drive1829drivers/block/ide.creturn write_fs_long(arg, drive->using_dma);
drive1832drivers/block/ide.creturn write_fs_long(arg, drive->chipset);
drive1835drivers/block/ide.creturn write_fs_long(arg, drive->mult_count);
drive1840drivers/block/ide.cif (drive->id == NULL)
drive1842drivers/block/ide.cerr = verify_area(VERIFY_WRITE, (char *)arg, sizeof(*drive->id));
drive1844drivers/block/ide.cmemcpy_tofs((char *)arg, (char *)drive->id, sizeof(*drive->id));
drive1848drivers/block/ide.creturn write_fs_long(arg, drive->bad_wstat == BAD_R_STAT);
drive1851drivers/block/ide.cif (drive->media != disk)
drive1853drivers/block/ide.cif (!drive->id || !(drive->id->capability & 1) || !HWIF(drive)->dmaproc)
drive1869drivers/block/ide.cif (!(HWIF(drive)->dmaproc)) {
drive1873drivers/block/ide.cdrive->using_dma = arg;
drive1876drivers/block/ide.cdrive->keep_settings = arg;
drive1883drivers/block/ide.cdrive->unmask = arg;
drive1886drivers/block/ide.cdrive->bad_wstat = arg ? BAD_R_STAT : BAD_W_STAT;
drive1889drivers/block/ide.cdrive->chipset   = arg;
drive1890drivers/block/ide.cdrive->vlb_32bit = (arg & 1);
drive1891drivers/block/ide.cdrive->vlb_sync  = (arg & 2) >> 1;
drive1893drivers/block/ide.cif (drive->vlb_sync)
drive1894drivers/block/ide.cprintk("%s: VLB_SYNC not supported by this kernel\n", drive->name);
drive1906drivers/block/ide.cif ((drive->id != NULL) && (arg > drive->id->max_multsect))
drive1910drivers/block/ide.cif (drive->special.b.set_multmode) {
drive1914drivers/block/ide.cdrive->mult_req = arg;
drive1915drivers/block/ide.cdrive->special.b.set_multmode = 1;
drive1918drivers/block/ide.creturn (drive->mult_count == arg) ? 0 : -EIO;
drive1943drivers/block/ide.cif (drive->media == cdrom)
drive1944drivers/block/ide.creturn ide_cdrom_ioctl(drive, inode, file, cmd, arg);
drive1952drivers/block/ide.cide_drive_t *drive;
drive1954drivers/block/ide.cif ((drive = get_info_ptr(i_rdev)) == NULL)
drive1957drivers/block/ide.cif (drive->media == cdrom)
drive1958drivers/block/ide.creturn ide_cdrom_check_media_change (drive);
drive1960drivers/block/ide.cif (drive->removeable) /* for disks */
drive1992drivers/block/ide.cstatic inline void do_identify (ide_drive_t *drive, byte cmd)
drive1998drivers/block/ide.cid = drive->id = kmalloc (SECTOR_WORDS*4, GFP_KERNEL);
drive1999drivers/block/ide.cide_input_data(drive, id, SECTOR_WORDS);  /* read 512 bytes of id info */
drive2007drivers/block/ide.cprintk("%s: EATA SCSI HBA %.10s\n", drive->name, id->model);
drive2008drivers/block/ide.cdrive->present = 0;
drive2034drivers/block/ide.cprintk("%s: %s, ATAPI, ", drive->name, id->model);
drive2035drivers/block/ide.cdrive->media = cdrom;
drive2041drivers/block/ide.cdrive->present = 1;
drive2042drivers/block/ide.cdrive->removeable = 1;
drive2052drivers/block/ide.cdrive->removeable = 1;
drive2055drivers/block/ide.cdrive->media = disk;
drive2057drivers/block/ide.cif (!drive->present) {
drive2058drivers/block/ide.cdrive->present = 1;
drive2059drivers/block/ide.cdrive->cyl     = drive->bios_cyl  = id->cyls;
drive2060drivers/block/ide.cdrive->head    = drive->bios_head = id->heads;
drive2061drivers/block/ide.cdrive->sect    = drive->bios_sect = id->sectors;
drive2077drivers/block/ide.cdrive->cyl  = id->cur_cyls;
drive2078drivers/block/ide.cdrive->head = id->cur_heads;
drive2079drivers/block/ide.cdrive->sect = id->cur_sectors;
drive2082drivers/block/ide.ccapacity = drive->cyl * drive->head * drive->sect;
drive2091drivers/block/ide.cif ((!drive->head || drive->head > 16) && id->heads && id->heads <= 16) {
drive2092drivers/block/ide.cdrive->cyl  = id->cyls;
drive2093drivers/block/ide.cdrive->head = id->heads;
drive2094drivers/block/ide.cdrive->sect = id->sectors;
drive2097drivers/block/ide.cif (drive->sect == drive->bios_sect && drive->head == drive->bios_head) {
drive2098drivers/block/ide.cif (drive->cyl > drive->bios_cyl)
drive2099drivers/block/ide.cdrive->bios_cyl = drive->cyl;
drive2102drivers/block/ide.c(void) current_capacity (drive); /* initialize LBA selection */
drive2105drivers/block/ide.cdrive->name, id->model, current_capacity(drive)/2048L, id->buf_size/2,
drive2106drivers/block/ide.cdrive->select.b.lba ? "LBA, " : "",
drive2107drivers/block/ide.cdrive->bios_cyl, drive->bios_head, drive->bios_sect);
drive2109drivers/block/ide.cdrive->mult_count = 0;
drive2111drivers/block/ide.cdrive->mult_req = INITIAL_MULT_COUNT;
drive2112drivers/block/ide.cif (drive->mult_req > id->max_multsect)
drive2113drivers/block/ide.cdrive->mult_req = id->max_multsect;
drive2114drivers/block/ide.cif (drive->mult_req || ((id->multsect_valid & 1) && id->multsect))
drive2115drivers/block/ide.cdrive->special.b.set_multmode = 1;
drive2117drivers/block/ide.cif (HWIF(drive)->dmaproc != NULL) {  /* hwif supports DMA? */
drive2118drivers/block/ide.cif (!(HWIF(drive)->dmaproc(ide_dma_check, drive)))
drive2123drivers/block/ide.ccmd640_tune_drive(drive);  /* but can we tune a fish? */
drive2147drivers/block/ide.cstatic int try_to_identify (ide_drive_t *drive, byte cmd)
drive2153drivers/block/ide.cif (!HWIF(drive)->irq) {    /* already got an IRQ? */
drive2156drivers/block/ide.cOUT_BYTE(drive->ctl,IDE_CONTROL_REG);  /* enable device irq */
drive2161drivers/block/ide.cprintk("%s: probing with STATUS instead of ALTSTATUS\n", drive->name);
drive2171drivers/block/ide.cif (!HWIF(drive)->irq)
drive2181drivers/block/ide.cdo_identify(drive, cmd); /* drive returned ID */
drive2185drivers/block/ide.cif (!HWIF(drive)->irq) {
drive2188drivers/block/ide.cHWIF(drive)->irq = irqs;
drive2190drivers/block/ide.cprintk("%s: IRQ probe failed (%d)\n", drive->name, irqs);
drive2211drivers/block/ide.cstatic int do_probe (ide_drive_t *drive, byte cmd)
drive2215drivers/block/ide.cif (drive->present) {  /* avoid waiting for inappropriate probes */
drive2216drivers/block/ide.cif ((drive->media == cdrom) && (cmd == WIN_IDENTIFY))
drive2222drivers/block/ide.cdrive->name, drive->present, drive->media ? "cdrom":"disk",
drive2226drivers/block/ide.cif (HWIF(drive)->select)
drive2227drivers/block/ide.cide_hwif_select (HWIF(drive));
drive2229drivers/block/ide.cOUT_BYTE(drive->select.all,IDE_SELECT_REG);  /* select target drive */
drive2231drivers/block/ide.cif (IN_BYTE(IDE_SELECT_REG) != drive->select.all && !drive->present) {
drive2237drivers/block/ide.c|| drive->present || cmd == WIN_PIDENTIFY)
drive2239drivers/block/ide.cif ((rc = try_to_identify(drive,cmd)))   /* send cmd and wait */
drive2240drivers/block/ide.crc = try_to_identify(drive,cmd); /* failed: try again */
drive2242drivers/block/ide.cprintk("%s: no response (status = 0x%02x)\n", drive->name, GET_STAT());
drive2247drivers/block/ide.cif (drive->select.b.unit != 0) {
drive2261drivers/block/ide.cstatic inline byte probe_for_drive (ide_drive_t *drive)
drive2263drivers/block/ide.cif (drive->noprobe)      /* skip probing? */
drive2264drivers/block/ide.creturn drive->present;
drive2265drivers/block/ide.cif (do_probe(drive, WIN_IDENTIFY) >= 2) { /* if !(success||timed-out) */
drive2267drivers/block/ide.c(void) do_probe(drive, WIN_PIDENTIFY); /* look for ATAPI device */
drive2270drivers/block/ide.cif (!drive->present)
drive2272drivers/block/ide.cif (drive->id == NULL) {    /* identification failed? */
drive2273drivers/block/ide.cif (drive->media == disk) {
drive2275drivers/block/ide.cdrive->name, drive->cyl, drive->head, drive->sect);
drive2278drivers/block/ide.celse if (drive->media == cdrom) {
drive2279drivers/block/ide.cprintk("%s: ATAPI cdrom (?)\n", drive->name);
drive2283drivers/block/ide.cdrive->present = 0;  /* nuke it */
drive2287drivers/block/ide.cif (drive->media == disk && !drive->select.b.lba) {
drive2288drivers/block/ide.cif (!drive->head || drive->head > 16) {
drive2290drivers/block/ide.cdrive->name, drive->head);
drive2291drivers/block/ide.cdrive->present = 0;
drive2308drivers/block/ide.cide_drive_t *drive = &hwif->drives[unit];
drive2309drivers/block/ide.cif (drive->present) {
drive2310drivers/block/ide.cdrive->present = 0;
drive2311drivers/block/ide.cprintk("%s: ERROR, PORTS ALREADY IN USE\n", drive->name);
drive2330drivers/block/ide.cide_drive_t *drive = &hwif->drives[unit];
drive2331drivers/block/ide.c(void) probe_for_drive (drive);
drive2334drivers/block/ide.cide_drive_t *drive = &hwif->drives[unit];
drive2335drivers/block/ide.cif (drive->present) {
drive2543drivers/block/ide.cide_drive_t *drive;
drive2560drivers/block/ide.cdrive = &hwif->drives[unit];
drive2563drivers/block/ide.cdrive->noprobe = 1;
drive2566drivers/block/ide.cdrive->bad_wstat = BAD_R_STAT;
drive2570drivers/block/ide.cdrive->present = 1;
drive2571drivers/block/ide.cdrive->media = cdrom;
drive2578drivers/block/ide.cdrive->media  = disk;
drive2579drivers/block/ide.cdrive->cyl  = drive->bios_cyl  = vals[0];
drive2580drivers/block/ide.cdrive->head  = drive->bios_head = vals[1];
drive2581drivers/block/ide.cdrive->sect  = drive->bios_sect = vals[2];
drive2582drivers/block/ide.cdrive->present  = 1;
drive2677drivers/block/ide.cide_drive_t *drive;
drive2682drivers/block/ide.cif ((drive = get_info_ptr(i_rdev)) == NULL || drive->id == NULL)
drive2685drivers/block/ide.cdrive->cyl  = drive->bios_cyl  = drive->id->cyls;
drive2686drivers/block/ide.cdrive->head = drive->bios_head = drive->id->heads;
drive2687drivers/block/ide.cdrive->sect = drive->bios_sect = drive->id->sectors;
drive2688drivers/block/ide.cdrive->special.b.set_geometry = 1;
drive2690drivers/block/ide.ctracks = drive->bios_cyl * drive->bios_head * drive->bios_sect / 63;
drive2691drivers/block/ide.cdrive->bios_sect = 63;
drive2692drivers/block/ide.cwhile (drive->bios_cyl >= 1024) {
drive2693drivers/block/ide.cdrive->bios_head = *heads;
drive2694drivers/block/ide.cdrive->bios_cyl = tracks / drive->bios_head;
drive2701drivers/block/ide.cdrive->ezdrive = 1;
drive2705drivers/block/ide.cdrive->sect0 = 63;
drive2706drivers/block/ide.cdrive->bios_cyl = (tracks - 1) / drive->bios_head;
drive2709drivers/block/ide.cdrive->part[0].nr_sects = current_capacity(drive);
drive2710drivers/block/ide.cprintk("%s [%d/%d/%d]", msg, drive->bios_cyl, drive->bios_head, drive->bios_sect);
drive2748drivers/block/ide.cide_drive_t *drive = &hwif->drives[unit];
drive2749drivers/block/ide.cif ((cmos_disks & (0xf0 >> (unit*4))) && !drive->present) {
drive2750drivers/block/ide.cdrive->cyl   = drive->bios_cyl  = *(unsigned short *)BIOS;
drive2751drivers/block/ide.cdrive->head  = drive->bios_head = *(BIOS+2);
drive2752drivers/block/ide.cdrive->sect  = drive->bios_sect = *(BIOS+14);
drive2753drivers/block/ide.cdrive->ctl   = *(BIOS+8);
drive2754drivers/block/ide.cdrive->present = 1;
drive2804drivers/block/ide.chwgroup->drive   = NULL;
drive91drivers/block/ide.h#define HWIF(drive)    ((ide_hwif_t *)drive->hwif)
drive92drivers/block/ide.h#define HWGROUP(drive)    ((ide_hwgroup_t *)(HWIF(drive)->hwgroup))
drive105drivers/block/ide.h#define IDE_DATA_REG    (HWIF(drive)->io_base+IDE_DATA_OFFSET)
drive106drivers/block/ide.h#define IDE_ERROR_REG    (HWIF(drive)->io_base+IDE_ERROR_OFFSET)
drive107drivers/block/ide.h#define IDE_NSECTOR_REG    (HWIF(drive)->io_base+IDE_NSECTOR_OFFSET)
drive108drivers/block/ide.h#define IDE_SECTOR_REG    (HWIF(drive)->io_base+IDE_SECTOR_OFFSET)
drive109drivers/block/ide.h#define IDE_LCYL_REG    (HWIF(drive)->io_base+IDE_LCYL_OFFSET)
drive110drivers/block/ide.h#define IDE_HCYL_REG    (HWIF(drive)->io_base+IDE_HCYL_OFFSET)
drive111drivers/block/ide.h#define IDE_SELECT_REG    (HWIF(drive)->io_base+IDE_SELECT_OFFSET)
drive112drivers/block/ide.h#define IDE_STATUS_REG    (HWIF(drive)->io_base+IDE_STATUS_OFFSET)
drive113drivers/block/ide.h#define IDE_CONTROL_REG    (HWIF(drive)->ctl_port)
drive346drivers/block/ide.hide_drive_t    *drive;  /* current drive */
drive365drivers/block/ide.h#define SET_RECOVERY_TIMER(drive) ide_set_recovery_timer (drive)
drive367drivers/block/ide.h#define SET_RECOVERY_TIMER(drive)
drive377drivers/block/ide.h#define IDE_DO_REQUEST { SET_RECOVERY_TIMER(HWIF(drive)); ide_do_request(HWGROUP(drive)); }
drive383drivers/block/ide.hvoid ide_input_data (ide_drive_t *drive, void *buffer, unsigned int wcount);
drive388drivers/block/ide.hvoid ide_output_data (ide_drive_t *drive, void *buffer, unsigned int wcount);
drive394drivers/block/ide.hvoid ide_set_handler (ide_drive_t *drive, ide_handler_t *handler);
drive399drivers/block/ide.hbyte ide_dump_status (ide_drive_t *drive, const char *msg, byte stat);
drive408drivers/block/ide.hint ide_error (ide_drive_t *drive, const char *msg, byte stat);
drive417drivers/block/ide.hint ide_wait_stat (ide_drive_t *drive, byte good, byte bad, unsigned long timeout);
drive127drivers/block/triton.cstatic void dma_intr (ide_drive_t *drive)
drive131drivers/block/triton.cstruct request *rq = HWGROUP(drive)->rq;
drive132drivers/block/triton.cunsigned short dma_base = HWIF(drive)->dma_base;
drive137drivers/block/triton.cif (OK_STAT(stat,DRIVE_READY,drive->bad_wstat|DRQ_STAT)) {
drive139drivers/block/triton.crq = HWGROUP(drive)->rq;
drive142drivers/block/triton.cide_end_request(1, HWGROUP(drive));
drive147drivers/block/triton.cprintk("%s: bad DMA status: 0x%02x\n", drive->name, dma_stat);
drive150drivers/block/triton.cif (!ide_error(drive, "dma_intr", stat))
drive158drivers/block/triton.cstatic int build_dmatable (ide_drive_t *drive)
drive160drivers/block/triton.cstruct request *rq = HWGROUP(drive)->rq;
drive162drivers/block/triton.cunsigned long size, addr, *table = HWIF(drive)->dmatable;
drive193drivers/block/triton.cprintk("%s: DMA table too small\n", drive->name);
drive210drivers/block/triton.cprintk("%s: empty DMA table?\n", drive->name);
drive214drivers/block/triton.cstatic int config_drive_for_dma (ide_drive_t *drive)
drive218drivers/block/triton.cstruct hd_driveid *id = drive->id;
drive222drivers/block/triton.cdrive->using_dma = 1;
drive229drivers/block/triton.cdrive->using_dma = 1;
drive248drivers/block/triton.cstatic int triton_dmaproc (ide_dma_action_t func, ide_drive_t *drive)
drive250drivers/block/triton.cunsigned long dma_base = HWIF(drive)->dma_base;
drive258drivers/block/triton.creturn config_drive_for_dma (drive);
drive267drivers/block/triton.cif (build_dmatable (drive))
drive269drivers/block/triton.coutl(virt_to_bus (HWIF(drive)->dmatable), dma_base + 4); /* PRD table */
drive272drivers/block/triton.cide_set_handler (drive, &dma_intr);    /* issue cmd to drive */
drive334drivers/block/xd.cstatic int xd_readwrite (u_char operation,u_char drive,char *buffer,u_int block,u_int count)
drive341drivers/block/xd.cprintk("xd_readwrite: operation = %s, drive = %d, buffer = 0x%X, block = %d, count = %d\n",operation == READ ? "read" : "write",drive,buffer,block,count);
drive344drivers/block/xd.ccontrol = xd_info[drive].control;
drive348drivers/block/xd.ctrack = block / xd_info[drive].sectors;
drive349drivers/block/xd.chead = track % xd_info[drive].heads;
drive350drivers/block/xd.ccylinder = track / xd_info[drive].heads;
drive351drivers/block/xd.csector = block % xd_info[drive].sectors;
drive354drivers/block/xd.cprintk("xd_readwrite: drive = %d, head = %d, cylinder = %d, sector = %d, count = %d\n",drive,head,cylinder,sector,temp);
drive358drivers/block/xd.cxd_build(cmdblk,operation == READ ? CMD_READ : CMD_WRITE,drive,head,cylinder,sector,temp & 0xFF,control);
drive363drivers/block/xd.cxd_recalibrate(drive);
drive384drivers/block/xd.cstatic void xd_recalibrate (u_char drive)
drive388drivers/block/xd.cxd_build(cmdblk,CMD_RECALIBRATE,drive,0,0,0,0,0);
drive432drivers/block/xd.cstatic u_char *xd_build (u_char *cmdblk,u_char command,u_char drive,u_char head,u_short cylinder,u_char sector,u_char count,u_char control)
drive435drivers/block/xd.ccmdblk[1] = ((drive & 0x07) << 5) | (head & 0x1F);
drive519drivers/block/xd.cstatic u_char xd_initdrives (void (*init_drive)(u_char drive))
drive548drivers/block/xd.cstatic void xd_dtc_init_drive (u_char drive)
drive552drivers/block/xd.cxd_build(cmdblk,CMD_DTCGETGEOM,drive,0,0,0,0,0);
drive554drivers/block/xd.cxd_info[drive].heads = buf[0x0A];      /* heads */
drive555drivers/block/xd.cxd_info[drive].cylinders = ((u_short *) (buf))[0x04];  /* cylinders */
drive556drivers/block/xd.cxd_info[drive].sectors = 17;        /* sectors */
drive558drivers/block/xd.cxd_info[drive].rwrite = ((u_short *) (buf + 1))[0x05];  /* reduced write */
drive559drivers/block/xd.cxd_info[drive].precomp = ((u_short *) (buf + 1))[0x06];  /* write precomp */
drive560drivers/block/xd.cxd_info[drive].ecc = buf[0x0F];        /* ecc length */
drive562drivers/block/xd.cxd_info[drive].control = 0;        /* control byte */
drive564drivers/block/xd.cxd_setparam(CMD_DTCSETPARAM,drive,xd_info[drive].heads,xd_info[drive].cylinders,((u_short *) (buf + 1))[0x05],((u_short *) (buf + 1))[0x06],buf[0x0F]);
drive565drivers/block/xd.cxd_build(cmdblk,CMD_DTCSETSTEP,drive,0,0,0,0,7);
drive567drivers/block/xd.cprintk("xd_dtc_init_drive: error setting step rate for drive %d\n",drive);
drive570drivers/block/xd.cprintk("xd_dtc_init_drive: error reading geometry for drive %d\n",drive);
drive592drivers/block/xd.cstatic void xd_wd_init_drive (u_char drive)
drive596drivers/block/xd.cxd_build(cmdblk,CMD_READ,drive,0,0,0,1,0);
drive598drivers/block/xd.cxd_info[drive].heads = buf[0x1AF];        /* heads */
drive599drivers/block/xd.cxd_info[drive].cylinders = ((u_short *) (buf + 1))[0xD6];  /* cylinders */
drive600drivers/block/xd.cxd_info[drive].sectors = 17;          /* sectors */
drive602drivers/block/xd.cxd_info[drive].rwrite = ((u_short *) (buf))[0xD8];    /* reduced write */
drive603drivers/block/xd.cxd_info[drive].wprecomp = ((u_short *) (buf))[0xDA];    /* write precomp */
drive604drivers/block/xd.cxd_info[drive].ecc = buf[0x1B4];        /* ecc length */
drive606drivers/block/xd.cxd_info[drive].control = buf[0x1B5];        /* control byte */
drive608drivers/block/xd.cxd_setparam(CMD_WDSETPARAM,drive,xd_info[drive].heads,xd_info[drive].cylinders,((u_short *) (buf))[0xD8],((u_short *) (buf))[0xDA],buf[0x1B4]);
drive611drivers/block/xd.cprintk("xd_wd_init_drive: error reading geometry for drive %d\n",drive);  
drive631drivers/block/xd.cstatic void xd_seagate_init_drive (u_char drive)
drive635drivers/block/xd.cxd_build(cmdblk,CMD_ST11GETGEOM,drive,0,0,0,1,0);
drive637drivers/block/xd.cxd_info[drive].heads = buf[0x04];        /* heads */
drive638drivers/block/xd.cxd_info[drive].cylinders = (buf[0x02] << 8) | buf[0x03];  /* cylinders */
drive639drivers/block/xd.cxd_info[drive].sectors = buf[0x05];        /* sectors */
drive640drivers/block/xd.cxd_info[drive].control = 0;          /* control byte */
drive643drivers/block/xd.cprintk("xd_seagate_init_drive: error reading geometry from drive %d\n",drive);
drive665drivers/block/xd.cstatic void xd_omti_init_drive (u_char drive)
drive668drivers/block/xd.cxd_override_init_drive(drive);
drive671drivers/block/xd.cxd_info[drive].control = 2;
drive676drivers/block/xd.cstatic void xd_override_init_drive (u_char drive)
drive684drivers/block/xd.cxd_build(cmdblk,CMD_SEEK,drive,(u_char) test[0],(u_short) test[1],(u_char) test[2],0,0);
drive692drivers/block/xd.cxd_info[drive].heads = (u_char) min[0] + 1;
drive693drivers/block/xd.cxd_info[drive].cylinders = (u_short) min[1] + 1;
drive694drivers/block/xd.cxd_info[drive].sectors = (u_char) min[2] + 1;
drive695drivers/block/xd.cxd_info[drive].control = 0;
drive712drivers/block/xd.cstatic void xd_setparam (u_char command,u_char drive,u_char heads,u_short cylinders,u_short rwrite,u_short wprecomp,u_char ecc)
drive716drivers/block/xd.cxd_build(cmdblk,command,drive,0,0,0,0,0);
drive727drivers/block/xd.cprintk("xd_setparam: error setting characteristics for drive %d\n",drive);
drive1052drivers/cdrom/mcdx.cint drive;
drive1060drivers/cdrom/mcdx.cfor (drive = 0; drive < MCDX_NDRIVES; drive++)
drive1061drivers/cdrom/mcdx.cmcdx_stuffp[drive] = NULL;
drive1064drivers/cdrom/mcdx.cfor (drive = 0; drive < MCDX_NDRIVES; drive++) { 
drive1071drivers/cdrom/mcdx.cTRACE((INIT, "init() try drive %d\n", drive));
drive1091drivers/cdrom/mcdx.cstuffp->irq = irq(mcdx_drive_map[drive]);
drive1092drivers/cdrom/mcdx.cstuffp->wreg_data = stuffp->rreg_data = port(mcdx_drive_map[drive]);
drive1200drivers/cdrom/mcdx.cstuffp->minor = drive;
drive1206drivers/cdrom/mcdx.cmcdx_stuffp[drive] = stuffp;
drive1207drivers/cdrom/mcdx.cTRACE((INIT, "init() mcdx_stuffp[%d] = %p\n", drive, stuffp));
drive1858drivers/scsi/fdomain.cint              drive;
drive1914drivers/scsi/fdomain.cdrive = MINOR(dev) / 16;
drive1921drivers/scsi/fdomain.ci = (struct drive_info *)( (char *)bios_base + 0x1f33 + drive * 25 );
drive1924drivers/scsi/fdomain.ci = (struct drive_info *)( (char *)bios_base + 0x1f36 + drive * 15 );
drive1927drivers/scsi/fdomain.ci = (struct drive_info *)( (char *)bios_base + 0x1f34 + drive * 15 );
drive1930drivers/scsi/fdomain.ci = (struct drive_info *)( (char *)bios_base + 0x1f31 + drive * 25 );
drive1939drivers/scsi/fdomain.ci = (struct drive_info *)( (char *)bios_base + 0x1f71 + drive * 10 );
drive48include/linux/blkdev.hextern void resetup_one_dev(struct gendisk *dev, int drive);
drive103include/linux/xd.hvoid (*init_drive)(u_char drive);
drive109include/linux/xd.hstatic u_char xd_initdrives (void (*init_drive)(u_char drive));
drive117include/linux/xd.hstatic int xd_readwrite (u_char operation,u_char drive,char *buffer,u_int block,u_int count);
drive118include/linux/xd.hstatic void xd_recalibrate (u_char drive);
drive122include/linux/xd.hstatic u_char *xd_build (u_char *cmdblk,u_char command,u_char drive,u_char head,u_short cylinder,u_char sector,u_char count,u_char control);
drive128include/linux/xd.hstatic void xd_dtc_init_drive (u_char drive);
drive130include/linux/xd.hstatic void xd_wd_init_drive (u_char drive);
drive132include/linux/xd.hstatic void xd_seagate_init_drive (u_char drive);
drive134include/linux/xd.hstatic void xd_omti_init_drive (u_char drive);
drive135include/linux/xd.hstatic void xd_setparam (u_char command,u_char drive,u_char heads,u_short cylinders,u_short rwrite,u_short wprecomp,u_char ecc);
drive136include/linux/xd.hstatic void xd_override_init_drive (u_char drive);