You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by xi...@apache.org on 2021/09/18 03:11:38 UTC

[incubator-nuttx] branch master updated (04c9079 -> f4b6bb2)

This is an automated email from the ASF dual-hosted git repository.

xiaoxiang pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git.


    from 04c9079  Back in 2007, an early network implementation was developed for NuttX.  This early development was inspired largely by uIP 1.0 and recognition of that was noted in the then BSD license headers.  Over the next 14 years, a new, much more advanced, original network was developed for NuttX.  However, some references to Adam Dunkels were still present in the file headers.
     new d489392  Add bl602 os adapter layer
     new f4b6bb2  Update bl602 MTU_SIZE and TX_BUF_SIZE

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 arch/risc-v/src/bl602/Make.defs      |    5 +-
 arch/risc-v/src/bl602/bl602_head.S   |   11 +-
 arch/risc-v/src/bl602/bl602_netdev.c |   16 +-
 arch/risc-v/src/bl602/bl602_os_hal.c | 1606 ++++++++++++++++++++++++++++++++++
 arch/risc-v/src/bl602/bl602_os_hal.h |  186 ++++
 5 files changed, 1813 insertions(+), 11 deletions(-)
 create mode 100644 arch/risc-v/src/bl602/bl602_os_hal.c
 create mode 100644 arch/risc-v/src/bl602/bl602_os_hal.h

[incubator-nuttx] 01/02: Add bl602 os adapter layer

Posted by xi...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git

commit d489392d08e550e828146395d4e945de9952e6e3
Author: jsun <js...@bouffalolab.com>
AuthorDate: Fri Aug 13 10:26:22 2021 +0800

    Add bl602 os adapter layer
    
    N/A
    
    Signed-off-by: jsun <js...@bouffalolab.com>
---
 arch/risc-v/src/bl602/Make.defs      |    5 +-
 arch/risc-v/src/bl602/bl602_head.S   |   11 +-
 arch/risc-v/src/bl602/bl602_netdev.c |   10 +-
 arch/risc-v/src/bl602/bl602_os_hal.c | 1606 ++++++++++++++++++++++++++++++++++
 arch/risc-v/src/bl602/bl602_os_hal.h |  186 ++++
 5 files changed, 1810 insertions(+), 8 deletions(-)

diff --git a/arch/risc-v/src/bl602/Make.defs b/arch/risc-v/src/bl602/Make.defs
index 316cb85..43575a8 100644
--- a/arch/risc-v/src/bl602/Make.defs
+++ b/arch/risc-v/src/bl602/Make.defs
@@ -51,6 +51,7 @@ CHIP_CSRCS  = bl602_allocateheap.c
 CHIP_CSRCS += bl602_idle.c bl602_irq.c bl602_irq_dispatch.c
 CHIP_CSRCS += bl602_serial.c bl602_lowputc.c bl602_tim.c
 CHIP_CSRCS += bl602_start.c bl602_timerisr.c bl602_efuse.c
+CHIP_CSRCS += bl602_os_hal.c
 
 ifeq ($(CONFIG_I2C),y)
 CHIP_CSRCS += bl602_i2c.c
@@ -83,7 +84,7 @@ CHIP_CSRCS += bl602_glb.c bl602_gpio.c bl602_hbn.c bl602_systemreset.c
 
 ifeq ($(CONFIG_BL602_WIRELESS),y)
 WIRELESS_DRV_UNPACK  = bl_blob
-WIRELESS_DRV_VERSION = 1.8.0
+WIRELESS_DRV_VERSION = 1.9.1-dev
 WIRELESS_DRV_ZIP     = v$(WIRELESS_DRV_VERSION).zip
 WIRELESS_DRV_URL     = https://github.com/bouffalolab/bl_blob/archive/refs/heads
 
@@ -108,7 +109,7 @@ INCLUDES += $(shell $(INCDIR) "$(CC)" $(ARCH_SRCDIR)$(DELIM)chip$(DELIM)$(WIRELE
 CHIP_CSRCS += bl602_netdev.c
 
 EXTRA_LIBPATHS += -L $(ARCH_SRCDIR)$(DELIM)chip$(DELIM)$(WIRELESS_DRV_UNPACK)$(DELIM)libs$(DELIM)BL602$(DELIM)nuttx
-EXTRA_LIBS += -lbl602_wifi -lblecontroller
+EXTRA_LIBS += -lbl602_wifi -lbl602_wifi_manage -lblecontroller
 
 # Due to some Wi-Fi related libraries, the option is need to avoid linking too much
 # unused functions.
diff --git a/arch/risc-v/src/bl602/bl602_head.S b/arch/risc-v/src/bl602/bl602_head.S
index 2439e13..54b43cd 100644
--- a/arch/risc-v/src/bl602/bl602_head.S
+++ b/arch/risc-v/src/bl602/bl602_head.S
@@ -77,12 +77,17 @@ exception_common:
   addi s0, sp, XCPTCONTEXT_SIZE
   sw   s0,  2*4(sp)   /* original SP */
 
-  /* Setup arg0(exception cause), arg1(context) */
-
-  csrr a0, mcause  /* exception cause */
   csrr s0, mepc
   sw   s0, 0(sp)   /* exception PC */
 
+#ifdef CONFIG_STACK_OVERFLOW_CHECK
+  la t0, __cyg_profile_func_enter
+  jalr x1, 0(t0)
+#endif
+
+  /* Setup arg0(exception cause), arg1(context) */
+
+  csrr a0, mcause  /* exception cause */
   mv   a1, sp      /* context = sp */
 
 #if CONFIG_ARCH_INTERRUPTSTACK > 15
diff --git a/arch/risc-v/src/bl602/bl602_netdev.c b/arch/risc-v/src/bl602/bl602_netdev.c
index 569139d..ad4fe5b 100644
--- a/arch/risc-v/src/bl602/bl602_netdev.c
+++ b/arch/risc-v/src/bl602/bl602_netdev.c
@@ -60,7 +60,7 @@
 #include "wifi_manager/wifi_mgmr_api.h"
 #include "wifi_manager/bl_wifi.h"
 #include "wifi_manager/include/wifi_mgmr_ext.h"
-#include "wifi_driver/os_hal.h"
+#include "bl602_os_hal.h"
 #include "bl602_netdev.h"
 #include "bl602_efuse.h"
 
@@ -248,6 +248,7 @@ extern void wifi_mgmr_tsk_init(void);
 extern int bl602_ef_ctrl_read_mac_address(uint8_t mac[6]);
 extern void wifi_main(int argc, char *argv[]);
 extern void wifi_mgmr_start_background(wifi_conf_t *conf);
+extern int bl_pm_init(void);
 extern struct net_device bl606a0_sta;
 
 /* Common TX logic */
@@ -2004,6 +2005,7 @@ bl602_net_ioctl(FAR struct net_driver_s *dev, int cmd, unsigned long arg)
 
 static int wifi_manager_process(int argc, FAR char *argv[])
 {
+  bl_pm_init();
   wifi_main_init();
   ipc_emb_notify();
 
@@ -2120,10 +2122,12 @@ void bl602_net_event(int evt, int val)
     case CODE_WIFI_ON_DISCONNECT:
       do
         {
-          struct bl602_net_driver_s *priv = &g_bl602_net[0];
+          /* struct bl602_net_driver_s *priv = &g_bl602_net[0]; */
+
           if (g_state.sta_connected == 1)
             {
-              netdev_carrier_off(&priv->net_dev);
+              /* netdev_carrier_off(&priv->net_dev); */
+
               g_state.sta_connected = 0;
             }
         }
diff --git a/arch/risc-v/src/bl602/bl602_os_hal.c b/arch/risc-v/src/bl602/bl602_os_hal.c
new file mode 100644
index 0000000..d5dcd45
--- /dev/null
+++ b/arch/risc-v/src/bl602/bl602_os_hal.c
@@ -0,0 +1,1606 @@
+/****************************************************************************
+ * arch/risc-v/src/bl602/bl602_os_hal.c
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.  The
+ * ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the
+ * License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <bl602_os_hal.h>
+
+#ifdef CONFIG_BL602_WIRELESS
+
+#include <bl_os_adapter/bl_os_adapter.h>
+#include <bl_os_adapter/bl_os_log.h>
+
+#endif
+
+#include <debug.h>
+#include <assert.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <ctype.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <string.h>
+#include <pthread.h>
+
+#include <sys/time.h>
+#include <timer/timer.h>
+#include <clock/clock.h>
+#include <syslog.h>
+
+#include <nuttx/config.h>
+#include <nuttx/irq.h>
+#include <nuttx/kthread.h>
+#include <nuttx/mqueue.h>
+#include <nuttx/kmalloc.h>
+#include <nuttx/pthread.h>
+#include <nuttx/wqueue.h>
+#include <nuttx/signal.h>
+#include <nuttx/semaphore.h>
+
+#include <bl602_netdev.h>
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+#define OS_HPWORK HPWORK
+#define OS_LPWORK LPWORK
+
+#ifdef CONFIG_BL602_WIRELESS
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+struct mq_adpt
+{
+  struct file mq;           /* Message queue handle */
+  uint32_t    msgsize;      /* Message size */
+  char        name[16];     /* Message queue name */
+};
+
+struct irq_adpt
+{
+  void (*func)(void *arg);  /* Interrupt callback function */
+  void *arg;                /* Interrupt private data */
+};
+
+enum bl_os_timer_mode
+{
+  BL_OS_TIEMR_ONCE = 0,
+  BL_OS_TIEMR_CYCLE
+};
+
+typedef enum bl_os_timer_mode bl_os_timer_mode_t;
+
+struct timer_adpt
+{
+  struct wdog_s wdog;
+  int32_t delay;
+  bl_os_timer_mode_t mode;
+  void (*func)(void *arg);
+  void *arg;
+};
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+extern void *__attribute__((weak)) _wifi_log_flag;
+
+bl_ops_funcs_t g_bl_ops_funcs =
+{
+  ._version = BL_OS_ADAPTER_VERSION,
+  ._printf = bl_os_printf,
+  ._assert = bl_os_assert_func,
+  ._init = bl_os_api_init,
+  ._enter_critical = bl_os_enter_critical,
+  ._exit_critical = bl_os_exit_critical,
+  ._msleep = bl_os_msleep,
+  ._sleep = bl_os_sleep,
+  ._event_group_create = bl_os_event_create,
+  ._event_group_delete = bl_os_event_delete,
+  ._event_group_send = bl_os_event_send,
+  ._event_group_wait = bl_os_event_wait,
+  ._event_register = bl_os_event_register,
+  ._event_notify = bl_os_event_notify,
+  ._task_create = bl_os_task_create,
+  ._task_delete = bl_os_task_delete,
+  ._task_get_current_task = bl_os_task_get_current_task,
+  ._task_notify_create = bl_os_task_notify_create,
+  ._task_notify = bl_os_task_notify,
+  ._task_wait = bl_os_task_wait,
+  ._lock_gaint = bl_os_lock_gaint,
+  ._unlock_gaint = bl_os_unlock_gaint,
+  ._irq_attach = bl_os_irq_attach,
+  ._irq_enable = bl_os_irq_enable,
+  ._irq_disable = bl_os_irq_disable,
+  ._workqueue_create = bl_os_workqueue_create,
+  ._workqueue_submit_hp = bl_os_workqueue_submit_hpwork,
+  ._workqueue_submit_lp = bl_os_workqueue_submit_lpwork,
+  ._timer_create = bl_os_timer_create,
+  ._timer_delete = bl_os_timer_delete,
+  ._timer_start_once = bl_os_timer_start_once,
+  ._timer_start_periodic = bl_os_timer_start_periodic,
+  ._sem_create = bl_os_sem_create,
+  ._sem_delete = bl_os_sem_delete,
+  ._sem_take = bl_os_sem_take,
+  ._sem_give = bl_os_sem_give,
+  ._mutex_create = bl_os_mutex_create,
+  ._mutex_delete = bl_os_mutex_delete,
+  ._mutex_lock = bl_os_mutex_lock,
+  ._mutex_unlock = bl_os_mutex_unlock,
+  ._queue_create = bl_os_mq_creat,
+  ._queue_delete = bl_os_mq_delete,
+  ._queue_send_wait = bl_os_mq_send_wait,
+  ._queue_send = bl_os_mq_send,
+  ._queue_recv = bl_os_mq_recv,
+  ._malloc = bl_os_malloc,
+  ._free = bl_os_free,
+  ._zalloc = bl_os_zalloc,
+  ._get_time_ms = bl_os_clock_gettime_ms,
+  ._get_tick = bl_os_get_tick,
+  ._log_write = bl_os_log_write
+};
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: bl_os_assert_func
+ *
+ * Description:
+ *   Delete timer and free resource
+ *
+ * Input Parameters:
+ *   file  - assert file
+ *   line  - assert line
+ *   func  - assert function
+ *   expr  - assert condition
+ *
+ * Returned Value:
+ *   None
+ *
+ ****************************************************************************/
+
+void bl_os_assert_func(const char *file, int line,
+                       const char *func, const char *expr)
+{
+  printf("Assert failed in %s, %s:%d (%s)",
+         func, file, line, expr);
+  abort();
+}
+
+/****************************************************************************
+ * Name: bl_os_event_create
+ *
+ * Description:
+ *   Create event group
+ *
+ * Input Parameters:
+ *
+ * Returned Value:
+ *   Event group data pointer
+ *
+ ****************************************************************************/
+
+void *bl_os_event_create(void)
+{
+  return (void *)0;
+}
+
+/****************************************************************************
+ * Name: bl_os_event_delete
+ *
+ * Description:
+ *   Delete event and free resource
+ *
+ * Input Parameters:
+ *   event  - event data point
+ *
+ * Returned Value:
+ *   None
+ *
+ ****************************************************************************/
+
+void bl_os_event_delete(void *event)
+{
+}
+
+/****************************************************************************
+ * Name: bl_os_event_send
+ *
+ * Description:
+ *   Set event bits
+ *
+ * Input Parameters:
+ *
+ * Returned Value:
+ *   Event value after setting
+ *
+ ****************************************************************************/
+
+uint32_t bl_os_event_send(void *event, uint32_t bits)
+{
+  return 0;
+}
+
+/****************************************************************************
+ * Name: bl_os_event_wait
+ *
+ * Description:
+ *   Delete timer and free resource
+ *
+ * Input Parameters:
+ *   event
+ *   bits_to_wait_for
+ *   clear_on_exit
+ *   wait_for_all_bits
+ *   block_time_tick
+ *
+ * Returned Value:
+ *   Current event value
+ *
+ ****************************************************************************/
+
+uint32_t bl_os_event_wait(void *event,
+                          uint32_t bits_to_wait_for,
+                          int clear_on_exit,
+                          int wait_for_all_bits,
+                          uint32_t block_time_tick)
+{
+  return 0;
+}
+
+/****************************************************************************
+ * Name: bl_os_event_register
+ *
+ * Description:
+ *
+ * Input Parameters:
+ *
+ * Returned Value:
+ *
+ ****************************************************************************/
+
+int bl_os_event_register(int type, void *cb, void *arg)
+{
+  return 0;
+}
+
+/****************************************************************************
+ * Name: bl_os_event_notify
+ *
+ * Description:
+ *
+ * Input Parameters:
+ *
+ * Returned Value:
+ *
+ ****************************************************************************/
+
+int bl_os_event_notify(int evt, int val)
+{
+  bl602_net_event(evt, val);
+  return 0;
+}
+
+/****************************************************************************
+ * Name: bl_os_task_create
+ *
+ * Description:
+ *
+ * Input Parameters:
+ *
+ * Returned Value:
+ *
+ ****************************************************************************/
+
+int bl_os_task_create(const char *name,
+                      void *entry,
+                      uint32_t stack_depth,
+                      void *param,
+                      uint32_t prio,
+                      void *task_handle)
+{
+  return nxtask_create(name, prio, stack_depth, entry, (char **)&param);
+}
+
+/****************************************************************************
+ * Name: bl_os_task_delete
+ *
+ * Description:
+ *
+ * Input Parameters:
+ *
+ * Returned Value:
+ *
+ ****************************************************************************/
+
+void bl_os_task_delete(void *task_handle)
+{
+  pid_t task = (int)task_handle;
+
+  task_delete((pid_t)task);
+}
+
+/****************************************************************************
+ * Name: bl_os_task_get_current_task
+ *
+ * Description:
+ *
+ * Input Parameters:
+ *
+ * Returned Value:
+ *
+ ****************************************************************************/
+
+void *bl_os_task_get_current_task(void)
+{
+  return (void *)0;
+}
+
+/****************************************************************************
+ * Name: bl_os_task_notify_create
+ *
+ * Description:
+ *
+ * Input Parameters:
+ *
+ * Returned Value:
+ *
+ ****************************************************************************/
+
+void *bl_os_task_notify_create(void)
+{
+  return bl_os_sem_create(0);
+}
+
+/****************************************************************************
+ * Name: bl_os_task_get_current_task
+ *
+ * Description:
+ *
+ * Input Parameters:
+ *
+ * Returned Value:
+ *
+ ****************************************************************************/
+
+void bl_os_task_notify(void *task_handle)
+{
+  bl_os_sem_give(task_handle);
+}
+
+/****************************************************************************
+ * Name: bl_os_task_get_current_task
+ *
+ * Description:
+ *
+ * Input Parameters:
+ *
+ * Returned Value:
+ *
+ ****************************************************************************/
+
+void bl_os_task_wait(void *task_handle, uint32_t tick)
+{
+  bl_os_sem_take(task_handle, tick);
+}
+
+/****************************************************************************
+ * Name: bl_os_api_init
+ *
+ * Description:
+ *
+ * Input Parameters:
+ *
+ * Returned Value:
+ *
+ ****************************************************************************/
+
+int bl_os_api_init(void)
+{
+  return 0;
+}
+
+/****************************************************************************
+ * Name: bl_os_lock_gaint
+ *
+ * Description:
+ *
+ * Input Parameters:
+ *
+ * Returned Value:
+ *
+ ****************************************************************************/
+
+void bl_os_lock_gaint(void)
+{
+}
+
+/****************************************************************************
+ * Name: bl_os_unlock_gaint
+ *
+ * Description:
+ *
+ * Input Parameters:
+ *
+ * Returned Value:
+ *
+ ****************************************************************************/
+
+void bl_os_unlock_gaint(void)
+{
+}
+
+/****************************************************************************
+ * Name: bl_os_enter_critical
+ *
+ * Description:
+ *   Enter critical state
+ *
+ * Input Parameters:
+ *   None
+ *
+ * Returned Value:
+ *   CPU PS value
+ *
+ ****************************************************************************/
+
+uint32_t bl_os_enter_critical(void)
+{
+  irqstate_t flags;
+
+  flags = enter_critical_section();
+
+  return flags;
+}
+
+/****************************************************************************
+ * Name: bl_os_exit_critical
+ *
+ * Description:
+ *   Exit from critical state
+ *
+ * Input Parameters:
+ *   level - CPU PS value
+ *
+ * Returned Value:
+ *   None
+ *
+ ****************************************************************************/
+
+void bl_os_exit_critical(uint32_t level)
+{
+  leave_critical_section(level);
+}
+
+/****************************************************************************
+ * Name: bl_os_msleep
+ *
+ * Description:
+ *
+ * Input Parameters:
+ *
+ * Returned Value:
+ *
+ ****************************************************************************/
+
+int bl_os_msleep(long msec)
+{
+  useconds_t usec = msec * 1000;
+
+  return nxsig_usleep(usec);
+}
+
+/****************************************************************************
+ * Name: bl_os_sleep
+ *
+ * Description:
+ *
+ * Input Parameters:
+ *
+ * Returned Value:
+ *
+ ****************************************************************************/
+
+int bl_os_sleep(unsigned int seconds)
+{
+  return nxsig_sleep(seconds);
+}
+
+/****************************************************************************
+ * Name: bl_os_printf
+ *
+ * Description:
+ *   Output format string and its arguments
+ *
+ * Input Parameters:
+ *   format - format string
+ *
+ * Returned Value:
+ *   0
+ *
+ ****************************************************************************/
+
+void bl_os_printf(const char *__fmt, ...)
+{
+  if (&_wifi_log_flag)
+    {
+      va_list arg;
+
+      va_start(arg, __fmt);
+      vsyslog(LOG_INFO, __fmt, arg);
+      va_end(arg);
+    }
+}
+
+/****************************************************************************
+ * Name: bl_os_malloc
+ *
+ * Description:
+ *   Allocate a block of memory
+ *
+ * Input Parameters:
+ *   size - memory size
+ *
+ * Returned Value:
+ *   Memory pointer
+ *
+ ****************************************************************************/
+
+void *bl_os_malloc(unsigned int size)
+{
+  return kmm_malloc(size);
+}
+
+/****************************************************************************
+ * Name: bl_os_free
+ *
+ * Description:
+ *   Free a block of memory
+ *
+ * Input Parameters:
+ *   ptr - memory block
+ *
+ * Returned Value:
+ *   No
+ *
+ ****************************************************************************/
+
+void bl_os_free(void *ptr)
+{
+  kmm_free(ptr);
+}
+
+/****************************************************************************
+ * Name: bl_os_zalloc
+ *
+ * Description:
+ *   Allocate a block of memory
+ *
+ * Input Parameters:
+ *   size - memory size
+ *
+ * Returned Value:
+ *   Memory pointer
+ *
+ ****************************************************************************/
+
+void *bl_os_zalloc(unsigned int size)
+{
+  return kmm_zalloc(size);
+}
+
+/****************************************************************************
+ * Name: bl_os_update_time
+ *
+ * Description:
+ *   Transform ticks to time and add this time to timespec value
+ *
+ * Input Parameters:
+ *   timespec - Input timespec data pointer
+ *   ticks    - System ticks
+ *
+ * Returned Value:
+ *   None
+ *
+ ****************************************************************************/
+
+static void bl_os_update_time(struct timespec *timespec, uint32_t ticks)
+{
+  uint32_t tmp;
+
+  tmp = TICK2SEC(ticks);
+  timespec->tv_sec += tmp;
+
+  ticks -= SEC2TICK(tmp);
+  tmp = TICK2NSEC(ticks);
+
+  timespec->tv_nsec += tmp;
+}
+
+/****************************************************************************
+ * Name: bl_os_errno_trans
+ *
+ * Description:
+ *   Transform from nuttx Os error code to Wi-Fi adapter error code
+ *
+ * Input Parameters:
+ *   ret - NuttX error code
+ *
+ * Returned Value:
+ *   Wi-Fi adapter error code
+ *
+ ****************************************************************************/
+
+static inline int32_t bl_os_errno_trans(int ret)
+{
+  if (!ret)
+    {
+      return true;
+    }
+  else
+    {
+      return false;
+    }
+}
+
+/****************************************************************************
+ * Name: bl_os_mq_creat
+ *
+ * Description:
+ *
+ * Input Parameters:
+ *
+ * Returned Value:
+ *
+ ****************************************************************************/
+
+void *bl_os_mq_creat(uint32_t queue_len, uint32_t item_size)
+{
+  struct mq_attr attr;
+  struct mq_adpt *mq_adpt;
+  int ret;
+
+  mq_adpt = (struct mq_adpt *)kmm_malloc(sizeof(struct mq_adpt));
+
+  if (!mq_adpt)
+    {
+      wlerr("ERROR: Failed to kmm_malloc\n");
+      return NULL;
+    }
+
+  snprintf(mq_adpt->name, sizeof(mq_adpt->name),
+           "/tmp/%p", mq_adpt);
+
+  attr.mq_maxmsg  = queue_len;
+  attr.mq_msgsize = item_size;
+  attr.mq_curmsgs = 0;
+  attr.mq_flags   = 0;
+
+  ret = file_mq_open(&mq_adpt->mq, mq_adpt->name,
+                     O_RDWR | O_CREAT, 0644, &attr);
+
+  if (ret < 0)
+    {
+      wlerr("ERROR: Failed to create mqueue\n");
+      kmm_free(mq_adpt);
+      return NULL;
+    }
+
+  mq_adpt->msgsize = item_size;
+
+  return (void *)mq_adpt;
+}
+
+/****************************************************************************
+ * Name: bl_os_mq_delete
+ *
+ * Description:
+ *
+ * Input Parameters:
+ *
+ * Returned Value:
+ *
+ ****************************************************************************/
+
+void bl_os_mq_delete(void *mq)
+{
+  struct mq_adpt *mq_adpt = (struct mq_adpt *)mq;
+
+  file_mq_close(&mq_adpt->mq);
+  file_mq_unlink(mq_adpt->name);
+  kmm_free(mq_adpt);
+}
+
+/****************************************************************************
+ * Name: bl_os_mq_send_generic
+ *
+ * Description:
+ *   Generic send message to queue within a certain period of time
+ *
+ * Input Parameters:
+ *   queue - Message queue data pointer
+ *   item  - Message data pointer
+ *   ticks - Wait ticks
+ *   prio  - Message priority
+ *
+ * Returned Value:
+ *   True if success or false if fail
+ *
+ ****************************************************************************/
+
+int bl_os_mq_send_wait(void *queue, void *item, uint32_t len,
+                       uint32_t ticks, int prio)
+{
+  int ret;
+  struct timespec timeout;
+  struct mq_adpt *mq_adpt = (struct mq_adpt *)queue;
+
+  if (ticks == BL_OS_WAITING_FOREVER || ticks == 0)
+    {
+      /* Wi-Fi interrupt function will call this adapter function to send
+       * message to message queue, so here we should call kernel API
+       * instead of application API
+       */
+
+      ret = file_mq_send(&mq_adpt->mq, (const char *)item,
+                         len, prio);
+      if (ret < 0)
+        {
+          wlerr("ERROR: Failed to send message to mqueue error=%d\n",
+                ret);
+        }
+    }
+  else
+    {
+      ret = clock_gettime(CLOCK_REALTIME, &timeout);
+      if (ret < 0)
+        {
+          wlerr("ERROR: Failed to get time\n");
+          return false;
+        }
+
+      if (ticks)
+        {
+          bl_os_update_time(&timeout, ticks);
+        }
+
+      ret = file_mq_timedsend(&mq_adpt->mq, (const char *)item,
+                              len, prio, &timeout);
+      if (ret < 0)
+        {
+          wlerr("ERROR: Failed to timedsend message to mqueue error=%d\n",
+                ret);
+        }
+    }
+
+  return bl_os_errno_trans(ret);
+}
+
+/****************************************************************************
+ * Name: bl_os_mq_send
+ *
+ * Description:
+ *   Send message of low priority to queue within a certain period of time
+ *
+ * Input Parameters:
+ *   queue - Message queue data pointer
+ *   item  - Message data pointer
+ *   ticks - Wait ticks
+ *
+ * Returned Value:
+ *   True if success or false if fail
+ *
+ ****************************************************************************/
+
+int bl_os_mq_send(void *queue, void *item, uint32_t len)
+{
+  return bl_os_mq_send_wait(queue, item, len, BL_OS_WAITING_FOREVER, 0);
+}
+
+/****************************************************************************
+ * Name: bl_os_mq_recv
+ *
+ * Description:
+ *   Receive message from queue within a certain period of time
+ *
+ * Input Parameters:
+ *   queue - Message queue data pointer
+ *   item  - Message data pointer
+ *   ticks - Wait ticks
+ *
+ * Returned Value:
+ *   True if success or false if fail
+ *
+ ****************************************************************************/
+
+int bl_os_mq_recv(void *queue, void *item, uint32_t len, uint32_t tick)
+{
+  ssize_t ret;
+  struct timespec timeout;
+  unsigned int prio;
+  struct mq_adpt *mq_adpt = (struct mq_adpt *)queue;
+
+  if (tick == BL_OS_WAITING_FOREVER)
+    {
+      ret = file_mq_receive(&mq_adpt->mq,
+                            (char *)item,
+                            mq_adpt->msgsize,
+                            &prio);
+      if (ret < 0)
+        {
+          wlerr("ERROR: Failed to receive from mqueue error=%d\n", ret);
+        }
+    }
+  else
+    {
+      ret = clock_gettime(CLOCK_REALTIME, &timeout);
+
+      if (ret < 0)
+        {
+          wlerr("ERROR: Failed to get time\n");
+          return false;
+        }
+
+      if (tick)
+        {
+          bl_os_update_time(&timeout, tick);
+        }
+
+      ret = file_mq_timedreceive(&mq_adpt->mq,
+                                 (char *)item,
+                                 mq_adpt->msgsize,
+                                 &prio,
+                                 &timeout);
+      if (ret < 0)
+        {
+          wlerr("ERROR: Failed to timedreceive from mqueue error=%d\n", ret);
+        }
+    }
+
+  return ret < 0 ? false : true;
+}
+
+/****************************************************************************
+ * Name: bl_os_timer_callback
+ *
+ * Description:
+ *
+ * Input Parameters:
+ *
+ * Returned Value:
+ *
+ ****************************************************************************/
+
+static void bl_os_timer_callback(wdparm_t arg)
+{
+  struct timer_adpt *timer;
+  bl_os_timer_mode_t mode;
+
+  timer = (struct timer_adpt *)arg;
+  mode = timer->mode;
+
+  if (timer->func)
+    {
+      timer->func(timer->arg);
+    }
+
+  if (mode == BL_OS_TIEMR_CYCLE)
+    {
+      wd_start(&timer->wdog, timer->delay, bl_os_timer_callback, arg);
+    }
+}
+
+/****************************************************************************
+ * Name: bl_os_timer_create
+ *
+ * Description:
+ *
+ * Input Parameters:
+ *
+ * Returned Value:
+ *
+ ****************************************************************************/
+
+void *bl_os_timer_create(void *func, void *argv)
+{
+  struct timer_adpt *timer;
+
+  timer = (struct timer_adpt *)kmm_malloc(sizeof(struct timer_adpt));
+
+  if (!timer)
+    {
+      assert(0);
+    }
+
+  memset((void *)timer, 0, sizeof(struct timer_adpt));
+
+  timer->func = func;
+  timer->arg = argv;
+
+  return timer;
+}
+
+/****************************************************************************
+ * Name: bl_os_timer_delete
+ *
+ * Description:
+ *
+ * Input Parameters:
+ *
+ * Returned Value:
+ *
+ ****************************************************************************/
+
+int bl_os_timer_delete(void *timerid, uint32_t tick)
+{
+  struct timer_adpt *timer;
+  int ret;
+
+  timer = (struct timer_adpt *)timerid;
+
+  if (!timer)
+    {
+      return -EFAULT;
+    }
+
+  ret = wd_cancel(&timer->wdog);
+
+  kmm_free(timerid);
+
+  return ret;
+}
+
+/****************************************************************************
+ * Name: os_timer_start_once
+ *
+ * Description:
+ *
+ * Input Parameters:
+ *
+ * Returned Value:
+ *
+ ****************************************************************************/
+
+int bl_os_timer_start_once(void *timerid, long t_sec, long t_nsec)
+{
+  struct timer_adpt *timer;
+  struct timespec reltime;
+  int32_t tick;
+
+  timer = (struct timer_adpt *)timerid;
+
+  if (!timer)
+    {
+      return -EFAULT;
+    }
+
+  reltime.tv_nsec = t_nsec;
+  reltime.tv_sec = t_sec;
+
+  clock_time2ticks(&reltime, &tick);
+
+  timer->mode = BL_OS_TIEMR_ONCE;
+  timer->delay = tick;
+
+  return wd_start(&timer->wdog,
+                  timer->delay,
+                  bl_os_timer_callback,
+                  (wdparm_t)timer);
+}
+
+/****************************************************************************
+ * Name: os_timer_start_periodic
+ *
+ * Description:
+ *
+ * Input Parameters:
+ *
+ * Returned Value:
+ *
+ ****************************************************************************/
+
+int bl_os_timer_start_periodic(void *timerid, long t_sec, long t_nsec)
+{
+  struct timer_adpt *timer;
+  struct timespec reltime;
+  int32_t tick;
+
+  timer = (struct timer_adpt *)timerid;
+
+  if (!timer)
+    {
+      return -EFAULT;
+    }
+
+  reltime.tv_nsec = t_nsec;
+  reltime.tv_sec = t_sec;
+
+  clock_time2ticks(&reltime, &tick);
+
+  timer->mode = BL_OS_TIEMR_CYCLE;
+  timer->delay = tick;
+
+  return wd_start(&timer->wdog,
+                  timer->delay,
+                  bl_os_timer_callback,
+                  (wdparm_t)timer);
+}
+
+/****************************************************************************
+ * Name: bl_os_workqueue_create
+ *
+ * Description:
+ *
+ * Input Parameters:
+ *
+ * Returned Value:
+ *
+ ****************************************************************************/
+
+void *bl_os_workqueue_create(void)
+{
+  struct work_s *work = NULL;
+  work = (struct work_s *)kmm_calloc(1, sizeof(struct work_s));
+
+  if (!work)
+    {
+      assert(0);
+    }
+
+  return (void *)work;
+}
+
+/****************************************************************************
+ * Name: bl_os_workqueue_submit_hpwork
+ *
+ * Description:
+ *
+ * Input Parameters:
+ *
+ * Returned Value:
+ *
+ ****************************************************************************/
+
+int bl_os_workqueue_submit_hpwork(void *work,
+                                  void *worker,
+                                  void *argv,
+                                  long tick)
+{
+  if (!work)
+    {
+      return -EINVAL;
+    }
+
+  if (!work_available((struct work_s *)work))
+    {
+      return -EINVAL;
+    }
+
+  return work_queue(OS_HPWORK, work, (worker_t)worker, argv, tick);
+}
+
+/****************************************************************************
+ * Name: bl_os_workqueue_submit_lpwork
+ *
+ * Description:
+ *
+ * Input Parameters:
+ *
+ * Returned Value:
+ *
+ ****************************************************************************/
+
+int bl_os_workqueue_submit_lpwork(void *work,
+                                  void *worker,
+                                  void *argv,
+                                  long tick)
+{
+  if (!work)
+    {
+      return -EINVAL;
+    }
+
+  if (!work_available((struct work_s *)work))
+    {
+      return -EINVAL;
+    }
+
+  return work_queue(OS_LPWORK, work, (worker_t)worker, argv, tick);
+}
+
+/****************************************************************************
+ * Name: bl_os_clock_gettime_ms
+ *
+ * Description:
+ *
+ * Input Parameters:
+ *
+ * Returned Value:
+ *
+ ****************************************************************************/
+
+uint64_t bl_os_clock_gettime_ms(void)
+{
+  struct timespec ts;
+  clock_gettime(CLOCK_REALTIME, &ts);
+  return ts.tv_sec * 1000 + ts.tv_nsec / 1000000;
+}
+
+/****************************************************************************
+ * Name: bl_os_get_tick
+ *
+ * Description:
+ *
+ * Input Parameters:
+ *
+ * Returned Value:
+ *
+ ****************************************************************************/
+
+uint32_t bl_os_get_tick()
+{
+  uint32_t tick;
+
+  tick = bl_os_clock_gettime_ms();
+
+  return tick;
+}
+
+/****************************************************************************
+ * Name: bl_os_isr_adpt_cb
+ *
+ * Description:
+ *   Wi-Fi interrupt adapter callback function
+ *
+ * Input Parameters:
+ *   arg - interrupt adapter private data
+ *
+ * Returned Value:
+ *   0 on success
+ *
+ ****************************************************************************/
+
+static int bl_os_isr_adpt_cb(int irq, void *context, FAR void *arg)
+{
+  struct irq_adpt *adapter = (struct irq_adpt *)arg;
+
+  adapter->func(adapter->arg);
+
+  return 0;
+}
+
+/****************************************************************************
+ * Name: bl_os_irq_attach
+ *
+ * Description:
+ *
+ * Input Parameters:
+ *
+ * Returned Value:
+ *
+ ****************************************************************************/
+
+void bl_os_irq_attach(int32_t n, void *f, void *arg)
+{
+  int ret;
+  struct irq_adpt *adapter;
+
+  wlinfo("INFO: n=%ld f=%p arg=%p\n", n, f, arg);
+
+  adapter = (struct irq_adpt *)kmm_malloc(sizeof(struct irq_adpt));
+
+  if (!adapter)
+    {
+      DEBUGASSERT(0);
+    }
+
+  adapter->func = f;
+  adapter->arg  = arg;
+
+  ret = irq_attach(n, bl_os_isr_adpt_cb, (void *)adapter);
+
+  if (ret != OK)
+    {
+      DEBUGASSERT(0);
+    }
+}
+
+/****************************************************************************
+ * Name: bl_os_irq_enable
+ *
+ * Description:
+ *
+ * Input Parameters:
+ *
+ * Returned Value:
+ *
+ ****************************************************************************/
+
+void bl_os_irq_enable(int32_t n)
+{
+  up_enable_irq(n);
+}
+
+/****************************************************************************
+ * Name: bl_os_irq_disable
+ *
+ * Description:
+ *
+ * Input Parameters:
+ *
+ * Returned Value:
+ *
+ ****************************************************************************/
+
+void bl_os_irq_disable(int32_t n)
+{
+  up_disable_irq(n);
+}
+
+/****************************************************************************
+ * Name: bl_os_mutex_create
+ *
+ * Description:
+ *   Create mutex
+ *
+ * Input Parameters:
+ *   None
+ *
+ * Returned Value:
+ *   Mutex data pointer
+ *
+ ****************************************************************************/
+
+void *bl_os_mutex_create(void)
+{
+  int ret;
+  sem_t *sem;
+  int tmp;
+
+  tmp = sizeof(sem_t);
+  sem = (sem_t *)kmm_malloc(tmp);
+  if (!sem)
+    {
+      wlerr("ERROR: Failed to alloc %d memory\n", tmp);
+      return NULL;
+    }
+
+  ret = nxsem_init(sem, 0, 1);
+  if (ret)
+    {
+      wlerr("ERROR: Failed to initialize sem error=%d\n", ret);
+      kmm_free(sem);
+      return NULL;
+    }
+
+  return sem;
+}
+
+/****************************************************************************
+ * Name: bl_os_mutex_delete
+ *
+ * Description:
+ *   Delete mutex
+ *
+ * Input Parameters:
+ *   mutex_data - mutex data pointer
+ *
+ * Returned Value:
+ *   None
+ *
+ ****************************************************************************/
+
+void bl_os_mutex_delete(void *mutex_data)
+{
+  sem_t *sem = (sem_t *)mutex_data;
+
+  nxsem_destroy(sem);
+  kmm_free(sem);
+}
+
+/****************************************************************************
+ * Name: bl_os_mutex_lock
+ *
+ * Description:
+ *   Lock mutex
+ *
+ * Input Parameters:
+ *   mutex_data - mutex data pointer
+ *
+ * Returned Value:
+ *   True if success or false if fail
+ *
+ ****************************************************************************/
+
+int32_t bl_os_mutex_lock(void *mutex_data)
+{
+  int ret;
+  sem_t *sem = (sem_t *)mutex_data;
+
+  ret = nxsem_wait(sem);
+  if (ret)
+    {
+      wlerr("ERROR: Failed to wait sem\n");
+    }
+
+  return bl_os_errno_trans(ret);
+}
+
+/****************************************************************************
+ * Name: bl_os_mutex_unlock
+ *
+ * Description:
+ *   Lock mutex
+ *
+ * Input Parameters:
+ *   mutex_data - mutex data pointer
+ *
+ * Returned Value:
+ *   True if success or false if fail
+ *
+ ****************************************************************************/
+
+int32_t bl_os_mutex_unlock(void *mutex_data)
+{
+  int ret;
+  sem_t *sem = (sem_t *)mutex_data;
+
+  ret = nxsem_post(sem);
+  if (ret)
+    {
+      wlerr("ERROR: Failed to post sem error=%d\n", ret);
+    }
+
+  return bl_os_errno_trans(ret);
+}
+
+/****************************************************************************
+ * Name: bl_os_sem_create
+ *
+ * Description:
+ *   Create and initialize semaphore
+ *
+ * Input Parameters:
+ *   max  - No mean
+ *   init - semaphore initialization value
+ *
+ * Returned Value:
+ *   Semaphore data pointer
+ *
+ ****************************************************************************/
+
+void *bl_os_sem_create(uint32_t init)
+{
+  int ret;
+  sem_t *sem;
+  int tmp;
+
+  tmp = sizeof(sem_t);
+  sem = (sem_t *)kmm_malloc(tmp);
+  if (!sem)
+    {
+      wlerr("ERROR: Failed to alloc %d memory\n", tmp);
+      return NULL;
+    }
+
+  ret = nxsem_init(sem, 0, init);
+  if (ret)
+    {
+      wlerr("ERROR: Failed to initialize sem error=%d\n", ret);
+      kmm_free(sem);
+      return NULL;
+    }
+
+  return sem;
+}
+
+/****************************************************************************
+ * Name: bl_os_sem_delete
+ *
+ * Description:
+ *   Delete semaphore
+ *
+ * Input Parameters:
+ *   semphr - Semaphore data pointer
+ *
+ * Returned Value:
+ *   None
+ *
+ ****************************************************************************/
+
+void bl_os_sem_delete(void *semphr)
+{
+  sem_t *sem = (sem_t *)semphr;
+
+  nxsem_destroy(sem);
+  kmm_free(sem);
+}
+
+/****************************************************************************
+ * Name: bl_os_sem_take
+ *
+ * Description:
+ *   Wait semaphore within a certain period of time
+ *
+ * Input Parameters:
+ *   semphr - Semaphore data pointer
+ *   ticks  - Wait system ticks
+ *
+ * Returned Value:
+ *   True if success or false if fail
+ *
+ ****************************************************************************/
+
+int32_t bl_os_sem_take(void *semphr, uint32_t ticks)
+{
+  int ret;
+  struct timespec timeout;
+  sem_t *sem = (sem_t *)semphr;
+
+  if (ticks == BL_OS_WAITING_FOREVER)
+    {
+      ret = nxsem_wait(sem);
+      if (ret)
+        {
+          wlerr("ERROR: Failed to wait sem\n");
+        }
+    }
+  else
+    {
+      ret = clock_gettime(CLOCK_REALTIME, &timeout);
+      if (ret < 0)
+        {
+          wlerr("ERROR: Failed to get time\n");
+          return false;
+        }
+
+      if (ticks)
+        {
+          bl_os_update_time(&timeout, ticks);
+        }
+
+      ret = nxsem_timedwait(sem, &timeout);
+      if (ret)
+        {
+          wlerr("ERROR: Failed to wait sem in %lu ticks\n", ticks);
+        }
+    }
+
+  return bl_os_errno_trans(ret);
+}
+
+/****************************************************************************
+ * Name: bl_os_sem_give
+ *
+ * Description:
+ *   Post semaphore
+ *
+ * Input Parameters:
+ *   semphr - Semaphore data pointer
+ *
+ * Returned Value:
+ *   True if success or false if fail
+ *
+ ****************************************************************************/
+
+int32_t bl_os_sem_give(void *semphr)
+{
+  int ret;
+  sem_t *sem = (sem_t *)semphr;
+
+  ret = nxsem_post(sem);
+  if (ret)
+    {
+      wlerr("ERROR: Failed to post sem error=%d\n", ret);
+    }
+
+  return bl_os_errno_trans(ret);
+}
+
+/****************************************************************************
+ * Name: bl_os_log_writev
+ *
+ * Description:
+ *   Output log with by format string and its arguments
+ *
+ * Input Parameters:
+ *   level  - log level, no mean here
+ *   tag    - log TAG, no mean here
+ *   file   - file name
+ *   line   - assert line
+ *   format - format string
+ *   args   - arguments list
+ *
+ * Returned Value:
+ *   None
+ *
+ ****************************************************************************/
+
+static void bl_os_log_writev(uint32_t level,
+                             const char *tag,
+                             const char *file,
+                             int line,
+                             const char *format,
+                             va_list args)
+{
+  switch (level)
+    {
+    case LOG_LEVEL_ERROR:
+      {
+        vsyslog(LOG_ERR, format, args);
+        break;
+      }
+
+    case LOG_LEVEL_WARN:
+      {
+        vsyslog(LOG_WARNING, format, args);
+        break;
+      }
+
+    case LOG_LEVEL_INFO:
+      {
+        vsyslog(LOG_INFO, format, args);
+        break;
+      }
+    }
+}
+
+/****************************************************************************
+ * Name: bl_os_log_write
+ *
+ * Description:
+ *   Output log with by format string and its arguments
+ *
+ * Input Parameters:
+ *   level  - log level, no mean here
+ *   file   - file name
+ *   line   - assert line
+ *   tag    - log TAG, no mean here
+ *   format - format string
+ *
+ * Returned Value:
+ *   None
+ *
+ ****************************************************************************/
+
+void bl_os_log_write(uint32_t level,
+                     const char *tag,
+                     const char *file,
+                     int line,
+                     const char *format,
+                     ...)
+{
+  if (&_wifi_log_flag)
+    {
+      va_list list;
+      va_start(list, format);
+      bl_os_log_writev(level, tag, NULL, 0, format, list);
+      va_end(list);
+    }
+}
+#endif
diff --git a/arch/risc-v/src/bl602/bl602_os_hal.h b/arch/risc-v/src/bl602/bl602_os_hal.h
new file mode 100644
index 0000000..876b0d2
--- /dev/null
+++ b/arch/risc-v/src/bl602/bl602_os_hal.h
@@ -0,0 +1,186 @@
+/****************************************************************************
+ * arch/risc-v/src/bl602/bl602_os_hal.h
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.  The
+ * ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the
+ * License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ *
+ ****************************************************************************/
+
+#ifndef __ARCH_RISCV_SRC_BL602_OS_HAL_H
+#define __ARCH_RISCV_SRC_BL602_OS_HAL_H
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <stdint.h>
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+#ifndef __ASSEMBLY__
+
+#undef EXTERN
+#if defined(__cplusplus)
+#define EXTERN extern "C"
+extern "C"
+{
+#else
+#define EXTERN extern
+#endif
+
+/****************************************************************************
+ * Definition
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Function Prototypes
+ ****************************************************************************/
+
+void bl_os_printf(const char *__fmt, ...);
+
+void bl_os_assert_func(const char *file,
+                       int line,
+                       const char *func,
+                       const char *expr);
+
+void *bl_os_malloc(unsigned int size);
+
+void bl_os_free(void *ptr);
+
+void *bl_os_zalloc(unsigned int size);
+
+int bl_os_task_create(const char *name,
+                      void *entry,
+                      uint32_t stack_depth,
+                      void *param,
+                      uint32_t prio,
+                      void *task_handle);
+
+void bl_os_task_delete(void *task_handle);
+
+void *bl_os_task_get_current_task(void);
+
+void *bl_os_task_notify_create(void);
+
+void bl_os_task_notify(void *task_handle);
+
+void bl_os_task_wait(void *task_handle, uint32_t tick);
+
+void *bl_os_mq_creat(uint32_t queue_len, uint32_t item_size);
+
+void bl_os_mq_delete(void *mq);
+
+int bl_os_mq_send_wait(void *queue,
+                       void *item,
+                       uint32_t len,
+                       uint32_t ticks,
+                       int prio);
+
+int bl_os_mq_send(void *queue, void *item, uint32_t len);
+
+int bl_os_mq_recv(void *queue, void *item, uint32_t len, uint32_t tick);
+
+void *bl_os_timer_create(void *func, void *argv);
+
+int bl_os_timer_delete(void *timerid, uint32_t tick);
+
+int bl_os_timer_start_once(void *timerid, long t_sec, long t_nsec);
+
+int bl_os_timer_start_periodic(void *timerid, long t_sec, long t_nsec);
+
+void *bl_os_workqueue_create(void);
+
+int bl_os_workqueue_submit_hpwork(void *work,
+                                  void *worker,
+                                  void *argv,
+                                  long tick);
+
+int bl_os_workqueue_submit_lpwork(void *work,
+                                  void *worker,
+                                  void *argv,
+                                  long tick);
+
+uint64_t bl_os_clock_gettime_ms(void);
+
+void bl_os_irq_attach(int32_t n, void *f, void *arg);
+
+void bl_os_irq_enable(int32_t n);
+
+void bl_os_irq_disable(int32_t n);
+
+void *bl_os_mutex_create(void);
+
+void bl_os_mutex_delete(void *mutex_data);
+
+int32_t bl_os_mutex_lock(void *mutex_data);
+
+int32_t bl_os_mutex_unlock(void *mutex_data);
+
+void *bl_os_sem_create(uint32_t init);
+
+int32_t bl_os_sem_take(void *semphr, uint32_t ticks);
+
+int32_t bl_os_sem_give(void *semphr);
+
+void bl_os_sem_delete(void *semphr);
+
+int bl_os_api_init(void);
+
+void *bl_os_event_create(void);
+
+void bl_os_event_delete(void *event);
+
+uint32_t bl_os_event_send(void *event, uint32_t bits);
+
+uint32_t bl_os_event_wait(void *event,
+                          uint32_t bits_to_wait_for,
+                          int clear_on_exit,
+                          int wait_for_all_bits,
+                          uint32_t block_time_tick);
+
+int bl_os_event_register(int type, void *cb, void *arg);
+
+int bl_os_event_notify(int evt, int val);
+
+void bl_os_lock_gaint(void);
+
+void bl_os_unlock_gaint(void);
+
+int bl_os_msleep(long msec);
+
+uint32_t bl_os_get_tick(void);
+
+int bl_os_sleep(unsigned int seconds);
+
+uint32_t bl_os_enter_critical(void);
+
+void bl_os_exit_critical(uint32_t level);
+
+void bl_os_log_write(uint32_t level,
+                     const char *tag,
+                     const char *file,
+                     int line,
+                     const char *format,
+                     ...);
+
+  #undef EXTERN
+  #if defined(__cplusplus)
+}
+#endif
+
+#endif /* __ASSEMBLY__ */
+#endif /* __ARCH_RISCV_SRC_BL602_OS_HAL_H*/

[incubator-nuttx] 02/02: Update bl602 MTU_SIZE and TX_BUF_SIZE

Posted by xi...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git

commit f4b6bb281cbf0fb26288aad83e7afe4955643ad0
Author: jsun <js...@bouffalolab.com>
AuthorDate: Fri Sep 17 18:37:00 2021 +0800

    Update bl602 MTU_SIZE and TX_BUF_SIZE
    
    N/A
    
    Signed-off-by: jsun <js...@bouffalolab.com>
---
 arch/risc-v/src/bl602/bl602_netdev.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/arch/risc-v/src/bl602/bl602_netdev.c b/arch/risc-v/src/bl602/bl602_netdev.c
index ad4fe5b..549e92e 100644
--- a/arch/risc-v/src/bl602/bl602_netdev.c
+++ b/arch/risc-v/src/bl602/bl602_netdev.c
@@ -107,13 +107,13 @@
 
 #define BL602_NET_WDDELAY (1 * CLOCKS_PER_SEC)
 
+#define WIFI_MTU_SIZE 1516
+
 #define BL602_NET_TXBUFF_NUM  12
-#define BL602_NET_TXBUFF_SIZE (1650)
+#define BL602_NET_TXBUFF_SIZE (WIFI_MTU_SIZE + PRESERVE_80211_HEADER_LEN)
 
 #define BL602_TXDESC_THRESHOLD 3
 
-#define WIFI_MTU_SIZE 1514
-
 #if BL602_NET_TXBUFF_SIZE & 0x3 != 0
 #error "BL602_NET_TXBUFF_SIZE must be aligned to 4 bytes"
 #endif