You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by ac...@apache.org on 2020/08/09 19:12:29 UTC
[incubator-nuttx] branch master updated: Added another usbid with
proto = 1 (HighSpeed Hub). Nxstyle fixes.
This is an automated email from the ASF dual-hosted git repository.
acassis pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git
The following commit(s) were added to refs/heads/master by this push:
new 662e678 Added another usbid with proto = 1 (HighSpeed Hub). Nxstyle fixes.
662e678 is described below
commit 662e6789ea2d8b61ac10587ddbc094e1f82db51e
Author: Johannes Schock <jo...@nivus.com>
AuthorDate: Sun Aug 9 19:46:26 2020 +0200
Added another usbid with proto = 1 (HighSpeed Hub). Nxstyle fixes.
---
drivers/usbhost/usbhost_hub.c | 164 ++++++++++++++++++++++--------------------
1 file changed, 88 insertions(+), 76 deletions(-)
diff --git a/drivers/usbhost/usbhost_hub.c b/drivers/usbhost/usbhost_hub.c
index 5858b7b..c5ed3e3 100644
--- a/drivers/usbhost/usbhost_hub.c
+++ b/drivers/usbhost/usbhost_hub.c
@@ -1,4 +1,4 @@
-/****************************************************************************
+/************************************************************************************
* drivers/usbhost/usbhost_hub.c
*
* Copyright (C) 2015-2017 Gregory Nutt. All rights reserved.
@@ -32,11 +32,11 @@
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
- ****************************************************************************/
+ ************************************************************************************/
-/****************************************************************************
+/************************************************************************************
* Included Files
- ****************************************************************************/
+ ************************************************************************************/
#include <nuttx/config.h>
@@ -62,11 +62,12 @@
#ifdef CONFIG_USBHOST_HUB
-/****************************************************************************
+/************************************************************************************
* Pre-processor Definitions
- ****************************************************************************/
+ ************************************************************************************/
+
+/* Configuration ********************************************************************/
-/* Configuration ************************************************************/
/* It is necessary to perform work on the low-priority work queue (vs. the
* high priority work queue) because:
*
@@ -75,7 +76,8 @@
* related work. Since that interrupt related work will performed on the
* high priority work queue, there would be the likelihood of deadlocks
* if you wait for events on the high priority work thread that can only
- * occur if the high priority work thread is available to post those events.
+ * occur if the high priority work thread is available to post those
+ * events.
*/
#if !defined(CONFIG_SCHED_WORKQUEUE)
@@ -108,9 +110,9 @@
#define INTIN_BUFSIZE ((USBHUB_MAX_PORTS + 8) >> 3)
-/****************************************************************************
+/************************************************************************************
* Private Types
- ****************************************************************************/
+ ************************************************************************************/
/* This structure contains the internal, private state of the USB host
* hub class.
@@ -149,9 +151,9 @@ struct usbhost_hubclass_s
struct usbhost_hubpriv_s hubpriv; /* Private class data */
};
-/****************************************************************************
+/************************************************************************************
* Private Function Prototypes
- ****************************************************************************/
+ ************************************************************************************/
/* Helpers for usbhost_connect() */
@@ -182,21 +184,30 @@ static int usbhost_connect(FAR struct usbhost_class_s *hubclass,
FAR const uint8_t *configdesc, int desclen);
static int usbhost_disconnected(FAR struct usbhost_class_s *hubclass);
-/****************************************************************************
+/************************************************************************************
* Private Data
- ****************************************************************************/
+ ************************************************************************************/
/* This structure provides the registry entry ID information that will be
* used to associate the USB host hub class to a connected USB hub.
*/
-static const struct usbhost_id_s g_id =
+static const struct usbhost_id_s g_id[2] =
{
- USB_CLASS_HUB, /* base */
- 0, /* subclass */
- 0, /* proto */
- 0, /* vid */
- 0 /* pid */
+ {
+ USB_CLASS_HUB, /* base */
+ 0, /* subclass */
+ 0, /* proto FS hub */
+ 0, /* vid */
+ 0 /* pid */
+ },
+ {
+ USB_CLASS_HUB, /* base */
+ 0, /* subclass */
+ 1, /* proto HS hub */
+ 0, /* vid */
+ 0 /* pid */
+ }
};
/* This is the USB host hub class's registry entry */
@@ -205,15 +216,15 @@ static struct usbhost_registry_s g_hub =
{
NULL, /* flink */
usbhost_create, /* create */
- 1, /* nids */
- &g_id /* id[] */
+ 2, /* nids */
+ g_id /* id[] */
};
-/****************************************************************************
+/************************************************************************************
* Private Functions
- ****************************************************************************/
+ ************************************************************************************/
-/****************************************************************************
+/************************************************************************************
* Name: usbhost_hport_deactivate
*
* Description:
@@ -225,7 +236,7 @@ static struct usbhost_registry_s g_hub =
* Returned Value:
* None
*
- ****************************************************************************/
+ ************************************************************************************/
static void usbhost_hport_deactivate(FAR struct usbhost_hubport_s *hport)
{
@@ -254,7 +265,7 @@ static void usbhost_hport_deactivate(FAR struct usbhost_hubport_s *hport)
DEBUGASSERT(ROOTHUB(hport) || hport->devclass == NULL);
}
-/****************************************************************************
+/************************************************************************************
* Name: usbhost_hport_activate
*
* Description:
@@ -268,7 +279,7 @@ static void usbhost_hport_deactivate(FAR struct usbhost_hubport_s *hport)
* Zero (OK) is returned on success; a negated errno value is returned
* on any failure.
*
- ****************************************************************************/
+ ************************************************************************************/
static int usbhost_hport_activate(FAR struct usbhost_hubport_s *hport)
{
@@ -293,7 +304,7 @@ static int usbhost_hport_activate(FAR struct usbhost_hubport_s *hport)
return ret;
}
-/****************************************************************************
+/************************************************************************************
* Name: usbhost_cfgdesc
*
* Description:
@@ -315,7 +326,7 @@ static int usbhost_hport_activate(FAR struct usbhost_hubport_s *hport)
* Assumptions:
* This function will *not* be called from an interrupt handler.
*
- ****************************************************************************/
+ ************************************************************************************/
static inline int usbhost_cfgdesc(FAR struct usbhost_class_s *hubclass,
FAR const uint8_t *configdesc, int desclen)
@@ -395,7 +406,7 @@ static inline int usbhost_cfgdesc(FAR struct usbhost_class_s *hubclass,
}
break;
- /* Endpoint descriptor. Here, we expect one interrupt IN endpoints. */
+ /* Endpoint descriptor. Here, we expect one interrupt IN endpoints. */
case USB_DESC_TYPE_ENDPOINT:
{
@@ -433,7 +444,7 @@ static inline int usbhost_cfgdesc(FAR struct usbhost_class_s *hubclass,
intindesc.mxpacketsize = usbhost_getle16(epdesc->mxpacketsize);
uinfo("Interrupt IN EP: addr=%d interval=%d mxpacketsize=%d\n",
- intindesc.addr, intindesc.interval, intindesc.mxpacketsize);
+ intindesc.addr, intindesc.interval, intindesc.mxpacketsize);
}
}
}
@@ -484,7 +495,7 @@ static inline int usbhost_cfgdesc(FAR struct usbhost_class_s *hubclass,
return OK;
}
-/****************************************************************************
+/************************************************************************************
* Name: usbhost_hubdesc
*
* Description:
@@ -503,7 +514,7 @@ static inline int usbhost_cfgdesc(FAR struct usbhost_class_s *hubclass,
* Assumptions:
* This function will *not* be called from an interrupt handler.
*
- ****************************************************************************/
+ ************************************************************************************/
static inline int usbhost_hubdesc(FAR struct usbhost_class_s *hubclass)
{
@@ -569,7 +580,7 @@ static inline int usbhost_hubdesc(FAR struct usbhost_class_s *hubclass)
return OK;
}
-/****************************************************************************
+/************************************************************************************
* Name: usbhost_hubpwr
*
* Description:
@@ -605,7 +616,7 @@ static inline int usbhost_hubdesc(FAR struct usbhost_class_s *hubclass)
* Assumptions:
* This function will *not* be called from an interrupt handler.
*
- ****************************************************************************/
+ ************************************************************************************/
static int usbhost_hubpwr(FAR struct usbhost_hubpriv_s *priv,
FAR struct usbhost_hubport_s *hport,
@@ -632,27 +643,27 @@ static int usbhost_hubpwr(FAR struct usbhost_hubpriv_s *priv,
ctrlreq = priv->ctrlreq;
DEBUGASSERT(ctrlreq);
- for (port = 1; port <= priv->nports; port++)
- {
- ctrlreq->type = USBHUB_REQ_TYPE_PORT;
- ctrlreq->req = req;
- usbhost_putle16(ctrlreq->value, USBHUB_PORT_FEAT_POWER);
- usbhost_putle16(ctrlreq->index, port);
- usbhost_putle16(ctrlreq->len, 0);
-
- ret = DRVR_CTRLOUT(hport->drvr, hport->ep0, ctrlreq, NULL);
- if (ret < 0)
- {
- uerr("ERROR: Failed to power %s port %d: %d\n",
- on ? "UP" : "DOWN", port, ret);
- return ret;
+ for (port = 1; port <= priv->nports; port++)
+ {
+ ctrlreq->type = USBHUB_REQ_TYPE_PORT;
+ ctrlreq->req = req;
+ usbhost_putle16(ctrlreq->value, USBHUB_PORT_FEAT_POWER);
+ usbhost_putle16(ctrlreq->index, port);
+ usbhost_putle16(ctrlreq->len, 0);
+
+ ret = DRVR_CTRLOUT(hport->drvr, hport->ep0, ctrlreq, NULL);
+ if (ret < 0)
+ {
+ uerr("ERROR: Failed to power %s port %d: %d\n",
+ on ? "UP" : "DOWN", port, ret);
+ return ret;
}
}
return OK;
}
-/****************************************************************************
+/************************************************************************************
* Name: usbhost_hub_event
*
* Description:
@@ -668,7 +679,7 @@ static int usbhost_hubpwr(FAR struct usbhost_hubpriv_s *priv,
* Assumptions:
* This function will *not* be called from an interrupt handler.
*
- ****************************************************************************/
+ ************************************************************************************/
static void usbhost_hub_event(FAR void *arg)
{
@@ -835,7 +846,7 @@ static void usbhost_hub_event(FAR void *arg)
}
debouncetime += 25;
- nxsig_usleep(25*1000);
+ nxsig_usleep(25 * 1000);
}
if (ret < 0 || debouncetime >= 1500)
@@ -863,7 +874,7 @@ static void usbhost_hub_event(FAR void *arg)
continue;
}
- nxsig_usleep(100*1000);
+ nxsig_usleep(100 * 1000);
ctrlreq->type = USB_REQ_DIR_IN | USBHUB_REQ_TYPE_PORT;
ctrlreq->req = USBHUB_REQ_GETSTATUS;
@@ -998,7 +1009,7 @@ static void usbhost_hub_event(FAR void *arg)
leave_critical_section(flags);
}
-/****************************************************************************
+/************************************************************************************
* Name: usbhost_disconnect_event
*
* Description:
@@ -1017,7 +1028,7 @@ static void usbhost_hub_event(FAR void *arg)
* Assumptions:
* Probably called from an interrupt handler.
*
- ****************************************************************************/
+ ************************************************************************************/
static void usbhost_disconnect_event(FAR void *arg)
{
@@ -1103,7 +1114,7 @@ static void usbhost_disconnect_event(FAR void *arg)
leave_critical_section(flags);
}
-/****************************************************************************
+/************************************************************************************
* Name: usbhost_getle16
*
* Description:
@@ -1115,14 +1126,14 @@ static void usbhost_disconnect_event(FAR void *arg)
* Returned Value:
* A uint16_t representing the whole 16-bit integer value
*
- ****************************************************************************/
+ ************************************************************************************/
static inline uint16_t usbhost_getle16(const uint8_t *val)
{
return (uint16_t)val[1] << 8 | (uint16_t)val[0];
}
-/****************************************************************************
+/************************************************************************************
* Name: usbhost_putle16
*
* Description:
@@ -1135,7 +1146,7 @@ static inline uint16_t usbhost_getle16(const uint8_t *val)
* Returned Value:
* None
*
- ****************************************************************************/
+ ************************************************************************************/
static void usbhost_putle16(uint8_t *dest, uint16_t val)
{
@@ -1143,7 +1154,7 @@ static void usbhost_putle16(uint8_t *dest, uint16_t val)
dest[1] = val >> 8;
}
-/****************************************************************************
+/************************************************************************************
* Name: usbhost_callback
*
* Description:
@@ -1160,7 +1171,7 @@ static void usbhost_putle16(uint8_t *dest, uint16_t val)
* Assumptions:
* Probably called from an interrupt handler.
*
- ****************************************************************************/
+ ************************************************************************************/
static void usbhost_callback(FAR void *arg, ssize_t nbytes)
{
@@ -1224,11 +1235,11 @@ static void usbhost_callback(FAR void *arg, ssize_t nbytes)
}
}
-/****************************************************************************
+/************************************************************************************
* struct usbhost_registry_s methods
- ****************************************************************************/
+ ************************************************************************************/
-/****************************************************************************
+/************************************************************************************
* Name: usbhost_create
*
* Description:
@@ -1251,7 +1262,7 @@ static void usbhost_callback(FAR void *arg, ssize_t nbytes)
* will fail only if the hport input parameter is NULL or if there are
* insufficient resources to create another USB host class instance.
*
- ****************************************************************************/
+ ************************************************************************************/
static FAR struct usbhost_class_s *
usbhost_create(FAR struct usbhost_hubport_s *hport,
@@ -1332,10 +1343,11 @@ errout_with_hub:
return NULL;
}
-/****************************************************************************
+/************************************************************************************
* struct usbhost_class_s methods
- ****************************************************************************/
-/****************************************************************************
+ ************************************************************************************/
+
+/************************************************************************************
* Name: usbhost_connect
*
* Description:
@@ -1364,7 +1376,7 @@ errout_with_hub:
* - If this function returns an error, the USB host controller driver
* must call to DISCONNECTED method to recover from the error
*
- ****************************************************************************/
+ ************************************************************************************/
static int usbhost_connect(FAR struct usbhost_class_s *hubclass,
FAR const uint8_t *configdesc, int desclen)
@@ -1426,7 +1438,7 @@ static int usbhost_connect(FAR struct usbhost_class_s *hubclass,
return ret;
}
-/****************************************************************************
+/************************************************************************************
* Name: usbhost_disconnected
*
* Description:
@@ -1446,7 +1458,7 @@ static int usbhost_connect(FAR struct usbhost_class_s *hubclass,
* Assumptions:
* Probably called from an interrupt handler.
*
- ****************************************************************************/
+ ************************************************************************************/
static int usbhost_disconnected(struct usbhost_class_s *hubclass)
{
@@ -1482,11 +1494,11 @@ static int usbhost_disconnected(struct usbhost_class_s *hubclass)
return ret;
}
-/****************************************************************************
+/************************************************************************************
* Public Functions
- ****************************************************************************/
+ ************************************************************************************/
-/****************************************************************************
+/************************************************************************************
* Name: usbhost_hub_initialize
*
* Description:
@@ -1501,7 +1513,7 @@ static int usbhost_disconnected(struct usbhost_class_s *hubclass)
* On success this function will return zero (OK); A negated errno value
* will be returned on failure.
*
- ****************************************************************************/
+ ************************************************************************************/
int usbhost_hub_initialize(void)
{