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