xref: /rk3399_rockchip-uboot/include/blk.h (revision 1a73661bc7a7ad2d741f7d7519872ca18231598c)
1*1a73661bSSimon Glass /*
2*1a73661bSSimon Glass  * (C) Copyright 2000-2004
3*1a73661bSSimon Glass  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
4*1a73661bSSimon Glass  *
5*1a73661bSSimon Glass  * SPDX-License-Identifier:	GPL-2.0+
6*1a73661bSSimon Glass  */
7*1a73661bSSimon Glass 
8*1a73661bSSimon Glass #ifndef BLK_H
9*1a73661bSSimon Glass #define BLK_H
10*1a73661bSSimon Glass 
11*1a73661bSSimon Glass #ifdef CONFIG_SYS_64BIT_LBA
12*1a73661bSSimon Glass typedef uint64_t lbaint_t;
13*1a73661bSSimon Glass #define LBAFlength "ll"
14*1a73661bSSimon Glass #else
15*1a73661bSSimon Glass typedef ulong lbaint_t;
16*1a73661bSSimon Glass #define LBAFlength "l"
17*1a73661bSSimon Glass #endif
18*1a73661bSSimon Glass #define LBAF "%" LBAFlength "x"
19*1a73661bSSimon Glass #define LBAFU "%" LBAFlength "u"
20*1a73661bSSimon Glass 
21*1a73661bSSimon Glass /* Interface types: */
22*1a73661bSSimon Glass #define IF_TYPE_UNKNOWN		0
23*1a73661bSSimon Glass #define IF_TYPE_IDE		1
24*1a73661bSSimon Glass #define IF_TYPE_SCSI		2
25*1a73661bSSimon Glass #define IF_TYPE_ATAPI		3
26*1a73661bSSimon Glass #define IF_TYPE_USB		4
27*1a73661bSSimon Glass #define IF_TYPE_DOC		5
28*1a73661bSSimon Glass #define IF_TYPE_MMC		6
29*1a73661bSSimon Glass #define IF_TYPE_SD		7
30*1a73661bSSimon Glass #define IF_TYPE_SATA		8
31*1a73661bSSimon Glass #define IF_TYPE_HOST		9
32*1a73661bSSimon Glass #define IF_TYPE_MAX		10	/* Max number of IF_TYPE_* supported */
33*1a73661bSSimon Glass 
34*1a73661bSSimon Glass struct blk_desc {
35*1a73661bSSimon Glass 	int		if_type;	/* type of the interface */
36*1a73661bSSimon Glass 	int		dev;		/* device number */
37*1a73661bSSimon Glass 	unsigned char	part_type;	/* partition type */
38*1a73661bSSimon Glass 	unsigned char	target;		/* target SCSI ID */
39*1a73661bSSimon Glass 	unsigned char	lun;		/* target LUN */
40*1a73661bSSimon Glass 	unsigned char	hwpart;		/* HW partition, e.g. for eMMC */
41*1a73661bSSimon Glass 	unsigned char	type;		/* device type */
42*1a73661bSSimon Glass 	unsigned char	removable;	/* removable device */
43*1a73661bSSimon Glass #ifdef CONFIG_LBA48
44*1a73661bSSimon Glass 	/* device can use 48bit addr (ATA/ATAPI v7) */
45*1a73661bSSimon Glass 	unsigned char	lba48;
46*1a73661bSSimon Glass #endif
47*1a73661bSSimon Glass 	lbaint_t	lba;		/* number of blocks */
48*1a73661bSSimon Glass 	unsigned long	blksz;		/* block size */
49*1a73661bSSimon Glass 	int		log2blksz;	/* for convenience: log2(blksz) */
50*1a73661bSSimon Glass 	char		vendor[40+1];	/* IDE model, SCSI Vendor */
51*1a73661bSSimon Glass 	char		product[20+1];	/* IDE Serial no, SCSI product */
52*1a73661bSSimon Glass 	char		revision[8+1];	/* firmware revision */
53*1a73661bSSimon Glass 	unsigned long	(*block_read)(struct blk_desc *block_dev,
54*1a73661bSSimon Glass 				      lbaint_t start,
55*1a73661bSSimon Glass 				      lbaint_t blkcnt,
56*1a73661bSSimon Glass 				      void *buffer);
57*1a73661bSSimon Glass 	unsigned long	(*block_write)(struct blk_desc *block_dev,
58*1a73661bSSimon Glass 				       lbaint_t start,
59*1a73661bSSimon Glass 				       lbaint_t blkcnt,
60*1a73661bSSimon Glass 				       const void *buffer);
61*1a73661bSSimon Glass 	unsigned long	(*block_erase)(struct blk_desc *block_dev,
62*1a73661bSSimon Glass 				       lbaint_t start,
63*1a73661bSSimon Glass 				       lbaint_t blkcnt);
64*1a73661bSSimon Glass 	void		*priv;		/* driver private struct pointer */
65*1a73661bSSimon Glass };
66*1a73661bSSimon Glass 
67*1a73661bSSimon Glass #define BLOCK_CNT(size, blk_desc) (PAD_COUNT(size, blk_desc->blksz))
68*1a73661bSSimon Glass #define PAD_TO_BLOCKSIZE(size, blk_desc) \
69*1a73661bSSimon Glass 	(PAD_SIZE(size, blk_desc->blksz))
70*1a73661bSSimon Glass 
71*1a73661bSSimon Glass #endif
72