summaryrefslogtreecommitdiff
path: root/FreeRTOS-Labs/Source/FreeRTOS-Plus-FAT/portable/Zynq/xsdps_info.h
diff options
context:
space:
mode:
Diffstat (limited to 'FreeRTOS-Labs/Source/FreeRTOS-Plus-FAT/portable/Zynq/xsdps_info.h')
-rw-r--r--FreeRTOS-Labs/Source/FreeRTOS-Plus-FAT/portable/Zynq/xsdps_info.h56
1 files changed, 56 insertions, 0 deletions
diff --git a/FreeRTOS-Labs/Source/FreeRTOS-Plus-FAT/portable/Zynq/xsdps_info.h b/FreeRTOS-Labs/Source/FreeRTOS-Plus-FAT/portable/Zynq/xsdps_info.h
new file mode 100644
index 000000000..94e822f96
--- /dev/null
+++ b/FreeRTOS-Labs/Source/FreeRTOS-Plus-FAT/portable/Zynq/xsdps_info.h
@@ -0,0 +1,56 @@
+/******************************************************************************
+ *
+ * mmc_decode_cid() and sd_decode_csd()
+ *
+ * analyse the meta data of an SD-card to read its capacity and some other properties.
+ *
+ * CID and CSD Analysis borrowed from the Linux kernel.
+ *
+ ******************************************************************************/
+
+#ifndef SDPS_INFO_H_
+
+#define SDPS_INFO_H_ 1
+
+#include <stdint.h>
+
+struct mmc_cid {
+ uint32_t manfid;
+ char prod_name[8];
+ uint32_t serial;
+ uint16_t oemid;
+ uint16_t year;
+ uint8_t hwrev;
+ uint8_t fwrev;
+ uint8_t month;
+};
+
+struct mmc_csd {
+ volatile uint64_t capacity_bytes;
+ uint32_t sd_last_block_address;
+ uint8_t mmca_vsn;
+ uint16_t erase_size;
+ uint8_t spare;
+ uint16_t cmdclass;
+ uint16_t tacc_clks;
+ int32_t erase_shift;
+ uint32_t tacc_ns;
+ uint32_t r2w_factor;
+ uint32_t max_dtr;
+ uint32_t read_blkbits;
+ uint32_t write_blkbits;
+ uint32_t capacity;
+ uint32_t pref_erase;
+ uint32_t read_partial : 1,
+ read_misalign : 1,
+ write_partial : 1,
+ write_misalign : 1;
+};
+
+extern struct mmc_cid myCID;
+extern struct mmc_csd myCSD;
+
+int mmc_decode_cid( const struct mmc_csd *pxCSD, struct mmc_cid *pxCID, uint32_t *raw_data );
+int sd_decode_csd( struct mmc_csd *pxCSD, uint32_t *ulResponse );
+
+#endif /* SDPS_INFO_H_ */