xref: /rk3399_rockchip-uboot/include/blk.h (revision bcce53d048de7f41078d25e39aa2f26d752d3658)
11a73661bSSimon Glass /*
21a73661bSSimon Glass  * (C) Copyright 2000-2004
31a73661bSSimon Glass  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
41a73661bSSimon Glass  *
51a73661bSSimon Glass  * SPDX-License-Identifier:	GPL-2.0+
61a73661bSSimon Glass  */
71a73661bSSimon Glass 
81a73661bSSimon Glass #ifndef BLK_H
91a73661bSSimon Glass #define BLK_H
101a73661bSSimon Glass 
111a73661bSSimon Glass #ifdef CONFIG_SYS_64BIT_LBA
121a73661bSSimon Glass typedef uint64_t lbaint_t;
131a73661bSSimon Glass #define LBAFlength "ll"
141a73661bSSimon Glass #else
151a73661bSSimon Glass typedef ulong lbaint_t;
161a73661bSSimon Glass #define LBAFlength "l"
171a73661bSSimon Glass #endif
181a73661bSSimon Glass #define LBAF "%" LBAFlength "x"
191a73661bSSimon Glass #define LBAFU "%" LBAFlength "u"
201a73661bSSimon Glass 
211a73661bSSimon Glass /* Interface types: */
225ec4f1a5SSimon Glass enum if_type {
235ec4f1a5SSimon Glass 	IF_TYPE_UNKNOWN = 0,
245ec4f1a5SSimon Glass 	IF_TYPE_IDE,
255ec4f1a5SSimon Glass 	IF_TYPE_SCSI,
265ec4f1a5SSimon Glass 	IF_TYPE_ATAPI,
275ec4f1a5SSimon Glass 	IF_TYPE_USB,
285ec4f1a5SSimon Glass 	IF_TYPE_DOC,
295ec4f1a5SSimon Glass 	IF_TYPE_MMC,
305ec4f1a5SSimon Glass 	IF_TYPE_SD,
315ec4f1a5SSimon Glass 	IF_TYPE_SATA,
325ec4f1a5SSimon Glass 	IF_TYPE_HOST,
335ec4f1a5SSimon Glass 
345ec4f1a5SSimon Glass 	IF_TYPE_COUNT,			/* Number of interface types */
355ec4f1a5SSimon Glass };
361a73661bSSimon Glass 
371a73661bSSimon Glass struct blk_desc {
385ec4f1a5SSimon Glass 	enum if_type	if_type;	/* type of the interface */
39*bcce53d0SSimon Glass 	int		devnum;		/* device number */
401a73661bSSimon Glass 	unsigned char	part_type;	/* partition type */
411a73661bSSimon Glass 	unsigned char	target;		/* target SCSI ID */
421a73661bSSimon Glass 	unsigned char	lun;		/* target LUN */
431a73661bSSimon Glass 	unsigned char	hwpart;		/* HW partition, e.g. for eMMC */
441a73661bSSimon Glass 	unsigned char	type;		/* device type */
451a73661bSSimon Glass 	unsigned char	removable;	/* removable device */
461a73661bSSimon Glass #ifdef CONFIG_LBA48
471a73661bSSimon Glass 	/* device can use 48bit addr (ATA/ATAPI v7) */
481a73661bSSimon Glass 	unsigned char	lba48;
491a73661bSSimon Glass #endif
501a73661bSSimon Glass 	lbaint_t	lba;		/* number of blocks */
511a73661bSSimon Glass 	unsigned long	blksz;		/* block size */
521a73661bSSimon Glass 	int		log2blksz;	/* for convenience: log2(blksz) */
531a73661bSSimon Glass 	char		vendor[40+1];	/* IDE model, SCSI Vendor */
541a73661bSSimon Glass 	char		product[20+1];	/* IDE Serial no, SCSI product */
551a73661bSSimon Glass 	char		revision[8+1];	/* firmware revision */
561a73661bSSimon Glass 	unsigned long	(*block_read)(struct blk_desc *block_dev,
571a73661bSSimon Glass 				      lbaint_t start,
581a73661bSSimon Glass 				      lbaint_t blkcnt,
591a73661bSSimon Glass 				      void *buffer);
601a73661bSSimon Glass 	unsigned long	(*block_write)(struct blk_desc *block_dev,
611a73661bSSimon Glass 				       lbaint_t start,
621a73661bSSimon Glass 				       lbaint_t blkcnt,
631a73661bSSimon Glass 				       const void *buffer);
641a73661bSSimon Glass 	unsigned long	(*block_erase)(struct blk_desc *block_dev,
651a73661bSSimon Glass 				       lbaint_t start,
661a73661bSSimon Glass 				       lbaint_t blkcnt);
671a73661bSSimon Glass 	void		*priv;		/* driver private struct pointer */
681a73661bSSimon Glass };
691a73661bSSimon Glass 
701a73661bSSimon Glass #define BLOCK_CNT(size, blk_desc) (PAD_COUNT(size, blk_desc->blksz))
711a73661bSSimon Glass #define PAD_TO_BLOCKSIZE(size, blk_desc) \
721a73661bSSimon Glass 	(PAD_SIZE(size, blk_desc->blksz))
731a73661bSSimon Glass 
741a73661bSSimon Glass #endif
75