LCOV - code coverage report
Current view: top level - zephyr/drivers - disk.h Hit Total Coverage
Test: new.info Lines: 21 26 80.8 %
Date: 2024-12-22 00:14:23

          Line data    Source code
       1           1 : /*
       2             :  * Copyright (c) 2016 Intel Corporation.
       3             :  * Copyright (c) 2021 Nordic Semiconductor ASA
       4             :  *
       5             :  * SPDX-License-Identifier: Apache-2.0
       6             :  */
       7             : 
       8             : /**
       9             :  * @file
      10             :  * @brief Disk Driver Interface
      11             :  *
      12             :  * This file contains interface for disk access. Apart from disks, various
      13             :  * other storage media like Flash and RAM disks may implement this interface to
      14             :  * be used by various higher layers(consumers) like USB Mass storage
      15             :  * and Filesystems.
      16             :  */
      17             : 
      18             : #ifndef ZEPHYR_INCLUDE_DRIVERS_DISK_H_
      19             : #define ZEPHYR_INCLUDE_DRIVERS_DISK_H_
      20             : 
      21             : /**
      22             :  * @brief Disk Driver Interface
      23             :  * @defgroup disk_driver_interface Disk Driver Interface
      24             :  * @since 1.6
      25             :  * @version 1.0.0
      26             :  * @ingroup io_interfaces
      27             :  * @{
      28             :  */
      29             : 
      30             : #include <zephyr/kernel.h>
      31             : #include <zephyr/types.h>
      32             : #include <zephyr/sys/dlist.h>
      33             : 
      34             : #ifdef __cplusplus
      35             : extern "C" {
      36             : #endif
      37             : 
      38             : /**
      39             :  * @brief Possible Cmd Codes for disk_ioctl()
      40             :  */
      41             : 
      42             : /** Get the number of sectors in the disk  */
      43           1 : #define DISK_IOCTL_GET_SECTOR_COUNT             1
      44             : /** Get the size of a disk SECTOR in bytes */
      45           1 : #define DISK_IOCTL_GET_SECTOR_SIZE              2
      46             : /** reserved. It used to be DISK_IOCTL_GET_DISK_SIZE */
      47           1 : #define DISK_IOCTL_RESERVED                     3
      48             : /** How many  sectors constitute a FLASH Erase block */
      49           1 : #define DISK_IOCTL_GET_ERASE_BLOCK_SZ           4
      50             : /** Commit any cached read/writes to disk */
      51           1 : #define DISK_IOCTL_CTRL_SYNC                    5
      52             : /** Initialize the disk. This IOCTL must be issued before the disk can be
      53             :  * used for I/O. It is reference counted, so only the first successful
      54             :  * invocation of this macro on an uninitialized disk will initialize the IO
      55             :  * device
      56             :  */
      57           1 : #define DISK_IOCTL_CTRL_INIT                    6
      58             : /** Deinitialize the disk. This IOCTL can be used to de-initialize the disk,
      59             :  * enabling it to be removed from the system if the disk is hot-pluggable.
      60             :  * Disk usage is reference counted, so for a given disk the
      61             :  * `DISK_IOCTL_CTRL_DEINIT` IOCTL must be issued as many times as the
      62             :  * `DISK_IOCTL_CTRL_INIT` IOCTL was issued in order to de-initialize it.
      63             :  *
      64             :  * This macro optionally accepts a pointer to a boolean as the `buf` parameter,
      65             :  * which if true indicates the disk should be forcibly stopped, ignoring all
      66             :  * reference counts. The disk driver must report success if a forced stop is
      67             :  * requested, but this operation is inherently unsafe.
      68             :  */
      69           1 : #define DISK_IOCTL_CTRL_DEINIT                  7
      70             : 
      71             : /**
      72             :  * @brief Possible return bitmasks for disk_status()
      73             :  */
      74             : 
      75             : /** Disk status okay */
      76           1 : #define DISK_STATUS_OK                  0x00
      77             : /** Disk status uninitialized */
      78           1 : #define DISK_STATUS_UNINIT              0x01
      79             : /** Disk status no media */
      80           1 : #define DISK_STATUS_NOMEDIA             0x02
      81             : /** Disk status write protected */
      82           1 : #define DISK_STATUS_WR_PROTECT          0x04
      83             : 
      84             : struct disk_operations;
      85             : 
      86             : /**
      87             :  * @brief Disk info
      88             :  */
      89           1 : struct disk_info {
      90             :         /** Internally used list node */
      91           1 :         sys_dnode_t node;
      92             :         /** Disk name */
      93           1 :         const char *name;
      94             :         /** Disk operations */
      95           1 :         const struct disk_operations *ops;
      96             :         /** Device associated to this disk */
      97           1 :         const struct device *dev;
      98             :         /** Internally used disk reference count */
      99           1 :         uint16_t refcnt;
     100             : };
     101             : 
     102             : /**
     103             :  * @brief Disk operations
     104             :  */
     105           1 : struct disk_operations {
     106           0 :         int (*init)(struct disk_info *disk);
     107           0 :         int (*status)(struct disk_info *disk);
     108           0 :         int (*read)(struct disk_info *disk, uint8_t *data_buf,
     109             :                     uint32_t start_sector, uint32_t num_sector);
     110           0 :         int (*write)(struct disk_info *disk, const uint8_t *data_buf,
     111             :                      uint32_t start_sector, uint32_t num_sector);
     112           0 :         int (*ioctl)(struct disk_info *disk, uint8_t cmd, void *buff);
     113             : };
     114             : 
     115             : /**
     116             :  * @brief Register disk
     117             :  *
     118             :  * @param[in] disk Pointer to the disk info structure
     119             :  *
     120             :  * @return 0 on success, negative errno code on fail
     121             :  */
     122           1 : int disk_access_register(struct disk_info *disk);
     123             : 
     124             : /**
     125             :  * @brief Unregister disk
     126             :  *
     127             :  * @param[in] disk Pointer to the disk info structure
     128             :  *
     129             :  * @return 0 on success, negative errno code on fail
     130             :  */
     131           1 : int disk_access_unregister(struct disk_info *disk);
     132             : 
     133             : #ifdef __cplusplus
     134             : }
     135             : #endif
     136             : 
     137             : /**
     138             :  * @}
     139             :  */
     140             : 
     141             : #endif /* ZEPHYR_INCLUDE_DRIVERS_DISK_H_ */

Generated by: LCOV version 1.14