99 lines
2.6 KiB
C
99 lines
2.6 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 CVG_PRM_MATM_H
|
||
|
|
#define CVG_PRM_MATM_H
|
||
|
|
|
||
|
|
/* os shim includes */
|
||
|
|
#include "os_types.h"
|
||
|
|
|
||
|
|
/* common includes */
|
||
|
|
#include "iot_utils.h"
|
||
|
|
|
||
|
|
/* public api includes */
|
||
|
|
#include "plc_fr.h"
|
||
|
|
#include "plc_utils.h"
|
||
|
|
#include "plc_protocol.h"
|
||
|
|
|
||
|
|
#ifdef __cplusplus
|
||
|
|
extern "C" {
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#if (PLC_SUPPORT_ADDR_TO_TEI_MAP)
|
||
|
|
|
||
|
|
/* mac address and tei mapping entry */
|
||
|
|
#pragma pack(push)
|
||
|
|
#pragma pack(1)
|
||
|
|
typedef struct _cvg_matm_ent {
|
||
|
|
/* next entry index */
|
||
|
|
uint16_t next_idx :15,
|
||
|
|
/* flag to mark if the entry is free */
|
||
|
|
free :1;
|
||
|
|
/* mac address of current entry */
|
||
|
|
uint8_t addr[IOT_MAC_ADDR_LEN];
|
||
|
|
} cvg_matm_ent_t;
|
||
|
|
#pragma pack(pop)
|
||
|
|
|
||
|
|
#if (PLC_SUPPORT_CCO_ROLE)
|
||
|
|
|
||
|
|
#if (RUN_IN_PSRAM)
|
||
|
|
|
||
|
|
/* hash table size */
|
||
|
|
#define CVG_MATM_TABLE_SIZE (1024)
|
||
|
|
|
||
|
|
#else /* RUN_IN_PSRAM */
|
||
|
|
|
||
|
|
/* hash table size */
|
||
|
|
#define CVG_MATM_TABLE_SIZE (64)
|
||
|
|
|
||
|
|
#endif /* RUN_IN_PSRAM */
|
||
|
|
|
||
|
|
#else /* PLC_SUPPORT_CCO_ROLE */
|
||
|
|
|
||
|
|
/* hash table size */
|
||
|
|
#define CVG_MATM_TABLE_SIZE (64)
|
||
|
|
|
||
|
|
#endif /* PLC_SUPPORT_CCO_ROLE */
|
||
|
|
|
||
|
|
/* mac address hash table */
|
||
|
|
typedef struct _cvg_matm_table {
|
||
|
|
/* entry chain for each mac address hash index */
|
||
|
|
uint16_t addr_entry[CVG_MATM_TABLE_SIZE];
|
||
|
|
/* tei mapping */
|
||
|
|
cvg_matm_ent_t tei_entry[PLC_TEI_MAX_NUM];
|
||
|
|
} cvg_matm_table_t;
|
||
|
|
|
||
|
|
|
||
|
|
void cvg_matm_init_table(cvg_matm_table_t *table);
|
||
|
|
|
||
|
|
void cvg_matm_add_ent(cvg_matm_table_t *table, uint8_t *addr, tei_t tei);
|
||
|
|
|
||
|
|
void cvg_matm_del_ent_addr(cvg_matm_table_t *table, uint8_t *addr);
|
||
|
|
|
||
|
|
void cvg_matm_del_ent_tei(cvg_matm_table_t *table, tei_t tei);
|
||
|
|
|
||
|
|
uint32_t cvg_matm_get_tei(cvg_matm_table_t *table, uint8_t *addr, tei_t *tei);
|
||
|
|
|
||
|
|
uint32_t cvg_matm_get_addr(cvg_matm_table_t *table, uint8_t *addr, tei_t tei);
|
||
|
|
|
||
|
|
#endif /* PLC_SUPPORT_ADDR_TO_TEI_MAP */
|
||
|
|
|
||
|
|
|
||
|
|
#ifdef __cplusplus
|
||
|
|
}
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#endif /* CVG_PRM_MATM_H */
|