#include <linux/cdrom.h>

#include "utils.h"
#include "ioctls.h"

static const struct ioctl cdrom_ioctls[] = {
  IOCTL(CDROMPAUSE, 0, 0),
  IOCTL(CDROMRESUME, 0, 0),
  IOCTL(CDROMPLAYMSF, 0, 0),
  IOCTL(CDROMPLAYTRKIND, 0, 0),
  IOCTL(CDROMREADTOCHDR, 0, 0),
  IOCTL(CDROMREADTOCENTRY, 0, 0),
  IOCTL(CDROMSTOP, 0, 0),
  IOCTL(CDROMSTART, 0, 0),
  IOCTL(CDROMEJECT, 0, 0),
  IOCTL(CDROMVOLCTRL, 0, 0),
  IOCTL(CDROMSUBCHNL, 0, 0),
  IOCTL(CDROMREADMODE2, 0, 0),
  IOCTL(CDROMREADMODE1, 0, 0),
  IOCTL(CDROMREADAUDIO, 0, 0),
  IOCTL(CDROMEJECT_SW, 0, 0),
  IOCTL(CDROMMULTISESSION, 0, 0),
  IOCTL(CDROM_GET_MCN, 0, 0),
  IOCTL(CDROMRESET, 0, 0),
  IOCTL(CDROMVOLREAD, 0, 0),
  IOCTL(CDROMREADRAW, 0, 0),
  IOCTL(CDROMREADCOOKED, 0, 0),
  IOCTL(CDROMSEEK, 0, 0),
  IOCTL(CDROMPLAYBLK, 0, 0),
  IOCTL(CDROMREADALL, 0, 0),
  IOCTL(CDROMGETSPINDOWN, 0, 0),
  IOCTL(CDROMSETSPINDOWN, 0, 0),
  IOCTL(CDROMCLOSETRAY, 0, 0),
  IOCTL(CDROM_SET_OPTIONS, 0, 0),
  IOCTL(CDROM_CLEAR_OPTIONS, 0, 0),
  IOCTL(CDROM_SELECT_SPEED, 0, 0),
  IOCTL(CDROM_SELECT_DISC, 0, 0),
  IOCTL(CDROM_MEDIA_CHANGED, 0, 0),
  IOCTL(CDROM_DRIVE_STATUS, 0, 0),
  IOCTL(CDROM_DISC_STATUS, 0, 0),
  IOCTL(CDROM_CHANGER_NSLOTS, 0, 0),
  IOCTL(CDROM_LOCKDOOR, 0, 0),
  IOCTL(CDROM_DEBUG, 0, 0),
  IOCTL(CDROM_GET_CAPABILITY, 0, 0),
  IOCTL(CDROMAUDIOBUFSIZ, 0, 0),
  IOCTL(DVD_READ_STRUCT, 0, 0),
  IOCTL(DVD_WRITE_STRUCT, 0, 0),
  IOCTL(DVD_AUTH, 0, 0),
  IOCTL(CDROM_SEND_PACKET, 0, 0),
  IOCTL(CDROM_NEXT_WRITABLE, 0, 0),
  IOCTL(CDROM_LAST_WRITTEN, 0, 0),
};

static const char *const cdrom_devs[] = {
	"sr",
};

static const struct ioctl_group cdrom_grp = {
	.devtype = DEV_BLOCK,
	.devs = cdrom_devs,
	.devs_cnt = ARRAY_SIZE(cdrom_devs),
	.sanitise = pick_random_ioctl,
	.ioctls = cdrom_ioctls,
	.ioctls_cnt = ARRAY_SIZE(cdrom_ioctls),
};

REG_IOCTL_GROUP(cdrom_grp)
