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;
}
Ejemplo n.º 2
0
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;
}