Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 | /* * Copyright (c) 2016 Intel Corporation. * * SPDX-License-Identifier: Apache-2.0 */ /** * @file * @brief Disk Access layer APIs and defines * * This file contains APIs for disk access. Apart from disks, various * other storage media like Flash and RAM disks may implement this interface to * be used by various higher layers(consumers) like USB Mass storage * and Filesystems. */ #ifndef ZEPHYR_INCLUDE_DISK_ACCESS_H_ #define ZEPHYR_INCLUDE_DISK_ACCESS_H_ #include <kernel.h> #include <zephyr/types.h> #include <misc/dlist.h> #ifdef __cplusplus extern "C" { #endif /* Possible Cmd Codes for disk_ioctl() */ /* Get the number of sectors in the disk */ #define DISK_IOCTL_GET_SECTOR_COUNT 1 /* Get the size of a disk SECTOR in bytes */ #define DISK_IOCTL_GET_SECTOR_SIZE 2 /* How many sectors constitute a FLASH Erase block */ #define DISK_IOCTL_GET_ERASE_BLOCK_SZ 4 /* Commit any cached read/writes to disk */ #define DISK_IOCTL_CTRL_SYNC 5 /* 3 is reserved. It used to be DISK_IOCTL_GET_DISK_SIZE */ /* Possible return bitmasks for disk_status() */ #define DISK_STATUS_OK 0x00 #define DISK_STATUS_UNINIT 0x01 #define DISK_STATUS_NOMEDIA 0x02 #define DISK_STATUS_WR_PROTECT 0x04 struct disk_operations; struct disk_info { sys_dnode_t node; char *name; const struct disk_operations *ops; }; struct disk_operations { int (*init)(struct disk_info *disk); int (*status)(struct disk_info *disk); int (*read)(struct disk_info *disk, u8_t *data_buf, u32_t start_sector, u32_t num_sector); int (*write)(struct disk_info *disk, const u8_t *data_buf, u32_t start_sector, u32_t num_sector); int (*ioctl)(struct disk_info *disk, u8_t cmd, void *buff); }; /* * @brief perform any initialization * * This call is made by the consumer before doing any IO calls so that the * disk or the backing device can do any initialization. * * @return 0 on success, negative errno code on fail */ int disk_access_init(const char *pdrv); /* * @brief Get the status of disk * * This call is used to get the status of the disk * * @return DISK_STATUS_OK or other DISK_STATUS_*s */ int disk_access_status(const char *pdrv); /* * @brief read data from disk * * Function to read data from disk to a memory buffer. * * @param[in] data_buf Pointer to the memory buffer to put data. * @param[in] start_sector Start disk sector to read from * @param[in] num_sector Number of disk sectors to read * * @return 0 on success, negative errno code on fail */ int disk_access_read(const char *pdrv, u8_t *data_buf, u32_t start_sector, u32_t num_sector); /* * @brief write data to disk * * Function write data from memory buffer to disk. * * @param[in] data_buf Pointer to the memory buffer * @param[in] start_sector Start disk sector to write to * @param[in] num_sector Number of disk sectors to write * * @return 0 on success, negative errno code on fail */ int disk_access_write(const char *pdrv, const u8_t *data_buf, u32_t start_sector, u32_t num_sector); /* * @brief Get/Configure disk parameters * * Function to get disk parameters and make any special device requests. * * @param[in] cmd DISK_IOCTL_* code describing the request * * @return 0 on success, negative errno code on fail */ int disk_access_ioctl(const char *pdrv, u8_t cmd, void *buff); int disk_access_register(struct disk_info *disk); int disk_access_unregister(struct disk_info *disk); #ifdef __cplusplus } #endif #endif /* ZEPHYR_INCLUDE_DISK_ACCESS_H_ */ |