Re: Зависает при загрузке на реальном компьютере. Как снять
Posted: Sun Feb 16, 2014 1:48 am
Автор UniATA Alter http://alter.org.ua/ru/soft/win/uni_ata/
Помог вот таким советом по почте посмотрите пожайлуста :
======================================================================================
скорее всего дело в очистке статусов после сброса:
KdPrint2((PRINT_PREFIX "clean IDE intr 0\n"));
SelectDrive(chan, 0);
AtapiStallExecution(10);
GetBaseStatus(chan, statusByte);
if(!(deviceExtension->HwFlags & UNIATA_NO_SLAVE) && (deviceExtension->NumberLuns > 1)) {
KdPrint2((PRINT_PREFIX "clean IDE intr 1\n"));
SelectDrive(chan, 1);
AtapiStallExecution(1);
GetBaseStatus(chan, statusByte);
SelectDrive(chan, 0);
}
statusByte = GetDmaStatus(deviceExtension, c);
KdPrint2((PRINT_PREFIX " DMA status %#x\n", statusByte));
if(statusByte & BM_STATUS_INTR) {
// bullshit, we have DMA interrupt, but had never initiate DMA operation
KdPrint2((PRINT_PREFIX " clear unexpected DMA intr\n"));
AtapiDmaDone(deviceExtension, 0, c, NULL);
GetBaseStatus(chan, statusByte);
}
А если там при инициализации что-то пишется в PCI Cmd Reg, то этого делать
не следует, если желаемые биты и так уже установлены.
--
Best regards,
Alter
====================================================================================
Большое Спасибо Alter
Помог вот таким советом по почте посмотрите пожайлуста :
======================================================================================
скорее всего дело в очистке статусов после сброса:
KdPrint2((PRINT_PREFIX "clean IDE intr 0\n"));
SelectDrive(chan, 0);
AtapiStallExecution(10);
GetBaseStatus(chan, statusByte);
if(!(deviceExtension->HwFlags & UNIATA_NO_SLAVE) && (deviceExtension->NumberLuns > 1)) {
KdPrint2((PRINT_PREFIX "clean IDE intr 1\n"));
SelectDrive(chan, 1);
AtapiStallExecution(1);
GetBaseStatus(chan, statusByte);
SelectDrive(chan, 0);
}
statusByte = GetDmaStatus(deviceExtension, c);
KdPrint2((PRINT_PREFIX " DMA status %#x\n", statusByte));
if(statusByte & BM_STATUS_INTR) {
// bullshit, we have DMA interrupt, but had never initiate DMA operation
KdPrint2((PRINT_PREFIX " clear unexpected DMA intr\n"));
AtapiDmaDone(deviceExtension, 0, c, NULL);
GetBaseStatus(chan, statusByte);
}
А если там при инициализации что-то пишется в PCI Cmd Reg, то этого делать
не следует, если желаемые биты и так уже установлены.
--
Best regards,
Alter
====================================================================================
Большое Спасибо Alter