Merge commit 'laptop/master'
authorMichael Brown <mcb30@etherboot.org>
Tue, 22 Jan 2008 18:57:01 +0000 (18:57 +0000)
committerMichael Brown <mcb30@etherboot.org>
Tue, 22 Jan 2008 18:57:01 +0000 (18:57 +0000)
src/core/xfer.c
src/include/gpxe/xfer.h
src/include/pxe.h
src/interface/pxe/pxe_preboot.c
src/interface/pxe/pxe_udp.c

index e850347..14c77d6 100644 (file)
@@ -402,10 +402,4 @@ struct xfer_interface_operations null_xfer_ops = {
  * connected when unplugged.  It will never generate messages, and
  * will silently absorb all received messages.
  */
-struct xfer_interface null_xfer = {
-       .intf = {
-               .dest = &null_xfer.intf,
-               .refcnt = NULL,
-       },
-       .op = &null_xfer_ops,
-};
+struct xfer_interface null_xfer = XFER_INIT ( &null_xfer_ops );
index c75fa00..9575bf6 100644 (file)
@@ -183,6 +183,19 @@ static inline void xfer_init ( struct xfer_interface *xfer,
        xfer->op = op;
 }
 
+/**
+ * Initialise a static data transfer interface
+ *
+ * @v operations               Data transfer interface operations
+ */
+#define XFER_INIT( operations ) {                      \
+               .intf = {                               \
+                       .dest = &null_xfer.intf,        \
+                       .refcnt = NULL,                 \
+               },                                      \
+               .op = operations,                       \
+       }
+
 /**
  * Get data transfer interface from generic object communication interface
  *
index ecb664d..f17d8f7 100644 (file)
@@ -144,4 +144,6 @@ extern struct net_device *pxe_netdev;
 
 extern void pxe_set_netdev ( struct net_device *netdev );
 
+extern void pxe_set_cached_filename ( const unsigned char *filename );
+
 #endif /* PXE_H */
index 6345149..53ece3c 100644 (file)
@@ -68,6 +68,24 @@ union pxe_cached_info {
 static union pxe_cached_info __bss16_array ( cached_info, [NUM_CACHED_INFOS] );
 #define cached_info __use_data16 ( cached_info )
 
+/**
+ * Set PXE cached TFTP filename
+ *
+ * @v filename         TFTP filename
+ *
+ * This is a bug-for-bug compatibility hack needed in order to work
+ * with Microsoft Remote Installation Services (RIS).  The filename
+ * used in a call to PXENV_RESTART_TFTP or PXENV_TFTP_READ_FILE must
+ * be returned as the DHCP filename in subsequent calls to
+ * PXENV_GET_CACHED_INFO.
+ */
+void pxe_set_cached_filename ( const unsigned char *filename ) {
+       memcpy ( cached_info[CACHED_INFO_DHCPACK].dhcphdr.file, filename,
+                sizeof ( cached_info[CACHED_INFO_DHCPACK].dhcphdr.file ) );
+       memcpy ( cached_info[CACHED_INFO_BINL].dhcphdr.file, filename,
+                sizeof ( cached_info[CACHED_INFO_BINL].dhcphdr.file ) );
+}
+
 /**
  * UNLOAD BASE CODE STACK
  *
@@ -196,18 +214,8 @@ PXENV_EXIT_t pxenv_restart_tftp ( struct s_PXENV_TFTP_READ_FILE
 
        DBG ( "PXENV_RESTART_TFTP " );
 
-       /* This is a bug-for-bug compatibility hack needed in order to
-        * work with Microsoft Remote Installation Services (RIS).
-        * The filename used in a call to PXENV_RESTART_TFTP must be
-        * returned as the DHCP filename in subsequent calls to
-        * PXENV_GET_CACHED_INFO.
-        */
-       memcpy ( cached_info[CACHED_INFO_DHCPACK].dhcphdr.file,
-                restart_tftp->FileName,
-                sizeof ( cached_info[CACHED_INFO_DHCPACK].dhcphdr.file ) );
-       memcpy ( cached_info[CACHED_INFO_BINL].dhcphdr.file,
-                restart_tftp->FileName,
-                sizeof ( cached_info[CACHED_INFO_BINL].dhcphdr.file ) );
+       /* Intel bug-for-bug hack */
+       pxe_set_cached_filename ( restart_tftp->FileName );
 
        /* Words cannot describe the complete mismatch between the PXE
         * specification and any possible version of reality...
index 0d6d1b7..40c2b2e 100644 (file)
@@ -111,13 +111,7 @@ static struct xfer_interface_operations pxe_udp_xfer_operations = {
 
 /** The PXE UDP connection */
 static struct pxe_udp_connection pxe_udp = {
-       .xfer = {
-               .intf = {
-                       .dest = &null_xfer.intf,
-                       .refcnt = NULL,
-               },
-               .op = &pxe_udp_xfer_operations,
-       },
+       .xfer = XFER_INIT ( &pxe_udp_xfer_operations ),
        .local = {
                .sin_family = AF_INET,
        },