2016-10-21 10:06:35 +08:00
|
|
|
/*
|
|
|
|
* Copyright (c) 2016 Intel Corporation.
|
|
|
|
*
|
2017-01-19 09:01:01 +08:00
|
|
|
* SPDX-License-Identifier: Apache-2.0
|
2016-10-21 10:06:35 +08:00
|
|
|
*/
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @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 _DISK_ACCESS_H_
|
|
|
|
#define _DISK_ACCESS_H_
|
|
|
|
|
2018-05-04 21:47:58 +08:00
|
|
|
#include <kernel.h>
|
Introduce new sized integer typedefs
This is a start to move away from the C99 {u}int{8,16,32,64}_t types to
Zephyr defined u{8,16,32,64}_t and s{8,16,32,64}_t. This allows Zephyr
to define the sized types in a consistent manor across all the
architectures we support and not conflict with what various compilers
and libc might do with regards to the C99 types.
We introduce <zephyr/types.h> as part of this and have it include
<stdint.h> for now until we transition all the code away from the C99
types.
We go with u{8,16,32,64}_t and s{8,16,32,64}_t as there are some
existing variables defined u8 & u16 as well as to be consistent with
Zephyr naming conventions.
Jira: ZEP-2051
Change-Id: I451fed0623b029d65866622e478225dfab2c0ca8
Signed-off-by: Kumar Gala <kumar.gala@linaro.org>
2017-04-19 23:32:08 +08:00
|
|
|
#include <zephyr/types.h>
|
2018-05-04 21:47:58 +08:00
|
|
|
#include <misc/dlist.h>
|
2016-10-21 10:06:35 +08:00
|
|
|
|
|
|
|
#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
|
|
|
|
|
2018-01-01 01:15:16 +08:00
|
|
|
/* 3 is reserved. It used to be DISK_IOCTL_GET_DISK_SIZE */
|
|
|
|
|
2016-10-21 10:06:35 +08:00
|
|
|
/* 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
|
|
|
|
|
2018-05-04 21:47:58 +08:00
|
|
|
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);
|
|
|
|
};
|
|
|
|
|
2016-10-21 10:06:35 +08:00
|
|
|
/*
|
2017-04-19 06:56:26 +08:00
|
|
|
* @brief perform any initialization
|
2016-10-21 10:06:35 +08:00
|
|
|
*
|
|
|
|
* 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
|
|
|
|
*/
|
2018-05-04 21:47:58 +08:00
|
|
|
int disk_access_init(const char *pdrv);
|
2016-10-21 10:06:35 +08:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @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
|
|
|
|
*/
|
2018-05-04 21:47:58 +08:00
|
|
|
int disk_access_status(const char *pdrv);
|
2016-10-21 10:06:35 +08:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @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
|
|
|
|
*/
|
2018-05-04 21:47:58 +08:00
|
|
|
int disk_access_read(const char *pdrv, u8_t *data_buf,
|
|
|
|
u32_t start_sector, u32_t num_sector);
|
2016-10-21 10:06:35 +08:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @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
|
|
|
|
*/
|
2018-05-04 21:47:58 +08:00
|
|
|
int disk_access_write(const char *pdrv, const u8_t *data_buf,
|
|
|
|
u32_t start_sector, u32_t num_sector);
|
2016-10-21 10:06:35 +08:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @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
|
|
|
|
*/
|
2018-05-04 21:47:58 +08:00
|
|
|
int disk_access_ioctl(const char *pdrv, u8_t cmd, void *buff);
|
|
|
|
|
|
|
|
int disk_access_register(struct disk_info *disk);
|
2016-10-21 10:06:35 +08:00
|
|
|
|
2018-05-04 21:47:58 +08:00
|
|
|
int disk_access_unregister(struct disk_info *disk);
|
2016-10-21 10:06:35 +08:00
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#endif /* _DISK_ACCESS_H_ */
|