1 // Copyright 2017 The Fuchsia Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #pragma once
6 
7 #include <zircon/compiler.h>
8 #include <zircon/types.h>
9 
10 __BEGIN_CDECLS;
11 
12 typedef struct eth_client {
13     zx_handle_t tx_fifo;
14     zx_handle_t rx_fifo;
15     uint32_t tx_size;
16     uint32_t rx_size;
17     void* iobuf;
18 } eth_client_t;
19 
20 zx_status_t eth_create(zx_handle_t svc, zx_handle_t io_vmo, void* io_mem, eth_client_t** out);
21 
22 void eth_destroy(eth_client_t* eth);
23 
24 // Enqueue a packet for transmit
25 zx_status_t eth_queue_tx(eth_client_t* eth, void* cookie,
26                          void* data, size_t len, uint32_t options);
27 
28 // Process all transmitted buffers
29 zx_status_t eth_complete_tx(eth_client_t* eth, void* ctx,
30                             void (*func)(void* ctx, void* cookie));
31 
32 // Enqueue a packet for reception.
33 zx_status_t eth_queue_rx(eth_client_t* eth, void* cookie,
34                          void* data, size_t len, uint32_t options);
35 
36 // Process all received buffers
37 zx_status_t eth_complete_rx(eth_client_t* eth, void* ctx,
38                             void (*func)(void* ctx, void* cookie, size_t len, uint32_t flags));
39 
40 // Wait for completed rx packets
41 // ZX_ERR_PEER_CLOSED - far side disconnected
42 // ZX_ERR_TIMED_OUT - deadline lapsed.
43 // ZX_OK - completed packets are available
44 zx_status_t eth_wait_rx(eth_client_t* eth, zx_time_t deadline);
45 
46 __END_CDECLS;
47