/*
 * This file is auto-generated. Modifications will be lost.
 *
 * See https://android.googlesource.com/platform/bionic/+/master/libc/kernel/
 * for more information.
 */
#ifndef _UAPIBLKTRACE_H
#define _UAPIBLKTRACE_H
#include <linux/types.h>
enum blktrace_cat {
  BLK_TC_READ = 1 << 0,
  BLK_TC_WRITE = 1 << 1,
  BLK_TC_FLUSH = 1 << 2,
  BLK_TC_SYNC = 1 << 3,
  BLK_TC_SYNCIO = BLK_TC_SYNC,
  BLK_TC_QUEUE = 1 << 4,
  BLK_TC_REQUEUE = 1 << 5,
  BLK_TC_ISSUE = 1 << 6,
  BLK_TC_COMPLETE = 1 << 7,
  BLK_TC_FS = 1 << 8,
  BLK_TC_PC = 1 << 9,
  BLK_TC_NOTIFY = 1 << 10,
  BLK_TC_AHEAD = 1 << 11,
  BLK_TC_META = 1 << 12,
  BLK_TC_DISCARD = 1 << 13,
  BLK_TC_DRV_DATA = 1 << 14,
  BLK_TC_FUA = 1 << 15,
  BLK_TC_END = 1 << 15,
};
#define BLK_TC_SHIFT (16)
#define BLK_TC_ACT(act) ((act) << BLK_TC_SHIFT)
enum blktrace_act {
  __BLK_TA_QUEUE = 1,
  __BLK_TA_BACKMERGE,
  __BLK_TA_FRONTMERGE,
  __BLK_TA_GETRQ,
  __BLK_TA_SLEEPRQ,
  __BLK_TA_REQUEUE,
  __BLK_TA_ISSUE,
  __BLK_TA_COMPLETE,
  __BLK_TA_PLUG,
  __BLK_TA_UNPLUG_IO,
  __BLK_TA_UNPLUG_TIMER,
  __BLK_TA_INSERT,
  __BLK_TA_SPLIT,
  __BLK_TA_BOUNCE,
  __BLK_TA_REMAP,
  __BLK_TA_ABORT,
  __BLK_TA_DRV_DATA,
  __BLK_TA_CGROUP = 1 << 8,
};
enum blktrace_notify {
  __BLK_TN_PROCESS = 0,
  __BLK_TN_TIMESTAMP,
  __BLK_TN_MESSAGE,
  __BLK_TN_CGROUP = __BLK_TA_CGROUP,
};
#define BLK_TA_QUEUE (__BLK_TA_QUEUE | BLK_TC_ACT(BLK_TC_QUEUE))
#define BLK_TA_BACKMERGE (__BLK_TA_BACKMERGE | BLK_TC_ACT(BLK_TC_QUEUE))
#define BLK_TA_FRONTMERGE (__BLK_TA_FRONTMERGE | BLK_TC_ACT(BLK_TC_QUEUE))
#define BLK_TA_GETRQ (__BLK_TA_GETRQ | BLK_TC_ACT(BLK_TC_QUEUE))
#define BLK_TA_SLEEPRQ (__BLK_TA_SLEEPRQ | BLK_TC_ACT(BLK_TC_QUEUE))
#define BLK_TA_REQUEUE (__BLK_TA_REQUEUE | BLK_TC_ACT(BLK_TC_REQUEUE))
#define BLK_TA_ISSUE (__BLK_TA_ISSUE | BLK_TC_ACT(BLK_TC_ISSUE))
#define BLK_TA_COMPLETE (__BLK_TA_COMPLETE | BLK_TC_ACT(BLK_TC_COMPLETE))
#define BLK_TA_PLUG (__BLK_TA_PLUG | BLK_TC_ACT(BLK_TC_QUEUE))
#define BLK_TA_UNPLUG_IO (__BLK_TA_UNPLUG_IO | BLK_TC_ACT(BLK_TC_QUEUE))
#define BLK_TA_UNPLUG_TIMER (__BLK_TA_UNPLUG_TIMER | BLK_TC_ACT(BLK_TC_QUEUE))
#define BLK_TA_INSERT (__BLK_TA_INSERT | BLK_TC_ACT(BLK_TC_QUEUE))
#define BLK_TA_SPLIT (__BLK_TA_SPLIT)
#define BLK_TA_BOUNCE (__BLK_TA_BOUNCE)
#define BLK_TA_REMAP (__BLK_TA_REMAP | BLK_TC_ACT(BLK_TC_QUEUE))
#define BLK_TA_ABORT (__BLK_TA_ABORT | BLK_TC_ACT(BLK_TC_QUEUE))
#define BLK_TA_DRV_DATA (__BLK_TA_DRV_DATA | BLK_TC_ACT(BLK_TC_DRV_DATA))
#define BLK_TN_PROCESS (__BLK_TN_PROCESS | BLK_TC_ACT(BLK_TC_NOTIFY))
#define BLK_TN_TIMESTAMP (__BLK_TN_TIMESTAMP | BLK_TC_ACT(BLK_TC_NOTIFY))
#define BLK_TN_MESSAGE (__BLK_TN_MESSAGE | BLK_TC_ACT(BLK_TC_NOTIFY))
#define BLK_IO_TRACE_MAGIC 0x65617400
#define BLK_IO_TRACE_VERSION 0x07
struct blk_io_trace {
  __u32 magic;
  __u32 sequence;
  __u64 time;
  __u64 sector;
  __u32 bytes;
  __u32 action;
  __u32 pid;
  __u32 device;
  __u32 cpu;
  __u16 error;
  __u16 pdu_len;
};
struct blk_io_trace_remap {
  __be32 device_from;
  __be32 device_to;
  __be64 sector_from;
};
enum {
  Blktrace_setup = 1,
  Blktrace_running,
  Blktrace_stopped,
};
#define BLKTRACE_BDEV_SIZE 32
struct blk_user_trace_setup {
  char name[BLKTRACE_BDEV_SIZE];
  __u16 act_mask;
  __u32 buf_size;
  __u32 buf_nr;
  __u64 start_lba;
  __u64 end_lba;
  __u32 pid;
};
#endif
