File indexing completed on 2025-05-11 08:24:14
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
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 }