diff options
author | Sakari Ailus <sakari.ailus@linux.intel.com> | 2016-04-27 08:39:17 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@s-opensource.com> | 2016-09-22 09:22:15 -0400 |
commit | cf439d5f4d609b296cabf9a896fcf571b57e260b (patch) | |
tree | 075557ee70809e2a734f8bceac8d32357663e258 /drivers/media/media-device.c | |
parent | 2950da489520ed66da0934d04ebeb32054263e12 (diff) |
[media] media: Determine early whether an IOCTL is supported
Preparation for refactoring media IOCTL handling to unify common parts.
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Acked-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Diffstat (limited to 'drivers/media/media-device.c')
-rw-r--r-- | drivers/media/media-device.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/drivers/media/media-device.c b/drivers/media/media-device.c index 1795abeda658..f3212640858b 100644 --- a/drivers/media/media-device.c +++ b/drivers/media/media-device.c | |||
@@ -419,6 +419,22 @@ static long media_device_get_topology(struct media_device *mdev, | |||
419 | return 0; | 419 | return 0; |
420 | } | 420 | } |
421 | 421 | ||
422 | #define MEDIA_IOC(__cmd) \ | ||
423 | [_IOC_NR(MEDIA_IOC_##__cmd)] = { .cmd = MEDIA_IOC_##__cmd } | ||
424 | |||
425 | /* the table is indexed by _IOC_NR(cmd) */ | ||
426 | struct media_ioctl_info { | ||
427 | unsigned int cmd; | ||
428 | }; | ||
429 | |||
430 | static const struct media_ioctl_info ioctl_info[] = { | ||
431 | MEDIA_IOC(DEVICE_INFO), | ||
432 | MEDIA_IOC(ENUM_ENTITIES), | ||
433 | MEDIA_IOC(ENUM_LINKS), | ||
434 | MEDIA_IOC(SETUP_LINK), | ||
435 | MEDIA_IOC(G_TOPOLOGY), | ||
436 | }; | ||
437 | |||
422 | static long media_device_ioctl(struct file *filp, unsigned int cmd, | 438 | static long media_device_ioctl(struct file *filp, unsigned int cmd, |
423 | unsigned long arg) | 439 | unsigned long arg) |
424 | { | 440 | { |
@@ -426,6 +442,10 @@ static long media_device_ioctl(struct file *filp, unsigned int cmd, | |||
426 | struct media_device *dev = devnode->media_dev; | 442 | struct media_device *dev = devnode->media_dev; |
427 | long ret; | 443 | long ret; |
428 | 444 | ||
445 | if (_IOC_NR(cmd) >= ARRAY_SIZE(ioctl_info) | ||
446 | || ioctl_info[_IOC_NR(cmd)].cmd != cmd) | ||
447 | return -ENOIOCTLCMD; | ||
448 | |||
429 | mutex_lock(&dev->graph_mutex); | 449 | mutex_lock(&dev->graph_mutex); |
430 | switch (cmd) { | 450 | switch (cmd) { |
431 | case MEDIA_IOC_DEVICE_INFO: | 451 | case MEDIA_IOC_DEVICE_INFO: |