From: Kevin O'Connor Date: Thu, 13 Mar 2008 00:49:07 +0000 (-0400) Subject: Move irq_enable/disable out of ata.c X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=commitdiff_plain;h=74799df6e977ffb14a2569e40fd19d262e84b0bb;p=seabios.git Move irq_enable/disable out of ata.c Move irq_enable into all callers - only disk.c had irqs disabled anyway. --- diff --git a/src/ata.c b/src/ata.c index 2e44d41..cbd61d9 100644 --- a/src/ata.c +++ b/src/ata.c @@ -205,9 +205,6 @@ ata_transfer(struct ata_pio_command *cmd) u16 iobase2 = GET_EBDA(ata.channels[channel].iobase2); u8 mode = GET_EBDA(ata.devices[biosid].mode); int iswrite = (cmd->command & ~0x40) == ATA_CMD_WRITE_SECTORS; - - irq_enable(); - u8 current = 0; u16 count = cmd->sector_count; u8 status; @@ -256,8 +253,6 @@ ata_transfer(struct ata_pio_command *cmd) return 4; } - irq_disable(); - // Enable interrupts outb(ATA_CB_DC_HD15, iobase2+ATA_CB_DC); return 0; @@ -310,8 +305,6 @@ ata_cmd_packet(u16 biosid, u8 *cmdbuf, u8 cmdlen SET_EBDA(ata.trsfsectors,0); SET_EBDA(ata.trsfbytes,0L); - irq_enable(); - // Send command to device outsw_far(iobase1, MAKE_32_PTR(GET_SEG(SS), (u32)cmdbuf), cmdlen / 2); diff --git a/src/disk.c b/src/disk.c index 9320c3c..0ccbe42 100644 --- a/src/disk.c +++ b/src/disk.c @@ -75,6 +75,8 @@ basic_access(struct bregs *regs, u8 device, u16 command) u16 segment = regs->es; u16 offset = regs->bx; + irq_enable(); + u8 status; u32 lba; if (nph != nlh || npspt != nlspt) { @@ -90,6 +92,8 @@ basic_access(struct bregs *regs, u8 device, u16 command) , MAKE_32_PTR(segment, offset)); } + irq_disable(); + // Set nb of sector transferred regs->al = GET_EBDA(ata.trsfsectors); @@ -146,8 +150,10 @@ emu_access(struct bregs *regs, u8 device, u16 command) u16 segment = regs->es; u16 offset = regs->bx; + irq_enable(); u8 status = cdrom_read(device, lba, count*512 , MAKE_32_PTR(segment, offset), before*512); + irq_disable(); if (status != 0) { BX_INFO("int13_harddisk: function %02x, error %02x !\n",regs->ah,status); regs->al = 0; @@ -190,6 +196,8 @@ extended_access(struct bregs *regs, u8 device, u16 command) return; } + irq_enable(); + u8 status; if (type == ATA_TYPE_ATA) status = ata_cmd_data(device, command, lba, count @@ -198,6 +206,8 @@ extended_access(struct bregs *regs, u8 device, u16 command) status = cdrom_read(device, lba, count*2048 , MAKE_32_PTR(segment, offset), 0); + irq_disable(); + SET_INT13EXT(regs, count, GET_EBDA(ata.trsfsectors)); if (status != 0) {