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