Lines Matching +full:udma +full:- +full:p

1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause OR GPL-2.0
9 * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved.
22 * Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
28 * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved.
73 //* P R I V A T E M E T H O D S
87 U32 blocks = (dsm_descriptor_count * sizeof(TRIM_PAIR))/sequence->device->logical_block_size; in sati_unmap_calculate_dsm_blocks()
88 if ((dsm_descriptor_count * sizeof(TRIM_PAIR)) % sequence->device->logical_block_size) in sati_unmap_calculate_dsm_blocks()
99 * - setting the command register
100 * - setting the device head register
101 * - filling in fields in the SATI_TRANSLATOR_SEQUENCE object.
124 // the udma fast path. in sati_unmap_construct()
128 sequence->data_direction = SATI_DATA_DIRECTION_OUT; in sati_unmap_construct()
129 sequence->protocol = SAT_PROTOCOL_UDMA_DATA_OUT; in sati_unmap_construct()
133 sequence->is_translate_response_required = TRUE; in sati_unmap_construct()
156 unmap_process_state = &sequence->command_specific_data.unmap_process_state; in sati_unmap_load_next_descriptor()
159 for(index = unmap_process_state->current_unmap_block_descriptor_index; in sati_unmap_load_next_descriptor()
160 index < unmap_process_state->current_unmap_block_descriptor_index + in sati_unmap_load_next_descriptor()
167 &unmap_block_descriptor[index-unmap_process_state->current_unmap_block_descriptor_index]); in sati_unmap_load_next_descriptor()
171 unmap_process_state->current_lba_count = (unmap_block_descriptor[8] << 24) | in sati_unmap_load_next_descriptor()
175 unmap_process_state->current_lba = ((SATI_LBA)(unmap_block_descriptor[0]) << 56) | in sati_unmap_load_next_descriptor()
183 unmap_process_state->next_lba = 0; in sati_unmap_load_next_descriptor()
186 …unmap_process_state->current_unmap_block_descriptor_index += SATI_UNMAP_SIZEOF_SCSI_UNMAP_BLOCK_DE… in sati_unmap_load_next_descriptor()
209 return MIN(SATI_DSM_MAX_BUFFER_SIZE/sequence->device->logical_block_size, in sati_unmap_get_max_buffer_size_in_blocks()
210 sequence->device->max_lba_range_entry_blocks); in sati_unmap_get_max_buffer_size_in_blocks()
219 * @retval SATI_COMPLETE - The initial processing was completed successfully
220 * @retval SATI_FAILURE_CHECK_RESPONSE_DATA - Failed the initial processing
236 unmap_process_state = &sequence->command_specific_data.unmap_process_state; in sati_unmap_initial_processing()
239 sequence->type = SATI_SEQUENCE_UNMAP; in sati_unmap_initial_processing()
242 if ((sequence->device->capabilities & SATI_DEVICE_CAP_DSM_TRIM_SUPPORT) in sati_unmap_initial_processing()
281 sequence->allocation_length = unmap_length; in sati_unmap_initial_processing()
297 if ((U32)(unmap_length - SATI_UNMAP_SIZEOF_SCSI_UNMAP_PARAMETER_LIST) < descriptor_length) in sati_unmap_initial_processing()
312 unmap_process_state->max_unmap_block_descriptors = in sati_unmap_initial_processing()
320 unmap_process_state->max_lba_range_entries = in sati_unmap_initial_processing()
321 (max_dsm_blocks*sequence->device->logical_block_size)/sizeof(TRIM_PAIR); in sati_unmap_initial_processing()
326 max_dsm_blocks*sequence->device->logical_block_size, in sati_unmap_initial_processing()
327 &(unmap_process_state->virtual_unmap_buffer), in sati_unmap_initial_processing()
328 &(unmap_process_state->physical_unmap_buffer_low), in sati_unmap_initial_processing()
329 &(unmap_process_state->physical_unmap_buffer_high)); in sati_unmap_initial_processing()
332 if (unmap_process_state->virtual_unmap_buffer == NULL) in sati_unmap_initial_processing()
351 &(unmap_process_state->unmap_buffer_sgl_pair)); in sati_unmap_initial_processing()
354 unmap_process_state->current_unmap_block_descriptor_index = in sati_unmap_initial_processing()
360 sequence->state = SATI_SEQUENCE_STATE_INCOMPLETE; in sati_unmap_initial_processing()
385 unmap_process_state = &sequence->command_specific_data.unmap_process_state; in sati_unmap_process()
388 unmap_process_state->current_dsm_descriptor = unmap_process_state->virtual_unmap_buffer; in sati_unmap_process()
392 while ((dsm_descriptor < unmap_process_state->max_lba_range_entries) && in sati_unmap_process()
393 (unmap_process_state->current_lba_count > 0)) { in sati_unmap_process()
395 if (unmap_process_state->current_lba_count > SATI_DSM_MAX_SECTOR_COUNT) { in sati_unmap_process()
400 unmap_process_state->current_lba_count -= SATI_DSM_MAX_SECTOR_COUNT; in sati_unmap_process()
401 unmap_process_state->next_lba = in sati_unmap_process()
402 unmap_process_state->current_lba + SATI_DSM_MAX_SECTOR_COUNT; in sati_unmap_process()
405 dsm_descriptor_lba_count = unmap_process_state->current_lba_count; in sati_unmap_process()
406 unmap_process_state->current_lba_count = 0; in sati_unmap_process()
410 ((PTRIM_PAIR)(unmap_process_state->current_dsm_descriptor))->sector_address = in sati_unmap_process()
411 unmap_process_state->current_lba; in sati_unmap_process()
412 ((PTRIM_PAIR)(unmap_process_state->current_dsm_descriptor))->sector_count = in sati_unmap_process()
416 if (unmap_process_state->current_lba_count == 0) { in sati_unmap_process()
418 --unmap_process_state->max_unmap_block_descriptors; in sati_unmap_process()
419 if (unmap_process_state->max_unmap_block_descriptors > 0) { in sati_unmap_process()
425 unmap_process_state->current_lba = unmap_process_state->next_lba; in sati_unmap_process()
429 ASSERT(unmap_process_state->current_lba <= SATI_DSM_MAX_SECTOR_ADDRESS); in sati_unmap_process()
433 unmap_process_state->current_dsm_descriptor = in sati_unmap_process()
434 (U8 *)(unmap_process_state->current_dsm_descriptor) + sizeof(TRIM_PAIR); in sati_unmap_process()
439 dsm_bytes = dsm_blocks * sequence->device->logical_block_size; in sati_unmap_process()
445 dsm_remainder_bytes = sequence->device->logical_block_size; in sati_unmap_process()
446 dsm_remainder_bytes -= (U32)((POINTER_UINT)unmap_process_state->current_dsm_descriptor & in sati_unmap_process()
447 (sequence->device->logical_block_size-1)); in sati_unmap_process()
450 if (dsm_remainder_bytes != sequence->device->logical_block_size) in sati_unmap_process()
453 … dsm_remainder_bytes += (sequence->device->logical_block_size * (max_dsm_blocks - dsm_blocks)); in sati_unmap_process()
455 // According to ATA-8, if the DSM buffer is not completely filled with in sati_unmap_process()
458 memset((U8 *)unmap_process_state->current_dsm_descriptor, 0, dsm_remainder_bytes); in sati_unmap_process()
463 sati_cb_sge_write(unmap_process_state->unmap_buffer_sgl_pair, in sati_unmap_process()
464 unmap_process_state->physical_unmap_buffer_low, in sati_unmap_process()
465 unmap_process_state->physical_unmap_buffer_high, in sati_unmap_process()
476 if (unmap_process_state->current_lba_count == 0) in sati_unmap_process()
479 sequence->state = SATI_SEQUENCE_STATE_FINAL; in sati_unmap_process()
486 //* P U B L I C M E T H O D S
503 unmap_process_state = &sequence->command_specific_data.unmap_process_state; in sati_unmap_terminate()
505 if (unmap_process_state->virtual_unmap_buffer != NULL) in sati_unmap_terminate()
507 sati_cb_free_dma_buffer(scsi_io, unmap_process_state->virtual_unmap_buffer); in sati_unmap_terminate()
508 unmap_process_state->virtual_unmap_buffer = NULL; in sati_unmap_terminate()
537 unmap_process_state = &sequence->command_specific_data.unmap_process_state; in sati_unmap_translate_command()
540 if ( sequence->state == SATI_SEQUENCE_STATE_INITIAL ) in sati_unmap_translate_command()
577 unmap_process_state = &sequence->command_specific_data.unmap_process_state; in sati_unmap_translate_response()
581 sequence->state = SATI_SEQUENCE_STATE_FINAL; in sati_unmap_translate_response()
595 if (sequence->state != SATI_SEQUENCE_STATE_INCOMPLETE) in sati_unmap_translate_response()