155 lines
6.1 KiB
C
155 lines
6.1 KiB
C
/****************************************************************************
|
|
* drivers/wireless/ieee80211/bcm43xxx/bcmf_interface.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_INTERFACE_H
|
|
#define __DRIVERS_WIRELESS_IEEE80211_BCM43XXX_BCMF_INTERFACE_H
|
|
|
|
/* ==== This file contains dispatch between the SDIO & gSPI interface. ==== */
|
|
|
|
/****************************************************************************
|
|
* Included Files
|
|
****************************************************************************/
|
|
|
|
#include <nuttx/config.h>
|
|
|
|
#if defined(CONFIG_IEEE80211_BROADCOM_FULLMAC_SDIO)
|
|
#include "bcmf_sdio.h"
|
|
#elif defined(CONFIG_IEEE80211_BROADCOM_FULLMAC_GSPI)
|
|
#include "bcmf_gspi.h"
|
|
#else
|
|
#error Must define IEEE80211_BROADCOM_FULLMAC_SDIO or IEEE80211_BROADCOM_FULLMAC_GSPI
|
|
#endif
|
|
|
|
/****************************************************************************
|
|
* Public Types
|
|
****************************************************************************/
|
|
|
|
struct bcmf_dev_s;
|
|
|
|
#if defined(CONFIG_IEEE80211_BROADCOM_FULLMAC_SDIO)
|
|
typedef struct bcmf_sdio_dev_s bcmf_interface_dev_t;
|
|
#else
|
|
typedef bcmf_gspi_dev_t bcmf_interface_dev_t;
|
|
#endif
|
|
|
|
/* 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)
|
|
*
|
|
* sem_t queue_mutex; --- 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
|
|
*/
|
|
|
|
/* Structure used to manage interface frames */
|
|
|
|
typedef struct bcmf_interface_frame_s
|
|
{
|
|
struct bcmf_frame_s header;
|
|
bool tx;
|
|
struct list_node list_entry;
|
|
uint8_t pad[CONFIG_IEEE80211_BROADCOM_DMABUF_ALIGNMENT -
|
|
FIRST_WORD_SIZE]
|
|
aligned_data(CONFIG_IEEE80211_BROADCOM_DMABUF_ALIGNMENT);
|
|
|
|
/* pad[] array is used and aligned in order to make the following data[]
|
|
* buffer aligned beginning from the offset of 4 bytes to the address
|
|
* boundary for SDIO DMA transfers.
|
|
* The first 4 bytes of data[] buffer are not directly used in DMA
|
|
* transfers. Instead, they are used as the initial phase just to get
|
|
* the length of the remaining long data to be read. Thus only
|
|
* the remaining part of data[] buffer beginning from the offset of 4 bytes
|
|
* is required to be aligned to the address boundary set by
|
|
* CONFIG_IEEE80211_BROADCOM_SDIO_DMA_BUF_ALIGNMENT parameter.
|
|
*/
|
|
|
|
uint8_t data[HEADER_SIZE + MAX_NETDEV_PKTSIZE +
|
|
CONFIG_NET_GUARDSIZE];
|
|
} bcmf_interface_frame_t;
|
|
|
|
/****************************************************************************
|
|
* Public Function Prototypes
|
|
****************************************************************************/
|
|
|
|
/****************************************************************************
|
|
* Name: bcmf_bus_interface_active
|
|
****************************************************************************/
|
|
|
|
static inline int bcmf_bus_interface_active(FAR struct bcmf_dev_s *priv,
|
|
bool active)
|
|
{
|
|
#if defined(CONFIG_IEEE80211_BROADCOM_FULLMAC_SDIO)
|
|
return bcmf_bus_sdio_active(priv, active);
|
|
#else
|
|
return bcmf_bus_gspi_active(priv, active);
|
|
#endif
|
|
}
|
|
|
|
/****************************************************************************
|
|
* Name: bcmf_bus_io_abort
|
|
****************************************************************************/
|
|
|
|
static inline void bcmf_bus_io_abort(FAR bcmf_interface_dev_t *ibus)
|
|
{
|
|
#if defined(CONFIG_IEEE80211_BROADCOM_FULLMAC_SDIO)
|
|
bcmf_write_reg(ibus, 0, SDIO_CCCR_IOABORT, 2);
|
|
#else
|
|
return;
|
|
#endif
|
|
}
|
|
|
|
/****************************************************************************
|
|
* Name: bcmf_initialize_interface_frames
|
|
****************************************************************************/
|
|
|
|
void bcmf_initialize_interface_frames(void);
|
|
|
|
/****************************************************************************
|
|
* Name: bcmf_interface_free_frame
|
|
****************************************************************************/
|
|
|
|
void bcmf_interface_free_frame(FAR struct bcmf_dev_s *priv,
|
|
bcmf_interface_frame_t *iframe);
|
|
|
|
/****************************************************************************
|
|
* Name: bcmf_interface_allocate_frame
|
|
****************************************************************************/
|
|
|
|
bcmf_interface_frame_t
|
|
*bcmf_interface_allocate_frame(FAR struct bcmf_dev_s *priv,
|
|
bool block,
|
|
bool tx);
|
|
|
|
#endif /* __DRIVERS_WIRELESS_IEEE80211_BCM43XXX_BCMF_INTERFACE_H */
|