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/device/ethernet.h> 9#include <zircon/types.h> 10 11__BEGIN_CDECLS; 12 13typedef struct eth_client { 14 zx_handle_t tx_fifo; 15 zx_handle_t rx_fifo; 16 uint32_t tx_size; 17 uint32_t rx_size; 18 void* iobuf; 19} eth_client_t; 20 21zx_status_t eth_create(int fd, zx_handle_t io_vmo, void* io_mem, eth_client_t** out); 22 23void eth_destroy(eth_client_t* eth); 24 25// Enqueue a packet for transmit 26zx_status_t eth_queue_tx(eth_client_t* eth, void* cookie, 27 void* data, size_t len, uint32_t options); 28 29// Process all transmitted buffers 30zx_status_t eth_complete_tx(eth_client_t* eth, void* ctx, 31 void (*func)(void* ctx, void* cookie)); 32 33// Enqueue a packet for reception. 34zx_status_t eth_queue_rx(eth_client_t* eth, void* cookie, 35 void* data, size_t len, uint32_t options); 36 37// Process all received buffers 38zx_status_t eth_complete_rx(eth_client_t* eth, void* ctx, 39 void (*func)(void* ctx, void* cookie, size_t len, uint32_t flags)); 40 41// Wait for completed rx packets 42// ZX_ERR_PEER_CLOSED - far side disconnected 43// ZX_ERR_TIMED_OUT - deadline lapsed. 44// ZX_OK - completed packets are available 45zx_status_t eth_wait_rx(eth_client_t* eth, zx_time_t deadline); 46 47__END_CDECLS; 48