incubator-nuttx/drivers/modem/alt1250/altmdm_spi.h

297 lines
9.2 KiB
C

/****************************************************************************
* drivers/modem/alt1250/altmdm_spi.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_MODEM_ALT1250_ALTMDM_SPI_H
#define __DRIVERS_MODEM_ALT1250_ALTMDM_SPI_H
/****************************************************************************
* Included Files
****************************************************************************/
#include <nuttx/config.h>
#include <stdint.h>
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
#define ALTSPI_PKT_STATUS_POS (28)
#define ALTSPI_SLEEP_BIT (1 << 28)
#define ALTSPI_RESET_BIT (1 << 30)
#define ALTSPI_BUFFFULL_BIT (1 << 31)
#define ALTSPI_STATUSMASK (0x0f << ALTSPI_PKT_STATUS_POS)
#define ALTSPI_PKT_TOTALSIZE_POS (14)
#define ALTSPI_PKT_SIZEMASK ((1 << 14) - 1)
#define ALTSPI_PKT_WORDSIZE (4)
#define ALTSPI_PKT_HDRSIZE ALTSPI_PKT_WORDSIZE
#define ALTSPI_MAX_PKTSIZE (2064)
/****************************************************************************
* Public Types
****************************************************************************/
typedef struct altmdm_spipkt_s
{
uint32_t header; /* Buffer for SPI protocol headers to be exchanged with
* the ALT1250. */
void *buffer; /* Buffer for SPI protocol body to be exchanged with
* the ALT1250. */
int buff_size; /* Buffer size of the SPI protocol body. Maximum size
* is ALTSPI_MAX_PKTSIZE. */
} altmdm_spipkt_t;
/****************************************************************************
* Inline Functions
****************************************************************************/
static inline FAR void *get_pkt_buffer(FAR altmdm_spipkt_t *pkt)
{
return pkt->buffer;
}
static inline int get_pkt_size(FAR altmdm_spipkt_t *pkt)
{
return pkt->buff_size;
}
static inline int get_spipayload_maxsize(void)
{
return ALTSPI_MAX_PKTSIZE;
}
static inline uint16_t pkt_total_size(FAR altmdm_spipkt_t *pkt)
{
return (uint16_t)
((pkt->header >> ALTSPI_PKT_TOTALSIZE_POS) & ALTSPI_PKT_SIZEMASK);
}
static inline uint16_t pkt_actual_size(FAR altmdm_spipkt_t *pkt)
{
return (uint16_t)(pkt->header & ALTSPI_PKT_SIZEMASK);
}
static inline int is_sleep_pkt(FAR altmdm_spipkt_t *pkt)
{
return (pkt->header & ALTSPI_SLEEP_BIT);
}
static inline int is_reset_pkt(FAR altmdm_spipkt_t *pkt)
{
return (pkt->header & ALTSPI_RESET_BIT);
}
static inline int has_sendrequest(FAR altmdm_spipkt_t *pkt)
{
return (pkt->buffer != NULL);
}
static inline int is_buffer_full(FAR altmdm_spipkt_t *pkt)
{
return (pkt->header & ALTSPI_BUFFFULL_BIT);
}
/****************************************************************************
* Public Function Prototypes
****************************************************************************/
/****************************************************************************
* Name: altmdm_spipkt_init
*
* Description:
* Initialize SPI packet structure.
*
* Input Parameters:
* pkt - Pointer to SPI packet structure.
*
* Returned Value:
* None
*
****************************************************************************/
void altmdm_spipkt_init(FAR altmdm_spipkt_t *pkt);
/****************************************************************************
* Name: altmdm_set_spipkt_rxbuffer
*
* Description:
* Sets parameters of the SPI packet structure for reception.
*
* Input Parameters:
* pkt - Pointer to SPI packet structure for reception.
* buf - Buffer for SPI protocol body reception.
* sz - Buffer size for SPI protocol body reception.
*
* Returned Value:
* None
*
****************************************************************************/
void altmdm_set_spipkt_rxbuffer(FAR altmdm_spipkt_t *pkt, FAR void *buf,
uint16_t sz);
/****************************************************************************
* Name: altmdm_set_spipkt_txbuffer
*
* Description:
* Set the parameters of the SPI packet structure for sending.
*
* Input Parameters:
* pkt - Pointer to SPI packet structure for sending.
* buf - Buffer for SPI protocol body sending.
* sz - Buffer size for SPI protocol body sending.
*
* Returned Value:
* None
*
****************************************************************************/
void altmdm_set_spipkt_txbuffer(FAR altmdm_spipkt_t *pkt, FAR void *buf,
uint16_t sz);
/****************************************************************************
* Name: altmdm_overwrite_body_size
*
* Description:
* Overwrites the body size of the SPI packet structure.
*
* Input Parameters:
* pkt - Pointer to SPI packet structure.
* sz - Buffer size for SPI protocol body sending.
*
* Returned Value:
* None
*
****************************************************************************/
void altmdm_overwrite_body_size(FAR altmdm_spipkt_t *pkt, uint16_t sz);
/****************************************************************************
* Name: altmdm_set_sleeppkt
*
* Description:
* Set sleep packet parameters to SPI packet structure.
*
* Input Parameters:
* pkt - Pointer to SPI packet structure.
*
* Returned Value:
* None
*
****************************************************************************/
void altmdm_set_sleeppkt(FAR altmdm_spipkt_t *pkt);
/****************************************************************************
* Name: altmdm_set_retrypkt
*
* Description:
* Set retry packet parameters to SPI packet structure.
*
* Input Parameters:
* pkt - Pointer to SPI packet structure.
*
* Returned Value:
* None
*
****************************************************************************/
void altmdm_set_retrypkt(FAR altmdm_spipkt_t *pkt);
/****************************************************************************
* Name: altmdm_is_valid_spipkt_header
*
* Description:
* Checks if the header received from ALT1250 is valid.
*
* Input Parameters:
* pkt - Pointer to SPI packet structure for reception.
*
* Returned Value:
* Returns true if the header is valid, false otherwise.
*
****************************************************************************/
bool altmdm_is_valid_spipkt_header(FAR altmdm_spipkt_t *pkt);
/****************************************************************************
* Name: altmdm_is_sleeppkt_ok
*
* Description:
* Checks if the sleep packet received from ALT1250 is OK.
*
* Input Parameters:
* pkt - Pointer to SPI packet structure for reception.
*
* Returned Value:
* Returns true if the contents of the sleep packet are OK,
* false otherwise.
*
****************************************************************************/
bool altmdm_is_sleeppkt_ok(FAR altmdm_spipkt_t *pkt);
/****************************************************************************
* Name: altmdm_do_hdr_transaction
*
* Description:
* Initiates a transaction for the SPI protocol header.
*
* Input Parameters:
* spidev - An SPI instance that communicates with the ALT1250.
* lower - An instance of the lower interface.
* tx_pkt - Pointer to SPI packet structure for sending.
* rx_pkt - Pointer to SPI packet structure for reception.
*
* Returned Value:
* None
*
****************************************************************************/
void altmdm_do_hdr_transaction(FAR struct spi_dev_s *spidev,
FAR const struct alt1250_lower_s *lower, FAR altmdm_spipkt_t *tx_pkt,
FAR altmdm_spipkt_t *rx_pkt);
/****************************************************************************
* Name: altmdm_do_body_transaction
*
* Description:
* Initiates a transaction for the SPI protocol body.
*
* Input Parameters:
* spidev - An SPI instance that communicates with the ALT1250.
* lower - An instance of the lower interface.
* tx_pkt - Pointer to SPI packet structure for sending.
* rx_pkt - Pointer to SPI packet structure for reception.
*
* Returned Value:
* None
*
****************************************************************************/
void altmdm_do_body_transaction(FAR struct spi_dev_s *spidev,
FAR const struct alt1250_lower_s *lower, FAR altmdm_spipkt_t *tx_pkt,
FAR altmdm_spipkt_t *rx_pkt);
#endif /* __DRIVERS_MODEM_ALT1250_ALTMDM_SPI_H */