aboutsummaryrefslogtreecommitdiffstats
path: root/os/hal
diff options
context:
space:
mode:
authorGiovanni Di Sirio <gdisirio@gmail.com>2016-06-07 13:10:04 +0000
committerGiovanni Di Sirio <gdisirio@gmail.com>2016-06-07 13:10:04 +0000
commit02d65c01db18d4460e421242e4be82b25a723ad0 (patch)
treece0b5928a26ad79453a457f607be05d949321363 /os/hal
parentafc0508c0b98188ecd6467391cd8043f0ba9ff57 (diff)
downloadChibiOS-02d65c01db18d4460e421242e4be82b25a723ad0.tar.gz
ChibiOS-02d65c01db18d4460e421242e4be82b25a723ad0.tar.bz2
ChibiOS-02d65c01db18d4460e421242e4be82b25a723ad0.zip
Configuration cleanup on stop in the entire HAL.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@9601 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'os/hal')
-rw-r--r--os/hal/src/hal_adc.c6
-rw-r--r--os/hal/src/hal_can.c1
-rw-r--r--os/hal/src/hal_dac.c3
-rw-r--r--os/hal/src/hal_ext.c6
-rw-r--r--os/hal/src/hal_gpt.c6
-rw-r--r--os/hal/src/hal_i2c.c8
-rw-r--r--os/hal/src/hal_i2s.c6
-rw-r--r--os/hal/src/hal_icu.c6
-rw-r--r--os/hal/src/hal_mac.c6
-rw-r--r--os/hal/src/hal_mmc_spi.c3
-rw-r--r--os/hal/src/hal_pwm.c4
-rw-r--r--os/hal/src/hal_qspi.c3
-rw-r--r--os/hal/src/hal_sdc.c6
-rw-r--r--os/hal/src/hal_serial.c6
-rw-r--r--os/hal/src/hal_serial_usb.c5
-rw-r--r--os/hal/src/hal_spi.c6
-rw-r--r--os/hal/src/hal_uart.c5
-rw-r--r--os/hal/src/hal_usb.c6
-rw-r--r--os/hal/src/hal_wdg.c6
19 files changed, 80 insertions, 18 deletions
diff --git a/os/hal/src/hal_adc.c b/os/hal/src/hal_adc.c
index 0945ea9f2..222aaea4f 100644
--- a/os/hal/src/hal_adc.c
+++ b/os/hal/src/hal_adc.c
@@ -117,10 +117,14 @@ void adcStop(ADCDriver *adcp) {
osalDbgCheck(adcp != NULL);
osalSysLock();
+
osalDbgAssert((adcp->state == ADC_STOP) || (adcp->state == ADC_READY),
"invalid state");
+
adc_lld_stop(adcp);
- adcp->state = ADC_STOP;
+ adcp->config = NULL;
+ adcp->state = ADC_STOP;
+
osalSysUnlock();
}
diff --git a/os/hal/src/hal_can.c b/os/hal/src/hal_can.c
index 173700afd..08cf7cc5e 100644
--- a/os/hal/src/hal_can.c
+++ b/os/hal/src/hal_can.c
@@ -129,6 +129,7 @@ void canStop(CANDriver *canp) {
/* The low level driver is stopped.*/
can_lld_stop(canp);
+ canp->config = NULL;
canp->state = CAN_STOP;
/* Threads waiting on CAN APIs are notified that the driver has been
diff --git a/os/hal/src/hal_dac.c b/os/hal/src/hal_dac.c
index 3496bead5..0297f9bd4 100644
--- a/os/hal/src/hal_dac.c
+++ b/os/hal/src/hal_dac.c
@@ -125,7 +125,8 @@ void dacStop(DACDriver *dacp) {
"invalid state");
dac_lld_stop(dacp);
- dacp->state = DAC_STOP;
+ dacp->config = NULL;
+ dacp->state = DAC_STOP;
osalSysUnlock();
}
diff --git a/os/hal/src/hal_ext.c b/os/hal/src/hal_ext.c
index 9d0c6ff33..658640e31 100644
--- a/os/hal/src/hal_ext.c
+++ b/os/hal/src/hal_ext.c
@@ -106,10 +106,14 @@ void extStop(EXTDriver *extp) {
osalDbgCheck(extp != NULL);
osalSysLock();
+
osalDbgAssert((extp->state == EXT_STOP) || (extp->state == EXT_ACTIVE),
"invalid state");
+
ext_lld_stop(extp);
- extp->state = EXT_STOP;
+ extp->config = NULL;
+ extp->state = EXT_STOP;
+
osalSysUnlock();
}
diff --git a/os/hal/src/hal_gpt.c b/os/hal/src/hal_gpt.c
index cd08a2779..b224fc5fb 100644
--- a/os/hal/src/hal_gpt.c
+++ b/os/hal/src/hal_gpt.c
@@ -104,10 +104,14 @@ void gptStop(GPTDriver *gptp) {
osalDbgCheck(gptp != NULL);
osalSysLock();
+
osalDbgAssert((gptp->state == GPT_STOP) || (gptp->state == GPT_READY),
"invalid state");
+
gpt_lld_stop(gptp);
- gptp->state = GPT_STOP;
+ gptp->config = NULL;
+ gptp->state = GPT_STOP;
+
osalSysUnlock();
}
diff --git a/os/hal/src/hal_i2c.c b/os/hal/src/hal_i2c.c
index 30e8809a1..54a362f0c 100644
--- a/os/hal/src/hal_i2c.c
+++ b/os/hal/src/hal_i2c.c
@@ -113,12 +113,16 @@ void i2cStart(I2CDriver *i2cp, const I2CConfig *config) {
void i2cStop(I2CDriver *i2cp) {
osalDbgCheck(i2cp != NULL);
+
+ osalSysLock();
+
osalDbgAssert((i2cp->state == I2C_STOP) || (i2cp->state == I2C_READY) ||
(i2cp->state == I2C_LOCKED), "invalid state");
- osalSysLock();
i2c_lld_stop(i2cp);
- i2cp->state = I2C_STOP;
+ i2cp->config = NULL;
+ i2cp->state = I2C_STOP;
+
osalSysUnlock();
}
diff --git a/os/hal/src/hal_i2s.c b/os/hal/src/hal_i2s.c
index 2434e8477..e34068bf5 100644
--- a/os/hal/src/hal_i2s.c
+++ b/os/hal/src/hal_i2s.c
@@ -104,10 +104,14 @@ void i2sStop(I2SDriver *i2sp) {
osalDbgCheck(i2sp != NULL);
osalSysLock();
+
osalDbgAssert((i2sp->state == I2S_STOP) || (i2sp->state == I2S_READY),
"invalid state");
+
i2s_lld_stop(i2sp);
- i2sp->state = I2S_STOP;
+ i2sp->config = NULL;
+ i2sp->state = I2S_STOP;
+
osalSysUnlock();
}
diff --git a/os/hal/src/hal_icu.c b/os/hal/src/hal_icu.c
index 8ee4ed8cd..cb8eaec64 100644
--- a/os/hal/src/hal_icu.c
+++ b/os/hal/src/hal_icu.c
@@ -104,10 +104,14 @@ void icuStop(ICUDriver *icup) {
osalDbgCheck(icup != NULL);
osalSysLock();
+
osalDbgAssert((icup->state == ICU_STOP) || (icup->state == ICU_READY),
"invalid state");
+
icu_lld_stop(icup);
- icup->state = ICU_STOP;
+ icup->config = NULL;
+ icup->state = ICU_STOP;
+
osalSysUnlock();
}
diff --git a/os/hal/src/hal_mac.c b/os/hal/src/hal_mac.c
index c4027f500..7d0f4cf43 100644
--- a/os/hal/src/hal_mac.c
+++ b/os/hal/src/hal_mac.c
@@ -117,10 +117,14 @@ void macStop(MACDriver *macp) {
osalDbgCheck(macp != NULL);
osalSysLock();
+
osalDbgAssert((macp->state == MAC_STOP) || (macp->state == MAC_ACTIVE),
"invalid state");
+
mac_lld_stop(macp);
- macp->state = MAC_STOP;
+ macp->config = NULL;
+ macp->state = MAC_STOP;
+
osalSysUnlock();
}
diff --git a/os/hal/src/hal_mmc_spi.c b/os/hal/src/hal_mmc_spi.c
index 19c794501..2e6ef7658 100644
--- a/os/hal/src/hal_mmc_spi.c
+++ b/os/hal/src/hal_mmc_spi.c
@@ -430,7 +430,8 @@ void mmcStop(MMCDriver *mmcp) {
"invalid state");
spiStop(mmcp->config->spip);
- mmcp->state = BLK_STOP;
+ mmcp->config = NULL;
+ mmcp->state = BLK_STOP;
}
/**
diff --git a/os/hal/src/hal_pwm.c b/os/hal/src/hal_pwm.c
index e11011248..453606c19 100644
--- a/os/hal/src/hal_pwm.c
+++ b/os/hal/src/hal_pwm.c
@@ -113,11 +113,15 @@ void pwmStop(PWMDriver *pwmp) {
osalDbgCheck(pwmp != NULL);
osalSysLock();
+
osalDbgAssert((pwmp->state == PWM_STOP) || (pwmp->state == PWM_READY),
"invalid state");
+
pwm_lld_stop(pwmp);
pwmp->enabled = 0;
+ pwmp->config = NULL;
pwmp->state = PWM_STOP;
+
osalSysUnlock();
}
diff --git a/os/hal/src/hal_qspi.c b/os/hal/src/hal_qspi.c
index dd091498b..cca5dd747 100644
--- a/os/hal/src/hal_qspi.c
+++ b/os/hal/src/hal_qspi.c
@@ -124,7 +124,8 @@ void qspiStop(QSPIDriver *qspip) {
"invalid state");
qspi_lld_stop(qspip);
- qspip->state = QSPI_STOP;
+ qspip->config = NULL;
+ qspip->state = QSPI_STOP;
osalSysUnlock();
}
diff --git a/os/hal/src/hal_sdc.c b/os/hal/src/hal_sdc.c
index 654f179e4..80cbca3bf 100644
--- a/os/hal/src/hal_sdc.c
+++ b/os/hal/src/hal_sdc.c
@@ -594,10 +594,14 @@ void sdcStop(SDCDriver *sdcp) {
osalDbgCheck(sdcp != NULL);
osalSysLock();
+
osalDbgAssert((sdcp->state == BLK_STOP) || (sdcp->state == BLK_ACTIVE),
"invalid state");
+
sdc_lld_stop(sdcp);
- sdcp->state = BLK_STOP;
+ sdcp->config = NULL;
+ sdcp->state = BLK_STOP;
+
osalSysUnlock();
}
diff --git a/os/hal/src/hal_serial.c b/os/hal/src/hal_serial.c
index 0b578fdc4..5439245ed 100644
--- a/os/hal/src/hal_serial.c
+++ b/os/hal/src/hal_serial.c
@@ -170,13 +170,17 @@ void sdStop(SerialDriver *sdp) {
osalDbgCheck(sdp != NULL);
osalSysLock();
+
osalDbgAssert((sdp->state == SD_STOP) || (sdp->state == SD_READY),
"invalid state");
+
sd_lld_stop(sdp);
- sdp->state = SD_STOP;
+ sdp->config = NULL;
+ sdp->state = SD_STOP;
oqResetI(&sdp->oqueue);
iqResetI(&sdp->iqueue);
osalOsRescheduleS();
+
osalSysUnlock();
}
diff --git a/os/hal/src/hal_serial_usb.c b/os/hal/src/hal_serial_usb.c
index adf5856c4..7d4ed05a8 100644
--- a/os/hal/src/hal_serial_usb.c
+++ b/os/hal/src/hal_serial_usb.c
@@ -264,6 +264,7 @@ void sduStop(SerialUSBDriver *sdup) {
osalDbgCheck(sdup != NULL);
osalSysLock();
+
osalDbgAssert((sdup->state == SDU_STOP) || (sdup->state == SDU_READY),
"invalid state");
@@ -273,11 +274,13 @@ void sduStop(SerialUSBDriver *sdup) {
if (sdup->config->int_in > 0U) {
usbp->in_params[sdup->config->int_in - 1U] = NULL;
}
- sdup->state = SDU_STOP;
+ sdup->config = NULL;
+ sdup->state = SDU_STOP;
/* Enforces a disconnection.*/
sduDisconnectI(sdup);
osalOsRescheduleS();
+
osalSysUnlock();
}
diff --git a/os/hal/src/hal_spi.c b/os/hal/src/hal_spi.c
index 86bd78677..a16b61591 100644
--- a/os/hal/src/hal_spi.c
+++ b/os/hal/src/hal_spi.c
@@ -115,10 +115,14 @@ void spiStop(SPIDriver *spip) {
osalDbgCheck(spip != NULL);
osalSysLock();
+
osalDbgAssert((spip->state == SPI_STOP) || (spip->state == SPI_READY),
"invalid state");
+
spi_lld_stop(spip);
- spip->state = SPI_STOP;
+ spip->config = NULL;
+ spip->state = SPI_STOP;
+
osalSysUnlock();
}
diff --git a/os/hal/src/hal_uart.c b/os/hal/src/hal_uart.c
index 8db39deb9..72d6221dd 100644
--- a/os/hal/src/hal_uart.c
+++ b/os/hal/src/hal_uart.c
@@ -120,13 +120,16 @@ void uartStop(UARTDriver *uartp) {
osalDbgCheck(uartp != NULL);
osalSysLock();
+
osalDbgAssert((uartp->state == UART_STOP) || (uartp->state == UART_READY),
"invalid state");
uart_lld_stop(uartp);
- uartp->state = UART_STOP;
+ uartp->config = NULL;
+ uartp->state = UART_STOP;
uartp->txstate = UART_TX_IDLE;
uartp->rxstate = UART_RX_IDLE;
+
osalSysUnlock();
}
diff --git a/os/hal/src/hal_usb.c b/os/hal/src/hal_usb.c
index bc0cf088b..f0da64978 100644
--- a/os/hal/src/hal_usb.c
+++ b/os/hal/src/hal_usb.c
@@ -314,12 +314,15 @@ void usbStop(USBDriver *usbp) {
osalDbgCheck(usbp != NULL);
osalSysLock();
+
osalDbgAssert((usbp->state == USB_STOP) || (usbp->state == USB_READY) ||
(usbp->state == USB_SELECTED) || (usbp->state == USB_ACTIVE) ||
(usbp->state == USB_SUSPENDED),
+
"invalid state");
usb_lld_stop(usbp);
- usbp->state = USB_STOP;
+ spip->config = NULL;
+ spip->state = USB_STOP;
/* Resetting all ongoing synchronous operations.*/
for (i = 0; i <= (unsigned)USB_MAX_ENDPOINTS; i++) {
@@ -336,6 +339,7 @@ void usbStop(USBDriver *usbp) {
usbp->epc[i] = NULL;
}
osalOsRescheduleS();
+
osalSysUnlock();
}
diff --git a/os/hal/src/hal_wdg.c b/os/hal/src/hal_wdg.c
index 1b3ec70c6..c5797e810 100644
--- a/os/hal/src/hal_wdg.c
+++ b/os/hal/src/hal_wdg.c
@@ -91,10 +91,14 @@ void wdgStop(WDGDriver *wdgp) {
osalDbgCheck(wdgp != NULL);
osalSysLock();
+
osalDbgAssert((wdgp->state == WDG_STOP) || (wdgp->state == WDG_READY),
"invalid state");
+
wdg_lld_stop(wdgp);
- wdgp->state = WDG_STOP;
+ wdgp->config = NULL;
+ wdgp->state = WDG_STOP;
+
osalSysUnlock();
}