blk.h 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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. #ifndef BLK_H
  8. #define BLK_H
  9. #ifdef CONFIG_SYS_64BIT_LBA
  10. typedef uint64_t lbaint_t;
  11. #define LBAFlength "ll"
  12. #else
  13. typedef ulong lbaint_t;
  14. #define LBAFlength "l"
  15. #endif
  16. #define LBAF "%" LBAFlength "x"
  17. #define LBAFU "%" LBAFlength "u"
  18. /* Interface types: */
  19. enum if_type {
  20. IF_TYPE_UNKNOWN = 0,
  21. IF_TYPE_IDE,
  22. IF_TYPE_SCSI,
  23. IF_TYPE_ATAPI,
  24. IF_TYPE_USB,
  25. IF_TYPE_DOC,
  26. IF_TYPE_MMC,
  27. IF_TYPE_SD,
  28. IF_TYPE_SATA,
  29. IF_TYPE_HOST,
  30. IF_TYPE_COUNT, /* Number of interface types */
  31. };
  32. struct blk_desc {
  33. enum if_type if_type; /* type of the interface */
  34. int devnum; /* device number */
  35. unsigned char part_type; /* partition type */
  36. unsigned char target; /* target SCSI ID */
  37. unsigned char lun; /* target LUN */
  38. unsigned char hwpart; /* HW partition, e.g. for eMMC */
  39. unsigned char type; /* device type */
  40. unsigned char removable; /* removable device */
  41. #ifdef CONFIG_LBA48
  42. /* device can use 48bit addr (ATA/ATAPI v7) */
  43. unsigned char lba48;
  44. #endif
  45. lbaint_t lba; /* number of blocks */
  46. unsigned long blksz; /* block size */
  47. int log2blksz; /* for convenience: log2(blksz) */
  48. char vendor[40+1]; /* IDE model, SCSI Vendor */
  49. char product[20+1]; /* IDE Serial no, SCSI product */
  50. char revision[8+1]; /* firmware revision */
  51. unsigned long (*block_read)(struct blk_desc *block_dev,
  52. lbaint_t start,
  53. lbaint_t blkcnt,
  54. void *buffer);
  55. unsigned long (*block_write)(struct blk_desc *block_dev,
  56. lbaint_t start,
  57. lbaint_t blkcnt,
  58. const void *buffer);
  59. unsigned long (*block_erase)(struct blk_desc *block_dev,
  60. lbaint_t start,
  61. lbaint_t blkcnt);
  62. void *priv; /* driver private struct pointer */
  63. };
  64. #define BLOCK_CNT(size, blk_desc) (PAD_COUNT(size, blk_desc->blksz))
  65. #define PAD_TO_BLOCKSIZE(size, blk_desc) \
  66. (PAD_SIZE(size, blk_desc->blksz))
  67. #endif