diff options
Diffstat (limited to 'drivers/staging/sep')
-rw-r--r-- | drivers/staging/sep/TODO | 3 | ||||
-rw-r--r-- | drivers/staging/sep/sep_dev.h | 25 | ||||
-rw-r--r-- | drivers/staging/sep/sep_driver.c | 724 | ||||
-rw-r--r-- | drivers/staging/sep/sep_driver_api.h | 86 | ||||
-rw-r--r-- | drivers/staging/sep/sep_driver_config.h | 4 |
5 files changed, 50 insertions, 792 deletions
diff --git a/drivers/staging/sep/TODO b/drivers/staging/sep/TODO index 089c240..8f3b878 100644 --- a/drivers/staging/sep/TODO +++ b/drivers/staging/sep/TODO @@ -1,5 +1,4 @@ Todo's so far (from Alan Cox) - Check whether it can be plugged into any of the kernel crypto API interfaces - Crypto API 'glue' is still not ready to submit -- Clean up unused ioctls - Needs vendor help -- Clean up unused fields in ioctl structures - Needs vendor help +- Clean up un-needed debug prints - Started to work on this diff --git a/drivers/staging/sep/sep_dev.h b/drivers/staging/sep/sep_dev.h index 0ffe68c..696ab0d 100644 --- a/drivers/staging/sep/sep_dev.h +++ b/drivers/staging/sep/sep_dev.h @@ -69,31 +69,6 @@ struct sep_device { size_t shared_size; void *shared_addr; - /* restricted access region (coherent alloc) */ - dma_addr_t rar_bus; - size_t rar_size; - void *rar_addr; - - /* Firmware regions; cache is at rar for Moorestown and - resident is at rar for Medfield */ - dma_addr_t cache_bus; - size_t cache_size; - void *cache_addr; - - dma_addr_t resident_bus; - size_t resident_size; - void *resident_addr; - - /* sep's scratchpad */ - dma_addr_t dcache_bus; - size_t dcache_size; - void *dcache_addr; - - /* Only used on Medfield */ - dma_addr_t extapp_bus; - size_t extapp_size; - void *extapp_addr; - /* start address of the access to the SEP registers from driver */ dma_addr_t reg_physical_addr; dma_addr_t reg_physical_end; diff --git a/drivers/staging/sep/sep_driver.c b/drivers/staging/sep/sep_driver.c index ac5d569..71a5fbc 100644 --- a/drivers/staging/sep/sep_driver.c +++ b/drivers/staging/sep/sep_driver.c @@ -29,7 +29,6 @@ * 2010.09.14 Upgrade to Medfield * */ -#define DEBUG #include <linux/init.h> #include <linux/module.h> #include <linux/miscdevice.h> @@ -78,105 +77,6 @@ static struct sep_device *sep_dev; /** - * sep_load_firmware - copy firmware cache/resident - * @sep: pointer to struct sep_device we are loading - * - * This functions copies the cache and resident from their source - * location into destination shared memory. - */ -static int sep_load_firmware(struct sep_device *sep) -{ - const struct firmware *fw; - char *cache_name = "cache.image.bin"; - char *res_name = "resident.image.bin"; - char *extapp_name = "extapp.image.bin"; - int error ; - unsigned long work1, work2, work3; - - /* Set addresses and load resident */ - sep->resident_bus = sep->rar_bus; - sep->resident_addr = sep->rar_addr; - - error = request_firmware(&fw, res_name, &sep->pdev->dev); - if (error) { - dev_warn(&sep->pdev->dev, "can't request resident fw\n"); - return error; - } - - memcpy(sep->resident_addr, (void *)fw->data, fw->size); - sep->resident_size = fw->size; - release_firmware(fw); - - dev_dbg(&sep->pdev->dev, "resident virtual is %p\n", - sep->resident_addr); - dev_dbg(&sep->pdev->dev, "resident bus is %lx\n", - (unsigned long)sep->resident_bus); - dev_dbg(&sep->pdev->dev, "resident size is %08zx\n", - sep->resident_size); - - /* Set addresses for dcache (no loading needed) */ - work1 = (unsigned long)sep->resident_bus; - work2 = (unsigned long)sep->resident_size; - work3 = (work1 + work2 + (1024 * 4)) & 0xfffff000; - sep->dcache_bus = (dma_addr_t)work3; - - work1 = (unsigned long)sep->resident_addr; - work2 = (unsigned long)sep->resident_size; - work3 = (work1 + work2 + (1024 * 4)) & 0xfffff000; - sep->dcache_addr = (void *)work3; - - sep->dcache_size = 1024 * 128; - - /* Set addresses and load cache */ - sep->cache_bus = sep->dcache_bus + sep->dcache_size; - sep->cache_addr = sep->dcache_addr + sep->dcache_size; - - error = request_firmware(&fw, cache_name, &sep->pdev->dev); - if (error) { - dev_warn(&sep->pdev->dev, "Unable to request cache firmware\n"); - return error; - } - - memcpy(sep->cache_addr, (void *)fw->data, fw->size); - sep->cache_size = fw->size; - release_firmware(fw); - - dev_dbg(&sep->pdev->dev, "cache virtual is %p\n", - sep->cache_addr); - dev_dbg(&sep->pdev->dev, "cache bus is %08lx\n", - (unsigned long)sep->cache_bus); - dev_dbg(&sep->pdev->dev, "cache size is %08zx\n", - sep->cache_size); - - /* Set addresses and load extapp */ - sep->extapp_bus = sep->cache_bus + (1024 * 370); - sep->extapp_addr = sep->cache_addr + (1024 * 370); - - error = request_firmware(&fw, extapp_name, &sep->pdev->dev); - if (error) { - dev_warn(&sep->pdev->dev, "Unable to request extapp firmware\n"); - return error; - } - - memcpy(sep->extapp_addr, (void *)fw->data, fw->size); - sep->extapp_size = fw->size; - release_firmware(fw); - - dev_dbg(&sep->pdev->dev, "extapp virtual is %p\n", - sep->extapp_addr); - dev_dbg(&sep->pdev->dev, "extapp bus is %08llx\n", - (unsigned long long)sep->extapp_bus); - dev_dbg(&sep->pdev->dev, "extapp size is %08zx\n", - sep->extapp_size); - - return error; -} - -MODULE_FIRMWARE("sep/cache.image.bin"); -MODULE_FIRMWARE("sep/resident.image.bin"); -MODULE_FIRMWARE("sep/extapp.image.bin"); - -/** * sep_dump_message - dump the message that is pending * @sep: SEP device */ @@ -218,7 +118,6 @@ static int sep_map_and_alloc_shared_area(struct sep_device *sep) */ static void sep_unmap_and_free_shared_area(struct sep_device *sep) { - dev_dbg(&sep->pdev->dev, "shared area unmap and free\n"); dma_free_coherent(&sep->pdev->dev, sep->shared_size, sep->shared_addr, sep->shared_bus); } @@ -246,7 +145,6 @@ static void *sep_shared_bus_to_virt(struct sep_device *sep, */ static int sep_singleton_open(struct inode *inode_ptr, struct file *file_ptr) { - int error = 0; struct sep_device *sep; /* @@ -257,17 +155,9 @@ static int sep_singleton_open(struct inode *inode_ptr, struct file *file_ptr) file_ptr->private_data = sep; - dev_dbg(&sep->pdev->dev, "Singleton open for pid %d\n", current->pid); - - dev_dbg(&sep->pdev->dev, "calling test and set for singleton 0\n"); - if (test_and_set_bit(0, &sep->singleton_access_flag)) { - error = -EBUSY; - goto end_function; - } - - dev_dbg(&sep->pdev->dev, "sep_singleton_open end\n"); -end_function: - return error; + if (test_and_set_bit(0, &sep->singleton_access_flag)) + return -EBUSY; + return 0; } /** @@ -291,8 +181,6 @@ static int sep_open(struct inode *inode, struct file *filp) sep = sep_dev; filp->private_data = sep; - dev_dbg(&sep->pdev->dev, "Open for pid %d\n", current->pid); - /* Anyone can open; locking takes place at transaction level */ return 0; } @@ -310,8 +198,6 @@ static int sep_singleton_release(struct inode *inode, struct file *filp) { struct sep_device *sep = filp->private_data; - dev_dbg(&sep->pdev->dev, "Singleton release for pid %d\n", - current->pid); clear_bit(0, &sep->singleton_access_flag); return 0; } @@ -333,11 +219,7 @@ static int sep_request_daemon_open(struct inode *inode, struct file *filp) filp->private_data = sep; - dev_dbg(&sep->pdev->dev, "Request daemon open for pid %d\n", - current->pid); - /* There is supposed to be only one request daemon */ - dev_dbg(&sep->pdev->dev, "calling test and set for req_dmon open 0\n"); if (test_and_set_bit(0, &sep->request_daemon_open)) error = -EBUSY; return error; @@ -354,7 +236,7 @@ static int sep_request_daemon_release(struct inode *inode, struct file *filp) { struct sep_device *sep = filp->private_data; - dev_dbg(&sep->pdev->dev, "Reques daemon release for pid %d\n", + dev_dbg(&sep->pdev->dev, "Request daemon release for pid %d\n", current->pid); /* Clear the request_daemon_open flag */ @@ -373,9 +255,6 @@ static int sep_req_daemon_send_reply_command_handler(struct sep_device *sep) { unsigned long lck_flags; - dev_dbg(&sep->pdev->dev, - "sep_req_daemon_send_reply_command_handler start\n"); - sep_dump_message(sep); /* Counters are lockable region */ @@ -393,9 +272,6 @@ static int sep_req_daemon_send_reply_command_handler(struct sep_device *sep) "sep_req_daemon_send_reply send_ct %lx reply_ct %lx\n", sep->send_ct, sep->reply_ct); - dev_dbg(&sep->pdev->dev, - "sep_req_daemon_send_reply_command_handler end\n"); - return 0; } @@ -413,8 +289,6 @@ static int sep_free_dma_table_data_handler(struct sep_device *sep) /* Pointer to the current dma_resource struct */ struct sep_dma_resource *dma; - dev_dbg(&sep->pdev->dev, "sep_free_dma_table_data_handler start\n"); - for (dcb_counter = 0; dcb_counter < sep->nr_dcb_creat; dcb_counter++) { dma = &sep->dma_res_arr[dcb_counter]; @@ -473,7 +347,6 @@ static int sep_free_dma_table_data_handler(struct sep_device *sep) sep->nr_dcb_creat = 0; sep->num_lli_tables_created = 0; - dev_dbg(&sep->pdev->dev, "sep_free_dma_table_data_handler end\n"); return 0; } @@ -492,8 +365,6 @@ static int sep_request_daemon_mmap(struct file *filp, dma_addr_t bus_address; int error = 0; - dev_dbg(&sep->pdev->dev, "daemon mmap start\n"); - if ((vma->vm_end - vma->vm_start) > SEP_DRIVER_MMMAP_AREA_SIZE) { error = -EINVAL; goto end_function; @@ -502,9 +373,6 @@ static int sep_request_daemon_mmap(struct file *filp, /* Get physical address */ bus_address = sep->shared_bus; - dev_dbg(&sep->pdev->dev, "bus_address is %08lx\n", - (unsigned long)bus_address); - if (remap_pfn_range(vma, vma->vm_start, bus_address >> PAGE_SHIFT, vma->vm_end - vma->vm_start, vma->vm_page_prot)) { @@ -514,7 +382,6 @@ static int sep_request_daemon_mmap(struct file *filp, } end_function: - dev_dbg(&sep->pdev->dev, "daemon mmap end\n"); return error; } @@ -535,8 +402,6 @@ static unsigned int sep_request_daemon_poll(struct file *filp, unsigned long lck_flags; struct sep_device *sep = filp->private_data; - dev_dbg(&sep->pdev->dev, "daemon poll: start\n"); - poll_wait(filp, &sep->event_request_daemon, wait); dev_dbg(&sep->pdev->dev, "daemon poll: send_ct is %lx reply ct is %lx\n", @@ -569,7 +434,6 @@ static unsigned int sep_request_daemon_poll(struct file *filp, mask = 0; } end_function: - dev_dbg(&sep->pdev->dev, "daemon poll: exit\n"); return mask; } @@ -592,7 +456,6 @@ static int sep_release(struct inode *inode, struct file *filp) * clear the in use flags, and then wake up sep_event * so that other processes can do transactions */ - dev_dbg(&sep->pdev->dev, "waking up event and mmap_event\n"); if (sep->pid_doing_transaction == current->pid) { clear_bit(SEP_MMAP_LOCK_BIT, &sep->in_use_flags); clear_bit(SEP_SEND_MSG_LOCK_BIT, &sep->in_use_flags); @@ -618,8 +481,6 @@ static int sep_mmap(struct file *filp, struct vm_area_struct *vma) struct sep_device *sep = filp->private_data; unsigned long error = 0; - dev_dbg(&sep->pdev->dev, "mmap start\n"); - /* Set the transaction busy (own the device) */ wait_event_interruptible(sep->event, test_and_set_bit(SEP_MMAP_LOCK_BIT, @@ -661,16 +522,12 @@ static int sep_mmap(struct file *filp, struct vm_area_struct *vma) /* Get bus address */ bus_addr = sep->shared_bus; - dev_dbg(&sep->pdev->dev, - "bus_address is %lx\n", (unsigned long)bus_addr); - if (remap_pfn_range(vma, vma->vm_start, bus_addr >> PAGE_SHIFT, vma->vm_end - vma->vm_start, vma->vm_page_prot)) { dev_warn(&sep->pdev->dev, "remap_page_range failed\n"); error = -EAGAIN; goto end_function_with_error; } - dev_dbg(&sep->pdev->dev, "mmap end\n"); goto end_function; end_function_with_error: @@ -682,7 +539,6 @@ end_function_with_error: /* Raise event for stuck contextes */ - dev_warn(&sep->pdev->dev, "mmap error - waking up event\n"); wake_up(&sep->event); end_function: @@ -706,12 +562,10 @@ static unsigned int sep_poll(struct file *filp, poll_table *wait) struct sep_device *sep = filp->private_data; - dev_dbg(&sep->pdev->dev, "poll: start\n"); - /* Am I the process that owns the transaction? */ mutex_lock(&sep->sep_mutex); if (current->pid != sep->pid_doing_transaction) { - dev_warn(&sep->pdev->dev, "poll; wrong pid\n"); + dev_dbg(&sep->pdev->dev, "poll; wrong pid\n"); mask = POLLERR; mutex_unlock(&sep->sep_mutex); goto end_function; @@ -720,7 +574,6 @@ static unsigned int sep_poll(struct file *filp, poll_table *wait) /* Check if send command or send_reply were activated previously */ if (!test_bit(SEP_SEND_MSG_LOCK_BIT, &sep->in_use_flags)) { - dev_warn(&sep->pdev->dev, "poll; lock bit set\n"); mask = POLLERR; goto end_function; } @@ -777,7 +630,6 @@ static unsigned int sep_poll(struct file *filp, poll_table *wait) } end_function: - dev_dbg(&sep->pdev->dev, "poll: end\n"); return mask; } @@ -806,8 +658,6 @@ static unsigned long sep_set_time(struct sep_device *sep) u32 *time_addr; /* Address of time as seen by the kernel */ - dev_dbg(&sep->pdev->dev, "sep_set_time start\n"); - do_gettimeofday(&time); /* Set value in the SYSTEM MEMORY offset */ @@ -838,16 +688,14 @@ static int sep_set_caller_id_handler(struct sep_device *sep, unsigned long arg) int i; struct caller_id_struct command_args; - dev_dbg(&sep->pdev->dev, "sep_set_caller_id_handler start\n"); - for (i = 0; i < SEP_CALLER_ID_TABLE_NUM_ENTRIES; i++) { if (sep->caller_id_table[i].pid == 0) break; } if (i == SEP_CALLER_ID_TABLE_NUM_ENTRIES) { - dev_warn(&sep->pdev->dev, "no more caller id entries left\n"); - dev_warn(&sep->pdev->dev, "maximum number is %d\n", + dev_dbg(&sep->pdev->dev, "no more caller id entries left\n"); + dev_dbg(&sep->pdev->dev, "maximum number is %d\n", SEP_CALLER_ID_TABLE_NUM_ENTRIES); error = -EUSERS; goto end_function; @@ -883,7 +731,6 @@ static int sep_set_caller_id_handler(struct sep_device *sep, unsigned long arg) hash, command_args.callerIdSizeInBytes)) error = -EFAULT; end_function: - dev_dbg(&sep->pdev->dev, "sep_set_caller_id_handler end\n"); return error; } @@ -899,9 +746,6 @@ static int sep_set_current_caller_id(struct sep_device *sep) int i; u32 *hash_buf_ptr; - dev_dbg(&sep->pdev->dev, "sep_set_current_caller_id start\n"); - dev_dbg(&sep->pdev->dev, "current process is %d\n", current->pid); - /* Zero the previous value */ memset(sep->shared_addr + SEP_CALLER_ID_OFFSET_BYTES, 0, SEP_CALLER_ID_HASH_SIZE_IN_BYTES); @@ -923,7 +767,6 @@ static int sep_set_current_caller_id(struct sep_device *sep) for (i = 0; i < SEP_CALLER_ID_HASH_SIZE_IN_WORDS; i++) hash_buf_ptr[i] = cpu_to_le32(hash_buf_ptr[i]); - dev_dbg(&sep->pdev->dev, "sep_set_current_caller_id end\n"); return 0; } @@ -941,8 +784,6 @@ static int sep_send_command_handler(struct sep_device *sep) unsigned long lck_flags; int error = 0; - dev_dbg(&sep->pdev->dev, "sep_send_command_handler start\n"); - if (test_and_set_bit(SEP_SEND_MSG_LOCK_BIT, &sep->in_use_flags)) { error = -EPROTO; goto end_function; @@ -966,7 +807,6 @@ static int sep_send_command_handler(struct sep_device *sep) sep_write_reg(sep, HW_HOST_HOST_SEP_GPR0_REG_ADDR, 0x2); end_function: - dev_dbg(&sep->pdev->dev, "sep_send_command_handler end\n"); return error; } @@ -990,9 +830,6 @@ static int sep_allocate_data_pool_memory_handler(struct sep_device *sep, /* Holds the allocated buffer address in the system memory pool */ u32 *token_addr; - dev_dbg(&sep->pdev->dev, - "sep_allocate_data_pool_memory_handler start\n"); - if (copy_from_user(&command_args, (void __user *)arg, sizeof(struct alloc_struct))) { error = -EFAULT; @@ -1007,33 +844,23 @@ static int sep_allocate_data_pool_memory_handler(struct sep_device *sep, } dev_dbg(&sep->pdev->dev, - "bytes_allocated: %x\n", (int)sep->data_pool_bytes_allocated); + "data pool bytes_allocated: %x\n", (int)sep->data_pool_bytes_allocated); dev_dbg(&sep->pdev->dev, "offset: %x\n", SEP_DRIVER_DATA_POOL_AREA_OFFSET_IN_BYTES); /* Set the virtual and bus address */ command_args.offset = SEP_DRIVER_DATA_POOL_AREA_OFFSET_IN_BYTES + sep->data_pool_bytes_allocated; - dev_dbg(&sep->pdev->dev, - "command_args.offset: %x\n", command_args.offset); - /* Place in the shared area that is known by the SEP */ token_addr = (u32 *)(sep->shared_addr + SEP_DRIVER_DATA_POOL_ALLOCATION_OFFSET_IN_BYTES + (sep->num_of_data_allocations)*2*sizeof(u32)); - dev_dbg(&sep->pdev->dev, "allocation offset: %x\n", - SEP_DRIVER_DATA_POOL_ALLOCATION_OFFSET_IN_BYTES); - dev_dbg(&sep->pdev->dev, "data pool token addr is %p\n", token_addr); - token_addr[0] = SEP_DATA_POOL_POINTERS_VAL_TOKEN; token_addr[1] = (u32)sep->shared_bus + SEP_DRIVER_DATA_POOL_AREA_OFFSET_IN_BYTES + sep->data_pool_bytes_allocated; - dev_dbg(&sep->pdev->dev, "data pool token [0] %x\n", token_addr[0]); - dev_dbg(&sep->pdev->dev, "data pool token [1] %x\n", token_addr[1]); - /* Write the memory back to the user space */ error = copy_to_user((void *)arg, (void *)&command_args, sizeof(struct alloc_struct)); @@ -1046,13 +873,7 @@ static int sep_allocate_data_pool_memory_handler(struct sep_device *sep, sep->data_pool_bytes_allocated += command_args.num_bytes; sep->num_of_data_allocations += 1; - dev_dbg(&sep->pdev->dev, "data_allocations %d\n", - sep->num_of_data_allocations); - dev_dbg(&sep->pdev->dev, "bytes allocated %d\n", - (int)sep->data_pool_bytes_allocated); - end_function: - dev_dbg(&sep->pdev->dev, "sep_allocate_data_pool_memory_handler end\n"); return error; } @@ -1083,8 +904,7 @@ static int sep_lock_kernel_pages(struct sep_device *sep, /* Map array */ struct sep_dma_map *map_array; - dev_dbg(&sep->pdev->dev, "sep_lock_kernel_pages start\n"); - dev_dbg(&sep->pdev->dev, "kernel_virt_addr is %08lx\n", + dev_dbg(&sep->pdev->dev, "lock kernel pages kernel_virt_addr is %08lx\n", (unsigned long)kernel_virt_addr); dev_dbg(&sep->pdev->dev, "data_size is %x\n", data_size); @@ -1137,7 +957,6 @@ end_function_with_error: kfree(lli_array); end_function: - dev_dbg(&sep->pdev->dev, "sep_lock_kernel_pages end\n"); return error; } @@ -1179,21 +998,17 @@ static int sep_lock_user_pages(struct sep_device *sep, /* Direction of the DMA mapping for locked pages */ enum dma_data_direction dir; - dev_dbg(&sep->pdev->dev, "sep_lock_user_pages start\n"); - /* Set start and end pages and num pages */ end_page = (app_virt_addr + data_size - 1) >> PAGE_SHIFT; start_page = app_virt_addr >> PAGE_SHIFT; num_pages = end_page - start_page + 1; - dev_dbg(&sep->pdev->dev, "app_virt_addr is %x\n", app_virt_addr); + dev_dbg(&sep->pdev->dev, "lock user pages app_virt_addr is %x\n", app_virt_addr); dev_dbg(&sep->pdev->dev, "data_size is %x\n", data_size); dev_dbg(&sep->pdev->dev, "start_page is %x\n", start_page); dev_dbg(&sep->pdev->dev, "end_page is %x\n", end_page); dev_dbg(&sep->pdev->dev, "num_pages is %x\n", num_pages); - dev_dbg(&sep->pdev->dev, "starting page_array malloc\n"); - /* Allocate array of pages structure pointers */ page_array = kmalloc(sizeof(struct page *) * num_pages, GFP_ATOMIC); if (!page_array) { @@ -1216,8 +1031,6 @@ static int sep_lock_user_pages(struct sep_device *sep, goto end_function_with_error2; } - dev_dbg(&sep->pdev->dev, "starting get_user_pages\n"); - /* Convert the application virtual address into a set of physical */ down_read(¤t->mm->mmap_sem); result = get_user_pages(current, current->mm, app_virt_addr, @@ -1324,7 +1137,6 @@ end_function_with_error1: kfree(page_array); end_function: - dev_dbg(&sep->pdev->dev, "sep_lock_user_pages end\n"); return error; } @@ -1395,8 +1207,6 @@ static u32 sep_calculate_lli_table_max_size(struct sep_device *sep, table_data_size -= (SEP_DRIVER_MIN_DATA_SIZE_PER_TABLE - next_table_data_size); - dev_dbg(&sep->pdev->dev, "table data size is %x\n", - table_data_size); end_function: return table_data_size; } @@ -1425,14 +1235,12 @@ static void sep_build_lli_table(struct sep_device *sep, /* Counter of lli array entry */ u32 array_counter; - dev_dbg(&sep->pdev->dev, "sep_build_lli_table start\n"); - /* Init currrent table data size and lli array entry counter */ curr_table_data_size = 0; array_counter = 0; *num_table_entries_ptr = 1; - dev_dbg(&sep->pdev->dev, "table_data_size is %x\n", table_data_size); + dev_dbg(&sep->pdev->dev, "build lli table table_data_size is %x\n", table_data_size); /* Fill the table till table size reaches the needed amount */ while (curr_table_data_size < table_data_size) { @@ -1489,19 +1297,9 @@ static void sep_build_lli_table(struct sep_device *sep, lli_table_ptr->bus_address = 0xffffffff; lli_table_ptr->block_size = 0; - dev_dbg(&sep->pdev->dev, "lli_table_ptr is %p\n", lli_table_ptr); - dev_dbg(&sep->pdev->dev, "lli_table_ptr->bus_address is %08lx\n", - (unsigned long)lli_table_ptr->bus_address); - dev_dbg(&sep->pdev->dev, "lli_table_ptr->block_size is %x\n", - lli_table_ptr->block_size); - /* Set the output parameter */ *num_processed_entries_ptr += array_counter; - dev_dbg(&sep->pdev->dev, "num_processed_entries_ptr is %x\n", - *num_processed_entries_ptr); - - dev_dbg(&sep->pdev->dev, "sep_build_lli_table end\n"); } /** @@ -1631,8 +1429,6 @@ static void sep_prepare_empty_lli_table(struct sep_device *sep, { struct sep_lli_entry *lli_table_ptr; - dev_dbg(&sep->pdev->dev, "sep_prepare_empty_lli_table start\n"); - /* Find the area for new table */ lli_table_ptr = (struct sep_lli_entry *)(sep->shared_addr + @@ -1660,9 +1456,6 @@ static void sep_prepare_empty_lli_table(struct sep_device *sep, /* Update the number of created tables */ sep->num_lli_tables_created++; - - dev_dbg(&sep->pdev->dev, "sep_prepare_empty_lli_table start\n"); - } /** @@ -1709,8 +1502,7 @@ static int sep_prepare_input_dma_table(struct sep_device *sep, /* Next table address */ void *lli_table_alloc_addr = 0; - dev_dbg(&sep->pdev->dev, "sep_prepare_input_dma_table start\n"); - dev_dbg(&sep->pdev->dev, "data_size is %x\n", data_size); + dev_dbg(&sep->pdev->dev, "prepare intput dma table data_size is %x\n", data_size); dev_dbg(&sep->pdev->dev, "block_size is %x\n", block_size); /* Initialize the pages pointers */ @@ -1842,7 +1634,6 @@ end_function_error: kfree(sep->dma_res_arr[sep->nr_dcb_creat].in_page_array); end_function: - dev_dbg(&sep->pdev->dev, "sep_prepare_input_dma_table end\n"); return error; } @@ -1906,8 +1697,6 @@ static int sep_construct_dma_tables_from_lli( /* Number of etnries in the output table */ u32 num_entries_out_table = 0; - dev_dbg(&sep->pdev->dev, "sep_construct_dma_tables_from_lli start\n"); - /* Initiate to point after the message area */ lli_table_alloc_addr = (void *)(sep->shared_addr + SYNCHRONIC_DMA_TABLES_AREA_OFFSET_BYTES + @@ -1960,11 +1749,11 @@ static int sep_construct_dma_tables_from_lli( &last_table_flag); dev_dbg(&sep->pdev->dev, - "in_table_data_size is %x\n", + "construct tables from lli in_table_data_size is %x\n", in_table_data_size); dev_dbg(&sep->pdev->dev, - "out_table_data_size is %x\n", + "construct tables from lli out_table_data_size is %x\n", out_table_data_size); table_data_size = in_table_data_size; @@ -1986,9 +1775,6 @@ static int sep_construct_dma_tables_from_lli( block_size; } - dev_dbg(&sep->pdev->dev, "table_data_size is %x\n", - table_data_size); - /* Construct input lli table */ sep_build_lli_table(sep, &lli_in_array[current_in_entry], in_lli_table_ptr, @@ -2085,7 +1871,6 @@ static int sep_construct_dma_tables_from_lli( *out_num_entries_ptr, *table_data_size_ptr); - dev_dbg(&sep->pdev->dev, "sep_construct_dma_tables_from_lli end\n"); return 0; } @@ -2127,8 +1912,6 @@ static int sep_prepare_input_output_dma_table(struct sep_device *sep, /* Array of pointers of page */ struct sep_lli_entry *lli_out_array; - dev_dbg(&sep->pdev->dev, "sep_prepare_input_output_dma_table start\n"); - if (data_size == 0) { /* Prepare empty table for input and output */ sep_prepare_empty_lli_table(sep, lli_table_in_ptr, @@ -2184,7 +1967,7 @@ static int sep_prepare_input_output_dma_table(struct sep_device *sep, } } - dev_dbg(&sep->pdev->dev, "sep_in_num_pages is %x\n", + dev_dbg(&sep->pdev->dev, "prep input output dma table sep_in_num_pages is %x\n", sep->dma_res_arr[sep->nr_dcb_creat].in_num_pages); dev_dbg(&sep->pdev->dev, "sep_out_num_pages is %x\n", sep->dma_res_arr[sep->nr_dcb_creat].out_num_pages); @@ -2211,13 +1994,6 @@ static int sep_prepare_input_output_dma_table(struct sep_device *sep, update_dcb_counter: /* Update DCB counter */ sep->nr_dcb_creat++; - /* Fall through - free the lli entry arrays */ - dev_dbg(&sep->pdev->dev, "in_num_entries_ptr is %08x\n", - *in_num_entries_ptr); - dev_dbg(&sep->pdev->dev, "out_num_entries_ptr is %08x\n", - *out_num_entries_ptr); - dev_dbg(&sep->pdev->dev, "table_data_size_ptr is %08x\n", - *table_data_size_ptr); goto end_function; @@ -2233,8 +2009,6 @@ end_function_free_lli_in: kfree(lli_in_array); end_function: - dev_dbg(&sep->pdev->dev, - "sep_prepare_input_output_dma_table end result = %d\n", error); return error; @@ -2281,8 +2055,6 @@ static int sep_prepare_input_output_dma_table_in_dcb(struct sep_device *sep, /* Data in the first input/output table */ u32 first_data_size = 0; - dev_dbg(&sep->pdev->dev, "prepare_input_output_dma_table_in_dcb start\n"); - if (sep->nr_dcb_creat == SEP_MAX_NUM_SYNC_DMA_OPS) { /* No more DCBs to allocate */ dev_warn(&sep->pdev->dev, "no more DCBs available\n"); @@ -2306,22 +2078,6 @@ static int sep_prepare_input_output_dma_table_in_dcb(struct sep_device *sep, dcb_table_ptr->out_vr_tail_pt = 0; if (isapplet == true) { - tail_size = data_in_size % block_size; - if (tail_size) { - if (data_in_size < tail_block_size) { - dev_warn(&sep->pdev->dev, "data in size smaller than tail block size\n"); - error = -ENOSPC; - goto end_function; - } - if (tail_block_size) - /* - * Case the tail size should be - * bigger than the real block size - */ - tail_size = tail_block_size + - ((data_in_size - - tail_block_size) % block_size); - } /* Check if there is enough data for DMA operation */ if (data_in_size < SEP_DRIVER_MIN_DATA_SIZE_PER_TABLE) { @@ -2342,7 +2098,7 @@ static int sep_prepare_input_output_dma_table_in_dcb(struct sep_device *sep, /* Set the output user-space address for mem2mem op */ if (app_out_address) dcb_table_ptr->out_vr_tail_pt = - (u32)app_out_address; + (aligned_u64)app_out_address; /* * Update both data length parameters in order to avoid @@ -2351,6 +2107,17 @@ static int sep_prepare_input_output_dma_table_in_dcb(struct sep_device *sep, */ tail_size = 0x0; data_in_size = 0x0; + + } else { + if (!app_out_address) { + tail_size = data_in_size % block_size; + if (!tail_size) { + if (tail_block_size == block_size) + tail_size = block_size; + } + } else { + tail_size = 0; + } } if (tail_size) { if (is_kva == true) { @@ -2372,7 +2139,7 @@ static int sep_prepare_input_output_dma_table_in_dcb(struct sep_device *sep, * according to tail data size */ dcb_table_ptr->out_vr_tail_pt = - (u32)app_out_address + data_in_size + (aligned_u64)app_out_address + data_in_size - tail_size; /* Save the real tail data size */ @@ -2424,68 +2191,10 @@ static int sep_prepare_input_output_dma_table_in_dcb(struct sep_device *sep, dcb_table_ptr->output_mlli_data_size = first_data_size; end_function: - dev_dbg(&sep->pdev->dev, - "sep_prepare_input_output_dma_table_in_dcb end\n"); return error; } - -/** - * sep_create_sync_dma_tables_handler - create sync DMA tables - * @sep: pointer to struct sep_device - * @arg: pointer to struct bld_syn_tab_struct - * - * Handle the request for creation of the DMA tables for the synchronic - * symmetric operations (AES,DES). Note that all bus addresses that are - * passed to the SEP are in 32 bit format; the SEP is a 32 bit device - */ -static int sep_create_sync_dma_tables_handler(struct sep_device *sep, - unsigned long arg) -{ - int error = 0; - - /* Command arguments */ - struct bld_syn_tab_struct command_args; - - dev_dbg(&sep->pdev->dev, - "sep_create_sync_dma_tables_handler start\n"); - - if (copy_from_user(&command_args, (void __user *)arg, - sizeof(struct bld_syn_tab_struct))) { - error = -EFAULT; - goto end_function; - } - - dev_dbg(&sep->pdev->dev, "app_in_address is %08llx\n", - command_args.app_in_address); - dev_dbg(&sep->pdev->dev, "app_out_address is %08llx\n", - command_args.app_out_address); - dev_dbg(&sep->pdev->dev, "data_size is %u\n", - command_args.data_in_size); - dev_dbg(&sep->pdev->dev, "block_size is %u\n", - command_args.block_size); - - /* Validate user parameters */ - if (!command_args.app_in_address) { - error = -EINVAL; - goto end_function; - } - - error = sep_prepare_input_output_dma_table_in_dcb(sep, - (unsigned long)command_args.app_in_address, - (unsigned long)command_args.app_out_address, - command_args.data_in_size, - command_args.block_size, - 0x0, - false, - false); - -end_function: - dev_dbg(&sep->pdev->dev, "sep_create_sync_dma_tables_handler end\n"); - return error; -} - /** * sep_free_dma_tables_and_dcb - free DMA tables and DCBs * @sep: pointer to struct sep_device @@ -2504,8 +2213,6 @@ static int sep_free_dma_tables_and_dcb(struct sep_device *sep, bool isapplet, unsigned long pt_hold; void *tail_pt; - dev_dbg(&sep->pdev->dev, "sep_free_dma_tables_and_dcb start\n"); - if (isapplet == true) { /* Set pointer to first DCB table */ dcb_table_ptr = (struct sep_dcblock *) @@ -2538,7 +2245,6 @@ static int sep_free_dma_tables_and_dcb(struct sep_device *sep, bool isapplet, /* Free the output pages, if any */ sep_free_dma_table_data_handler(sep); - dev_dbg(&sep->pdev->dev, "sep_free_dma_tables_and_dcb end\n"); return error; } @@ -2552,8 +2258,6 @@ static int sep_get_static_pool_addr_handler(struct sep_device *sep) { u32 *static_pool_addr = NULL; - dev_dbg(&sep->pdev->dev, "sep_get_static_pool_addr_handler start\n"); - static_pool_addr = (u32 *)(sep->shared_addr + SEP_DRIVER_SYSTEM_RAR_MEMORY_OFFSET_IN_BYTES); @@ -2561,223 +2265,13 @@ static int sep_get_static_pool_addr_handler(struct sep_device *sep) static_pool_addr[1] = (u32)sep->shared_bus + SEP_DRIVER_STATIC_AREA_OFFSET_IN_BYTES; - dev_dbg(&sep->pdev->dev, "static pool: physical %x\n", + dev_dbg(&sep->pdev->dev, "static pool segment: physical %x\n", (u32)static_pool_addr[1]); - dev_dbg(&sep->pdev->dev, "sep_get_static_pool_addr_handler end\n"); - return 0; } /** - * sep_start_handler - start device - * @sep: pointer to struct sep_device - */ -static int sep_start_handler(struct sep_device *sep) -{ - unsigned long reg_val; - unsigned long error = 0; - - dev_dbg(&sep->pdev->dev, "sep_start_handler start\n"); - - /* Wait in polling for message from SEP */ - do { - reg_val = sep_read_reg(sep, HW_HOST_SEP_HOST_GPR3_REG_ADDR); - } while (!reg_val); - - /* Check the value */ - if (reg_val == 0x1) - /* Fatal error - read error status from GPRO */ - error = sep_read_reg(sep, HW_HOST_SEP_HOST_GPR0_REG_ADDR); - dev_dbg(&sep->pdev->dev, "sep_start_handler end\n"); - return error; -} - -/** - * ep_check_sum_calc - checksum messages - * @data: buffer to checksum - * @length: buffer size - * - * This function performs a checksum for messages that are sent - * to the SEP. - */ -static u32 sep_check_sum_calc(u8 *data, u32 length) -{ - u32 sum = 0; - u16 *Tdata = (u16 *)data; - - while (length > 1) { - /* This is the inner loop */ - sum += *Tdata++; - length -= 2; - } - - /* Add left-over byte, if any */ - if (length > 0) - sum += *(u8 *)Tdata; - - /* Fold 32-bit sum to 16 bits */ - while (sum>>16) - sum = (sum & 0xffff) + (sum >> 16); - - return ~sum & 0xFFFF; -} - -/** - * sep_init_handler - - * @sep: pointer to struct sep_device - * @arg: parameters from user space application - * - * Handles the request for SEP initialization - * Note that this will go away for Medfield once the SCU - * SEP initialization is complete - * Also note that the message to the SEP has components - * from user space as well as components written by the driver - * This is becuase the portions of the message that pertain to - * physical addresses must be set by the driver after the message - * leaves custody of the user space application for security - * reasons. - */ -static int sep_init_handler(struct sep_device *sep, unsigned long arg) -{ - u32 message_buff[14]; - u32 counter; - int error = 0; - u32 reg_val; - dma_addr_t new_base_addr; - unsigned long addr_hold; - struct init_struct command_args; - - dev_dbg(&sep->pdev->dev, "sep_init_handler start\n"); - - /* Make sure that we have not initialized already */ - reg_val = sep_read_reg(sep, HW_HOST_SEP_HOST_GPR3_REG_ADDR); - - if (reg_val != 0x2) { - error = SEP_ALREADY_INITIALIZED_ERR; - dev_warn(&sep->pdev->dev, "init; device already initialized\n"); - goto end_function; - } - - /* Only root can initialize */ - if (!capable(CAP_SYS_ADMIN)) { - error = -EACCES; - goto end_function; - } - - /* Copy in the parameters */ - error = copy_from_user(&command_args, (void __user *)arg, - sizeof(struct init_struct)); - - if (error) { - error = -EFAULT; - goto end_function; - } - - /* Validate parameters */ - if (!command_args.message_addr || !command_args.sep_sram_addr || - command_args.message_size_in_words > 14) { - error = -EINVAL; - goto end_function; - } - - /* Copy in the SEP init message */ - addr_hold = (unsigned long)command_args.message_addr; - error = copy_from_user(message_buff, - (void __user *)addr_hold, - command_args.message_size_in_words*sizeof(u32)); - - if (error) { - error = -EFAULT; - goto end_function; - } - - /* Load resident, cache, and extapp firmware */ - error = sep_load_firmware(sep); - - if (error) { - dev_warn(&sep->pdev->dev, - "init; copy SEP init message failed %x\n", error); - goto end_function; - } - - /* Compute the base address */ - new_base_addr = sep->shared_bus; - - if (sep->resident_bus < new_base_addr) - new_base_addr = sep->resident_bus; - - if (sep->cache_bus < new_base_addr) - new_base_addr = sep->cache_bus; - - if (sep->dcache_bus < new_base_addr) - new_base_addr = sep->dcache_bus; - - /* Put physical addresses in SEP message */ - message_buff[3] = (u32)new_base_addr; - message_buff[4] = (u32)sep->shared_bus; - message_buff[6] = (u32)sep->resident_bus; - message_buff[7] = (u32)sep->cache_bus; - message_buff[8] = (u32)sep->dcache_bus; - - message_buff[command_args.message_size_in_words - 1] = 0x0; - message_buff[command_args.message_size_in_words - 1] = - sep_check_sum_calc((u8 *)message_buff, - command_args.message_size_in_words*sizeof(u32)); - - /* Debug print of message */ - for (counter = 0; counter < command_args.message_size_in_words; - counter++) - dev_dbg(&sep->pdev->dev, "init; SEP message word %d is %x\n", - counter, message_buff[counter]); - - /* Tell the SEP the sram address */ - sep_write_reg(sep, HW_SRAM_ADDR_REG_ADDR, command_args.sep_sram_addr); - - /* Push the message to the SEP */ - for (counter = 0; counter < command_args.message_size_in_words; - counter++) { - sep_write_reg(sep, HW_SRAM_DATA_REG_ADDR, - message_buff[counter]); - sep_wait_sram_write(sep); - } - - /* Signal SEP that message is ready and to init */ - sep_write_reg(sep, HW_HOST_HOST_SEP_GPR0_REG_ADDR, 0x1); - - /* Wait for acknowledge */ - dev_dbg(&sep->pdev->dev, "init; waiting for msg response\n"); - - do { - reg_val = sep_read_reg(sep, HW_HOST_SEP_HOST_GPR3_REG_ADDR); - } while (!(reg_val & 0xFFFFFFFD)); - - if (reg_val == 0x1) { - dev_warn(&sep->pdev->dev, "init; device int failed\n"); - error = sep_read_reg(sep, 0x8060); - dev_warn(&sep->pdev->dev, "init; sw monitor is %x\n", error); - error = sep_read_reg(sep, HW_HOST_SEP_HOST_GPR0_REG_ADDR); - dev_warn(&sep->pdev->dev, "init; error is %x\n", error); - goto end_function; - } - dev_dbg(&sep->pdev->dev, "init; end CC INIT, reg_val is %x\n", reg_val); - - /* Signal SEP to zero the GPR3 */ - sep_write_reg(sep, HW_HOST_HOST_SEP_GPR0_REG_ADDR, 0x10); - - /* Wait for response */ - dev_dbg(&sep->pdev->dev, "init; waiting for zero set response\n"); - - do { - reg_val = sep_read_reg(sep, HW_HOST_SEP_HOST_GPR3_REG_ADDR); - } while (reg_val != 0); - -end_function: - dev_dbg(&sep->pdev->dev, "init is done\n"); - return error; -} - -/** * sep_end_transaction_handler - end transaction * @sep: pointer to struct sep_device * @@ -2785,8 +2279,6 @@ end_function: */ static int sep_end_transaction_handler(struct sep_device *sep) { - dev_dbg(&sep->pdev->dev, "sep_end_transaction_handler start\n"); - /* Clear the data pool pointers Token */ memset((void *)(sep->shared_addr + SEP_DRIVER_DATA_POOL_ALLOCATION_OFFSET_IN_BYTES), @@ -2808,9 +2300,6 @@ static int sep_end_transaction_handler(struct sep_device *sep) /* Raise event for stuck contextes */ wake_up(&sep->event); - dev_dbg(&sep->pdev->dev, "waking up event\n"); - dev_dbg(&sep->pdev->dev, "sep_end_transaction_handler end\n"); - return 0; } @@ -2828,8 +2317,6 @@ static int sep_prepare_dcb_handler(struct sep_device *sep, unsigned long arg) /* Command arguments */ struct build_dcb_struct command_args; - dev_dbg(&sep->pdev->dev, "sep_prepare_dcb_handler start\n"); - /* Get the command arguments */ if (copy_from_user(&command_args, (void __user *)arg, sizeof(struct build_dcb_struct))) { @@ -2837,7 +2324,7 @@ static int sep_prepare_dcb_handler(struct sep_device *sep, unsigned long arg) goto end_function; } - dev_dbg(&sep->pdev->dev, "app_in_address is %08llx\n", + dev_dbg(&sep->pdev->dev, "prep dcb handler app_in_address is %08llx\n", command_args.app_in_address); dev_dbg(&sep->pdev->dev, "app_out_address is %08llx\n", command_args.app_out_address); @@ -2855,7 +2342,6 @@ static int sep_prepare_dcb_handler(struct sep_device *sep, unsigned long arg) command_args.tail_block_size, true, false); end_function: - dev_dbg(&sep->pdev->dev, "sep_prepare_dcb_handler end\n"); return error; } @@ -2869,15 +2355,7 @@ end_function: */ static int sep_free_dcb_handler(struct sep_device *sep) { - int error ; - - dev_dbg(&sep->pdev->dev, "sep_prepare_dcb_handler start\n"); - dev_dbg(&sep->pdev->dev, "num of DCBs %x\n", sep->nr_dcb_creat); - - error = sep_free_dma_tables_and_dcb(sep, false, false); - - dev_dbg(&sep->pdev->dev, "sep_free_dcb_handler end\n"); - return error; + return sep_free_dma_tables_and_dcb(sep, false, false); } /** @@ -2900,8 +2378,6 @@ static int sep_rar_prepare_output_msg_handler(struct sep_device *sep, /* Holds the RAR address in the system memory offset */ u32 *rar_addr; - dev_dbg(&sep->pdev->dev, "sep_rar_prepare_output_msg_handler start\n"); - /* Copy the data */ if (copy_from_user(&command_args, (void __user *)arg, sizeof(command_args))) { @@ -2915,7 +2391,6 @@ static int sep_rar_prepare_output_msg_handler(struct sep_device *sep, rar_buf.info.handle = (u32)command_args.rar_handle; if (rar_handle_to_bus(&rar_buf, 1) != 1) { - dev_dbg(&sep->pdev->dev, "rar_handle_to_bus failure\n"); error = -EFAULT; goto end_function; } @@ -2932,39 +2407,10 @@ static int sep_rar_prepare_output_msg_handler(struct sep_device *sep, rar_addr[1] = rar_bus; end_function: - dev_dbg(&sep->pdev->dev, "sep_rar_prepare_output_msg_handler start\n"); return error; } /** - * sep_realloc_ext_cache_handler - report location of extcache - * @sep: pointer to struct sep_device - * @arg: pointer to user parameters - * - * This function tells the SEP where the extapp is located - */ -static int sep_realloc_ext_cache_handler(struct sep_device *sep, - unsigned long arg) -{ - /* Holds the new ext cache address in the system memory offset */ - u32 *system_addr; - - /* Set value in the SYSTEM MEMORY offset */ - system_addr = (u32 *)(sep->shared_addr + - SEP_DRIVER_SYSTEM_EXT_CACHE_ADDR_OFFSET_IN_BYTES); - - /* Copy the physical address to the System Area for the SEP */ - system_addr[0] = SEP_EXT_CACHE_ADDR_VAL_TOKEN; - dev_dbg(&sep->pdev->dev, "ext cache init; system addr 0 is %x\n", - system_addr[0]); - system_addr[1] = sep->extapp_bus; - dev_dbg(&sep->pdev->dev, "ext cache init; system addr 1 is %x\n", - system_addr[1]); - - return 0; -} - -/** * sep_ioctl - ioctl api * @filp: pointer to struct file * @cmd: command @@ -2977,27 +2423,19 @@ static long sep_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) int error = 0; struct sep_device *sep = filp->private_data; - dev_dbg(&sep->pdev->dev, "ioctl start\n"); - - dev_dbg(&sep->pdev->dev, "cmd is %x\n", cmd); - /* Make sure we own this device */ mutex_lock(&sep->sep_mutex); if ((current->pid != sep->pid_doing_transaction) && (sep->pid_doing_transaction != 0)) { dev_dbg(&sep->pdev->dev, "ioctl pid is not owner\n"); - mutex_unlock(&sep->sep_mutex); error = -EACCES; goto end_function; } mutex_unlock(&sep->sep_mutex); - /* Check that the command is for SEP device */ - if (_IOC_TYPE(cmd) != SEP_IOC_MAGIC_NUMBER) { - error = -ENOTTY; - goto end_function; - } + if (_IOC_TYPE(cmd) != SEP_IOC_MAGIC_NUMBER) + return -ENOTTY; /* Lock to prevent the daemon to interfere with operation */ mutex_lock(&sep->ioctl_mutex); @@ -3011,28 +2449,6 @@ static long sep_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) /* Allocate data pool */ error = sep_allocate_data_pool_memory_handler(sep, arg); break; - case SEP_IOCCREATESYMDMATABLE: - /* Create DMA table for synhronic operation */ - error = sep_create_sync_dma_tables_handler(sep, arg); - break; - case SEP_IOCFREEDMATABLEDATA: - /* Free the pages */ - error = sep_free_dma_table_data_handler(sep); - break; - case SEP_IOCSEPSTART: - /* Start command to SEP */ - if (sep->pdev->revision == 0) /* Only for old chip */ - error = sep_start_handler(sep); - else - error = -EPERM; /* Not permitted on new chip */ - break; - case SEP_IOCSEPINIT: - /* Init command to SEP */ - if (sep->pdev->revision == 0) /* Only for old chip */ - error = sep_init_handler(sep, arg); - else - error = -EPERM; /* Not permitted on new chip */ - break; case SEP_IOCGETSTATICPOOLADDR: /* Inform the SEP the bus address of the static pool */ error = sep_get_static_pool_addr_handler(sep); @@ -3040,12 +2456,6 @@ static long sep_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) case SEP_IOCENDTRANSACTION: error = sep_end_transaction_handler(sep); break; - case SEP_IOCREALLOCEXTCACHE: - if (sep->pdev->revision == 0) /* Only for old chip */ - error = sep_realloc_ext_cache_handler(sep, arg); - else - error = -EPERM; /* Not permitted on new chip */ - break; case SEP_IOCRARPREPAREMESSAGE: error = sep_rar_prepare_output_msg_handler(sep, arg); break; @@ -3056,14 +2466,12 @@ static long sep_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) error = sep_free_dcb_handler(sep); break; default: - dev_dbg(&sep->pdev->dev, "invalid ioctl %x\n", cmd); error = -ENOTTY; break; } - mutex_unlock(&sep->ioctl_mutex); end_function: - dev_dbg(&sep->pdev->dev, "ioctl end\n"); + mutex_unlock(&sep->ioctl_mutex); return error; } @@ -3080,14 +2488,9 @@ static long sep_singleton_ioctl(struct file *filp, u32 cmd, unsigned long arg) long error = 0; struct sep_device *sep = filp->private_data; - dev_dbg(&sep->pdev->dev, "singleton_ioctl start\n"); - dev_dbg(&sep->pdev->dev, "cmd is %x\n", cmd); - /* Check that the command is for the SEP device */ - if (_IOC_TYPE(cmd) != SEP_IOC_MAGIC_NUMBER) { - error = -ENOTTY; - goto end_function; - } + if (_IOC_TYPE(cmd) != SEP_IOC_MAGIC_NUMBER) + return -ENOTTY; /* Make sure we own this device */ mutex_lock(&sep->sep_mutex); @@ -3095,8 +2498,7 @@ static long sep_singleton_ioctl(struct file *filp, u32 cmd, unsigned long arg) (sep->pid_doing_transaction != 0)) { dev_dbg(&sep->pdev->dev, "singleton ioctl pid is not owner\n"); mutex_unlock(&sep->sep_mutex); - error = -EACCES; - goto end_function; + return -EACCES; } mutex_unlock(&sep->sep_mutex); @@ -3111,9 +2513,6 @@ static long sep_singleton_ioctl(struct file *filp, u32 cmd, unsigned long arg) error = sep_ioctl(filp, cmd, arg); break; } - -end_function: - dev_dbg(&sep->pdev->dev, "singleton ioctl end\n"); return error; } @@ -3132,14 +2531,9 @@ static long sep_request_daemon_ioctl(struct file *filp, u32 cmd, long error; struct sep_device *sep = filp->private_data; - dev_dbg(&sep->pdev->dev, "daemon ioctl: start\n"); - dev_dbg(&sep->pdev->dev, "daemon ioctl: cmd is %x\n", cmd); - /* Check that the command is for SEP device */ - if (_IOC_TYPE(cmd) != SEP_IOC_MAGIC_NUMBER) { - error = -ENOTTY; - goto end_function; - } + if (_IOC_TYPE(cmd) != SEP_IOC_MAGIC_NUMBER) + return -ENOTTY; /* Only one process can access ioctl at any given time */ mutex_lock(&sep->ioctl_mutex); @@ -3158,15 +2552,10 @@ static long sep_request_daemon_ioctl(struct file *filp, u32 cmd, error = 0; break; default: - dev_dbg(&sep->pdev->dev, "daemon ioctl: no such IOCTL\n"); error = -ENOTTY; } mutex_unlock(&sep->ioctl_mutex); - -end_function: - dev_dbg(&sep->pdev->dev, "daemon ioctl: end\n"); return error; - } /** @@ -3183,7 +2572,6 @@ static irqreturn_t sep_inthandler(int irq, void *dev_id) /* Read the IRR register to check if this is SEP interrupt */ reg_val = sep_read_reg(sep, HW_HOST_IRR_REG_ADDR); - dev_dbg(&sep->pdev->dev, "SEP Interrupt - reg is %08x\n", reg_val); if (reg_val & (0x1 << 13)) { /* Lock and update the counter of reply messages */ @@ -3233,10 +2621,8 @@ static int sep_reconfig_shared_area(struct sep_device *sep) /* use to limit waiting for SEP */ unsigned long end_time; - dev_dbg(&sep->pdev->dev, "reconfig shared area start\n"); - /* Send the new SHARED MESSAGE AREA to the SEP */ - dev_dbg(&sep->pdev->dev, "sending %08llx to sep\n", + dev_dbg(&sep->pdev->dev, "reconfig shared; sending %08llx to sep\n", (unsigned long long)sep->shared_bus); sep_write_reg(sep, HW_HOST_HOST_SEP_GPR1_REG_ADDR, sep->shared_bus); @@ -3356,7 +2742,6 @@ static int __devinit sep_probe(struct pci_dev *pdev, int error = 0; struct sep_device *sep; - pr_debug("SEP pci probe starting\n"); if (sep_dev != NULL) { dev_warn(&pdev->dev, "only one SEP supported.\n"); return -EBUSY; @@ -3394,7 +2779,7 @@ static int __devinit sep_probe(struct pci_dev *pdev, mutex_init(&sep->sep_mutex); mutex_init(&sep->ioctl_mutex); - dev_dbg(&sep->pdev->dev, "PCI obtained, device being prepared\n"); + dev_dbg(&sep->pdev->dev, "sep probe: PCI obtained, device being prepared\n"); dev_dbg(&sep->pdev->dev, "revision is %d\n", sep->pdev->revision); /* Set up our register area */ @@ -3439,22 +2824,6 @@ static int __devinit sep_probe(struct pci_dev *pdev, goto end_function_error; } - sep->rar_size = FAKE_RAR_SIZE; - sep->rar_addr = dma_alloc_coherent(&sep->pdev->dev, - sep->rar_size, &sep->rar_bus, GFP_KERNEL); - if (sep->rar_addr == NULL) { - dev_warn(&sep->pdev->dev, "can't allocate mfld rar\n"); - error = -ENOMEM; - goto end_function_deallocate_sep_shared_area; - } - - dev_dbg(&sep->pdev->dev, "rar start is %p, phy is %llx," - " size is %zx\n", sep->rar_addr, - (unsigned long long)sep->rar_bus, - sep->rar_size); - - dev_dbg(&sep->pdev->dev, "about to write IMR and ICR REG_ADDR\n"); - /* Clear ICR register */ sep_write_reg(sep, HW_HOST_ICR_REG_ADDR, 0xFFFFFFFF); @@ -3466,15 +2835,14 @@ static int __devinit sep_probe(struct pci_dev *pdev, sep->reply_ct &= 0x3FFFFFFF; sep->send_ct = sep->reply_ct; - dev_dbg(&sep->pdev->dev, "about to call request_irq\n"); /* Get the interrupt line */ error = request_irq(pdev->irq, sep_inthandler, IRQF_SHARED, "sep_driver", sep); if (error) - goto end_function_dealloc_rar; + goto end_function_deallocate_sep_shared_area; - /* The new chip requires ashared area reconfigure */ + /* The new chip requires a shared area reconfigure */ if (sep->pdev->revision == 4) { /* Only for new chip */ error = sep_reconfig_shared_area(sep); if (error) @@ -3490,12 +2858,6 @@ static int __devinit sep_probe(struct pci_dev *pdev, end_function_free_irq: free_irq(pdev->irq, sep); -end_function_dealloc_rar: - if (sep->rar_addr) - dma_free_coherent(&sep->pdev->dev, sep->rar_size, - sep->rar_addr, sep->rar_bus); - goto end_function; - end_function_deallocate_sep_shared_area: /* De-allocate shared area */ sep_unmap_and_free_shared_area(sep); diff --git a/drivers/staging/sep/sep_driver_api.h b/drivers/staging/sep/sep_driver_api.h index fbbfa23..c3aacfc 100644 --- a/drivers/staging/sep/sep_driver_api.h +++ b/drivers/staging/sep/sep_driver_api.h @@ -42,48 +42,6 @@ TYPEDEFS ----------------------------------------------*/ -/* - * Note that several members of these structres are only here - * for campatability with the middleware; they are not used - * by this driver. - * All user space buffer addresses are set to aligned u64 - * in order to ensure compatibility with 64 bit systems - */ - -/* - init command struct; this will go away when SCU does init -*/ -struct init_struct { - /* address that SEP can access for message */ - aligned_u64 message_addr; - - /* message size */ - u32 message_size_in_words; - - /* offset of the init message in the sep sram */ - u32 sep_sram_addr; - - /* -not used- resident size in bytes*/ - u32 unused_resident_size_in_bytes; - - /* -not used- cache size in bytes*/ - u32 unused_cache_size_in_bytes; - - /* -not used- ext cache current address */ - aligned_u64 unused_extcache_addr; - - /* -not used- ext cache size in bytes*/ - u32 unused_extcache_size_in_bytes; -}; - -struct realloc_ext_struct { - /* -not used- current external cache address */ - aligned_u64 unused_ext_cache_addr; - - /* -not used- external cache size in bytes*/ - u32 unused_ext_cache_size_in_bytes; -}; - struct alloc_struct { /* offset from start of shared pool area */ u32 offset; @@ -91,29 +49,6 @@ struct alloc_struct { u32 num_bytes; }; -/* - Note that all app addresses are cast as u32; the sep - middleware sends them as fixed 32 bit words -*/ -struct bld_syn_tab_struct { - /* address value of the data in (user space addr) */ - aligned_u64 app_in_address; - - /* size of data in */ - u32 data_in_size; - - /* address of the data out (user space addr) */ - aligned_u64 app_out_address; - - /* the size of the block of the operation - if needed, - every table will be modulo this parameter */ - u32 block_size; - - /* -not used- distinct user/kernel layout */ - bool isKernelVirtualAddress; - -}; - /* command struct for getting caller id value and address */ struct caller_id_struct { /* pid of the process */ @@ -141,11 +76,11 @@ struct sep_dcblock { /* size of data in the first output mlli */ u32 output_mlli_data_size; /* pointer to the output virtual tail */ - u32 out_vr_tail_pt; + aligned_u64 out_vr_tail_pt; /* size of tail data */ u32 tail_data_size; /* input tail data array */ - u8 tail_data[64]; + u8 tail_data[68]; }; struct sep_caller_id_entry { @@ -253,10 +188,6 @@ struct sep_lli_entry { #define SEP_IOCALLOCDATAPOLL \ _IOW(SEP_IOC_MAGIC_NUMBER, 2, struct alloc_struct) -/* create sym dma lli tables */ -#define SEP_IOCCREATESYMDMATABLE \ - _IOW(SEP_IOC_MAGIC_NUMBER, 5, struct bld_syn_tab_struct) - /* free dynamic data aalocated during table creation */ #define SEP_IOCFREEDMATABLEDATA \ _IO(SEP_IOC_MAGIC_NUMBER, 7) @@ -265,23 +196,10 @@ struct sep_lli_entry { #define SEP_IOCGETSTATICPOOLADDR \ _IO(SEP_IOC_MAGIC_NUMBER, 8) -/* start sep command */ -#define SEP_IOCSEPSTART \ - _IO(SEP_IOC_MAGIC_NUMBER, 12) - -/* init sep command */ -#define SEP_IOCSEPINIT \ - _IOW(SEP_IOC_MAGIC_NUMBER, 13, struct init_struct) - /* end transaction command */ #define SEP_IOCENDTRANSACTION \ _IO(SEP_IOC_MAGIC_NUMBER, 15) -/* reallocate external app; unused structure still needed for - * compatability with middleware */ -#define SEP_IOCREALLOCEXTCACHE \ - _IOW(SEP_IOC_MAGIC_NUMBER, 18, struct realloc_ext_struct) - #define SEP_IOCRARPREPAREMESSAGE \ _IOW(SEP_IOC_MAGIC_NUMBER, 20, struct rar_hndl_to_bus_struct) diff --git a/drivers/staging/sep/sep_driver_config.h b/drivers/staging/sep/sep_driver_config.h index b18625d..d3b9220 100644 --- a/drivers/staging/sep/sep_driver_config.h +++ b/drivers/staging/sep/sep_driver_config.h @@ -76,6 +76,10 @@ held by the proccess (struct file) */ #define SEP_REQUEST_DAEMON_MAPPED 1 #define SEP_REQUEST_DAEMON_UNMAPPED 0 +#define SEP_DEV_NAME "sep_sec_driver" +#define SEP_DEV_SINGLETON "sep_sec_singleton_driver" +#define SEP_DEV_DAEMON "sep_req_daemon_driver" + /*-------------------------------------------------------- SHARED AREA memory total size is 36K it is divided is following: |