traverse.h (3022B)
1 /* 2 * 3 * This license is set out in https://raw.githubusercontent.com/Broadcom-Network-Switching-Software/OpenBCM/master/Legal/LICENSE file. 4 * 5 * Copyright 2007-2019 Broadcom Inc. All rights reserved. 6 * 7 * File: traverse.h 8 * Purpose: RLINK traverse client/server/control support functions 9 */ 10 11 #ifndef _TRAVERSE_H_ 12 #define _TRAVERSE_H_ 13 14 #include <bcm/types.h> 15 #include <bcm/pkt.h> 16 #include <appl/cpudb/cpudb.h> 17 #include "rlink.h" 18 19 typedef struct bcm_rlink_traverse_data_s { 20 int unit; /* traverse unit */ 21 uint32 c_id; /* client ID */ 22 uint32 s_id; /* server ID */ 23 bcm_pkt_t *rx_pkt; 24 uint8 *rx_buf; /* receive buffer */ 25 uint8 *rx_ptr; /* rx buffer current */ 26 int rx_len; /* rx buf length */ 27 uint8 *tx_buf; /* tx buffer */ 28 uint8 *tx_ptr; /* tx buffer current */ 29 int tx_len; /* tx buffer length */ 30 void *parent; /* parent client/server */ 31 } bcm_rlink_traverse_data_t; 32 33 /* 34 Called by a client traverse implementation to start a remote traverse. 35 Initializes and registers a traverse request record. 36 Does *not* send any RLINK messages to the RLINK server. 37 */ 38 extern int bcm_rlink_traverse_request_start(int unit, 39 bcm_rlink_traverse_data_t *req, 40 uint32 *key); 41 42 /* 43 Gets a traverse reply. If there are no rxeplies, and the remote 44 traverse has not started, or signaled completion, then issue a request 45 for traverse data and wait for a response. 46 */ 47 extern int bcm_rlink_traverse_reply_get(int unit, 48 bcm_rlink_traverse_data_t *req); 49 50 /* 51 Indicate that this request is done. If the traverse server has not 52 indicated completion, then issue a done message. 53 */ 54 extern int bcm_rlink_traverse_request_done(int unit, 55 int rv, 56 bcm_rlink_traverse_data_t *data); 57 58 59 /* Server side implementation APIs */ 60 61 /* 62 Check to see if there's enough room for a reply. If not, 63 send out current data and wait for a resonse. 64 */ 65 extern int bcm_rlink_traverse_reply_check(bcm_rlink_traverse_data_t *data, 66 int size); 67 68 /* 69 Flush any outstanding callback data. 70 */ 71 extern int bcm_rlink_traverse_reply_done(bcm_rlink_traverse_data_t *data, 72 int rv); 73 74 /* 75 Handle a traverse request 76 */ 77 extern int bcm_rlink_traverse_request(rlink_type_t type, 78 cpudb_key_t cpu, 79 bcm_pkt_t *pkt, uint8 *data, int len); 80 81 extern int bcm_rlink_traverse_device_clear(int unit); 82 #endif /* _TRAVERSE_H_ */