And more network clean-ups and fixes.

This commit is contained in:
OBattler
2022-02-20 13:58:38 +01:00
parent 83f29f88cd
commit 01e0609ab6
4 changed files with 19 additions and 53 deletions

View File

@@ -105,7 +105,6 @@ extern netdev_t network_devs[32];
/* Function prototypes. */ /* Function prototypes. */
extern void network_wait(uint8_t wait); extern void network_wait(uint8_t wait);
extern void network_poll(void);
extern void network_busy(uint8_t set); extern void network_busy(uint8_t set);
extern void network_end(void); extern void network_end(void);
@@ -115,7 +114,6 @@ extern void network_close(void);
extern void network_reset(void); extern void network_reset(void);
extern int network_available(void); extern int network_available(void);
extern void network_tx(uint8_t *, int); extern void network_tx(uint8_t *, int);
extern void network_do_tx(void);
extern int network_tx_queue_check(void); extern int network_tx_queue_check(void);
extern int net_pcap_prepare(netdev_t *); extern int net_pcap_prepare(netdev_t *);

View File

@@ -180,11 +180,6 @@ poll_thread(void *arg)
/* Request ownership of the device. */ /* Request ownership of the device. */
network_wait(1); network_wait(1);
#if 0
/* Wait for a poll request. */
network_poll();
#endif
if (pcap == NULL) { if (pcap == NULL) {
network_wait(0); network_wait(0);
break; break;
@@ -211,12 +206,9 @@ poll_thread(void *arg)
} }
} }
/* Wait for the next packet to arrive. */ /* Wait for the next packet to arrive - network_do_tx() is called from there. */
tx = network_tx_queue_check(); tx = network_tx_queue_check();
if (tx)
network_do_tx();
/* Release ownership of the device. */ /* Release ownership of the device. */
network_wait(0); network_wait(0);

View File

@@ -362,11 +362,6 @@ poll_thread(void *arg)
/* Request ownership of the queue. */ /* Request ownership of the queue. */
network_wait(1); network_wait(1);
#if 0
/* Wait for a poll request. */
network_poll();
#endif
/* Stop processing if asked to. */ /* Stop processing if asked to. */
if (slirp->stop) { if (slirp->stop) {
network_wait(0); network_wait(0);
@@ -376,12 +371,9 @@ poll_thread(void *arg)
/* See if there is any work. */ /* See if there is any work. */
slirp_tic(slirp); slirp_tic(slirp);
/* Wait for the next packet to arrive. */ /* Wait for the next packet to arrive - network_do_tx() is called from there. */
tx = network_tx_queue_check(); tx = network_tx_queue_check();
if (tx)
network_do_tx();
/* Release ownership of the queue. */ /* Release ownership of the queue. */
network_wait(0); network_wait(0);

View File

@@ -120,8 +120,8 @@ static mutex_t *network_mutex;
static uint8_t *network_mac; static uint8_t *network_mac;
static uint8_t network_timer_active = 0; 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[2] = { NULL, NULL }, static netpkt_t *first_pkt[3] = { NULL, NULL, NULL },
*last_pkt[2] = { NULL, NULL }; *last_pkt[3] = { NULL, NULL, NULL };
static struct { static struct {
@@ -201,20 +201,6 @@ network_wait(uint8_t wait)
} }
void
network_poll(void)
{
network_wait(0);
while (poll_data.busy)
thread_wait_event(poll_data.wake_poll_thread, -1);
network_wait(1);
thread_reset_event(poll_data.wake_poll_thread);
}
void void
network_busy(uint8_t set) network_busy(uint8_t set)
{ {
@@ -359,7 +345,7 @@ network_rx_queue(void *priv)
return; return;
} }
network_busy(1); // network_busy(1);
network_queue_get(0, &pkt); network_queue_get(0, &pkt);
if ((pkt != NULL) && (pkt->len > 0)) { if ((pkt != NULL) && (pkt->len > 0)) {
@@ -374,7 +360,11 @@ network_rx_queue(void *priv)
if (ret) if (ret)
network_queue_advance(0); network_queue_advance(0);
network_busy(0); /* Transmission. */
network_queue_get(2, &pkt);
network_queue_put(1, pkt->priv, pkt->data, pkt->len);
// network_busy(0);
network_wait(0); network_wait(0);
} }
@@ -416,8 +406,8 @@ network_attach(void *dev, uint8_t *mac, NETRXCB rx, NETWAITCB wait, NETSETLINKST
break; break;
} }
first_pkt[0] = first_pkt[1] = NULL; first_pkt[0] = first_pkt[1] = first_pkt[2] = NULL;
last_pkt[0] = last_pkt[1] = NULL; last_pkt[0] = last_pkt[1] = last_pkt[2] = 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. */
@@ -555,7 +545,7 @@ network_tx(uint8_t *bufp, int len)
ui_sb_update_icon(SB_NETWORK, 1); ui_sb_update_icon(SB_NETWORK, 1);
network_queue_put(1, NULL, bufp, len); network_queue_put(2, NULL, bufp, len);
ui_sb_update_icon(SB_NETWORK, 0); ui_sb_update_icon(SB_NETWORK, 0);
@@ -564,13 +554,16 @@ network_tx(uint8_t *bufp, int len)
/* Actually transmit the packet. */ /* Actually transmit the packet. */
void int
network_do_tx(void) network_tx_queue_check(void)
{ {
netpkt_t *pkt = NULL; netpkt_t *pkt = NULL;
if ((first_pkt[1] == NULL) && (last_pkt[1] == NULL))
return 0;
if (network_tx_pause) if (network_tx_pause)
return; return 1;
network_queue_get(1, &pkt); network_queue_get(1, &pkt);
if ((pkt != NULL) && (pkt->len > 0)) { if ((pkt != NULL) && (pkt->len > 0)) {
@@ -586,15 +579,6 @@ network_do_tx(void)
} }
} }
network_queue_advance(1); network_queue_advance(1);
}
int
network_tx_queue_check(void)
{
if ((first_pkt[1] == NULL) && (last_pkt[1] == NULL))
return 0;
return 1; return 1;
} }