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 72