linux/include/linux/miscdevice.h
<<
>>
Prefs
   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
  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