OpenCores
URL https://opencores.org/ocsvn/plasma/plasma/trunk

Subversion Repositories plasma

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /
    from Rev 295 to Rev 296
    Reverse comparison

Rev 295 → Rev 296

/trunk/kernel/tcpip.c
186,7 → 186,7
static uint32 ipAddressDns; //changed by DHCP
 
static OS_Mutex_t *IPMutex;
static int FrameFreeCount=FRAME_COUNT;
static int FrameFreeCount;
static IPFrame *FrameFreeHead;
static IPFrame *FrameSendHead;
static IPFrame *FrameSendTail;
211,7 → 211,7
0x01, 0x01, 0x06, 0x00, 0x69, 0x26, 0xb5, 0x52 //dhcp
};
 
static const unsigned char dhcpOptions[] = {
static unsigned char dhcpOptions[] = {
0x63, 0x82, 0x53, 0x63, //cookie
0x35, 0x01, 0x01, //DHCP Discover
0x3d, 0x07, 0x01, 0x00, 0x10, 0xdd, 0xce, 0x15, 0xd4, //Client identifier
234,10 → 234,12
state = OS_CriticalBegin();
if(FrameFreeCount > freeCount)
{
--FrameFreeCount;
frame = FrameFreeHead;
if(FrameFreeHead)
{
FrameFreeHead = FrameFreeHead->next;
--FrameFreeCount;
}
}
OS_CriticalEnd(state);
if(frame)
375,7 → 377,7
else
{
//Put on resend list until TCP ACK'ed
frame->timeout = RETRANSMIT_TIME;
frame->timeout = RETRANSMIT_TIME * frame->retryCnt;
FrameInsert(&FrameResendHead, &FrameResendTail, frame);
}
}
551,7 → 553,7
memcpy(packetOut+DHCP_MAGIC_COOKIE+10, ethernetAddressPlasma, 6);
IPSendPacket(NULL, frame, 400);
request = DHCP_DISCOVER;
DhcpRetrySeconds = RETRANSMIT_TIME;
DhcpRetrySeconds = 2;
}
else if(state == 2 && memcmp(packet+DHCP_CLIENT_ETHERNET, ethernetAddressPlasma, 6) == 0)
{
693,7 → 695,7
return 0;
memcpy(socketNew, socket, sizeof(IPSocket));
socketNew->state = IP_TCP;
socketNew->timeout = RETRANSMIT_TIME * 3;
socketNew->timeout = SOCKET_TIMEOUT;
socketNew->ack = seq;
socketNew->seq = socketNew->ack + 0x12345678;
socketNew->seqReceived = socketNew->seq;
1100,11 → 1102,15
 
 
//Set FrameSendFunction only if single threaded
void IPInit(IPFuncPtr frameSendFunction)
void IPInit(IPFuncPtr frameSendFunction, uint8 macAddress[6], char name[6])
{
int i;
IPFrame *frame;
 
if(macAddress)
memcpy(ethernetAddressPlasma, macAddress, 6);
if(name)
memcpy(dhcpOptions+18, name, 6);
FrameSendFunc = frameSendFunction;
IPMutex = OS_MutexCreate("IPSem");
IPMQueue = OS_MQueueCreate("IPMQ", FRAME_COUNT*2, 32);
1116,6 → 1122,7
frame->prev = NULL;
FrameFreeHead = frame;
}
FrameFreeCount = FRAME_COUNT;
UartPacketConfig(MyPacketGet, PACKET_SIZE, IPMQueue);
if(frameSendFunction == NULL)
IPThread = OS_ThreadCreate("TCP/IP", IPMainThread, NULL, 240, 6000);
1476,19 → 1483,23
{
IPFrame *frame, *frame2;
IPSocket *socket, *socket2;
unsigned long ticks;
static unsigned long ticksPrev=0, ticksPrev2=0;
 
if(IPVerbose && (Seconds % 60) == 0)
ticks = OS_ThreadTime();
if(ticks - ticksPrev >= 95)
{
if(FrameFreeCount == FRAME_COUNT)
printf("T");
else
printf("T(%d)", FrameFreeCount);
if(IPVerbose && (Seconds % 60) == 0)
{
if(FrameFreeCount >= FRAME_COUNT-1)
printf("T");
else
printf("T(%d)", FrameFreeCount);
}
++Seconds;
if(--DhcpRetrySeconds <= 0)
IPDhcp(NULL, 400, 1); //DHCP request
}
++Seconds;
if(--DhcpRetrySeconds <= 0)
IPDhcp(NULL, 400, 1); //DHCP request
//if(Seconds == 10)
// IPResolve("plasmacpu.no-ip.org", ShowIP);
 
OS_MutexPend(IPMutex);
 
1497,7 → 1508,8
{
frame2 = frame;
frame = frame->next;
if(--frame2->timeout == 0)
frame2->timeout -= ticks - ticksPrev2;
if(--frame2->timeout <= 0)
{
if(IPVerbose)
printf("r");
1506,26 → 1518,31
}
}
 
//Close timed out sockets
for(socket = SocketHead; socket; )
if(ticks - ticksPrev >= 95)
{
socket2 = socket;
socket = socket->next;
if(socket2->timeout && --socket2->timeout == 0)
//Close timed out sockets
for(socket = SocketHead; socket; )
{
socket2->timeout = 10;
if(IPVerbose && socket2->state != IP_CLOSED &&
socket2->state != IP_FIN_SERVER)
printf("t(%d,%d)", socket2->state, FrameFreeCount);
if(socket2->state == IP_TCP)
IPClose(socket2);
else if(socket2->state == IP_FIN_CLIENT)
IPClose(socket2);
else
IPClose2(socket2);
socket2 = socket;
socket = socket->next;
if(socket2->timeout && --socket2->timeout == 0)
{
socket2->timeout = 10;
if(IPVerbose && socket2->state != IP_CLOSED &&
socket2->state != IP_FIN_SERVER)
printf("t(%d,%d)", socket2->state, FrameFreeCount);
if(socket2->state == IP_TCP)
IPClose(socket2);
else if(socket2->state == IP_FIN_CLIENT)
IPClose(socket2);
else
IPClose2(socket2);
}
}
ticksPrev = ticks;
}
OS_MutexPost(IPMutex);
ticksPrev2 = ticks;
}
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.