#define VIRTIO_EXAMPLE_F_MUST_TELL_HOST 0
#define DEVICE_NAME "virtexample"
+#define DEVICE_MINOR_NUM 70
/* Define to use debugging checksums on transfers */
#undef DEBUG_EXIO
{
struct page *pg;
- logout("pid %d \n", pid_nr(task_pid(current)));
-
/* unaligned */
BUG_ON((ulong)virt & ~PAGE_MASK);
static struct scatterlist *sg_list = NULL;
unsigned int ret, count, i_page, o_page, sg_entries;
- logout("pid %d \n", pid_nr(task_pid(current)));
ret = exdata->w_buf_size;
o_page = (exdata->w_buf_size + PAGE_SIZE-1) >> PAGE_SHIFT;
return ret;
}
-#if 0
-static unsigned int get_data(struct virtio_ex_data *exdata)
-{
- unsigned int ret, count;
-
- ret = exdata->r_buf_size;
-
- /* Chill out until it's done with the buffer. */
- while (!vq->vq_ops->get_buf(vq, &count))
- cpu_relax();
-
- if (sg_list)
- kfree(sg_list);
-
- if (exdata->r_buf) {
- exdata->r_buf_size = 0;
- vfree(exdata->r_buf);
- exdata->r_buf= NULL;
- }
- return ret;
-}
-#endif
-
static void free_buffer(struct virtio_ex_data *exdata)
{
- logout("pid %d \n", pid_nr(task_pid(current)));
-
if (exdata->w_buf) {
exdata->w_buf_size = 0;
vfree(exdata->w_buf);
{
struct virtio_ex_data *exdata = NULL;
- logout("pid %d \n", pid_nr(task_pid(current)));
+ logout("\n");
exdata = kzalloc(sizeof(struct virtio_ex_data), GFP_KERNEL);
if (!exdata)
logout("buffer[%p] size[%d] ", buffer, size);
logout("DATA BEGIN -------------- ");
- for(i=0; i < size; i++)
- {
- logout(" %d = %02x ", i, ptr[i]);
- //if(i!=0 && (i+1)%7 == 0) {
- // printk(KERN_INFO "\n");
- //}
+ for(i=0; i < size; i++){
+ logout(" %d = %02x(%c) ", i, ptr[i], ptr[i]);
}
logout("DATA END -------------- ");
return 0;
}
-static ssize_t virtexample_read(struct file * filp, char * buffer,
- size_t count, loff_t *ppos)
-{
- struct virtio_ex_data *exdata = to_virtio_ex_data(filp);
- ssize_t ret;
-
- logout("pid %d \n", pid_nr(task_pid(current)));
-
- if (exdata->r_buf)
- return -EIO;
-
- //get_data(exdata);
-
- log_dump(exdata->r_buf, exdata->r_buf_size);
-
- if (copy_to_user(buffer, exdata->r_buf, exdata->r_buf_size))
- return -EINVAL;
-
- ret = exdata->r_buf_size;
-
- if (exdata->r_buf) {
- exdata->r_buf_size = 0;
- vfree(exdata->r_buf);
- exdata->r_buf= NULL;
- }
-
- return ret;
-}
-
static ssize_t virtexample_write(struct file *filp, const char *buffer,
size_t count, loff_t * posp)
{
struct virtio_ex_data *exdata = to_virtio_ex_data(filp);
ssize_t ret;
- logout("pid %d \n", pid_nr(task_pid(current)));
+ logout("\n");
/* for now, just allow one buffer to write(). */
if (exdata->w_buf)
put_data(exdata);
- ret = exdata->w_buf_size;
+ log_dump(exdata->r_buf, exdata->r_buf_size);
- if (exdata->w_buf) {
- exdata->w_buf_size = 0;
- vfree(exdata->w_buf);
- exdata->w_buf= NULL;
- }
+ ret = exdata->w_buf_size;
return ret;
}
{
struct virtio_ex_data *exdata = to_virtio_ex_data(file);
- logout("pid %d \n", pid_nr(task_pid(current)));
+ logout("\n");
if (exdata) {
free_buffer(exdata);
static const struct file_operations virtexample_fops = {
.owner = THIS_MODULE,
.open = virtexample_open,
- .read = virtexample_read,
.write = virtexample_write,
.release = virtexample_release,
};
static struct miscdevice virtexample_dev = {
- //MISC_DYNAMIC_MINOR,
- 70,
+ DEVICE_MINOR_NUM,
DEVICE_NAME,
&virtexample_fops
};
{
int ret;
- logout("pid %d \n", pid_nr(task_pid(current)));
+ logout("\n");
/* We expect a single virtqueue. */
vq = virtio_find_single_vq(vdev, NULL, "output");
static void __devexit virtexample_remove(struct virtio_device *vdev)
{
- logout("pid %d \n", pid_nr(task_pid(current)));
+ logout("\n");
vdev->config->reset(vdev);
misc_deregister(&virtexample_dev);
vdev->config->del_vqs(vdev);
static void virtexample_changed(struct virtio_device *vdev)
{
- logout("pid %d \n", pid_nr(task_pid(current)));
+ logout("\n");
//struct virtio_balloon *vb = vdev->priv;
//wake_up(&vb->config_change);
}
static int __init init(void)
{
- logout("pid %d \n", pid_nr(task_pid(current)));
+ logout("\n");
return register_virtio_driver(&virtio_example);
}
static void __exit fini(void)
{
- logout("pid %d \n", pid_nr(task_pid(current)));
+ logout("\n");
unregister_virtio_driver(&virtio_example);
}