openbcm

Git mirror of https://github.com/Broadcom-Network-Switching-Software/OpenBCM
git clone git://git.finwo.net/mirror/broadcom/openbcm
Log | Files | Refs | README

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_ */