Lines Matching refs:bus
132 IDEDevice *dev = s->unit ? s->bus->slave : s->bus->master; in ide_identify()
528 IDEDevice *dev = s->unit ? s->bus->slave : s->bus->master; in ide_issue_trim()
555 s->bus->retry_unit = s->unit; in ide_set_retry()
556 s->bus->retry_sector_num = ide_get_sector(s); in ide_set_retry()
557 s->bus->retry_nsector = s->nsector; in ide_set_retry()
562 s->bus->retry_unit = -1; in ide_clear_retry()
563 s->bus->retry_sector_num = 0; in ide_clear_retry()
564 s->bus->retry_nsector = 0; in ide_clear_retry()
577 if (!s->bus->dma->ops->pio_transfer) { in ide_transfer_start_norecurse()
581 s->bus->dma->ops->pio_transfer(s->bus->dma); in ide_transfer_start_norecurse()
595 if (s->bus->dma->ops->cmd_done) { in ide_cmd_done()
596 s->bus->dma->ops->cmd_done(s->bus->dma); in ide_cmd_done()
671 ide_bus_set_irq(s->bus); in ide_rw_error()
755 if (s->bus->dma->aiocb) { in ide_cancel_dma_sync()
758 assert(s->bus->dma->aiocb == NULL); in ide_cancel_dma_sync()
790 ide_bus_set_irq(s->bus); in ide_sector_read_cb()
832 if (s->bus->dma->ops->commit_buf) { in dma_buf_commit()
833 s->bus->dma->ops->commit_buf(s->bus->dma, tx_bytes); in dma_buf_commit()
841 s->bus->dma->aiocb = NULL; in ide_set_inactive()
843 if (s->bus->dma->ops->set_inactive) { in ide_set_inactive()
844 s->bus->dma->ops->set_inactive(s->bus->dma, more); in ide_set_inactive()
854 ide_bus_set_irq(s->bus); in ide_dma_error()
863 assert(s->bus->retry_unit == s->unit); in ide_handle_rw_error()
864 s->bus->error_status = op; in ide_handle_rw_error()
895 s->bus->dma->aiocb = NULL; in ide_dma_cb()
924 ide_bus_set_irq(s->bus); in ide_dma_cb()
932 prep_size = s->bus->dma->ops->prepare_buf(s->bus->dma, s->io_buffer_size); in ide_dma_cb()
963 s->bus->dma->aiocb = dma_blk_read(s->blk, &s->sg, offset, in ide_dma_cb()
967 s->bus->dma->aiocb = dma_blk_write(s->blk, &s->sg, offset, in ide_dma_cb()
971 s->bus->dma->aiocb = dma_blk_io(&s->sg, offset, BDRV_SECTOR_SIZE, in ide_dma_cb()
1013 if (s->bus->dma->ops->start_dma) { in ide_start_dma()
1014 s->bus->dma->ops->start_dma(s->bus->dma, s, cb); in ide_start_dma()
1023 ide_bus_set_irq(s->bus); in ide_sector_write_timer_cb()
1071 ide_bus_set_irq(s->bus); in ide_sector_write_cb()
1122 ide_bus_set_irq(s->bus); in ide_flush_cb()
1211 ide_bus_set_irq(s->bus); in ide_cd_change_cb()
1222 ide_bus_set_irq(s->bus); in ide_cd_eject_request_cb()
1248 static void ide_clear_hob(IDEBus *bus) in ide_clear_hob() argument
1251 bus->cmd &= ~(IDE_CTRL_HOB); in ide_clear_hob()
1280 IDEBus *bus = opaque; in ide_ioport_write() local
1281 IDEState *s = ide_bus_active_if(bus); in ide_ioport_write()
1284 trace_ide_ioport_write(addr, ATA_IOPORT_WR_lookup[reg_num], val, bus, s); in ide_ioport_write()
1298 ide_clear_hob(bus); in ide_ioport_write()
1299 bus->ifs[0].hob_feature = bus->ifs[0].feature; in ide_ioport_write()
1300 bus->ifs[1].hob_feature = bus->ifs[1].feature; in ide_ioport_write()
1301 bus->ifs[0].feature = val; in ide_ioport_write()
1302 bus->ifs[1].feature = val; in ide_ioport_write()
1305 ide_clear_hob(bus); in ide_ioport_write()
1306 bus->ifs[0].hob_nsector = bus->ifs[0].nsector; in ide_ioport_write()
1307 bus->ifs[1].hob_nsector = bus->ifs[1].nsector; in ide_ioport_write()
1308 bus->ifs[0].nsector = val; in ide_ioport_write()
1309 bus->ifs[1].nsector = val; in ide_ioport_write()
1312 ide_clear_hob(bus); in ide_ioport_write()
1313 bus->ifs[0].hob_sector = bus->ifs[0].sector; in ide_ioport_write()
1314 bus->ifs[1].hob_sector = bus->ifs[1].sector; in ide_ioport_write()
1315 bus->ifs[0].sector = val; in ide_ioport_write()
1316 bus->ifs[1].sector = val; in ide_ioport_write()
1319 ide_clear_hob(bus); in ide_ioport_write()
1320 bus->ifs[0].hob_lcyl = bus->ifs[0].lcyl; in ide_ioport_write()
1321 bus->ifs[1].hob_lcyl = bus->ifs[1].lcyl; in ide_ioport_write()
1322 bus->ifs[0].lcyl = val; in ide_ioport_write()
1323 bus->ifs[1].lcyl = val; in ide_ioport_write()
1326 ide_clear_hob(bus); in ide_ioport_write()
1327 bus->ifs[0].hob_hcyl = bus->ifs[0].hcyl; in ide_ioport_write()
1328 bus->ifs[1].hob_hcyl = bus->ifs[1].hcyl; in ide_ioport_write()
1329 bus->ifs[0].hcyl = val; in ide_ioport_write()
1330 bus->ifs[1].hcyl = val; in ide_ioport_write()
1333 ide_clear_hob(bus); in ide_ioport_write()
1334 bus->ifs[0].select = val | (ATA_DEV_ALWAYS_ON); in ide_ioport_write()
1335 bus->ifs[1].select = val | (ATA_DEV_ALWAYS_ON); in ide_ioport_write()
1337 bus->unit = (val & (ATA_DEV_SELECT)) ? 1 : 0; in ide_ioport_write()
1341 ide_clear_hob(bus); in ide_ioport_write()
1342 qemu_irq_lower(bus->irq); in ide_ioport_write()
1343 ide_bus_exec_cmd(bus, val); in ide_ioport_write()
1456 ide_bus_set_irq(s->bus); in cmd_identify()
1659 ide_bus_set_irq(s->bus); in cmd_specify()
1760 ide_bus_set_irq(s->bus); in cmd_identify_packet()
1785 ide_bus_set_irq(s->bus); in cmd_exec_dev_diagnostic()
1817 ide_bus_set_irq(s->bus); in cmd_cfa_req_ext_error_code()
1856 ide_bus_set_irq(s->bus); in cmd_cfa_translate_sector()
1880 ide_bus_set_irq(s->bus); in cmd_cfa_access_metadata_storage()
1963 ide_bus_set_irq(s->bus); in cmd_smart()
2004 ide_bus_set_irq(s->bus); in cmd_smart()
2043 ide_bus_set_irq(s->bus); in cmd_smart()
2152 void ide_bus_exec_cmd(IDEBus *bus, uint32_t val) in ide_bus_exec_cmd() argument
2157 s = ide_bus_active_if(bus); in ide_bus_exec_cmd()
2158 trace_ide_bus_exec_cmd(bus, s, val); in ide_bus_exec_cmd()
2161 if (s != bus->ifs && !s->blk) { in ide_bus_exec_cmd()
2175 ide_bus_set_irq(s->bus); in ide_bus_exec_cmd()
2193 ide_bus_set_irq(s->bus); in ide_bus_exec_cmd()
2223 IDEBus *bus = opaque; in ide_ioport_read() local
2224 IDEState *s = ide_bus_active_if(bus); in ide_ioport_read()
2229 hob = bus->cmd & (IDE_CTRL_HOB); in ide_ioport_read()
2236 ret = ide_data_readw(bus, addr) & 0xff; in ide_ioport_read()
2239 if ((!bus->ifs[0].blk && !bus->ifs[1].blk) || in ide_ioport_read()
2240 (s != bus->ifs && !s->blk)) { in ide_ioport_read()
2249 if (!bus->ifs[0].blk && !bus->ifs[1].blk) { in ide_ioport_read()
2258 if (!bus->ifs[0].blk && !bus->ifs[1].blk) { in ide_ioport_read()
2267 if (!bus->ifs[0].blk && !bus->ifs[1].blk) { in ide_ioport_read()
2276 if (!bus->ifs[0].blk && !bus->ifs[1].blk) { in ide_ioport_read()
2285 if (!bus->ifs[0].blk && !bus->ifs[1].blk) { in ide_ioport_read()
2293 if ((!bus->ifs[0].blk && !bus->ifs[1].blk) || in ide_ioport_read()
2294 (s != bus->ifs && !s->blk)) { in ide_ioport_read()
2299 qemu_irq_lower(bus->irq); in ide_ioport_read()
2303 trace_ide_ioport_read(addr, ATA_IOPORT_RR_lookup[reg_num], ret, bus, s); in ide_ioport_read()
2309 IDEBus *bus = opaque; in ide_status_read() local
2310 IDEState *s = ide_bus_active_if(bus); in ide_status_read()
2313 if ((!bus->ifs[0].blk && !bus->ifs[1].blk) || in ide_status_read()
2314 (s != bus->ifs && !s->blk)) { in ide_status_read()
2320 trace_ide_status_read(addr, ret, bus, s); in ide_status_read()
2343 IDEBus *bus = opaque; in ide_bus_perform_srst() local
2348 s = &bus->ifs[i]; in ide_bus_perform_srst()
2352 bus->cmd &= ~IDE_CTRL_RESET; in ide_bus_perform_srst()
2357 IDEBus *bus = opaque; in ide_ctrl_write() local
2361 trace_ide_ctrl_write(addr, val, bus); in ide_ctrl_write()
2365 if (!(bus->cmd & IDE_CTRL_RESET) && (val & IDE_CTRL_RESET)) { in ide_ctrl_write()
2367 s = &bus->ifs[i]; in ide_ctrl_write()
2371 ide_bus_perform_srst, bus); in ide_ctrl_write()
2374 bus->cmd = val; in ide_ctrl_write()
2398 IDEBus *bus = opaque; in ide_data_writew() local
2399 IDEState *s = ide_bus_active_if(bus); in ide_data_writew()
2402 trace_ide_data_writew(addr, val, bus, s); in ide_data_writew()
2434 IDEBus *bus = opaque; in ide_data_readw() local
2435 IDEState *s = ide_bus_active_if(bus); in ide_data_readw()
2466 trace_ide_data_readw(addr, ret, bus, s); in ide_data_readw()
2472 IDEBus *bus = opaque; in ide_data_writel() local
2473 IDEState *s = ide_bus_active_if(bus); in ide_data_writel()
2476 trace_ide_data_writel(addr, val, bus, s); in ide_data_writel()
2500 IDEBus *bus = opaque; in ide_data_readl() local
2501 IDEState *s = ide_bus_active_if(bus); in ide_data_readl()
2526 trace_ide_data_readl(addr, ret, bus, s); in ide_data_readl()
2540 void ide_bus_reset(IDEBus *bus) in ide_bus_reset() argument
2543 if (bus->dma->aiocb) { in ide_bus_reset()
2545 blk_aio_cancel(bus->dma->aiocb); in ide_bus_reset()
2546 bus->dma->aiocb = NULL; in ide_bus_reset()
2549 bus->unit = 0; in ide_bus_reset()
2550 bus->cmd = 0; in ide_bus_reset()
2551 ide_reset(&bus->ifs[0]); in ide_bus_reset()
2552 ide_reset(&bus->ifs[1]); in ide_bus_reset()
2553 ide_clear_hob(bus); in ide_bus_reset()
2556 if (bus->dma->ops->reset) { in ide_bus_reset()
2557 bus->dma->ops->reset(bus->dma); in ide_bus_reset()
2671 static void ide_init1(IDEBus *bus, int unit) in ide_init1() argument
2674 IDEState *s = &bus->ifs[unit]; in ide_init1()
2676 s->bus = bus; in ide_init1()
2713 s->unit = s->bus->retry_unit; in ide_restart_dma()
2714 ide_set_sector(s, s->bus->retry_sector_num); in ide_restart_dma()
2715 s->nsector = s->bus->retry_nsector; in ide_restart_dma()
2716 s->bus->dma->ops->restart_dma(s->bus->dma); in ide_restart_dma()
2724 IDEBus *bus = opaque; in ide_restart_bh() local
2729 qemu_bh_delete(bus->bh); in ide_restart_bh()
2730 bus->bh = NULL; in ide_restart_bh()
2732 error_status = bus->error_status; in ide_restart_bh()
2733 if (bus->error_status == 0) { in ide_restart_bh()
2737 s = ide_bus_active_if(bus); in ide_restart_bh()
2738 is_read = (bus->error_status & IDE_RETRY_READ) != 0; in ide_restart_bh()
2743 bus->error_status = 0; in ide_restart_bh()
2747 if (s->bus->dma->ops->restart) { in ide_restart_bh()
2748 s->bus->dma->ops->restart(s->bus->dma); in ide_restart_bh()
2774 IDEBus *bus = opaque; in ide_restart_cb() local
2779 if (!bus->bh) { in ide_restart_cb()
2780 bus->bh = qemu_bh_new(ide_restart_bh, bus); in ide_restart_cb()
2781 qemu_bh_schedule(bus->bh); in ide_restart_cb()
2785 void ide_bus_register_restart_cb(IDEBus *bus) in ide_bus_register_restart_cb() argument
2787 if (bus->dma->ops->restart_dma) { in ide_bus_register_restart_cb()
2788 bus->vmstate = qemu_add_vm_change_state_handler(ide_restart_cb, bus); in ide_bus_register_restart_cb()
2797 void ide_bus_init_output_irq(IDEBus *bus, qemu_irq irq_out) in ide_bus_init_output_irq() argument
2802 ide_init1(bus, i); in ide_bus_init_output_irq()
2803 ide_reset(&bus->ifs[i]); in ide_bus_init_output_irq()
2805 bus->irq = irq_out; in ide_bus_init_output_irq()
2806 bus->dma = &ide_dma_nop; in ide_bus_init_output_irq()
2809 void ide_bus_set_irq(IDEBus *bus) in ide_bus_set_irq() argument
2811 if (!(bus->cmd & IDE_CTRL_DISABLE_IRQ)) { in ide_bus_set_irq()
2812 qemu_irq_raise(bus->irq); in ide_bus_set_irq()
2900 || (s->bus->error_status & IDE_RETRY_PIO); in ide_drive_pio_state_needed()
2919 IDEBus *bus = opaque; in ide_error_needed() local
2921 return (bus->error_status != 0); in ide_error_needed()