int __verify_pattern_fd(int fd, unsigned int size, int direct_read) { int ret; unsigned int rd_size = size; if (direct_read) rd_size = blocksize; ret = pread(fd, read_buf, rd_size, 0); if (ret < 0) { ret = errno; fprintf(stderr, "read error %d: \"%s\"\n", ret, strerror(ret)); return -1; } if (ret != size) { fprintf(stderr, "Short read: wanted %d, got %d\n", size, ret); return -1; } return verify_pattern(size, read_buf); }
int verify_pattern_mmap(int fd, unsigned int size) { int ret; unsigned int mmap_size = page_size; void *region; while (mmap_size < size) mmap_size += page_size; region = mmap(NULL, mmap_size, PROT_READ, MAP_SHARED, fd, 0); if (region == MAP_FAILED) { ret = errno; fprintf(stderr, "mmap (read) error %d: \"%s\"\n", ret, strerror(ret)); return -1; } ret = verify_pattern(size, region); munmap(region, mmap_size); return 0; }
static long ion_test_ioctl(struct file *file, unsigned cmd, unsigned long arg) { int ret; ion_phys_addr_t phys_addr; void *addr; size_t len; unsigned long flags, size; struct msm_ion_test *ion_test = file->private_data; struct ion_test_data *test_data = &ion_test->test_data; switch (cmd) { case IOC_ION_KCLIENT_CREATE: { ret = create_ion_client(ion_test); break; } case IOC_ION_KCLIENT_DESTROY: { free_ion_client(ion_test); ret = 0; break; } case IOC_ION_KALLOC: { if (copy_from_user(test_data, (void __user *)arg, sizeof(struct ion_test_data))) return -EFAULT; ret = alloc_ion_buf(ion_test, test_data); if (ret) pr_info("allocating ion buffer failed\n"); break; } case IOC_ION_KFREE: { free_ion_buf(ion_test); ret = 0; break; } case IOC_ION_KPHYS: { ret = ion_phys(ion_test->ion_client, ion_test->ion_handle, &phys_addr, &len); if (!ret) pr_info("size is 0x%x\n phys addr 0x%x", len, (unsigned int)phys_addr); break; } case IOC_ION_KMAP: { addr = ion_map_kernel(ion_test->ion_client, ion_test->ion_handle); if (IS_ERR_OR_NULL(addr)) { ret = -EIO; pr_info("mapping kernel buffer failed\n"); } else { ret = 0; test_data->vaddr = (unsigned long)addr; } break; } case IOC_ION_KUMAP: { ion_unmap_kernel(ion_test->ion_client, ion_test->ion_handle); ret = 0; break; } case IOC_ION_UIMPORT: { if (copy_from_user(test_data, (void __user *)arg, sizeof(struct ion_test_data))) return -EFAULT; ion_test->ion_handle = ion_import_dma_buf(ion_test->ion_client, test_data->shared_fd); if (IS_ERR_OR_NULL(ion_test->ion_handle)) { ret = -EIO; pr_info("import of user buf failed\n"); } else ret = 0; break; } case IOC_ION_UBUF_FLAGS: { ret = ion_handle_get_flags(ion_test->ion_client, ion_test->ion_handle, &flags); if (ret) pr_info("user flags cannot be retrieved\n"); else if (copy_to_user((void __user *)arg, &flags, sizeof(unsigned long))) ret = -EFAULT; break; } case IOC_ION_UBUF_SIZE: { ret = ion_handle_get_size(ion_test->ion_client, ion_test->ion_handle, &size); if (ret) pr_info("buffer size cannot be retrieved\n"); else if (copy_to_user((void __user *)arg, &size, sizeof(unsigned long))) ret = -EFAULT; break; } case IOC_ION_WRITE_VERIFY: { write_pattern(test_data->vaddr, test_data->size); if (verify_pattern(test_data->vaddr, test_data->size)) { pr_info("verify of mapped buf failed\n"); ret = -EIO; } else ret = 0; break; } case IOC_ION_VERIFY: { if (verify_pattern(test_data->vaddr, test_data->size)) { pr_info("fail in verifying imported buffer\n"); ret = -EIO; } else ret = 0; break; } case IOC_ION_SEC: { ret = msm_ion_secure_heap(ION_CP_MM_HEAP_ID); if (ret) pr_info("unable to secure heap\n"); else pr_info("able to secure heap\n"); break; } case IOC_ION_UNSEC: { ret = msm_ion_unsecure_heap(ION_CP_MM_HEAP_ID); if (ret) pr_info("unable to unsecure heap\n"); else pr_info("able to unsecure heap\n"); break; } default: { pr_info("command not supproted\n"); ret = -EINVAL; } }; return ret; }
int read_dpin_0000( uchar * buf, uint test_start_sector, uint test_sector_length ) { return verify_pattern(buf); }
int read_dpin_0007(uchar * buf, uint test_area_start, uint test_area_length) { return verify_pattern(buf); }