[syslinux:lwip] pxe: Move the gpxe url reading code into it's own file.

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


Commit-ID:  7a1d2e075ec8eef2aa311167101cc94c28f32b9d
Gitweb:     http://syslinux.zytor.com/commit/7a1d2e075ec8eef2aa311167101cc94c28f32b9d
Author:     Eric W. Biederman <ebiederm at xmission.com>
AuthorDate: Fri, 8 Apr 2011 03:01:26 -0700
Committer:  Eric W. Biederman <ebiederm at xmission.com>
CommitDate: Tue, 12 Apr 2011 14:40:51 -0700

pxe: Move the gpxe url reading code into it's own file.

Now that we have method pointers there is no longer any reason
to clutter up pxe.c with tftp specific details.

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


---
 core/fs/pxe/gpxeurl.c |   85 ++++++++++++++++++++++++++++++++++++++++++++++
 core/fs/pxe/pxe.c     |   89 -------------------------------------------------
 core/fs/pxe/pxe.h     |    4 ++
 3 files changed, 89 insertions(+), 89 deletions(-)

diff --git a/core/fs/pxe/gpxeurl.c b/core/fs/pxe/gpxeurl.c
new file mode 100644
index 0000000..1615281
--- /dev/null
+++ b/core/fs/pxe/gpxeurl.c
@@ -0,0 +1,85 @@
+#include "pxe.h"
+#if GPXE
+
+static void gpxe_close_file(struct inode *inode)
+{
+    struct pxe_pvt_inode *socket = PVT(inode);
+    static __lowmem struct s_PXENV_FILE_CLOSE file_close;
+
+    file_close.FileHandle = socket->tftp_remoteport;
+    pxe_call(PXENV_FILE_CLOSE, &file_close);
+}
+
+/**
+ * Get a fresh packet from a gPXE socket
+ * @param: inode -> Inode pointer
+ *
+ */
+static void gpxe_get_packet(struct inode *inode)
+{
+    struct pxe_pvt_inode *socket = PVT(inode);
+    static __lowmem struct s_PXENV_FILE_READ file_read;
+    int err;
+
+    while (1) {
+        file_read.FileHandle  = socket->tftp_remoteport;
+        file_read.Buffer      = FAR_PTR(packet_buf);
+        file_read.BufferSize  = PKTBUF_SIZE;
+        err = pxe_call(PXENV_FILE_READ, &file_read);
+        if (!err)  /* successed */
+            break;
+
+        if (file_read.Status != PXENV_STATUS_TFTP_OPEN)
+	    kaboom();
+    }
+
+    memcpy(socket->tftp_pktbuf, packet_buf, file_read.BufferSize);
+
+    socket->tftp_dataptr   = socket->tftp_pktbuf;
+    socket->tftp_bytesleft = file_read.BufferSize;
+    socket->tftp_filepos  += file_read.BufferSize;
+
+    if (socket->tftp_bytesleft == 0)
+        inode->size = socket->tftp_filepos;
+
+    /* if we're done here, close the file */
+    if (inode->size > socket->tftp_filepos)
+        return;
+
+    /* Got EOF, close it */
+    socket->tftp_goteof = 1;
+    gpxe_close_file(inode);
+}
+
+/**
+ * Open a url using gpxe
+ *
+ * @param:inode, the inode to store our state in
+ * @param:url, the url we want to open
+ *
+ * @out: open_file_t structure, stores in file->open_file
+ * @out: the lenght of this file, stores in file->file_len
+ *
+ */
+void gpxe_open(struct inode *inode, const char *url)
+{
+    static __lowmem struct s_PXENV_FILE_OPEN file_open;
+    static char lowurl[2*FILENAME_MAX];
+    struct pxe_pvt_inode *socket = PVT(inode);
+    int err;
+
+    snprintf(lowurl, sizeof lowurl, "%s", url);
+    file_open.Status        = PXENV_STATUS_BAD_FUNC;
+    file_open.FileName      = FAR_PTR(lowurl);
+    err = pxe_call(PXENV_FILE_OPEN, &file_open);
+    if (err)
+	return; 
+
+    socket->fill_buffer = gpxe_get_packet;
+    socket->close = gpxe_close_file;
+    socket->tftp_remoteport = file_open.FileHandle;
+    inode->size = -1; /* This is not an error */
+}
+
+#endif /* GPXE */
+
diff --git a/core/fs/pxe/pxe.c b/core/fs/pxe/pxe.c
index 18f6c0d..4bdd08a 100644
--- a/core/fs/pxe/pxe.c
+++ b/core/fs/pxe/pxe.c
@@ -7,8 +7,6 @@
 #include <sys/cpu.h>
 #include "pxe.h"
 
-#define GPXE 1
-
 static uint16_t real_base_mem;	   /* Amount of DOS memory after freeing */
 
 uint8_t MAC[MAC_MAX];		   /* Actual MAC address */
@@ -58,17 +56,6 @@ static void free_socket(struct inode *inode)
     free_inode(inode);
 }
 
-#if GPXE
-static void gpxe_close_file(struct inode *inode)
-{
-    struct pxe_pvt_inode *socket = PVT(inode);
-    static __lowmem struct s_PXENV_FILE_CLOSE file_close;
-
-    file_close.FileHandle = socket->tftp_remoteport;
-    pxe_call(PXENV_FILE_CLOSE, &file_close);
-}
-#endif
-
 static void pxe_close_file(struct file *file)
 {
     struct inode *inode = file->inode;
@@ -315,51 +302,6 @@ static enum pxe_path_type pxe_path_type(const char *str)
     }
 }
 
-#if GPXE
-
-/**
- * Get a fresh packet from a gPXE socket
- * @param: inode -> Inode pointer
- *
- */
-static void gpxe_get_packet(struct inode *inode)
-{
-    struct pxe_pvt_inode *socket = PVT(inode);
-    static __lowmem struct s_PXENV_FILE_READ file_read;
-    int err;
-
-    while (1) {
-        file_read.FileHandle  = socket->tftp_remoteport;
-        file_read.Buffer      = FAR_PTR(packet_buf);
-        file_read.BufferSize  = PKTBUF_SIZE;
-        err = pxe_call(PXENV_FILE_READ, &file_read);
-        if (!err)  /* successed */
-            break;
-
-        if (file_read.Status != PXENV_STATUS_TFTP_OPEN)
-	    kaboom();
-    }
-
-    memcpy(socket->tftp_pktbuf, packet_buf, file_read.BufferSize);
-
-    socket->tftp_dataptr   = socket->tftp_pktbuf;
-    socket->tftp_bytesleft = file_read.BufferSize;
-    socket->tftp_filepos  += file_read.BufferSize;
-
-    if (socket->tftp_bytesleft == 0)
-        inode->size = socket->tftp_filepos;
-
-    /* if we're done here, close the file */
-    if (inode->size > socket->tftp_filepos)
-        return;
-
-    /* Got EOF, close it */
-    socket->tftp_goteof = 1;
-    gpxe_close_file(inode);
-}
-#endif /* GPXE */
-
-
 /*
  * mangle a filename pointed to by _src_ into a buffer pointed
  * to by _dst_; ends on encountering any whitespace.
@@ -442,37 +384,6 @@ static uint32_t pxe_getfssec(struct file *file, char *buf,
     return bytes_read;
 }
 
-#if GPXE
-/**
- * Open a url using gpxe
- *
- * @param:inode, the inode to store our state in
- * @param:url, the url we want to open
- *
- * @out: open_file_t structure, stores in file->open_file
- * @out: the lenght of this file, stores in file->file_len
- *
- */
-static void gpxe_open(struct inode *inode, const char *url)
-{
-    static __lowmem struct s_PXENV_FILE_OPEN file_open;
-    static char lowurl[2*FILENAME_MAX];
-    struct pxe_pvt_inode *socket = PVT(inode);
-    int err;
-
-    snprintf(lowurl, sizeof lowurl, "%s", url);
-    file_open.Status        = PXENV_STATUS_BAD_FUNC;
-    file_open.FileName      = FAR_PTR(lowurl);
-    err = pxe_call(PXENV_FILE_OPEN, &file_open);
-    if (err)
-	return; 
-
-    socket->fill_buffer = gpxe_get_packet;
-    socket->close = gpxe_close_file;
-    socket->tftp_remoteport = file_open.FileHandle;
-    inode->size = -1; /* This is not an error */
-}
-#endif
 
 /**
  * Open the specified connection
diff --git a/core/fs/pxe/pxe.h b/core/fs/pxe/pxe.h
index eaadc63..60feedb 100644
--- a/core/fs/pxe/pxe.h
+++ b/core/fs/pxe/pxe.h
@@ -256,4 +256,8 @@ void free_port(uint16_t port);
 void tftp_open(struct inode *inode, uint32_t ip, uint16_t server_port,
 	       const char *filename);
 
+/* gpxeurl.c */
+void gpxe_open(struct inode *inode, const char *url);
+#define GPXE 1
+
 #endif /* pxe.h */



More information about the Syslinux-commits mailing list