saramonteiro commented on a change in pull request #4509: URL: https://github.com/apache/incubator-nuttx/pull/4509#discussion_r715207478
########## File path: arch/xtensa/src/esp32/esp32_ble_adapter.c ########## @@ -0,0 +1,2814 @@ +/**************************************************************************** + * arch/xtensa/src/esp32/esp32_ble_adapter.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 <nuttx/config.h> +#include <stddef.h> +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#include <assert.h> +#include <debug.h> +#include <pthread.h> +#include <fcntl.h> +#include <unistd.h> +#include <clock/clock.h> +#include <sys/time.h> +#include <sys/types.h> +#include <sys/stat.h> + +#include <nuttx/kmalloc.h> +#include <nuttx/mqueue.h> +#include <nuttx/spinlock.h> +#include <nuttx/irq.h> +#include <nuttx/semaphore.h> +#include <nuttx/kthread.h> +#include <nuttx/wdog.h> +#include <nuttx/wqueue.h> +#include <nuttx/sched.h> +#include <nuttx/signal.h> +#include <irq/irq.h> + +#include "hardware/esp32_dport.h" +#include "espidf_wifi.h" +#include "xtensa.h" +#include "xtensa_attr.h" +#include "esp32_rt_timer.h" +#include "esp32_ble_adapter.h" + +#ifdef CONFIG_ESP32_WIFI_BT_COEXIST +# include "esp_coexist_internal.h" +# include "esp_coexist_adapter.h" +#endif + +/**************************************************************************** + * Pre-processor Definitions + ****************************************************************************/ + +typedef void (*xt_handler)(void *); +typedef void (* coex_func_cb_t)(uint32_t event, int sched_cnt); + +#define XTHAL_SET_INTSET(v) do { int __interrupt = (int)(v); \ + __asm__ __volatile__("wsr.intset %0" :: "a"(__interrupt):"memory"); \ + } while(0) + +#define ESP_ERR_INVALID_STATE 0x103 + +#define OSI_FUNCS_TIME_BLOCKING 0xffffffff +#define OSI_VERSION 0x00010002 +#define OSI_MAGIC_VALUE 0xfadebead + +#define BTDM_ASYNC_WAKEUP_REQ_HCI 0 +#define BTDM_ASYNC_WAKEUP_REQ_COEX 1 +#define BTDM_ASYNC_WAKEUP_REQMAX 2 + +#ifdef CONFIG_PM +#define BTDM_MIN_TIMER_UNCERTAINTY_US (1800) + +/* Low Power Clock Selection */ + +#define BTDM_LPCLK_SEL_XTAL (0) +#define BTDM_LPCLK_SEL_XTAL32K (1) +#define BTDM_LPCLK_SEL_RTC_SLOW (2) +#define BTDM_LPCLK_SEL_8M (3) + +/* Sleep and wakeup interval control */ + +#define BTDM_MIN_SLEEP_DURATION (24) /* threshold of interval in half slots to allow to fall into modem sleep */ +#define BTDM_MODEM_WAKE_UP_DELAY (8) /* delay in half slots of modem wake up procedure, including re-enable PHY/RF */ +#endif + +#define BTDM_MODEM_SLEEP_MODE_NONE 0 + +#define ESP_BT_CONTROLLER_CONFIG_MAGIC_VAL 0x20200622 + +extern void btdm_controller_set_sleep_mode(uint8_t mode); + +#ifdef CONFIG_ESP32_WIFI_BT_COEXIST +extern void coex_pti_v2(void); +#endif + +/**************************************************************************** + * Private Types + ****************************************************************************/ + +#define RTC_CLK_CAL_FRACT 19 /* Number of fractional bits in values returned by rtc_clk_cal */ + +/* DPORT_WIFI_CLK_EN : R/W ;bitpos:[31:0] ;default: 32'hfffce030 ; */ + +#define DPORT_WIFI_CLK_EN 0xFFFFFFFF +#define DPORT_WIFI_CLK_EN_M ((DPORT_WIFI_CLK_EN_V)<<(DPORT_WIFI_CLK_EN_S)) +#define DPORT_WIFI_CLK_EN_V 0xFFFFFFFF +#define DPORT_WIFI_CLK_EN_S 0 + +/* Write value to DPORT register (does not require protecting) */ + +#define DPORT_REG_WRITE(_r, _v) _DPORT_REG_WRITE((_r), (_v)) +#define DPORT_REG_READ(_r) _DPORT_REG_READ(_r) + +#define DPORT_READ_PERI_REG(addr) _DPORT_READ_PERI_REG(addr) +#define _DPORT_READ_PERI_REG(addr) (*((volatile uint32_t *)(addr))) +#define _DPORT_WRITE_PERI_REG(addr, val) (*((volatile uint32_t *)(addr))) = (uint32_t)(val) + +/* Write value to register */ + +#define DPORT_WRITE_PERI_REG(addr, val) _DPORT_WRITE_PERI_REG((addr), (val)) + +/* Set bits of register controlled by mask */ + +#define DPORT_SET_PERI_REG_MASK(reg, mask) DPORT_WRITE_PERI_REG((reg), (DPORT_READ_PERI_REG(reg)|(mask))) + +/* clear bits of register controlled by mask */ + +#define DPORT_CLEAR_PERI_REG_MASK(reg, mask) DPORT_WRITE_PERI_REG((reg), (DPORT_READ_PERI_REG(reg)&(~(mask)))) + +/* BLE message queue private data */ + +struct mq_adpt_s +{ + struct file mq; /* Message queue handle */ + uint32_t msgsize; /* Message size */ + char name[16]; /* Message queue name */ Review comment: Use some macro for 16 -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: commits-unsubscr...@nuttx.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org