1/*
2 * Copyright (c) 2007-2011, ETH Zurich.
3 * All rights reserved.
4 *
5 * This file is distributed under the terms in the attached LICENSE file.
6 * If you do not find this file, copies can be found by writing to:
7 * ETH Zurich D-INFK, Universitaetstrasse 6, CH-8092 Zurich. Attn: Systems Group.
8 */
9
10/*
11 * This interface is used in the e10k driver for the device specific
12 * communication between the device manager and the queue manager. It is
13 * exposed by the device manager, and every queue manager connects to it.
14 */
15interface e10k "e10k queue management interface" {
16    typedef enum {PORT_TCP, PORT_UDP} port_type;
17    alias qid uint8;
18
19    message request_device_info();
20    message queue_init_data(cap registers, uint64 macaddr);
21
22    /* Upon initialization the queue driver registers its memory with
23       the device manager. */
24    message register_queue_memory(qid    id,
25                               cap    tx,
26                               cap    txhwb,
27                               cap    rx,
28                               uint32 rxbufsz,
29                               uint32 rxhdrsz,
30                               int16  msix_intvec,
31                               uint8  msix_intdest,
32                               bool   use_irq,
33                               bool   use_rsc,
34			       uint64 tx_va,
35			       uint64 rx_va,
36			       uint64 txhwb_va);
37    message queue_memory_registered();
38
39    /* Modify interrupt rate for a particular queue */
40    message set_interrupt_rate(qid id, uint16 rate);
41
42    /* FIXME: this is not technically a response, but a request by the server,
43              hope this works anyway... I'd like the dev mgr to be server. */
44    /* Tells queue driver to write the tail pointers for the rx and
45       tx queues after initialization or reset */
46    message write_queue_tails();
47
48    /* Called by queue manager if it is done, and is going to terminate. */
49    rpc terminate_queue(in qid id);
50
51    /*****************************************************
52     * Filter management (used by device  manager library)
53     *****************************************************/
54
55    rpc register_port_filter(in uint64    buf_id_rx,
56                              in uint64    buf_id_tx,
57                              in qid       queue,
58                              in port_type type,
59                              in uint16    port,
60                              out errval rerr,
61                              out uint64 filter);
62
63    rpc unregister_filter(in uint64 filter, out errval rerr);
64};
65