初始提交
This commit is contained in:
220
plc/inc/mac_vdev_api.h
Executable file
220
plc/inc/mac_vdev_api.h
Executable file
@@ -0,0 +1,220 @@
|
||||
/****************************************************************************
|
||||
|
||||
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
|
||||
Reference in New Issue
Block a user