Lines Matching refs:netdev

61 void netdev_link_down ( struct net_device *netdev ) {  in netdev_link_down()  argument
63 switch ( netdev->link_rc ) { in netdev_link_down()
66 netdev->link_rc = -ENOTCONN; in netdev_link_down()
125 int netdev_tx ( struct net_device *netdev, struct io_buffer *iobuf ) { in netdev_tx() argument
128 DBGC ( netdev, "NETDEV %p transmitting %p (%p+%zx)\n", in netdev_tx()
129 netdev, iobuf, iobuf->data, iob_len ( iobuf ) ); in netdev_tx()
131 list_add_tail ( &iobuf->list, &netdev->tx_queue ); in netdev_tx()
133 if ( ! ( netdev->state & NETDEV_OPEN ) ) { in netdev_tx()
138 if ( ( rc = netdev->op->transmit ( netdev, iobuf ) ) != 0 ) in netdev_tx()
144 netdev_tx_complete_err ( netdev, iobuf, rc ); in netdev_tx()
157 void netdev_tx_complete_err ( struct net_device *netdev, in netdev_tx_complete_err() argument
161 netdev_record_stat ( &netdev->tx_stats, rc ); in netdev_tx_complete_err()
163 DBGC ( netdev, "NETDEV %p transmission %p complete\n", in netdev_tx_complete_err()
164 netdev, iobuf ); in netdev_tx_complete_err()
166 DBGC ( netdev, "NETDEV %p transmission %p failed: %s\n", in netdev_tx_complete_err()
167 netdev, iobuf, strerror ( rc ) ); in netdev_tx_complete_err()
187 void netdev_tx_complete_next_err ( struct net_device *netdev, int rc ) { in netdev_tx_complete_next_err() argument
190 list_for_each_entry ( iobuf, &netdev->tx_queue, list ) { in netdev_tx_complete_next_err()
191 netdev_tx_complete_err ( netdev, iobuf, rc ); in netdev_tx_complete_next_err()
201 static void netdev_tx_flush ( struct net_device *netdev ) { in netdev_tx_flush() argument
204 while ( ! list_empty ( &netdev->tx_queue ) ) { in netdev_tx_flush()
205 netdev_tx_complete_next_err ( netdev, -ECANCELED ); in netdev_tx_flush()
218 void netdev_rx ( struct net_device *netdev, struct io_buffer *iobuf ) { in netdev_rx() argument
220 DBGC ( netdev, "NETDEV %p received %p (%p+%zx)\n", in netdev_rx()
221 netdev, iobuf, iobuf->data, iob_len ( iobuf ) ); in netdev_rx()
224 list_add_tail ( &iobuf->list, &netdev->rx_queue ); in netdev_rx()
227 netdev_record_stat ( &netdev->rx_stats, 0 ); in netdev_rx()
242 void netdev_rx_err ( struct net_device *netdev, in netdev_rx_err() argument
245 DBGC ( netdev, "NETDEV %p failed to receive %p: %s\n", in netdev_rx_err()
246 netdev, iobuf, strerror ( rc ) ); in netdev_rx_err()
252 netdev_record_stat ( &netdev->rx_stats, rc ); in netdev_rx_err()
264 void netdev_poll ( struct net_device *netdev ) { in netdev_poll() argument
266 if ( netdev->state & NETDEV_OPEN ) in netdev_poll()
267 netdev->op->poll ( netdev ); in netdev_poll()
279 struct io_buffer * netdev_rx_dequeue ( struct net_device *netdev ) { in netdev_rx_dequeue() argument
282 list_for_each_entry ( iobuf, &netdev->rx_queue, list ) { in netdev_rx_dequeue()
294 static void netdev_rx_flush ( struct net_device *netdev ) { in netdev_rx_flush() argument
298 while ( ( iobuf = netdev_rx_dequeue ( netdev ) ) ) { in netdev_rx_flush()
299 netdev_rx_err ( netdev, iobuf, -ECANCELED ); in netdev_rx_flush()
309 struct net_device *netdev = in free_netdev() local
312 netdev_tx_flush ( netdev ); in free_netdev()
313 netdev_rx_flush ( netdev ); in free_netdev()
314 clear_settings ( netdev_settings ( netdev ) ); in free_netdev()
315 free ( netdev ); in free_netdev()
327 struct net_device *netdev; in alloc_netdev() local
330 total_len = ( sizeof ( *netdev ) + priv_size ); in alloc_netdev()
331 netdev = zalloc ( total_len ); in alloc_netdev()
332 if ( netdev ) { in alloc_netdev()
333 netdev->refcnt.free = free_netdev; in alloc_netdev()
334 netdev->link_rc = -EUNKNOWN_LINK_STATUS; in alloc_netdev()
335 INIT_LIST_HEAD ( &netdev->tx_queue ); in alloc_netdev()
336 INIT_LIST_HEAD ( &netdev->rx_queue ); in alloc_netdev()
337 netdev_settings_init ( netdev ); in alloc_netdev()
338 netdev->priv = ( ( ( void * ) netdev ) + sizeof ( *netdev ) ); in alloc_netdev()
340 return netdev; in alloc_netdev()
352 int register_netdev ( struct net_device *netdev ) { in register_netdev() argument
357 snprintf ( netdev->name, sizeof ( netdev->name ), "net%d", in register_netdev()
361 netdev->ll_protocol->init_addr ( netdev->hw_addr, netdev->ll_addr ); in register_netdev()
364 if ( ( rc = register_settings ( netdev_settings ( netdev ), in register_netdev()
366 DBGC ( netdev, "NETDEV %p could not register settings: %s\n", in register_netdev()
367 netdev, strerror ( rc ) ); in register_netdev()
372 netdev_get ( netdev ); in register_netdev()
373 list_add_tail ( &netdev->list, &net_devices ); in register_netdev()
374 DBGC ( netdev, "NETDEV %p registered as %s (phys %s hwaddr %s)\n", in register_netdev()
375 netdev, netdev->name, netdev->dev->name, in register_netdev()
376 netdev_addr ( netdev ) ); in register_netdev()
387 int netdev_open ( struct net_device *netdev ) { in netdev_open() argument
391 if ( netdev->state & NETDEV_OPEN ) in netdev_open()
394 DBGC ( netdev, "NETDEV %p opening\n", netdev ); in netdev_open()
397 if ( ( rc = netdev->op->open ( netdev ) ) != 0 ) in netdev_open()
401 netdev->state |= NETDEV_OPEN; in netdev_open()
404 list_add ( &netdev->open_list, &open_net_devices ); in netdev_open()
414 void netdev_close ( struct net_device *netdev ) { in netdev_close() argument
417 if ( ! ( netdev->state & NETDEV_OPEN ) ) in netdev_close()
420 DBGC ( netdev, "NETDEV %p closing\n", netdev ); in netdev_close()
423 netdev->op->close ( netdev ); in netdev_close()
426 netdev_tx_flush ( netdev ); in netdev_close()
427 netdev_rx_flush ( netdev ); in netdev_close()
430 netdev->state &= ~NETDEV_OPEN; in netdev_close()
433 list_del ( &netdev->open_list ); in netdev_close()
443 void unregister_netdev ( struct net_device *netdev ) { in unregister_netdev() argument
446 netdev_close ( netdev ); in unregister_netdev()
449 unregister_settings ( netdev_settings ( netdev ) ); in unregister_netdev()
452 list_del ( &netdev->list ); in unregister_netdev()
453 netdev_put ( netdev ); in unregister_netdev()
454 DBGC ( netdev, "NETDEV %p unregistered\n", netdev ); in unregister_netdev()
462 void netdev_irq ( struct net_device *netdev, int enable ) { in netdev_irq() argument
463 netdev->op->irq ( netdev, enable ); in netdev_irq()
473 struct net_device *netdev; in find_netdev() local
475 list_for_each_entry ( netdev, &net_devices, list ) { in find_netdev()
476 if ( strcmp ( netdev->name, name ) == 0 ) in find_netdev()
477 return netdev; in find_netdev()
492 struct net_device *netdev; in find_netdev_by_location() local
494 list_for_each_entry ( netdev, &net_devices, list ) { in find_netdev_by_location()
495 if ( ( netdev->dev->desc.bus_type == bus_type ) && in find_netdev_by_location()
496 ( netdev->dev->desc.location == location ) ) in find_netdev_by_location()
497 return netdev; in find_netdev_by_location()
509 struct net_device *netdev; in last_opened_netdev() local
511 list_for_each_entry ( netdev, &open_net_devices, open_list ) { in last_opened_netdev()
512 assert ( netdev->state & NETDEV_OPEN ); in last_opened_netdev()
513 return netdev; in last_opened_netdev()
532 int net_tx ( struct io_buffer *iobuf, struct net_device *netdev, in net_tx() argument
534 struct ll_protocol *ll_protocol = netdev->ll_protocol; in net_tx()
542 netdev_poll ( netdev ); in net_tx()
545 if ( ( rc = ll_protocol->push ( netdev, iobuf, ll_dest, netdev->ll_addr, in net_tx()
552 return netdev_tx ( netdev, iobuf ); in net_tx()
564 int net_rx ( struct io_buffer *iobuf, struct net_device *netdev, in net_rx() argument
571 return net_protocol->rx ( iobuf, netdev, ll_source ); in net_rx()
574 DBGC ( netdev, "NETDEV %p unknown network protocol %04x\n", in net_rx()
575 netdev, ntohs ( net_proto ) ); in net_rx()
589 struct net_device *netdev; in net_step() local
598 list_for_each_entry ( netdev, &net_devices, list ) { in net_step()
601 netdev_poll ( netdev ); in net_step()
609 if ( ( iobuf = netdev_rx_dequeue ( netdev ) ) ) { in net_step()
611 DBGC ( netdev, "NETDEV %p processing %p (%p+%zx)\n", in net_step()
612 netdev, iobuf, iobuf->data, in net_step()
616 ll_protocol = netdev->ll_protocol; in net_step()
617 if ( ( rc = ll_protocol->pull ( netdev, iobuf, in net_step()
624 net_rx ( iobuf, netdev, net_proto, ll_source ); in net_step()