-const char trbnet_version[] = "$Revision: 4.23 $ Local";
+const char trbnet_version[] = "$Revision: 4.24 $ Local";
#include <stdlib.h>
#include <signal.h>
#define PCIBAR 0
static uint32_t dataBuffer[DMA_BUFFER_NUM_PAGES * 1024];
-static unsigned int dataBufferSize = 0;
+static unsigned int dataBufferSize = 0; /* Size of dataBuffer in BYTES */
static struct pexor_trbnet_io pexorDescriptor;
int dma_size = 0;
static uint16_t udpBuffer[750]; /* Maxminum is payload of one Ethernet-Frame */
static uint16_t dataBuffer[4096 * 1024];
-static unsigned int dataBufferSize = 0;
+static unsigned int dataBufferSize = 0; /* Size of dataBuffer in BYTES */
static int trb3_sockfd = -1;
static int trb3_sockfd_in = -1;
static uint16_t trb3_port = 25000;
: TRB_TRB3_SOCKET_ERROR;
return -1;
}
- dataBufferSize = status / 2;
+ dataBufferSize = status;
/* Adjust endianess ... */
if (trb_debug > 2) {
return status;
}
+
+static int sendTrbPackage_nowait(size_t size)
+{
+ int i;
+
+ /* Adjust endianess ... */
+ for (i = 0; i < size; i++) {
+ if (trb_debug > 2) {
+ if (i == 0) {
+ fprintf(stderr, "udp sent:\n");
+ }
+ fprintf(stderr, "%d 0x%04x\n", i, udpBuffer[i]);
+ }
+ udpBuffer[i] = htons(udpBuffer[i]);
+ }
+
+ if (send(trb3_sockfd, (void*)udpBuffer, size * 2, MSG_CONFIRM) == -1) {
+ trb_errno = TRB_TRB3_SOCKET_ERROR;
+ return -1;
+ }
+
+ return 0;
+}
#endif /* TRB3 */
/* ------ Internal Functions -------------------------------------------- */
unlockPorts(0);
return -1;
}
- dataBufferSize = status;
#else
unlockPorts(0);
return -1;
}
- dataBufferSize = status;
#else
/* Send command to pexor driver */
unlockPorts(0);
return -1;
}
- dataBufferSize = status;
#else
unlockPorts(0);
return -1;
}
- dataBufferSize = status;
#else
unlockPorts(0);
return -1;
}
- dataBufferSize = status;
#else
/* Send command to pexor driver */
#elif defined TRB3
- udpBuffer[0] = HEADER_HDR | 0x30;
- udpBuffer[1] = sender_address;
- udpBuffer[2] = trb_address;
- udpBuffer[3] = 0;
- udpBuffer[4] = CMD_REGISTER_WRITE_MEM;
+ udpBuffer[0] = HEADER_HDR | 0x30;
+ udpBuffer[1] = sender_address;
+ udpBuffer[2] = trb_address;
+ udpBuffer[3] = 0;
+ udpBuffer[4] = CMD_REGISTER_WRITE_MEM;
- udpBuffer[5] = HEADER_DAT | 0x30;
- if (option == 0) {
- udpBuffer[6] = reg_address + ctr;
- } else {
- udpBuffer[6] = reg_address;
- }
- udpBuffer[7] = config;
- udpBuffer[8] = 0;
- udpBuffer[9] = 0;
+ udpBuffer[5] = HEADER_DAT | 0x30;
+ if (option == 0) {
+ udpBuffer[6] = reg_address + ctr;
+ } else {
+ udpBuffer[6] = reg_address;
+ }
+ udpBuffer[7] = config;
+ udpBuffer[8] = 0;
+ udpBuffer[9] = 0;
- udpCtr = 10;
- for (i = 0; i < len; i++, ctr++) {
- udpBuffer[udpCtr++] = HEADER_DAT | 0x30;
- udpBuffer[udpCtr++] = 0x00000000;
- udpBuffer[udpCtr++] = (data[ctr] >> 16) & 0xffff;
- udpBuffer[udpCtr++] = data[ctr] & 0xffff;
- udpBuffer[udpCtr++] = 0x00000000;
- }
+ udpCtr = 10;
+ for (i = 0; i < len; i++, ctr++) {
+ udpBuffer[udpCtr++] = HEADER_DAT | 0x30;
+ udpBuffer[udpCtr++] = 0x00000000;
+ udpBuffer[udpCtr++] = (data[ctr] >> 16) & 0xffff;
+ udpBuffer[udpCtr++] = data[ctr] & 0xffff;
+ udpBuffer[udpCtr++] = 0x00000000;
+ }
- udpBuffer[udpCtr++] = HEADER_TRM | 0x30;
- udpBuffer[udpCtr++] = 0;
- udpBuffer[udpCtr++] = 0;
- udpBuffer[udpCtr++] = 0;
- udpBuffer[udpCtr++] = CMD_REGISTER_WRITE_MEM;
+ udpBuffer[udpCtr++] = HEADER_TRM | 0x30;
+ udpBuffer[udpCtr++] = 0;
+ udpBuffer[udpCtr++] = 0;
+ udpBuffer[udpCtr++] = 0;
+ udpBuffer[udpCtr++] = CMD_REGISTER_WRITE_MEM;
- status = sendTrbPackage(udpCtr);
+ status = sendTrbPackage(udpCtr);
- if (status < 0) {
- unlockPorts(0);
- return -1;
- }
- dataBufferSize = status;
+ if (status < 0) {
+ unlockPorts(0);
+ return -1;
+ }
#else
/* Send command to pexor driver */
if (write(pexorFileHandle,
- (void*)(data + ctr), len * 4) != len * 4) {
+ (void*)(data + ctr), len * 4) != len * 4) {
unlockPorts(0);
trb_errno = pexor_to_trb_error();
return -1;
unlockPorts(0);
return -1;
}
- dataBufferSize = status;
#else
/* Send command to pexor driver */
unlockPorts(0);
return -1;
}
- dataBufferSize = status;
#else
int network_reset()
{
- trb_errno = TRB_TRB3_CMD_NOT_SUPPORTED;
- return -1;
+ int status;
+
+ trb_errno = TRB_NONE;
+
+ if (lockPorts(0) == -1) return -1;
+
+ /* Init transfer */
+ if (trb_init_transfer(3) == -1) {
+ unlockPorts(0);
+ return -1;
+ }
+
+ /* DEBUG INFO */
+ if (trb_debug > 0) {
+ fprintf(stderr, "Init_Transfer done.\n");
+ }
+
+ udpBuffer[0] = HEADER_HDR | 0x8030;
+ udpBuffer[1] = sender_address;
+ udpBuffer[2] = 0x0000;
+ udpBuffer[3] = 0;
+ udpBuffer[4] = CMD_NETADMINISTRATION;
+
+ status = sendTrbPackage_nowait(5);
+
+ if (status < 0) {
+ unlockPorts(0);
+ return -1;
+ }
+
+ sleep(8);
+
+ return status;
}
int com_reset()