Crash recovery changes.
This commit is contained in:
		
							parent
							
								
									ad1f30a63f
								
							
						
					
					
						commit
						589e147ee3
					
				@ -62,6 +62,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static dpeth_t de_table[DE_PORT_NR];
 | 
					static dpeth_t de_table[DE_PORT_NR];
 | 
				
			||||||
static u16_t eth_ign_proto;
 | 
					static u16_t eth_ign_proto;
 | 
				
			||||||
 | 
					static char *progname;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Configuration */
 | 
					/* Configuration */
 | 
				
			||||||
typedef struct dp_conf
 | 
					typedef struct dp_conf
 | 
				
			||||||
@ -111,6 +112,7 @@ _PROTOTYPE( static void do_vread, (message *mp, int vectored)		);
 | 
				
			|||||||
_PROTOTYPE( static void do_init, (message *mp)				);
 | 
					_PROTOTYPE( static void do_init, (message *mp)				);
 | 
				
			||||||
_PROTOTYPE( static void do_int, (dpeth_t *dep)				);
 | 
					_PROTOTYPE( static void do_int, (dpeth_t *dep)				);
 | 
				
			||||||
_PROTOTYPE( static void do_getstat, (message *mp)			);
 | 
					_PROTOTYPE( static void do_getstat, (message *mp)			);
 | 
				
			||||||
 | 
					_PROTOTYPE( static void do_getname, (message *mp)			);
 | 
				
			||||||
_PROTOTYPE( static void do_stop, (message *mp)				);
 | 
					_PROTOTYPE( static void do_stop, (message *mp)				);
 | 
				
			||||||
_PROTOTYPE( static void dp_init, (dpeth_t *dep)				);
 | 
					_PROTOTYPE( static void dp_init, (dpeth_t *dep)				);
 | 
				
			||||||
_PROTOTYPE( static void dp_confaddr, (dpeth_t *dep)			);
 | 
					_PROTOTYPE( static void dp_confaddr, (dpeth_t *dep)			);
 | 
				
			||||||
@ -169,10 +171,17 @@ _PROTOTYPE( static void do_vir_outsw, (port_t port, int proc,
 | 
				
			|||||||
int main(int argc, char *argv[])
 | 
					int main(int argc, char *argv[])
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	message m;
 | 
						message m;
 | 
				
			||||||
	int i, irq, r;
 | 
						int i, irq, r, tasknr;
 | 
				
			||||||
	dpeth_t *dep;
 | 
						dpeth_t *dep;
 | 
				
			||||||
	long v;
 | 
						long v;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (argc < 1)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							panic("DP8390",
 | 
				
			||||||
 | 
								"A head which at this time has no name", NO_NUM);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						(progname=strrchr(argv[0],'/')) ? progname++ : (progname=argv[0]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	env_setargs(argc, argv);
 | 
						env_setargs(argc, argv);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for (i= 0, dep= de_table; i<DE_PORT_NR; i++, dep++)
 | 
						for (i= 0, dep= de_table; i<DE_PORT_NR; i++, dep++)
 | 
				
			||||||
@ -185,6 +194,11 @@ int main(int argc, char *argv[])
 | 
				
			|||||||
	(void) env_parse("ETH_IGN_PROTO", "x", 0, &v, 0x0000L, 0xFFFFL);
 | 
						(void) env_parse("ETH_IGN_PROTO", "x", 0, &v, 0x0000L, 0xFFFFL);
 | 
				
			||||||
	eth_ign_proto= htons((u16_t) v);
 | 
						eth_ign_proto= htons((u16_t) v);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Try to notify inet that we are present (again) */
 | 
				
			||||||
 | 
						r = findproc("inet", &tasknr);
 | 
				
			||||||
 | 
						if (r == OK)
 | 
				
			||||||
 | 
							notify(tasknr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	while (TRUE)
 | 
						while (TRUE)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if ((r= receive(ANY, &m)) != OK)
 | 
							if ((r= receive(ANY, &m)) != OK)
 | 
				
			||||||
@ -199,6 +213,7 @@ int main(int argc, char *argv[])
 | 
				
			|||||||
		case DL_READV:	do_vread(&m, TRUE);		break;
 | 
							case DL_READV:	do_vread(&m, TRUE);		break;
 | 
				
			||||||
		case DL_INIT:	do_init(&m);			break;
 | 
							case DL_INIT:	do_init(&m);			break;
 | 
				
			||||||
		case DL_GETSTAT: do_getstat(&m);		break;
 | 
							case DL_GETSTAT: do_getstat(&m);		break;
 | 
				
			||||||
 | 
							case DL_GETNAME: do_getname(&m); 		break;
 | 
				
			||||||
		case DL_STOP:	do_stop(&m);			break;
 | 
							case DL_STOP:	do_stop(&m);			break;
 | 
				
			||||||
		case HARD_INT:
 | 
							case HARD_INT:
 | 
				
			||||||
			for (i= 0, dep= &de_table[0]; i<DE_PORT_NR; i++, dep++)
 | 
								for (i= 0, dep= &de_table[0]; i<DE_PORT_NR; i++, dep++)
 | 
				
			||||||
@ -644,6 +659,22 @@ message *mp;
 | 
				
			|||||||
	reply(dep, OK, FALSE);
 | 
						reply(dep, OK, FALSE);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*===========================================================================*
 | 
				
			||||||
 | 
					 *				do_getname				     *
 | 
				
			||||||
 | 
					 *===========================================================================*/
 | 
				
			||||||
 | 
					static void do_getname(mp)
 | 
				
			||||||
 | 
					message *mp;
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						int r;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						strncpy(mp->DL_NAME, progname, sizeof(mp->DL_NAME));
 | 
				
			||||||
 | 
						mp->DL_NAME[sizeof(mp->DL_NAME)-1]= '\0';
 | 
				
			||||||
 | 
						mp->m_type= DL_NAME_REPLY;
 | 
				
			||||||
 | 
						r= send(mp->m_source, mp);
 | 
				
			||||||
 | 
						if (r != OK)
 | 
				
			||||||
 | 
							panic("dp8390", "do_getname: send failed: %d\n", r);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*===========================================================================*
 | 
					/*===========================================================================*
 | 
				
			||||||
 *				do_stop					     *
 | 
					 *				do_stop					     *
 | 
				
			||||||
 *===========================================================================*/
 | 
					 *===========================================================================*/
 | 
				
			||||||
@ -1861,7 +1892,7 @@ void *loc_addr;
 | 
				
			|||||||
u8_t inb(port_t port)
 | 
					u8_t inb(port_t port)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int r;
 | 
						int r;
 | 
				
			||||||
	u8_t value;
 | 
						u32_t value;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	r= sys_inb(port, &value);
 | 
						r= sys_inb(port, &value);
 | 
				
			||||||
	if (r != OK)
 | 
						if (r != OK)
 | 
				
			||||||
 | 
				
			|||||||
@ -64,6 +64,7 @@
 | 
				
			|||||||
*/
 | 
					*/
 | 
				
			||||||
extern int errno;
 | 
					extern int errno;
 | 
				
			||||||
static dpeth_t de_table[DE_PORT_NR];
 | 
					static dpeth_t de_table[DE_PORT_NR];
 | 
				
			||||||
 | 
					static char *progname;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef struct dp_conf {	/* Configuration description structure */
 | 
					typedef struct dp_conf {	/* Configuration description structure */
 | 
				
			||||||
  port_t dpc_port;
 | 
					  port_t dpc_port;
 | 
				
			||||||
@ -87,6 +88,8 @@ static const char SizeErrMsg[] = "illegal packet size";
 | 
				
			|||||||
static const char TypeErrMsg[] = "illegal message type";
 | 
					static const char TypeErrMsg[] = "illegal message type";
 | 
				
			||||||
static const char DevName[] = "eth#?";
 | 
					static const char DevName[] = "eth#?";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void do_getname(message *mp);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
**  Name:	void reply(dpeth_t *dep, int err)
 | 
					**  Name:	void reply(dpeth_t *dep, int err)
 | 
				
			||||||
**  Function:	Fills a DL_TASK_REPLY reply message and sends it.
 | 
					**  Function:	Fills a DL_TASK_REPLY reply message and sends it.
 | 
				
			||||||
@ -502,6 +505,19 @@ static void do_getstat(message * mp)
 | 
				
			|||||||
  return;
 | 
					  return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void do_getname(mp)
 | 
				
			||||||
 | 
					message *mp;
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						int r;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						strncpy(mp->DL_NAME, progname, sizeof(mp->DL_NAME));
 | 
				
			||||||
 | 
						mp->DL_NAME[sizeof(mp->DL_NAME)-1]= '\0';
 | 
				
			||||||
 | 
						mp->m_type= DL_NAME_REPLY;
 | 
				
			||||||
 | 
						r= send(mp->m_source, mp);
 | 
				
			||||||
 | 
						if (r != OK)
 | 
				
			||||||
 | 
							panic("dpeth", "do_getname: send failed: %d\n", r);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
**  Name:	void do_stop(message *mp)
 | 
					**  Name:	void do_stop(message *mp)
 | 
				
			||||||
**  Function:	Stops network interface.
 | 
					**  Function:	Stops network interface.
 | 
				
			||||||
@ -541,7 +557,9 @@ PUBLIC int main(int argc, char **argv)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  message m;
 | 
					  message m;
 | 
				
			||||||
  dpeth_t *dep;
 | 
					  dpeth_t *dep;
 | 
				
			||||||
  int rc, fkeys, sfkeys;
 | 
					  int rc, fkeys, sfkeys, tasknr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  (progname=strrchr(argv[0],'/')) ? progname++ : (progname=argv[0]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  env_setargs(argc, argv);
 | 
					  env_setargs(argc, argv);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -560,6 +578,11 @@ PUBLIC int main(int argc, char **argv)
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /* Try to notify inet that we are present (again) */
 | 
				
			||||||
 | 
					  rc = findproc("inet", &tasknr);
 | 
				
			||||||
 | 
					  if (rc == OK)
 | 
				
			||||||
 | 
						notify(tasknr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  while (TRUE) {
 | 
					  while (TRUE) {
 | 
				
			||||||
	if ((rc = receive(ANY, &m)) != OK) panic(dep->de_name, RecvErrMsg, rc);
 | 
						if ((rc = receive(ANY, &m)) != OK) panic(dep->de_name, RecvErrMsg, rc);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -587,6 +610,9 @@ PUBLIC int main(int argc, char **argv)
 | 
				
			|||||||
	    case DL_GETSTAT:	/* Get device statistics */
 | 
						    case DL_GETSTAT:	/* Get device statistics */
 | 
				
			||||||
		do_getstat(&m);
 | 
							do_getstat(&m);
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
 | 
						    case DL_GETNAME:
 | 
				
			||||||
 | 
							do_getname(&m);
 | 
				
			||||||
 | 
							break;
 | 
				
			||||||
	    case SYN_ALARM:	/* to be defined */
 | 
						    case SYN_ALARM:	/* to be defined */
 | 
				
			||||||
		do_watchdog(&m);
 | 
							do_watchdog(&m);
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user