|
#define | SUPPORT_VLB_SYNC 1 |
|
#define | IDE_DEFAULT_MAX_FAILURES 1 |
|
#define | ERROR_MAX 8 /* Max read/write errors per sector */ |
|
#define | ERROR_RESET 3 /* Reset controller every 4th retry */ |
|
#define | ERROR_RECAL 1 /* Recalibrate every 2nd retry */ |
|
#define | IDE_NR_PORTS (10) |
|
#define | OK_STAT(stat, good, bad) (((stat)&((good)|(bad)))==(good)) |
|
#define | BAD_R_STAT (ATA_BUSY | ATA_ERR) |
|
#define | BAD_W_STAT (BAD_R_STAT | ATA_DF) |
|
#define | BAD_STAT (BAD_R_STAT | ATA_DRQ) |
|
#define | DRIVE_READY (ATA_DRDY | ATA_DSC) |
|
#define | BAD_CRC (ATA_ABORTED | ATA_ICRC) |
|
#define | SATA_NR_PORTS (3) /* 16 possible ?? */ |
|
#define | SATA_STATUS_OFFSET (0) |
|
#define | SATA_ERROR_OFFSET (1) |
|
#define | SATA_CONTROL_OFFSET (2) |
|
#define | PRD_BYTES 8 |
|
#define | PRD_ENTRIES 256 |
|
#define | PARTN_BITS 6 /* number of minor dev bits for partitions */ |
|
#define | MAX_DRIVES 2 /* per interface; 2 assumed by lots of code */ |
|
#define | SECTOR_SIZE 512 |
|
#define | REQ_DRIVE_RESET 0x20 |
|
#define | REQ_DEVSET_EXEC 0x21 |
|
#define | REQ_PARK_HEADS 0x22 |
|
#define | REQ_UNPARK_HEADS 0x23 |
|
#define | MAX_HWIFS 10 |
|
#define | ide_scsi 0x21 |
|
#define | ide_disk 0x20 |
|
#define | ide_optical 0x7 |
|
#define | ide_cdrom 0x5 |
|
#define | ide_tape 0x1 |
|
#define | ide_floppy 0x0 |
|
#define | ATAPI_WAIT_PC (60 * HZ) |
|
#define | to_ide_device(dev) container_of(dev, ide_drive_t, gendev) |
|
#define | to_ide_drv(obj, cont_type) container_of(obj, struct cont_type, dev) |
|
#define | ide_drv_g(disk, cont_type) container_of((disk)->private_data, struct cont_type, driver) |
|
#define | MAX_HOST_PORTS 4 |
|
#define | IDE_HOST_BUSY 0 |
|
#define | DS_SYNC (1 << 0) |
|
#define | __DEVSET(_flags, _get, _set) |
|
#define | ide_devset_get(name, field) |
|
#define | ide_devset_set(name, field) |
|
#define | ide_devset_get_flag(name, flag) |
|
#define | ide_devset_set_flag(name, flag) |
|
#define | __IDE_DEVSET(_name, _flags, _get, _set) |
|
#define | IDE_DEVSET(_name, _flags, _get, _set) static __IDE_DEVSET(_name, _flags, _get, _set) |
|
#define | ide_devset_rw(_name, _func) IDE_DEVSET(_name, 0, get_##_func, set_##_func) |
|
#define | ide_devset_w(_name, _func) IDE_DEVSET(_name, 0, NULL, set_##_func) |
|
#define | ide_ext_devset_rw(_name, _func) __IDE_DEVSET(_name, 0, get_##_func, set_##_func) |
|
#define | ide_ext_devset_rw_sync(_name, _func) __IDE_DEVSET(_name, DS_SYNC, get_##_func, set_##_func) |
|
#define | ide_decl_devset(_name) extern const struct ide_devset ide_devset_##_name |
|
#define | __ide_debug_log(lvl, fmt, args...) |
|
#define | to_ide_driver(drv) container_of(drv, struct ide_driver, gen_driver) |
|
#define | ide_pci_register_driver(d) pci_register_driver(d) |
|
#define | IDE_HFLAG_OFF_BOARD IDE_HFLAG_NON_BOOTABLE |
|
#define | ide_pci_suspend NULL |
|
#define | ide_pci_resume NULL |
|
#define | BAD_DMA_DRIVE 0 |
|
#define | GOOD_DMA_DRIVE 1 |
|
#define | ide_port_for_each_dev(i, dev, port) for ((i) = 0; ((dev) = (port)->devices[i]) || (i) < MAX_DRIVES; (i)++) |
|
#define | ide_port_for_each_present_dev(i, dev, port) |
|
#define | ide_host_for_each_port(i, port, host) for ((i) = 0; ((port) = (host)->ports[i]) || (i) < MAX_HOST_PORTS; (i)++) |
|
|
enum | { IDE_DRV_ERROR_GENERAL = 101,
IDE_DRV_ERROR_FILEMARK = 102,
IDE_DRV_ERROR_EOD = 103
} |
|
enum | {
WAIT_DRQ = 1 * HZ,
WAIT_READY = 5 * HZ,
WAIT_PIDENTIFY = 10 * HZ,
WAIT_WORSTCASE = 30 * HZ,
WAIT_CMD = 10 * HZ,
WAIT_FLOPPY_CMD = 50 * HZ,
WAIT_TAPE_CMD = 900 * HZ,
WAIT_MIN_SLEEP = HZ / 50
} |
|
enum | {
ide_unknown,
ide_generic,
ide_pci,
ide_cmd640,
ide_dtc2278,
ide_ali14xx,
ide_qd65xx,
ide_umc8672,
ide_ht6560b,
ide_4drives,
ide_pmac,
ide_acorn,
ide_au1xxx,
ide_palm3710
} |
|
enum | { IDE_SFLAG_SET_GEOMETRY = (1 << 0),
IDE_SFLAG_RECALIBRATE = (1 << 1),
IDE_SFLAG_SET_MULTMODE = (1 << 2)
} |
|
enum | ide_startstop_t { ide_stopped,
ide_started
} |
|
enum | {
IDE_VALID_ERROR = (1 << 1),
IDE_VALID_FEATURE = IDE_VALID_ERROR,
IDE_VALID_NSECT = (1 << 2),
IDE_VALID_LBAL = (1 << 3),
IDE_VALID_LBAM = (1 << 4),
IDE_VALID_LBAH = (1 << 5),
IDE_VALID_DEVICE = (1 << 6),
IDE_VALID_LBA,
IDE_VALID_OUT_TF,
IDE_VALID_IN_TF,
IDE_VALID_OUT_HOB = IDE_VALID_OUT_TF,
IDE_VALID_IN_HOB
} |
|
enum | {
IDE_TFLAG_LBA48 = (1 << 0),
IDE_TFLAG_WRITE = (1 << 1),
IDE_TFLAG_CUSTOM_HANDLER = (1 << 2),
IDE_TFLAG_DMA_PIO_FALLBACK = (1 << 3),
IDE_TFLAG_IO_16BIT = (1 << 4),
IDE_TFLAG_DYN = (1 << 5),
IDE_TFLAG_FS = (1 << 6),
IDE_TFLAG_MULTI_PIO = (1 << 7),
IDE_TFLAG_SET_XFER = (1 << 8)
} |
|
enum | { IDE_FTFLAG_FLAGGED = (1 << 0),
IDE_FTFLAG_SET_IN_FLAGS = (1 << 1),
IDE_FTFLAG_OUT_DATA = (1 << 2),
IDE_FTFLAG_IN_DATA = (1 << 3)
} |
|
enum | {
PC_FLAG_ABORT = (1 << 0),
PC_FLAG_SUPPRESS_ERROR = (1 << 1),
PC_FLAG_WAIT_FOR_DSC = (1 << 2),
PC_FLAG_DMA_OK = (1 << 3),
PC_FLAG_DMA_IN_PROGRESS = (1 << 4),
PC_FLAG_DMA_ERROR = (1 << 5),
PC_FLAG_WRITING = (1 << 6)
} |
|
enum | {
IDE_AFLAG_DRQ_INTERRUPT = (1 << 0),
IDE_AFLAG_NO_EJECT = (1 << 1),
IDE_AFLAG_PRE_ATAPI12 = (1 << 2),
IDE_AFLAG_TOCADDR_AS_BCD = (1 << 3),
IDE_AFLAG_TOCTRACKS_AS_BCD = (1 << 4),
IDE_AFLAG_TOC_VALID = (1 << 6),
IDE_AFLAG_DOOR_LOCKED = (1 << 7),
IDE_AFLAG_NO_SPEED_SELECT = (1 << 8),
IDE_AFLAG_VERTOS_300_SSD = (1 << 9),
IDE_AFLAG_VERTOS_600_ESD = (1 << 10),
IDE_AFLAG_SANYO_3CD = (1 << 11),
IDE_AFLAG_FULL_CAPS_PAGE = (1 << 12),
IDE_AFLAG_PLAY_AUDIO_OK = (1 << 13),
IDE_AFLAG_LE_SPEED_FIELDS = (1 << 14),
IDE_AFLAG_CLIK_DRIVE = (1 << 15),
IDE_AFLAG_ZIP_DRIVE = (1 << 16),
IDE_AFLAG_SRFP = (1 << 17),
IDE_AFLAG_IGNORE_DSC = (1 << 18),
IDE_AFLAG_ADDRESS_VALID = (1 << 19),
IDE_AFLAG_BUSY = (1 << 20),
IDE_AFLAG_DETECT_BS = (1 << 21),
IDE_AFLAG_FILEMARK = (1 << 22),
IDE_AFLAG_MEDIUM_PRESENT = (1 << 23),
IDE_AFLAG_NO_AUTOCLOSE = (1 << 24)
} |
|
enum | {
IDE_DFLAG_KEEP_SETTINGS = (1 << 0),
IDE_DFLAG_USING_DMA = (1 << 1),
IDE_DFLAG_UNMASK = (1 << 2),
IDE_DFLAG_NOFLUSH = (1 << 3),
IDE_DFLAG_DSC_OVERLAP = (1 << 4),
IDE_DFLAG_NICE1 = (1 << 5),
IDE_DFLAG_PRESENT = (1 << 6),
IDE_DFLAG_NOHPA = (1 << 7),
IDE_DFLAG_ID_READ = (1 << 8),
IDE_DFLAG_NOPROBE = (1 << 9),
IDE_DFLAG_REMOVABLE = (1 << 10),
IDE_DFLAG_ATTACH = (1 << 11),
IDE_DFLAG_FORCED_GEOM = (1 << 12),
IDE_DFLAG_NO_UNMASK = (1 << 13),
IDE_DFLAG_NO_IO_32BIT = (1 << 14),
IDE_DFLAG_DOORLOCKING = (1 << 15),
IDE_DFLAG_NODMA = (1 << 16),
IDE_DFLAG_BLOCKED = (1 << 17),
IDE_DFLAG_SLEEPING = (1 << 18),
IDE_DFLAG_POST_RESET = (1 << 19),
IDE_DFLAG_UDMA33_WARNED = (1 << 20),
IDE_DFLAG_LBA48 = (1 << 21),
IDE_DFLAG_WCACHE = (1 << 22),
IDE_DFLAG_NOWERR = (1 << 23),
IDE_DFLAG_DMA_PIO_RETRY = (1 << 24),
IDE_DFLAG_LBA = (1 << 25),
IDE_DFLAG_NO_UNLOAD = (1 << 26),
IDE_DFLAG_PARKED = (1 << 27),
IDE_DFLAG_MEDIA_CHANGED = (1 << 28),
IDE_DFLAG_WP = (1 << 29),
IDE_DFLAG_FORMAT_IN_PROGRESS = (1 << 30),
IDE_DFLAG_NIEN_QUIRK = (1 << 31)
} |
|
enum | { IDE_PFLAG_PROBING = (1 << 0)
} |
|
enum | {
IDE_DBG_FUNC = (1 << 0),
IDE_DBG_SENSE = (1 << 1),
IDE_DBG_PC = (1 << 2),
IDE_DBG_RQ = (1 << 3),
IDE_DBG_PROBE = (1 << 4)
} |
|
enum | {
IDE_PM_START_SUSPEND,
IDE_PM_FLUSH_CACHE = IDE_PM_START_SUSPEND,
IDE_PM_STANDBY,
IDE_PM_START_RESUME,
IDE_PM_RESTORE_PIO = IDE_PM_START_RESUME,
IDE_PM_IDLE,
IDE_PM_RESTORE_DMA,
IDE_PM_COMPLETED
} |
|
enum | { REQ_IDETAPE_PC1 = (1 << 0),
REQ_IDETAPE_PC2 = (1 << 1),
REQ_IDETAPE_READ = (1 << 2),
REQ_IDETAPE_WRITE = (1 << 3)
} |
|
enum | {
IDE_HFLAG_ISA_PORTS = (1 << 0),
IDE_HFLAG_SINGLE = (1 << 1),
IDE_HFLAG_PIO_NO_BLACKLIST = (1 << 2),
IDE_HFLAG_QD_2ND_PORT = (1 << 3),
IDE_HFLAG_ABUSE_PREFETCH = (1 << 4),
IDE_HFLAG_ABUSE_FAST_DEVSEL = (1 << 5),
IDE_HFLAG_ABUSE_DMA_MODES = (1 << 6),
IDE_HFLAG_SET_PIO_MODE_KEEP_DMA = (1 << 7),
IDE_HFLAG_POST_SET_MODE = (1 << 8),
IDE_HFLAG_NO_SET_MODE = (1 << 9),
IDE_HFLAG_TRUST_BIOS_FOR_DMA = (1 << 10),
IDE_HFLAG_CS5520 = (1 << 11),
IDE_HFLAG_NO_ATAPI_DMA = (1 << 12),
IDE_HFLAG_NON_BOOTABLE = (1 << 13),
IDE_HFLAG_NO_DMA = (1 << 14),
IDE_HFLAG_NO_AUTODMA = (1 << 15),
IDE_HFLAG_MMIO = (1 << 16),
IDE_HFLAG_NO_LBA48 = (1 << 17),
IDE_HFLAG_NO_LBA48_DMA = (1 << 18),
IDE_HFLAG_ERROR_STOPS_FIFO = (1 << 19),
IDE_HFLAG_SERIALIZE = (1 << 20),
IDE_HFLAG_DTC2278 = (1 << 21),
IDE_HFLAG_4DRIVES = (1 << 22),
IDE_HFLAG_TRM290 = (1 << 23),
IDE_HFLAG_IO_32BIT = (1 << 24),
IDE_HFLAG_UNMASK_IRQS = (1 << 25),
IDE_HFLAG_BROKEN_ALTSTATUS = (1 << 26),
IDE_HFLAG_SERIALIZE_DMA = (1 << 27),
IDE_HFLAG_CLEAR_SIMPLEX = (1 << 28),
IDE_HFLAG_NO_DSC = (1 << 29),
IDE_HFLAG_NO_IO_32BIT = (1 << 30),
IDE_HFLAG_NO_UNMASK_IRQS = (1 << 31)
} |
|
enum | {
IDE_TIMING_SETUP = (1 << 0),
IDE_TIMING_ACT8B = (1 << 1),
IDE_TIMING_REC8B = (1 << 2),
IDE_TIMING_CYC8B = (1 << 3),
IDE_TIMING_8BIT,
IDE_TIMING_ACTIVE = (1 << 4),
IDE_TIMING_RECOVER = (1 << 5),
IDE_TIMING_CYCLE = (1 << 6),
IDE_TIMING_UDMA = (1 << 7),
IDE_TIMING_ALL
} |
|
|
| ide_decl_devset (io_32bit) |
|
| ide_decl_devset (keepsettings) |
|
| ide_decl_devset (pio_mode) |
|
| ide_decl_devset (unmaskirq) |
|
| ide_decl_devset (using_dma) |
|
int | generic_ide_suspend (struct device *, pm_message_t) |
|
int | generic_ide_resume (struct device *) |
|
void | ide_complete_power_step (ide_drive_t *, struct request *) |
|
ide_startstop_t | ide_start_power_step (ide_drive_t *, struct request *) |
|
void | ide_complete_pm_rq (ide_drive_t *, struct request *) |
|
void | ide_check_pm_state (ide_drive_t *, struct request *) |
|
int | ide_device_get (ide_drive_t *) |
|
void | ide_device_put (ide_drive_t *) |
|
int | ide_setting_ioctl (ide_drive_t *, struct block_device *, unsigned int, unsigned long, const struct ide_ioctl_devset *) |
|
int | generic_ide_ioctl (ide_drive_t *, struct block_device *, unsigned, unsigned long) |
|
int | ide_end_rq (ide_drive_t *, struct request *, int, unsigned int) |
|
void | ide_kill_rq (ide_drive_t *, struct request *) |
|
void | __ide_set_handler (ide_drive_t *, ide_handler_t *, unsigned int) |
|
void | ide_set_handler (ide_drive_t *, ide_handler_t *, unsigned int) |
|
void | ide_execute_command (ide_drive_t *, struct ide_cmd *, ide_handler_t *, unsigned int) |
|
void | ide_pad_transfer (ide_drive_t *, int, int) |
|
ide_startstop_t | ide_error (ide_drive_t *, const char *, u8) |
|
void | ide_fix_driveid (u16 *) |
|
void | ide_fixstring (u8 *, const int, const int) |
|
int | ide_busy_sleep (ide_drive_t *, unsigned long, int) |
|
int | __ide_wait_stat (ide_drive_t *, u8, u8, unsigned long, u8 *) |
|
int | ide_wait_stat (ide_startstop_t *, ide_drive_t *, u8, u8, unsigned long) |
|
ide_startstop_t | ide_do_park_unpark (ide_drive_t *, struct request *) |
|
ide_startstop_t | ide_do_devset (ide_drive_t *, struct request *) |
|
ide_startstop_t | ide_do_reset (ide_drive_t *) |
|
int | ide_devset_execute (ide_drive_t *drive, const struct ide_devset *setting, int arg) |
|
void | ide_complete_cmd (ide_drive_t *, struct ide_cmd *, u8, u8) |
|
int | ide_complete_rq (ide_drive_t *, int, unsigned int) |
|
void | ide_tf_readback (ide_drive_t *drive, struct ide_cmd *cmd) |
|
void | ide_tf_dump (const char *, struct ide_cmd *) |
|
void | ide_exec_command (ide_hwif_t *, u8) |
|
u8 | ide_read_status (ide_hwif_t *) |
|
u8 | ide_read_altstatus (ide_hwif_t *) |
|
void | ide_write_devctl (ide_hwif_t *, u8) |
|
void | ide_dev_select (ide_drive_t *) |
|
void | ide_tf_load (ide_drive_t *, struct ide_taskfile *, u8) |
|
void | ide_tf_read (ide_drive_t *, struct ide_taskfile *, u8) |
|
void | ide_input_data (ide_drive_t *, struct ide_cmd *, void *, unsigned int) |
|
void | ide_output_data (ide_drive_t *, struct ide_cmd *, void *, unsigned int) |
|
void | SELECT_MASK (ide_drive_t *, int) |
|
u8 | ide_read_error (ide_drive_t *) |
|
void | ide_read_bcount_and_ireason (ide_drive_t *, u16 *, u8 *) |
|
int | ide_check_ireason (ide_drive_t *, struct request *, int, int, int) |
|
int | ide_check_atapi_device (ide_drive_t *, const char *) |
|
void | ide_init_pc (struct ide_atapi_pc *) |
|
ssize_t | ide_park_show (struct device *dev, struct device_attribute *attr, char *buf) |
|
ssize_t | ide_park_store (struct device *dev, struct device_attribute *attr, const char *buf, size_t len) |
|
int | ide_queue_pc_tail (ide_drive_t *, struct gendisk *, struct ide_atapi_pc *, void *, unsigned int) |
|
int | ide_do_test_unit_ready (ide_drive_t *, struct gendisk *) |
|
int | ide_do_start_stop (ide_drive_t *, struct gendisk *, int) |
|
int | ide_set_media_lock (ide_drive_t *, struct gendisk *, int) |
|
void | ide_create_request_sense_cmd (ide_drive_t *, struct ide_atapi_pc *) |
|
void | ide_retry_pc (ide_drive_t *drive) |
|
void | ide_prep_sense (ide_drive_t *drive, struct request *rq) |
|
int | ide_queue_sense_rq (ide_drive_t *drive, void *special) |
|
int | ide_cd_expiry (ide_drive_t *) |
|
int | ide_cd_get_xferlen (struct request *) |
|
ide_startstop_t | ide_issue_pc (ide_drive_t *, struct ide_cmd *) |
|
ide_startstop_t | do_rw_taskfile (ide_drive_t *, struct ide_cmd *) |
|
void | ide_pio_bytes (ide_drive_t *, struct ide_cmd *, unsigned int, unsigned int) |
|
void | ide_finish_cmd (ide_drive_t *, struct ide_cmd *, u8) |
|
int | ide_raw_taskfile (ide_drive_t *, struct ide_cmd *, u8 *, u16) |
|
int | ide_no_data_taskfile (ide_drive_t *, struct ide_cmd *) |
|
int | ide_taskfile_ioctl (ide_drive_t *, unsigned long) |
|
int | ide_dev_read_id (ide_drive_t *, u8, u16 *, int) |
|
int | ide_driveid_update (ide_drive_t *) |
|
int | ide_config_drive_speed (ide_drive_t *, u8) |
|
u8 | eighty_ninty_three (ide_drive_t *) |
|
int | taskfile_lib_get_identify (ide_drive_t *drive, u8 *) |
|
int | ide_wait_not_busy (ide_hwif_t *hwif, unsigned long timeout) |
|
void | ide_stall_queue (ide_drive_t *drive, unsigned long timeout) |
|
void | ide_timer_expiry (unsigned long) |
|
irqreturn_t | ide_intr (int irq, void *dev_id) |
|
void | do_ide_request (struct request_queue *) |
|
void | ide_requeue_and_plug (ide_drive_t *drive, struct request *rq) |
|
void | ide_init_disk (struct gendisk *, ide_drive_t *) |
|
void | ide_pci_setup_ports (struct pci_dev *, const struct ide_port_info *, struct ide_hw *, struct ide_hw **) |
|
void | ide_setup_pci_noise (struct pci_dev *, const struct ide_port_info *) |
|
int | ide_pci_init_one (struct pci_dev *, const struct ide_port_info *, void *) |
|
int | ide_pci_init_two (struct pci_dev *, struct pci_dev *, const struct ide_port_info *, void *) |
|
void | ide_pci_remove (struct pci_dev *) |
|
void | ide_map_sg (ide_drive_t *, struct ide_cmd *) |
|
void | ide_init_sg_cmd (struct ide_cmd *, unsigned int) |
|
int | ide_in_drive_list (u16 *, const struct drive_list_entry *) |
|
void | ide_register_region (struct gendisk *) |
|
void | ide_unregister_region (struct gendisk *) |
|
void | ide_check_nien_quirk_list (ide_drive_t *) |
|
void | ide_undecoded_slave (ide_drive_t *) |
|
void | ide_port_apply_params (ide_hwif_t *) |
|
int | ide_sysfs_register_port (ide_hwif_t *) |
|
struct ide_host * | ide_host_alloc (const struct ide_port_info *, struct ide_hw **, unsigned int) |
|
void | ide_host_free (struct ide_host *) |
|
int | ide_host_register (struct ide_host *, const struct ide_port_info *, struct ide_hw **) |
|
int | ide_host_add (const struct ide_port_info *, struct ide_hw **, unsigned int, struct ide_host **) |
|
void | ide_host_remove (struct ide_host *) |
|
int | ide_legacy_device_add (const struct ide_port_info *, unsigned long) |
|
void | ide_port_unregister_devices (ide_hwif_t *) |
|
void | ide_port_scan (ide_hwif_t *) |
|
void | ide_toggle_bounce (ide_drive_t *drive, int on) |
|
u64 | ide_get_lba_addr (struct ide_cmd *, int) |
|
u8 | ide_dump_status (ide_drive_t *, const char *, u8) |
|
struct ide_timing * | ide_timing_find_mode (u8) |
|
u16 | ide_pio_cycle_time (ide_drive_t *, u8) |
|
void | ide_timing_merge (struct ide_timing *, struct ide_timing *, struct ide_timing *, unsigned int) |
|
int | ide_timing_compute (ide_drive_t *, u8, struct ide_timing *, int, int) |
|
char * | ide_media_string (ide_drive_t *) |
|
ide_intr - default IDE interrupt handler : interrupt number : hwif : unused weirdness from the kernel irq layer
This is the default IRQ handler for the IDE layer. You should not need to override it. If you do be aware it is subtle in places
hwif is the interface in the group currently performing a command. hwif->cur_dev is the drive and hwif->handler is the IRQ handler to call. As we issue a command the handlers step through multiple states, reassigning the handler to the next step in the process. Unlike a smart SCSI controller IDE expects the main processor to sequence the various transfer stages. We also manage a poll timer to catch up with most timeout situations. There are still a few where the handlers don't ever decide to give up.
The handler eventually returns ide_stopped to indicate the request completed. At this point we issue the next request on the port and the process begins again.
Definition at line 770 of file ide-io.c.