nuttx/drivers/wireless/ieee80211/bcm43xxx/bcmf_gspi.h
anjiahao d1d46335df Replace nxsem API when used as a lock with nxmutex API
Signed-off-by: anjiahao <anjiahao@xiaomi.com>
Signed-off-by: Xiang Xiao <xiaoxiang@xiaomi.com>
2022-10-17 15:59:46 +09:00

139 lines
5.5 KiB
C

/****************************************************************************
* drivers/wireless/ieee80211/bcm43xxx/bcmf_gspi.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 __DRIVERS_WIRELESS_IEEE80211_BCM43XXX_BCMF_GSPI_H
#define __DRIVERS_WIRELESS_IEEE80211_BCM43XXX_BCMF_GSPI_H
/****************************************************************************
* Included Files
****************************************************************************/
#include <nuttx/config.h>
#include <stdint.h>
#include <stdbool.h>
#include <nuttx/list.h>
#include <nuttx/mutex.h>
#include <nuttx/semaphore.h>
#include <nuttx/wireless/ieee80211/bcmf_gspi.h>
#include "bcmf_chip_data.h"
#include "bcmf_driver.h"
#include "bcmf_sdio_core.h"
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
#define HEADER_SIZE 0x12 /* Default sdpcm + bdc header size */
#define FIRST_WORD_SIZE 4
#define FC_UPDATE_PKT_LENGTH 12
#define BCMF_UPLOAD_TRANSFER_SIZE 64
/* gSPI bus structure extension */
/* Note:
* The structure referred to above must as its first item:
*
* struct bcmf_bus_dev_s bus; --- Default bcmf bus structure
*
* The structure must also contain the following items:
*
* int cur_chip_id; --- Chip ID read from the card
* struct bcmf_chip_data *chip; --- Chip specific configuration
*
* sem_t thread_signal; --- Thread event semaphore
*
* uint32_t backplane_current_addr; --- Current F1 backplane base addr
*
* uint8_t max_seq; --- Maximum TX sequence allowed
* uint8_t tx_seq; --- TX sequence number (next)
*
* mutex_t queue_lock; --- Lock for TX/RX/free queues
* struct list_node tx_queue; --- Queue of frames to transmit
* struct list_node rx_queue; --- Queue of frames for receiving
* volatile int tx_queue_count; --- Count of items in TX queue
*/
typedef struct bcmf_gspi_dev_s
{
struct bcmf_bus_dev_s bus; /* Default bcmf bus structure */
FAR struct gspi_dev_s *gspi; /* The gSPI device bound to this instance */
int cur_chip_id; /* Chip ID read from the card */
struct bcmf_chip_data *chip; /* Chip specific configuration */
volatile bool ready; /* Current device status */
bool sleeping; /* Current sleep status */
bool kso_enable; /* Current Keep sdio on status */
bool support_sr; /* Firmware support save restore */
pid_t thread_id; /* Processing thread id */
sem_t thread_signal; /* Semaphore for processing thread event */
volatile bool thread_run; /* Set false to exit processing thread */
volatile bool irq_pending; /* True if interrupt is pending */
uint32_t backplane_current_addr; /* Current function 1 backplane base addr */
uint8_t max_seq; /* Maximum transmit sequence allowed */
uint8_t tx_seq; /* Transmit sequence number (next) */
mutex_t queue_lock; /* Lock for TX/RX/free queues */
struct list_node tx_queue; /* Queue of frames to transmit */
struct list_node rx_queue; /* Queue of frames used to receive */
volatile int tx_queue_count; /* Count of items in TX queue */
} bcmf_gspi_dev_t;
/****************************************************************************
* Public Function Prototypes
****************************************************************************/
int bcmf_gspi_initialize(FAR struct gspi_dev_s *gspi);
int bcmf_bus_gspi_active(FAR struct bcmf_dev_s *priv,
bool active);
/* FIXME: Low level bus data transfer function
* To avoid bus error, len will be aligned to:
* - upper power of 2 iflen is lesser than 64
* - upper 64 bytes block if len is greater than 64
*/
int bcmf_transfer_bytes(FAR bcmf_gspi_dev_t *gbus,
bool write,
uint8_t function,
uint32_t address,
uint8_t *buf,
unsigned int len);
int bcmf_read_reg(FAR bcmf_gspi_dev_t *gbus,
uint8_t function,
uint32_t address,
uint8_t *reg);
int bcmf_write_reg(FAR bcmf_gspi_dev_t *gbus,
uint8_t function,
uint32_t address,
uint8_t reg);
#endif /* __DRIVERS_WIRELESS_IEEE80211_BCM43XXX_BCMF_GSPI_H */