Changeset 56fd7cf in mainline for uspace/lib/nic/src
- Timestamp:
- 2012-08-17T11:37:03Z (13 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 1d5a540
- Parents:
- be2a38ad
- Location:
- uspace/lib/nic/src
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/nic/src/nic_driver.c
rbe2a38ad r56fd7cf 47 47 #include <sysinfo.h> 48 48 #include <as.h> 49 #include <devman.h>50 49 #include <ddf/interrupt.h> 51 50 #include <ops/nic.h> … … 250 249 { 251 250 ddf_dev_t *dev = nic_data->dev; 251 async_sess_t *parent_sess; 252 252 253 253 /* Connect to the parent's driver. */ 254 dev->parent_sess = devman_parent_device_connect(EXCHANGE_SERIALIZE, 255 dev->handle, IPC_FLAG_BLOCKING); 256 if (dev->parent_sess == NULL) 254 parent_sess = ddf_dev_parent_sess_create(dev, EXCHANGE_SERIALIZE); 255 if (parent_sess == NULL) 257 256 return EPARTY; 258 257 259 return hw_res_get_list_parsed( nic_data->dev->parent_sess, resources, 0);258 return hw_res_get_list_parsed(parent_sess, resources, 0); 260 259 } 261 260 … … 650 649 * 651 650 */ 652 static nic_t *nic_create( void)653 { 654 nic_t *nic_data = malloc(sizeof(nic_t));651 static nic_t *nic_create(ddf_dev_t *dev) 652 { 653 nic_t *nic_data = ddf_dev_data_alloc(dev, sizeof(nic_t)); 655 654 if (nic_data == NULL) 656 655 return NULL; 657 656 658 657 /* Force zero to all uninitialized fields (e.g. added in future) */ 659 bzero(nic_data, sizeof(nic_t));660 658 if (nic_rxc_init(&nic_data->rx_control) != EOK) { 661 free(nic_data);662 659 return NULL; 663 660 } 664 661 665 662 if (nic_wol_virtues_init(&nic_data->wol_virtues) != EOK) { 666 free(nic_data);667 663 return NULL; 668 664 } … … 705 701 nic_t *nic_create_and_bind(ddf_dev_t *device) 706 702 { 707 assert(device); 708 assert(!device->driver_data); 709 710 nic_t *nic_data = nic_create(); 703 nic_t *nic_data = nic_create(device); 711 704 if (!nic_data) 712 705 return NULL; 713 706 714 707 nic_data->dev = device; 715 device->driver_data = nic_data;716 708 717 709 return nic_data; … … 724 716 * @param data 725 717 */ 726 static void nic_destroy(nic_t *nic_data) { 727 if (nic_data->client_session != NULL) { 728 async_hangup(nic_data->client_session); 729 } 730 718 static void nic_destroy(nic_t *nic_data) 719 { 731 720 free(nic_data->specific); 732 free(nic_data);733 721 } 734 722 … … 740 728 * @param device The NIC device structure 741 729 */ 742 void nic_unbind_and_destroy(ddf_dev_t *device){ 743 if (!device) 744 return; 745 if (!device->driver_data) 746 return; 747 748 nic_destroy((nic_t *) device->driver_data); 749 device->driver_data = NULL; 730 void nic_unbind_and_destroy(ddf_dev_t *device) 731 { 732 nic_destroy(nic_get_from_ddf_dev(device)); 750 733 return; 751 734 } … … 983 966 nic_t *nic_get_from_ddf_dev(ddf_dev_t *dev) 984 967 { 985 return (nic_t *) d ev->driver_data;986 } ;968 return (nic_t *) ddf_dev_data_get(dev); 969 } 987 970 988 971 /** … … 992 975 nic_t *nic_get_from_ddf_fun(ddf_fun_t *fun) 993 976 { 994 return (nic_t *) fun->driver_data;995 } ;977 return (nic_t *) ddf_fun_data_get(fun); 978 } 996 979 997 980 /** -
uspace/lib/nic/src/nic_impl.c
rbe2a38ad r56fd7cf 54 54 int nic_get_state_impl(ddf_fun_t *fun, nic_device_state_t *state) 55 55 { 56 nic_t *nic_data = (nic_t *) fun->driver_data;56 nic_t *nic_data = nic_get_from_ddf_fun(fun); 57 57 fibril_rwlock_read_lock(&nic_data->main_lock); 58 58 *state = nic_data->state; … … 78 78 } 79 79 80 nic_t *nic_data = (nic_t *) fun->driver_data;80 nic_t *nic_data = nic_get_from_ddf_fun(fun); 81 81 82 82 fibril_rwlock_write_lock(&nic_data->main_lock); … … 170 170 int nic_send_frame_impl(ddf_fun_t *fun, void *data, size_t size) 171 171 { 172 nic_t *nic_data = (nic_t *) fun->driver_data;172 nic_t *nic_data = nic_get_from_ddf_fun(fun); 173 173 174 174 fibril_rwlock_read_lock(&nic_data->main_lock); … … 192 192 int nic_callback_create_impl(ddf_fun_t *fun) 193 193 { 194 nic_t *nic = (nic_t *) fun->driver_data;194 nic_t *nic = nic_get_from_ddf_fun(fun); 195 195 fibril_rwlock_write_lock(&nic->main_lock); 196 196 … … 218 218 { 219 219 assert(address); 220 nic_t *nic_data = (nic_t *) fun->driver_data;220 nic_t *nic_data = nic_get_from_ddf_fun(fun); 221 221 fibril_rwlock_read_lock(&nic_data->main_lock); 222 222 memcpy(address, &nic_data->mac, sizeof (nic_address_t)); … … 236 236 int nic_get_stats_impl(ddf_fun_t *fun, nic_device_stats_t *stats) 237 237 { 238 nic_t *nic_data = (nic_t *) fun->driver_data;238 nic_t *nic_data = nic_get_from_ddf_fun(fun); 239 239 assert (stats != NULL); 240 240 fibril_rwlock_read_lock(&nic_data->stats_lock); … … 259 259 size_t max_count, nic_address_t *addr_list, size_t *addr_count) 260 260 { 261 nic_t *nic_data = (nic_t *) fun->driver_data;261 nic_t *nic_data = nic_get_from_ddf_fun(fun); 262 262 fibril_rwlock_read_lock(&nic_data->rxc_lock); 263 263 nic_rxc_unicast_get_mode(&nic_data->rx_control, mode, max_count, … … 291 291 } 292 292 293 nic_t *nic_data = (nic_t *) fun->driver_data;293 nic_t *nic_data = nic_get_from_ddf_fun(fun); 294 294 fibril_rwlock_write_lock(&nic_data->rxc_lock); 295 295 int rc = ENOTSUP; … … 326 326 size_t max_count, nic_address_t *addr_list, size_t *addr_count) 327 327 { 328 nic_t *nic_data = (nic_t *) fun->driver_data;328 nic_t *nic_data = nic_get_from_ddf_fun(fun); 329 329 fibril_rwlock_read_lock(&nic_data->rxc_lock); 330 330 nic_rxc_multicast_get_mode(&nic_data->rx_control, mode, max_count, … … 358 358 } 359 359 360 nic_t *nic_data = (nic_t *) fun->dev->driver_data;360 nic_t *nic_data = nic_get_from_ddf_fun(fun); 361 361 fibril_rwlock_write_lock(&nic_data->rxc_lock); 362 362 int rc = ENOTSUP; … … 382 382 int nic_broadcast_get_mode_impl(ddf_fun_t *fun, nic_broadcast_mode_t *mode) 383 383 { 384 nic_t *nic_data = (nic_t *) fun->driver_data;384 nic_t *nic_data = nic_get_from_ddf_fun(fun); 385 385 fibril_rwlock_read_lock(&nic_data->rxc_lock); 386 386 nic_rxc_broadcast_get_mode(&nic_data->rx_control, mode); … … 402 402 int nic_broadcast_set_mode_impl(ddf_fun_t *fun, nic_broadcast_mode_t mode) 403 403 { 404 nic_t *nic_data = (nic_t *) fun->driver_data;404 nic_t *nic_data = nic_get_from_ddf_fun(fun); 405 405 fibril_rwlock_write_lock(&nic_data->rxc_lock); 406 406 int rc = ENOTSUP; … … 429 429 size_t max_count, nic_address_t *addr_list, size_t *addr_count) 430 430 { 431 nic_t *nic_data = (nic_t *) fun->driver_data;431 nic_t *nic_data = nic_get_from_ddf_fun(fun); 432 432 fibril_rwlock_read_lock(&nic_data->rxc_lock); 433 433 nic_rxc_blocked_sources_get(&nic_data->rx_control, … … 452 452 const nic_address_t *addr_list, size_t addr_count) 453 453 { 454 nic_t *nic_data = (nic_t *) fun->driver_data;454 nic_t *nic_data = nic_get_from_ddf_fun(fun); 455 455 fibril_rwlock_write_lock(&nic_data->rxc_lock); 456 456 if (nic_data->on_blocked_sources_change) { … … 474 474 int nic_vlan_get_mask_impl(ddf_fun_t *fun, nic_vlan_mask_t *mask) 475 475 { 476 nic_t *nic_data = (nic_t *) fun->driver_data;476 nic_t *nic_data = nic_get_from_ddf_fun(fun); 477 477 fibril_rwlock_read_lock(&nic_data->rxc_lock); 478 478 int rc = nic_rxc_vlan_get_mask(&nic_data->rx_control, mask); … … 492 492 int nic_vlan_set_mask_impl(ddf_fun_t *fun, const nic_vlan_mask_t *mask) 493 493 { 494 nic_t *nic_data = (nic_t *) fun->driver_data;494 nic_t *nic_data = nic_get_from_ddf_fun(fun); 495 495 fibril_rwlock_write_lock(&nic_data->rxc_lock); 496 496 int rc = nic_rxc_vlan_set_mask(&nic_data->rx_control, mask); … … 520 520 const void *data, size_t length, nic_wv_id_t *new_id) 521 521 { 522 nic_t *nic_data = (nic_t *) fun->driver_data;522 nic_t *nic_data = nic_get_from_ddf_fun(fun); 523 523 if (nic_data->on_wol_virtue_add == NULL 524 524 || nic_data->on_wol_virtue_remove == NULL) { … … 594 594 int nic_wol_virtue_remove_impl(ddf_fun_t *fun, nic_wv_id_t id) 595 595 { 596 nic_t *nic_data = (nic_t *) fun->driver_data;596 nic_t *nic_data = nic_get_from_ddf_fun(fun); 597 597 if (nic_data->on_wol_virtue_add == NULL 598 598 || nic_data->on_wol_virtue_remove == NULL) { … … 631 631 nic_wv_type_t *type, size_t max_length, void *data, size_t *length) 632 632 { 633 nic_t *nic_data = (nic_t *) fun->driver_data;633 nic_t *nic_data = nic_get_from_ddf_fun(fun); 634 634 fibril_rwlock_read_lock(&nic_data->wv_lock); 635 635 const nic_wol_virtue_t *virtue = … … 669 669 size_t max_count, nic_wv_id_t *id_list, size_t *id_count) 670 670 { 671 nic_t *nic_data = (nic_t *) fun->driver_data;671 nic_t *nic_data = nic_get_from_ddf_fun(fun); 672 672 fibril_rwlock_read_lock(&nic_data->wv_lock); 673 673 int rc = nic_wol_virtues_list(&nic_data->wol_virtues, type, … … 689 689 int nic_wol_virtue_get_caps_impl(ddf_fun_t *fun, nic_wv_type_t type, int *count) 690 690 { 691 nic_t *nic_data = (nic_t *) fun->driver_data;691 nic_t *nic_data = nic_get_from_ddf_fun(fun); 692 692 fibril_rwlock_read_lock(&nic_data->wv_lock); 693 693 *count = nic_data->wol_virtues.caps_max[type] … … 712 712 nic_poll_mode_t *mode, struct timeval *period) 713 713 { 714 nic_t *nic_data = (nic_t *) fun->driver_data;714 nic_t *nic_data = nic_get_from_ddf_fun(fun); 715 715 fibril_rwlock_read_lock(&nic_data->main_lock); 716 716 *mode = nic_data->poll_mode; … … 735 735 nic_poll_mode_t mode, const struct timeval *period) 736 736 { 737 nic_t *nic_data = (nic_t *) fun->driver_data;737 nic_t *nic_data = nic_get_from_ddf_fun(fun); 738 738 /* If the driver does not implement the poll mode change handler it cannot 739 739 * switch off interrupts and this is not supported. */ … … 783 783 */ 784 784 int nic_poll_now_impl(ddf_fun_t *fun) { 785 nic_t *nic_data = (nic_t *) fun->driver_data;785 nic_t *nic_data = nic_get_from_ddf_fun(fun); 786 786 fibril_rwlock_read_lock(&nic_data->main_lock); 787 787 if (nic_data->poll_mode != NIC_POLL_ON_DEMAND) {
Note:
See TracChangeset
for help on using the changeset viewer.