Skip to content
Snippets Groups Projects
blk.h 1.93 KiB
Newer Older
  • Learn to ignore specific revisions
  • /*
     * (C) Copyright 2000-2004
     * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
     *
     * SPDX-License-Identifier:	GPL-2.0+
     */
    
    #ifndef BLK_H
    #define BLK_H
    
    #ifdef CONFIG_SYS_64BIT_LBA
    typedef uint64_t lbaint_t;
    #define LBAFlength "ll"
    #else
    typedef ulong lbaint_t;
    #define LBAFlength "l"
    #endif
    #define LBAF "%" LBAFlength "x"
    #define LBAFU "%" LBAFlength "u"
    
    /* Interface types: */
    
    enum if_type {
    	IF_TYPE_UNKNOWN = 0,
    	IF_TYPE_IDE,
    	IF_TYPE_SCSI,
    	IF_TYPE_ATAPI,
    	IF_TYPE_USB,
    	IF_TYPE_DOC,
    	IF_TYPE_MMC,
    	IF_TYPE_SD,
    	IF_TYPE_SATA,
    	IF_TYPE_HOST,
    
    	IF_TYPE_COUNT,			/* Number of interface types */
    };
    
    
    struct blk_desc {
    
    	enum if_type	if_type;	/* type of the interface */
    
    	int		devnum;		/* device number */
    
    	unsigned char	part_type;	/* partition type */
    	unsigned char	target;		/* target SCSI ID */
    	unsigned char	lun;		/* target LUN */
    	unsigned char	hwpart;		/* HW partition, e.g. for eMMC */
    	unsigned char	type;		/* device type */
    	unsigned char	removable;	/* removable device */
    #ifdef CONFIG_LBA48
    	/* device can use 48bit addr (ATA/ATAPI v7) */
    	unsigned char	lba48;
    #endif
    	lbaint_t	lba;		/* number of blocks */
    	unsigned long	blksz;		/* block size */
    	int		log2blksz;	/* for convenience: log2(blksz) */
    	char		vendor[40+1];	/* IDE model, SCSI Vendor */
    	char		product[20+1];	/* IDE Serial no, SCSI product */
    	char		revision[8+1];	/* firmware revision */
    	unsigned long	(*block_read)(struct blk_desc *block_dev,
    				      lbaint_t start,
    				      lbaint_t blkcnt,
    				      void *buffer);
    	unsigned long	(*block_write)(struct blk_desc *block_dev,
    				       lbaint_t start,
    				       lbaint_t blkcnt,
    				       const void *buffer);
    	unsigned long	(*block_erase)(struct blk_desc *block_dev,
    				       lbaint_t start,
    				       lbaint_t blkcnt);
    	void		*priv;		/* driver private struct pointer */
    };
    
    #define BLOCK_CNT(size, blk_desc) (PAD_COUNT(size, blk_desc->blksz))
    #define PAD_TO_BLOCKSIZE(size, blk_desc) \
    	(PAD_SIZE(size, blk_desc->blksz))
    
    #endif