blob: 1e8334c23a4dc5d2fe455759900eb500af1cb8db [file] [log] [blame]
Simon Glass1a736612016-02-29 15:25:39 -07001/*
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
12typedef uint64_t lbaint_t;
13#define LBAFlength "ll"
14#else
15typedef 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
34struct 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