Back to home page

LXR

 
 

    


File indexing completed on 2025-05-11 08:24:14

0001 /**
0002  * @file
0003  *
0004  * @ingroup rtems_blkdev
0005  *
0006  * @brief Common IO Control Primitive
0007  */
0008 
0009 /*
0010  * Copyright (C) 2001 OKTET Ltd., St.-Petersburg, Russia
0011  * Author: Victor V. Vengerov <vvv@oktet.ru>
0012  */
0013 
0014 #ifdef HAVE_CONFIG_H
0015 #include "config.h"
0016 #endif
0017 
0018 #include <errno.h>
0019 
0020 #include <rtems/blkdev.h>
0021 #include <rtems/bdbuf.h>
0022 
0023 int
0024 rtems_blkdev_ioctl(rtems_disk_device *dd, uint32_t req, void *argp)
0025 {
0026     rtems_status_code  sc;
0027     int                rc = 0;
0028 
0029     switch (req)
0030     {
0031         case RTEMS_BLKIO_GETMEDIABLKSIZE:
0032             *(uint32_t *) argp = dd->media_block_size;
0033             break;
0034 
0035         case RTEMS_BLKIO_GETBLKSIZE:
0036             *(uint32_t *) argp = dd->block_size;
0037             break;
0038 
0039         case RTEMS_BLKIO_SETBLKSIZE:
0040             sc = rtems_bdbuf_set_block_size(dd, *(uint32_t *) argp, true);
0041             if (sc != RTEMS_SUCCESSFUL) {
0042                 errno = EIO;
0043                 rc = -1;
0044             }
0045             break;
0046 
0047         case RTEMS_BLKIO_GETSIZE:
0048             *(rtems_blkdev_bnum *) argp = dd->size;
0049             break;
0050 
0051         case RTEMS_BLKIO_SYNCDEV:
0052             sc = rtems_bdbuf_syncdev(dd);
0053             if (sc != RTEMS_SUCCESSFUL) {
0054                 errno = EIO;
0055                 rc = -1;
0056             }
0057             break;
0058 
0059         case RTEMS_BLKIO_GETDISKDEV:
0060             *(rtems_disk_device **) argp = dd;
0061             break;
0062 
0063         case RTEMS_BLKIO_PURGEDEV:
0064             rtems_bdbuf_purge_dev(dd);
0065             break;
0066 
0067         case RTEMS_BLKIO_GETDEVSTATS:
0068             rtems_bdbuf_get_device_stats(dd, (rtems_blkdev_stats *) argp);
0069             break;
0070 
0071         case RTEMS_BLKIO_RESETDEVSTATS:
0072             rtems_bdbuf_reset_device_stats(dd);
0073             break;
0074 
0075         default:
0076             errno = EINVAL;
0077             rc = -1;
0078             break;
0079     }
0080 
0081     return rc;
0082 }