| // Copyright 2017 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #pragma once |
| |
| #include <zircon/compiler.h> |
| #include <zircon/types.h> |
| |
| __BEGIN_CDECLS |
| |
| typedef struct eth_client { |
| zx_handle_t tx_fifo; |
| zx_handle_t rx_fifo; |
| uint32_t tx_size; |
| uint32_t rx_size; |
| void* iobuf; |
| } eth_client_t; |
| |
| zx_status_t eth_create(zx_handle_t svc, zx_handle_t io_vmo, void* io_mem, eth_client_t** out); |
| |
| void eth_destroy(eth_client_t* eth); |
| |
| // Enqueue a packet for transmit |
| zx_status_t eth_queue_tx(eth_client_t* eth, void* cookie, void* data, size_t len, uint32_t options); |
| |
| // Process all transmitted buffers |
| zx_status_t eth_complete_tx(eth_client_t* eth, void* ctx, void (*func)(void* ctx, void* cookie)); |
| |
| // Enqueue a packet for reception. |
| zx_status_t eth_queue_rx(eth_client_t* eth, void* cookie, void* data, size_t len, uint32_t options); |
| |
| // Process all received buffers |
| zx_status_t eth_complete_rx(eth_client_t* eth, void* ctx, |
| void (*func)(void* ctx, void* cookie, size_t len, uint32_t flags)); |
| |
| // Wait for completed rx packets |
| // ZX_ERR_PEER_CLOSED - far side disconnected |
| // ZX_ERR_TIMED_OUT - deadline lapsed. |
| // ZX_OK - completed packets are available |
| zx_status_t eth_wait_rx(eth_client_t* eth, zx_time_t deadline); |
| |
| __END_CDECLS |