summaryrefslogtreecommitdiff
path: root/src/include
diff options
context:
space:
mode:
authorXiang Wang <merle@hardenedlinux.org>2019-08-27 15:57:23 +0800
committerPatrick Georgi <pgeorgi@google.com>2019-11-14 11:38:38 +0000
commitb134945ec1fd367c00cc641e929f9e39c8351df9 (patch)
tree7c77ac952134758498f612659083c66eb5efd0b5 /src/include
parentb23f392766eb3263a8bb530b8a71edbd779c1dce (diff)
drivers/spi: add drivers for sdcard mounted on the spi bus
Currently supports initialization, read, write, and erase operations. Tested on HiFive Uneashed implementation follows SD association's SPI access protocol, found as doc http://t.cn/AiB8quFZ Change-Id: I464d2334b8227e448c1c7e324c0455023cffb72a Signed-off-by: Xiang Wang <merle@hardenedlinux.org> Reviewed-on: https://review.coreboot.org/c/coreboot/+/35118 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Patrick Georgi <pgeorgi@google.com>
Diffstat (limited to 'src/include')
-rw-r--r--src/include/spi_sdcard.h60
1 files changed, 60 insertions, 0 deletions
diff --git a/src/include/spi_sdcard.h b/src/include/spi_sdcard.h
new file mode 100644
index 0000000000..ca0dd1d10a
--- /dev/null
+++ b/src/include/spi_sdcard.h
@@ -0,0 +1,60 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2019 HardenedLinux
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+#ifndef _SPI_SDCARD_H_
+#define _SPI_SDCARD_H_
+
+struct spi_sdcard {
+ int type;
+ struct spi_slave slave;
+};
+
+int spi_sdcard_init(struct spi_sdcard *card,
+ const unsigned int bus,
+ const unsigned int cs);
+
+int spi_sdcard_single_read(const struct spi_sdcard *card,
+ size_t block_address,
+ void *buff);
+
+int spi_sdcard_multiple_read(const struct spi_sdcard *card,
+ size_t start_block_address,
+ size_t end_block_address,
+ void *buff);
+
+int spi_sdcard_single_write(const struct spi_sdcard *card,
+ size_t block_address,
+ void *buff);
+
+int spi_sdcard_read(const struct spi_sdcard *card,
+ void *dest,
+ size_t offset,
+ size_t count);
+
+int spi_sdcard_multiple_write(const struct spi_sdcard *card,
+ size_t start_block_address,
+ size_t end_block_address,
+ void *buff);
+
+int spi_sdcard_erase(const struct spi_sdcard *card,
+ size_t start_block_address,
+ size_t end_block_address);
+
+int spi_sdcard_erase_all(const struct spi_sdcard *card);
+
+/* get the sdcard size in bytes */
+size_t spi_sdcard_size(const struct spi_sdcard *card);
+
+#endif /* _SPI_SDCARD_H_ */