int ata_check_data_consistency(ATA_Device_t *ata_dev) { int error; unsigned char *mbr_buf = (void *)ata_dev->ata_buf; cf_special_flag = 0; read_status_count = 3000; error = ata_read_data_pio(0, ATA_DRQ_BLK_LENGTH_BYTE, mbr_buf); if(error) return error; if((mbr_buf[510] != 0x55) || (mbr_buf[511] != 0xAA)) { cf_special_flag = 1; //read_status_count = 3000; error = ata_read_data_pio(0, ATA_DRQ_BLK_LENGTH_BYTE, mbr_buf); if(error) return error; } if((mbr_buf[510] != 0x55) || (mbr_buf[511] != 0xAA)) return ATA_ERROR_HARDWARE_FAILURE; return ATA_NO_ERROR; }
int cf_read_data(unsigned long lba, unsigned long byte_cnt, unsigned char * data_buf) { int error; cf_atapi_enable(); ata_dev->current_dev = ata_cf_info->dev_no; ata_dev->current_addr_mode = ata_cf_info->addr_mode; error = ata_read_data_pio(lba, byte_cnt, data_buf); if(error) { #ifdef ATA_DEBUG Debug_Printf("#%s occured in cf_read_data()!\n", ata_error_to_string(error)); #endif return error; } return ATA_NO_ERROR; }