Trivial changes from review of last PR

This commit is contained in:
Gregory Nutt 2016-06-27 07:43:32 -06:00
parent e946431015
commit 82bb42aa93
4 changed files with 59 additions and 60 deletions

View File

@ -1,7 +1,7 @@
/****************************************************************************************************
* arch/arm/src/stm32f7/chip/stm32f_otgfs.h
* arch/arm/src/stm32f7/chip/stm32f_otg.h
*
* Copyright (C) 2012, 2014-2015 Gregory Nutt. All rights reserved.
* Copyright (C) 2012, 2014-2016 Gregory Nutt. All rights reserved.
* Copyright (C) 2016 Omni Hoverboards Inc. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org>
* Paul Alexander Patience <paul-a.patience@polymtl.ca>

View File

@ -1,7 +1,7 @@
/************************************************************************************
* arch/arm/src/stm32f7/stm32_otg.h
*
* Copyright (C) 2012-2013 Gregory Nutt. All rights reserved.
* Copyright (C) 2012-2013, 2016 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org>
*
* Redistribution and use in source and binary forms, with or without
@ -146,4 +146,3 @@ void stm32_usbsuspend(FAR struct usbdev_s *dev, bool resume);
#endif /* __ASSEMBLY__ */
#endif /* CONFIG_STM32F7_OTGFS */
#endif /* __ARCH_ARM_SRC_STM32F7_STM32_OTG_H */

View File

@ -1,7 +1,7 @@
/****************************************************************************
* arch/arm/src/stm32f7/stm32_otgdev.c
*
* Copyright (C) 2012-2014 Gregory Nutt. All rights reserved.
* Copyright (C) 2012-2014, 2016 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org>
*
* Redistribution and use in source and binary forms, with or without
@ -63,12 +63,14 @@
#include "up_internal.h"
#if defined(CONFIG_USBDEV) && (defined(CONFIG_STM32F7_OTGFS) || defined(CONFIG_STM32F7_OTGHS))
#if defined(CONFIG_USBDEV) && (defined(CONFIG_STM32F7_OTGFS) || \
defined(CONFIG_STM32F7_OTGHS))
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
/* Configuration ***************************************************************/
/* Configuration ************************************************************/
#ifndef CONFIG_USBDEV_EP0_MAXSIZE
# define CONFIG_USBDEV_EP0_MAXSIZE 64
@ -164,7 +166,6 @@
# define CONFIG_USBDEV_EP8_TXFIFO_SIZE 0
#endif
/* The actual FIFO addresses that we use must be aligned to 4-byte boundaries;
* FIFO sizes must be provided in units of 32-bit words.
*/
@ -202,8 +203,8 @@
#if (STM32_RXFIFO_BYTES + \
STM32_EP0_TXFIFO_BYTES + STM32_EP1_TXFIFO_BYTES + STM32_EP2_TXFIFO_BYTES + STM32_EP3_TXFIFO_BYTES + \
STM32_EP4_TXFIFO_BYTES + STM32_EP5_TXFIFO_BYTES + STM32_EP6_TXFIFO_BYTES + STM32_EP7_TXFIFO_BYTES + CONFIG_USBDEV_EP8_TXFIFO_SIZE \
) > STM32_OTG_FIFO_SIZE
STM32_EP4_TXFIFO_BYTES + STM32_EP5_TXFIFO_BYTES + STM32_EP6_TXFIFO_BYTES + STM32_EP7_TXFIFO_BYTES + CONFIG_USBDEV_EP8_TXFIFO_SIZE \
) > STM32_OTG_FIFO_SIZE
# error "FIFO allocations exceed FIFO memory size"
#endif
@ -295,7 +296,6 @@
/* Endpoints ******************************************************************/
/* Odd physical endpoint numbers are IN; even are OUT */
#define STM32_EPPHYIN2LOG(epphy) ((uint8_t)(epphy)|USB_DIR_IN)
@ -527,7 +527,7 @@ struct stm32_usbdev_s
* Private Function Prototypes
****************************************************************************/
/* Register operations ********************************************************/
/* Register operations ******************************************************/
#if defined(CONFIG_STM32F7_USBDEV_REGDEBUG) && defined(CONFIG_DEBUG_FEATURES)
static uint32_t stm32_getreg(uint32_t addr);
@ -537,13 +537,13 @@ static void stm32_putreg(uint32_t val, uint32_t addr);
# define stm32_putreg(val,addr) putreg32(val,addr)
#endif
/* Request queue operations ****************************************************/
/* Request queue operations **************************************************/
static FAR struct stm32_req_s *stm32_req_remfirst(FAR struct stm32_ep_s *privep);
static bool stm32_req_addlast(FAR struct stm32_ep_s *privep,
FAR struct stm32_req_s *req);
/* Low level data transfers and request operations *****************************/
/* Low level data transfers and request operations ***************************/
/* Special endpoint 0 data transfer logic */
static void stm32_ep0in_setupresponse(FAR struct stm32_usbdev_s *priv,
@ -582,7 +582,7 @@ static void stm32_req_complete(FAR struct stm32_ep_s *privep,
static void stm32_req_cancel(FAR struct stm32_ep_s *privep,
int16_t status);
/* Interrupt handling **********************************************************/
/* Interrupt handling ********************************************************/
static struct stm32_ep_s *stm32_ep_findbyaddr(struct stm32_usbdev_s *priv,
uint16_t eplog);
@ -605,7 +605,8 @@ static inline void stm32_epout_interrupt(FAR struct stm32_usbdev_s *priv);
static inline void stm32_epin_runtestmode(FAR struct stm32_usbdev_s *priv);
static inline void stm32_epin(FAR struct stm32_usbdev_s *priv, uint8_t epno);
static inline void stm32_epin_txfifoempty(FAR struct stm32_usbdev_s *priv, int epno);
static inline void stm32_epin_txfifoempty(FAR struct stm32_usbdev_s *priv,
int epno);
static inline void stm32_epin_interrupt(FAR struct stm32_usbdev_s *priv);
/* Other second level interrupt processing */
@ -658,8 +659,10 @@ static void stm32_ep_freereq(FAR struct usbdev_ep_s *ep,
/* Endpoint buffer management */
#ifdef CONFIG_USBDEV_DMA
static void *stm32_ep_allocbuffer(FAR struct usbdev_ep_s *ep, unsigned bytes);
static void stm32_ep_freebuffer(FAR struct usbdev_ep_s *ep, FAR void *buf);
static void *stm32_ep_allocbuffer(FAR struct usbdev_ep_s *ep,
unsigned bytes);
static void stm32_ep_freebuffer(FAR struct usbdev_ep_s *ep,
FAR void *buf);
#endif
/* Endpoint request submission */
@ -707,6 +710,7 @@ static void stm32_hwinitialize(FAR struct stm32_usbdev_s *priv);
/****************************************************************************
* Private Data
****************************************************************************/
/* Since there is only a single USB interface, all status information can be
* be simply retained in a single global instance.
*/
@ -833,10 +837,6 @@ const struct trace_msg_t g_usb_trace_strings_intdecode[] =
};
#endif
/****************************************************************************
* Public Data
****************************************************************************/
/****************************************************************************
* Private Functions
****************************************************************************/
@ -975,6 +975,7 @@ static bool stm32_req_addlast(FAR struct stm32_ep_s *privep,
privep->tail->flink = req;
privep->tail = req;
}
return is_empty;
}
@ -3822,8 +3823,8 @@ static void stm32_disablegonak(FAR struct stm32_ep_s *privep)
*
****************************************************************************/
static int stm32_epout_configure(FAR struct stm32_ep_s *privep, uint8_t eptype,
uint16_t maxpacket)
static int stm32_epout_configure(FAR struct stm32_ep_s *privep,
uint8_t eptype, uint16_t maxpacket)
{
uint32_t mpsiz;
uint32_t regaddr;
@ -3917,8 +3918,8 @@ static int stm32_epout_configure(FAR struct stm32_ep_s *privep, uint8_t eptype,
*
****************************************************************************/
static int stm32_epin_configure(FAR struct stm32_ep_s *privep, uint8_t eptype,
uint16_t maxpacket)
static int stm32_epin_configure(FAR struct stm32_ep_s *privep,
uint8_t eptype, uint16_t maxpacket)
{
uint32_t mpsiz;
uint32_t regaddr;
@ -3979,7 +3980,8 @@ static int stm32_epin_configure(FAR struct stm32_ep_s *privep, uint8_t eptype,
regval |= OTG_DIEPCTL_CNAK;
}
regval &= ~(OTG_DIEPCTL_MPSIZ_MASK | OTG_DIEPCTL_EPTYP_MASK | OTG_DIEPCTL_TXFNUM_MASK);
regval &= ~(OTG_DIEPCTL_MPSIZ_MASK | OTG_DIEPCTL_EPTYP_MASK |
OTG_DIEPCTL_TXFNUM_MASK);
regval |= mpsiz;
regval |= (eptype << OTG_DIEPCTL_EPTYP_SHIFT);
regval |= (eptype << OTG_DIEPCTL_TXFNUM_SHIFT);
@ -5493,7 +5495,8 @@ void up_usbinitialize(void)
/* At present, there is only a single OTG device support. Hence it is
* pre-allocated as g_otghsdev. However, in most code, the private data
* structure will be referenced using the 'priv' pointer (rather than the
* global data) in order to simplify any future support for multiple devices.
* global data) in order to simplify any future support for multiple
* devices.
*/
FAR struct stm32_usbdev_s *priv = &g_otghsdev;

View File

@ -72,7 +72,8 @@
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
/* Configuration ***************************************************************/
/* Configuration ************************************************************/
/* STM32 USB OTG FS Host Driver Support
*
* Pre-requisites
@ -135,7 +136,7 @@
# undef CONFIG_STM32F7_USBHOST_PKTDUMP
#endif
/* HCD Setup *******************************************************************/
/* HCD Setup ****************************************************************/
/* Hardware capabilities */
#define STM32_NHOST_CHANNELS 8 /* Number of host channels */
@ -146,7 +147,7 @@
#define STM32_MAX_PKTCOUNT 256 /* Max packet count */
#define STM32_RETRY_COUNT 3 /* Number of ctrl transfer retries */
/* Delays **********************************************************************/
/* Delays *******************************************************************/
#define STM32_READY_DELAY 200000 /* In loop counts */
#define STM32_FLUSH_DELAY 200000 /* In loop counts */
@ -281,7 +282,7 @@ struct stm32_usbhost_s
* Private Function Prototypes
****************************************************************************/
/* Register operations ********************************************************/
/* Register operations ******************************************************/
#ifdef CONFIG_STM32F7_USBHOST_REGDEBUG
static void stm32_printreg(uint32_t addr, uint32_t val, bool iswrite);
@ -302,16 +303,16 @@ static inline void stm32_modifyreg(uint32_t addr, uint32_t clrbits,
# define stm32_pktdump(m,b,n)
#endif
/* Semaphores ******************************************************************/
/* Semaphores ***************************************************************/
static void stm32_takesem(sem_t *sem);
#define stm32_givesem(s) sem_post(s);
/* Byte stream access helper functions *****************************************/
/* Byte stream access helper functions **************************************/
static inline uint16_t stm32_getle16(const uint8_t *val);
/* Channel management **********************************************************/
/* Channel management *******************************************************/
static int stm32_chan_alloc(FAR struct stm32_usbhost_s *priv);
static inline void stm32_chan_free(FAR struct stm32_usbhost_s *priv, int chidx);
@ -340,7 +341,7 @@ static int stm32_xfrep_alloc(FAR struct stm32_usbhost_s *priv,
FAR const struct usbhost_epdesc_s *epdesc,
FAR usbhost_ep_t *ep);
/* Control/data transfer logic *************************************************/
/* Control/data transfer logic **********************************************/
static void stm32_transfer_start(FAR struct stm32_usbhost_s *priv, int chidx);
#if 0 /* Not used */
@ -376,7 +377,7 @@ static int stm32_out_asynch(FAR struct stm32_usbhost_s *priv, int chidx,
usbhost_asynch_t callback, FAR void *arg);
#endif
/* Interrupt handling **********************************************************/
/* Interrupt handling *******************************************************/
/* Lower level interrupt handlers */
static void stm32_gint_wrpacket(FAR struct stm32_usbhost_s *priv,
@ -412,7 +413,7 @@ static void stm32_gint_disable(void);
static inline void stm32_hostinit_enable(void);
static void stm32_txfe_enable(FAR struct stm32_usbhost_s *priv, int chidx);
/* USB host controller operations **********************************************/
/* USB host controller operations *******************************************/
static int stm32_wait(FAR struct usbhost_connection_s *conn,
FAR struct usbhost_hubport_s **hport);
@ -457,7 +458,7 @@ static int stm32_connect(FAR struct usbhost_driver_s *drvr,
static void stm32_disconnect(FAR struct usbhost_driver_s *drvr,
FAR struct usbhost_hubport_s *hport);
/* Initialization **************************************************************/
/* Initialization ***********************************************************/
static void stm32_portreset(FAR struct stm32_usbhost_s *priv);
static void stm32_flush_txfifos(uint32_t txfnum);
@ -487,10 +488,6 @@ static struct usbhost_connection_s g_usbconn =
.enumerate = stm32_enumerate,
};
/****************************************************************************
* Public Data
****************************************************************************/
/****************************************************************************
* Private Functions
****************************************************************************/
@ -625,7 +622,8 @@ static void stm32_putreg(uint32_t addr, uint32_t val)
*
****************************************************************************/
static inline void stm32_modifyreg(uint32_t addr, uint32_t clrbits, uint32_t setbits)
static inline void stm32_modifyreg(uint32_t addr, uint32_t clrbits,
uint32_t setbits)
{
stm32_putreg(addr, (((stm32_getreg(addr)) & ~clrbits) | setbits));
}
@ -987,10 +985,10 @@ static void stm32_chan_halt(FAR struct stm32_usbhost_s *priv, int chidx,
* Name: stm32_chan_waitsetup
*
* Description:
* Set the request for the transfer complete event well BEFORE enabling the
* transfer (as soon as we are absolutely committed to the to avoid transfer).
* We do this to minimize race conditions. This logic would have to be expanded
* if we want to have more than one packet in flight at a time!
* Set the request for the transfer complete event well BEFORE enabling
* the transfer (as soon as we are absolutely committed to the transfer).
* We do this to minimize race conditions. This logic would have to be
* expanded if we want to have more than one packet in flight at a time!
*
* Assumptions:
* Called from a normal thread context BEFORE the transfer has been started.
@ -1082,9 +1080,9 @@ static int stm32_chan_wait(FAR struct stm32_usbhost_s *priv,
int ret;
/* Disable interrupts so that the following operations will be atomic. On
* the OTG FS global interrupt needs to be disabled. However, here we disable
* all interrupts to exploit that fact that interrupts will be re-enabled
* while we wait.
* the OTG FS global interrupt needs to be disabled. However, here we
* disable all interrupts to exploit that fact that interrupts will be re-
* enabled while we wait.
*/
flags = enter_critical_section();
@ -1256,8 +1254,8 @@ static int stm32_ctrlchan_alloc(FAR struct stm32_usbhost_s *priv,
* allocated endpoint descriptor.
*
* Returned Values:
* On success, zero (OK) is returned. On a failure, a negated errno value is
* returned indicating the nature of the failure
* On success, zero (OK) is returned. On a failure, a negated errno value
* is returned indicating the nature of the failure
*
* Assumptions:
* This function will *not* be called from an interrupt handler.
@ -1305,7 +1303,7 @@ static int stm32_ctrlep_alloc(FAR struct stm32_usbhost_s *priv,
return OK;
}
/************************************************************************************
/****************************************************************************
* Name: stm32_xfrep_alloc
*
* Description:
@ -1318,13 +1316,13 @@ static int stm32_ctrlep_alloc(FAR struct stm32_usbhost_s *priv,
* allocated endpoint descriptor.
*
* Returned Values:
* On success, zero (OK) is returned. On a failure, a negated errno value is
* returned indicating the nature of the failure
* On success, zero (OK) is returned. On a failure, a negated errno value
* is returned indicating the nature of the failure
*
* Assumptions:
* This function will *not* be called from an interrupt handler.
*
************************************************************************************/
****************************************************************************/
static int stm32_xfrep_alloc(FAR struct stm32_usbhost_s *priv,
FAR const struct usbhost_epdesc_s *epdesc,
@ -2500,8 +2498,8 @@ static inline void stm32_gint_hcinisr(FAR struct stm32_usbhost_s *priv,
}
else if (chan->chreason == CHREASON_NAK)
{
/* Halt on NAK only happens on an INTR channel. Fetch the HCCHAR register
* and check for an interrupt endpoint.
/* Halt on NAK only happens on an INTR channel. Fetch the HCCHAR
* register and check for an interrupt endpoint.
*/
regval = stm32_getreg(STM32_OTG_HCCHAR(chidx));
@ -3466,7 +3464,6 @@ static int stm32_gint_isr(int irq, FAR void *context)
}
/* Otherwise, process each pending, unmasked GINT interrupts */
/* Handle the start of frame interrupt */
#ifdef CONFIG_STM32F7_OTG_SOFINTR