rem: bool device_start_service( ide_device_info *device, int *tag )
add: device_start_service(ide_device_info *device, int *tag)
context: bool device_start_service( ide_device_info *device, int *tag ){	ide_bus_info *bus = device->bus;		FAST_LOG1( bus->log, ev_ide_device_start_service, device->is_device1 );		device->tf.write.command = IDE_CMD_SERVICE;	device->tf.queued.mode = ide_mode_lba;		if( bus->active_device != device ) {		// don't apply any precautions in terms of IRQ		// -> the bus is in accessing state, so IRQs are ignored anyway		if( bus->controller->write_command_block_regs( bus->channel, 			&device->tf, ide_mask_device_head ) != B_OK )			// on error, pretend that this device asks for service			// -> the disappeared controller will be recognized soon ;)			return true;					bus->active_device = device;			// give one clock (400 ns) to take notice		spin( 1 );	}	// here we go...	if( bus->controller->write_command_block_regs( bus->channel, &device->tf, 		ide_mask_command ) != B_OK )		goto err;	// we need to wait for the device as we want to read the tag	if( !ide_wait( device, ide_status_drdy, ide_status_bsy, false, 1000000 ))		return false;		// read tag	if( bus->controller->read_command_block_regs( bus->channel, &device->tf, 		ide_mask_sector_count ) != B_OK )		goto err;			if( device->tf.queued.release ) {		// bus release is the wrong answer to a service request		set_sense( device, SCSIS_KEY_HARDWARE_ERROR, SCSIS_ASC_INTERNAL_FAILURE );		return false;	}		*tag = device->tf.queued.tag;		FAST_LOG2( bus->log, ev_ide_device_start_service2, device->is_device1, *tag );	return true;err:	set_sense( device, SCSIS_KEY_HARDWARE_ERROR, SCSIS_ASC_INTERNAL_FAILURE );	return false;}