2 * Copyright (C) 2011 Google, Inc.
3 * Copyright (C) 2012 Intel, Inc.
4 * Copyright (C) 2013 Intel, Inc.
6 * This software is licensed under the terms of the GNU General Public
7 * License version 2, as published by the Free Software Foundation, and
8 * may be copied, distributed, and modified under those terms.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
17 /* This source file contains the implementation of a special device driver
18 * that intends to provide a *very* fast communication channel between the
19 * guest system and the QEMU emulator.
21 * Usage from the guest is simply the following (error handling simplified):
23 * int fd = open("/dev/qemu_pipe",O_RDWR);
24 * .... write() or read() through the pipe.
26 * This driver doesn't deal with the exact protocol used during the session.
27 * It is intended to be as simple as something like:
29 * // do this _just_ after opening the fd to connect to a specific
30 * // emulator service.
31 * const char* msg = "<pipename>";
32 * if (write(fd, msg, strlen(msg)+1) < 0) {
33 * ... could not connect to <pipename> service
37 * // after this, simply read() and write() to communicate with the
38 * // service. Exact protocol details left as an exercise to the reader.
40 * This driver is very fast because it doesn't copy any data through
41 * intermediate buffers, since the emulator is capable of translating
42 * guest user addresses into host ones.
44 * Note that we must however ensure that each user page involved in the
45 * exchange is properly mapped during a transfer.
48 #include <linux/module.h>
49 #include <linux/interrupt.h>
50 #include <linux/kernel.h>
51 #include <linux/spinlock.h>
52 #include <linux/miscdevice.h>
53 #include <linux/platform_device.h>
54 #include <linux/poll.h>
55 #include <linux/sched.h>
56 #include <linux/bitops.h>
57 #include <linux/slab.h>
61 * IMPORTANT: The following constants must match the ones used and defined
62 * in external/qemu/hw/goldfish_pipe.c in the Android source tree.
65 /* pipe device registers */
66 #define PIPE_REG_COMMAND 0x00 /* write: value = command */
67 #define PIPE_REG_STATUS 0x04 /* read */
68 #define PIPE_REG_CHANNEL 0x08 /* read/write: channel id */
69 #define PIPE_REG_SIZE 0x0c /* read/write: buffer size */
70 #define PIPE_REG_ADDRESS 0x10 /* write: physical address */
71 #define PIPE_REG_WAKES 0x14 /* read: wake flags */
72 #define PIPE_REG_PARAMS_ADDR_LOW 0x18 /* read/write: batch data address */
73 #define PIPE_REG_PARAMS_ADDR_HIGH 0x1c /* read/write: batch data address */
74 #define PIPE_REG_ACCESS_PARAMS 0x20 /* write: batch access */
76 /* list of commands for PIPE_REG_COMMAND */
77 #define CMD_OPEN 1 /* open new channel */
78 #define CMD_CLOSE 2 /* close channel (from guest) */
79 #define CMD_POLL 3 /* poll read/write status */
81 /* List of bitflags returned in status of CMD_POLL command */
82 #define PIPE_POLL_IN (1 << 0)
83 #define PIPE_POLL_OUT (1 << 1)
84 #define PIPE_POLL_HUP (1 << 2)
86 /* The following commands are related to write operations */
87 #define CMD_WRITE_BUFFER 4 /* send a user buffer to the emulator */
88 #define CMD_WAKE_ON_WRITE 5 /* tell the emulator to wake us when writing
91 /* The following commands are related to read operations, they must be
92 * listed in the same order than the corresponding write ones, since we
93 * will use (CMD_READ_BUFFER - CMD_WRITE_BUFFER) as a special offset
94 * in goldfish_pipe_read_write() below.
96 #define CMD_READ_BUFFER 6 /* receive a user buffer from the emulator */
97 #define CMD_WAKE_ON_READ 7 /* tell the emulator to wake us when reading
100 /* Possible status values used to signal errors - see goldfish_pipe_error_convert */
101 #define PIPE_ERROR_INVAL -1
102 #define PIPE_ERROR_AGAIN -2
103 #define PIPE_ERROR_NOMEM -3
104 #define PIPE_ERROR_IO -4
106 /* Bit-flags used to signal events from the emulator */
107 #define PIPE_WAKE_CLOSED (1 << 0) /* emulator closed pipe */
108 #define PIPE_WAKE_READ (1 << 1) /* pipe can now be read from */
109 #define PIPE_WAKE_WRITE (1 << 2) /* pipe can now be written to */
111 struct access_params
{
117 /* reserved for future extension */
121 /* The global driver data. Holds a reference to the i/o page used to
122 * communicate with the emulator, and a wake queue for blocked tasks
123 * waiting to be awoken.
125 struct goldfish_pipe_dev
{
127 unsigned char __iomem
*base
;
128 struct access_params
*aps
;
132 static struct goldfish_pipe_dev pipe_dev
[1];
134 /* This data type models a given pipe instance */
135 struct goldfish_pipe
{
136 struct goldfish_pipe_dev
*dev
;
139 wait_queue_head_t wake_queue
;
143 /* Bit flags for the 'flags' field */
145 BIT_CLOSED_ON_HOST
= 0, /* pipe closed by host */
146 BIT_WAKE_ON_WRITE
= 1, /* want to be woken on writes */
147 BIT_WAKE_ON_READ
= 2, /* want to be woken on reads */
151 static u32
goldfish_cmd_status(struct goldfish_pipe
*pipe
, u32 cmd
)
155 struct goldfish_pipe_dev
*dev
= pipe
->dev
;
157 spin_lock_irqsave(&dev
->lock
, flags
);
158 writel((u32
)pipe
, dev
->base
+ PIPE_REG_CHANNEL
);
159 writel(cmd
, dev
->base
+ PIPE_REG_COMMAND
);
160 status
= readl(dev
->base
+ PIPE_REG_STATUS
);
161 spin_unlock_irqrestore(&dev
->lock
, flags
);
165 static void goldfish_cmd(struct goldfish_pipe
*pipe
, u32 cmd
)
168 struct goldfish_pipe_dev
*dev
= pipe
->dev
;
170 spin_lock_irqsave(&dev
->lock
, flags
);
171 writel((u32
)pipe
, dev
->base
+ PIPE_REG_CHANNEL
);
172 writel(cmd
, dev
->base
+ PIPE_REG_COMMAND
);
173 spin_unlock_irqrestore(&dev
->lock
, flags
);
176 /* This function converts an error code returned by the emulator through
177 * the PIPE_REG_STATUS i/o register into a valid negative errno value.
179 static int goldfish_pipe_error_convert(int status
)
182 case PIPE_ERROR_AGAIN
:
184 case PIPE_ERROR_NOMEM
:
194 * Notice: QEMU will return 0 for un-known register access, indicating
195 * param_acess is supported or not
197 static int valid_batchbuffer_addr(struct goldfish_pipe_dev
*dev
,
198 struct access_params
*aps
)
202 aph
= readl(dev
->base
+ PIPE_REG_PARAMS_ADDR_HIGH
);
203 apl
= readl(dev
->base
+ PIPE_REG_PARAMS_ADDR_LOW
);
205 paddr
= ((u64
)aph
<< 32) | apl
;
206 if (paddr
!= (__pa(aps
)))
212 static int setup_access_params_addr(struct platform_device
*pdev
,
213 struct goldfish_pipe_dev
*dev
)
216 struct access_params
*aps
;
218 aps
= devm_kzalloc(&pdev
->dev
, sizeof(struct access_params
), GFP_KERNEL
);
224 writel((u32
)(paddr
>> 32), dev
->base
+ PIPE_REG_PARAMS_ADDR_HIGH
);
225 writel((u32
)paddr
, dev
->base
+ PIPE_REG_PARAMS_ADDR_LOW
);
227 if (valid_batchbuffer_addr(dev
, aps
)) {
234 /* A value that will not be set by qemu emulator */
235 #define INITIAL_BATCH_RESULT (0xdeadbeaf)
236 static int access_with_param(struct goldfish_pipe_dev
*dev
, const int cmd
,
237 unsigned long address
, unsigned long avail
,
238 struct goldfish_pipe
*pipe
, int *status
)
240 struct access_params
*aps
= dev
->aps
;
245 aps
->result
= INITIAL_BATCH_RESULT
;
246 aps
->channel
= (unsigned long)pipe
;
248 aps
->address
= address
;
250 writel(cmd
, dev
->base
+ PIPE_REG_ACCESS_PARAMS
);
252 * If the aps->result has not changed, that means
253 * that the batch command failed
255 if (aps
->result
== INITIAL_BATCH_RESULT
)
257 *status
= aps
->result
;
261 /* This function is used for both reading from and writing to a given
264 static ssize_t
goldfish_pipe_read_write(struct file
*filp
, char __user
*buffer
,
265 size_t bufflen
, int is_write
)
267 unsigned long irq_flags
;
268 struct goldfish_pipe
*pipe
= filp
->private_data
;
269 struct goldfish_pipe_dev
*dev
= pipe
->dev
;
270 const int cmd_offset
= is_write
? 0
271 : (CMD_READ_BUFFER
- CMD_WRITE_BUFFER
);
272 unsigned long address
, address_end
;
275 /* If the emulator already closed the pipe, no need to go further */
276 if (test_bit(BIT_CLOSED_ON_HOST
, &pipe
->flags
))
279 /* Null reads or writes succeeds */
280 if (unlikely(bufflen
) == 0)
283 /* Check the buffer range for access */
284 if (!access_ok(is_write
? VERIFY_WRITE
: VERIFY_READ
,
288 /* Serialize access to the pipe */
289 if (mutex_lock_interruptible(&pipe
->lock
))
292 address
= (unsigned long)(void *)buffer
;
293 address_end
= address
+ bufflen
;
295 while (address
< address_end
) {
296 unsigned long page_end
= (address
& PAGE_MASK
) + PAGE_SIZE
;
297 unsigned long next
= page_end
< address_end
? page_end
299 unsigned long avail
= next
- address
;
302 /* Ensure that the corresponding page is properly mapped */
303 /* FIXME: this isn't safe or sufficient - use get_user_pages */
306 /* Ensure that the page is mapped and readable */
307 if (__get_user(c
, (char __user
*)address
)) {
313 /* Ensure that the page is mapped and writable */
314 if (__put_user(0, (char __user
*)address
)) {
321 /* Now, try to transfer the bytes in the current page */
322 spin_lock_irqsave(&dev
->lock
, irq_flags
);
323 if (access_with_param(dev
, CMD_WRITE_BUFFER
+ cmd_offset
,
324 address
, avail
, pipe
, &status
)) {
325 writel((u32
)pipe
, dev
->base
+ PIPE_REG_CHANNEL
);
326 writel(avail
, dev
->base
+ PIPE_REG_SIZE
);
327 writel(address
, dev
->base
+ PIPE_REG_ADDRESS
);
328 writel(CMD_WRITE_BUFFER
+ cmd_offset
,
329 dev
->base
+ PIPE_REG_COMMAND
);
330 status
= readl(dev
->base
+ PIPE_REG_STATUS
);
332 spin_unlock_irqrestore(&dev
->lock
, irq_flags
);
334 if (status
> 0) { /* Correct transfer */
340 if (status
== 0) /* EOF */
343 /* An error occured. If we already transfered stuff, just
344 * return with its count. We expect the next call to return
349 /* If the error is not PIPE_ERROR_AGAIN, or if we are not in
350 * non-blocking mode, just return the error code.
352 if (status
!= PIPE_ERROR_AGAIN
||
353 (filp
->f_flags
& O_NONBLOCK
) != 0) {
354 ret
= goldfish_pipe_error_convert(status
);
358 /* We will have to wait until more data/space is available.
359 * First, mark the pipe as waiting for a specific wake signal.
361 wakeBit
= is_write
? BIT_WAKE_ON_WRITE
: BIT_WAKE_ON_READ
;
362 set_bit(wakeBit
, &pipe
->flags
);
364 /* Tell the emulator we're going to wait for a wake event */
365 goldfish_cmd(pipe
, CMD_WAKE_ON_WRITE
+ cmd_offset
);
367 /* Unlock the pipe, then wait for the wake signal */
368 mutex_unlock(&pipe
->lock
);
370 while (test_bit(wakeBit
, &pipe
->flags
)) {
371 if (wait_event_interruptible(
373 !test_bit(wakeBit
, &pipe
->flags
)))
376 if (test_bit(BIT_CLOSED_ON_HOST
, &pipe
->flags
))
380 /* Try to re-acquire the lock */
381 if (mutex_lock_interruptible(&pipe
->lock
))
384 /* Try the transfer again */
387 mutex_unlock(&pipe
->lock
);
391 static ssize_t
goldfish_pipe_read(struct file
*filp
, char __user
*buffer
,
392 size_t bufflen
, loff_t
*ppos
)
394 return goldfish_pipe_read_write(filp
, buffer
, bufflen
, 0);
397 static ssize_t
goldfish_pipe_write(struct file
*filp
,
398 const char __user
*buffer
, size_t bufflen
,
401 return goldfish_pipe_read_write(filp
, (char __user
*)buffer
,
406 static unsigned int goldfish_pipe_poll(struct file
*filp
, poll_table
*wait
)
408 struct goldfish_pipe
*pipe
= filp
->private_data
;
409 unsigned int mask
= 0;
412 mutex_lock(&pipe
->lock
);
414 poll_wait(filp
, &pipe
->wake_queue
, wait
);
416 status
= goldfish_cmd_status(pipe
, CMD_POLL
);
418 mutex_unlock(&pipe
->lock
);
420 if (status
& PIPE_POLL_IN
)
421 mask
|= POLLIN
| POLLRDNORM
;
423 if (status
& PIPE_POLL_OUT
)
424 mask
|= POLLOUT
| POLLWRNORM
;
426 if (status
& PIPE_POLL_HUP
)
429 if (test_bit(BIT_CLOSED_ON_HOST
, &pipe
->flags
))
435 static irqreturn_t
goldfish_pipe_interrupt(int irq
, void *dev_id
)
437 struct goldfish_pipe_dev
*dev
= dev_id
;
438 unsigned long irq_flags
;
441 /* We're going to read from the emulator a list of (channel,flags)
442 * pairs corresponding to the wake events that occured on each
443 * blocked pipe (i.e. channel).
445 spin_lock_irqsave(&dev
->lock
, irq_flags
);
447 /* First read the channel, 0 means the end of the list */
448 struct goldfish_pipe
*pipe
;
450 unsigned long channel
= readl(dev
->base
+ PIPE_REG_CHANNEL
);
455 /* Convert channel to struct pipe pointer + read wake flags */
456 wakes
= readl(dev
->base
+ PIPE_REG_WAKES
);
457 pipe
= (struct goldfish_pipe
*)(ptrdiff_t)channel
;
459 /* Did the emulator just closed a pipe? */
460 if (wakes
& PIPE_WAKE_CLOSED
) {
461 set_bit(BIT_CLOSED_ON_HOST
, &pipe
->flags
);
462 wakes
|= PIPE_WAKE_READ
| PIPE_WAKE_WRITE
;
464 if (wakes
& PIPE_WAKE_READ
)
465 clear_bit(BIT_WAKE_ON_READ
, &pipe
->flags
);
466 if (wakes
& PIPE_WAKE_WRITE
)
467 clear_bit(BIT_WAKE_ON_WRITE
, &pipe
->flags
);
469 wake_up_interruptible(&pipe
->wake_queue
);
472 spin_unlock_irqrestore(&dev
->lock
, irq_flags
);
474 return (count
== 0) ? IRQ_NONE
: IRQ_HANDLED
;
478 * goldfish_pipe_open - open a channel to the AVD
479 * @inode: inode of device
480 * @file: file struct of opener
482 * Create a new pipe link between the emulator and the use application.
483 * Each new request produces a new pipe.
485 * Note: we use the pipe ID as a mux. All goldfish emulations are 32bit
486 * right now so this is fine. A move to 64bit will need this addressing
488 static int goldfish_pipe_open(struct inode
*inode
, struct file
*file
)
490 struct goldfish_pipe
*pipe
;
491 struct goldfish_pipe_dev
*dev
= pipe_dev
;
494 /* Allocate new pipe kernel object */
495 pipe
= kzalloc(sizeof(*pipe
), GFP_KERNEL
);
500 mutex_init(&pipe
->lock
);
501 init_waitqueue_head(&pipe
->wake_queue
);
504 * Now, tell the emulator we're opening a new pipe. We use the
505 * pipe object's address as the channel identifier for simplicity.
508 status
= goldfish_cmd_status(pipe
, CMD_OPEN
);
514 /* All is done, save the pipe into the file's private data field */
515 file
->private_data
= pipe
;
519 static int goldfish_pipe_release(struct inode
*inode
, struct file
*filp
)
521 struct goldfish_pipe
*pipe
= filp
->private_data
;
523 /* The guest is closing the channel, so tell the emulator right now */
524 goldfish_cmd(pipe
, CMD_CLOSE
);
526 filp
->private_data
= NULL
;
530 static const struct file_operations goldfish_pipe_fops
= {
531 .owner
= THIS_MODULE
,
532 .read
= goldfish_pipe_read
,
533 .write
= goldfish_pipe_write
,
534 .poll
= goldfish_pipe_poll
,
535 .open
= goldfish_pipe_open
,
536 .release
= goldfish_pipe_release
,
539 static struct miscdevice goldfish_pipe_device
= {
540 .minor
= MISC_DYNAMIC_MINOR
,
541 .name
= "goldfish_pipe",
542 .fops
= &goldfish_pipe_fops
,
545 static int goldfish_pipe_probe(struct platform_device
*pdev
)
549 struct goldfish_pipe_dev
*dev
= pipe_dev
;
551 /* not thread safe, but this should not happen */
552 WARN_ON(dev
->base
!= NULL
);
554 spin_lock_init(&dev
->lock
);
556 r
= platform_get_resource(pdev
, IORESOURCE_MEM
, 0);
557 if (r
== NULL
|| resource_size(r
) < PAGE_SIZE
) {
558 dev_err(&pdev
->dev
, "can't allocate i/o page\n");
561 dev
->base
= devm_ioremap(&pdev
->dev
, r
->start
, PAGE_SIZE
);
562 if (dev
->base
== NULL
) {
563 dev_err(&pdev
->dev
, "ioremap failed\n");
567 r
= platform_get_resource(pdev
, IORESOURCE_IRQ
, 0);
574 err
= devm_request_irq(&pdev
->dev
, dev
->irq
, goldfish_pipe_interrupt
,
575 IRQF_SHARED
, "goldfish_pipe", dev
);
577 dev_err(&pdev
->dev
, "unable to allocate IRQ\n");
581 err
= misc_register(&goldfish_pipe_device
);
583 dev_err(&pdev
->dev
, "unable to register device\n");
586 setup_access_params_addr(pdev
, dev
);
594 static int goldfish_pipe_remove(struct platform_device
*pdev
)
596 struct goldfish_pipe_dev
*dev
= pipe_dev
;
597 misc_deregister(&goldfish_pipe_device
);
602 static struct platform_driver goldfish_pipe
= {
603 .probe
= goldfish_pipe_probe
,
604 .remove
= goldfish_pipe_remove
,
606 .name
= "goldfish_pipe"
610 module_platform_driver(goldfish_pipe
);
611 MODULE_AUTHOR("David Turner <digit@google.com>");
612 MODULE_LICENSE("GPL");