C++程序  |  95行  |  3.28 KB

// 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)