Changes in uspace/drv/nic/lo/lo.c [5cc9eba:6d8455d] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/nic/lo/lo.c
r5cc9eba r6d8455d 42 42 #include <async.h> 43 43 #include <nic.h> 44 #include <packet_client.h> 44 45 45 46 #define NAME "lo" … … 60 61 static void lo_send_frame(nic_t *nic_data, void *data, size_t size) 61 62 { 63 packet_t *packet; 64 int rc; 65 66 packet = nic_alloc_packet(nic_data, size); 67 if (packet == NULL) 68 return; 69 70 rc = packet_copy_data(packet, data, size); 71 if (rc != EOK) 72 return; 73 62 74 nic_report_send_ok(nic_data, 1, size); 63 nic_received_noneth_ frame(nic_data, data, size);75 nic_received_noneth_packet(nic_data, packet); 64 76 } 65 77 … … 80 92 static int lo_dev_add(ddf_dev_t *dev) 81 93 { 82 ddf_fun_t *fun = NULL; 83 bool bound = false; 84 85 nic_t *nic = nic_create_and_bind(dev); 86 if (nic == NULL) { 94 nic_t *nic_data = nic_create_and_bind(dev); 95 if (nic_data == NULL) { 87 96 printf("%s: Failed to initialize\n", NAME); 88 97 return ENOMEM; 89 98 } 90 99 91 dev->driver_data = nic ;92 nic_set_send_frame_handler(nic , lo_send_frame);100 dev->driver_data = nic_data; 101 nic_set_send_frame_handler(nic_data, lo_send_frame); 93 102 94 int rc = nic_connect_to_services(nic );103 int rc = nic_connect_to_services(nic_data); 95 104 if (rc != EOK) { 96 105 printf("%s: Failed to connect to services\n", NAME); 97 goto error; 106 nic_unbind_and_destroy(dev); 107 return rc; 98 108 } 99 109 100 fun = ddf_fun_create(nic_get_ddf_dev(nic), fun_exposed, "port0");101 if ( fun == NULL) {102 printf("%s: Failed creatingfunction\n", NAME);103 rc = ENOMEM;104 goto error;110 rc = nic_register_as_ddf_fun(nic_data, &lo_dev_ops); 111 if (rc != EOK) { 112 printf("%s: Failed to register as DDF function\n", NAME); 113 nic_unbind_and_destroy(dev); 114 return rc; 105 115 } 106 nic_set_ddf_fun(nic, fun);107 fun->ops = &lo_dev_ops;108 fun->driver_data = nic;109 116 110 rc = nic_report_address(nic , &lo_addr);117 rc = nic_report_address(nic_data, &lo_addr); 111 118 if (rc != EOK) { 112 119 printf("%s: Failed to setup loopback address\n", NAME); 113 goto error; 120 nic_unbind_and_destroy(dev); 121 return rc; 114 122 } 115 116 rc = ddf_fun_bind(fun);117 if (rc != EOK) {118 printf("%s: Failed binding function\n", NAME);119 goto error;120 }121 bound = true;122 123 rc = ddf_fun_add_to_category(fun, DEVICE_CATEGORY_NIC);124 if (rc != EOK)125 goto error;126 123 127 124 printf("%s: Adding loopback device '%s'\n", NAME, dev->name); 128 125 return EOK; 129 130 error:131 if (bound)132 ddf_fun_unbind(fun);133 134 if (fun != NULL)135 ddf_fun_destroy(fun);136 137 nic_unbind_and_destroy(dev);138 return rc;139 126 } 140 127
Note:
See TracChangeset
for help on using the changeset viewer.