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