| // Copyright 2016 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #pragma once |
| |
| // clang-format off |
| |
| // DEFAULT ioctls accept and received byte[] data |
| // the particular ioctl may define more specific structures |
| #define IOCTL_KIND_DEFAULT 0x0 |
| |
| // GET_HANDLE ioctls accept plain data and return |
| // a single handle, optionally followed by plain data |
| #define IOCTL_KIND_GET_HANDLE 0x1 |
| |
| // GET_TWO_HANDLES ioctls accept plain data and return |
| // two handles, optionally followed by plain data |
| #define IOCTL_KIND_GET_TWO_HANDLES 0x2 |
| |
| // GET_THREE_HANDLES ioctls accept plain data and return |
| // three handles, optionally followed by plain data |
| #define IOCTL_KIND_GET_THREE_HANDLES 0x4 |
| |
| // SET_HANDLE ioctls accept a handle, and optionally |
| // plain data afterwards. |
| #define IOCTL_KIND_SET_HANDLE 0x3 |
| |
| // SET_TWO_HANDLES ioctls accepts two handles, and |
| // optionally plain data afterwards. |
| #define IOCTL_KIND_SET_TWO_HANDLES 0x5 |
| |
| // core device/vfs ioctl families |
| #define IOCTL_FAMILY_RESERVED 0x00 |
| #define IOCTL_FAMILY_DEVICE 0x01 |
| #define IOCTL_FAMILY_VFS 0x02 |
| #define IOCTL_FAMILY_DMCTL 0x03 |
| #define IOCTL_FAMILY_TEST 0x04 |
| |
| // device protocol families |
| #define IOCTL_FAMILY_CONSOLE 0x10 |
| #define IOCTL_FAMILY_INPUT 0x11 |
| // 0x12 unused |
| #define IOCTL_FAMILY_BLOCK 0x13 |
| #define IOCTL_FAMILY_I2C 0x14 |
| #define IOCTL_FAMILY_USB_DEVICE 0x16 |
| #define IOCTL_FAMILY_HID 0x17 |
| // 0x18 unused |
| #define IOCTL_FAMILY_AUDIO 0x19 |
| #define IOCTL_FAMILY_MIDI 0x1A |
| #define IOCTL_FAMILY_KTRACE 0x1B |
| #define IOCTL_FAMILY_BT_HCI 0x1C |
| #define IOCTL_FAMILY_SYSINFO 0x1D |
| // 0x1E unused |
| #define IOCTL_FAMILY_RTC 0x1F // ioctls for RTC |
| #define IOCTL_FAMILY_ETH 0x20 |
| #define IOCTL_FAMILY_INSNTRACE 0x21 // ioctls for instruction tracing |
| #define IOCTL_FAMILY_RAMDISK 0x22 |
| #define IOCTL_FAMILY_SDMMC 0x23 |
| #define IOCTL_FAMILY_WLAN 0x24 |
| #define IOCTL_FAMILY_PTY 0x25 |
| #define IOCTL_FAMILY_NETCONFIG 0x26 |
| #define IOCTL_FAMILY_ETHERTAP 0x27 |
| #define IOCTL_FAMILY_USB_PERIPHERAL 0x28 |
| #define IOCTL_FAMILY_USB_VIRT_BUS 0x29 |
| #define IOCTL_FAMILY_CPUPERF 0x2A |
| #define IOCTL_FAMILY_POWER 0x30 |
| #define IOCTL_FAMILY_THERMAL 0x31 |
| #define IOCTL_FAMILY_CAMERA 0x32 |
| #define IOCTL_FAMILY_BT_HOST 0x33 |
| #define IOCTL_FAMILY_WLANPHY 0x34 |
| #define IOCTL_FAMILY_SERIAL 0x35 |
| #define IOCTL_FAMILY_WLANTAP 0x36 |
| #define IOCTL_FAMILY_DISPLAY_CONTROLLER 0x37 |
| #define IOCTL_FAMILY_DEBUG 0x38 |
| #define IOCTL_FAMILY_AUDIO_CODEC 0x39 |
| #define IOCTL_FAMILY_BACKLIGHT 0x3A |
| #define IOCTL_FAMILY_NAND_TEST 0x3B |
| #define IOCTL_FAMILY_TEE 0x3C |
| #define IOCTL_FAMILY_SKIP_BLOCK 0x3D |
| #define IOCTL_FAMILY_USB_TEST 0x3E |
| #define IOCTL_FAMILY_CLK 0x3F |
| // 0x40 unused. |
| #define IOCTL_FAMILY_QMI 0x41 |
| |
| // IOCTL constructor |
| // --K-FFNN |
| #define IOCTL(kind, family, number) \ |
| ((((kind) & 0xF) << 20) | (((family) & 0xFF) << 8) | ((number) & 0xFF)) |
| |
| // IOCTL accessors |
| #define IOCTL_KIND(n) (((n) >> 20) & 0xF) |
| #define IOCTL_FAMILY(n) (((n) >> 8) & 0xFF) |
| #define IOCTL_NUMBER(n) ((n) & 0xFF) |