1/* SPDX-License-Identifier: GPL-2.0 */
2#ifndef _LINUX_MISCDEVICE_H
3#define _LINUX_MISCDEVICE_H
4#include <linux/major.h>
5#include <linux/list.h>
6#include <linux/types.h>
7#include <linux/device.h>
8
9/*
10 *	These allocations are managed by device@lanana.org. If you need
11 *	an entry that is not assigned here, it can be moved and
12 *	reassigned or dynamically set if a fixed value is not justified.
13 */
14
15#define PSMOUSE_MINOR		1
16#define MS_BUSMOUSE_MINOR	2	/* unused */
17#define ATIXL_BUSMOUSE_MINOR	3	/* unused */
18/*#define AMIGAMOUSE_MINOR	4	FIXME OBSOLETE */
19#define ATARIMOUSE_MINOR	5	/* unused */
20#define SUN_MOUSE_MINOR		6	/* unused */
21#define APOLLO_MOUSE_MINOR	7	/* unused */
22#define PC110PAD_MINOR		9	/* unused */
23/*#define ADB_MOUSE_MINOR	10	FIXME OBSOLETE */
24#define WATCHDOG_MINOR		130	/* Watchdog timer     */
25#define TEMP_MINOR		131	/* Temperature Sensor */
26#define APM_MINOR_DEV		134
27#define RTC_MINOR		135
28/*#define EFI_RTC_MINOR		136	was EFI Time services */
29#define VHCI_MINOR		137
30#define SUN_OPENPROM_MINOR	139
31#define DMAPI_MINOR		140	/* unused */
32#define NVRAM_MINOR		144
33#define SBUS_FLASH_MINOR	152
34#define SGI_MMTIMER		153
35#define PMU_MINOR		154
36#define STORE_QUEUE_MINOR	155	/* unused */
37#define LCD_MINOR		156
38#define AC_MINOR		157
39#define BUTTON_MINOR		158	/* Major 10, Minor 158, /dev/nwbutton */
40#define NWFLASH_MINOR		160	/* MAJOR is 10 - miscdevice */
41#define ENVCTRL_MINOR		162
42#define I2O_MINOR		166
43#define UCTRL_MINOR		174
44#define AGPGART_MINOR		175
45#define TOSH_MINOR_DEV		181
46#define HWRNG_MINOR		183
47/*#define MICROCODE_MINOR	184	unused */
48#define KEYPAD_MINOR		185
49#define IRNET_MINOR		187
50#define D7S_MINOR		193
51#define VFIO_MINOR		196
52#define PXA3XX_GCU_MINOR	197
53#define TUN_MINOR		200
54#define CUSE_MINOR		203
55#define MWAVE_MINOR		219	/* ACP/Mwave Modem */
56#define MPT_MINOR		220
57#define MPT2SAS_MINOR		221
58#define MPT3SAS_MINOR		222
59#define UINPUT_MINOR		223
60#define MISC_MCELOG_MINOR	227
61#define HPET_MINOR		228
62#define FUSE_MINOR		229
63#define SNAPSHOT_MINOR		231
64#define KVM_MINOR		232
65#define BTRFS_MINOR		234
66#define AUTOFS_MINOR		235
67#define MAPPER_CTRL_MINOR	236
68#define LOOP_CTRL_MINOR		237
69#define VHOST_NET_MINOR		238
70#define UHID_MINOR		239
71#define USERIO_MINOR		240
72#define VHOST_VSOCK_MINOR	241
73#define RFKILL_MINOR		242
74#define MISC_DYNAMIC_MINOR	255
75
76struct device;
77struct attribute_group;
78
79struct miscdevice  {
80	int minor;
81	const char *name;
82	const struct file_operations *fops;
83	struct list_head list;
84	struct device *parent;
85	struct device *this_device;
86	const struct attribute_group **groups;
87	const char *nodename;
88	umode_t mode;
89};
90
91extern int misc_register(struct miscdevice *misc);
92extern void misc_deregister(struct miscdevice *misc);
93
94/*
95 * Helper macro for drivers that don't do anything special in the initcall.
96 * This helps to eliminate boilerplate code.
97 */
98#define builtin_misc_device(__misc_device) \
99	builtin_driver(__misc_device, misc_register)
100
101/*
102 * Helper macro for drivers that don't do anything special in module init / exit
103 * call. This helps to eliminate boilerplate code.
104 */
105#define module_misc_device(__misc_device) \
106	module_driver(__misc_device, misc_register, misc_deregister)
107
108#define MODULE_ALIAS_MISCDEV(minor)				\
109	MODULE_ALIAS("char-major-" __stringify(MISC_MAJOR)	\
110	"-" __stringify(minor))
111#endif
112