MCPcopy Create free account
hub / github.com/BlitterStudio/amiberry / add_ide_unit

Function add_ide_unit

src/ide.cpp:1656–1754  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1654}
1655
1656struct ide_hdf *add_ide_unit (struct ide_hdf **idetable, int max, int ch, struct uaedev_config_info *ci, struct romconfig *rc)
1657{
1658 struct ide_hdf *ide;
1659 bool vb;
1660
1661 alloc_ide_mem(idetable, max, NULL);
1662 if (ch < 0)
1663 return NULL;
1664 ide = idetable[ch];
1665 if (ci)
1666 memcpy (&ide->hdhfd.hfd.ci, ci, sizeof (struct uaedev_config_info));
1667 if (ci->type == UAEDEV_CD && ci->device_emu_unit >= 0) {
1668
1669 device_func_init(0);
1670 ide->scsi = scsi_alloc_cd(ch, ci->device_emu_unit, true, ci->uae_unitnum);
1671 if (!ide->scsi) {
1672 write_log(_T("IDE: CD EMU unit %d failed to open\n"), ide->cd_unit_num);
1673 return NULL;
1674 }
1675
1676 ide_identity_buffer(ide);
1677 ide->cd_unit_num = ci->device_emu_unit;
1678 ide->atapi = true;
1679 ide->atapi_device_type = 5;
1680 ide->blocksize = 512;
1681 ide->uae_unitnum = ci->uae_unitnum;
1682 gui_flicker_led(LED_CD, ci->uae_unitnum, -1);
1683
1684 write_log(_T("IDE%d CD %d\n"), ch, ide->cd_unit_num);
1685
1686 } else if (ci->type == UAEDEV_TAPE) {
1687
1688 ide->scsi = scsi_alloc_tape(ch, ci->rootdir, ci->readonly, ci->uae_unitnum);
1689 if (!ide->scsi) {
1690 write_log(_T("IDE: TAPE EMU unit %d failed to open\n"), ch);
1691 return NULL;
1692 }
1693
1694 ide_identity_buffer(ide);
1695 ide->atapi = true;
1696 ide->atapi_device_type = 1;
1697 ide->blocksize = 512;
1698 ide->cd_unit_num = -1;
1699 ide->uae_unitnum = ci->uae_unitnum;
1700
1701 write_log(_T("IDE%d TAPE %d\n"), ch, ide->cd_unit_num);
1702
1703
1704 } else if (ci->type == UAEDEV_HDF) {
1705
1706 if (!hdf_hd_open (&ide->hdhfd))
1707 return NULL;
1708
1709 ide->max_multiple_mode = 128;
1710 ide->blocksize = ide->hdhfd.hfd.virtual_rdb ? 512 : ide->hdhfd.hfd.ci.blocksize;
1711 ide->max_lba = ide->hdhfd.size / ide->blocksize;
1712 ide->lba48 = (ide->hdhfd.hfd.ci.unit_special_flags & 1) || ide->hdhfd.size >= 128 * (uae_u64)0x40000000 ? 1 : 0;
1713 ide->lba = true;

Callers 4

initpcmciaFunction · 0.70
gayle_add_ide_unitFunction · 0.70
add_ide_standard_unitFunction · 0.70
gvp_add_ide_unitFunction · 0.70

Calls 11

alloc_ide_memFunction · 0.85
device_func_initFunction · 0.85
scsi_alloc_cdFunction · 0.85
ide_identity_bufferFunction · 0.85
scsi_alloc_tapeFunction · 0.85
hdf_hd_openFunction · 0.85
ata_byteswapidentityFunction · 0.85
ata_parse_identityFunction · 0.85
ini_getboolFunction · 0.85
write_logFunction · 0.70
gui_flicker_ledFunction · 0.50

Tested by

no test coverage detected