diff --git a/osal/usb_osal_nuttx.c b/osal/usb_osal_nuttx.c index c62c7389..52b17130 100644 --- a/osal/usb_osal_nuttx.c +++ b/osal/usb_osal_nuttx.c @@ -31,10 +31,6 @@ #include #include -#if 1 -#error please modfiy all thread param (void *argument) with (int argc, char **argv), and argument = ((uintptr_t)strtoul(argv[1], NULL, 16)); -#endif - struct mq_adpt { struct file mq; /* Message queue handle */ uint32_t msgsize; /* Message size */ @@ -56,7 +52,7 @@ usb_osal_thread_t usb_osal_thread_create(const char *name, uint32_t stack_size, argv[0] = arg1; argv[1] = NULL; - pid = kthread_create(name, prio, stack_size, (void *)entry, + pid = kthread_create(name, CONFIG_SCHED_HPWORKPRIORITY - prio, stack_size, (void *)entry, argv); if (pid > 0) { return (usb_osal_thread_t)pid; diff --git a/platform/nuttx/usbh_fs.c b/platform/nuttx/usbh_fs.c index 94920323..a55369f1 100644 --- a/platform/nuttx/usbh_fs.c +++ b/platform/nuttx/usbh_fs.c @@ -26,13 +26,18 @@ #include "usbh_core.h" #include "usbh_msc.h" -#ifdef CONFIG_ARCH_CHIP_HPMICRO -#include "hpm_misc.h" -#define usbhmsc_phy2sysaddr(a) core_local_mem_to_sys_address(0, a) -#else -#define usbhmsc_phy2sysaddr(a) (a) +#ifndef CONFIG_FS_FAT +#error "CONFIG_FS_FAT must be enabled" #endif +#ifdef CONFIG_ARCH_DCACHE +#ifndef CONFIG_FAT_DMAMEMORY +#error "USBH MSC requires CONFIG_FAT_DMAMEMORY" +#endif +#endif + +#define DEV_FORMAT "/dev/sd%c" + static int usbhost_open(FAR struct inode *inode); static int usbhost_close(FAR struct inode *inode); static ssize_t usbhost_read(FAR struct inode *inode, unsigned char *buffer, @@ -86,11 +91,11 @@ static ssize_t usbhost_read(FAR struct inode *inode, unsigned char *buffer, msc_class = (struct usbh_msc *)inode->i_private; if (msc_class->hport && msc_class->hport->connected) { - ret = usbh_msc_scsi_read10(msc_class, startsector, (uint8_t *)usbhmsc_phy2sysaddr((uint32_t)buffer), nsectors); + ret = usbh_msc_scsi_read10(msc_class, startsector, (uint8_t *)buffer, nsectors); if (ret < 0) { return ret; } else { -#ifdef CONFIG_USBHOST_MSC_DCACHE +#ifdef CONFIG_ARCH_DCACHE up_invalidate_dcache((uintptr_t)buffer, (uintptr_t)(buffer + nsectors * msc_class->blocksize)); #endif return nsectors; @@ -111,10 +116,10 @@ static ssize_t usbhost_write(FAR struct inode *inode, msc_class = (struct usbh_msc *)inode->i_private; if (msc_class->hport && msc_class->hport->connected) { -#ifdef CONFIG_USBHOST_MSC_DCACHE +#ifdef CONFIG_ARCH_DCACHE up_flush_dcache((uintptr_t)buffer, (uintptr_t)(buffer + nsectors * msc_class->blocksize)); #endif - ret = usbh_msc_scsi_write10(msc_class, startsector, (uint8_t *)usbhmsc_phy2sysaddr((uint32_t)buffer), nsectors); + ret = usbh_msc_scsi_write10(msc_class, startsector, (uint8_t *)buffer, nsectors); if (ret < 0) { return ret; } else { @@ -168,8 +173,6 @@ static int usbhost_ioctl(FAR struct inode *inode, int cmd, unsigned long arg) return 0; } -#define DEV_FORMAT "/dev/sd%c" - void usbh_msc_run(struct usbh_msc *msc_class) { char devname[32]; diff --git a/platform/nuttx/usbh_net.c b/platform/nuttx/usbh_net.c index d82311df..d84165d5 100644 --- a/platform/nuttx/usbh_net.c +++ b/platform/nuttx/usbh_net.c @@ -18,6 +18,26 @@ #include "usbh_core.h" +#if CONFIG_NET_ETH_PKTSIZE < 1514 +#error "CONFIG_NET_ETH_PKTSIZE must be at least 1514" +#endif + +#if CONFIG_IOB_BUFSIZE < 1514 +#error "CONFIG_IOB_BUFSIZE must be at least 1514" +#endif + +#ifndef CONFIG_NETDEV_LATEINIT +#error "CONFIG_NETDEV_LATEINIT must be enabled" +#endif + +#ifndef CONFIG_NETUTILS_DHCPC +#error "CONFIG_NETUTILS_DHCPC must be enabled" +#endif + +#ifndef CONFIG_NETINIT_DHCPC +#error "CONFIG_NETINIT_DHCPC must be enabled" +#endif + // #define CONFIG_USBHOST_PLATFORM_CDC_ECM #define CONFIG_USBHOST_PLATFORM_CDC_RNDIS // #define CONFIG_USBHOST_PLATFORM_CDC_NCM @@ -35,7 +55,7 @@ void usbh_net_eth_output_common(struct net_driver_s *dev, uint8_t *buf) usb_memcpy(buf, dev->d_buf, dev->d_len); } -void usbh_net_eth_input_common(struct net_driver_s *dev, uint8_t *buf, size_t len, int (*eth_output)(uint32_t buflen)) +void usbh_net_eth_input_common(struct net_driver_s *dev, uint8_t *buf, size_t len, uint8_t* (*eth_input)(void), int (*eth_output)(uint32_t buflen)) { FAR struct eth_hdr_s *hdr; @@ -61,7 +81,7 @@ void usbh_net_eth_input_common(struct net_driver_s *dev, uint8_t *buf, size_t le ipv4_input(dev); if (dev->d_len > 0) { /* And send the packet */ - usbh_net_eth_output_common(dev, usbh_rndis_get_eth_txbuf()); + usbh_net_eth_output_common(dev, eth_input()); eth_output(dev->d_len); } } else @@ -76,7 +96,7 @@ void usbh_net_eth_input_common(struct net_driver_s *dev, uint8_t *buf, size_t le if (dev->d_len > 0) { /* And send the packet */ - usbh_net_eth_output_common(dev, usbh_rndis_get_eth_txbuf()); + usbh_net_eth_output_common(dev, eth_input()); eth_output(dev->d_len); } } else @@ -87,7 +107,7 @@ void usbh_net_eth_input_common(struct net_driver_s *dev, uint8_t *buf, size_t le arp_input(dev); if (dev->d_len > 0) { - usbh_net_eth_output_common(dev, usbh_rndis_get_eth_txbuf()); + usbh_net_eth_output_common(dev, eth_input()); eth_output(dev->d_len); } } else @@ -121,7 +141,7 @@ static int rndis_ifdown(struct net_driver_s *dev) static int rndis_txpoll(struct net_driver_s *dev) { - usbh_net_eth_output_common(&g_rndis_dev, usbh_rndis_get_eth_txbuf()); + usbh_net_eth_output_common(&g_rndis_dev.netdev, usbh_rndis_get_eth_txbuf()); return usbh_rndis_eth_output(g_rndis_dev.netdev.d_len); } @@ -150,7 +170,7 @@ static int rndis_txavail(struct net_driver_s *dev) void usbh_rndis_eth_input(uint8_t *buf, uint32_t buflen) { - usbh_net_eth_input_common(&g_rndis_dev.netdev, buf, buflen, usbh_rndis_eth_output); + usbh_net_eth_input_common(&g_rndis_dev.netdev, buf, buflen, usbh_rndis_get_eth_txbuf, usbh_rndis_eth_output); } void usbh_rndis_run(struct usbh_rndis *rndis_class) @@ -166,6 +186,8 @@ void usbh_rndis_run(struct usbh_rndis *rndis_class) g_rndis_dev.netdev.d_mac.ether.ether_addr_octet[j] = rndis_class->mac[j]; } netdev_register(&g_rndis_dev.netdev, NET_LL_ETHERNET); + + netinit_bringup(); } void usbh_rndis_stop(struct usbh_rndis *rndis_class)