[syslinux:lwip] core: pxe: Factor out pxe_poll from pxe_receive_thread

syslinux-bot for Eric W. Biederman ebiederm at xmission.com
Fri Apr 22 20:05:57 PDT 2011


Commit-ID:  d87ae0022e613ecee4f2627c949cd6f67c980ba7
Gitweb:     http://syslinux.zytor.com/commit/d87ae0022e613ecee4f2627c949cd6f67c980ba7
Author:     Eric W. Biederman <ebiederm at xmission.com>
AuthorDate: Sun, 10 Apr 2011 06:14:17 -0700
Committer:  Eric W. Biederman <ebiederm at xmission.com>
CommitDate: Tue, 12 Apr 2011 14:41:06 -0700

core: pxe: Factor out pxe_poll from pxe_receive_thread

Signed-off-by: Eric W. Biederman <ebiederm at xmission.com>


---
 core/fs/pxe/isr.c |   78 +++++++++++++++++++++++++++-------------------------
 core/fs/pxe/pxe.h |    1 +
 2 files changed, 41 insertions(+), 38 deletions(-)

diff --git a/core/fs/pxe/isr.c b/core/fs/pxe/isr.c
index a59b91a..4eac5aa 100644
--- a/core/fs/pxe/isr.c
+++ b/core/fs/pxe/isr.c
@@ -40,54 +40,56 @@ static void pm_return(void)
 
 void undiif_input(t_PXENV_UNDI_ISR *);
 
-static void pxe_receive_thread(void *dummy)
+void pxe_poll(void)
 {
     static __lowmem t_PXENV_UNDI_ISR isr;
-    uint16_t func;
-    bool done;
 
+    uint16_t func = PXENV_UNDI_ISR_IN_PROCESS; /* First time */	
+    bool done = false;
+
+    while (!done) {
+        memset(&isr, 0, sizeof isr);
+        isr.FuncFlag = func;
+        func = PXENV_UNDI_ISR_IN_GET_NEXT; /* Next time */
+    
+        pxe_call(PXENV_UNDI_ISR, &isr);
+    
+        switch (isr.FuncFlag) {
+        case PXENV_UNDI_ISR_OUT_DONE:
+    	done = true;
+    	break;
+    
+        case PXENV_UNDI_ISR_OUT_TRANSMIT:
+    	/* Transmit complete - nothing for us to do */
+    	break;
+    
+        case PXENV_UNDI_ISR_OUT_RECEIVE:
+    	undiif_input(&isr);
+    	break;
+    	
+        case PXENV_UNDI_ISR_OUT_BUSY:
+    	/* ISR busy, this should not happen */
+    	done = true;
+    	break;
+    	
+        default:
+    	/* Invalid return code, this should not happen */
+    	done = true;
+    	break;
+        }
+    }
+}
+
+static void pxe_receive_thread(void *dummy)
+{
     (void)dummy;
 
     for (;;) {
 	sem_down(&pxe_receive_thread_sem, 0);
-	func = PXENV_UNDI_ISR_IN_PROCESS; /* First time */
-
-	done = false;
-	while (!done) {
-	    memset(&isr, 0, sizeof isr);
-	    isr.FuncFlag = func;
-	    func = PXENV_UNDI_ISR_IN_GET_NEXT; /* Next time */
-
-	    pxe_call(PXENV_UNDI_ISR, &isr);
-
-	    switch (isr.FuncFlag) {
-	    case PXENV_UNDI_ISR_OUT_DONE:
-		done = true;
-		break;
-
-	    case PXENV_UNDI_ISR_OUT_TRANSMIT:
-		/* Transmit complete - nothing for us to do */
-		break;
-
-	    case PXENV_UNDI_ISR_OUT_RECEIVE:
-		undiif_input(&isr);
-		break;
-		
-	    case PXENV_UNDI_ISR_OUT_BUSY:
-		/* ISR busy, this should not happen */
-		done = true;
-		break;
-		
-	    default:
-		/* Invalid return code, this should not happen */
-		done = true;
-		break;
-	    }
-	}
+	pxe_poll();
     }
 }
 
-
 void pxe_init_isr(void)
 {
     start_idle_thread();
diff --git a/core/fs/pxe/pxe.h b/core/fs/pxe/pxe.h
index 274f1c9..dd1d31f 100644
--- a/core/fs/pxe/pxe.h
+++ b/core/fs/pxe/pxe.h
@@ -236,6 +236,7 @@ static inline uint32_t gateway(uint32_t ip)
 
 /* isr.c */
 void pxe_init_isr(void);
+void pxe_poll(void);
 
 /* pxe.c */
 bool ip_ok(uint32_t);



More information about the Syslinux-commits mailing list