DPTP實驗部分原始碼分析

夜裡小白龍發表於2020-11-26

bf_ts_global_baresync_ts_get

bf_status_t bf_ts_global_baresync_ts_get(	
bf_dev_id_t 	dev_id,
uint64_t * 	global_ts_ns,
uint64_t * 	baresync_ts_ns 
)		
bf_ts_global_baresync_ts_get Trigger and retrieve both global timestamp value and baresync timestamp value

Parameters
dev_id	int chip id
global_ts_ns	int64 ptr Pointer to buffer to store global timestamp value in ns
baresync_ts_ns	int64 ptr Pointer to buffer to store baresync timestamp value in ns
Returns
status BF_SUCCESS on success BF ERROR code on failure

bf_port_1588_timestamp_tx_get

bf_status_t bf_port_1588_timestamp_tx_get	(	
bf_dev_id_t 	dev_id,
bf_dev_port_t 	dev_port,
uint64_t * 	ts,
bool * 	ts_valid,
int * 	ts_id 
)		
Get 1588 Tx timestamp on a tofino port.

[ POST_ENABLE ]

Parameters
dev_id	: system-assigned identifier (0..BF_MAX_DEV_COUNT-1)
dev_port	encoded port identifier
ts	: returned timestamp
ts_valid	returned timestamp valid indication
ts_id	: returned timestamp id (0-3)
Returns
: BF_SUCCESS
: BF_INVALID_ARG: dev_id never added or dev_id > BF_MAX_DEV_COUNT-1
: BF_INVALID_ARG: invalid or missing bf_dev_port_t
: BF_INVALID_ARG: ts == NULL
: BF_INVALID_ARG: ts_valid == NULL
: BF_INVALID_ARG: ts_id == NULL

bf_port_1588_timestamp_tx_get

Line 195:bf_port_1588_timestamp_tx_get((bf_dev_id_t) 0, reqport, &capture_req_ts, &ts_valid1, &ts_id1);  
在tofino埠上得到1588 Tx時間戳,存入&capture_req_ts 後面是否有效以及時間戳id
Line 222:now_igts = ((now_igts | now_igts_hi[i]) << 32) | now_igts_lo[i];
now_igts 64位,now_igts_hi 16位, now_igts_lo 32位。所以將now_igts_hi左移32位然後或上now_igts_lo,得到64位的。
reference_ts = ((reference_ts | s2s_reference_hi[i]) << 32) | s2s_reference_lo[i];
reference_ts 64位,s2s_reference_hi 32位,s2s_reference_lo 32位
Line230: capture_req_ts = capture_req_ts & 0xFFFFFFFF
將64位的capture_req_ts 做與運算,capture_req_ts 按位是1為1,是0為0

bf_pkt_tx_ring_t

typedef enum bf_pkt_tx_ring_e bf_pkt_tx_ring_t
Enum to define PKT TX ring

bf_pkt_tx_done_notif_register

bf_status_t bf_pkt_tx_done_notif_register	(	
bf_dev_id_t 	dev_id,
bf_pkt_tx_done_notif_cb 	cb,
bf_pkt_tx_ring_t 	tx_ring 
)		
register for tx done notification

Parameters
dev_id	chip id
cb	call back handler
tx_ring	tx ring index
Returns
bf_status

memcpy

memcpy函式語法
函式原型
void *memcpy(void *destin, void *source, unsigned n);
引數
destin-- 指向用於儲存複製內容的目標陣列,型別強制轉換為 void* 指標。
source-- 指向要複製的資料來源,型別強制轉換為 void* 指標。
n-- 要被複制的位元組數。
返回值
該函式返回一個指向目標儲存區destin的指標。
功能
從源source所指的記憶體地址的起始位置開始拷貝n個位元組到目標destin所指的記憶體地址的起始位置中。

bf_pkt_is_inited

bool bf_pkt_is_inited	(	
bf_dev_id_t 	dev_id	
)	
query if pkt_mgr is initialized

Parameters
dev_id	chip id
Returns
true: if initialized, false: otherwise

bf_pkt_data_copy

int bf_pkt_data_copy	(	
bf_pkt * 	pkt,
const uint8_t * 	pkt_buf,
uint16_t 	size 
)		
copy payload data to packet

Parameters
pkt	bf packet pointer
pkt_buf	payload data
size	payload data size
Returns
0 on success, -1 on failure

bf_pkt_alloc

int bf_pkt_alloc	(	
bf_dev_id_t 	id,
bf_pkt ** 	pkt,
size_t 	size,
bf_dma_type_t 	dr 
)		
allocate a packet

Parameters
id	chip id
pkt	bf packet pointer
size	buffer size
dr	DR pool to use to allocate buffer (bf dma type)
Returns
0 on success, -1 on failure
%X 代表接收一個十六進位制的數

s,ms,us,ns

1秒=1000毫秒(ms)

1秒=1,000,000 微秒(μs)

1秒=1,000,000,000 納秒(ns)

C語言結構體型別的定義和使用

C語言結構體型別的定義和使用
https://blog.csdn.net/wangqingchuan92/article/details/99638763

stat

C語言stat()函式:獲取檔案狀態
https://www.cnblogs.com/jikexianfeng/p/5742887.html
返回值:執行成功則返回0,失敗返回-1,錯誤程式碼存於errno。

p4_pd_dptp_topo_register_read_timesyncs2s_cp_flag

p4_pd_status_t
p4_pd_dptp_topo_register_read_timesyncs2s_cp_flag
(
 p4_pd_sess_hdl_t sess_hdl,
 p4_pd_dev_target_t dev_tgt,
 int index,
 int flags,
 uint32_t *register_values,
 int *value_count
);

相關文章