}
}
+static void ide_dma_cancel(BMDMAState *bm);
static inline void ide_abort_command(IDEState *s)
{
+ if (s->bmdma) ide_dma_cancel(s->bmdma);
s->status = READY_STAT | ERR_STAT;
s->error = ABRT_ERR;
}
static void ide_dma_error(IDEState *s)
{
+ if (s->bmdma) ide_dma_cancel(s->bmdma);
ide_transfer_stop(s);
s->error = ABRT_ERR;
s->status = READY_STAT | ERR_STAT;
return;
}
- if (!s->bs) return; /* ouch! (see ide_flush_cb) */
+ if (!s || !s->bs) return; /* ouch! (see ide_dma_error & ide_flush_cb) */
n = s->io_buffer_size >> 9;
sector_num = ide_get_sector(s);
return;
}
- if (!s->bs) return; /* ouch! (see ide_flush_cb) */
+ if (!s || !s->bs) return; /* ouch! (see ide_dma_error & ide_flush_cb) */
n = s->io_buffer_size >> 9;
sector_num = ide_get_sector(s);