Commit fb2d5c33 authored by Daniel DeGrasse's avatar Daniel DeGrasse Committed by Fabio Baltieri
Browse files

drivers: disk: add DISK_IOCTL_CTRL_INIT macro to initialize a disk



Add DISK_IOCTL_CTRL_INIT IOCTL to initialize a disk. This IOCTL is
intended to replace disk_access_init() for new applications, but
disk_access_init() is kept for legacy compatibility. The INIT IOCTL is
added to better match the path that will be used for disk
de-initialization. Like the disk_access_init() calls,
DISK_IOCTL_CTRL_INIT calls are reference counted

Signed-off-by: default avatarDaniel DeGrasse <daniel.degrasse@nxp.com>
parent 3386a43a
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -451,6 +451,8 @@ static int disk_flash_access_ioctl(struct disk_info *disk, uint8_t cmd, void *bu
		*(uint32_t *)buff = ctx->page_size / ctx->sector_size;
		k_mutex_unlock(&ctx->lock);
		return 0;
	case DISK_IOCTL_CTRL_INIT:
		return disk_flash_access_init(disk);
	default:
		break;
	}
+6 −4
Original line number Diff line number Diff line
@@ -22,10 +22,6 @@ static inline struct loopback_disk_access *get_ctx(struct disk_info *info)
	return CONTAINER_OF(info, struct loopback_disk_access, info);
}

static int loopback_disk_access_init(struct disk_info *disk)
{
	return 0;
}
static int loopback_disk_access_status(struct disk_info *disk)
{
	return DISK_STATUS_OK;
@@ -113,10 +109,16 @@ static int loopback_disk_access_ioctl(struct disk_info *disk, uint8_t cmd, void
	}
	case DISK_IOCTL_CTRL_SYNC:
		return fs_sync(&ctx->file);
	case DISK_IOCTL_CTRL_INIT:
		return 0;
	default:
		return -ENOTSUP;
	}
}
static int loopback_disk_access_init(struct disk_info *disk)
{
	return loopback_disk_access_ioctl(disk, DISK_IOCTL_CTRL_INIT, NULL);
}

static const struct disk_operations loopback_disk_operations = {
	.init = loopback_disk_access_init,
+8 −1
Original line number Diff line number Diff line
@@ -82,9 +82,16 @@ static int disk_mmc_access_ioctl(struct disk_info *disk, uint8_t cmd, void *buf)
	const struct device *dev = disk->dev;
	struct mmc_data *data = dev->data;

	switch (cmd) {
	case DISK_IOCTL_CTRL_INIT:
		return disk_mmc_access_init(disk);
	default:
		return mmc_ioctl(&data->card, cmd, buf);
	}

	return 0;
}

static const struct disk_operations mmc_disk_ops = {
	.init = disk_mmc_access_init,
	.status = disk_mmc_access_status,
+8 −5
Original line number Diff line number Diff line
@@ -11,11 +11,6 @@ LOG_MODULE_DECLARE(nvme, CONFIG_NVME_LOG_LEVEL);

#include "nvme.h"

static int nvme_disk_init(struct disk_info *disk)
{
	return 0;
}

static int nvme_disk_status(struct disk_info *disk)
{
	return 0;
@@ -186,6 +181,9 @@ static int nvme_disk_ioctl(struct disk_info *disk, uint8_t cmd, void *buff)
	case DISK_IOCTL_CTRL_SYNC:
		ret = nvme_disk_flush(ns);
		break;
	case DISK_IOCTL_CTRL_INIT:
		ret = 0;
		break;
	default:
		ret = -EINVAL;
	}
@@ -194,6 +192,11 @@ static int nvme_disk_ioctl(struct disk_info *disk, uint8_t cmd, void *buff)
	return ret;
}

static int nvme_disk_init(struct disk_info *disk)
{
	return nvme_disk_ioctl(disk, DISK_IOCTL_CTRL_INIT, NULL);
}

static const struct disk_operations nvme_disk_ops = {
	.init = nvme_disk_init,
	.status = nvme_disk_status,
+7 −5
Original line number Diff line number Diff line
@@ -41,11 +41,6 @@ static int disk_ram_access_status(struct disk_info *disk)
	return DISK_STATUS_OK;
}

static int disk_ram_access_init(struct disk_info *disk)
{
	return 0;
}

static int disk_ram_access_read(struct disk_info *disk, uint8_t *buff,
				uint32_t sector, uint32_t count)
{
@@ -98,6 +93,8 @@ static int disk_ram_access_ioctl(struct disk_info *disk, uint8_t cmd, void *buff
	case DISK_IOCTL_GET_ERASE_BLOCK_SZ:
		*(uint32_t *)buff  = 1U;
		break;
	case DISK_IOCTL_CTRL_INIT:
		break;
	default:
		return -EINVAL;
	}
@@ -105,6 +102,11 @@ static int disk_ram_access_ioctl(struct disk_info *disk, uint8_t cmd, void *buff
	return 0;
}

static int disk_ram_access_init(struct disk_info *disk)
{
	return disk_ram_access_ioctl(disk, DISK_IOCTL_CTRL_INIT, NULL);
}

static int disk_ram_init(const struct device *dev)
{
	struct disk_info *info = dev->data;
Loading