#define IDE_TIMEOUT 32000u //32 seconds max for IDE ops
-#define DEBUGF1(fmt, args...) bprintf(0, fmt , ##args)
-#define DEBUGF(fmt, args...)
-
/****************************************************************
* Helper functions
// mod 2048 each 16 ms
if (time>>16 != last) {
last = time >>16;
- DEBUGF("await_ide: (TIMEOUT,BSY,!BSY,!BSY_DRQ,!BSY_!DRQ,!BSY_RDY)"
- " %d time= %d timeout= %d\n"
- , when_done, time>>11, timeout);
+ dprintf(6, "await_ide: (TIMEOUT,BSY,!BSY,!BSY_DRQ"
+ ",!BSY_!DRQ,!BSY_RDY) %d time= %d timeout= %d\n"
+ , when_done, time>>11, timeout);
}
if (status & ATA_CB_STAT_ERR) {
- DEBUGF("await_ide: ERROR (TIMEOUT,BSY,!BSY,!BSY_DRQ"
- ",!BSY_!DRQ,!BSY_RDY) %d time= %d timeout= %d\n"
- , when_done, time>>11, timeout);
+ dprintf(1, "await_ide: ERROR (TIMEOUT,BSY,!BSY,!BSY_DRQ"
+ ",!BSY_!DRQ,!BSY_RDY) %d status=%x time= %d timeout= %d\n"
+ , when_done, status, time>>11, timeout);
return -1;
}
if (timeout == 0 || (time>>11) > timeout)
break;
}
dprintf(1, "IDE time out\n");
- return -1;
+ return -2;
}
// Wait for ide state - pauses for one ata cycle first.
int status = inb(iobase1 + ATA_CB_STAT);
if (status & ATA_CB_STAT_BSY)
- return 1;
+ return -3;
// Disable interrupts
outb(ATA_CB_DC_HD15 | ATA_CB_DC_NIEN, iobase2 + ATA_CB_DC);
// Select device
u8 device = inb(iobase1 + ATA_CB_DH);
outb(cmd->device, iobase1 + ATA_CB_DH);
- if ((device ^ cmd->device) & (1UL << 4))
+ if ((device ^ cmd->device) & (1 << 4))
// Wait for device to become active.
msleep(50);
return status;
if (status & ATA_CB_STAT_ERR) {
- DEBUGF("send_cmd : read error\n");
- return 2;
+ dprintf(6, "send_cmd : read error\n");
+ return -4;
}
if (!(status & ATA_CB_STAT_DRQ)) {
- DEBUGF("send_cmd : DRQ not set (status %02x)\n"
- , (unsigned) status);
- return 3;
+ dprintf(6, "send_cmd : DRQ not set (status %02x)\n"
+ , (unsigned) status);
+ return -5;
}
return 0;
ata_transfer(int driveid, int iswrite, int count, int blocksize
, int skipfirst, int skiplast, void *far_buffer)
{
- DEBUGF("ata_transfer id=%d write=%d count=%d bs=%d"
- " skipf=%d skipl=%d buf=%p\n"
- , driveid, iswrite, count, blocksize
- , skipfirst, skiplast, far_buffer);
+ dprintf(16, "ata_transfer id=%d write=%d count=%d bs=%d"
+ " skipf=%d skipl=%d buf=%p\n"
+ , driveid, iswrite, count, blocksize
+ , skipfirst, skiplast, far_buffer);
// Reset count of transferred data
SET_EBDA(ata.trsfsectors, 0);
if (iswrite) {
// Write data to controller
- DEBUGF("Write sector id=%d dest=%p\n", driveid, far_buffer);
+ dprintf(16, "Write sector id=%d dest=%p\n", driveid, far_buffer);
if (mode == ATA_MODE_PIO32)
outsl_far(iobase1, far_buffer, bsize / 4);
else
outsw_far(iobase1, far_buffer, bsize / 2);
} else {
// Read data from controller
- DEBUGF("Read sector id=%d dest=%p\n", driveid, far_buffer);
+ dprintf(16, "Read sector id=%d dest=%p\n", driveid, far_buffer);
if (mode == ATA_MODE_PIO32)
insl_far(iobase1, far_buffer, bsize / 4);
else
status &= (ATA_CB_STAT_BSY | ATA_CB_STAT_RDY | ATA_CB_STAT_DRQ
| ATA_CB_STAT_ERR);
if (status != (ATA_CB_STAT_RDY | ATA_CB_STAT_DRQ)) {
- DEBUGF("ata_transfer : more sectors left (status %02x)\n"
- , (unsigned) status);
- return 5;
+ dprintf(6, "ata_transfer : more sectors left (status %02x)\n"
+ , (unsigned) status);
+ return -6;
}
}
if (!iswrite)
status &= ~ATA_CB_STAT_DF;
if (status != ATA_CB_STAT_RDY ) {
- DEBUGF("ata_transfer : no sectors left (status %02x)\n"
- , (unsigned) status);
- return 4;
+ dprintf(6, "ata_transfer : no sectors left (status %02x)\n"
+ , (unsigned) status);
+ return -7;
}
// Enable interrupts
op.count = count;
op.far_buffer = far_buffer;
- DEBUGF("cdrom_read_512: id=%d vlba=%d vcount=%d buf=%p lba=%d elba=%d"
- " count=%d before=%d after=%d\n"
- , driveid, vlba, vcount, far_buffer, lba, elba
- , count, before, after);
+ dprintf(16, "cdrom_read_512: id=%d vlba=%d vcount=%d buf=%p lba=%d elba=%d"
+ " count=%d before=%d after=%d\n"
+ , driveid, vlba, vcount, far_buffer, lba, elba
+ , count, before, after);
int ret = send_cmd_cdrom(&op);
if (ret)
report_model(driveid, buffer);
u8 version = get_ata_version(buffer);
if (sizeinmb < (1 << 16))
- printf(" ATA-%d Hard-Disk (%u MBytes)\n", version, (u32)sizeinmb);
+ printf(" ATA-%d Hard-Disk (%u MiBytes)\n", version, (u32)sizeinmb);
else
- printf(" ATA-%d Hard-Disk (%u GBytes)\n", version
+ printf(" ATA-%d Hard-Disk (%u GiBytes)\n", version
, (u32)(sizeinmb >> 10));
}
#include "util.h" // memset
#include "ata.h" // ATA_CMD_READ_SECTORS
-#define DEBUGF1(fmt, args...) bprintf(0, fmt , ##args)
-#define DEBUGF(fmt, args...)
-
/****************************************************************
* CDROM functions
****************************************************************/
// Request SENSE
-static u16
+static int
atapi_get_sense(u16 device, u8 *asc, u8 *ascq)
{
u8 buffer[18];
memset(atacmd, 0, sizeof(atacmd));
atacmd[0] = ATA_CMD_REQUEST_SENSE;
atacmd[4] = sizeof(buffer);
- u16 ret = ata_cmd_packet(device, atacmd, sizeof(atacmd), sizeof(buffer)
+ int ret = ata_cmd_packet(device, atacmd, sizeof(atacmd), sizeof(buffer)
, MAKE_FARPTR(GET_SEG(SS), (u32)buffer));
if (ret != 0)
- return 0x0002;
+ return ret;
*asc = buffer[12];
*ascq = buffer[13];
return 0;
}
-static u16
+static int
atapi_is_ready(u16 device)
{
if (GET_EBDA(ata.devices[device].type) != ATA_TYPE_ATAPI) {
return -1;
}
- DEBUGF("ata_detect_medium: begin\n");
+ dprintf(6, "ata_detect_medium: begin\n");
u8 packet[12];
memset(packet, 0, sizeof(packet));
packet[0] = 0x25; /* READ CAPACITY */
u8 in_progress = 0;
for (;; time+=100) {
if (time >= timeout) {
- DEBUGF("read capacity failed\n");
+ dprintf(1, "read capacity failed\n");
return -1;
}
- u16 ret = ata_cmd_packet(device, packet, sizeof(packet), sizeof(buf)
+ int ret = ata_cmd_packet(device, packet, sizeof(packet), sizeof(buf)
, MAKE_FARPTR(GET_SEG(SS), (u32)buf));
if (ret == 0)
break;
continue;
if (asc == 0x3a) { /* MEDIUM NOT PRESENT */
- DEBUGF("Device reports MEDIUM NOT PRESENT\n");
+ dprintf(1, "Device reports MEDIUM NOT PRESENT\n");
return -1;
}
| (u32) buf[2] << 8
| (u32) buf[3] << 0;
- DEBUGF("sectors=%u\n", sectors);
+ dprintf(6, "sectors=%u\n", sectors);
if (block_len == 2048)
sectors <<= 2; /* # of sectors in 512-byte "soft" sector */
if (sectors != GET_EBDA(ata.devices[device].sectors))
return 0;
}
-static u16
+static int
atapi_is_cdrom(u8 device)
{
if (device >= CONFIG_MAX_ATA_DEVICES)
}
}
-u16
+int
cdrom_boot()
{
// Find out the first cdrom
if (atapi_is_cdrom(device))
break;
- u16 ret = atapi_is_ready(device);
+ int ret = atapi_is_ready(device);
if (ret)
dprintf(1, "ata_is_ready returned %d\n", ret);
// everything is ok, so from now on, the emulation is active
SET_EBDA(cdemu.active, 0x01);
- DEBUGF("cdemu media=%d\n", media);
+ dprintf(6, "cdemu media=%d\n", media);
return 0;
}
#include "cmos.h" // inb_cmos
#include "pic.h" // unmask_pic1
-#define DEBUGF1(fmt, args...) bprintf(0, fmt , ##args)
-#define DEBUGF(fmt, args...)
-
#define BX_FLOPPY_ON_CNT 37 /* 2 seconds */
// New diskette parameter table adding 3 parameters from IBM
static void
floppy_1305(struct bregs *regs, u8 drive)
{
- DEBUGF("floppy f05\n");
+ dprintf(3, "floppy f05\n");
if (check_drive(regs, drive))
return;
static void
floppy_1308(struct bregs *regs, u8 drive)
{
- DEBUGF("floppy f08\n");
+ dprintf(3, "floppy f08\n");
u8 drive_type = inb_cmos(CMOS_FLOPPY_DRIVE_TYPE);
u8 num_floppies = 0;
static void
floppy_1315(struct bregs *regs, u8 drive)
{
- DEBUGF("floppy f15\n");
+ dprintf(6, "floppy f15\n");
if (drive > 1) {
set_fail(regs);
regs->ah = 0; // only 2 drives supported
static void
floppy_1316(struct bregs *regs, u8 drive)
{
- DEBUGF("floppy f16\n");
if (drive > 1) {
floppy_ret(regs, DISK_RET_EPARAM);
return;