11a73661bSSimon Glass /* 21a73661bSSimon Glass * (C) Copyright 2000-2004 31a73661bSSimon Glass * Wolfgang Denk, DENX Software Engineering, wd@denx.de. 41a73661bSSimon Glass * 51a73661bSSimon Glass * SPDX-License-Identifier: GPL-2.0+ 61a73661bSSimon Glass */ 71a73661bSSimon Glass 81a73661bSSimon Glass #ifndef BLK_H 91a73661bSSimon Glass #define BLK_H 101a73661bSSimon Glass 111a73661bSSimon Glass #ifdef CONFIG_SYS_64BIT_LBA 121a73661bSSimon Glass typedef uint64_t lbaint_t; 131a73661bSSimon Glass #define LBAFlength "ll" 141a73661bSSimon Glass #else 151a73661bSSimon Glass typedef ulong lbaint_t; 161a73661bSSimon Glass #define LBAFlength "l" 171a73661bSSimon Glass #endif 181a73661bSSimon Glass #define LBAF "%" LBAFlength "x" 191a73661bSSimon Glass #define LBAFU "%" LBAFlength "u" 201a73661bSSimon Glass 211a73661bSSimon Glass /* Interface types: */ 225ec4f1a5SSimon Glass enum if_type { 235ec4f1a5SSimon Glass IF_TYPE_UNKNOWN = 0, 245ec4f1a5SSimon Glass IF_TYPE_IDE, 255ec4f1a5SSimon Glass IF_TYPE_SCSI, 265ec4f1a5SSimon Glass IF_TYPE_ATAPI, 275ec4f1a5SSimon Glass IF_TYPE_USB, 285ec4f1a5SSimon Glass IF_TYPE_DOC, 295ec4f1a5SSimon Glass IF_TYPE_MMC, 305ec4f1a5SSimon Glass IF_TYPE_SD, 315ec4f1a5SSimon Glass IF_TYPE_SATA, 325ec4f1a5SSimon Glass IF_TYPE_HOST, 335ec4f1a5SSimon Glass 345ec4f1a5SSimon Glass IF_TYPE_COUNT, /* Number of interface types */ 355ec4f1a5SSimon Glass }; 361a73661bSSimon Glass 371a73661bSSimon Glass struct blk_desc { 385ec4f1a5SSimon Glass enum if_type if_type; /* type of the interface */ 39*bcce53d0SSimon Glass int devnum; /* device number */ 401a73661bSSimon Glass unsigned char part_type; /* partition type */ 411a73661bSSimon Glass unsigned char target; /* target SCSI ID */ 421a73661bSSimon Glass unsigned char lun; /* target LUN */ 431a73661bSSimon Glass unsigned char hwpart; /* HW partition, e.g. for eMMC */ 441a73661bSSimon Glass unsigned char type; /* device type */ 451a73661bSSimon Glass unsigned char removable; /* removable device */ 461a73661bSSimon Glass #ifdef CONFIG_LBA48 471a73661bSSimon Glass /* device can use 48bit addr (ATA/ATAPI v7) */ 481a73661bSSimon Glass unsigned char lba48; 491a73661bSSimon Glass #endif 501a73661bSSimon Glass lbaint_t lba; /* number of blocks */ 511a73661bSSimon Glass unsigned long blksz; /* block size */ 521a73661bSSimon Glass int log2blksz; /* for convenience: log2(blksz) */ 531a73661bSSimon Glass char vendor[40+1]; /* IDE model, SCSI Vendor */ 541a73661bSSimon Glass char product[20+1]; /* IDE Serial no, SCSI product */ 551a73661bSSimon Glass char revision[8+1]; /* firmware revision */ 561a73661bSSimon Glass unsigned long (*block_read)(struct blk_desc *block_dev, 571a73661bSSimon Glass lbaint_t start, 581a73661bSSimon Glass lbaint_t blkcnt, 591a73661bSSimon Glass void *buffer); 601a73661bSSimon Glass unsigned long (*block_write)(struct blk_desc *block_dev, 611a73661bSSimon Glass lbaint_t start, 621a73661bSSimon Glass lbaint_t blkcnt, 631a73661bSSimon Glass const void *buffer); 641a73661bSSimon Glass unsigned long (*block_erase)(struct blk_desc *block_dev, 651a73661bSSimon Glass lbaint_t start, 661a73661bSSimon Glass lbaint_t blkcnt); 671a73661bSSimon Glass void *priv; /* driver private struct pointer */ 681a73661bSSimon Glass }; 691a73661bSSimon Glass 701a73661bSSimon Glass #define BLOCK_CNT(size, blk_desc) (PAD_COUNT(size, blk_desc->blksz)) 711a73661bSSimon Glass #define PAD_TO_BLOCKSIZE(size, blk_desc) \ 721a73661bSSimon Glass (PAD_SIZE(size, blk_desc->blksz)) 731a73661bSSimon Glass 741a73661bSSimon Glass #endif 75