Home | History | Annotate | Line # | Download | only in sys
      1 /*	$NetBSD: flashio.h,v 1.5 2021/09/16 20:17:48 andvar Exp $	*/
      2 
      3 /*-
      4  * Copyright (c) 2011 Department of Software Engineering,
      5  *		      University of Szeged, Hungary
      6  * Copyright (c) 2011 Adam Hoka <ahoka (at) NetBSD.org>
      7  * Copyright (c) 2010 David Tengeri <dtengeri (at) inf.u-szeged.hu>
      8  * All rights reserved.
      9  *
     10  * This code is derived from software contributed to The NetBSD Foundation
     11  * by the Department of Software Engineering, University of Szeged, Hungary
     12  *
     13  * Redistribution and use in source and binary forms, with or without
     14  * modification, are permitted provided that the following conditions
     15  * are met:
     16  * 1. Redistributions of source code must retain the above copyright
     17  *    notice, this list of conditions and the following disclaimer.
     18  * 2. Redistributions in binary form must reproduce the above copyright
     19  *    notice, this list of conditions and the following disclaimer in the
     20  *    documentation and/or other materials provided with the distribution.
     21  *
     22  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     23  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     24  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     25  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     26  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
     27  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     28  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
     29  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     30  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     31  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     32  * SUCH DAMAGE.
     33  */
     34 
     35 #ifndef _FLASHIO_H_
     36 #define _FLASHIO_H_
     37 
     38 #include <sys/ioctl.h>
     39 
     40 /* this header may be used from the kernel */
     41 #if defined(_KERNEL) || defined(_STANDALONE)
     42 #include <sys/types.h>
     43 #else
     44 #include <stdint.h>
     45 #include <stdbool.h>
     46 #endif
     47 
     48 enum {
     49 	FLASH_ERASE_DONE 	= 0x0,
     50 	FLASH_ERASE_FAILED	= 0x1
     51 };
     52 
     53 enum {
     54 	FLASH_TYPE_UNKNOWN	= 0x0,
     55 	FLASH_TYPE_NOR		= 0x1,
     56 	FLASH_TYPE_NAND		= 0x2
     57 };
     58 
     59 /* public userspace API */
     60 
     61 /* common integer type to address flash */
     62 typedef int64_t flash_off_t;
     63 typedef uint64_t flash_size_t;
     64 typedef uint64_t flash_addr_t;
     65 
     66 /**
     67  * struct erase_params - for ioctl erase call
     68  * @addr: start address of the erase
     69  * @len: length of the erase
     70  */
     71 struct flash_erase_params {
     72 	flash_off_t ep_addr;
     73 	flash_off_t ep_len;
     74 };
     75 
     76 struct flash_badblock_params {
     77 	flash_off_t bbp_addr;
     78 	bool bbp_isbad;
     79 };
     80 
     81 struct flash_info_params {
     82 	flash_off_t ip_flash_size;
     83 	flash_size_t ip_page_size;
     84 	flash_size_t ip_erase_size;
     85 	uint8_t ip_flash_type;
     86 };
     87 
     88 struct flash_dump_params {
     89 	flash_off_t dp_block;
     90 	flash_off_t dp_len;
     91 	uint8_t *dp_buf;
     92 };
     93 
     94 enum {
     95 	FLASH_IOCTL_ERASE_BLOCK,
     96 	FLASH_IOCTL_DUMP,
     97 	FLASH_IOCTL_GET_INFO,
     98 	FLASH_IOCTL_BLOCK_ISBAD,
     99 	FLASH_IOCTL_BLOCK_MARKBAD
    100 };
    101 
    102 #define FLASH_ERASE_BLOCK 	\
    103 	_IOW('&', FLASH_IOCTL_ERASE_BLOCK, struct flash_erase_params)
    104 
    105 #define FLASH_DUMP		\
    106 	_IOWR('&', FLASH_IOCTL_DUMP, struct flash_dump_params)
    107 
    108 #define FLASH_GET_INFO		\
    109 	_IOWR('&', FLASH_IOCTL_GET_INFO, struct flash_info_params)
    110 
    111 #define FLASH_BLOCK_ISBAD 	\
    112 	_IOWR('&', FLASH_IOCTL_BLOCK_ISBAD, struct flash_badblock_params)
    113 
    114 #define FLASH_BLOCK_MARKBAD	\
    115 	_IOW('&', FLASH_IOCTL_BLOCK_MARKBAD, struct flash_badblock_params)
    116 
    117 #endif
    118 
    119