diff options
Diffstat (limited to 'winsup/cygwin/devices.h')
-rw-r--r-- | winsup/cygwin/devices.h | 251 |
1 files changed, 176 insertions, 75 deletions
diff --git a/winsup/cygwin/devices.h b/winsup/cygwin/devices.h index c8b752402..7e91b52b8 100644 --- a/winsup/cygwin/devices.h +++ b/winsup/cygwin/devices.h @@ -1,6 +1,6 @@ /* devices.h - Copyright 2002 Red Hat, Inc. + Copyright 2002, 2003 Red Hat, Inc. This file is part of Cygwin. @@ -8,83 +8,184 @@ This software is a copyrighted work licensed under the terms of the Cygwin license. Please consult the file "CYGWIN_LICENSE" for details. */ -#ifndef _DEVICES_H_ -#define _DEVICES_H_ +typedef unsigned short _major_t; +typedef unsigned short _minor_t; +typedef mode_t _mode_t; +typedef __dev32_t _dev_t; -#include <sys/ioctl.h> -#include <fcntl.h> +#define FHDEV(maj, min) ((((unsigned) (maj)) << (sizeof (_major_t) * 8)) | (unsigned) (min)) +#define _minor(dev) ((dev) & ((1 << (sizeof (_minor_t) * 8)) - 1)) +#define _major(dev) ((dev) >> (sizeof (_major_t) * 8)) -enum +enum fh_devices { - FH_RBINARY = 0x00001000, /* binary read mode */ - FH_WBINARY = 0x00002000, /* binary write mode */ - FH_CLOEXEC = 0x00004000, /* close-on-exec */ - FH_RBINSET = 0x00008000, /* binary read mode has been explicitly set */ - FH_WBINSET = 0x00010000, /* binary write mode has been explicitly set */ - FH_APPEND = 0x00020000, /* always append */ - FH_ASYNC = 0x00040000, /* async I/O */ - FH_SIGCLOSE = 0x00080000, /* signal handler should close fd on interrupt */ - - FH_SYMLINK = 0x00100000, /* is a symlink */ - FH_EXECABL = 0x00200000, /* file looked like it would run: - * ends in .exe or .bat or begins with #! */ - FH_W95LSBUG = 0x00400000, /* set when lseek is called as a flag that - * _write should check if we've moved beyond - * EOF, zero filling if so. */ - FH_NOHANDLE = 0x00800000, /* No handle associated with fhandler. */ - FH_NOEINTR = 0x01000000, /* Set if I/O should be uninterruptible. */ - FH_FFIXUP = 0x02000000, /* Set if need to fixup after fork. */ - FH_LOCAL = 0x04000000, /* File is unix domain socket */ - FH_SHUTRD = 0x08000000, /* Socket saw a SHUT_RD */ - FH_SHUTWR = 0x10000000, /* Socket saw a SHUT_WR */ - FH_ISREMOTE = 0x10000000, /* File is on a remote drive */ - FH_DCEXEC = 0x20000000, /* Don't care if this is executable */ - FH_HASACLS = 0x40000000, /* True if fs of file has ACLS */ - FH_QUERYOPEN = 0x80000000, /* open file without requesting either read - or write access */ - - /* Device flags */ - - /* Slow devices */ - FH_CONSOLE = 0x00000001, /* is a console */ - FH_CONIN = 0x00000002, /* console input */ - FH_CONOUT = 0x00000003, /* console output */ - FH_TTYM = 0x00000004, /* is a tty master */ - FH_TTYS = 0x00000005, /* is a tty slave */ - FH_PTYM = 0x00000006, /* is a pty master */ - FH_SERIAL = 0x00000007, /* is a serial port */ - FH_PIPE = 0x00000008, /* is a pipe */ - FH_PIPER = 0x00000009, /* read end of a pipe */ - FH_PIPEW = 0x0000000a, /* write end of a pipe */ - FH_SOCKET = 0x0000000b, /* is a socket */ - FH_WINDOWS = 0x0000000c, /* is a window */ - FH_SLOW = 0x00000010, /* "slow" device if below this */ - - /* Fast devices */ - FH_DISK = 0x00000010, /* is a disk */ - FH_FLOPPY = 0x00000011, /* is a floppy */ - FH_TAPE = 0x00000012, /* is a tape */ - FH_NULL = 0x00000013, /* is the null device */ - FH_ZERO = 0x00000014, /* is the zero device */ - FH_RANDOM = 0x00000015, /* is a random device */ - FH_MEM = 0x00000016, /* is a mem device */ - FH_CLIPBOARD = 0x00000017, /* is a clipboard device */ - FH_OSS_DSP = 0x00000018, /* is a dsp audio device */ - FH_CYGDRIVE= 0x00000019, /* /cygdrive/x */ - FH_PROC = 0x0000001a, /* /proc */ - FH_REGISTRY =0x0000001b, /* /proc/registry */ - FH_PROCESS = 0x0000001c, /* /proc/<n> */ - - FH_NDEV = 0x0000001d, /* Maximum number of devices */ - FH_DEVMASK = 0x00000fff, /* devices live here */ - FH_BAD = 0xffffffff + FH_TTY = FHDEV (5, 0), + FH_CONSOLE = FHDEV (5, 1), + FH_PTYM = FHDEV (5, 2), /* /dev/ptmx */ + FH_CONIN = FHDEV (5, 255), + FH_CONOUT = FHDEV (5, 254), + + DEV_TTYM_MAJOR = 128, + FH_TTYM = FHDEV (DEV_TTYM_MAJOR, 0), + FH_TTYM_MAX= FHDEV (DEV_TTYM_MAJOR, 255), + + DEV_TTYS_MAJOR = 136, + FH_TTYS = FHDEV (DEV_TTYS_MAJOR, 0), /* FIXME: Should separate ttys and ptys */ + FH_TTYS_MAX= FHDEV (DEV_TTYS_MAJOR, 255), /* FIXME: Should separate ttys and ptys */ + + DEV_SERIAL_MAJOR = 117, + FH_SERIAL = FHDEV (117, 0), /* /dev/ttyS? */ + + FH_WINDOWS = FHDEV (13, 255), + FH_CLIPBOARD=FHDEV (13, 254), + + FH_PIPE = FHDEV (0, 255), + FH_PIPER = FHDEV (0, 254), + FH_PIPEW = FHDEV (0, 253), + FH_FIFO = FHDEV (0, 252), + FH_PROC = FHDEV (0, 250), + FH_REGISTRY= FHDEV (0, 249), + FH_PROCESS = FHDEV (0, 248), + + FH_FS = FHDEV (0, 247), /* filesystem based device */ + + DEV_FLOPPY_MAJOR = 2, + FH_FLOPPY = FHDEV (DEV_FLOPPY_MAJOR, 0), + + DEV_CDROM_MAJOR = 11, + FH_CDROM = FHDEV (DEV_CDROM_MAJOR, 0), + + DEV_TAPE_MAJOR = 9, + FH_TAPE = FHDEV (DEV_TAPE_MAJOR, 0), + FH_NTAPE = FHDEV (DEV_TAPE_MAJOR, 128), + FH_MAXNTAPE= FHDEV (DEV_TAPE_MAJOR, 255), + + DEV_SD_MAJOR = 3, + DEV_SD1_MAJOR = 90, + FH_SD = FHDEV (DEV_SD_MAJOR, 0), + FH_SD1 = FHDEV (DEV_SD1_MAJOR, 0), + FH_SDA = FHDEV (DEV_SD_MAJOR, 0), + FH_SDB = FHDEV (DEV_SD_MAJOR, 16), + FH_SDC = FHDEV (DEV_SD_MAJOR, 32), + FH_SDD = FHDEV (DEV_SD_MAJOR, 48), + FH_SDE = FHDEV (DEV_SD_MAJOR, 64), + FH_SDF = FHDEV (DEV_SD_MAJOR, 80), + FH_SDG = FHDEV (DEV_SD_MAJOR, 96), + FH_SDH = FHDEV (DEV_SD_MAJOR, 112), + FH_SDI = FHDEV (DEV_SD_MAJOR, 128), + FH_SDJ = FHDEV (DEV_SD_MAJOR, 144), + FH_SDK = FHDEV (DEV_SD_MAJOR, 160), + FH_SDL = FHDEV (DEV_SD_MAJOR, 176), + FH_SDM = FHDEV (DEV_SD_MAJOR, 192), + FH_SDN = FHDEV (DEV_SD_MAJOR, 208), + FH_SDO = FHDEV (DEV_SD_MAJOR, 224), + FH_SDP = FHDEV (DEV_SD_MAJOR, 240), + FH_SDQ = FHDEV (DEV_SD1_MAJOR, 0), + FH_SDR = FHDEV (DEV_SD1_MAJOR, 16), + FH_SDS = FHDEV (DEV_SD1_MAJOR, 32), + FH_SDT = FHDEV (DEV_SD1_MAJOR, 48), + FH_SDU = FHDEV (DEV_SD1_MAJOR, 64), + FH_SDV = FHDEV (DEV_SD1_MAJOR, 80), + FH_SDW = FHDEV (DEV_SD1_MAJOR, 96), + FH_SDX = FHDEV (DEV_SD1_MAJOR, 112), + FH_SDY = FHDEV (DEV_SD1_MAJOR, 128), + FH_SDZ = FHDEV (DEV_SD1_MAJOR, 144), + + FH_MEM = FHDEV (1, 1), + FH_KMEM = FHDEV (1, 2), /* not implemented yet */ + FH_NULL = FHDEV (1, 3), + FH_ZERO = FHDEV (1, 4), + FH_PORT = FHDEV (1, 5), + FH_RANDOM = FHDEV (1, 8), + FH_URANDOM = FHDEV (1, 9), + FH_OSS_DSP = FHDEV (14, 3), + + DEV_CYGDRIVE_MAJOR = 30, + FH_CYGDRIVE= FHDEV (DEV_CYGDRIVE_MAJOR, 0), + FH_CYGDRIVE_A= FHDEV (DEV_CYGDRIVE_MAJOR, 'a'), + FH_CYGDRIVE_Z= FHDEV (DEV_CYGDRIVE_MAJOR, 'z'), + + DEV_RAWDRIVE_MAJOR = 65, + FH_RAWDRIVE= FHDEV (DEV_RAWDRIVE_MAJOR, 0), + + DEV_TCP_MAJOR = 30, + FH_TCP = FHDEV (DEV_TCP_MAJOR, 36), + FH_UCP = FHDEV (DEV_TCP_MAJOR, 39), + FH_ICMP = FHDEV (DEV_TCP_MAJOR, 33), + FH_UNIX = FHDEV (DEV_TCP_MAJOR, 120), + FH_STREAM = FHDEV (DEV_TCP_MAJOR, 121), + FH_DGRAM = FHDEV (DEV_TCP_MAJOR, 122), + + FH_BAD = FHDEV (0, 0) }; -#define FHDEVN(n) ((n) & FH_DEVMASK) -#define FHISSETF(x) __ISSETF (this, x, FH) -#define FHSETF(x) __SETF (this, x, FH) -#define FHCLEARF(x) __CLEARF (this, x, FH) -#define FHCONDSETF(n, x) __CONDSETF(n, this, x, FH) +struct device +{ + const char *name; + union + { + _dev_t devn; + struct + { + _minor_t minor; + _major_t major; + }; + }; + const char *fmt; + unsigned lower, upper; + int adjust; + unsigned mul; + _mode_t mode; + bool dev_on_fs; + static const device *lookup (const char *, unsigned int = 0xffffffff); + void parse (const char *); + void parse (_major_t major, _minor_t minor); + void parse (_dev_t dev); + inline bool setunit (unsigned n) + { + if (mul && n > mul) + return false; + minor += (n + adjust) * (mul ?: 1); + return true; + } + static void init (); + void tty_to_real_device (); + inline operator int () const {return devn;} + inline void setfs (bool x) {dev_on_fs = x;} + inline bool isfs () const {return dev_on_fs;} +}; -#define FHSTATOFF 0 -#endif +extern const device dev_console_storage; +#define console_dev (&dev_console_storage) +extern const device dev_piper_storage; +#define piper_dev (&dev_piper_storage) +extern const device dev_pipew_storage; +#define pipew_dev (&dev_pipew_storage) +extern const device dev_socket_storage; +#define socket_dev (&dev_socket_storage) +extern const device dev_ttym_storage; +#define ttym_dev (&dev_ttym_storage) +extern const device dev_ttys_storage; +#define ttys_dev (&dev_ttys_storage) +extern const device dev_urandom_storage; +#define urandom_dev (&dev_urandom_storage) +extern const device dev_tcp_storage; +#define tcp_dev (&dev_tcp_storage) +extern const device dev_udp_storage; +#define udp_dev (&dev_udp_storage) +extern const device dev_icmp_storage; +#define icmp_dev (&dev_icmp_storage) +extern const device dev_unix_storage; +#define unix_dev (&dev_unix_storage) +extern const device dev_stream_storage; +#define stream_dev (&dev_stream_storage) +extern const device dev_dgram_storage; +#define dgram_dev (&dev_dgram_storage) +extern const device dev_proc_storage; +#define proc_dev (&dev_proc_storage) +extern const device dev_cygdrive_storage; +#define cygdrive_dev (&dev_cygdrive_storage) +extern const device dev_fh_storage; +#define fh_dev (&dev_fh_storage) +extern const device dev_fs_storage; +#define fs_dev (&dev_fs_storage) |