221 lines
7.4 KiB
C
221 lines
7.4 KiB
C
|
/****************************************************************************
|
||
|
|
||
|
Copyright(c) 2019 by Aerospace C.Power (Chongqing) Microelectronics. ALL RIGHTS RESERVED.
|
||
|
|
||
|
This Information is proprietary to Aerospace C.Power (Chongqing) Microelectronics and MAY NOT
|
||
|
be copied by any method or incorporated into another program without
|
||
|
the express written consent of Aerospace C.Power. This Information or any portion
|
||
|
thereof remains the property of Aerospace C.Power. The Information contained herein
|
||
|
is believed to be accurate and Aerospace C.Power assumes no responsibility or
|
||
|
liability for its use in any way and conveys no license or title under
|
||
|
any patent or copyright and makes no representation or warranty that this
|
||
|
Information is free from patent or copyright infringement.
|
||
|
|
||
|
****************************************************************************/
|
||
|
|
||
|
#ifndef MAC_VDEV_API_H
|
||
|
#define MAC_VDEV_API_H
|
||
|
|
||
|
#include "os_types.h"
|
||
|
#include "plc_utils.h"
|
||
|
|
||
|
#include "mac_bcm_api.h"
|
||
|
#include "mac_data_api.h"
|
||
|
#include "mac_uni_cfg_api.h"
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
/* nid list report format. as we are not using packed struct, so we need to
|
||
|
* make sure all members in this struct are 4 bytes aligned.
|
||
|
*/
|
||
|
typedef struct _mac_nid_rpt {
|
||
|
/* nid of the neighbour network */
|
||
|
uint32_t nid :24,
|
||
|
/* flag indicate if neighbour network is single-pass to local network
|
||
|
* 1 means single-pass. 0 means double-pass.
|
||
|
*/
|
||
|
sp_flag :8;
|
||
|
/* bandwidth taken by neighbour network in millisecond, 0 means invalid */
|
||
|
uint32_t bandwidth :16,
|
||
|
/* rf channel of the neighbour network */
|
||
|
rf_channel :8,
|
||
|
/* rf option of the neighbour network */
|
||
|
rf_option :2,
|
||
|
/* reserved for future */
|
||
|
rsvd :6;
|
||
|
} mac_nid_rpt_t;
|
||
|
|
||
|
typedef struct _mac_nid_list_rpt {
|
||
|
/* available nid count in the array */
|
||
|
uint32_t nid_cnt :8,
|
||
|
/* reserved for future */
|
||
|
rsvd :24;
|
||
|
/* nid array */
|
||
|
mac_nid_rpt_t nid_list[0];
|
||
|
} mac_nid_list_rpt_t;
|
||
|
|
||
|
/* cco snr report format */
|
||
|
typedef struct _mac_cco_snr_rpt {
|
||
|
/* nid of the neighbour network */
|
||
|
uint32_t nid :24,
|
||
|
/* rf channel of the neighbour network */
|
||
|
rf_channel :8;
|
||
|
/* rx snr of the fc */
|
||
|
int8_t snr;
|
||
|
/* flag to mark if come from rf link */
|
||
|
uint8_t is_rf :1,
|
||
|
/* rf option, see RF_OPTION_XXX */
|
||
|
rf_option :2,
|
||
|
/* reserved for future */
|
||
|
rsvd1 :5;
|
||
|
/* hplc band id, see BEACON_FREQ_BAND_ID_XXX */
|
||
|
uint8_t band_id;
|
||
|
/* reserved for future */
|
||
|
uint8_t rsvd;
|
||
|
} mac_cco_snr_rpt_t;
|
||
|
|
||
|
/*
|
||
|
* function callback to receive beacon period end alert
|
||
|
* @arg: arg parameter registered alone with the callback
|
||
|
*/
|
||
|
typedef void (*mac_bp_end_alert_func_t)(void *arg);
|
||
|
|
||
|
/*
|
||
|
* @biref function callback to receive watched nid list report
|
||
|
* @param arg: arg parameter registered alone with the callback
|
||
|
* @param nid_list: iot pkt to contain the nid list. the ownership will
|
||
|
* be transferred to callback function. see
|
||
|
* mac_nid_list_rpt_t for more details.
|
||
|
*/
|
||
|
typedef void (*mac_nid_rpt_func_t)(void *arg, iot_pkt_t *nid_list);
|
||
|
|
||
|
/*
|
||
|
* @biref function callback to receive zero-cross status report
|
||
|
* @param arg: arg parameter registered alone with the callback
|
||
|
* @param status: indicate if the phase zc info is valid.
|
||
|
* bit0 - Phase A, bit1 - Phase B, bit2 - Phase C...
|
||
|
* 0 - invalid, 1 - valid.
|
||
|
*/
|
||
|
typedef void (*mac_zc_status_rpt_func_t)(void *arg, uint32_t status);
|
||
|
|
||
|
/* more cfg to be added later */
|
||
|
typedef struct _mac_vdev_cfg {
|
||
|
/* CCO, STA or PCO */
|
||
|
uint16_t node_role : 8,
|
||
|
/* number of supported physical phases. The range should be from 1 - 3.
|
||
|
* for STA/PCO role device, only 1 physical phase supported.
|
||
|
* for CCO role device:
|
||
|
* if set to 1, only phase A supported.
|
||
|
* if set to 2, both phase A and B are supported.
|
||
|
* if set to 3, Phase A, B and C are supported.
|
||
|
*/
|
||
|
p_phase_cnt : 2,
|
||
|
/* flag this vdev is reduced */
|
||
|
is_reduced_vdev : 1,
|
||
|
/* flag this vdev need time division tx nncco 3 phase */
|
||
|
is_td_tx_nncco_3phase : 1,
|
||
|
resv0 : 4;
|
||
|
} mac_vdev_cfg_t;
|
||
|
|
||
|
/* more cfg to be added later */
|
||
|
typedef struct _mac_vdev_start_cfg {
|
||
|
/* mac address of the vdev */
|
||
|
uint8_t mac_addr[IOT_MAC_ADDR_LEN];
|
||
|
/* parameter to be transferred back with those callbacks */
|
||
|
void *mac_callback_arg;
|
||
|
/* beacon rx callback of the vdev */
|
||
|
mac_bc_rx_func_t mac_bc_rx_func;
|
||
|
/* data frame rx callback of the vdev */
|
||
|
mac_recv_msdu_func_t mac_data_rx_func;
|
||
|
/* payload error or no payload cco frame snr rx callback of the vdev */
|
||
|
mac_recv_snr_from_cco_func_t mac_cco_snr_rx_func;
|
||
|
/* beacon period end alert callback of the vdev */
|
||
|
mac_bp_end_alert_func_t mac_bp_end_alert_func;
|
||
|
/* watched nid list report callback of the vdev */
|
||
|
mac_nid_rpt_func_t mac_nid_rpt_func;
|
||
|
/* zero-cross status changed report callback of the vdev */
|
||
|
mac_zc_status_rpt_func_t mac_zc_status_rpt_func;
|
||
|
} mac_vdev_start_cfg_t;
|
||
|
|
||
|
/*
|
||
|
* mac_create_vdev() - create mac layer virtual device
|
||
|
* @pdev_id: phasical mac device on top of which to create the vdev
|
||
|
* @vdev_id: pointer to receive the created vdev id
|
||
|
* @cfg: configuration for the created vdev
|
||
|
*
|
||
|
* return:
|
||
|
* 0 -- for success case
|
||
|
* othersie -- error code
|
||
|
*/
|
||
|
uint32_t mac_create_vdev(uint8_t pdev_id, uint8_t *vdev_id,
|
||
|
mac_vdev_cfg_t *cfg);
|
||
|
|
||
|
/*
|
||
|
* mac_start_vdev() - start mac layer virtual device
|
||
|
* @pdev_id: phasical mac device id
|
||
|
* @vdev_id: virtual mac device id
|
||
|
* @cfg: configuration for the start
|
||
|
*
|
||
|
* return:
|
||
|
* 0 -- for success case
|
||
|
* othersie -- error code
|
||
|
*/
|
||
|
uint32_t mac_start_vdev(uint8_t pdev_id, uint8_t vdev_id,
|
||
|
mac_vdev_start_cfg_t *cfg);
|
||
|
|
||
|
/*
|
||
|
* mac_stop_vdev() - stop mac layer virtual device
|
||
|
* @pdev_id: phasical mac device id
|
||
|
* @vdev_id: virtual mac device id
|
||
|
*
|
||
|
* return:
|
||
|
* 0 -- for success case
|
||
|
* othersie -- error code
|
||
|
*/
|
||
|
uint32_t mac_stop_vdev(uint8_t pdev_id, uint8_t vdev_id);
|
||
|
|
||
|
/*
|
||
|
* mac_set_vdev_cfg() - set a vdev's config
|
||
|
* @pdev_id: which pdev to config
|
||
|
* @vdev_id: which vdev to config
|
||
|
* @cfg_struct_ptr: the pointer to the param config structure which can be
|
||
|
* decoded according to the type.
|
||
|
*
|
||
|
* return:
|
||
|
* 0 -- for success case
|
||
|
* othersie -- error code
|
||
|
*/
|
||
|
uint32_t mac_set_vdev_cfg(pdevid_t pdev_id, vdevid_t vdev_id,
|
||
|
cfg_data_tlv *cfg_struct_ptr);
|
||
|
|
||
|
|
||
|
/*
|
||
|
* mac_get_reduce_vdev_id() - get dbg pkt vdev id
|
||
|
* @pdev_id: phasical mac device id
|
||
|
*
|
||
|
* return: dbg pkt vdev id
|
||
|
*/
|
||
|
uint32_t mac_get_reduce_vdev_id(uint32_t pdev_id);
|
||
|
|
||
|
/*
|
||
|
* mac_get_vdev_cfg() - get a vdev's config
|
||
|
* @pdev_id: which pdev to config
|
||
|
* @vdev_id: which vdev to config
|
||
|
* @cfg_struct_ptr: the pointer to the param config structure which can be
|
||
|
* decoded according to the type.
|
||
|
*
|
||
|
* return:
|
||
|
* 0 -- for success case
|
||
|
* othersie -- error code
|
||
|
*/
|
||
|
uint32_t mac_get_vdev_cfg(pdevid_t pdev_id, vdevid_t vdev_id,
|
||
|
cfg_data_tlv *tlv);
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#endif
|