Changeset a35b458 in mainline for uspace/drv/nic/ne2k/ne2k.c
- Timestamp:
- 2018-03-02T20:10:49Z (7 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- f1380b7
- Parents:
- 3061bc1
- git-author:
- Jiří Zárevúcky <zarevucky.jiri@…> (2018-02-28 17:38:31)
- git-committer:
- Jiří Zárevúcky <zarevucky.jiri@…> (2018-03-02 20:10:49)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/nic/ne2k/ne2k.c
r3061bc1 ra35b458 183 183 hw_res_list_parsed_t hw_res_parsed; 184 184 hw_res_list_parsed_init(&hw_res_parsed); 185 185 186 186 errno_t rc = nic_get_resources(nic_data, &hw_res_parsed); 187 187 188 188 if (rc != EOK) 189 189 goto failed; 190 190 191 191 if (hw_res_parsed.irqs.count == 0) { 192 192 rc = EINVAL; 193 193 goto failed; 194 194 } 195 195 196 196 if (hw_res_parsed.io_ranges.count == 0) { 197 197 rc = EINVAL; 198 198 goto failed; 199 199 } 200 200 201 201 if (hw_res_parsed.io_ranges.ranges[0].size < NE2K_IO_SIZE) { 202 202 rc = EINVAL; 203 203 goto failed; 204 204 } 205 205 206 206 ne2k_t *ne2k = (ne2k_t *) nic_get_specific(nic_data); 207 207 ne2k->irq = hw_res_parsed.irqs.irqs[0]; 208 208 209 209 addr_range_t regs = hw_res_parsed.io_ranges.ranges[0]; 210 210 ne2k->base_port = RNGABSPTR(regs); 211 211 212 212 hw_res_list_parsed_clean(&hw_res_parsed); 213 213 214 214 /* Enable programmed I/O */ 215 215 if (pio_enable_range(®s, &ne2k->port) != EOK) 216 216 return EADDRNOTAVAIL; 217 217 218 218 ne2k->data_port = ne2k->port + NE2K_DATA; 219 219 ne2k->receive_configuration = RCR_AB | RCR_AM; 220 220 ne2k->probed = false; 221 221 ne2k->up = false; 222 222 223 223 /* Find out whether the device is present. */ 224 224 if (ne2k_probe(ne2k) != EOK) 225 225 return ENOENT; 226 226 227 227 ne2k->probed = true; 228 228 229 229 if (ne2k_register_interrupt(nic_data, NULL) != EOK) 230 230 return EINVAL; 231 231 232 232 return EOK; 233 233 234 234 failed: 235 235 hw_res_list_parsed_clean(&hw_res_parsed); … … 358 358 { 359 359 ddf_fun_t *fun; 360 360 361 361 /* Allocate driver data for the device. */ 362 362 nic_t *nic_data = nic_create_and_bind(dev); 363 363 if (nic_data == NULL) 364 364 return ENOMEM; 365 365 366 366 nic_set_send_frame_handler(nic_data, ne2k_send); 367 367 nic_set_state_change_handlers(nic_data, … … 370 370 ne2k_on_unicast_mode_change, ne2k_on_multicast_mode_change, 371 371 ne2k_on_broadcast_mode_change, NULL, NULL); 372 372 373 373 ne2k_t *ne2k = malloc(sizeof(ne2k_t)); 374 374 if (NULL != ne2k) { … … 379 379 return ENOMEM; 380 380 } 381 381 382 382 ne2k->dev = dev; 383 383 ne2k->parent_sess = ddf_dev_parent_sess_get(dev); … … 386 386 return ENOMEM; 387 387 } 388 388 389 389 errno_t rc = ne2k_dev_init(nic_data); 390 390 if (rc != EOK) { … … 392 392 return rc; 393 393 } 394 394 395 395 rc = nic_report_address(nic_data, &ne2k->mac); 396 396 if (rc != EOK) { … … 398 398 return rc; 399 399 } 400 400 401 401 fun = ddf_fun_create(nic_get_ddf_dev(nic_data), fun_exposed, "port0"); 402 402 if (fun == NULL) { … … 404 404 return ENOMEM; 405 405 } 406 406 407 407 nic_set_ddf_fun(nic_data, fun); 408 408 ddf_fun_set_ops(fun, &ne2k_dev_ops); 409 409 410 410 rc = ddf_fun_bind(fun); 411 411 if (rc != EOK) { … … 414 414 return rc; 415 415 } 416 416 417 417 rc = ddf_fun_add_to_category(fun, DEVICE_CATEGORY_NIC); 418 418 if (rc != EOK) { … … 421 421 return rc; 422 422 } 423 423 424 424 return EOK; 425 425 } … … 441 441 { 442 442 printf("%s: HelenOS NE 2000 network adapter driver\n", NAME); 443 443 444 444 nic_driver_init(NAME); 445 445 nic_driver_implement(&ne2k_driver_ops, &ne2k_dev_ops, &ne2k_nic_iface); 446 446 447 447 return ddf_driver_main(&ne2k_driver); 448 448 }
Note:
See TracChangeset
for help on using the changeset viewer.