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