Cleaned up the network and SCSI thread stuff.

This commit is contained in:
OBattler
2017-10-17 05:15:53 +02:00
parent 0d60ba731c
commit bfb0093b38
10 changed files with 97 additions and 137 deletions

View File

@@ -78,7 +78,7 @@ poll_thread(void *arg)
/* As long as the channel is open.. */
while (pcap != NULL) {
startnet();
network_mutex_wait(1);
network_wait_for_poll();
@@ -106,14 +106,12 @@ poll_thread(void *arg)
if (data == NULL)
thread_wait_event(evt, 10);
endnet();
network_mutex_wait(0);
}
thread_destroy_event(evt);
poll_tid = NULL;
network_mutex_close();
pclog("PCAP: polling stopped.\n");
}
@@ -273,8 +271,6 @@ network_pcap_close(void)
;
#endif
network_mutex_close();
/* OK, now shut down WinPcap itself. */
f_pcap_close(pc);
pc = pcap = NULL;
@@ -403,10 +399,10 @@ void
network_pcap_in(uint8_t *bufp, int len)
{
if (pcap != NULL) {
network_busy_set();
network_busy(1);
f_pcap_sendpacket(pcap, bufp, len);
network_busy_clear();
network_busy(0);
}
}

View File

@@ -80,7 +80,7 @@ poll_thread(void *arg)
evt = thread_create_event();
while (slirpq != NULL) {
startnet();
network_mutex_wait(1);
network_wait_for_poll();
@@ -107,14 +107,12 @@ poll_thread(void *arg)
/* Done with this one. */
free(qp);
endnet();
network_mutex_wait(0);
}
thread_destroy_event(evt);
evt = poll_tid = NULL;
network_mutex_close();
pclog("SLiRP: polling stopped.\n");
}
@@ -168,8 +166,6 @@ network_slirp_close(void)
;
#endif
network_mutex_close();
/* OK, now shut down SLiRP itself. */
QueueDestroy(sl);
slirp_exit(0);
@@ -201,11 +197,11 @@ void
network_slirp_in(uint8_t *pkt, int pkt_len)
{
if (slirpq != NULL) {
network_busy_set();
network_busy(1);
slirp_input((const uint8_t *)pkt, pkt_len);
network_busy_clear();
network_busy(0);
}
}

View File

@@ -54,31 +54,30 @@ int network_card;
netdev_t network_devs[32];
char network_pcap[512];
int nic_do_log;
static mutex_t *netMutex;
static volatile
mutex_t *netMutex;
static struct
{
int busy;
int queue_in_use;
volatile int
busy,
queue_in_use;
event_t *wake_poll_thread;
event_t *poll_complete;
event_t *queue_not_in_use;
volatile event_t
*wake_poll_thread,
*poll_complete,
*queue_not_in_use;
} poll_data;
void
startnet(void)
network_mutex_wait(uint8_t wait)
{
thread_wait_mutex(netMutex);
}
void
endnet(void)
{
thread_release_mutex(netMutex);
if (wait)
thread_wait_mutex((mutex_t *) netMutex);
else
thread_release_mutex((mutex_t *) netMutex);
}
@@ -86,46 +85,24 @@ void
network_wait_for_poll()
{
while (poll_data.busy)
thread_wait_event(poll_data.poll_complete, -1);
thread_reset_event(poll_data.poll_complete);
thread_wait_event((event_t *) poll_data.poll_complete, -1);
thread_reset_event((event_t *) poll_data.poll_complete);
}
void
network_mutex_init()
network_thread_init(void)
{
netMutex = thread_create_mutex(L"86Box.NetMutex");
}
void
network_mutex_close()
{
thread_close_mutex(netMutex);
}
void
network_thread_init()
{
network_mutex_init();
poll_data.wake_poll_thread = thread_create_event();
poll_data.poll_complete = thread_create_event();
}
void
network_busy_set()
network_busy(uint8_t set)
{
poll_data.busy = 1;
}
void
network_busy_clear()
{
poll_data.busy = 0;
thread_set_event(poll_data.poll_complete);
poll_data.busy = !!set;
if (!set)
thread_set_event((event_t *) poll_data.poll_complete);
}
@@ -184,6 +161,8 @@ network_attach(void *dev, uint8_t *mac, NETRXCB rx)
net_cards[network_card].priv = dev;
net_cards[network_card].rx = rx;
netMutex = thread_create_mutex(L"86Box.NetMutex");
/* Start the platform module. */
switch(network_type) {
case NET_TYPE_PCAP:
@@ -216,6 +195,8 @@ network_close(void)
network_slirp_close();
break;
}
thread_close_mutex((event_t *) netMutex);
}

View File

@@ -56,14 +56,12 @@ extern char network_pcap[512];
/* Function prototypes. */
extern void startnet(void);
extern void endnet(void);
extern void network_wait_for_poll();
extern void network_mutex_init();
extern void network_mutex_close();
extern void network_thread_init();
extern void network_busy_set();
extern void network_busy_clear();
extern void network_mutex_wait(uint8_t wait);
extern void network_wait_for_poll(void);
extern void network_mutex_init(void);
extern void network_mutex_close(void);
extern void network_thread_init(void);
extern void network_busy(uint8_t set);
extern void network_init(void);
extern int network_attach(void *, uint8_t *, NETRXCB);