xref: /linux/arch/um/drivers/null.c (revision 76f623d2d4283cc36a9c8a5b585df74638f1efa5)
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Copyright (C) 2002 - 2007 Jeff Dike (jdike@{linux.intel,addtoit}.com)
4  */
5 
6 #include <stddef.h>
7 #include <errno.h>
8 #include <fcntl.h>
9 #include "chan_user.h"
10 #include <os.h>
11 
12 /* This address is used only as a unique identifier */
13 static int null_chan;
14 
15 static void *null_init(char *str, int device, const struct chan_opts *opts)
16 {
17 	return &null_chan;
18 }
19 
20 static int null_open(int input, int output, int primary, void *d,
21 		     char **dev_out)
22 {
23 	int fd;
24 
25 	*dev_out = NULL;
26 
27 	fd = open(DEV_NULL, O_RDWR);
28 	return (fd < 0) ? -errno : fd;
29 }
30 
31 static int null_read(int fd, __u8 *c_out, void *unused)
32 {
33 	return -ENODEV;
34 }
35 
36 static void null_free(void *data)
37 {
38 }
39 
40 const struct chan_ops null_ops = {
41 	.type		= "null",
42 	.init		= null_init,
43 	.open		= null_open,
44 	.close		= generic_close,
45 	.read		= null_read,
46 	.write		= generic_write,
47 	.console_write	= generic_console_write,
48 	.window_size	= generic_window_size,
49 	.free		= null_free,
50 	.winch		= 0,
51 };
52