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