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

#ifndef SYSROOT_ZIRCON_DEVICE_IOCTL_H_
#define SYSROOT_ZIRCON_DEVICE_IOCTL_H_

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

#endif  // SYSROOT_ZIRCON_DEVICE_IOCTL_H_
