Changes in uspace/drv/nic/ne2k/dp8390.c [80099c19:a88a6eac] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/nic/ne2k/dp8390.c
r80099c19 ra88a6eac 59 59 #include <stdio.h> 60 60 #include <libarch/ddi.h> 61 #include <net/packet.h>62 #include <packet_client.h>63 61 #include "dp8390.h" 64 62 … … 76 74 uint8_t status; 77 75 78 /** Pointer to next packet*/76 /** Pointer to next frame */ 79 77 uint8_t next; 80 78 … … 142 140 static void ne2k_upload(ne2k_t *ne2k, void *buf, size_t addr, size_t size) 143 141 { 142 size_t esize_ru = (size + 1) & ~1; 144 143 size_t esize = size & ~1; 145 144 146 pio_write_8(ne2k->port + DP_RBCR0, esize & 0xff);147 pio_write_8(ne2k->port + DP_RBCR1, (esize >> 8) & 0xff);145 pio_write_8(ne2k->port + DP_RBCR0, esize_ru & 0xff); 146 pio_write_8(ne2k->port + DP_RBCR1, (esize_ru >> 8) & 0xff); 148 147 pio_write_8(ne2k->port + DP_RSAR0, addr & 0xff); 149 148 pio_write_8(ne2k->port + DP_RSAR1, (addr >> 8) & 0xff); … … 392 391 /* 393 392 * Reset the transmit ring. If we were transmitting a frame, 394 * we pretend that the packetis processed. Higher layers will395 * retransmit if the packetwasn't actually sent.393 * we pretend that the frame is processed. Higher layers will 394 * retransmit if the frame wasn't actually sent. 396 395 */ 397 396 ne2k->sq.dirty = false; … … 403 402 * 404 403 * @param[in,out] ne2k Network interface structure. 405 * @param[in] packet Frame to be sent. 406 * 407 */ 408 void ne2k_send(nic_t *nic_data, packet_t *packet) 404 * @param[in] data Pointer to frame data 405 * @param[in] size Frame size in bytes 406 * 407 */ 408 void ne2k_send(nic_t *nic_data, void *data, size_t size) 409 409 { 410 410 ne2k_t *ne2k = (ne2k_t *) nic_get_specific(nic_data); … … 418 418 fibril_condvar_wait(&ne2k->sq_cv, &ne2k->sq_mutex); 419 419 } 420 void *buf = packet_get_data(packet);421 size_t size = packet_get_data_length(packet);422 420 423 421 if ((size < ETH_MIN_PACK_SIZE) || (size > ETH_MAX_PACK_SIZE_TAGGED)) { … … 427 425 428 426 /* Upload the frame to the ethernet card */ 429 ne2k_upload(ne2k, buf, ne2k->sq.page * DP_PAGE, size);427 ne2k_upload(ne2k, data, ne2k->sq.page * DP_PAGE, size); 430 428 ne2k->sq.dirty = true; 431 429 ne2k->sq.size = size; … … 437 435 pio_write_8(ne2k->port + DP_CR, CR_TXP | CR_STA); 438 436 fibril_mutex_unlock(&ne2k->sq_mutex); 439 440 /* Relase packet */441 nic_release_packet(nic_data, packet);442 437 } 443 438 … … 451 446 return NULL; 452 447 453 void *buf = packet_suffix(frame->packet, length); 454 bzero(buf, length); 448 bzero(frame->data, length); 455 449 uint8_t last = page + length / DP_PAGE; 456 450 … … 458 452 size_t left = (ne2k->stop_page - page) * DP_PAGE 459 453 - sizeof(recv_header_t); 460 ne2k_download(ne2k, buf, page * DP_PAGE + sizeof(recv_header_t),454 ne2k_download(ne2k, frame->data, page * DP_PAGE + sizeof(recv_header_t), 461 455 left); 462 ne2k_download(ne2k, buf+ left, ne2k->start_page * DP_PAGE,456 ne2k_download(ne2k, frame->data + left, ne2k->start_page * DP_PAGE, 463 457 length - left); 464 458 } else { 465 ne2k_download(ne2k, buf, page * DP_PAGE + sizeof(recv_header_t),459 ne2k_download(ne2k, frame->data, page * DP_PAGE + sizeof(recv_header_t), 466 460 length); 467 461 } … … 544 538 * Update the boundary pointer 545 539 * to the value of the page 546 * prior to the next packetto540 * prior to the next frame to 547 541 * be processed. 548 542 */ … … 587 581 fibril_mutex_lock(&ne2k->sq_mutex); 588 582 if (ne2k->sq.dirty) { 589 /* Prepare the buffer for next packet*/583 /* Prepare the buffer for next frame */ 590 584 ne2k->sq.dirty = false; 591 585 ne2k->sq.size = 0;
Note:
See TracChangeset
for help on using the changeset viewer.