|
| FILE_LICENCE (GPL2_OR_LATER_OR_UBDL) |
|
static int | netvsc_control (struct netvsc_device *netvsc, unsigned int xrid, const void *data, size_t len) |
| Send control message and wait for completion. More...
|
|
static int | netvsc_completed (struct netvsc_device *netvsc __unused, const void *data __unused, size_t len __unused) |
| Handle generic completion. More...
|
|
static int | netvsc_initialise (struct netvsc_device *netvsc) |
| Initialise communication. More...
|
|
static int | netvsc_initialised (struct netvsc_device *netvsc, const void *data, size_t len) |
| Handle initialisation completion. More...
|
|
static int | netvsc_ndis_version (struct netvsc_device *netvsc) |
| Set NDIS version. More...
|
|
static int | netvsc_establish_buffer (struct netvsc_device *netvsc, struct netvsc_buffer *buffer) |
| Establish data buffer. More...
|
|
static int | netvsc_rx_established_buffer (struct netvsc_device *netvsc, const void *data, size_t len) |
| Handle establish receive data buffer completion. More...
|
|
static int | netvsc_revoke_buffer (struct netvsc_device *netvsc, struct netvsc_buffer *buffer) |
| Revoke data buffer. More...
|
|
static int | netvsc_recv_control (struct vmbus_device *vmdev, uint64_t xid, const void *data, size_t len) |
| Handle received control packet. More...
|
|
static int | netvsc_recv_data (struct vmbus_device *vmdev, uint64_t xid, const void *data, size_t len, struct list_head *list) |
| Handle received data packet. More...
|
|
static int | netvsc_recv_completion (struct vmbus_device *vmdev, uint64_t xid, const void *data, size_t len) |
| Handle received completion packet. More...
|
|
static int | netvsc_recv_cancellation (struct vmbus_device *vmdev, uint64_t xid) |
| Handle received cancellation packet. More...
|
|
static void | netvsc_poll (struct rndis_device *rndis) |
| Poll for completed and received packets. More...
|
|
static int | netvsc_transmit (struct rndis_device *rndis, struct io_buffer *iobuf) |
| Transmit packet. More...
|
|
static void | netvsc_cancel_transmit (struct netvsc_device *netvsc, struct io_buffer *iobuf, unsigned int tx_id) |
| Cancel transmission. More...
|
|
static int | netvsc_create_ring (struct netvsc_device *netvsc __unused, struct netvsc_ring *ring) |
| Create descriptor ring. More...
|
|
static void | netvsc_destroy_ring (struct netvsc_device *netvsc, struct netvsc_ring *ring, void(*discard)(struct netvsc_device *, struct io_buffer *, unsigned int)) |
| Destroy descriptor ring. More...
|
|
static int | netvsc_buffer_copy (struct vmbus_xfer_pages *pages, void *data, size_t offset, size_t len) |
| Copy data from data buffer. More...
|
|
static int | netvsc_create_buffer (struct netvsc_device *netvsc, struct netvsc_buffer *buffer) |
| Create data buffer. More...
|
|
static void | netvsc_destroy_buffer (struct netvsc_device *netvsc, struct netvsc_buffer *buffer) |
| Destroy data buffer. More...
|
|
static int | netvsc_open (struct rndis_device *rndis) |
| Open device. More...
|
|
static void | netvsc_close (struct rndis_device *rndis) |
| Close device. More...
|
|
static int | netvsc_probe (struct vmbus_device *vmdev) |
| Probe device. More...
|
|
static int | netvsc_reset (struct vmbus_device *vmdev) |
| Reset device. More...
|
|
static void | netvsc_remove (struct vmbus_device *vmdev) |
| Remove device. More...
|
|
Hyper-V network virtual service client.
The network virtual service client (NetVSC) connects to the network virtual service provider (NetVSP) via the Hyper-V virtual machine bus (VMBus). It provides a transport layer for RNDIS packets.
Definition in file netvsc.c.
static int netvsc_control |
( |
struct netvsc_device * |
netvsc, |
|
|
unsigned int |
xrid, |
|
|
const void * |
data, |
|
|
size_t |
len |
|
) |
| |
|
static |
Send control message and wait for completion.
- Parameters
-
netvsc | NetVSC device |
xrid | Relative transaction ID |
data | Data |
len | Length of data |
- Return values
-
Definition at line 52 of file netvsc.c.
60 DBGC ( netvsc,
"NETVSC %s could not send control message: %s\n",
82 DBGC ( netvsc,
"NETVSC %s timed out waiting for XRID %d\n",
struct arbelprm_rc_send_wqe rc
unsigned long long uint64_t
#define NETVSC_MAX_WAIT_MS
Maximum time to wait for a transaction to complete.
char * strerror(int errno)
Retrieve string representation of error number.
int vmbus_poll(struct vmbus_device *vmdev)
Poll ring buffer.
unsigned int wait_xrid
Relative transaction ID for current blocking transaction.
void mdelay(unsigned long msecs)
Delay for a fixed number of milliseconds.
int vmbus_send_control(struct vmbus_device *vmdev, uint64_t xid, const void *data, size_t len)
Send control packet via ring buffer.
struct vmbus_device * vmdev
VMBus device.
uint8_t data[48]
Additional event data.
#define NETVSC_BASE_XID
Base transaction ID.
void vmbus_dump_channel(struct vmbus_device *vmdev)
Dump channel status (for debugging)
#define ETIMEDOUT
Connection timed out.
int wait_rc
Return status code for current blocking transaction.
References data, DBGC, ETIMEDOUT, len, mdelay(), netvsc_device::name, NETVSC_BASE_XID, NETVSC_MAX_WAIT_MS, rc, strerror(), vmbus_dump_channel(), vmbus_poll(), vmbus_send_control(), netvsc_device::vmdev, netvsc_device::wait_rc, and netvsc_device::wait_xrid.
Referenced by netvsc_establish_buffer(), netvsc_initialise(), netvsc_ndis_version(), and netvsc_revoke_buffer().
Initialise communication.
- Parameters
-
- Return values
-
Definition at line 107 of file netvsc.c.
119 sizeof (
msg ) ) ) != 0 ) {
120 DBGC ( netvsc,
"NETVSC %s could not initialise: %s\n",
NetVSC initialisation message.
struct arbelprm_rc_send_wqe rc
void msg(unsigned int row, const char *fmt,...)
Print message centred on specified row.
#define NETVSC_VERSION_1
Oldest known NetVSC protocol version.
#define cpu_to_le32(value)
char * strerror(int errno)
Retrieve string representation of error number.
static int netvsc_control(struct netvsc_device *netvsc, unsigned int xrid, const void *data, size_t len)
Send control message and wait for completion.
#define NETVSC_INIT_MSG
NetVSC initialisation message.
void * memset(void *dest, int character, size_t len) __nonnull
References cpu_to_le32, DBGC, memset(), msg(), netvsc_device::name, netvsc_control(), NETVSC_INIT_MSG, NETVSC_INIT_XRID, NETVSC_VERSION_1, rc, and strerror().
Referenced by netvsc_open().
Handle initialisation completion.
- Parameters
-
netvsc | NetVSC device |
data | Data |
len | Length of data |
- Return values
-
Definition at line 137 of file netvsc.c.
142 if (
len <
sizeof ( *cmplt ) ) {
143 DBGC ( netvsc,
"NETVSC %s underlength initialisation " 144 "completion (%zd bytes)\n", netvsc->
name,
len );
148 DBGC ( netvsc,
"NETVSC %s unexpected initialisation completion " 149 "type %d\n", netvsc->
name,
154 DBGC ( netvsc,
"NETVSC %s initialisation failure status %d\n",
#define EINVAL
Invalid argument.
#define le32_to_cpu(value)
struct netvsc_header header
Message header.
#define NETVSC_INIT_CMPLT
NetVSC initialisation completion.
#define cpu_to_le32(value)
#define EPROTO
Protocol error.
uint8_t data[48]
Additional event data.
NetVSC initialisation completion.
References cpu_to_le32, data, DBGC, EINVAL, EPROTO, netvsc_init_completion::header, le32_to_cpu, len, netvsc_device::name, NETVSC_INIT_CMPLT, NETVSC_OK, netvsc_init_completion::status, and netvsc_header::type.
Referenced by netvsc_recv_completion().
static int netvsc_rx_established_buffer |
( |
struct netvsc_device * |
netvsc, |
|
|
const void * |
data, |
|
|
size_t |
len |
|
) |
| |
|
static |
Handle establish receive data buffer completion.
- Parameters
-
netvsc | NetVSC device |
data | Data |
len | Length of data |
- Return values
-
Definition at line 226 of file netvsc.c.
231 if (
len <
sizeof ( *cmplt ) ) {
232 DBGC ( netvsc,
"NETVSC %s underlength buffer completion (%zd " 233 "bytes)\n", netvsc->
name,
len );
237 DBGC ( netvsc,
"NETVSC %s unexpected buffer completion type " 242 DBGC ( netvsc,
"NETVSC %s buffer failure status %d\n",
#define EINVAL
Invalid argument.
#define NETVSC_RX_ESTABLISH_CMPLT
NetVSC establish receive data buffer completion.
#define le32_to_cpu(value)
NetVSC establish receive data buffer completion.
#define cpu_to_le32(value)
#define EPROTO
Protocol error.
uint8_t data[48]
Additional event data.
struct netvsc_header header
Message header.
References cpu_to_le32, data, DBGC, EINVAL, EPROTO, netvsc_rx_establish_buffer_completion::header, le32_to_cpu, len, netvsc_device::name, NETVSC_OK, NETVSC_RX_ESTABLISH_CMPLT, netvsc_rx_establish_buffer_completion::status, and netvsc_header::type.
Referenced by netvsc_recv_completion().
Revoke data buffer.
- Parameters
-
netvsc | NetVSC device |
buffer | Data buffer |
- Return values
-
Definition at line 257 of file netvsc.c.
268 if ( netvsc_is_obsolete ( netvsc ) )
278 &
msg, sizeof (
msg ) ) ) != 0 ) {
279 DBGC ( netvsc,
"NETVSC %s could not revoke buffer: %s\n",
struct arbelprm_rc_send_wqe rc
void msg(unsigned int row, const char *fmt,...)
Print message centred on specified row.
uint32_t buffer
Buffer index (or NETVSC_RNDIS_NO_BUFFER)
#define cpu_to_le32(value)
char * strerror(int errno)
Retrieve string representation of error number.
static int netvsc_control(struct netvsc_device *netvsc, unsigned int xrid, const void *data, size_t len)
Send control message and wait for completion.
NetVSC revoke data buffer message.
void * memset(void *dest, int character, size_t len) __nonnull
References buffer, cpu_to_le32, DBGC, memset(), msg(), netvsc_device::name, netvsc_control(), rc, and strerror().
Referenced by netvsc_close(), and netvsc_open().
Handle received data packet.
- Parameters
-
vmdev | VMBus device |
xid | Transaction ID |
data | Data |
len | Length of data |
list | List of I/O buffers |
- Return values
-
Definition at line 317 of file netvsc.c.
328 if (
len <
sizeof ( *
msg ) ) {
329 DBGC ( netvsc,
"NETVSC %s received underlength RNDIS packet " 330 "(%zd bytes)\n", netvsc->
name,
len );
335 DBGC ( netvsc,
"NETVSC %s received unexpected RNDIS packet " 336 "type %d\n", netvsc->
name,
344 DBGC ( netvsc,
"NETVSC %s could not send completion: %s\n",
#define EINVAL
Invalid argument.
struct arbelprm_rc_send_wqe rc
int vmbus_send_completion(struct vmbus_device *vmdev, uint64_t xid, const void *data, size_t len)
Send completion packet via ring buffer.
void msg(unsigned int row, const char *fmt,...)
Print message centred on specified row.
#define le32_to_cpu(value)
void free_iob(struct io_buffer *iobuf)
Free I/O buffer.
#define NETVSC_RNDIS_MSG
NetVSC RNDIS message.
#define list_del(list)
Delete an entry from a list.
#define iob_disown(iobuf)
Disown an I/O buffer.
#define list_for_each_entry_safe(pos, tmp, head, member)
Iterate over entries in a list, safe against deletion of the current entry.
#define cpu_to_le32(value)
char * strerror(int errno)
Retrieve string representation of error number.
static void * vmbus_get_drvdata(struct vmbus_device *vmdev)
Get VMBus device driver-private data.
void rndis_rx(struct rndis_device *rndis, struct io_buffer *iobuf)
Receive packet from underlying transport layer.
struct list_head list
List of which this buffer is a member.
void * priv
Driver private data.
uint8_t data[48]
Additional event data.
struct rndis_device * rndis
RNDIS device.
#define NULL
NULL pointer (VOID *)
References cpu_to_le32, data, DBGC, EINVAL, free_iob(), iob_disown, le32_to_cpu, len, io_buffer::list, list_del, list_for_each_entry_safe, msg(), netvsc_device::name, NETVSC_RNDIS_MSG, NULL, rndis_device::priv, rc, netvsc_device::rndis, rndis_rx(), strerror(), tmp, vmbus_get_drvdata(), and vmbus_send_completion().
Handle received completion packet.
- Parameters
-
vmdev | VMBus device |
xid | Transaction ID |
data | Data |
len | Length of data |
- Return values
-
Definition at line 375 of file netvsc.c.
381 const void *
data,
size_t len );
394 ( netvsc->
tx.
count - 1 ) ] = tx_id;
406 }
else if ( ( netvsc->
wait_xrid != 0 ) &&
410 DBGC ( netvsc,
"NETVSC %s received unexpected completion " 411 "(%08llx)\n", netvsc->
name, xid );
unsigned int count
Number of descriptors.
struct arbelprm_rc_send_wqe rc
pseudo_bit_t completion[0x00001]
static void rndis_tx_complete(struct rndis_device *rndis, struct io_buffer *iobuf)
Complete message transmission.
#define EPIPE
Broken pipe.
Establish receive buffer.
unsigned int id_cons
Buffer ID consumer counter.
struct io_buffer ** iobufs
I/O buffers, indexed by buffer ID.
struct netvsc_ring tx
Transmit ring.
static void * vmbus_get_drvdata(struct vmbus_device *vmdev)
Get VMBus device driver-private data.
static int netvsc_completed(struct netvsc_device *netvsc __unused, const void *data __unused, size_t len __unused)
Handle generic completion.
static int netvsc_rx_established_buffer(struct netvsc_device *netvsc, const void *data, size_t len)
Handle establish receive data buffer completion.
#define NETVSC_TX_NUM_DESC
Number of transmit ring entries.
unsigned int wait_xrid
Relative transaction ID for current blocking transaction.
void * priv
Driver private data.
uint8_t data[48]
Additional event data.
static int netvsc_initialised(struct netvsc_device *netvsc, const void *data, size_t len)
Handle initialisation completion.
#define NETVSC_BASE_XID
Base transaction ID.
Transmit descriptors (one per transmit buffer ID)
struct rndis_device * rndis
RNDIS device.
#define NULL
NULL pointer (VOID *)
int wait_rc
Return status code for current blocking transaction.
uint8_t * ids
Buffer ID ring.
References completion, netvsc_ring::count, data, DBGC, EPIPE, netvsc_ring::id_cons, netvsc_ring::ids, netvsc_ring::iobufs, len, netvsc_device::name, NETVSC_BASE_XID, netvsc_completed(), NETVSC_INIT_XRID, netvsc_initialised(), NETVSC_RX_ESTABLISH_XRID, netvsc_rx_established_buffer(), NETVSC_TX_BASE_XRID, NETVSC_TX_NUM_DESC, NULL, rndis_device::priv, rc, netvsc_device::rndis, rndis_tx_complete(), netvsc_device::tx, vmbus_get_drvdata(), netvsc_device::wait_rc, and netvsc_device::wait_xrid.
Transmit packet.
- Parameters
-
rndis | RNDIS device |
iobuf | I/O buffer |
- Return values
-
If this method returns success then the RNDIS device must eventually report completion via rndis_tx_complete().
Definition at line 476 of file netvsc.c.
491 if ( netvsc_is_obsolete ( netvsc ) )
499 if ( netvsc_ring_is_full ( &netvsc->
tx ) )
518 DBGC ( netvsc,
"NETVSC %s could not send RNDIS message: %s\n",
unsigned int count
Number of descriptors.
struct arbelprm_rc_send_wqe rc
#define NETVSC_RNDIS_DATA
RNDIS data channel (for RNDIS_PACKET_MSG only)
void msg(unsigned int row, const char *fmt,...)
Print message centred on specified row.
#define le32_to_cpu(value)
#define EPIPE
Broken pipe.
unsigned long long uint64_t
#define NETVSC_RNDIS_MSG
NetVSC RNDIS message.
struct io_buffer ** iobufs
I/O buffers, indexed by buffer ID.
assert((readw(&hdr->flags) &(GTF_reading|GTF_writing))==0)
unsigned int id_prod
Buffer ID producer counter.
#define NETVSC_RNDIS_NO_BUFFER
"No buffer used" index
struct netvsc_ring tx
Transmit ring.
#define cpu_to_le32(value)
char * strerror(int errno)
Retrieve string representation of error number.
static size_t iob_len(struct io_buffer *iobuf)
Calculate length of data in an I/O buffer.
int rndis_tx_defer(struct rndis_device *rndis, struct io_buffer *iobuf)
Defer transmitted packet.
struct vmbus_device * vmdev
VMBus device.
void * data
Start of data.
void * priv
Driver private data.
struct ena_aq_header header
Header.
#define RNDIS_PACKET_MSG
RNDIS packet message.
#define NETVSC_BASE_XID
Base transaction ID.
Transmit descriptors (one per transmit buffer ID)
struct rndis_device * rndis
RNDIS device.
#define NULL
NULL pointer (VOID *)
int vmbus_send_data(struct vmbus_device *vmdev, uint64_t xid, const void *data, size_t len, struct io_buffer *iobuf)
Send data packet via ring buffer.
#define NETVSC_RNDIS_CONTROL
RNDIS control channel (for all other RNDIS messages)
uint8_t * ids
Buffer ID ring.
void * memset(void *dest, int character, size_t len) __nonnull
References assert(), netvsc_ring::count, cpu_to_le32, io_buffer::data, DBGC, EPIPE, header, netvsc_ring::id_prod, netvsc_ring::ids, iob_len(), netvsc_ring::iobufs, le32_to_cpu, memset(), msg(), netvsc_device::name, NETVSC_BASE_XID, NETVSC_RNDIS_CONTROL, NETVSC_RNDIS_DATA, NETVSC_RNDIS_MSG, NETVSC_RNDIS_NO_BUFFER, NETVSC_TX_BASE_XRID, NULL, rndis_device::priv, rc, netvsc_device::rndis, RNDIS_PACKET_MSG, rndis_tx_defer(), strerror(), netvsc_device::tx, vmbus_send_data(), and netvsc_device::vmdev.
Create data buffer.
- Parameters
-
netvsc | NetVSC device |
buffer | Data buffer |
- Return values
-
Definition at line 642 of file netvsc.c.
651 DBGC ( netvsc,
"NETVSC %s could not allocate %zd-byte buffer\n",
661 DBGC ( netvsc,
"NETVSC %s could not establish GPADL: %s\n",
663 goto err_establish_gpadl;
669 DBGC ( netvsc,
"NETVSC %s could not register transfer pages: " 671 goto err_register_pages;
struct arbelprm_rc_send_wqe rc
uint32_t buffer
Buffer index (or NETVSC_RNDIS_NO_BUFFER)
static int vmbus_register_pages(struct vmbus_device *vmdev, struct vmbus_xfer_pages *pages)
Register transfer page set.
#define ENOMEM
Not enough space.
char * strerror(int errno)
Retrieve string representation of error number.
static void vmbus_unregister_pages(struct vmbus_device *vmdev, struct vmbus_xfer_pages *pages)
Unregister transfer page set.
int vmbus_gpadl_teardown(struct vmbus_device *vmdev, unsigned int gpadl)
Tear down GPA descriptor list.
struct vmbus_device * vmdev
VMBus device.
static __always_inline void ufree(userptr_t userptr)
Free external memory.
static __always_inline userptr_t umalloc(size_t size)
Allocate external memory.
int vmbus_establish_gpadl(struct vmbus_device *vmdev, userptr_t data, size_t len)
Establish GPA descriptor list.
References buffer, DBGC, ENOMEM, gpadl, netvsc_device::name, rc, strerror(), ufree(), umalloc(), vmbus_establish_gpadl(), vmbus_gpadl_teardown(), vmbus_register_pages(), vmbus_unregister_pages(), and netvsc_device::vmdev.
Referenced by netvsc_open().
Open device.
- Parameters
-
- Return values
-
Definition at line 721 of file netvsc.c.
732 DBGC ( netvsc,
"NETVSC %s could not open VMBus: %s\n",
741 goto err_ndis_version;
749 goto err_establish_rx;
static int netvsc_create_ring(struct netvsc_device *netvsc __unused, struct netvsc_ring *ring)
Create descriptor ring.
struct arbelprm_rc_send_wqe rc
static struct vmbus_channel_operations netvsc_channel_operations
VMBus channel operations.
static void netvsc_destroy_ring(struct netvsc_device *netvsc, struct netvsc_ring *ring, void(*discard)(struct netvsc_device *, struct io_buffer *, unsigned int))
Destroy descriptor ring.
int vmbus_open(struct vmbus_device *vmdev, struct vmbus_channel_operations *op, size_t out_len, size_t in_len, size_t mtu)
Open VMBus channel.
static int netvsc_establish_buffer(struct netvsc_device *netvsc, struct netvsc_buffer *buffer)
Establish data buffer.
#define PAGE_SIZE
Page size.
static int netvsc_revoke_buffer(struct netvsc_device *netvsc, struct netvsc_buffer *buffer)
Revoke data buffer.
struct netvsc_ring tx
Transmit ring.
char * strerror(int errno)
Retrieve string representation of error number.
#define NETVSC_MTU
Maximum supported NetVSC message length.
static int netvsc_ndis_version(struct netvsc_device *netvsc)
Set NDIS version.
struct vmbus_device * vmdev
VMBus device.
static void netvsc_destroy_buffer(struct netvsc_device *netvsc, struct netvsc_buffer *buffer)
Destroy data buffer.
void * priv
Driver private data.
void vmbus_close(struct vmbus_device *vmdev)
Close VMBus channel.
static int netvsc_initialise(struct netvsc_device *netvsc)
Initialise communication.
struct rndis_device * rndis
RNDIS device.
#define NULL
NULL pointer (VOID *)
struct netvsc_buffer rx
Receive buffer.
static int netvsc_create_buffer(struct netvsc_device *netvsc, struct netvsc_buffer *buffer)
Create data buffer.
References DBGC, netvsc_device::name, netvsc_channel_operations, netvsc_create_buffer(), netvsc_create_ring(), netvsc_destroy_buffer(), netvsc_destroy_ring(), netvsc_establish_buffer(), netvsc_initialise(), NETVSC_MTU, netvsc_ndis_version(), netvsc_revoke_buffer(), NULL, PAGE_SIZE, rndis_device::priv, rc, netvsc_device::rndis, netvsc_device::rx, strerror(), netvsc_device::tx, vmbus_close(), vmbus_open(), and netvsc_device::vmdev.
Probe device.
- Parameters
-
- Return values
-
Definition at line 801 of file netvsc.c.
814 netvsc = rndis->
priv;
815 netvsc->
vmdev = vmdev;
816 netvsc->
rndis = rndis;
829 DBGC ( netvsc,
"NETVSC %s could not register: %s\n",
struct rndis_device * alloc_rndis(size_t priv_len)
Allocate RNDIS device.
struct arbelprm_rc_send_wqe rc
struct device dev
Generic iPXE device.
void unregister_rndis(struct rndis_device *rndis)
Unregister RNDIS device.
Establish receive buffer.
#define NETVSC_RX_REVOKE_MSG
NetVSC revoke receive data buffer message.
#define NETVSC_RX_BUF_PAGESET
RX data buffer page set ID.
#define ENOMEM
Not enough space.
struct net_device * netdev
Network device.
#define NETVSC_RX_ESTABLISH_MSG
NetVSC establish receive data buffer message.
struct netvsc_ring tx
Transmit ring.
static struct rndis_operations netvsc_operations
RNDIS operations.
char * strerror(int errno)
Retrieve string representation of error number.
int register_rndis(struct rndis_device *rndis)
Register RNDIS device.
static void rndis_init(struct rndis_device *rndis, struct rndis_operations *op)
Initialise an RNDIS device.
struct io_buffer * tx_iobufs[NETVSC_TX_NUM_DESC]
Transmit I/O buffers.
#define NETVSC_TX_NUM_DESC
Number of transmit ring entries.
struct device * dev
Underlying hardware device.
uint8_t tx_ids[NETVSC_TX_NUM_DESC]
Transmit buffer IDs.
struct vmbus_device * vmdev
VMBus device.
void * priv
Driver private data.
#define NETVSC_RX_BUF_LEN
RX data buffer length.
static void vmbus_set_drvdata(struct vmbus_device *vmdev, void *priv)
Set VMBus device driver-private data.
static struct vmbus_xfer_pages_operations netvsc_xfer_pages_operations
Transfer page set operations.
struct rndis_device * rndis
RNDIS device.
void free_rndis(struct rndis_device *rndis)
Free RNDIS device.
struct netvsc_buffer rx
Receive buffer.
References alloc_rndis(), DBGC, net_device::dev, vmbus_device::dev, ENOMEM, free_rndis(), device::name, netvsc_device::name, rndis_device::netdev, netvsc_operations, NETVSC_RX_BUF_LEN, NETVSC_RX_BUF_PAGESET, NETVSC_RX_ESTABLISH_MSG, NETVSC_RX_ESTABLISH_XRID, NETVSC_RX_REVOKE_MSG, NETVSC_RX_REVOKE_XRID, NETVSC_TX_NUM_DESC, netvsc_xfer_pages_operations, rndis_device::priv, rc, register_rndis(), netvsc_device::rndis, rndis_init(), netvsc_device::rx, strerror(), netvsc_device::tx, netvsc_device::tx_ids, netvsc_device::tx_iobufs, unregister_rndis(), vmbus_set_drvdata(), and netvsc_device::vmdev.