rtems-spwtest-2boards.c
538 lines
| 18.2 KiB
| text/x-c
|
CLexer
/ src / rtems-spwtest-2boards.c
paul
|
r0 | /* Simple SpaceWire interface test for 2 boards. | ||
* When using two boards define MULTI_BOARD and | ||||
* one of TASK_RX or TASK_TX. | ||||
* | ||||
* The main SpaceWire example for oe board is rtems-spacewire. | ||||
* | ||||
* Gaisler Research 2007, | ||||
* Daniel Hellstr�m | ||||
* | ||||
*/ | ||||
////// | ||||
// PLE | ||||
#define PRINT_MESSAGES_ON_CONSOLE // enable or disable the printf instructions | ||||
#ifdef PRINT_MESSAGES_ON_CONSOLE | ||||
#define PRINTF(x) printf(x); | ||||
#define PRINTF1(x,y) printf(x,y); | ||||
#define PRINTF2(x,y,z) printf(x,y,z); | ||||
#else | ||||
#define PRINTF(x) | ||||
#define PRINTF1(x,y) | ||||
#define PRINTF2(x,y,z) | ||||
#endif | ||||
// | ||||
////// | ||||
#define CONFIGURE_INIT | ||||
#include <bsp.h> /* for device driver prototypes */ | ||||
rtems_task Init( rtems_task_argument argument); /* forward declaration needed */ | ||||
/* configuration information */ | ||||
#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER | ||||
#define CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER 1 | ||||
#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER | ||||
#define CONFIGURE_MAXIMUM_TASKS 8 | ||||
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE | ||||
#define CONFIGURE_EXTRA_TASK_STACKS (3 * RTEMS_MINIMUM_STACK_SIZE) | ||||
#define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS 32 | ||||
#define CONFIGURE_INIT_TASK_PRIORITY 100 | ||||
#define CONFIGURE_MAXIMUM_DRIVERS 16 | ||||
/* #define CONFIGURE_INIT_TASK_INITIAL_MODES (RTEMS_PREEMPT | \ */ | ||||
/* RTEMS_TIMESLICE | \ */ | ||||
/* RTEMS_ASR | \ */ | ||||
/* RTEMS_INTERRUPT_LEVEL(0)) */ | ||||
//#define RTEMS_PCI_CONFIG_LIB | ||||
//#define CONFIGURE_PCI_LIB PCI_LIB_AUTO | ||||
#include <rtems/confdefs.h> | ||||
/* Configure Driver manager */ | ||||
#if defined(RTEMS_DRVMGR_STARTUP) && defined(LEON3) /* if --drvmgr was given to configure */ | ||||
/* Add Timer and UART Driver for this example */ | ||||
#ifdef CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER | ||||
#define CONFIGURE_DRIVER_AMBAPP_GAISLER_GPTIMER | ||||
#endif | ||||
#ifdef CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER | ||||
#define CONFIGURE_DRIVER_AMBAPP_GAISLER_APBUART | ||||
#endif | ||||
#endif | ||||
//#define CONFIGURE_DRIVER_AMBAPP_GAISLER_PCIF /* PCI is for RASTA-IO and GR-701 GRSPW */ | ||||
//#define CONFIGURE_DRIVER_AMBAPP_GAISLER_GRPCI /* PCI is for RASTA-IO and GR-701 GRSPW */ | ||||
//#define CONFIGURE_DRIVER_AMBAPP_GAISLER_GRPCI2 /* PCI is for RASTA-IO and GR-701 GRSPW */ | ||||
//#define CONFIGURE_DRIVER_PCI_GR_RASTA_IO /* GR-RASTA-IO has three GRSPW SpaceWire cores */ | ||||
//#define CONFIGURE_DRIVER_PCI_GR_701 /* GR-701 has three GRSPW SpaceWire cores */ | ||||
#ifdef LEON2 | ||||
/* PCI support for AT697 */ | ||||
#define CONFIGURE_DRIVER_LEON2_AT697PCI | ||||
/* AMBA PnP Support for GRLIB-LEON2 */ | ||||
#define CONFIGURE_DRIVER_LEON2_AMBAPP | ||||
#endif | ||||
#define CONFIGURE_DRIVER_AMBAPP_GAISLER_GRSPW /* GRSPW Driver */ | ||||
#include <drvmgr/drvmgr_confdefs.h> | ||||
#include <rtems.h> | ||||
#include <errno.h> | ||||
#include <sys/types.h> | ||||
#include <sys/stat.h> | ||||
#include <fcntl.h> | ||||
#include <stdio.h> | ||||
#include <stdlib.h> | ||||
#undef ENABLE_NETWORK | ||||
/* Include driver configurations and system initialization */ | ||||
#include "config.c" | ||||
#include <grspw.h> | ||||
/* Select GRSPW core to be used in sample application. | ||||
* - /dev/grspw0 (First ON-CHIP core) | ||||
* - /dev/grspw1 (Second ON-CHIP core) | ||||
* - /dev/rastaio0/grspw0 (The GRSPW core on first GR-RASTA-IO board) | ||||
* - /dev/rastaio0/grspw1 (The second GRSPW core on first GR-RASTA-IO board) | ||||
* - /dev/gr701_0/grspw0 (The first GRSPW core on first GR-701 board) | ||||
* - /dev/gr701_1/grspw0 (The first GRSPW core on second GR-701 board) | ||||
*/ | ||||
#define GRSPW_DEVICE_NAME1 "/dev/grspw1" | ||||
#define GRSPW_DEVICE_NAME2 "/dev/grspw0" | ||||
rtems_task task1(rtems_task_argument argument); | ||||
rtems_task task2(rtems_task_argument argument); | ||||
void print_config(spw_config *cnf); | ||||
void print_statistics(spw_stats *stats); | ||||
void check_init_config(spw_config *cnf); | ||||
char *link_status(int status); | ||||
extern int errno; | ||||
char *lstates[6] = {"Error-reset", | ||||
"Error-wait", | ||||
"Ready", | ||||
"Started", | ||||
"Connecting", | ||||
"Run" | ||||
}; | ||||
rtems_id Task_id[3]; /* array of task ids */ | ||||
rtems_name Task_name[3]; /* array of task names */ | ||||
/* ========================================================= | ||||
initialisation */ | ||||
rtems_task Init( | ||||
rtems_task_argument ignored | ||||
) | ||||
{ | ||||
FILE *f; int fd; | ||||
rtems_status_code status; | ||||
printf("******** Starting RTEMS Spacewire test 2 ********\n"); | ||||
system_init(); | ||||
Task_name[1] = rtems_build_name( 'S', 'E', 'N', 'D' ); | ||||
Task_name[2] = rtems_build_name( 'R', 'E', 'C', 'V' ); | ||||
status = rtems_task_create( | ||||
Task_name[1], 1, RTEMS_MINIMUM_STACK_SIZE * 2, | ||||
RTEMS_DEFAULT_MODES, | ||||
RTEMS_DEFAULT_ATTRIBUTES, &Task_id[1] | ||||
); | ||||
status = rtems_task_create( | ||||
Task_name[2], 1, RTEMS_MINIMUM_STACK_SIZE * 2, | ||||
RTEMS_DEFAULT_MODES, | ||||
RTEMS_DEFAULT_ATTRIBUTES, &Task_id[2] | ||||
); | ||||
#ifdef TASK_TX | ||||
PRINTF("start TASK_TX\n") | ||||
status = rtems_task_start(Task_id[1], task1, 1); | ||||
#endif | ||||
#define TASK_RX | ||||
#ifdef TASK_RX | ||||
PRINTF("start TASK_RX\n") | ||||
status = rtems_task_start(Task_id[2], task2, 2); | ||||
#endif | ||||
status = rtems_task_delete(RTEMS_SELF); | ||||
} | ||||
unsigned int init1 = 0, init2 = 0; | ||||
static char tx_pkt[4096]; | ||||
static char tx_hpkt[256]; | ||||
#define NODE_ADR_TX 1 | ||||
#define NODE_ADR_RX 254 | ||||
#ifdef TASK_TX | ||||
/* ========================================================= | ||||
sender task */ | ||||
rtems_task task1( | ||||
rtems_task_argument unused | ||||
) | ||||
{ | ||||
rtems_status_code status; | ||||
rtems_event_set out; | ||||
int i; | ||||
int j; | ||||
int k; | ||||
int fd; | ||||
int lstatus; | ||||
int stat; | ||||
int ret; | ||||
spw_ioctl_pkt_send *pkt = (spw_ioctl_pkt_send *)malloc(sizeof(spw_ioctl_pkt_send)); | ||||
spw_stats *statistics = (spw_stats *)malloc(sizeof(spw_stats)); | ||||
spw_config *config = (spw_config *)malloc(sizeof(spw_config)); | ||||
spw_ioctl_packetsize *ps = (spw_ioctl_packetsize *)malloc(sizeof(spw_ioctl_packetsize)); | ||||
PRINTF("**** Transmit test task started ****\n") | ||||
printf("\n"); | ||||
printf("Opening " GRSPW_DEVICE_NAME1 ": "); | ||||
j=0; | ||||
fd = open(GRSPW_DEVICE_NAME1, O_RDWR); | ||||
if ( fd < 0 ){ | ||||
printf("Failed to open " GRSPW_DEVICE_NAME1 " (%d)\n",errno); | ||||
exit(0); | ||||
} | ||||
printf("opened successfully\n"); | ||||
printf("**** Checking initial configuration for " GRSPW_DEVICE_NAME1 " ****\n"); | ||||
printf("\n"); | ||||
if (ioctl(fd, SPACEWIRE_IOCTRL_GET_CONFIG, config) == -1) { | ||||
printf("ioctl failed: SPACEWIRE_IOCTRL_GET_CONFIG \n"); | ||||
exit(0); | ||||
} | ||||
print_config(config); | ||||
if (ioctl(fd, SPACEWIRE_IOCTRL_SET_NODEADDR, NODE_ADR_TX) == -1) { | ||||
printf("ioctl failed: SPACEWIRE_IOCTRL_SET_NODEADDR \n"); | ||||
exit(0); | ||||
} | ||||
if (ioctl(fd, SPACEWIRE_IOCTRL_GET_CONFIG, config) == -1) { | ||||
printf("ioctl failed: SPACEWIRE_IOCTRL_GET_CONFIG\n"); | ||||
exit(0); | ||||
} | ||||
if (ioctl(fd, SPACEWIRE_IOCTRL_SET_TXBLOCK, 1) == -1) { | ||||
printf("ioctl failed: SPACEWIRE_IOCTRL_SET_TXBLOCK\n"); | ||||
exit(0); | ||||
} | ||||
printf("Trying to bring link up\n"); | ||||
while(1){ | ||||
if (ioctl(fd, SPACEWIRE_IOCTRL_START, 0) == -1) { | ||||
sched_yield(); /*printf("ioctl failed: SPACEWIRE_IOCTRL_START\n");*/ | ||||
}else | ||||
break; | ||||
} | ||||
printf("Link is up\n"); | ||||
printf("Disabling transmitter and receiver\n"); | ||||
if ( ioctl(fd, SPACEWIRE_IOCTRL_STOP, 0) == -1 ){ | ||||
printf("ioctl failed: SPACEWIRE_IOCTRL_STOP (%d)\n",errno); | ||||
exit(0); | ||||
} | ||||
printf("Trying to bring link up again\n"); | ||||
while(1){ | ||||
if (ioctl(fd, SPACEWIRE_IOCTRL_START, 0) == -1) { | ||||
sched_yield(); /*printf("ioctl failed: SPACEWIRE_IOCTRL_START\n");*/ | ||||
}else | ||||
break; | ||||
} | ||||
printf("Link is up\n"); | ||||
if (ioctl(fd, SPACEWIRE_IOCTRL_SET_CLKDIV, 0) == -1) { | ||||
printf("ioctl failed: SPACEWIRE_IOCTRL_SET_CLKDIV\n"); | ||||
exit(0); | ||||
} | ||||
print_config(config); | ||||
if (ioctl(fd, SPACEWIRE_IOCTRL_GET_LINK_STATUS, &(lstatus)) == -1) { | ||||
printf("ioctl failed: SPACEWIRE_IOCTRL_GET_LINK_STATUS\n"); | ||||
exit(0); | ||||
} | ||||
printf("Spacewire link 1 is in %s state\n", link_status(lstatus)); | ||||
/* printf("Set link error event id and link error irq\n"); */ | ||||
/* printf("Task Id 2: %i \n", Task_id[1]); */ | ||||
/* ioctl(fd, SPACEWIRE_IOCTRL_SET_EVENT_ID, Task_id[1]); */ | ||||
/* ioctl(fd, SPACEWIRE_IOCTRL_SET_LINK_ERR_IRQ, 1); */ | ||||
/* rtems_event_receive(RTEMS_ALL_EVENTS, RTEMS_WAIT | RTEMS_EVENT_ANY, RTEMS_NO_TIMEOUT, &out); */ | ||||
/* printf("Got event 1\n"); */ | ||||
/* ioctl(fd, SPACEWIRE_IOCTRL_SET_DISABLE_ERR, 1); */ | ||||
/* rtems_event_receive(RTEMS_ALL_EVENTS, RTEMS_WAIT | RTEMS_EVENT_ANY, RTEMS_NO_TIMEOUT, &out); */ | ||||
/* printf("Got event 2\n"); */ | ||||
/* ioctl(fd, SPACEWIRE_IOCTRL_SET_LINK_ERR_IRQ, 0); */ | ||||
/* ioctl(fd, SPACEWIRE_IOCTRL_LINKSTART, 1); */ | ||||
/* printf("Link error test finished\n"); */ | ||||
/*config print finished, allow task 2 to print its config*/ | ||||
i=0; | ||||
while(1){ | ||||
printf("-------------- Sending Initiator ----------------\n"); | ||||
tx_pkt[0] = NODE_ADR_RX; | ||||
tx_pkt[1] = 'G'; | ||||
tx_pkt[2] = 'A'; | ||||
tx_pkt[3] = 'I'; | ||||
tx_pkt[4] = 'S'; | ||||
tx_pkt[5] = 'L'; | ||||
tx_pkt[6] = 'E'; | ||||
tx_pkt[7] = 'R'; | ||||
tx_pkt[8] = ' '; | ||||
tx_pkt[9] = 'S'; | ||||
tx_pkt[10] = 'P'; | ||||
tx_pkt[11] = 'W'; | ||||
tx_pkt[12] = '0'+i; | ||||
tx_pkt[13] = 0; | ||||
/* Send packet */ | ||||
if ( (ret=write(fd, tx_pkt, 14)) <= 0 ){ | ||||
printf("Write failed, errno: %d, ret: %d\n",errno,ret); | ||||
} | ||||
/* Sleep 5s */ | ||||
printf("Sleeping 1s\n"); | ||||
sleep(1); | ||||
i++; | ||||
if ( i>9 ) | ||||
i=0; | ||||
} | ||||
} | ||||
#endif | ||||
#ifdef TASK_RX | ||||
/* ========================================================= | ||||
receiver task */ | ||||
rtems_task task2( | ||||
rtems_task_argument unused | ||||
) | ||||
{ | ||||
rtems_status_code status; | ||||
spw_config *config; | ||||
spw_stats *statistics = (spw_stats *)malloc(sizeof(spw_stats)); | ||||
char *rx_pkt; | ||||
char *cx_pkt; | ||||
char *cx_hpkt; | ||||
int fd; | ||||
rtems_event_set event0, event1; | ||||
int len; | ||||
int i; | ||||
int j; | ||||
int k; | ||||
int st; | ||||
int lstatus; | ||||
int rd; | ||||
int tmp; | ||||
rx_pkt = (char *)malloc(4096); | ||||
cx_pkt = (char *)malloc(4096); | ||||
cx_hpkt = (char *)malloc(256); | ||||
config = (spw_config *)malloc(sizeof(spw_config)); | ||||
spw_ioctl_packetsize *ps = (spw_ioctl_packetsize *)malloc(sizeof(spw_ioctl_packetsize)); | ||||
PRINTF("**** Receive test task started ****\n") | ||||
j = 0; | ||||
errno =0 ; | ||||
PRINTF("Try to open "GRSPW_DEVICE_NAME2"\n") | ||||
// OPEN THE SPACEWIRE LINK | ||||
fd = open(GRSPW_DEVICE_NAME2, O_RDWR); | ||||
if (fd<0) exit(0); | ||||
// SPACEWIRE_IOCTRL_SET_RMAPEN | ||||
ioctl(fd, SPACEWIRE_IOCTRL_SET_RMAPEN, 1); | ||||
if (errno == RTEMS_IO_ERROR) exit(0); | ||||
// SPACEWIRE_IOCTRL_START | ||||
while(1) { | ||||
if (ioctl(fd, SPACEWIRE_IOCTRL_START, 0) == -1) { | ||||
PRINTF("ioctl failed: SPACEWIRE_IOCTRL_START\n") | ||||
sched_yield(); | ||||
} | ||||
else break; | ||||
} | ||||
PRINTF("Open "GRSPW_DEVICE_NAME2" successfully\n") | ||||
/* Make driver use the default timings as given by HW when reset */ | ||||
#if 0 | ||||
/* make driver calculate timings from system clock */ | ||||
if ( ioctl(fd,SPACEWIRE_IOCTRL_SET_COREFREQ,0) == -1 ){ | ||||
PRINTF("ioctl failed: SPACEWIRE_IOCTRL_SET_COREFREQ, errno: %d\n",errno) | ||||
exit(0); | ||||
} | ||||
/* make driver calculate timings from 40MHz spacewire clock */ | ||||
if ( ioctl(fd,SPACEWIRE_IOCTRL_SET_COREFREQ,40000) == -1 ){ | ||||
PRINTF("ioctl failed: SPACEWIRE_IOCTRL_SET_COREFREQ, errno: %d\n",errno) | ||||
exit(0); | ||||
} | ||||
#endif | ||||
if (ioctl(fd, SPACEWIRE_IOCTRL_GET_CONFIG, config) == -1) { | ||||
PRINTF("ioctl failed: SPACEWIRE_IOCTRL_GET_CONFIG\n") | ||||
exit(0); | ||||
} | ||||
PRINTF(" Checking initial configuration for Spacewire 2 ****\n") | ||||
print_config(config); | ||||
PRINTF("config checked\n") | ||||
if (ioctl(fd, SPACEWIRE_IOCTRL_SET_NODEADDR, NODE_ADR_RX) == -1) { | ||||
PRINTF("ioctl failed: SPACEWIRE_IOCTRL_SET_NODEADDR\n") | ||||
exit(0); | ||||
} | ||||
PRINTF("SPACEWIRE_IOCTRL_SET_NODEADDR\n") | ||||
if (ioctl(fd, SPACEWIRE_IOCTRL_SET_RXBLOCK, 1) == -1) { | ||||
PRINTF("ioctl failed: SPACEWIRE_IOCTRL_SET_RXBLOCK\n"); | ||||
exit(0); | ||||
} | ||||
PRINTF("SPACEWIRE_IOCTRL_SET_RXBLOCK\n") | ||||
PRINTF("Trying to bring link up\n") | ||||
PRINTF("Link is up, Changing speed\n") | ||||
if (ioctl(fd, SPACEWIRE_IOCTRL_SET_CLKDIV, 0) == -1) { | ||||
PRINTF("ioctl failed: SPACEWIRE_IOCTRL_SET_CLKDIV\n") | ||||
exit(0); | ||||
} | ||||
if (ioctl(fd, SPACEWIRE_IOCTRL_GET_CONFIG, config) == -1) { | ||||
PRINTF("ioctl failed: SPACEWIRE_IOCTRL_GET_CONFIG\n") | ||||
exit(0); | ||||
} | ||||
print_config(config); | ||||
if (ioctl(fd, SPACEWIRE_IOCTRL_GET_LINK_STATUS, &(lstatus)) == -1) { | ||||
PRINTF("ioctl failed: SPACEWIRE_IOCTRL_GET_LINK_STATUS\n") | ||||
exit(0); | ||||
} | ||||
PRINTF1("Spacewire link 2 is in %s state\n", link_status(lstatus)) | ||||
while(1){ | ||||
printf("-------------- Receiving Initiator ----------------\n"); | ||||
tmp = 500; | ||||
len = read(fd, rx_pkt, tmp); | ||||
if ( len <= 0 ){ | ||||
printf("Read Failed, errno: %d, ret: %d\n",errno,len); | ||||
sleep(1); | ||||
continue; | ||||
} | ||||
/* handle message */ | ||||
printf("Got Message of length %d, to address %d\n",len,rx_pkt[0]); | ||||
printf("Message data: [ 0x%x 0x%x ...] (%s)\n",rx_pkt[1],rx_pkt[2],&rx_pkt[0]); | ||||
} | ||||
close(fd); | ||||
} | ||||
#endif | ||||
/* ========================================================= | ||||
event task */ | ||||
void print_config(spw_config *cnf) | ||||
{ | ||||
printf("\n"); | ||||
printf(" ******** CONFIG ******** \n"); | ||||
printf("Node Address: %i\n", cnf->nodeaddr); | ||||
printf("Destination Key: %i\n", cnf->destkey); | ||||
printf("Clock Divider: %i\n", cnf->clkdiv); | ||||
printf("Rx Maximum Packet: %i\n", cnf->rxmaxlen); | ||||
printf("Timer: %i\n", cnf->timer); | ||||
printf("Linkdisabled: %i\n", cnf->linkdisabled); | ||||
printf("Linkstart: %i\n", cnf->linkstart); | ||||
printf("Disconnect: %i\n", cnf->disconnect); | ||||
printf("Promiscuous: %i\n", cnf->promiscuous); | ||||
printf("RMAP Enable: %i\n", cnf->rmapen); | ||||
printf("RMAP Buffer Disable: %i\n", cnf->rmapbufdis); | ||||
printf("Check Rmap Error: %i\n", cnf->check_rmap_err); | ||||
printf("Remove Protocol ID: %i\n", cnf->rm_prot_id); | ||||
printf("Blocking Transmit: %i\n", cnf->tx_blocking); | ||||
printf("Disable when Link Error: %i\n", cnf->disable_err); | ||||
printf("Link Error IRQ Enabled: %i\n", cnf->link_err_irq); | ||||
printf("Link Error Event Task ID: %i\n", cnf->event_id); | ||||
printf("RMAP Available: %i\n", cnf->is_rmap); | ||||
printf("RMAP CRC Available: %i\n", cnf->is_rmapcrc); | ||||
printf("Unaligned Receive Buffer Support: %i\n", cnf->is_rxunaligned); | ||||
printf("\n"); | ||||
} | ||||
void print_statistics(spw_stats *stats) | ||||
{ | ||||
printf("\n"); | ||||
printf(" ******** STATISTICS ******** \n"); | ||||
printf("Transmit link errors: %i\n", stats->tx_link_err); | ||||
printf("Receiver RMAP header CRC errors: %i\n", stats->rx_rmap_header_crc_err); | ||||
printf("Receiver RMAP data CRC errors: %i\n", stats->rx_rmap_data_crc_err); | ||||
printf("Receiver EEP errors: %i\n", stats->rx_eep_err); | ||||
printf("Receiver truncation errors: %i\n", stats->rx_truncated); | ||||
printf("Parity errors: %i\n", stats->parity_err); | ||||
printf("Escape errors: %i\n", stats->escape_err); | ||||
printf("Credit errors: %i\n", stats->credit_err); | ||||
printf("Disconnect errors: %i\n", stats->disconnect_err); | ||||
printf("Write synchronization errors: %i\n", stats->write_sync_err); | ||||
printf("Early EOP/EEP: %i\n", stats->early_ep); | ||||
printf("Invalid Node Address: %i\n", stats->invalid_address); | ||||
printf("Packets transmitted: %i\n", stats->packets_sent); | ||||
printf("Packets received: %i\n", stats->packets_received); | ||||
} | ||||
void check_init_config(spw_config *cnf) | ||||
{ | ||||
if (cnf->nodeaddr != 254) { | ||||
printf("Incorrect initial node address! Expected: %i Got: %i\n", 254, cnf->nodeaddr); | ||||
exit(0); | ||||
} | ||||
if (cnf->destkey != 0) { | ||||
printf("Incorrect initial destination key! Expected: %i Got: %i\n", 0, cnf->destkey); | ||||
exit(0); | ||||
} | ||||
if (cnf->rxmaxlen != 1024) { | ||||
printf("Incorrect initial Rx maximum packet length! Expected: %i Got: %i\n", 1024 , cnf->rxmaxlen); | ||||
exit(0); | ||||
} | ||||
if (cnf->linkdisabled != 0) { | ||||
printf("Incorrect initial linkdisabled value! Expected: %i Got: %i\n", 0, cnf->linkdisabled); | ||||
exit(0); | ||||
} | ||||
if (cnf->linkstart != 1) { | ||||
printf("Incorrect initial linkstart value! Expected: %i Got: %i\n", 1, cnf->linkstart); | ||||
exit(0); | ||||
} | ||||
if (cnf->promiscuous != 0) { | ||||
printf("Incorrect initial promiscuous mode value! Expected: %i Got: %i\n", 0, cnf->promiscuous); | ||||
exit(0); | ||||
} | ||||
if (cnf->check_rmap_err != 0) { | ||||
printf("Incorrect initial check rmap error value! Expected: %i Got: %i\n", 0, cnf->check_rmap_err); | ||||
exit(0); | ||||
} | ||||
if (cnf->rm_prot_id != 0) { | ||||
printf("Incorrect initial remove protocol id value! Expected: %i Got: %i\n", 0, cnf->rm_prot_id); | ||||
exit(0); | ||||
} | ||||
if (cnf->tx_blocking != 0) { | ||||
printf("Incorrect initial tx blocking! Expected: %i Got: %i\n", 0, cnf->tx_blocking); | ||||
exit(0); | ||||
} | ||||
if (cnf->disable_err != 0) { | ||||
printf("Incorrect initial disable when link error value! Expected: %i Got: %i\n", 0, cnf->disable_err); | ||||
exit(0); | ||||
} | ||||
if (cnf->link_err_irq != 0) { | ||||
printf("Incorrect initial link error enable value! Expected: %i Got: %i\n", 0, cnf->link_err_irq); | ||||
exit(0); | ||||
} | ||||
if (cnf->event_id != 0) { | ||||
printf("Incorrect initial event id! Expected: %i Got: %i\n", 0, cnf->event_id); | ||||
exit(0); | ||||
} | ||||
} | ||||
char *link_status(int status) | ||||
{ | ||||
return lstates[status]; | ||||
} | ||||