And some fixes.

This commit is contained in:
OBattler
2022-02-20 19:41:34 +01:00
parent b18d7795f6
commit 9b09a5058c

View File

@@ -122,6 +122,7 @@ static uint8_t network_timer_active = 0;
static pc_timer_t network_rx_queue_timer; static pc_timer_t network_rx_queue_timer;
static netpkt_t *first_pkt[3] = { NULL, NULL, NULL }, static netpkt_t *first_pkt[3] = { NULL, NULL, NULL },
*last_pkt[3] = { NULL, NULL, NULL }; *last_pkt[3] = { NULL, NULL, NULL };
static netpkt_t *queued_pkt = NULL;
#ifdef ENABLE_NETWORK_LOG #ifdef ENABLE_NETWORK_LOG
@@ -310,32 +311,32 @@ static void
network_rx_queue(void *priv) network_rx_queue(void *priv)
{ {
int ret = 1; int ret = 1;
static netpkt_t *pkt = NULL; netpkt_t *tx_queued_pkt = NULL;
if (network_rx_pause || !thread_test_mutex(network_mutex)) { if (network_rx_pause || !thread_test_mutex(network_mutex)) {
timer_on_auto(&network_rx_queue_timer, 0.762939453125 * 2.0 * 128.0); timer_on_auto(&network_rx_queue_timer, 0.762939453125 * 2.0 * 128.0);
return; return;
} }
if (pkt == NULL) if (queued_pkt == NULL)
network_queue_get(0, &pkt); network_queue_get(0, &queued_pkt);
if ((pkt != NULL) && (pkt->len > 0)) { if ((queued_pkt != NULL) && (queued_pkt->len > 0)) {
network_dump_packet(pkt); network_dump_packet(queued_pkt);
ret = net_cards[network_card].rx(pkt->priv, pkt->data, pkt->len);5 ret = net_cards[network_card].rx(queued_pkt->priv, queued_pkt->data, queued_pkt->len);
if (pkt->len >= 128) if (queued_pkt->len >= 128)
timer_on_auto(&network_rx_queue_timer, 0.762939453125 * 2.0 * ((double) pkt->len)); timer_on_auto(&network_rx_queue_timer, 0.762939453125 * 2.0 * ((double) queued_pkt->len));
else else
timer_on_auto(&network_rx_queue_timer, 0.762939453125 * 2.0 * 128.0); timer_on_auto(&network_rx_queue_timer, 0.762939453125 * 2.0 * 128.0);
} else } else
timer_on_auto(&network_rx_queue_timer, 0.762939453125 * 2.0 * 128.0); timer_on_auto(&network_rx_queue_timer, 0.762939453125 * 2.0 * 128.0);
if (ret) if (ret)
pkt = NULL; queued_pkt = NULL;
network_queue_advance(0); network_queue_advance(0);
/* Transmission. */ /* Transmission. */
network_queue_get(2, &pkt); network_queue_get(2, &tx_queued_pkt);
if (pkt != NULL) { if (tx_queued_pkt != NULL) {
network_queue_put(1, pkt->priv, pkt->data, pkt->len); network_queue_put(1, tx_queued_pkt->priv, tx_queued_pkt->data, tx_queued_pkt->len);
network_queue_advance(2); network_queue_advance(2);
} }
@@ -377,6 +378,7 @@ network_attach(void *dev, uint8_t *mac, NETRXCB rx, NETWAITCB wait, NETSETLINKST
first_pkt[0] = first_pkt[1] = first_pkt[2] = NULL; first_pkt[0] = first_pkt[1] = first_pkt[2] = NULL;
last_pkt[0] = last_pkt[1] = last_pkt[2] = NULL; last_pkt[0] = last_pkt[1] = last_pkt[2] = NULL;
queued_pkt = NULL;
memset(&network_rx_queue_timer, 0x00, sizeof(pc_timer_t)); memset(&network_rx_queue_timer, 0x00, sizeof(pc_timer_t));
timer_add(&network_rx_queue_timer, network_rx_queue, NULL, 0); timer_add(&network_rx_queue_timer, network_rx_queue, NULL, 0);
/* 10 mbps. */ /* 10 mbps. */