lkml.org 
[lkml]   [2016]   [Aug]   [31]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 46/46] mtd/nandsim: Add ioctl for info
    Date
    Add a ioctl() call for nandsim information.
    This information includes, nand id, backend type
    and path to the file if the file backend is used

    Signed-off-by: Daniel Walter <dwalter@sigma-star.at>
    ---
    drivers/mtd/nand/nandsim.c | 65 +++++++++++++++++++++++++++++++++++++++++
    include/uapi/mtd/nandsim-user.h | 11 +++++++
    2 files changed, 76 insertions(+)

    diff --git a/drivers/mtd/nand/nandsim.c b/drivers/mtd/nand/nandsim.c
    index b50568f..e544d94 100644
    --- a/drivers/mtd/nand/nandsim.c
    +++ b/drivers/mtd/nand/nandsim.c
    @@ -2893,6 +2893,56 @@ out:
    return ret;
    }

    +static void ns_put_device(struct mtd_info *);
    +static int ns_get_device(struct mtd_info *);
    +
    +static int ns_ctrl_info_instance(struct ns_info_instance_req *req)
    +{
    + struct mtd_info *nsmtd;
    + int id = req->id, ret = 0;
    + struct nand_chip *chip;
    + struct nandsim *ns;
    + struct ns_file_data *file_data;
    + char buf[NANDSIM_FILENAME_SIZE];
    + char *tmp;
    +
    + if (id < 0 || id >= NANDSIM_MAX_DEVICES)
    + return -EINVAL;
    +
    + mutex_lock(&ns_mtd_mutex);
    + nsmtd = ns_mtds[id];
    + if (nsmtd) {
    + ret = ns_get_device(nsmtd);
    + if (ret)
    + goto out;
    + chip = mtd_to_nand(nsmtd);
    + ns = nand_get_controller_data(chip);
    + req->no_oob = ns->no_oob;
    + memcpy(req->id_bytes, ns->ids, 8);
    + req->parts_num = ns->nbparts;
    + if (ns->bops == &ns_cachefile_bops) {
    + req->backend = NANDSIM_BACKEND_CACHEFILE;
    + } else if (ns->bops == &ns_file_bops) {
    + req->backend = NANDSIM_BACKEND_FILE;
    + file_data = ns->backend_data;
    + tmp = d_path(&file_data->file->f_path, buf, NANDSIM_FILENAME_SIZE);
    + memcpy(req->filename, tmp, NANDSIM_FILENAME_SIZE);
    + } else if (ns->bops == &ns_ram_bops) {
    + req->backend = NANDSIM_BACKEND_RAM;
    + } else {
    + req->backend = -1;
    + }
    +
    + ns_put_device(nsmtd);
    + } else {
    + ret = -EINVAL;
    + }
    +out:
    + mutex_unlock(&ns_mtd_mutex);
    + return ret;
    +
    +}
    +
    static long ns_ctrl_ioctl(struct file *file, unsigned int cmd,
    unsigned long arg)
    {
    @@ -2931,6 +2981,21 @@ static long ns_ctrl_ioctl(struct file *file, unsigned int cmd,
    ret = ns_ctrl_destroy_instance(&req);
    break;
    }
    + case NANDSIM_IOC_INFO_INSTANCE:
    + {
    + struct ns_info_instance_req req;
    +
    + ret = copy_from_user(&req, argp, sizeof(struct ns_info_instance_req));
    + if (ret) {
    + ret = -EFAULT;
    + goto out;
    + }
    + ret = ns_ctrl_info_instance(&req);
    + if (ret)
    + goto out;
    + ret = copy_to_user(argp, &req, sizeof(struct ns_info_instance_req));
    + break;
    + }

    default:
    ret = -ENOTTY;
    diff --git a/include/uapi/mtd/nandsim-user.h b/include/uapi/mtd/nandsim-user.h
    index 14ab42a..2351124 100644
    --- a/include/uapi/mtd/nandsim-user.h
    +++ b/include/uapi/mtd/nandsim-user.h
    @@ -7,9 +7,11 @@

    #define NANDSIM_IOC_NEW_INSTANCE _IOW(NANDSIM_IOC_MAGIC, 0, struct ns_new_instance_req)
    #define NANDSIM_IOC_DESTROY_INSTANCE _IOW(NANDSIM_IOC_MAGIC, 1, struct ns_destroy_instance_req)
    +#define NANDSIM_IOC_INFO_INSTANCE _IOW(NANDSIM_IOC_MAGIC, 2, struct ns_info_instance_req)

    #define NANDSIM_MAX_DEVICES 32
    #define NANDSIM_MAX_PARTS 32
    +#define NANDSIM_FILENAME_SIZE 64

    enum ns_backend_type {
    NANDSIM_BACKEND_RAM = 0,
    @@ -99,4 +101,13 @@ struct ns_destroy_instance_req {
    __s8 padding[7];
    } __packed;

    +struct ns_info_instance_req {
    + __s8 id;
    + __s8 no_oob;
    + __s8 id_bytes[8];
    + __s8 parts_num;
    + __s8 backend;
    + __u8 filename[NANDSIM_FILENAME_SIZE];
    +} __packed;
    +
    #endif /* __NANDSIM_USER_H__ */
    --
    2.8.3
    \
     
     \ /
      Last update: 2016-09-17 09:58    [W:2.292 / U:0.032 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site