|
@@ -211,37 +211,43 @@ static int spufs_cntl_mmap(struct file *file, struct vm_area_struct *vma)
|
|
#define spufs_cntl_mmap NULL
|
|
#define spufs_cntl_mmap NULL
|
|
#endif /* !SPUFS_MMAP_4K */
|
|
#endif /* !SPUFS_MMAP_4K */
|
|
|
|
|
|
-static int spufs_cntl_open(struct inode *inode, struct file *file)
|
|
|
|
|
|
+static u64 spufs_cntl_get(void *data)
|
|
{
|
|
{
|
|
- struct spufs_inode_info *i = SPUFS_I(inode);
|
|
|
|
- struct spu_context *ctx = i->i_ctx;
|
|
|
|
|
|
+ struct spu_context *ctx = data;
|
|
|
|
+ u64 val;
|
|
|
|
|
|
- file->private_data = ctx;
|
|
|
|
- file->f_mapping = inode->i_mapping;
|
|
|
|
- ctx->cntl = inode->i_mapping;
|
|
|
|
- return 0;
|
|
|
|
|
|
+ spu_acquire(ctx);
|
|
|
|
+ val = ctx->ops->status_read(ctx);
|
|
|
|
+ spu_release(ctx);
|
|
|
|
+
|
|
|
|
+ return val;
|
|
}
|
|
}
|
|
|
|
|
|
-static ssize_t
|
|
|
|
-spufs_cntl_read(struct file *file, char __user *buffer,
|
|
|
|
- size_t size, loff_t *pos)
|
|
|
|
|
|
+static void spufs_cntl_set(void *data, u64 val)
|
|
{
|
|
{
|
|
- /* FIXME: read from spu status */
|
|
|
|
- return -EINVAL;
|
|
|
|
|
|
+ struct spu_context *ctx = data;
|
|
|
|
+
|
|
|
|
+ spu_acquire(ctx);
|
|
|
|
+ ctx->ops->runcntl_write(ctx, val);
|
|
|
|
+ spu_release(ctx);
|
|
}
|
|
}
|
|
|
|
|
|
-static ssize_t
|
|
|
|
-spufs_cntl_write(struct file *file, const char __user *buffer,
|
|
|
|
- size_t size, loff_t *pos)
|
|
|
|
|
|
+static int spufs_cntl_open(struct inode *inode, struct file *file)
|
|
{
|
|
{
|
|
- /* FIXME: write to runctl bit */
|
|
|
|
- return -EINVAL;
|
|
|
|
|
|
+ struct spufs_inode_info *i = SPUFS_I(inode);
|
|
|
|
+ struct spu_context *ctx = i->i_ctx;
|
|
|
|
+
|
|
|
|
+ file->private_data = ctx;
|
|
|
|
+ file->f_mapping = inode->i_mapping;
|
|
|
|
+ ctx->cntl = inode->i_mapping;
|
|
|
|
+ return simple_attr_open(inode, file, spufs_cntl_get,
|
|
|
|
+ spufs_cntl_set, "0x%08lx");
|
|
}
|
|
}
|
|
|
|
|
|
static struct file_operations spufs_cntl_fops = {
|
|
static struct file_operations spufs_cntl_fops = {
|
|
.open = spufs_cntl_open,
|
|
.open = spufs_cntl_open,
|
|
- .read = spufs_cntl_read,
|
|
|
|
- .write = spufs_cntl_write,
|
|
|
|
|
|
+ .read = simple_attr_read,
|
|
|
|
+ .write = simple_attr_write,
|
|
.mmap = spufs_cntl_mmap,
|
|
.mmap = spufs_cntl_mmap,
|
|
};
|
|
};
|
|
|
|
|