xref: /kernel/linux/linux-6.6/arch/um/drivers/null.c (revision 62306a36)
162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Copyright (C) 2002 - 2007 Jeff Dike (jdike@{linux.intel,addtoit}.com)
462306a36Sopenharmony_ci */
562306a36Sopenharmony_ci
662306a36Sopenharmony_ci#include <stddef.h>
762306a36Sopenharmony_ci#include <errno.h>
862306a36Sopenharmony_ci#include <fcntl.h>
962306a36Sopenharmony_ci#include "chan_user.h"
1062306a36Sopenharmony_ci#include <os.h>
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci/* This address is used only as a unique identifier */
1362306a36Sopenharmony_cistatic int null_chan;
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_cistatic void *null_init(char *str, int device, const struct chan_opts *opts)
1662306a36Sopenharmony_ci{
1762306a36Sopenharmony_ci	return &null_chan;
1862306a36Sopenharmony_ci}
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_cistatic int null_open(int input, int output, int primary, void *d,
2162306a36Sopenharmony_ci		     char **dev_out)
2262306a36Sopenharmony_ci{
2362306a36Sopenharmony_ci	int fd;
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_ci	*dev_out = NULL;
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_ci	fd = open(DEV_NULL, O_RDWR);
2862306a36Sopenharmony_ci	return (fd < 0) ? -errno : fd;
2962306a36Sopenharmony_ci}
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_cistatic int null_read(int fd, char *c_out, void *unused)
3262306a36Sopenharmony_ci{
3362306a36Sopenharmony_ci	return -ENODEV;
3462306a36Sopenharmony_ci}
3562306a36Sopenharmony_ci
3662306a36Sopenharmony_cistatic void null_free(void *data)
3762306a36Sopenharmony_ci{
3862306a36Sopenharmony_ci}
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_ciconst struct chan_ops null_ops = {
4162306a36Sopenharmony_ci	.type		= "null",
4262306a36Sopenharmony_ci	.init		= null_init,
4362306a36Sopenharmony_ci	.open		= null_open,
4462306a36Sopenharmony_ci	.close		= generic_close,
4562306a36Sopenharmony_ci	.read		= null_read,
4662306a36Sopenharmony_ci	.write		= generic_write,
4762306a36Sopenharmony_ci	.console_write	= generic_console_write,
4862306a36Sopenharmony_ci	.window_size	= generic_window_size,
4962306a36Sopenharmony_ci	.free		= null_free,
5062306a36Sopenharmony_ci	.winch		= 0,
5162306a36Sopenharmony_ci};
52