static int baseinfo_proc_show(struct seq_file *m, void *v) { int res; MV_SHM_BaseInfo_t baseinfo; res = shm_device_get_baseinfo(shm_device, &baseinfo); if (res != 0) { shm_error("shm_device_get_baseinfo failed. (%d)\n", res); return 0; } seq_printf(m, "cache device base information:\n" "%20s : %10u Bytes\n" "%20s : %10u Bytes\n" "------------ physical address:0x%08X\n", "memory size", baseinfo.m_size, "threshold", baseinfo.m_threshold, baseinfo.m_base_physaddr); res = shm_device_get_baseinfo(shm_device_noncache, &baseinfo); if (res != 0) { shm_error("shm_device_get_baseinfo failed. (%d)\n", res); return 0; } seq_printf(m, "non-cache device base information:\n" "%20s : %10u Bytes\n" "%20s : %10u Bytes\n" "------------ physical address:0x%08X\n", "memory size", baseinfo.m_size, "threshold", baseinfo.m_threshold, baseinfo.m_base_physaddr); return 0; }
static long shm_driver_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) { int res = 0; shm_driver_operation_t op; shm_device_t *shm_dev; MV_SHM_MemInfo_t meminfo; MV_SHM_BaseInfo_t baseinfo; struct shm_device_priv_data *priv_data = (struct shm_device_priv_data*)filp->private_data; if (NULL == priv_data) { shm_error("shm_driver_ioctl NULL private data\n"); return -ENOTTY; } shm_dev = (shm_device_t*)priv_data->m_device; if (NULL == shm_dev) { shm_error("shm_driver_ioctl NULL shm device\n"); return -ENOTTY; } shm_debug("shm_driver_ioctl cmd = 0x%08x\n, base:0x%08X size:0x%08X\n", cmd, shm_dev->m_base, shm_dev->m_size); switch (cmd) { case SHM_DEVICE_CMD_GET_MEMINFO: { res = shm_device_get_meminfo(shm_dev, &meminfo); if (res == 0) res = copy_to_user((void __user *)arg, &meminfo, sizeof(meminfo)); break; } case SHM_DEVICE_CMD_GET_DEVINFO: { res = shm_device_get_baseinfo(shm_dev, &baseinfo); if (res == 0) res = copy_to_user((void __user *)arg, &baseinfo, sizeof(baseinfo)); break; } case SHM_DEVICE_CMD_ALLOCATE: { res = copy_from_user(&op, (int __user *)arg, sizeof(op)); if (res != 0) break; op.m_param1 = shm_device_allocate(shm_dev, op.m_param1, op.m_param2); res = copy_to_user((void __user *)arg, &op, sizeof(op)); break; } case SHM_DEVICE_CMD_FREE: { res = copy_from_user(&op, (int __user *)arg, sizeof(op)); if (res != 0) break; op.m_param1 = shm_device_free(shm_dev, op.m_param1); res = copy_to_user((void __user *)arg, &op, sizeof(op)); break; } case SHM_DEVICE_CMD_INVALIDATE: case SHM_DEVICE_CMD_CLEAN: case SHM_DEVICE_CMD_CLEANANDINVALIDATE: { res = copy_from_user(&op, (int __user *)arg, sizeof(op)); if (res == 0) { res = shm_device_cache(shm_dev, cmd, op); } break; } default: res = -ENOTTY; } shm_debug("shm_driver_ioctl res = %d\n", res); return res; }
static int shm_driver_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg) { shm_driver_operation_t op; int res = 0; shm_debug("shm_driver_ioctl cmd = 0x%08x\n", cmd); switch(cmd) { case SHM_DEVICE_CMD_GET_MEMINFO: { MV_SHM_MemInfo_t meminfo; res = shm_device_get_meminfo(shm_device, &meminfo); if (res == 0) res = copy_to_user((void __user *)arg, &meminfo, sizeof(meminfo)); break; } case SHM_DEVICE_CMD_GET_BASEINFO: { MV_SHM_BaseInfo_t baseinfo; res = shm_device_get_baseinfo(shm_device, &baseinfo); if (res == 0) res = copy_to_user((void __user *)arg, &baseinfo, sizeof(baseinfo)); break; } case SHM_DEVICE_CMD_ALLOCATE: res = copy_from_user(&op, (int __user *)arg, sizeof(op)); if (res != 0) break; op.m_param1 = shm_device_allocate(shm_device, op.m_param1, op.m_param2); res = copy_to_user((void __user *)arg, &op, sizeof(op)); break; case SHM_DEVICE_CMD_FREE: res = copy_from_user(&op, (int __user *)arg, sizeof(op)); if (res != 0) break; res = shm_device_free(shm_device, op.m_param1); break; case SHM_DEVICE_CMD_INVALIDATE: res = copy_from_user(&op, (int __user *)arg, sizeof(op)); if ( res == 0) res = shm_device_cache_invalidate((void *)op.m_param1, op.m_param2); break; case SHM_DEVICE_CMD_CLEAN: res = copy_from_user(&op, (int __user *)arg, sizeof(op)); if ( res == 0) res = shm_device_cache_clean((void *)op.m_param1, op.m_param2); break; case SHM_DEVICE_CMD_CLEANANDINVALIDATE: res = copy_from_user(&op, (int __user *)arg, sizeof(op)); if ( res == 0) res = shm_device_cache_clean_and_invalidate((void *)op.m_param1, op.m_param2); break; default: res = -ENOTTY; } shm_debug("shm_driver_ioctl res = %d\n", res); return res; }