vnet_dev_rx_queue_t *);
typedef void (vnet_dev_tx_queue_op_no_rv_t) (vlib_main_t *,
vnet_dev_tx_queue_t *);
+typedef vnet_dev_rv_t (vnet_dev_op_with_ptr_t) (vlib_main_t *, vnet_dev_t *,
+ void *);
+typedef vnet_dev_rv_t (vnet_dev_port_op_with_ptr_t) (vlib_main_t *,
+ vnet_dev_port_t *,
+ void *);
typedef u16 vnet_dev_queue_id_t;
typedef u16 vnet_dev_bus_index_t;
vnet_dev_op_t *);
vnet_dev_rv_t vnet_dev_process_call_op_no_rv (vlib_main_t *, vnet_dev_t *,
vnet_dev_op_no_rv_t *);
+vnet_dev_rv_t vnet_dev_process_call_op_with_ptr (vlib_main_t *, vnet_dev_t *,
+ vnet_dev_op_with_ptr_t *,
+ void *);
void vnet_dev_process_call_op_no_wait (vlib_main_t *, vnet_dev_t *,
vnet_dev_op_no_rv_t *);
vnet_dev_rv_t vnet_dev_process_call_port_op (vlib_main_t *, vnet_dev_port_t *,
vnet_dev_rv_t vnet_dev_process_call_port_op_no_rv (vlib_main_t *vm,
vnet_dev_port_t *,
vnet_dev_port_op_no_rv_t *);
+vnet_dev_rv_t
+vnet_dev_process_call_port_op_with_ptr (vlib_main_t *, vnet_dev_port_t *,
+ vnet_dev_port_op_with_ptr_t *, void *);
void vnet_dev_process_call_port_op_no_wait (vlib_main_t *, vnet_dev_port_t *,
vnet_dev_port_op_no_rv_t *);
vnet_dev_rv_t
VNET_DEV_EVENT_PROCESS_QUIT,
VNET_DEV_EVENT_CALL_OP,
VNET_DEV_EVENT_CALL_OP_NO_RV,
+ VNET_DEV_EVENT_CALL_OP_WITH_PTR,
VNET_DEV_EVENT_CALL_OP_NO_WAIT,
VNET_DEV_EVENT_CALL_PORT_OP,
VNET_DEV_EVENT_CALL_PORT_OP_NO_RV,
+ VNET_DEV_EVENT_CALL_PORT_OP_WITH_PTR,
VNET_DEV_EVENT_CALL_PORT_OP_NO_WAIT,
VNET_DEV_EVENT_CLOCK = ~0
} __clib_packed vnet_dev_event_t;
vnet_dev_op_no_rv_t *op;
} call_op_no_rv;
struct
+ {
+ vnet_dev_op_with_ptr_t *op;
+ void *ptr;
+ } call_op_with_ptr;
+ struct
{
vnet_dev_op_no_rv_t *op;
} call_op_no_wait;
vnet_dev_port_t *port;
} call_port_op_no_rv;
struct
+ {
+ vnet_dev_port_op_with_ptr_t *op;
+ vnet_dev_port_t *port;
+ void *ptr;
+ } call_port_op_with_ptr;
+ struct
{
vnet_dev_port_op_no_rv_t *op;
vnet_dev_port_t *port;
ev_log_debug (vm, dev, ed, "call op no rv");
ed->call_op_no_rv.op (vm, dev);
break;
+ case VNET_DEV_EVENT_CALL_OP_WITH_PTR:
+ ev_log_debug (vm, dev, ed, "call op woth ptr");
+ rv = ed->call_op_with_ptr.op (vm, dev, ed->call_op_with_ptr.ptr);
+ break;
case VNET_DEV_EVENT_CALL_OP_NO_WAIT:
ev_log_debug (vm, dev, ed, "call op no wait");
ed->call_op_no_wait.op (vm, dev);
ev_log_debug (vm, dev, ed, "call port op no rv");
ed->call_port_op_no_rv.op (vm, ed->call_port_op_no_rv.port);
break;
+ case VNET_DEV_EVENT_CALL_PORT_OP_WITH_PTR:
+ ev_log_debug (vm, dev, ed, "call port op woth ptr");
+ rv = ed->call_port_op_with_ptr.op (vm, ed->call_port_op_with_ptr.port,
+ ed->call_port_op_with_ptr.ptr);
+ break;
case VNET_DEV_EVENT_CALL_PORT_OP_NO_WAIT:
ev_log_debug (vm, dev, ed, "call port op no wait");
ed->call_port_op_no_wait.op (vm, ed->call_port_op_no_wait.port);
return vnet_dev_process_event_send_and_wait (vm, dev, ed);
}
+vnet_dev_rv_t
+vnet_dev_process_call_op_with_ptr (vlib_main_t *vm, vnet_dev_t *dev,
+ vnet_dev_op_with_ptr_t *op, void *p)
+{
+ vnet_dev_event_data_t *ed = vnet_dev_event_data_alloc (vm, dev);
+ *ed = (vnet_dev_event_data_t){
+ .event = VNET_DEV_EVENT_CALL_OP_WITH_PTR,
+ .call_op_with_ptr = { .op = op, .ptr = p },
+ };
+
+ return vnet_dev_process_event_send_and_wait (vm, dev, ed);
+}
+
void
vnet_dev_process_call_op_no_wait (vlib_main_t *vm, vnet_dev_t *dev,
vnet_dev_op_no_rv_t *op)
return vnet_dev_process_event_send_and_wait (vm, port->dev, ed);
}
+vnet_dev_rv_t
+vnet_dev_process_call_port_op_with_ptr (vlib_main_t *vm, vnet_dev_port_t *port,
+ vnet_dev_port_op_with_ptr_t *op,
+ void *p)
+{
+ vnet_dev_event_data_t *ed = vnet_dev_event_data_alloc (vm, port->dev);
+ *ed = (vnet_dev_event_data_t){
+ .event = VNET_DEV_EVENT_CALL_PORT_OP_WITH_PTR,
+ .call_port_op_with_ptr = { .op = op, .port = port, .ptr = p },
+ };
+
+ return vnet_dev_process_event_send_and_wait (vm, port->dev, ed);
+}
+
void
vnet_dev_process_call_port_op_no_wait (vlib_main_t *vm, vnet_dev_port_t *port,
vnet_dev_port_op_no_rv_t *op)