Changes in uspace/drv/nic/lo/lo.c [5cc9eba:00d7e1b] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/nic/lo/lo.c
r5cc9eba r00d7e1b 42 42 #include <async.h> 43 43 #include <nic.h> 44 #include <packet_client.h> 44 45 45 46 #define NAME "lo" … … 58 59 }; 59 60 60 static void lo_ send_frame(nic_t *nic_data, void *data, size_t size)61 static void lo_write_packet(nic_t *nic_data, packet_t *packet) 61 62 { 62 nic_report_send_ok(nic_data, 1, size);63 nic_received_noneth_ frame(nic_data, data, size);63 nic_report_send_ok(nic_data, 1, packet_get_data_length(packet)); 64 nic_received_noneth_packet(nic_data, packet); 64 65 } 65 66 … … 78 79 } 79 80 80 static int lo_ dev_add(ddf_dev_t *dev)81 static int lo_add_device(ddf_dev_t *dev) 81 82 { 82 ddf_fun_t *fun = NULL; 83 bool bound = false; 84 85 nic_t *nic = nic_create_and_bind(dev); 86 if (nic == NULL) { 83 nic_t *nic_data = nic_create_and_bind(dev); 84 if (nic_data == NULL) { 87 85 printf("%s: Failed to initialize\n", NAME); 88 86 return ENOMEM; 89 87 } 90 88 91 dev->driver_data = nic ;92 nic_set_ send_frame_handler(nic, lo_send_frame);89 dev->driver_data = nic_data; 90 nic_set_write_packet_handler(nic_data, lo_write_packet); 93 91 94 int rc = nic_connect_to_services(nic );92 int rc = nic_connect_to_services(nic_data); 95 93 if (rc != EOK) { 96 94 printf("%s: Failed to connect to services\n", NAME); 97 goto error; 95 nic_unbind_and_destroy(dev); 96 return rc; 98 97 } 99 98 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;99 rc = nic_register_as_ddf_fun(nic_data, &lo_dev_ops); 100 if (rc != EOK) { 101 printf("%s: Failed to register as DDF function\n", NAME); 102 nic_unbind_and_destroy(dev); 103 return rc; 105 104 } 106 nic_set_ddf_fun(nic, fun);107 fun->ops = &lo_dev_ops;108 fun->driver_data = nic;109 105 110 rc = nic_report_address(nic , &lo_addr);106 rc = nic_report_address(nic_data, &lo_addr); 111 107 if (rc != EOK) { 112 108 printf("%s: Failed to setup loopback address\n", NAME); 113 goto error; 109 nic_unbind_and_destroy(dev); 110 return rc; 114 111 } 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 112 127 113 printf("%s: Adding loopback device '%s'\n", NAME, dev->name); 128 114 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 115 } 140 116 … … 142 118 143 119 static driver_ops_t lo_driver_ops = { 144 . dev_add = lo_dev_add,120 .add_device = lo_add_device, 145 121 }; 146 122
Note:
See TracChangeset
for help on using the changeset viewer.