aboutsummaryrefslogtreecommitdiff
path: root/platform
diff options
context:
space:
mode:
authorGurjant Kalsi <me@gurjantkalsi.com>2016-05-10 18:22:08 -0700
committerGurjant Kalsi <me@gurjantkalsi.com>2016-05-10 18:22:08 -0700
commiteaa41e1cb2cddcccf2fe20d151e6707bad32c62f (patch)
treed4f53cc4e10deec315cf8def9d3c9f12e1ab7f8a /platform
parent62c4f983ef5094f55b859c77b56a94cd495e3c9a (diff)
downloadcommon-eaa41e1cb2cddcccf2fe20d151e6707bad32c62f.tar.gz
[qspi][stm32f7] Implement IOCtl to test whether device is in linear mode.
Diffstat (limited to 'platform')
-rw-r--r--platform/stm32f7xx/qspi.c22
1 files changed, 18 insertions, 4 deletions
diff --git a/platform/stm32f7xx/qspi.c b/platform/stm32f7xx/qspi.c
index c670a4ab..1b20df3b 100644
--- a/platform/stm32f7xx/qspi.c
+++ b/platform/stm32f7xx/qspi.c
@@ -81,8 +81,9 @@ static HAL_StatusTypeDef qspi_cmd(QSPI_HandleTypeDef *, QSPI_CommandTypeDef *);
static HAL_StatusTypeDef qspi_tx_dma(QSPI_HandleTypeDef *, QSPI_CommandTypeDef *, uint8_t *);
static HAL_StatusTypeDef qspi_rx_dma(QSPI_HandleTypeDef *, QSPI_CommandTypeDef *, uint8_t *);
-status_t qspi_enable_linear(void);
-status_t qspi_disable_linear(void);
+static status_t qspi_enable_linear(void);
+static status_t qspi_disable_linear(void);
+static bool qspi_is_linear(void);
status_t qspi_dma_init(QSPI_HandleTypeDef *hqspi);
@@ -476,6 +477,10 @@ static int spiflash_ioctl(struct bdev *device, int request, void *argp)
case BIO_IOCTL_PUT_MEM_MAP:
ret = qspi_disable_linear();
break;
+ case BIO_IOCTL_IS_MAPPED:
+ if (argp)
+ *(void **)argp = (void *)qspi_is_linear();
+ break;
default:
ret = ERR_NOT_SUPPORTED;
}
@@ -996,7 +1001,7 @@ static uint32_t get_specialized_instruction(uint32_t instruction, uint32_t addre
return instruction;
}
-status_t qspi_enable_linear(void)
+static status_t qspi_enable_linear(void)
{
status_t result = NO_ERROR;
@@ -1042,7 +1047,7 @@ finish:
}
-status_t qspi_disable_linear(void)
+static status_t qspi_disable_linear(void)
{
status_t result = NO_ERROR;
@@ -1065,4 +1070,13 @@ status_t qspi_disable_linear(void)
finish:
mutex_release(&spiflash_mutex);
return result;
+}
+
+static bool qspi_is_linear(void)
+{
+ bool result;
+ mutex_acquire(&spiflash_mutex);
+ result = (QSPI_STATE_LINEAR == device_state);
+ mutex_release(&spiflash_mutex);
+ return result;
} \ No newline at end of file