changeset 201:dd81b18e45fb

Merge from eCos master repository on 2002-01-04-06:43:04-GMT
author jlarmour
date Fri, 04 Jan 2002 14:13:51 +0000
parents 8147f1c99f15
children 353a011b23b8
files host/tools/configtool/ChangeLog host/tools/configtool/standalone/common/ChangeLog host/tools/configtool/standalone/common/cdl_exec.cxx host/tools/configtool/standalone/common/cdl_exec.hxx host/tools/configtool/standalone/common/ecosconfig.cxx host/tools/configtool/standalone/win32/Configtool.rc host/tools/configtool/standalone/win32/res/Splsh16.bmp host/tools/configtool/standalone/wxwin/README.txt host/tools/configtool/standalone/wxwin/about.htm host/tools/configtool/standalone/wxwin/bitmaps/splash16.bmp host/tools/configtool/standalone/wxwin/bitmaps/splash16.png host/tools/configtool/standalone/wxwin/ecoslogosmall.png host/tools/configtool/standalone/wxwin/reposdlg.cpp host/tools/configtool/standalone/wxwin/setup/configtool.iss host/tools/configtool/standalone/wxwin/setup/innobott.txt host/tools/configtool/standalone/wxwin/setup/innotop.txt packages/ChangeLog packages/NEWS packages/devs/eth/arm/iq80310/current/ChangeLog packages/devs/eth/arm/iq80310/current/cdl/iq80310_eth_drivers.cdl packages/devs/eth/arm/iq80310/current/include/devs_eth_iq80310.inl packages/devs/eth/arm/iq80310/current/include/iq80310_info.h packages/devs/eth/arm/iq80310/current/src/if_iq80310.c packages/devs/eth/arm/iq80310/current/src/if_shmem.S packages/devs/eth/intel/i82559/current/ChangeLog packages/devs/eth/intel/i82559/current/cdl/intel_i82559_eth_drivers.cdl packages/devs/eth/intel/i82559/current/src/if_i82559.c packages/devs/flash/amd/am29xxxxx/current/ChangeLog packages/devs/flash/amd/am29xxxxx/current/cdl/flash_amd_am29xxxxx.cdl packages/devs/flash/amd/am29xxxxx/current/include/flash_am29xxxxx.inl packages/devs/flash/amd/am29xxxxx/current/include/flash_am29xxxxx_parts.inl packages/devs/flash/sh/cq7750/current/ChangeLog packages/devs/flash/sh/cq7750/current/cdl/flash_cq7750.cdl packages/devs/flash/sh/cq7750/current/src/cq7750_flash.c packages/ecos.db packages/hal/arm/iq80310/current/ChangeLog packages/hal/arm/iq80310/current/include/hal_platform_setup.h packages/hal/arm/iq80310/current/include/plf_io.h packages/hal/arm/iq80310/current/misc/redboot_RAM.ecm packages/hal/arm/iq80310/current/misc/redboot_RAMA.ecm packages/hal/arm/iq80310/current/misc/redboot_ROM.ecm packages/hal/arm/iq80310/current/misc/redboot_ROMA.ecm packages/io/fileio/current/ChangeLog packages/io/fileio/current/src/io.cxx packages/io/fileio/current/src/socket.cxx packages/redboot/current/ChangeLog packages/redboot/current/src/xyzModem.c
diffstat 47 files changed, 708 insertions(+), 3647 deletions(-) [+]
line wrap: on
line diff
--- a/host/tools/configtool/ChangeLog
+++ b/host/tools/configtool/ChangeLog
@@ -1,3 +1,22 @@
+2002-01-02  Julian Smart <julians@redhat.com>
+
+    * Modified these files:
+
+      host/tools/configtool/standalone/win32/Configtool.rc
+      host/tools/configtool/standalone/win32/res/Splsh16.bmp 
+      host/tools/configtool/standalone/win32/res/Splsh16_template.bmp 
+      host/tools/configtool/standalone/wxwin/README.txt 
+      host/tools/configtool/standalone/wxwin/about.htm 
+      host/tools/configtool/standalone/wxwin/ecoslogosmall.png 
+      host/tools/configtool/standalone/wxwin/reposdlg.cpp 
+      host/tools/configtool/standalone/wxwin/bitmaps/splash16.bmp 
+      host/tools/configtool/standalone/wxwin/bitmaps/splash16.png 
+      host/tools/configtool/standalone/wxwin/setup/configtool.iss 
+      host/tools/configtool/standalone/wxwin/setup/innobott.txt 
+      host/tools/configtool/standalone/wxwin/setup/innotop.txt 
+
+      incrementing the copyright year to 2002.
+
 2001-12-03  Julian Smart <julians@redhat.com>
 
     * standalone/wxwin/templatesdlg.cpp: hardware is now sorted alphabetically
--- a/host/tools/configtool/standalone/common/ChangeLog
+++ b/host/tools/configtool/standalone/common/ChangeLog
@@ -1,3 +1,10 @@
+2001-12-29  Bart Veer  <bartv@redhat.com>
+
+	* ecosconfig.cxx, cdl_exec.cxx, cdl_exec.hxx
+	Add new option -n to suppress modifications to the file system,
+	especially ecos.ecc. Suggested by Patrick Doyle
+	(wpd@delcomsys.com)
+
 2001-12-06  Bart Veer  <bartv@redhat.com>
 
 	* cdl_exec.cxx (report_conflicts):
--- a/host/tools/configtool/standalone/common/cdl_exec.cxx
+++ b/host/tools/configtool/standalone/common/cdl_exec.cxx
@@ -54,6 +54,7 @@
 bool cdl_exec::quiet            = false;
 bool cdl_exec::verbose          = false;
 bool cdl_exec::ignore_errors    = false;
+bool cdl_exec::no_updates       = false;
 
 cdl_exec::cdl_exec (const std::string repository_arg, const std::string savefile_arg,
                     const std::string install_arg, bool no_resolve_arg)
@@ -98,6 +99,12 @@ cdl_exec::set_ignore_errors_mode(bool ne
     ignore_errors = new_val;
 }
 
+void
+cdl_exec::set_no_updates_mode(bool new_val)
+{
+    no_updates = new_val;
+}
+
 // ----------------------------------------------------------------------------
 void
 cdl_exec::init(bool load_config)
@@ -156,11 +163,13 @@ bool cdl_exec::cmd_new (const std::strin
 
         // Now report any conflicts which the inference engine could not report. 
         report_conflicts();
-        
+
         // A savefile should be generated/updated even if there are conflicts.
         // Otherwise the user does not have a chance to edit the savefile
         // and fix things.
-        config->save (savefile);
+        if (!no_updates) {
+            config->save (savefile);
+        }
         if (ignore_errors || (0 == config->get_all_conflicts().size())) {
             status = true;
         }
@@ -187,7 +196,9 @@ cdl_exec::cmd_target (const std::string 
             config->resolve_all_conflicts();
         }
         report_conflicts();
-        config->save (savefile);
+        if (!no_updates) {
+            config->save (savefile);
+        }
         if (ignore_errors || (0 == config->get_all_conflicts().size())) {
             status = true;
         }
@@ -214,7 +225,9 @@ cdl_exec::cmd_template (const std::strin
             config->resolve_all_conflicts();
         }
         report_conflicts();
-        config->save (savefile);
+        if (!no_updates) {
+            config->save (savefile);
+        }
         if (ignore_errors || (0 == config->get_all_conflicts().size())) {
             status = true;
         }
@@ -244,7 +257,9 @@ cdl_exec::cmd_export (const std::string 
         // configuration is conflict-free. This is different from
         // updating the savefile.
         if (ignore_errors || (0 == config->get_all_conflicts().size())) {
-            config->save (cdl_savefile, /* minimal = */ true);
+            if (!no_updates) {
+                config->save (cdl_savefile, /* minimal = */ true);
+            }
             status = true;
         }
     } catch (CdlStringException exception) {
@@ -270,7 +285,9 @@ cdl_exec::cmd_import (const std::string 
             config->resolve_all_conflicts();
         }
         report_conflicts();
-        config->save (savefile);
+        if (!no_updates) {
+            config->save (savefile);
+        }
         if (ignore_errors || (0 == config->get_all_conflicts().size())) {
             status = true;
         }
@@ -299,7 +316,9 @@ cdl_exec::cmd_add (const std::vector<std
             config->resolve_all_conflicts();
         }
         report_conflicts();
-        config->save (savefile);
+        if (!no_updates) {
+            config->save (savefile);
+        }
         if (ignore_errors || (0 == config->get_all_conflicts().size())) {
             status = true;
         }
@@ -334,7 +353,9 @@ cdl_exec::cmd_remove (const std::vector<
             config->resolve_all_conflicts();
         }
         report_conflicts();
-        config->save (savefile);
+        if (!no_updates) {
+            config->save (savefile);
+        }
         if (ignore_errors || (0 == config->get_all_conflicts().size())) {
             status = true;
         }
@@ -364,7 +385,9 @@ cdl_exec::cmd_version (const std::string
             config->resolve_all_conflicts();
         }
         report_conflicts();
-        config->save (savefile);
+        if (!no_updates) {
+            config->save (savefile);
+        }
         if (ignore_errors || (0 == config->get_all_conflicts().size())) {
             status = true;
         }
@@ -390,9 +413,15 @@ cdl_exec::cmd_tree ()
             config->resolve_all_conflicts();
         }
         report_conflicts();
-        config->save (savefile);
-        // A build tree should only be generated if there are no conflicts.
-        if (ignore_errors || (0 == config->get_all_conflicts().size())) {
+        if (!no_updates) {
+            config->save (savefile);
+        }
+        // A build tree should only be generated if there are no conflicts,
+        // and suppressed if -n is given.
+        if (no_updates) {
+            // Do nothing
+        }
+        else if (ignore_errors || (0 == config->get_all_conflicts().size())) {
 #ifdef _MSC_VER
             char cwd [_MAX_PATH + 1];
 #else
@@ -527,7 +556,9 @@ cdl_exec::cmd_check ()
         // change.
         // However, updating the savefile is worthwhile because it
         // will now contain more accurate information about the state.
-        config->save (savefile);
+        if (!no_updates) {
+            config->save (savefile);
+        }
 
         // report current target and template
         printf ("Target: %s\n", config->get_hardware ().c_str ());
@@ -615,7 +646,9 @@ cdl_exec::cmd_resolve ()
         CdlTransactionBody::set_callback_fn(&transaction_callback);
         config->resolve_all_conflicts ();
         report_conflicts();
-        config->save (savefile);
+        if (!no_updates) {
+            config->save (savefile);
+        }
         if (ignore_errors || (0 == config->get_all_conflicts().size())) {
             status = true;
         }
--- a/host/tools/configtool/standalone/common/cdl_exec.hxx
+++ b/host/tools/configtool/standalone/common/cdl_exec.hxx
@@ -1,7 +1,7 @@
 //####COPYRIGHTBEGIN####
 //                                                                          
 // ----------------------------------------------------------------------------
-// Copyright (C) 1998, 1999, 2000 Red Hat, Inc.
+// Copyright (C) 1998, 1999, 2000, 2001 Red Hat, Inc.
 //
 // This program is part of the eCos host tools.
 //
@@ -43,11 +43,13 @@ public:
     static void set_quiet_mode(bool);
     static void set_verbose_mode(bool);
     static void set_ignore_errors_mode(bool);
+    static void set_no_updates_mode(bool);
     
 protected:
     static bool quiet;
     static bool verbose;
     static bool ignore_errors;
+    static bool no_updates;
     std::string repository;
     std::string savefile;
     std::string install_prefix;
--- a/host/tools/configtool/standalone/common/ecosconfig.cxx
+++ b/host/tools/configtool/standalone/common/ecosconfig.cxx
@@ -1,7 +1,7 @@
 //####COPYRIGHTBEGIN####
 //                                                                          
 // ----------------------------------------------------------------------------
-// Copyright (C) 1998, 1999, 2000, 2001 Red Hat, Inc.
+// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
 //
 // This program is part of the eCos host tools.
 //
@@ -50,7 +50,7 @@
 #include "ecosconfig.hxx"
 
 #define TOOL_VERSION "1.3.net"
-#define TOOL_COPYRIGHT "Copyright (c) 2001 Red Hat, Inc."
+#define TOOL_COPYRIGHT "Copyright (c) 2002 Red Hat, Inc."
 #define DEFAULT_SAVE_FILE "ecos.ecc"
 static char* tool = "ecosconfig";
 
@@ -89,6 +89,7 @@ int main (int argc, char * argv []) {
     bool quiet = false;         // -q, --quiet
     bool verbose = false;       // -v, --verbose
     bool ignore_errors = false; // -i, --ignore-errors
+    bool no_updates = false;    // -n, --no-updates,
     bool help = false;          // --help
         
     // getopt() cannot easily be used here since this code has to
@@ -110,6 +111,8 @@ int main (int argc, char * argv []) {
         } else if ((0 == strcmp(arg, "-i")) || (0 == strcmp(arg, "--ignore-errors"))) {
             // Duplicate use of -i and the other flags is harmless.
             ignore_errors = true;
+        } else if ((0 == strcmp(arg, "-n")) || (0 == strcmp(arg, "--no-updates"))) {
+            no_updates = true;
         } else if (0 == strcmp(arg, "--version")) {
             version = true;
         } else if (0 == strcmp(arg, "--no-resolve")) {
@@ -206,6 +209,7 @@ int main (int argc, char * argv []) {
     printf("no_resolve is %d\n", no_resolve);
     printf("quiet is %d\n", quiet);
     printf("verbose is %d\n", verbose);
+    printf("no-updates is %d\n", no_updates);
     printf("ignore_errors is %d\n", ignore_errors);
     printf("repository is %s\n", repository.c_str());
     printf("savefile is %s\n", savefile.c_str());
@@ -275,6 +279,7 @@ int main (int argc, char * argv []) {
     cdl_exec::set_quiet_mode(quiet);
     cdl_exec::set_verbose_mode(verbose);
     cdl_exec::set_ignore_errors_mode(ignore_errors);
+    cdl_exec::set_no_updates_mode(no_updates);
     
     // Now identify and process the sub-command.
     const std::string command = argv [command_index];
@@ -442,5 +447,6 @@ void usage_message () {
     printf ("    -q, --quiet                                : reduce verbosity\n");    
     printf ("    -v, --verbose                              : increase verbosity\n");    
     printf ("    -i, --ignore-errors                        : ignore unresolved conflicts\n");
+    printf ("    -n, --no-updates                           : read-only mode, do not modify the file system\n");
     printf ("    --help                                     : display this message\n");
 }
--- a/host/tools/configtool/standalone/win32/Configtool.rc
+++ b/host/tools/configtool/standalone/win32/Configtool.rc
@@ -78,7 +78,7 @@ END
 // Menu
 //
 
-IDR_MAINFRAME MENU DISCARDABLE 
+IDR_MAINFRAME MENU DISCARDABLE
 BEGIN
     POPUP "&File"
     BEGIN
@@ -168,7 +168,7 @@ BEGIN
     END
 END
 
-IDR_OUTPUT_CONTEXT MENU DISCARDABLE 
+IDR_OUTPUT_CONTEXT MENU DISCARDABLE
 BEGIN
     POPUP "Popup"
     BEGIN
@@ -196,7 +196,7 @@ BEGIN
                     SS_NOPREFIX
     ICON            IDR_MAINFRAME,IDC_STATIC,11,17,21,20
     LTEXT           "Date/Time info",IDC_STATIC_DATETIME,40,23,119,8
-    LTEXT           "Copyright © 1998-2001 Red Hat, Inc.",IDC_STATIC,40,36,
+    LTEXT           "Copyright © 1998-2002 Red Hat, Inc.",IDC_STATIC,40,36,
                     170,8
     CONTROL         "",IDC_STATIC,"Static",SS_GRAYFRAME,8,57,201,133,
                     WS_EX_DLGMODALFRAME | WS_EX_TRANSPARENT
@@ -226,7 +226,7 @@ BEGIN
                     "Button",BS_AUTORADIOBUTTON,15,100,204,10
     CONTROL         "This &browser:",IDC_RADIO_CUSTOM_BROWSER,"Button",
                     BS_AUTORADIOBUTTON,15,114,58,10
-    EDITTEXT        IDC_EDIT_BROWSER,15,132,205,14,ES_AUTOHSCROLL | 
+    EDITTEXT        IDC_EDIT_BROWSER,15,132,205,14,ES_AUTOHSCROLL |
                     WS_DISABLED
     PUSHBUTTON      "Br&owse...",IDC_BROWSE_BROWSER,170,112,50,14,
                     WS_DISABLED | WS_GROUP
@@ -237,13 +237,13 @@ BEGIN
     CONTROL         "Use descriptive &names",IDC_RADIO_DESCRIPTIVE_NAMES,
                     "Button",BS_AUTORADIOBUTTON,102,183,87,10
     GROUPBOX        "Integer items",IDC_STATIC,16,202,201,26
-    CONTROL         "&Decimal",IDC_RADIO_DECIMAL,"Button",BS_AUTORADIOBUTTON | 
+    CONTROL         "&Decimal",IDC_RADIO_DECIMAL,"Button",BS_AUTORADIOBUTTON |
                     WS_GROUP,25,213,41,10
     CONTROL         "He&xadecimal",IDC_RADIO_HEXADECIMAL,"Button",
                     BS_AUTORADIOBUTTON,102,213,57,10
     GROUPBOX        "Font",IDC_STATIC,7,244,220,31
     LTEXT           "&Window:",IDC_STATIC,18,257,29,8
-    COMBOBOX        IDC_PANECOMBO,49,255,79,67,CBS_DROPDOWNLIST | WS_VSCROLL | 
+    COMBOBOX        IDC_PANECOMBO,49,255,79,67,CBS_DROPDOWNLIST | WS_VSCROLL |
                     WS_TABSTOP
     PUSHBUTTON      "Change &Font...",IDC_FONT,165,254,52,14
     PUSHBUTTON      "OK",IDOK,121,281,50,14
@@ -256,7 +256,7 @@ CAPTION "Header Files"
 FONT 8, "MS Sans Serif"
 BEGIN
     DEFPUSHBUTTON   "&Close",IDOK,221,7,50,14
-    LISTBOX         IDC_LIST,7,29,264,112,LBS_SORT | LBS_NOINTEGRALHEIGHT | 
+    LISTBOX         IDC_LIST,7,29,264,112,LBS_SORT | LBS_NOINTEGRALHEIGHT |
                     WS_VSCROLL | WS_HSCROLL | WS_TABSTOP
     LTEXT           "Double-click any item below to edit the file",
                     IDC_HEADERSTATIC,7,13,133,8
@@ -271,7 +271,7 @@ BEGIN
     PUSHBUTTON      "Cancel",IDCANCEL,214,25,50,14
     PUSHBUTTON      "&Browse...",IDC_FOLDER_DIALOG_BROWSE,214,43,50,14
     LTEXT           "Static",IDC_STATIC_DESC,8,7,196,46
-    COMBOBOX        IDC_FOLDER,6,61,258,57,CBS_DROPDOWN | CBS_AUTOHSCROLL | 
+    COMBOBOX        IDC_FOLDER,6,61,258,57,CBS_DROPDOWN | CBS_AUTOHSCROLL |
                     CBS_SORT | WS_VSCROLL | WS_TABSTOP
 END
 
@@ -288,7 +288,7 @@ BEGIN
     CONTROL         "Use &descriptive names",IDC_RADIO_DESCRIPTIVE_NAMES,
                     "Button",BS_AUTORADIOBUTTON,142,44,87,10
     GROUPBOX        "Integer items",IDC_STATIC,7,65,228,31
-    CONTROL         "D&ecimal",IDC_RADIO_DECIMAL,"Button",BS_AUTORADIOBUTTON | 
+    CONTROL         "D&ecimal",IDC_RADIO_DECIMAL,"Button",BS_AUTORADIOBUTTON |
                     WS_GROUP,19,79,41,10
     CONTROL         "He&xadecimal",IDC_RADIO_HEXADECIMAL,"Button",
                     BS_AUTORADIOBUTTON,142,79,57,10
@@ -302,7 +302,7 @@ END
 // Accelerator
 //
 
-IDR_MAINFRAME ACCELERATORS MOVEABLE PURE 
+IDR_MAINFRAME ACCELERATORS MOVEABLE PURE
 BEGIN
     "1",            ID_VIEW_PROPERTIES,     VIRTKEY, ALT, NOINVERT
     "2",            ID_VIEW_CONFLICTS,      VIRTKEY, ALT, NOINVERT
@@ -312,7 +312,7 @@ BEGIN
     "F",            ID_EDIT_FIND,           VIRTKEY, CONTROL, NOINVERT
     "N",            ID_FILE_NEW,            VIRTKEY, CONTROL, NOINVERT
     "O",            ID_FILE_OPEN,           VIRTKEY, CONTROL, NOINVERT
-    "P",            ID_ENABLE_EXTENSIONS,   VIRTKEY, SHIFT, CONTROL, ALT, 
+    "P",            ID_ENABLE_EXTENSIONS,   VIRTKEY, SHIFT, CONTROL, ALT,
                                                     NOINVERT
     "S",            ID_FILE_SAVE,           VIRTKEY, CONTROL, NOINVERT
     VK_F3,          ID_EDIT_FINDAGAIN,      VIRTKEY, NOINVERT
@@ -379,7 +379,7 @@ END
 //
 
 #ifdef APSTUDIO_INVOKED
-GUIDELINES DESIGNINFO DISCARDABLE 
+GUIDELINES DESIGNINFO DISCARDABLE
 BEGIN
     IDD_ABOUTBOX, DIALOG
     BEGIN
@@ -411,12 +411,12 @@ END
 // TEXTINCLUDE
 //
 
-1 TEXTINCLUDE DISCARDABLE 
+1 TEXTINCLUDE DISCARDABLE
 BEGIN
     "CTres.h\0"
 END
 
-3 TEXTINCLUDE DISCARDABLE 
+3 TEXTINCLUDE DISCARDABLE
 BEGIN
     "#define _AFX_NO_SPLITTER_RESOURCES\r\n"
     "#define _AFX_NO_OLE_RESOURCES\r\n"
@@ -436,7 +436,7 @@ BEGIN
     "#endif\0"
 END
 
-2 TEXTINCLUDE DISCARDABLE 
+2 TEXTINCLUDE DISCARDABLE
 BEGIN
     "#include ""afxres.h""\r\n"
     "#include ""CTCommonres.h""\r\n"
@@ -452,15 +452,15 @@ END
 // String Table
 //
 
-STRINGTABLE DISCARDABLE 
+STRINGTABLE DISCARDABLE
 BEGIN
     AFX_IDS_APP_TITLE       "Configuration Tool"
     AFX_IDS_IDLEMESSAGE     "Ready"
 END
 
-STRINGTABLE DISCARDABLE 
+STRINGTABLE DISCARDABLE
 BEGIN
-    IDC_RADIO_INTERNAL_BROWSER 
+    IDC_RADIO_INTERNAL_BROWSER
                             "Select the internal HTML help mechanism to display HTML-based help."
     IDC_PANECOMBO           "Selects a window for which the font is to be changed."
     IDC_FONT                "Changes the font of the chosen window."
@@ -471,7 +471,7 @@ BEGIN
     IDS_ECOS_PR_URL         "http://www.cygnus.com/ecos/ecos-pr.html"
 END
 
-STRINGTABLE DISCARDABLE 
+STRINGTABLE DISCARDABLE
 BEGIN
     ID_THERMOMETER          "."
     ID_RUN_SIM              "Runs the configuration tests\nRun Tests"
@@ -483,14 +483,14 @@ BEGIN
     ID_VIEW_OUTPUT          "Activates the output window\nOutput window"
 END
 
-STRINGTABLE DISCARDABLE 
+STRINGTABLE DISCARDABLE
 BEGIN
     ID_BUILD_STOP           "Stops the build\nStop Build"
     ID_CONFIGURATION_OPTIONS "Changes configuration options\nChange options"
     ID_BUILD_TESTS          "Builds the configuration tests\nBuild tests"
-    ID_CONFIGURATION_CHECKRULES 
+    ID_CONFIGURATION_CHECKRULES
                             "Checks rules immediately\nCheck option dependency rules immediately options are changed "
-    ID_CONFIGURATION_REFRESH 
+    ID_CONFIGURATION_REFRESH
                             "Reloads configuration settings from header files\nReload configuration"
     ID_CONFIGURATION_REPOSITORY "Selects repository\nSelect repository"
     ID_VIEW_SETTINGS        "Enables you to change settings\nChange settings"
@@ -505,10 +505,10 @@ BEGIN
     ID_GNUPRO_DOCUMENTATION "Opens the GNUPro documentation page\nGNUPro Documentation"
 END
 
-STRINGTABLE DISCARDABLE 
+STRINGTABLE DISCARDABLE
 BEGIN
     ID_HELP_SUBMIT_PR       "Opens a page to submit an eCos problem report\nSubmit Problem Report"
-    ID_HELP_GNUPRO_DOCUMENTATION 
+    ID_HELP_GNUPRO_DOCUMENTATION
                             "Opens the GNUPro documentation page\nGNUPro Documentation Page"
     ID_HELP_ECOS            "Opens the eCos net release page\neCos Net Release Page"
     ID_HELP_UITRON          "Opens the µITRON specification page\nµITRON Specification"
@@ -525,18 +525,18 @@ BEGIN
     ID_VIEW_CONFLICTS       "Activates the conflicts window\nConflicts window"
 END
 
-STRINGTABLE DISCARDABLE 
+STRINGTABLE DISCARDABLE
 BEGIN
     IDC_BROWSE_BROWSER      "Browses for a browser to be used to display HTML-based help."
     IDC_RADIO_ASSOCIATED    "Select the default viewer to display header files."
     IDC_RADIO_CUSTOM        "Select a viewer of your choice to display header files."
-    IDC_RADIO_ASSOCIATED_BROWSER 
+    IDC_RADIO_ASSOCIATED_BROWSER
                             "Select the default browser to display HTML-based help."
-    IDC_RADIO_CUSTOM_BROWSER 
+    IDC_RADIO_CUSTOM_BROWSER
                             "Select a browser of your choice to display HTML-based help."
 END
 
-STRINGTABLE DISCARDABLE 
+STRINGTABLE DISCARDABLE
 BEGIN
     ID_INDICATOR_EXT        "EXT"
     ID_INDICATOR_CAPS       "CAP"
@@ -546,7 +546,7 @@ BEGIN
     ID_INDICATOR_REC        "REC"
 END
 
-STRINGTABLE DISCARDABLE 
+STRINGTABLE DISCARDABLE
 BEGIN
     ID_FILE_NEW             "Creates a new document\nNew"
     ID_FILE_OPEN            "Opens an existing document\nOpen"
@@ -559,14 +559,14 @@ BEGIN
     ID_FILE_PRINT_PREVIEW   "Displays full pages\nPrint Preview"
 END
 
-STRINGTABLE DISCARDABLE 
+STRINGTABLE DISCARDABLE
 BEGIN
     ID_APP_ABOUT            "Displays program information, version number and copyright\nAbout"
     ID_APP_EXIT             "Quits the application; prompts to save documents\nExit"
     ID_HELP                 "Displays help\nHelp"
 END
 
-STRINGTABLE DISCARDABLE 
+STRINGTABLE DISCARDABLE
 BEGIN
     ID_FILE_MRU_FILE1       "Opens this document"
     ID_FILE_MRU_FILE2       "Opens this document"
@@ -586,12 +586,12 @@ BEGIN
     ID_FILE_MRU_FILE16      "Opens this document"
 END
 
-STRINGTABLE DISCARDABLE 
+STRINGTABLE DISCARDABLE
 BEGIN
     ID_WINDOW_SPLIT         "Splits the active window into panes\nSplit"
 END
 
-STRINGTABLE DISCARDABLE 
+STRINGTABLE DISCARDABLE
 BEGIN
     ID_EDIT_CLEAR           "Clears the output pane\nClear"
     ID_EDIT_CLEAR_ALL       "Erases everything in the output pane\nErase All"
@@ -606,18 +606,18 @@ BEGIN
     ID_EDIT_REDO            "Redoes the previously undone action\nRedo"
 END
 
-STRINGTABLE DISCARDABLE 
+STRINGTABLE DISCARDABLE
 BEGIN
     ID_VIEW_TOOLBAR         "Shows or hides the standard toolbar\nToggle Standard ToolBar"
     ID_VIEW_STATUS_BAR      "Shows or hide the status bar\nToggle StatusBar"
 END
 
-STRINGTABLE DISCARDABLE 
+STRINGTABLE DISCARDABLE
 BEGIN
     IDS_REGKEY              "Red Hat\\eCos"
 END
 
-STRINGTABLE DISCARDABLE 
+STRINGTABLE DISCARDABLE
 BEGIN
     ID_POPUP_PROPERTIES     "Displays the properties of the selected item"
     ID_EDIT_NEW_REGION      "Add a new memory region\nNew Region"
@@ -626,7 +626,7 @@ BEGIN
     ID_EDIT_PROPERTIES      "Show the properties of a memory region or section\nProperties"
 END
 
-STRINGTABLE DISCARDABLE 
+STRINGTABLE DISCARDABLE
 BEGIN
     ID_VIEW_MLTBAR          "Shows or hides the memory layout toolbar\nToggle Memory Layout ToolBar"
     ID_TOOLS_ADMINISTRATION "Performs Repository Administration Tasks\nAdminister repository"
@@ -635,7 +635,7 @@ BEGIN
     ID_EDIT_PLATFORMS       "Edits the platform list\nEdit Platforms"
 END
 
-STRINGTABLE DISCARDABLE 
+STRINGTABLE DISCARDABLE
 BEGIN
     IDC_EDIT                "Specify the viewer executable to be used to display header files."
     IDC_EDIT_BROWSER        "Specify the browser executable to be used to display header files."
@@ -643,7 +643,7 @@ BEGIN
     IDC_BROWSE              "Browses for a viewer to be used to display header files."
 END
 
-STRINGTABLE DISCARDABLE 
+STRINGTABLE DISCARDABLE
 BEGIN
     ID_RESOLVE_CONFLICTS    "Resolves conflicts\nResolve conflicts"
 END
index b19abe7a371af445f54e8fdf3df6d493136e8017..4a9b0492d1b20f27bd5d2228cc02a518de447e2f
GIT binary patch
literal 166438
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
IK@dCt4<BtVg#Z8m
--- a/host/tools/configtool/standalone/wxwin/README.txt
+++ b/host/tools/configtool/standalone/wxwin/README.txt
@@ -1,5 +1,5 @@
 eCos Cross-platform Configuration Tool
-Copyright (c) Red Hat Inc., 2001
+Copyright (c) Red Hat Inc., 2001-2002
 ======================================
 
 Version 2
--- a/host/tools/configtool/standalone/wxwin/about.htm
+++ b/host/tools/configtool/standalone/wxwin/about.htm
@@ -18,7 +18,7 @@
   <font size=+0 color="#FFFFFF">
   <b>eCos Configuration Tool Version $VERSION$</b><BR>
   $DATE$<BR>
-  Copyright (c) 1998-2001<br>
+  Copyright (c) 1998-2002<br>
   Red Hat, Inc.
   </font>
   </center>
@@ -36,7 +36,7 @@
 
   <td bgcolor="#FFFFFF" align=center valign=center colspan=3>
   <b>The eCos engineering team is:</b>
-  </td> 
+  </td>
   </tr>
 
   <tr>
@@ -46,7 +46,7 @@
 Paul Beskeen<BR>
 John Dallaway<BR>
 Robert Erksine<BR>
-Simon FitzMaurice<BR>
+Simon Fitzmaurice<BR>
 Mark Galassi<BR>
 Nick Garnett<BR>
 Tim Goodwin<BR>
@@ -58,7 +58,7 @@ Drew Moseley<BR>
 </P>
   </font>
   </td>
-  
+
 <td valign=center align=center>
 <IMG src="memory:ecoslogosmall.png" align=center>
 </td>
@@ -81,7 +81,7 @@ Bart Veer
 </P>
   </font>
   </td>
-  </tr>  
+  </tr>
   </table>
 </td>
 </tr>
index 72bba6b3ddb10501f03d5844aebc2eca9d3b474d..0d26f338448b69422e39b3be8bb34970464ce3c1
GIT binary patch
literal 82798
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
B&WZp4
index 7351f93a5be6debeb0c3cac487e32ffe300cdca1..745f00291613e75e32527414770c181c24e7cadf
GIT binary patch
literal 4556
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
S^5HW8{gu9sv33pG75gvhW&O?o
index 1432646221a9cefe2983517893b205c447b4a3f0..02a1533a579f7a251f8f55760160661a47cf37c9
GIT binary patch
literal 2443
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
F`!9kXR9651
--- a/host/tools/configtool/standalone/wxwin/reposdlg.cpp
+++ b/host/tools/configtool/standalone/wxwin/reposdlg.cpp
@@ -30,7 +30,7 @@
 // Author(s):   julians
 // Contact(s):  julians
 // Date:        2000/09/11
-// Version:     $Id: reposdlg.cpp,v 1.4 2001/03/19 14:53:41 julians Exp $
+// Version:     $Id: reposdlg.cpp,v 1.5 2002/01/02 14:28:55 julians Exp $
 // Purpose:
 // Description: Implementation file for ecRepositoryInfoDialog
 // Requires:
@@ -149,20 +149,14 @@ bool ecRepositoryInfoDialog::CreateHtmlI
 {
     ecConfigToolDoc* doc = wxGetApp().GetConfigToolDoc();
 
-    wxString ecosLogo(wxT("ecoslogosmall.png"));
-    wxSetWorkingDirectory(wxGetApp().GetAppDir());
-
     info += wxT("<html><head><title>Repository Information</title>\n");
     info += wxT("<body bgcolor=\"#FFFFE1\">\n");
 
     info += wxT("<table width=\"100%\">");
     info += wxT("<tr><td>\n");
-    if (wxFileExists(ecosLogo))
-    {
-        wxString s;
-        s.Printf(wxT("<img src=\"%s\" align=right border=0><p>"), ecosLogo.c_str());
-        info += s;
-    }
+    wxString s;
+    s.Printf(wxT("<img src=\"memory:ecoslogosmall.png\" align=right vspace=8 border=0><p>"));
+    info += s;
     info += wxT("</td><td>\n");
     info += wxT("<font size=+2><b>Repository Information</b></font>\n");
 
--- a/host/tools/configtool/standalone/wxwin/setup/configtool.iss
+++ b/host/tools/configtool/standalone/wxwin/setup/configtool.iss
@@ -11,7 +11,7 @@
     UsePreviousGroup=1
     AppVersion=2.09
     AppVerName=eCos Configuration Tool 2.09
-    AppCopyright=Copyright © Red Hat Inc., 2001
+    AppCopyright=Copyright © Red Hat Inc., 2001-2002
     BackColor=$FF0000
     BackColor2=$000000
     BackColorDirection=toptobottom
@@ -218,5 +218,5 @@
 ;AddVerTo=AppVerName
 ;SetupFilename=setup.exe
 ;OutputFolder=v:\setup
-;CopyrightText=Copyright © Red Hat Inc., 2001
+;CopyrightText=Copyright © Red Hat Inc., 2001-2002
 
--- a/host/tools/configtool/standalone/wxwin/setup/innobott.txt
+++ b/host/tools/configtool/standalone/wxwin/setup/innobott.txt
@@ -35,5 +35,5 @@
 ;AddVerTo=AppVerName
 ;SetupFilename=setup.exe
 ;OutputFolder=v:\setup
-;CopyrightText=Copyright © Red Hat Inc., 2001
+;CopyrightText=Copyright © Red Hat Inc., 2001-2002
 
--- a/host/tools/configtool/standalone/wxwin/setup/innotop.txt
+++ b/host/tools/configtool/standalone/wxwin/setup/innotop.txt
@@ -11,7 +11,7 @@
     UsePreviousGroup=1
     AppVersion=%VERSION%
     AppVerName=eCos Configuration Tool %VERSION%
-    AppCopyright=Copyright © Red Hat Inc., 2001
+    AppCopyright=Copyright © Red Hat Inc., 2001-2002
     BackColor=$FF0000
     BackColor2=$000000
     BackColorDirection=toptobottom
--- a/packages/ChangeLog
+++ b/packages/ChangeLog
@@ -1,3 +1,11 @@
+2002-01-03  Mark Salter  <msalter@redhat.com>
+
+	* ecos.db: Use generic i82559 driver for iq80310.
+
+2001-12-20  Koichi Nagashima  <naga@r-lab.co.jp>
+
+	* ecos.db: Add CqREEK SH7750 flash driver.
+
 2001-11-22  Jesper Skov  <jskov@redhat.com>
 
 	* pkgconf/rules.mak: Added HOST_CC definition. This really belongs
--- a/packages/NEWS
+++ b/packages/NEWS
@@ -1,3 +1,4 @@
+* CqREEK SH7750 FLASH driver added, contributed by Koichi Nagashima
 * EDB7xxx ethernet driver rewritten to be a generic Cirrus Logic CS8900A
   package.
 * Incorporated FTP client code (library and test) from Andrew Lunn.
--- a/packages/devs/eth/arm/iq80310/current/ChangeLog
+++ b/packages/devs/eth/arm/iq80310/current/ChangeLog
@@ -1,3 +1,11 @@
+2002-01-03  Mark Salter  <msalter@redhat.com>
+
+	* cdl/iq80310_eth_drivers.cdl: Rewrite to use generic i82559 driver.
+	* include/devs_eth_iq80310.inl: New file.
+	* src/if_iq80310.c: Remove.
+	* src/if_shmem.S: Remove.
+	* include/iq80310_info.h: Remove.
+
 2001-12-20  Mark Salter  <msalter@redhat.com>
 
 	* cdl/iq80310_eth_drivers.cdl: Add "flavor data" (as pointed out by
--- a/packages/devs/eth/arm/iq80310/current/cdl/iq80310_eth_drivers.cdl
+++ b/packages/devs/eth/arm/iq80310/current/cdl/iq80310_eth_drivers.cdl
@@ -48,132 +48,93 @@ cdl_package CYGPKG_DEVS_ETH_ARM_IQ80310 
     active_if     CYGPKG_IO_ETH_DRIVERS
     active_if     CYGPKG_HAL_ARM_IQ80310
 
-    implements    CYGHWR_NET_DRIVER_ETH0
-    implements    CYGHWR_NET_DRIVER_ETH1
-    # yes, there should be two of these "implement"s
-    implements    CYGHWR_NET_DRIVERS
-    implements    CYGHWR_NET_DRIVERS
-    include_dir   cyg/devs/eth
+    include_dir   cyg/io
 
-    # SNMP demands to know stuff; this sadly makes us break the neat
-    # abstraction of the device having nothing exported.
-    # The other one is used by other tests:
-    include_files include/iq80310_info.h
-    # and tell them that it is available
-    define_proc {
-	puts $::cdl_system_header \
-       "#define CYGBLD_DEVS_ETH_DEVICE_H <pkgconf/devs_eth_arm_iq80310.h>"
+    # FIXME: This really belongs in the INTEL_I82559 package
+    cdl_interface CYGINT_DEVS_ETH_INTEL_I82559_REQUIRED {
+        display   "Intel i82559 ethernet driver required"
     }
 
-    description   "Ethernet driver for Intel IQ80310 with PRO/100+ boards."
-    compile       -library=libextras.a if_iq80310.c if_shmem.S
-
-    cdl_option CYGDBG_DEVS_ETH_ARM_IQ80310_CHATTER {
-	display "Prints ethernet device status info during startup"
-	default_value 0
-	description   "
-	    The ethernet device initialization code can print lots of info
-	    to confirm that it has found the devices on the PCI bus, read
-	    the MAC address from EEPROM correctly, and so on, and also
-	    displays the mode (10/100MHz, half/full duplex) of the
-	    connection."
-    }
-
-    cdl_option CYGNUM_DEVS_ETH_ARM_IQ80310_DEV_COUNT {
-	display "Number of supported interfaces."
-        legal_values  1 2
-	default_value 2
-        flavor        data
-	description   "
-	    This option selects the number of PCI ethernet interfaces to
-            be supported by the driver."
-    }
-
-    cdl_option CYGNUM_DEVS_ETH_ARM_IQ80310_MAX_RX_DESCRIPTORS {
-        display       "Maximum number of RX descriptors"
-        flavor  data
-        default_value { CYGPKG_REDBOOT ? 4 : 128 }
-        define        MAX_RX_DESCRIPTORS
-        description   "
-                An RX descriptor is used for each ethernet frame required
-                to be passed to the upper networking layers. This option
-                sets the maximum number of these. Higher numbers use more
-                memory, lower numbers will reduce performance. The system
-                appears to work OK with as few as 8 descriptors but limps
-                painfully with only 4. Performance is better with more than
-                8, but since the size of non-cached (so useless for anything
-                else) memory window is 1Mb, we might as well use it all.
-                128 RX and TX descriptors uses the whole 1Mb, near enough."
+    define_proc {
+        puts $::cdl_system_header "/***** ethernet driver proc output start *****/"
+        puts $::cdl_system_header "#define CYGDAT_DEVS_ETH_INTEL_I82559_INL <cyg/io/devs_eth_iq80310.inl>"
+        puts $::cdl_system_header "#define CYGDAT_DEVS_ETH_INTEL_I82559_CFG <pkgconf/devs_eth_arm_iq80310.h>"
+        puts $::cdl_system_header "/*****  ethernet driver proc output end  *****/"
     }
 
-    cdl_option CYGNUM_DEVS_ETH_ARM_IQ80310_MAX_TX_DESCRIPTORS {
-        display       "Maximum number of TX descriptors"
-        flavor  data
-        default_value { CYGPKG_REDBOOT ? 4 : 128 }
-        define        MAX_TX_DESCRIPTORS
+
+    cdl_component CYGPKG_DEVS_ETH_ARM_IQ80310_ETH0 {
+        display       "IQ80310 builtin ethernet port driver"
+        flavor        bool
+        default_value 1
         description   "
-                A TX descriptor is used for each ethernet frame passed down
-                from upper networking layers for transmission. This option
-                sets the maximum number of these. Higher numbers use more
-                memory, lower numbers will reduce performance. The system
-                appears to work OK with as few as 8 descriptors but limps
-                painfully with only 4. Performance is better with more than
-                8, but since the size of non-cached (so useless for anything
-                else) memory window is 1Mb, we might as well use it all.
-                128 RX and TX descriptors uses the whole 1Mb, near enough."
-    }
+            This option includes the ethernet device driver for the
+            IQ80310 builtin port."
+
+        implements CYGHWR_NET_DRIVERS
+        implements CYGHWR_NET_DRIVER_ETH0
+        implements CYGINT_DEVS_ETH_INTEL_I82559_REQUIRED
 
-    cdl_component CYGDBG_DEVS_ETH_ARM_IQ80310_KEEP_STATISTICS {
-	display "Keep Ethernet statistics"
-	default_value 1
-	description   "
-	    The ethernet device can maintain statistics about the network,
-	    specifically a great variety of error rates which are useful
-	    for network management.  SNMP for example uses this
-	    information.  There is some performance cost in maintaining
-	    this information; disable this option to recoup that."
+        cdl_option CYGDAT_DEVS_ETH_ARM_IQ80310_ETH0_NAME {
+            display       "Device name for the ETH0 ethernet port driver"
+            flavor        data
+            default_value {"\"eth0\""}
+            description   "
+                This option sets the name of the ethernet device for the
+                IQ80310 builtin port."
+        }
 
-	cdl_option CYGDBG_DEVS_ETH_ARM_IQ80310_KEEP_82559_STATISTICS {
-	    display "Keep i82559 Internal statistics"
-	    default_value 1
-	    description   "
-	        The i82559 keeps internal counters, and it is possible to
-	        acquire these.  But the i82559 (reputedly) does not service
-	        the network whilst uploading the data to RAM from its
-	        internal registers.  If throughput is a problem, disable
-	        this option to acquire only those statistics gathered by
-	        software, so that the i82559 never sleeps."
-	}
-    }
+        cdl_option CYGNUM_DEVS_ETH_ARM_IQ80310_MAX_RX_DESCRIPTORS {
+            display       "Maximum number of RX descriptors"
+            flavor  data
+            default_value { CYGPKG_REDBOOT ? 4 : 128 }
+            define        MAX_RX_DESCRIPTORS
+            description   "
+                    An RX descriptor is used for each ethernet frame required
+                    to be passed to the upper networking layers. This option
+                    sets the maximum number of these. Higher numbers use more
+                    memory, lower numbers will reduce performance. The system
+                    appears to work OK with as few as 8 descriptors but limps
+                    painfully with only 4. Performance is better with more than
+                    8, but since the size of non-cached (so useless for anything
+                    else) memory window is 1Mb, we might as well use it all.
+                    128 RX and TX descriptors uses the whole 1Mb, near enough."
+        }
+    
+        cdl_option CYGNUM_DEVS_ETH_ARM_IQ80310_MAX_TX_DESCRIPTORS {
+            display       "Maximum number of TX descriptors"
+            flavor  data
+            default_value { CYGPKG_REDBOOT ? 4 : 128 }
+            define        MAX_TX_DESCRIPTORS
+            description   "
+                    A TX descriptor is used for each ethernet frame passed down
+                    from upper networking layers for transmission. This option
+                    sets the maximum number of these. Higher numbers use more
+                    memory, lower numbers will reduce performance. The system
+                    appears to work OK with as few as 8 descriptors but limps
+                    painfully with only 4. Performance is better with more than
+                    8, but since the size of non-cached (so useless for anything
+                    else) memory window is 1Mb, we might as well use it all.
+                    128 RX and TX descriptors uses the whole 1Mb, near enough."
+        }
 
-    cdl_component CYGPKG_DEVS_ETH_ARM_IQ80310_WRITE_EEPROM {
-	display "SIOCSIFHWADDR records MAC address in EEPROM"
-	default_value 0
-	description   "
-	    The ioctl() socket call with operand SIOCSIFHWADDR sets the
-	    interface hardware address - the MAC address or ethernet
-	    address.  This option causes the new MAC address to be written
-	    into the EEPROM associated with the interface, so that the new
-	    MAC address is permanently recorded.  Doing this should be a
-	    carefully chosen decision, hence this option."
-    }
+        cdl_component CYGSEM_DEVS_ETH_ARM_IQ80310_ETH0_SET_ESA {
+            display       "Set the ethernet station address"
+            flavor        bool
+	    default_value 0
+            description   "Enabling this option will allow the ethernet
+            station address to be forced to the value set by the
+            configuration.  This may be required if the hardware does
+            not include a serial EEPROM for the ESA."
+            
+            cdl_option CYGDAT_DEVS_ETH_ARM_IQ80310_ETH0_ESA {
+                display       "The ethernet station address"
+                flavor        data
+                default_value {"{0x00, 0xB5, 0xE0, 0xB5, 0xE0, 0x11}"}
+                description   "The ethernet station address"
+            }
+        }
 
-    cdl_component CYGPKG_DEVS_ETH_ARM_IQ80310_OPTIONS {
-        display "Intel IQ80310 with PRO/100+ ethernet driver build options"
-        flavor  none
-	no_define
-
-        cdl_option CYGPKG_DEVS_ETH_ARM_IQ80310_CFLAGS_ADD {
-            display "Additional compiler flags"
-            flavor  data
-            no_define
-            default_value { "-D_KERNEL -D__ECOS" }
-            description   "
-                This option modifies the set of compiler flags for
-                building the Intel IQ80310 with PRO/100+ ethernet driver
-                package. These flags are used in addition to the set of
-                global flags."
-        }
     }
 
 }
new file mode 100644
--- /dev/null
+++ b/packages/devs/eth/arm/iq80310/current/include/devs_eth_iq80310.inl
@@ -0,0 +1,126 @@
+//==========================================================================
+//
+//      devs/eth/arm/iq80310/include/devs_eth_arm_iq80310.inl
+//
+//      IQ80310 ethernet I/O definitions.
+//
+//==========================================================================
+//####COPYRIGHTBEGIN####
+//                                                                          
+// -------------------------------------------                              
+// The contents of this file are subject to the Red Hat eCos Public License 
+// Version 1.1 (the "License"); you may not use this file except in         
+// compliance with the License.  You may obtain a copy of the License at    
+// http://www.redhat.com/                                                   
+//                                                                          
+// Software distributed under the License is distributed on an "AS IS"      
+// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.  See the 
+// License for the specific language governing rights and limitations under 
+// the License.                                                             
+//                                                                          
+// The Original Code is eCos - Embedded Configurable Operating System,      
+// released September 30, 1998.                                             
+//                                                                          
+// The Initial Developer of the Original Code is Red Hat.                   
+// Portions created by Red Hat are                                          
+// Copyright (C) 1998, 1999, 2000, 2001 Red Hat, Inc.
+// All Rights Reserved.                                                     
+// -------------------------------------------                              
+//                                                                          
+//####COPYRIGHTEND####
+//==========================================================================
+//#####DESCRIPTIONBEGIN####
+//
+// Author(s):   msalter
+// Contributors:msalter
+// Date:        2001-12-20
+// Purpose:     IQ80310 ethernet defintions
+//####DESCRIPTIONEND####
+//==========================================================================
+
+#include <cyg/hal/hal_intr.h>           // CYGNUM_HAL_INTERRUPT_ETHERNET
+#include <cyg/hal/hal_cache.h>          // HAL_DCACHE_LINE_SIZE
+#include <cyg/hal/plf_io.h>             // CYGARC_UNCACHED_ADDRESS
+
+#ifdef CYGPKG_DEVS_ETH_ARM_IQ80310_ETH0
+
+// Bus masters can get to all of SDRAM using direct mapping.
+#define CYGHWR_INTEL_I82559_PCI_VIRT_TO_BUS( _x_ ) ((cyg_uint32)CYGARC_VIRT_TO_BUS(_x_))
+
+#ifndef CYGSEM_DEVS_ETH_ARM_IQ80310_ETH0_SET_ESA
+# define CYGHWR_DEVS_ETH_INTEL_I82559_HAS_ONE_EEPROM 0
+# define CYGHWR_DEVS_ETH_INTEL_I82559_HAS_ONE_EEPROM_WITHOUT_CRC
+#endif
+
+#define MAX_PACKET_SIZE   1536
+#define SIZEOF_DESCRIPTOR 16
+#define MISC_MEM          1128     // selftest, ioctl and statistics
+
+#define CYGHWR_INTEL_I82559_PCI_MEM_MAP_SIZE \
+  (((MAX_PACKET_SIZE + SIZEOF_DESCRIPTOR) * \
+     (CYGNUM_DEVS_ETH_INTEL_I82559_MAX_TX_DESCRIPTORS + \
+      CYGNUM_DEVS_ETH_INTEL_I82559_MAX_RX_DESCRIPTORS)) + \
+   MISC_MEM)
+
+static char pci_mem_buffer[CYGHWR_INTEL_I82559_PCI_MEM_MAP_SIZE + HAL_DCACHE_LINE_SIZE];
+
+#define CYGHWR_INTEL_I82559_PCI_MEM_MAP_BASE \
+  (CYGARC_UNCACHED_ADDRESS(((unsigned)pci_mem_buffer + HAL_DCACHE_LINE_SIZE - 1) & ~(HAL_DCACHE_LINE_SIZE - 1)))
+
+static I82559 i82559_eth0_priv_data = { 
+#ifdef CYGSEM_DEVS_ETH_ARM_IQ80310_ETH0_SET_ESA
+    hardwired_esa: 1,
+    mac_address: CYGDAT_DEVS_ETH_ARM_IQ80310_ETH0_ESA
+#else
+    hardwired_esa: 0,
+#endif
+};
+
+ETH_DRV_SC(i82559_sc0,
+           &i82559_eth0_priv_data,      // Driver specific data
+           CYGDAT_DEVS_ETH_ARM_IQ80310_ETH0_NAME, // Name for device
+           i82559_start,
+           i82559_stop,
+           i82559_ioctl,
+           i82559_can_send,
+           i82559_send,
+           i82559_recv,
+           i82559_deliver,
+           i82559_poll,
+           i82559_int_vector
+    );
+
+NETDEVTAB_ENTRY(i82559_netdev0, 
+                "i82559_" CYGDAT_DEVS_ETH_ARM_IQ80310_ETH0_NAME,
+                i82559_init, 
+                &i82559_sc0);
+
+#endif // CYGPKG_DEVS_ETH_ARM_IQ80310_ETH0
+
+
+// These arrays are used for sanity checking of pointers
+I82559 *
+i82559_priv_array[CYGNUM_DEVS_ETH_INTEL_I82559_DEV_COUNT] = {
+#ifdef CYGPKG_DEVS_ETH_ARM_IQ80310_ETH0
+    &i82559_eth0_priv_data,
+#endif
+};
+
+#ifdef CYGDBG_USE_ASSERTS
+// These are only used when assertions are enabled
+cyg_netdevtab_entry_t *
+i82559_netdev_array[CYGNUM_DEVS_ETH_INTEL_I82559_DEV_COUNT] = {
+#ifdef CYGPKG_DEVS_ETH_ARM_IQ80310_ETH0
+    &i82559_netdev0,
+#endif
+};
+
+struct eth_drv_sc *
+i82559_sc_array[CYGNUM_DEVS_ETH_INTEL_I82559_DEV_COUNT] = {
+#ifdef CYGPKG_DEVS_ETH_ARM_IQ80310_ETH0
+    &i82559_sc0,
+#endif
+};
+#endif // CYGDBG_USE_ASSERTS
+
+// EOF devs_eth_arm_iq80310.inl
deleted file mode 100644
--- a/packages/devs/eth/arm/iq80310/current/include/iq80310_info.h
+++ /dev/null
@@ -1,275 +0,0 @@
-#ifndef CYGONCE_DEVS_ETH_ARM_IQ80310_IQ80310_INFO_H
-#define CYGONCE_DEVS_ETH_ARM_IQ80310_IQ80310_INFO_H
-/*==========================================================================
-//
-//        iq80310_info.h
-//
-//
-//==========================================================================
-//####COPYRIGHTBEGIN####
-//                                                                          
-// -------------------------------------------                              
-// The contents of this file are subject to the Red Hat eCos Public License 
-// Version 1.1 (the "License"); you may not use this file except in         
-// compliance with the License.  You may obtain a copy of the License at    
-// http://www.redhat.com/                                                   
-//                                                                          
-// Software distributed under the License is distributed on an "AS IS"      
-// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.  See the 
-// License for the specific language governing rights and limitations under 
-// the License.                                                             
-//                                                                          
-// The Original Code is eCos - Embedded Configurable Operating System,      
-// released September 30, 1998.                                             
-//                                                                          
-// The Initial Developer of the Original Code is Red Hat.                   
-// Portions created by Red Hat are                                          
-// Copyright (C) 1998, 1999, 2000 Red Hat, Inc.                             
-// All Rights Reserved.                                                     
-// -------------------------------------------                              
-//                                                                          
-//####COPYRIGHTEND####
-//==========================================================================
-//#####DESCRIPTIONBEGIN####
-//
-// Author(s):     hmt
-// Contributors:  hmt
-// Date:          2000-05-03
-// Description:
-//
-//####DESCRIPTIONEND####
-*/
-
-#include <pkgconf/devs_eth_arm_iq80310.h>
-
-#ifdef CYGDBG_DEVS_ETH_ARM_IQ80310_KEEP_STATISTICS
-# define KEEP_STATISTICS
-# define nDISPLAY_STATISTICS
-# define nDISPLAY_82559_STATISTICS
-#else
-# define nKEEP_STATISTICS
-# define nDISPLAY_STATISTICS
-# define nDISPLAY_82559_STATISTICS
-#endif
-
-
-// ------------------------------------------------------------------------
-//
-//                       STATISTICAL COUNTER STRUCTURE
-//
-// ------------------------------------------------------------------------
-#ifdef KEEP_STATISTICS
-typedef struct {
-/*  0 */    cyg_uint32 tx_good;
-/*  4 */    cyg_uint32 tx_max_collisions;
-/*  8 */    cyg_uint32 tx_late_collisions;
-/* 12 */    cyg_uint32 tx_underrun;
-/* 16 */    cyg_uint32 tx_carrier_loss;
-/* 20 */    cyg_uint32 tx_deferred;
-/* 24 */    cyg_uint32 tx_single_collisions;
-/* 28 */    cyg_uint32 tx_mult_collisions;
-/* 32 */    cyg_uint32 tx_total_collisions;
-/* 36 */    cyg_uint32 rx_good;
-/* 40 */    cyg_uint32 rx_crc_errors;
-/* 44 */    cyg_uint32 rx_align_errors;
-/* 48 */    cyg_uint32 rx_resource_errors;
-/* 52 */    cyg_uint32 rx_overrun_errors;
-/* 56 */    cyg_uint32 rx_collisions; // Always 0
-/* 60 */    cyg_uint32 rx_short_frames;
-// In this setup; can also be flow-control counts after.
-// If these are to be used, a config command (as in set promiscuous mode)
-// must be issued at start, to let those stats escape.  Params are in
-// comments around the config command setup...
-/* 64 */    cyg_uint32 done;
-} I82559_COUNTERS;
-
-
-typedef struct {
-    cyg_uint32 interrupts;
-    cyg_uint32 rx_count;
-    cyg_uint32 rx_deliver;
-    cyg_uint32 rx_resource;
-    cyg_uint32 rx_restart;
-    cyg_uint32 tx_count;
-    cyg_uint32 tx_complete;
-    cyg_uint32 tx_dropped;
-} STATISTICS;
-
-
-extern STATISTICS statistics[2];
-#ifdef CYGDBG_DEVS_ETH_ARM_IQ80310_KEEP_82559_STATISTICS
-extern I82559_COUNTERS i82559_counters[2];
-#endif
-
-#endif // KEEP_STATISTICS
-
-// ------------------------------------------------------------------------
-//
-//                      DEVICES AND PACKET QUEUES
-//
-// ------------------------------------------------------------------------
-
-
-typedef struct i82559 {
-    cyg_uint8                           // (split up for atomic byte access)
-        found:1,                        // was hardware discovered?
-        mac_addr_ok:1,                  // can we bring up?
-        active:1,                       // has this if been brung up?
-        spare1:5; 
-    cyg_uint8
-        spare2:8; 
-    cyg_uint8
-        tx_in_progress:1,               // transmit in progress flag
-        tx_queue_full:1,                // all Tx descriptors used flag
-        spare3:6; 
-    cyg_uint8  index;                   // 0 or 1 or whatever
-    cyg_uint32 devid;                   // PCI device id
-    cyg_uint32 memory_address;          // PCI memory address
-    cyg_uint32 io_address;              // memory mapped I/O address
-    cyg_uint8  mac_address[6];          // mac (hardware) address
-    void *ndp;                          // Network Device Pointer
-
-    int next_rx_descriptor;             // descriptor index for RFDs
-    struct rfd *rx_ring[MAX_RX_DESCRIPTORS]; // location of Rx descriptors
-
-    int tx_descriptor_add;              // descriptor index for additions
-    int tx_descriptor_active;           // descriptor index for active tx
-    int tx_descriptor_remove;           // descriptor index for remove
-
-    struct txcb *tx_ring[MAX_TX_DESCRIPTORS];  // location of Tx descriptors
-    unsigned long tx_keys[MAX_TX_DESCRIPTORS];
-                                        // keys for tx q management
-
-    // Interrupt handling stuff
-    cyg_vector_t    vector;             // interrupt vector
-    cyg_handle_t    interrupt_handle;   // handle for int.handler
-    cyg_interrupt   interrupt_object;
-
-#ifdef KEEP_STATISTICS
-    void *p_statistics;                 // pointer to statistical counters
-#endif
-
-} I82559;
-
-
-
-// ------------------------------------------------------------------------
-//
-//                   82559 GENERAL STATUS REGISTER
-//
-// ------------------------------------------------------------------------
-#define GEN_STATUS_FDX          0x04    // 1 = full duplex, 0 = half
-#define GEN_STATUS_100MBPS      0x02    // 1 = 100 Mbps, 0 = 10 Mbps
-#define GEN_STATUS_LINK         0x01    // 1 = link up, 0 = link down
-
-extern int i82559_status( struct eth_drv_sc *sc );
-
-// ------------------------------------------------------------------------
-
-#ifdef KEEP_STATISTICS
-void update_statistics(struct i82559* p_i82559);
-#endif
-
-
-#ifdef CYGDBG_DEVS_ETH_ARM_IQ80310_KEEP_82559_STATISTICS
-#define ETH_STATS_INIT( p ) \
-        update_statistics( (struct i82559 *)((p)->driver_private) )
-#else
-#define ETH_STATS_INIT( p ) // otherwise do nothing
-#endif
-
-#define CYGDAT_DEVS_ETH_DESCRIPTION "Intel EtherPRO 10/100+ (i82559)"
-
-#define ETH_DEV_DOT3STATSETHERCHIPSET 1,3,6,1,2,1,10,7,8,2,5
-
-#endif /* ifndef CYGONCE_DEVS_ETH_ARM_IQ80310_IQ80310_INFO_H */
-
-// ------------------------------------------------------------------------
-
-// MDI definitions
-#define MDI_WRITE_OP		0x01
-#define MDI_READ_OP		0x02
-#define MDI_NOT_READY		0
-#define MDI_POLLED		0
-#define MDI_DEFAULT_PHY_ADDR 1	// when only one PHY
-
-// PHY device register addresses
-
-// generic register addresses
-#define MDI_PHY_CTRL		0
-#define MDI_PHY_STAT		1
-#define MDI_PHY_ID_1		2
-#define MDI_PHY_ID_2		3
-#define MDI_PHY_AUTO_AD		4
-#define MDI_PHY_AUTO_LNK	5
-#define MDI_PHY_AUTO_EXP	6
-
-#define I82555_PHY_ID		0x02a80150
-#define ICS1890_PHY_ID		0x0015f420
-#define DP83840_PHY_ID		0x20005c00
-#define I82553_PHY_ID		0x02a80350
-#define I82553_REVAB_PHY_ID	0x03e00000
-
-/* I82555/558 Status and Control register */
-#define I82555_STATCTRL_REG	0x10
-#define I82555_100_MBPS		(1 << 1)
-#define I82555_10_MBPS		(0 << 1)
-
-#define REVISION_MASK		0xf
-
-/* DP83840 specific register information */
-#define DP83840_PCR_REG		0x17
-#define PCR_TXREADY_SEL		(1 << 10)
-#define PCR_FCONNECT		(1 << 5)
-
-/* ICS1890 QuickPoll Detailed Status register */
-#define ICS1890_QUICKPOLL_REG	0x11
-#define QUICK_100_MBPS		(1 << 15)
-#define QUICK_10_MBPS		(0 << 15)
-#define QUICK_LINK_VALID	(1 << 0)
-#define QUICK_LINK_INVALID	(0 << 0)
-
-#define DP83840_PHY_ADDR_REG	0x19
-#define PHY_ADDR_CON_STATUS	(1 << 5)
-#define PHY_ADDR_SPEED_10_MBPS	(1 << 6)
-#define PHY_ADDR_SPEED_100_MBPS	(0 << 6)
-
-#define DP83840_LOOPBACK_REG	0x18
-#define TWISTER_LOOPBACK	(0x1 << 8)
-#define REMOTE_LOOPBACK		(0x2 << 8)
-#define CLEAR_LOOP_BITS		~(TWISTER_LOOPBACK | REMOTE_LOOPBACK)
-
-/* 82553 specific register information */
-#define I82553_PHY_EXT_REG0	0x10
-#define EXT_REG0_100_MBPS	(1 << 1)
-#define GET_REV_CNTR(n)		((n & 0x00e0) >> 5)
-#define I82553_PHY_EXT_REG1	0x14
-
-/* MDI Control Register bits */
-#define MDI_CTRL_COLL_TEST	(1 << 7)
-#define MDI_CTRL_FULL_DUPLEX	(1 << 8)
-#define MDI_CTRL_RESTART_AUTO	(1 << 9)
-#define MDI_CTRL_ISOLATE	(1 << 10)
-#define MDI_CTRL_POWER_DOWN	(1 << 11)
-#define MDI_CTRL_AUTO_ENAB	(1 << 12)
-#define MDI_CTRL_AUTO_DISAB	(0 << 12)
-#define MDI_CTRL_100_MBPS	(1 << 13)
-#define MDI_CTRL_10_MBPS	(0 << 13)
-#define MDI_CTRL_LOOPBACK	(1 << 14)
-#define MDI_CTRL_RESET		(1 << 15)
-
-/* MDI Status Register bits */
-#define MDI_STAT_EXTENDED	(1 << 0)
-#define MDI_STAT_JABBER		(1 << 1)
-#define MDI_STAT_LINK		(1 << 2)
-#define MDI_STAT_AUTO_CAPABLE	(1 << 3)
-#define MDI_STAT_REMOTE_FLT	(1 << 4)
-#define MDI_STAT_AUTO_COMPLETE	(1 << 5)
-#define MDI_STAT_10BASET_HALF	(1 << 11)
-#define MDI_STAT_10BASET_FULL	(1 << 12)
-#define MDI_STAT_TX_HALF	(1 << 13)
-#define MDI_STAT_TX_FULL	(1 << 14)
-#define MDI_STAT_T4_CAPABLE	(1 << 15)
-
-/* EOF iq80310_info.h */
-
deleted file mode 100644
--- a/packages/devs/eth/arm/iq80310/current/src/if_iq80310.c
+++ /dev/null
@@ -1,3044 +0,0 @@
-//==========================================================================
-//
-//      if_iq80310.c
-//
-//	Ethernet drivers
-//	Intel IQ80310 and PRO/100+ platform specific support
-//
-//==========================================================================
-//####COPYRIGHTBEGIN####
-//                                                                          
-// -------------------------------------------                              
-// The contents of this file are subject to the Red Hat eCos Public License 
-// Version 1.1 (the "License"); you may not use this file except in         
-// compliance with the License.  You may obtain a copy of the License at    
-// http://www.redhat.com/                                                   
-//                                                                          
-// Software distributed under the License is distributed on an "AS IS"      
-// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.  See the 
-// License for the specific language governing rights and limitations under 
-// the License.                                                             
-//                                                                          
-// The Original Code is eCos - Embedded Configurable Operating System,      
-// released September 30, 1998.                                             
-//                                                                          
-// The Initial Developer of the Original Code is Red Hat.                   
-// Portions created by Red Hat are                                          
-// Copyright (C) 1998, 1999, 2000, 2001 Red Hat, Inc.                             
-// All Rights Reserved.                                                     
-// -------------------------------------------                              
-//                                                                          
-//####COPYRIGHTEND####
-//####BSDCOPYRIGHTBEGIN####
-//
-// -------------------------------------------
-//
-// Portions of this software may have been derived from OpenBSD or other sources,
-// and are covered by the appropriate copyright disclaimers included herein.
-//
-// -------------------------------------------
-//
-//####BSDCOPYRIGHTEND####
-//==========================================================================
-//#####DESCRIPTIONBEGIN####
-//
-// Author(s):    hmt, gthomas
-// Contributors: Ron Spence, Pacific Softworks; msalter
-// Date:         2000-02-01
-// Purpose:      
-// Description:  hardware driver for 82559 Intel PRO/100+ ethernet on
-//               a Intel XScale IQ80310 development board
-//              
-//
-//####DESCRIPTIONEND####
-//
-//==========================================================================
-
-#include <pkgconf/system.h>
-#include <pkgconf/devs_eth_arm_iq80310.h>
-#include <cyg/infra/cyg_type.h>
-#include <cyg/infra/cyg_ass.h>
-#include <cyg/hal/hal_arch.h>
-#include <cyg/hal/hal_intr.h>
-#include <cyg/hal/hal_io.h>
-#include <cyg/hal/hal_cache.h>
-#include <cyg/infra/diag.h>
-#include <cyg/hal/drv_api.h>
-#include <netdev.h>
-#include <eth_drv.h>
-
-#ifdef CYGPKG_NET
-#include <pkgconf/net.h>
-#include <net/if.h>  /* Needed for struct ifnet */
-#else
-#include <cyg/hal/hal_if.h>
-#endif
-
-#ifdef CYGPKG_IO_PCI
-#include <cyg/io/pci.h>
-// So we can check the validity of the PCI window against the MLTs opinion,
-// and thereby what the malloc heap consumes willy-nilly:
-#include CYGHWR_MEMORY_LAYOUT_H
-#else
-#error "Need PCI package here"
-#endif
-
-// Exported statistics and the like
-#include <cyg/devs/eth/iq80310_info.h>
-#include <eth_drv_stats.h>
-
-extern char cyg_io_iq80310_i82559_shmem[];
-#define CYGHWR_HAL_ARM_IQ80310_PCI_MEM_MAP_BASE ((cyg_addrword_t)cyg_io_iq80310_i82559_shmem)
-// This must match actual size in if_shmem.S:
-#define CYGHWR_HAL_ARM_IQ80310_PCI_MEM_MAP_SIZE        \
-  ((MAX_RX_PACKET_SIZE + sizeof(RFD)) *                \
-   (CYGNUM_DEVS_ETH_ARM_IQ80310_MAX_TX_DESCRIPTORS +   \
-    CYGNUM_DEVS_ETH_ARM_IQ80310_MAX_RX_DESCRIPTORS))
-
-
-// ------------------------------------------------------------------------
-
-#ifdef CYGDBG_DEVS_ETH_ARM_IQ80310_CHATTER
-#define notDEBUG_82559 // This one prints stuff as packets come and go
-#define DEBUG          // Startup printing mainly
-#define DEBUG_EE       // Some EEPROM specific retries &c
-#endif
-
-#define os_printf diag_printf
-#define db_printf diag_printf
-
-// ------------------------------------------------------------------------
-// I/O access macros as inlines for type safety
-
-static inline void OUTB(cyg_uint8 value, cyg_uint32 io_address)
-{   *((volatile cyg_uint8 *)io_address) = value;    }
-
-static inline void OUTW(cyg_uint16 value, cyg_uint32 io_address)
-{   *((volatile cyg_uint16 *)io_address) = value;   }
-
-static inline void OUTL(cyg_uint32 value, cyg_uint32 io_address)
-{   *((volatile cyg_uint32 *)io_address) = value;   }
-
-static inline cyg_uint8 INB(cyg_uint32 io_address)
-{   return *((volatile cyg_uint8 *)io_address);     }
-
-static inline cyg_uint16 INW(cyg_uint32 io_address)
-{   return *((volatile cyg_uint16 *)io_address);    }
-
-static inline cyg_uint32 INL(cyg_uint32 io_address)
-{   return *((volatile cyg_uint32 *)io_address);    }
-
-// Bus masters can get to all of SDRAM using direct mapping.
-#define VIRT_TO_BUS( _x_ ) ((cyg_uint32)(_x_))
-#define BUS_TO_VIRT( _x_ ) ((cyg_uint32)(_x_))
-
-// ------------------------------------------------------------------------
-//                                                                      
-//                   82559 REGISTER OFFSETS (I/O SPACE)                 
-//                                                                      
-// ------------------------------------------------------------------------
-#define SCBStatus       0               // Rx/Command Unit command and status.
-#define SCBCmd          2               // Rx/Command Unit command and status.
-#define SCBPointer      4               // General purpose pointer.
-#define SCBPort         8               // Misc. commands and operands.
-#define SCBflash        12              // Flash memory control.
-#define SCBeeprom       14              // EEPROM memory control.
-#define SCBCtrlMDI      16              // MDI interface control.
-#define SCBEarlyRx      20              // Early receive byte count.
-#define SCBGenControl   28              // 82559 General Control Register
-#define SCBGenStatus    29              // 82559 General Status register
-
-
-// ------------------------------------------------------------------------
-//
-//               82559 SCB STATUS WORD DEFNITIONS
-//
-// ------------------------------------------------------------------------
-#define SCB_STATUS_CX   0x8000          // CU finished command (transmit)
-#define SCB_STATUS_FR   0x4000          // frame received
-#define SCB_STATUS_CNA  0x2000          // CU left active state
-#define SCB_STATUS_RNR  0x1000          // receiver left ready state
-#define SCB_STATUS_MDI  0x0800          // MDI read/write cycle done
-#define SCB_STATUS_SWI  0x0400          // software generated interrupt
-#define SCB_STATUS_FCP  0x0100          // flow control pause interrupt
-
-#define SCB_INTACK_MASK 0xFD00          // all the above
-
-#define SCB_INTACK_TX (SCB_STATUS_CX | SCB_STATUS_CNA)
-#define SCB_INTACK_RX (SCB_STATUS_FR | SCB_STATUS_RNR)
-
-// ------------------------------------------------------------------------
-//
-//               82559 PORT INTERFACE COMMANDS
-//
-// ------------------------------------------------------------------------
-#define I82559_RESET            0x00000000 // software reset
-#define I82559_SELFTEST         0x00000001 // 82559 selftest command
-#define I82559_SELECTIVE_RESET  0x00000002
-#define I82559_DUMP             0x00000003
-#define I82559_DUMP_WAKEUP      0x00000007
-
-
-// ------------------------------------------------------------------------
-//
-//                   82559 EEPROM INTERFACE
-//
-// ------------------------------------------------------------------------
-//  EEPROM_Ctrl bits.
-#define EE_SHIFT_CLK	0x01            // EEPROM shift clock.
-#define EE_CS		0x02            // EEPROM chip select.
-#define EE_DATA_WRITE	0x04            // EEPROM chip data in.
-#define EE_DATA_READ	0x08            // EEPROM chip data out.
-#define EE_ENB		(0x4800 | EE_CS)
-
-// Delay between EEPROM clock transitions.
-#define eeprom_delay(usec)		udelay(usec);
-
-// The EEPROM commands include the always-set leading bit.
-#define EE_WRITE_CMD(a)     (5 << (a))
-#define EE_READ_CMD(a)	    (6 << (a))
-#define EE_ERASE_CMD(a)	    (7 << (a))
-#define EE_WRITE_EN_CMD(a)  (19 << ((a)-2))
-#define EE_WRITE_DIS_CMD(a) (16 << ((a)-2))
-#define EE_ERASE_ALL_CMD(a) (18 << ((a)-2))
-
-#define EE_TOP_CMD_BIT(a)      ((a)+2) // Counts down to zero
-#define EE_TOP_DATA_BIT        (15)    // Counts down to zero
-
-#define EEPROM_ENABLE_DELAY (10) // Delay at chip select
-
-#define EEPROM_SK_DELAY  (2) // Delay between clock edges *and* data
-                             // read or transition; 3 of these per bit.
-#define EEPROM_DONE_DELAY (100) // Delay when all done
-
-
-// ------------------------------------------------------------------------
-//
-//               SYSTEM CONTROL BLOCK COMMANDS
-//
-// ------------------------------------------------------------------------
-// CU COMMANDS
-#define CU_NOP          0x0000
-#define	CU_START        0x0010
-#define	CU_RESUME       0x0020
-#define	CU_STATSADDR    0x0040          // Load Dump Statistics ctrs addr
-#define	CU_SHOWSTATS    0x0050          // Dump statistics counters.
-#define	CU_ADDR_LOAD    0x0060          // Base address to add to CU commands
-#define	CU_DUMPSTATS    0x0070          // Dump then reset stats counters.
-
-// RUC COMMANDS
-#define RUC_NOP         0x0000
-#define	RUC_START       0x0001
-#define	RUC_RESUME      0x0002
-#define RUC_ABORT       0x0004
-#define	RUC_ADDR_LOAD   0x0006          // (seems not to clear on acceptance)
-#define RUC_RESUMENR    0x0007
-
-#define SCB_M	        0x0100          // 0 = enable interrupt, 1 = disable
-#define SCB_SI          0x0200          // 1 - cause device to interrupt
-
-#define CU_STATUS_MASK  0x00C0
-#define RU_STATUS_MASK  0x003C
-
-#define RU_STATUS_IDLE  (0<<2)
-#define RU_STATUS_SUS   (1<<2)
-#define RU_STATUS_NORES (2<<2)
-#define RU_STATUS_READY (4<<2)
-#define RU_STATUS_NO_RBDS_SUS   ((1<<2)|(8<<2))
-#define RU_STATUS_NO_RBDS_NORES ((2<<2)|(8<<2))
-#define RU_STATUS_NO_RBDS_READY ((4<<2)|(8<<2))
-
-
-#define MAX_MEM_RESERVED_IOCTL 1000
-
-// ------------------------------------------------------------------------
-//
-//               RECEIVE FRAME DESCRIPTORS
-//
-// ------------------------------------------------------------------------
-typedef struct rfd {
-    volatile union {
-        cyg_uint32 u32_status;         // result of receive operation
-        cyg_uint16 u16_status[2];
-    } u_status;
-    volatile cyg_uint32 link;           // offset from RU base to next RFD
-    volatile cyg_uint32 rdb_address;    // pointer to Rx data buffer
-    volatile cyg_uint32 count:14,       // number of bytes received +
-        f:1,                            //   + EOF & F flags
-        eof:1,
-            size:16;                    // size of the data buffer
-    volatile cyg_uint8 buffer[0];       // data buffer (simple mode)
-} RFD;
-
-// The status is split into two shorts to get atomic access to the EL bit;
-// the upper word is not written by the device, so we can just hit it,
-// leaving the lower word (which the device updates) alone.  Otherwise
-// there's a race condition between software moving the end-of-list (EL)
-// bit round and the device writing into the previous slot.
-
-#define rxstatus    u_status.u32_status
-#define rxstatus_hi u_status.u16_status[1]
-#define rxstatus_lo u_status.u16_status[0]
-
-#define RFD_STATUS_EL   0x80000000      // 1=last RFD in RFA
-#define RFD_STATUS_S    0x40000000      // 1=suspend RU after receiving frame
-#define RFD_STATUS_H    0x00100000      // 1=RFD is a header RFD
-#define RFD_STATUS_SF   0x00080000      // 0=simplified, 1=flexible mode
-#define RFD_STATUS_C    0x00008000      // completion of received frame
-#define RFD_STATUS_OK   0x00002000      // frame received with no errors
-
-#define RFD_STATUS_HI_EL   0x8000       // 1=last RFD in RFA
-#define RFD_STATUS_HI_S    0x4000       // 1=suspend RU after receiving frame
-#define RFD_STATUS_HI_H    0x0010       // 1=RFD is a header RFD
-#define RFD_STATUS_HI_SF   0x0008       // 0=simplified, 1=flexible mode
-
-#define RFD_STATUS_LO_C    0x8000       // completion of received frame
-#define RFD_STATUS_LO_OK   0x2000       // frame received with no errors
-
-#define RFD_RX_CRC          0x00000800  // crc error
-#define RFD_RX_ALIGNMENT    0x00000400  // alignment error
-#define RFD_RX_RESOURCE     0x00000200  // out of space, no resources
-#define RFD_RX_DMA_OVER     0x00000100  // DMA overrun
-#define RFD_RX_SHORT        0x00000080  // short frame error
-#define RFD_RX_LENGTH       0x00000020  //
-#define RFD_RX_ERROR        0x00000010  // receive error
-#define RFD_RX_NO_ADR_MATCH 0x00000004  // no address match
-#define RFD_RX_IA_MATCH     0x00000002  // individual address does not match
-#define RFD_RX_TCO          0x00000001  // TCO indication
-
-
-typedef struct rbd {
-    volatile cyg_uint32 count:14,       // bytes used in buffer
-        f:1,                            // buffer has been used (filled)
-        eof:1;                          // last receive buffer in frame
-    volatile cyg_uint32 next_rbd;       // next RBD (RU base relative)
-    volatile cyg_uint32 buffer_address; // address of receive data buffer
-    volatile cyg_uint32 size:15,        // size of the associated buffer
-        el:1;                           // buffer of this RBD is last
-} RBD;
-
-
-// ------------------------------------------------------------------------
-//
-//               TRANSMIT FRAME DESCRIPTORS
-//
-// ------------------------------------------------------------------------
-typedef struct txcb {
-    volatile cyg_uint32 txstatus:16,      // result of transmit operation
-        command:16;                     // transmit command
-    volatile cyg_uint32 link;           // offset from RU base to next RFD
-    volatile cyg_uint32 tbd_address;    // pointer to Rx data buffer
-    volatile cyg_uint32 count:15,       // number of bytes in transmit buffer
-        eof:1,
-        tx_threshold:8,
-        tbd_number:8;
-    volatile cyg_uint8 buffer[0];       // data buffer (simple mode)
-} TxCB;
-
-
-#define TxCB_CMD_TRANSMIT   0x0004      // transmit command
-#define TxCB_CMD_SF         0x0008      // 0=simplified, 1=flexible mode
-#define TxCB_CMD_NC         0x0010      // 0=CRC insert by controller
-#define TxCB_CMD_I          0x2000      // generate interrupt on completion
-#define TxCB_CMD_S          0x4000      // suspend on completion
-#define TxCB_CMD_EL         0x8000      // last command block in CBL
-
-
-// ------------------------------------------------------------------------
-//
-//                   STRUCTURES ADDED FOR PROMISCUOUS MODE
-//
-// ------------------------------------------------------------------------
-typedef struct {
-    cyg_uint32 cb_status_word:13,
-        cb_ok:1,
-        cb_dc:1,
-        cb_complete:1,
-        cb_cmd:3,
-        cb_cmd_word:10,
-        cb_int:1,
-        cb_suspend:1,
-        cb_el:1;
-    cyg_uint32 cb_link_offset;
-} CB_STRUCT;
-
-
-typedef struct {
-    CB_STRUCT cb_entry;
-    cyg_uint8 config_bytes[24];
-} CONFIG_CMD_STRUCT;
-
-// ------------------------------------------------------------------------
-//
-//                       STATISTICAL COUNTER STRUCTURE
-//
-// ------------------------------------------------------------------------
-#ifdef KEEP_STATISTICS
-STATISTICS statistics[2];
-I82559_COUNTERS i82559_counters[2];
-#endif // KEEP_STATISTICS
-
-// ------------------------------------------------------------------------
-//
-//                      DEVICES AND PACKET QUEUES
-//
-// ------------------------------------------------------------------------
-
-#define MAX_RX_PACKET_SIZE  1536        // maximum Rx packet size
-#define MAX_TX_PACKET_SIZE  1536        // maximum Tx packet size
-
-
-// This is encapsulated here so that a change to > 2 interfaces can
-// easily be accommodated.
-
-#define IF_BAD_82559( _p_ )                                     \
-    CYG_ASSERT( (&i82559[0] == (_p_)) || (&i82559[1] == (_p_)), \
-                "Bad pointer-to-i82559" );                      \
-    if ( (&i82559[0] != (_p_)) && (&i82559[1] != (_p_)) )
-
-// ------------------------------------------------------------------------
-// Instantiate the interfaces that we have:
-
-// number of interfaces
-#define MAX_82559 1
-
-I82559 i82559[MAX_82559];               // i82559 device info. structure
-
-// eth0
-
-ETH_DRV_SC(iq80310_sc0,
-           &i82559[0],                  // Driver specific data
-           "eth0",                      // Name for this interface
-           i82559_start,
-           i82559_stop,
-           i82559_ioctl,
-           i82559_can_send,
-           i82559_send,
-           i82559_recv,
-           i82559_deliver,
-           i82559_poll,
-           i82559_int_vector
-    );
-
-NETDEVTAB_ENTRY(iq80310_netdev0, 
-                "iq80310-0", 
-                iq80310_i82559_init, 
-                &iq80310_sc0);
-
-#if (MAX_82559 > 1)
-
-// eth1
-
-ETH_DRV_SC(iq80310_sc1,
-           &i82559[1],                  // Driver specific data
-           "eth1",                      // Name for this interface
-           i82559_start,
-           i82559_stop,
-           i82559_ioctl,
-           i82559_can_send,
-           i82559_send,
-           i82559_recv,
-           i82559_deliver,
-           i82559_poll,
-           i82559_int_vector
-    );
-
-NETDEVTAB_ENTRY(iq80310_netdev1, 
-                "iq80310-1", 
-                iq80310_i82559_init, 
-                &iq80310_sc1);
-
-#else
-int iq80310_netdev1 = -1; // for asserts about valid addresses
-int iq80310_sc1 = -1;
-#endif // eth1 is included
-
-// This is in a macro so that if more devices arrive it can easily be changed
-#define CHECK_NDP_SC_LINK() CYG_MACRO_START                                \
-    CYG_ASSERT( ((void *)ndp == (void *)&iq80310_netdev0) ||               \
-                ((void *)ndp == (void *)&iq80310_netdev1), "Bad ndp" );    \
-    CYG_ASSERT( ((void *)sc == (void *)&iq80310_sc0) ||                    \
-                ((void *)sc == (void *)&iq80310_sc1), "Bad sc" );          \
-    CYG_ASSERT( (void *)p_i82559 == sc->driver_private, "sc pointer bad" );\
-CYG_MACRO_END
-
-// ------------------------------------------------------------------------
-//
-// Managing the memory that is windowed onto the PCI bus
-//
-// ------------------------------------------------------------------------
-
-static cyg_uint32 i82559_heap_size;
-static cyg_uint8 *i82559_heap_base;
-static cyg_uint8 *i82559_heap_free;
-
-static void *mem_reserved_ioctl = (void*)0;
-// uncacheable memory reserved for ioctl calls
-
-// ------------------------------------------------------------------------
-//
-//                       FUNCTION PROTOTYPES
-//
-// ------------------------------------------------------------------------
-
-static int pci_init_find_82559s(void);
-
-static void i82559_reset(struct i82559* p_i82559);
-
-static void InitRxRing(struct i82559* p_i82559);
-static void ResetRxRing(struct i82559* p_i82559);
-static void InitTxRing(struct i82559* p_i82559);
-static void ResetTxRing(struct i82559* p_i82559);
-
-#ifdef CYGPKG_DEVS_ETH_ARM_IQ80310_WRITE_EEPROM
-static void program_eeprom(cyg_uint32 , cyg_uint32 , cyg_uint8 * );
-#endif
-#ifdef CYGPKG_NET
-static int eth_set_promiscuous_mode(struct i82559* p_i82559);
-#endif
-
-// debugging/logging only:
-void dump_txcb(TxCB *p_txcb);
-void DisplayStatistics(void);
-void update_statistics(struct i82559* p_i82559);
-void dump_rfd(RFD *p_rfd, int anyway );
-void dump_all_rfds( int intf );
-void dump_packet(cyg_uint8 *p_buffer, int length);
-
-// ------------------------------------------------------------------------
-// utilities
-// ------------------------------------------------------------------------
-
-static // inline
-void wait_for_cmd_done(long scb_ioaddr)
-{
-    register int CSRstatus;
-    register int wait = 0x100000;
-    do CSRstatus = INB(scb_ioaddr + SCBCmd) ;
-    while( CSRstatus && --wait >= 0);
-    CYG_ASSERT( wait > 0, "wait_for_cmd_done" );
-}
-
-// Short circuit the drv_interrupt_XXX API once we are started:
-
-static inline int Mask82559Interrupt(struct i82559* p_i82559)
-{
-    int cpu_intr;
-    int old;
-    int mask = 1 << (CYGNUM_HAL_INTERRUPT_ETHERNET - CYGNUM_HAL_INTERRUPT_TIMER);
-
-    HAL_DISABLE_INTERRUPTS( cpu_intr );
-
-    old = *X3MASK_REG;
-    *X3MASK_REG = old | mask;
-
-    HAL_RESTORE_INTERRUPTS( cpu_intr );
-
-    return old & mask;
-}
-
-
-static inline void UnMask82559Interrupt(struct i82559* p_i82559, int old)
-{
-    int cpu_intr;
-    int mask = 1 << (CYGNUM_HAL_INTERRUPT_ETHERNET - CYGNUM_HAL_INTERRUPT_TIMER);
-
-    // We must only unmask (enable) if it was unmasked before,
-    // according to the bit in old.
-    HAL_DISABLE_INTERRUPTS( cpu_intr );
-    *X3MASK_REG = (*X3MASK_REG & ~mask) | old;
-    HAL_RESTORE_INTERRUPTS( cpu_intr );
-}
-
-#ifdef CYGDBG_USE_ASSERTS // an indication of a debug build
-static int acknowledge82559interrupt_compensating = 0;
-#endif
-
-static void Acknowledge82559Interrupt(struct i82559* p_i82559)
-{
-    int sources, mask;
-    cyg_uint32 ioaddr;
-    cyg_uint16 status;
-    int loops = 64;
-
-    // XScale does nothing in interrupt_acknowledge, so we can comment
-    // this all out.  So this routine really boils down to
-    //   "wait for the device to stop interrupting before we unmask"
-    // The acknowledge call is left in place, for documentary purposes.
-
-    cyg_drv_interrupt_acknowledge(p_i82559->vector);
-
-    // It appears that some time can be taken before the interrupt source
-    // *really* quietens down... this is ugly, but effective.
-    // Without it, we get "Spurious Interrupt!" failures.
-    ioaddr = p_i82559->io_address; // get I/O address for 82559
-
-    mask = (1 << (CYGNUM_HAL_INTERRUPT_ETHERNET - CYGNUM_HAL_INTERRUPT_TIMER));
-    sources = *X3ISR_REG;
-
-    status = INW(ioaddr + SCBStatus);
-    while ( ((0 != (sources & mask)) || (0 != (status & SCB_INTACK_MASK)))
-            && --loops >= 0) {
-        OUTW( status & SCB_INTACK_MASK, ioaddr + SCBStatus);
-        cyg_drv_interrupt_acknowledge(p_i82559->vector);
-#ifdef CYGDBG_USE_ASSERTS
-        acknowledge82559interrupt_compensating++; // verify this is executed
-#endif
-	sources = *X3ISR_REG;
-        status = INW(ioaddr + SCBStatus);
-    }
-    CYG_ASSERT( loops >= 0, "Acknowledge82559Interrupt" );
-}
-
-
-static void udelay(int delay)
-{
-  int i;
-  // the loop is going to take 3 ticks.  At 600 MHz, to give uS, multiply
-  // by 600/3 = 200. No volatile is needed on i; gcc recognizes delay
-  // loops and does NOT elide them.
-  for ( i = 200 * delay; i ; i--)
-    ;
-}
-
-// ------------------------------------------------------------------------
-// Memory management
-//
-// Simply carve off from the front of the PCI mapped window into real memory
-
-static void *pciwindow_mem_alloc(int size)
-{
-    void *p_memory;
-    int _size = size;
-
-    CYG_ASSERT(
-        (CYGHWR_HAL_ARM_IQ80310_PCI_MEM_MAP_BASE <= (int)i82559_heap_free)
-        &&
-        ((CYGHWR_HAL_ARM_IQ80310_PCI_MEM_MAP_BASE + 
-          CYGHWR_HAL_ARM_IQ80310_PCI_MEM_MAP_SIZE) > (int)i82559_heap_free)
-        &&
-        (0 < i82559_heap_size)
-        &&
-        (CYGHWR_HAL_ARM_IQ80310_PCI_MEM_MAP_SIZE >= i82559_heap_size)
-        &&
-        (CYGHWR_HAL_ARM_IQ80310_PCI_MEM_MAP_BASE == (int)i82559_heap_base),
-        "Heap variables corrupted" );
-
-    p_memory = (void *)0;
-    size = (size + 3) & ~3;
-    if ( (i82559_heap_free+size) < (i82559_heap_base+i82559_heap_size) ) {
-        cyg_uint32 *p;
-        p_memory = (void *)i82559_heap_free;
-        i82559_heap_free += size;
-        for ( p = (cyg_uint32 *)p_memory; _size > 0; _size -= 4 )
-            *p++ = 0;
-    }
-
-    return p_memory;
-}
-
-
-
-// ------------------------------------------------------------------------
-//
-//                       GET EEPROM SIZE
-//
-// ------------------------------------------------------------------------
-static int get_eeprom_size(long ioaddr)
-{
-    unsigned short retval = 0;
-    int ee_addr = ioaddr + SCBeeprom;
-    int i, addrbits;
-
-    // Should already be not-selected, but anyway:
-    OUTW(EE_ENB & ~EE_CS, ee_addr);
-    eeprom_delay(EEPROM_ENABLE_DELAY);
-    OUTW(EE_ENB, ee_addr);
-    eeprom_delay(EEPROM_ENABLE_DELAY);
-    
-    // Shift the read command bits out.
-    for (i = 2; i >= 0; i--) {
-        short dataval = (6 & (1 << i)) ? EE_DATA_WRITE : 0;
-        OUTW(EE_ENB | dataval               , ee_addr);
-        eeprom_delay(EEPROM_SK_DELAY);
-        OUTW(EE_ENB | dataval | EE_SHIFT_CLK, ee_addr);
-        eeprom_delay(EEPROM_SK_DELAY);
-        OUTW(EE_ENB | dataval               , ee_addr);
-        eeprom_delay(EEPROM_SK_DELAY);
-    }
-    // Now clock out address zero, looking for the dummy 0 data bit
-    for ( i = 1; i <= 12; i++ ) {
-        OUTW(EE_ENB               , ee_addr);
-        eeprom_delay(EEPROM_SK_DELAY);
-        OUTW(EE_ENB | EE_SHIFT_CLK, ee_addr);
-        eeprom_delay(EEPROM_SK_DELAY);
-        OUTW(EE_ENB               , ee_addr);
-        eeprom_delay(EEPROM_SK_DELAY);
-        retval = INW(ee_addr) & EE_DATA_READ;
-        if ( 0 == retval )
-            break; // The dummy zero est arrive'
-    }
-
-#ifdef DEBUG_EE
-    os_printf( "eeprom data bits %d (ioaddr %x)\n", i, ee_addr );
-#endif
-    if ( 6 != i && 8 != i ) {
-#ifdef DEBUG_EE
-        os_printf( "*****EEPROM data bits not 6 or 8*****\n" );
-#endif
-        i = 6;
-    }
-    addrbits = i;
-
-    // clear the dataval, leave the clock low to read in the data regardless
-    OUTW(EE_ENB, ee_addr);
-    eeprom_delay(1);
-    
-    retval = INW(ee_addr);
-    if ( (EE_DATA_READ & retval) != 0 ) {
-#ifdef DEBUG_EE
-        os_printf( "Size EEPROM: Dummy data bit not 0, reg %x\n" , retval );
-#endif
-    }
-    eeprom_delay(1);
-    
-    for (i = EE_TOP_DATA_BIT; i >= 0; i--) {
-        OUTW(EE_ENB | EE_SHIFT_CLK, ee_addr);
-        eeprom_delay(EEPROM_SK_DELAY);
-        retval = INW(ee_addr);
-        eeprom_delay(EEPROM_SK_DELAY);
-        OUTW(EE_ENB, ee_addr);
-        eeprom_delay(EEPROM_SK_DELAY);
-    }
-    
-    // Terminate the EEPROM access.
-    OUTW(EE_ENB & ~EE_CS, ee_addr);
-    eeprom_delay(EEPROM_DONE_DELAY);
-    
-    return addrbits;
-}
-
-
-// ------------------------------------------------------------------------
-//
-//                       READ EEPROM
-//
-// ------------------------------------------------------------------------
-static int read_eeprom(long ioaddr, int location, int addr_len)
-{
-    unsigned short retval = 0;
-    int ee_addr = ioaddr + SCBeeprom;
-    int read_cmd = location | EE_READ_CMD(addr_len);
-    int i, tries = 10;
-
- try_again:
-    // Should already be not-selected, but anyway:
-    OUTW(EE_ENB & ~EE_CS, ee_addr);
-    eeprom_delay(EEPROM_ENABLE_DELAY);
-    OUTW(EE_ENB, ee_addr);
-    eeprom_delay(EEPROM_ENABLE_DELAY);
-    
-    // Shift the read command bits out, changing only one bit per time.
-    for (i = EE_TOP_CMD_BIT(addr_len); i >= 0; i--) {
-        short dataval = (read_cmd & (1 << i)) ? EE_DATA_WRITE : 0;
-        OUTW(EE_ENB | dataval               , ee_addr);
-        eeprom_delay(EEPROM_SK_DELAY);
-        OUTW(EE_ENB | dataval | EE_SHIFT_CLK, ee_addr);
-        eeprom_delay(EEPROM_SK_DELAY);
-        OUTW(EE_ENB | dataval               , ee_addr);
-        eeprom_delay(EEPROM_SK_DELAY);
-    }
-
-    // clear the dataval, leave the clock low
-    OUTW(EE_ENB, ee_addr);
-    eeprom_delay(1);
-    
-    retval = INW(ee_addr);
-    // This should show a zero in the data read bit to confirm that the
-    // address transfer is compelete.  If not, go to the start and try
-    // again!
-    if ( (0 != (retval & EE_DATA_READ)) && (tries-- > 0) ) {
-    // Terminate the EEPROM access.
-        OUTW(EE_ENB & ~EE_CS, ee_addr);
-        eeprom_delay(EEPROM_DONE_DELAY);
-#ifdef DEBUG_EE
-        os_printf( "Warning: Retrying EEPROM read word %d, address %x, try %d\n",
-                   location,  ee_addr, tries+1 );
-#endif
-        goto try_again;
-    }
-
-    // This fires with one device on one of the customer boards!
-    // (but is OK on all other h/w.  Worrying huh.)
-    if ( (EE_DATA_READ & retval) != 0 ) {
-#ifdef DEBUG_EE
-        os_printf( "Read EEPROM: Dummy data bit not 0, reg %x\n" , retval );
-#endif
-    }
-    eeprom_delay(1);
-    retval = 0;
-
-    for (i = EE_TOP_DATA_BIT; i >= 0; i--) {
-        OUTW(EE_ENB | EE_SHIFT_CLK, ee_addr);
-        eeprom_delay(EEPROM_SK_DELAY);
-        retval = (retval << 1) | ((INW(ee_addr) & EE_DATA_READ) ? 1 : 0);
-        eeprom_delay(EEPROM_SK_DELAY);
-        OUTW(EE_ENB, ee_addr);
-        eeprom_delay(EEPROM_SK_DELAY);
-    }
-    
-    // Terminate the EEPROM access.
-    OUTW(EE_ENB & ~EE_CS, ee_addr);
-    eeprom_delay(EEPROM_DONE_DELAY);
-    
-    return retval;
-}
-
-// ------------------------------------------------------------------------
-//
-//                       MDI
-//
-// ------------------------------------------------------------------------
-
-#define SPEED_NOLINK	0
-#define SPEED_10M		10
-#define SPEED_100M		100
-
-// MDI Control Register
-typedef union
-{
-    struct
-    {
-    	cyg_uint32 data   : 16;	// data to write or data read
-    	cyg_uint32 regAdd  : 5;	// PHY register address
-    	cyg_uint32 phyAdd  : 5;	// PHY address
-    	cyg_uint32 op      : 2;	// opcode, 1 for MDI write, 2 for MDI read
-    	cyg_uint32 ready   : 1;	// 1 = operation complete
-    	cyg_uint32 intEnab : 1;	// 1 = interrupt at end of cycle
-    	cyg_uint32 rsrv    : 2;	// reserved
-    } bits;
-    cyg_uint32 word;
-} MDICTL;
-
-static cyg_uint16 readMDI (long ioaddr, cyg_uint8 phyAdd, cyg_uint8 regAdd)
-{
-    int mdi_addr = ioaddr + SCBCtrlMDI;
-    MDICTL mdiCtrl;
-    int num_ms = 0; 
-
-    // prepare for the MDI operation
-    mdiCtrl.bits.ready = MDI_NOT_READY;
-    mdiCtrl.bits.intEnab = MDI_POLLED;	// no interrupts
-    mdiCtrl.bits.op = MDI_READ_OP;
-    mdiCtrl.bits.phyAdd = phyAdd & 0x1f;
-    mdiCtrl.bits.regAdd = regAdd & 0x1f;
-
-    // start the operation
-    OUTL(mdiCtrl.word, mdi_addr);
-
-    // delay a bit
-    udelay (1000);
-
-    // poll for completion */
-    mdiCtrl.word = INL(mdi_addr);
-
-    while ((mdiCtrl.bits.ready == MDI_NOT_READY) && (num_ms != 2000)) { // wait max 2secs
-	mdiCtrl.word = INL(mdi_addr);
-	udelay(1000);
-	num_ms++;
-    }	
-	
-    if (num_ms >= 2000)	{
-	CYG_FAIL ("readMDI Timeout!\n");
-	return -1;
-    }
-    else 
-	return (cyg_uint16)mdiCtrl.bits.data;
-}
-
-
-static void writeMDI (long ioaddr, cyg_uint8 phyAdd, cyg_uint8 regAdd, cyg_uint16 data)
-{
-    int mdi_addr = ioaddr + SCBCtrlMDI;
-    register MDICTL mdiCtrl;
-    int num_ms = 0;
-
-    // prepare for the MDI operation
-    mdiCtrl.bits.ready = MDI_NOT_READY;
-    mdiCtrl.bits.intEnab = MDI_POLLED;  // no interrupts
-    mdiCtrl.bits.op = MDI_WRITE_OP;
-    mdiCtrl.bits.phyAdd = phyAdd & 0x1f;
-    mdiCtrl.bits.regAdd = regAdd & 0x1f;
-    mdiCtrl.bits.data = data & 0xffff;
-
-    // start the operation
-    OUTL(mdiCtrl.word, mdi_addr);
-
-    // delay a bit
-    udelay(1000);
-
-    // poll for completion
-    mdiCtrl.word = INL(mdi_addr);
-
-    while ((mdiCtrl.bits.ready == MDI_NOT_READY) && (num_ms != 2000)) {
-	mdiCtrl.word = INL(mdi_addr);
-	udelay(1000);
-	num_ms++;
-    }	
-    if (num_ms >= 2000)
-	CYG_FAIL ("writeMDI Timeout!\n");
- 
-    return;
-}
-
-static int initPHY (long ioaddr, cyg_uint32 device_type)
-{
-    cyg_uint16 temp_reg;
-    cyg_uint8 revision;
-
-    // strip off revision and phy. id information
-    revision = (cyg_uint8)(device_type & REVISION_MASK);
-    device_type &= ~REVISION_MASK;
-
-    switch (device_type) {
-      case ICS1890_PHY_ID: 
-	temp_reg = readMDI(ioaddr, MDI_DEFAULT_PHY_ADDR, MDI_PHY_CTRL); // get ready for loopback setting
-	writeMDI(ioaddr, MDI_DEFAULT_PHY_ADDR, MDI_PHY_CTRL, temp_reg);
-	break;
-		
-      case DP83840_PHY_ID:  // set the Intel-specified "must set" bits
-	temp_reg = readMDI(ioaddr, MDI_DEFAULT_PHY_ADDR, DP83840_PCR_REG);
-	temp_reg |= (PCR_TXREADY_SEL | PCR_FCONNECT);
-	writeMDI (ioaddr, MDI_DEFAULT_PHY_ADDR, DP83840_PCR_REG, temp_reg);
-
-	// get ready for loopback setting
-	temp_reg = readMDI (ioaddr, MDI_DEFAULT_PHY_ADDR, DP83840_LOOPBACK_REG);
-	temp_reg &= CLEAR_LOOP_BITS;
-	writeMDI (ioaddr, MDI_DEFAULT_PHY_ADDR, DP83840_LOOPBACK_REG, temp_reg);
-	break;
-
-      case I82553_PHY_ID:
-      case I82553_REVAB_PHY_ID:
-      case I82555_PHY_ID:
-	break;
-
-      default:
-	return 1;
-	break;
-  }
-
-  return 0;
-}
-
-
-
-
-
-// ------------------------------------------------------------------------
-//
-//                NETWORK INTERFACE INITIALIZATION
-//
-//  Function : Init82559
-//
-//  Description :
-//       This routine resets, configures, and initializes the chip.
-//       It also clears the ethernet statistics structure, and selects
-//       which statistics are supported by this driver.
-//
-// ------------------------------------------------------------------------
-static bool
-iq80310_i82559_init(struct cyg_netdevtab_entry * ndp)
-{
-    static int initialized = 0; // only probe PCI et al *once*
-
-    struct eth_drv_sc *sc;
-    cyg_uint32 selftest;
-    volatile cyg_uint32 *p_selftest;
-    cyg_uint32 ioaddr;
-    cyg_uint16 checksum;
-    int count;
-    int i, ints;
-    int addr_length;
-    cyg_uint8 mac_address[6];
-    struct i82559 *p_i82559;
-
-#ifdef DEBUG
-    db_printf("iq80310_i82559_init\n");
-#endif
-
-    sc = (struct eth_drv_sc *)(ndp->device_instance);
-    p_i82559 = (struct i82559 *)(sc->driver_private);
-
-    IF_BAD_82559( p_i82559 ) {
-#ifdef DEBUG
-        os_printf( "Bad device private pointer %x\n", sc->driver_private );
-#endif
-        return 0;
-    }
-
-    CHECK_NDP_SC_LINK();
-
-    if ( 0 == initialized++ ) {
-        // then this is the first time ever:
-        if ( ! pci_init_find_82559s() ) {
-#ifdef DEBUG
-            os_printf( "pci_init_find_82559s failed" );
-#endif
-            return 0;
-        }
-    }
-
-    if ( ! p_i82559->found ) // no device on PCI bus
-        return (0);
-
-    ioaddr = p_i82559->io_address; // get I/O address for 82559
-
-#ifdef DEBUG
-    os_printf("Init82559 %d @ %x\n82559 Self Test\n",
-              p_i82559->index, (int)ndp);
-#endif
-
-    ints = Mask82559Interrupt(p_i82559);
-
-    wait_for_cmd_done(ioaddr); // make sure no command operating
-
-    i82559_reset(p_i82559);
-
-    // Perform a system self-test. (get enough mem to round address)
-    if ( (selftest = (cyg_uint32)pciwindow_mem_alloc(32) ) == 0)
-        return (0);
-    p_selftest = (cyg_uint32 *) ((selftest + 15) & ~0xf);
-
-    p_selftest[0] = p_selftest[1] = -1;
-        
-    OUTL( (VIRT_TO_BUS(p_selftest)) | I82559_SELFTEST, ioaddr + SCBPort);
-    count = 0x1FFFFF;                // Timeout for self-test.
-    do {
-        udelay(10);
-    } while ( (p_selftest[1] == -1)  &&  (--count >= 0) );
-
-    Acknowledge82559Interrupt(p_i82559);
-    UnMask82559Interrupt(p_i82559, ints );
-    
-    if (count < 0) {
-        // Test timed out.
-#ifdef DEBUG
-        os_printf("Self test failed\n");
-#endif
-        return (0);
-    }
-#ifdef DEBUG
-    os_printf("  General self-test: %s.\n"
-              "  serial sub-system self-test: %s.\n"
-              "  Internal registers self-test: %s.\n"
-              "  ROM checksum self-test: %s (%08X).\n",
-              p_selftest[1] & 0x1000 ? "failed" : "passed",
-              p_selftest[1] & 0x0020 ? "failed" : "passed",
-              p_selftest[1] & 0x0008 ? "failed" : "passed",
-              p_selftest[1] & 0x0004 ? "failed" : "passed",
-              p_selftest[0]);
-#endif
-
-    // read eeprom and get 82559's mac address
-    addr_length = get_eeprom_size(ioaddr);
-    // (this is the length of the *EEPROM*s address, not MAC address)
-
-    for (checksum = 0, i = 0, count = 0; count < 64; count++) {
-        cyg_uint16 value;
-        // read word from eeprom
-        value = read_eeprom(ioaddr, count, addr_length);
-#ifdef DEBUG_EE
-        // os_printf( "%2d: %04x\n", count, value );
-#endif
-        checksum += value;
-        if (count < 3) {
-            mac_address[i++] = value & 0xFF;
-            mac_address[i++] = (value >> 8) & 0xFF;
-        }
-    }
-
-    // If the EEPROM checksum is wrong, the MAC address read from the
-    // EEPROM is probably wrong as well. In that case, we don't set
-    // mac_addr_ok, but continue the initialization. If then somebody calls
-    // i82559_start without calling eth_set_mac_address() first, we refuse
-    // to bring up the interface, because running with an invalid MAC
-    // address is not a very brilliant idea.
-
-#if 0
-    if ((checksum & 0xFFFF) != 0xBABA)  {
-        // selftest verified checksum, verify again
-#ifdef DEBUG_EE
-        os_printf( "Warning: Invalid EEPROM checksum %04X for device %d\n",
-                   checksum, p_i82559->index);
-#endif
-    } else
-#endif
-    {
-        p_i82559->mac_addr_ok = 1;
-#ifdef DEBUG_EE
-        os_printf("Valid EEPROM checksum\n");
-#endif
-    }
-#ifdef DEBUG
-    os_printf("MAC Address = %02X %02X %02X %02X %02X %02X\n",
-              mac_address[0], mac_address[1], mac_address[2], mac_address[3],
-              mac_address[4], mac_address[5]);
-#endif
-
-    // record the MAC address in the device structure
-    p_i82559->mac_address[0] = mac_address[0];
-    p_i82559->mac_address[1] = mac_address[1];
-    p_i82559->mac_address[2] = mac_address[2];
-    p_i82559->mac_address[3] = mac_address[3];
-    p_i82559->mac_address[4] = mac_address[4];
-    p_i82559->mac_address[5] = mac_address[5];
-    
-    // and record the net dev pointer
-    p_i82559->ndp = (void *)ndp;
-    
-    InitRxRing(p_i82559);
-    InitTxRing(p_i82559);
-
-    // Initialize upper level driver
-    if ( p_i82559->mac_addr_ok )
-        (sc->funs->eth_drv->init)(sc, &(p_i82559->mac_address[0]) );
-    else
-        (sc->funs->eth_drv->init)(sc, 0 );
-
-    return (1);
-}
-
-// ------------------------------------------------------------------------
-//
-//  Function : i82559_start
-//
-// ------------------------------------------------------------------------
-static void i82559_start( struct eth_drv_sc *sc,
-                          unsigned char *enaddr, int flags )
-{
-    struct i82559 *p_i82559;
-    cyg_uint32 ioaddr, phy_id;
-    cyg_uint16 phy_addr_reg, temp1, temp2;
-    int broadcom_flag = false;
-    int link_speed = SPEED_NOLINK;
-#ifdef KEEP_STATISTICS
-    void *p_statistics;
-#endif
-#ifdef CYGPKG_NET
-    struct ifnet *ifp = &sc->sc_arpcom.ac_if;
-#endif
-
-    p_i82559 = (struct i82559 *)sc->driver_private;
-    
-    IF_BAD_82559( p_i82559 ) {
-#ifdef DEBUG
-        os_printf( "i82559_start: Bad device pointer %x\n", p_i82559 );
-#endif
-        return;
-    }
-
-    if ( ! p_i82559->mac_addr_ok ) {
-#ifdef DEBUG
-        os_printf("i82559_start %d: invalid MAC address, "
-                  "can't bring up interface\n",
-                  p_i82559->index );
-#endif
-        return;
-    }
-
-    if ( p_i82559->active )
-        i82559_stop( sc );
-
-    ioaddr = p_i82559->io_address; // get 82559's I/O address
-
-    phy_id = readMDI(ioaddr ,MDI_DEFAULT_PHY_ADDR, MDI_PHY_ID_1) << 16;
-    phy_id |= readMDI(ioaddr ,MDI_DEFAULT_PHY_ADDR, MDI_PHY_ID_2);
-
-    if ((phy_id & 0xfffffff0) == I82555_PHY_ID)	{
-#ifdef DEBUG
-	os_printf ("Intel 82555/558 PHY detected...\n");
-#endif
-	// dummy read for reliable status
-	(void)readMDI (ioaddr, MDI_DEFAULT_PHY_ADDR, MDI_PHY_STAT);
-    
-	temp1 = readMDI (ioaddr, MDI_DEFAULT_PHY_ADDR, MDI_PHY_STAT);
-
-	phy_addr_reg = readMDI (ioaddr, MDI_DEFAULT_PHY_ADDR, I82555_STATCTRL_REG);
-
-	if (temp1 & MDI_STAT_LINK) // speed only valid with good LNK
-	    link_speed = (phy_addr_reg & I82555_100_MBPS) ? SPEED_100M : SPEED_10M;
-#ifdef DEBUG
-	else
-	    os_printf ("Connect Speed is NOT VALID\n");
-#endif
-    }
-
-    if ((phy_id & 0xfffffff0) == ICS1890_PHY_ID) {
-#ifdef DEBUG
-	os_printf ("Integrated Circuit Systems ICS1890 PHY detected...\n");
-	os_printf ("Revision = %c\n", 'A' + (phy_id & REVISION_MASK));
-#endif
-	// dummy read for reliable status
-	(void)readMDI (ioaddr, MDI_DEFAULT_PHY_ADDR, ICS1890_QUICKPOLL_REG);
-	temp1 = readMDI (ioaddr, MDI_DEFAULT_PHY_ADDR, ICS1890_QUICKPOLL_REG);
-
-	if (temp1 & QUICK_LINK_VALID) // speed only valid with good LNK
-	    link_speed = (temp1 & QUICK_100_MBPS) ? SPEED_100M : SPEED_10M;
-#ifdef DEBUG
-	else
-	    os_printf ("Connect Speed is NOT VALID\n");
-#endif
-    }
-
-    if ((phy_id & 0xfffffff0) == DP83840_PHY_ID) {
-#ifdef DEBUG
-	os_printf ("National DP83840 PHY detected...\n");
-	os_printf ("Revision = %c\n", 'A' + (phy_id & REVISION_MASK));
-#endif
-
-	// dummy read for reliable status
-	(void)readMDI (ioaddr, MDI_DEFAULT_PHY_ADDR, MDI_PHY_STAT);
-	temp1 = readMDI (ioaddr, MDI_DEFAULT_PHY_ADDR, MDI_PHY_STAT);
-
-	phy_addr_reg = readMDI (ioaddr ,MDI_DEFAULT_PHY_ADDR, DP83840_PHY_ADDR_REG);
-
-	if (temp1 & MDI_STAT_LINK) // speed only valid with good LNK
-	    link_speed = (phy_addr_reg & PHY_ADDR_SPEED_10_MBPS) ? SPEED_10M : SPEED_100M;
-#ifdef DEBUG
-	else
-	    os_printf ("Connect Speed is NOT VALID\n");
-#endif
-    }
-
-    if ((phy_id & 0xfffffff0) == I82553_PHY_ID)	{
-#ifdef DEBUG
-	os_printf ("Intel 82553 PHY detected...\n");
-	os_printf ("Revision = %c\n", 'A' + (phy_id & REVISION_MASK));
-#endif
-	broadcom_flag = true;
-    }
-
-    if (phy_id == I82553_REVAB_PHY_ID) {
-#ifdef DEBUG
-	os_printf ("Intel 82553 PHY detected...\n");
-	os_printf ("Revision = B\n");
-#endif
-	broadcom_flag = true;
-    }
-
-    if (broadcom_flag == true) {
-	temp2 = readMDI (ioaddr, MDI_DEFAULT_PHY_ADDR, I82553_PHY_EXT_REG0);
-
-	// dummy read for reliable status
-	(void)readMDI (ioaddr ,MDI_DEFAULT_PHY_ADDR, MDI_PHY_STAT);
-	temp1 = readMDI (ioaddr ,MDI_DEFAULT_PHY_ADDR, MDI_PHY_STAT);
-
-	if (temp1 & MDI_STAT_LINK) { // speed only valid with good LNK
-	    link_speed = (temp2 & EXT_REG0_100_MBPS) ? SPEED_100M : SPEED_10M;
-#ifdef DEBUG
-	} else {
-	    os_printf ("Connect Speed is NOT VALID\n");
-#endif
-	}
-    }
-
-#ifdef KEEP_STATISTICS
-#ifdef CYGDBG_DEVS_ETH_ARM_IQ80310_KEEP_82559_STATISTICS
-    p_i82559->p_statistics =
-        p_statistics = pciwindow_mem_alloc(sizeof(I82559_COUNTERS));
-    memset(p_statistics, 0xFFFFFFFF, sizeof(I82559_COUNTERS));
-    wait_for_cmd_done(ioaddr); // make sure no command operating
-                                        // set statistics dump address
-    OUTL(VIRT_TO_BUS(p_statistics), ioaddr + SCBPointer);
-    OUTW(SCB_M | CU_STATSADDR, ioaddr + SCBCmd);
-
-    wait_for_cmd_done(ioaddr); // make sure no command operating
-    OUTW(SCB_M | CU_DUMPSTATS, ioaddr + SCBCmd); // start register dump
-#endif
-#endif
-
-    // Set the base address
-    wait_for_cmd_done(ioaddr);
-    OUTL(0, ioaddr + SCBPointer);       // load ru base address = 0
-    OUTW(SCB_M | RUC_ADDR_LOAD, ioaddr + SCBCmd);
-    udelay( 1000 );                     // load pointer to Rx Ring
-    OUTL(VIRT_TO_BUS(p_i82559->rx_ring[0]), ioaddr + SCBPointer);
-    OUTW(RUC_START, ioaddr + SCBCmd);
-    
-    p_i82559->active = 1;
-
-    initPHY(ioaddr, phy_id);
-
-#ifdef CYGPKG_NET
-    if (( 0
-#ifdef ETH_DRV_FLAGS_PROMISC_MODE
-         != (flags & ETH_DRV_FLAGS_PROMISC_MODE)
-#endif
-        ) || (ifp->if_flags & IFF_PROMISC)
-        ) {
-        eth_set_promiscuous_mode(p_i82559);
-    }
-#endif
-#ifdef DEBUG
-    {
-        int status = i82559_status( sc );
-        os_printf("i82559_start %d flg %x Link = %s, %s Mbps, %s Duplex\n",
-                  p_i82559->index,
-                  *(int *)p_i82559,
-                  status & GEN_STATUS_LINK ? "Up" : "Down",
-                  status & GEN_STATUS_100MBPS ?  "100" : "10",
-                  status & GEN_STATUS_FDX ? "Full" : "Half");
-    }
-#endif
-}
-
-// ------------------------------------------------------------------------
-//
-//  Function : i82559_status
-//
-// ------------------------------------------------------------------------
-int i82559_status( struct eth_drv_sc *sc )
-{
-    int status;
-    struct i82559 *p_i82559;
-    cyg_uint32 ioaddr;
-    p_i82559 = (struct i82559 *)sc->driver_private;
-    
-    IF_BAD_82559( p_i82559 ) {
-#ifdef DEBUG
-        os_printf( "i82559_status: Bad device pointer %x\n", p_i82559 );
-#endif
-        return 0;
-    }
-
-    ioaddr = p_i82559->io_address; // get 82559's I/O address
-
-    status = INB(ioaddr + SCBGenStatus);
-
-    return status;
-}
-
-// ------------------------------------------------------------------------
-//
-//  Function : BringDown82559
-//
-// ------------------------------------------------------------------------
-
-static void i82559_stop( struct eth_drv_sc *sc )
-{
-    struct i82559 *p_i82559;
-
-    p_i82559 = (struct i82559 *)sc->driver_private;
-
-    IF_BAD_82559( p_i82559 ) {
-#ifdef DEBUG
-        os_printf( "i82559_stop: Bad device pointer %x\n", p_i82559 );
-#endif
-        return;
-    }
-   
-#ifdef DEBUG
-    os_printf("i82559_stop %d flg %x\n", p_i82559->index, *(int *)p_i82559 );
-#endif
-
-    p_i82559->active = 0;               // stop people tormenting it
-    i82559_reset(p_i82559);             // that should stop it
-
-    ResetRxRing( p_i82559 );
-    ResetTxRing( p_i82559 );
-}
-
-
-// ------------------------------------------------------------------------
-//
-//  Function : InitRxRing
-//
-// ------------------------------------------------------------------------
-static void InitRxRing(struct i82559* p_i82559)
-{
-    int i;
-    RFD *rfd;
-    RFD *p_rfd = 0;
-#ifdef DEBUG_82559
-    os_printf("InitRxRing %d\n", p_i82559->index);
-#endif
-    for ( i = 0; i < MAX_RX_DESCRIPTORS; i++ ) {
-        rfd = (RFD *)pciwindow_mem_alloc(sizeof(RFD) + MAX_RX_PACKET_SIZE);
-        p_i82559->rx_ring[i] = rfd;
-        if ( i )
-            p_rfd->link = VIRT_TO_BUS(rfd);
-        p_rfd = (RFD *)rfd;
-    }
-    // link last RFD to first:
-    p_rfd->link = VIRT_TO_BUS(p_i82559->rx_ring[0]);
-
-    ResetRxRing( p_i82559 );
-}
-
-// ------------------------------------------------------------------------
-//
-//  Function : ResetRxRing
-//
-// ------------------------------------------------------------------------
-static void ResetRxRing(struct i82559* p_i82559)
-{
-    RFD *p_rfd;
-    int i;
-#ifdef DEBUG_82559
-    os_printf("ResetRxRing %d\n", p_i82559->index);
-#endif
-    for ( i = 0; i < MAX_RX_DESCRIPTORS; i++ ) {
-        p_rfd = p_i82559->rx_ring[i];
-        CYG_ASSERT( (cyg_uint8 *)p_rfd >= i82559_heap_base, "rfd under" );
-        CYG_ASSERT( (cyg_uint8 *)p_rfd <  i82559_heap_free, "rfd over" );
-        CYG_ASSERT( p_i82559->rx_ring[
-                 ( i ? (i-1) : (MAX_RX_DESCRIPTORS-1) )
-            ]->link == VIRT_TO_BUS(p_rfd), "rfd linked list broken" );
-        p_rfd->rxstatus = 0;
-        p_rfd->count = 0;
-        p_rfd->f = 0;
-        p_rfd->eof = 0;
-        p_rfd->rdb_address = 0xFFFFFFFF;
-        p_rfd->size = MAX_RX_PACKET_SIZE;
-    }
-    p_i82559->next_rx_descriptor = 0;
-    // And set an end-of-list marker in the previous one.
-    p_rfd->rxstatus = RFD_STATUS_EL;
-}
-
-// ------------------------------------------------------------------------
-//
-//  Function : PacketRxReady        (Called from delivery thread)
-//
-// ------------------------------------------------------------------------
-static void PacketRxReady(struct i82559* p_i82559)
-{
-    RFD *p_rfd;
-    int next_descriptor;
-    int length, ints;
-    struct cyg_netdevtab_entry *ndp;
-    struct eth_drv_sc *sc;
-    cyg_uint32 ioaddr;
-    cyg_uint16 status;
-
-    ndp = (struct cyg_netdevtab_entry *)(p_i82559->ndp);
-    sc = (struct eth_drv_sc *)(ndp->device_instance);
-
-    CHECK_NDP_SC_LINK();
-
-    ioaddr = p_i82559->io_address;
-
-    next_descriptor = p_i82559->next_rx_descriptor;
-    p_rfd = p_i82559->rx_ring[next_descriptor];
-
-    CYG_ASSERT( (cyg_uint8 *)p_rfd >= i82559_heap_base, "rfd under" );
-    CYG_ASSERT( (cyg_uint8 *)p_rfd <  i82559_heap_free, "rfd over" );
-
-    while ( p_rfd->rxstatus & RFD_STATUS_C ) {
-        p_rfd->rxstatus_hi |= RFD_STATUS_HI_EL;
-        length = p_rfd->count;
-
-#ifdef DEBUG_82559
-        os_printf( "Device %d (eth%d), rx descriptor %d:\n", 
-                   p_i82559->index, p_i82559->index, next_descriptor );
-//        dump_rfd( p_rfd, 1 );
-#endif
-
-        p_i82559->next_rx_descriptor = next_descriptor;
-        // Check for bogusly short packets; can happen in promisc mode:
-        // Asserted against and checked by upper layer driver.
-#ifdef CYGPKG_NET
-        if ( length > sizeof( struct ether_header ) )
-            // then it is acceptable; offer the data to the network stack
-#endif
-        (sc->funs->eth_drv->recv)( sc, length );
-
-        p_rfd->count = 0;
-        p_rfd->f = 0;
-        p_rfd->eof = 0;
-        p_rfd->rxstatus_lo = 0;
-
-        // The just-emptied slot is now ready for re-use and already marked EL;
-        // we can now remove the EL marker from the previous one.
-        if ( 0 == next_descriptor )
-            p_rfd = p_i82559->rx_ring[ MAX_RX_DESCRIPTORS-1 ];
-        else
-            p_rfd = p_i82559->rx_ring[ next_descriptor-1 ];
-        // The previous one: check it *was* marked before clearing.
-        CYG_ASSERT( p_rfd->rxstatus_hi & RFD_STATUS_HI_EL, "No prev EL" );
-        p_rfd->rxstatus_hi = 0; // that word is not written by the device.
-
-#ifdef KEEP_STATISTICS
-        statistics[p_i82559->index].rx_deliver++;
-#endif
-        if (++next_descriptor >= MAX_RX_DESCRIPTORS)
-            next_descriptor = 0;
-        p_rfd = p_i82559->rx_ring[next_descriptor];
-
-        CYG_ASSERT( (cyg_uint8 *)p_rfd >= i82559_heap_base, "rfd under" );
-        CYG_ASSERT( (cyg_uint8 *)p_rfd <  i82559_heap_free, "rfd over" );
-#ifdef CYGPKG_REDBOOT
-	// Need to make this decision at runtime.
-	break;
-#endif
-    }
-
-    // See if the RU has gone idle (usually because of out of resource
-    // condition) and restart it if needs be.
-    ints = Mask82559Interrupt(p_i82559);
-    status = INW(ioaddr + SCBStatus);
-    if ( RU_STATUS_READY != (status & RU_STATUS_MASK) ) {
-        // Acknowledge the RX INT sources
-        OUTW( SCB_INTACK_RX, ioaddr + SCBStatus);
-        // (see pages 6-10 & 6-90)
-
-#ifdef KEEP_STATISTICS
-        statistics[p_i82559->index].rx_restart++;
-#endif
-        // There's an end-of-list marker out there somewhere...
-        // So mop it up; it takes a little time but this is infrequent.
-        ResetRxRing( p_i82559 );  
-        next_descriptor = 0;        // re-initialize next desc.
-        // wait for SCB command complete
-        wait_for_cmd_done(ioaddr);
-        // load pointer to Rx Ring
-        OUTL(VIRT_TO_BUS(p_i82559->rx_ring[0]),
-             ioaddr + SCBPointer);
-        OUTW(RUC_START, ioaddr + SCBCmd);
-        Acknowledge82559Interrupt(p_i82559);
-    }
-    UnMask82559Interrupt(p_i82559, ints);
-
-    p_i82559->next_rx_descriptor = next_descriptor;
-}
-
-// and the callback function
-
-static void i82559_recv( struct eth_drv_sc *sc,
-                         struct eth_drv_sg *sg_list, int sg_len )
-{
-    struct i82559 *p_i82559;
-    RFD *p_rfd;
-    int next_descriptor;
-    int total_len;
-    struct eth_drv_sg *last_sg;
-    volatile cyg_uint8 *from_p;
-
-    p_i82559 = (struct i82559 *)sc->driver_private;
-    
-    IF_BAD_82559( p_i82559 ) {
-#ifdef DEBUG
-        os_printf( "i82559_recv: Bad device pointer %x\n", p_i82559 );
-#endif
-        return;
-    }
-
-    next_descriptor = p_i82559->next_rx_descriptor;
-    p_rfd = p_i82559->rx_ring[next_descriptor];
-    
-    CYG_ASSERT( (cyg_uint8 *)p_rfd >= i82559_heap_base, "rfd under" );
-    CYG_ASSERT( (cyg_uint8 *)p_rfd <  i82559_heap_free, "rfd over" );
-
-    CYG_ASSERT( p_rfd->rxstatus & RFD_STATUS_C, "No complete frame" );
-    CYG_ASSERT( p_rfd->rxstatus & RFD_STATUS_EL, "No marked frame" );
-
-    CYG_ASSERT( p_rfd->rxstatus_lo & RFD_STATUS_LO_C, "No complete frame 2" );
-    CYG_ASSERT( p_rfd->rxstatus_hi & RFD_STATUS_HI_EL, "No marked frame 2" );
-    
-    if ( 0 == (p_rfd->rxstatus & RFD_STATUS_C) )
-        return;
-        
-    total_len = p_rfd->count;
-    
-#ifdef DEBUG_82559
-    os_printf("Rx %d %x (status %x): %d sg's, %d bytes\n",
-              p_i82559->index, (int)p_i82559, p_rfd->rxstatus, sg_len, total_len);
-#endif
-
-    // Copy the data to the network stack
-    from_p = &p_rfd->buffer[0];
-
-    // check we have memory to copy into; we would be called even if
-    // caller was out of memory in order to maintain our state.
-    if ( 0 == sg_len || 0 == sg_list )
-        return; // caller was out of mbufs
-
-    CYG_ASSERT( 0 < sg_len, "sg_len underflow" );
-    CYG_ASSERT( MAX_ETH_DRV_SG >= sg_len, "sg_len overflow" );
-
-    for ( last_sg = &sg_list[sg_len]; sg_list < last_sg; sg_list++ ) {
-        cyg_uint8 *to_p;
-        int l;
-            
-        to_p = (cyg_uint8 *)(sg_list->buf);
-        l = sg_list->len;
-
-        CYG_ASSERT( 0 <= l, "sg length -ve" );
-
-        if ( 0 >= l || 0 == to_p )
-            return; // caller was out of mbufs
-
-        if ( l > total_len )
-            l = total_len;
-
-        memcpy( to_p, (unsigned char *)from_p, l );
-        from_p += l;
-        total_len -= l;
-    }
-
-    CYG_ASSERT( 0 == total_len, "total_len mismatch in rx" );
-    CYG_ASSERT( last_sg == sg_list, "sg count mismatch in rx" );
-    CYG_ASSERT( &p_rfd->buffer[0] < from_p, "from_p wild in rx" );
-    CYG_ASSERT( &p_rfd->buffer[0] + MAX_RX_PACKET_SIZE >= from_p,
-                "from_p overflow in rx" );
-}    
-
-
-// ------------------------------------------------------------------------
-//
-//  Function : InitTxRing
-//
-// ------------------------------------------------------------------------
-static void InitTxRing(struct i82559* p_i82559)
-{
-    int i;
-    cyg_uint32 ioaddr;
-
-#ifdef DEBUG_82559
-    os_printf("InitTxRing %d\n", p_i82559->index);
-#endif
-    ioaddr = p_i82559->io_address;
-    for ( i = 0; i < MAX_TX_DESCRIPTORS; i++) {
-        p_i82559->tx_ring[i] = (TxCB *)pciwindow_mem_alloc(
-            sizeof(TxCB) + MAX_TX_PACKET_SIZE);
-    }
-
-    ResetTxRing(p_i82559);
-}
-
-// ------------------------------------------------------------------------
-//
-//  Function : ResetTxRing
-//
-// ------------------------------------------------------------------------
-static void ResetTxRing(struct i82559* p_i82559)
-{
-    int i;
-    cyg_uint32 ioaddr;
-
-#ifdef DEBUG_82559
-    os_printf("ResetTxRing %d\n", p_i82559->index);
-#endif
-    ioaddr = p_i82559->io_address;
-    p_i82559->tx_descriptor_add =
-        p_i82559->tx_descriptor_active = 
-        p_i82559->tx_descriptor_remove = 0;
-    p_i82559->tx_in_progress =
-        p_i82559->tx_queue_full = 0;
-
-    for ( i = 0; i < MAX_TX_DESCRIPTORS; i++) {
-        TxCB *p_txcb = p_i82559->tx_ring[i];
-        CYG_ASSERT( (cyg_uint8 *)p_txcb >= i82559_heap_base, "txcb under" );
-        CYG_ASSERT( (cyg_uint8 *)p_txcb <  i82559_heap_free, "txcb over" );
-
-        p_txcb->txstatus = 0;
-        p_txcb->command = 0;
-        p_txcb->link = VIRT_TO_BUS((cyg_uint32)p_txcb);
-        p_txcb->tbd_address = 0xFFFFFFFF;
-        p_txcb->tbd_number = 0;
-        p_txcb->tx_threshold = 16;
-        p_txcb->eof = 1;
-        p_txcb->count = 0;
-        p_i82559->tx_keys[i] = 0;
-    }
-    
-    wait_for_cmd_done(ioaddr);
-    OUTL(0, ioaddr + SCBPointer);
-    OUTW(SCB_M | CU_ADDR_LOAD, ioaddr + SCBCmd);
-}
-
-// ------------------------------------------------------------------------
-//
-//  Function : TxMachine          (Called from FG & ISR)
-//
-// This steps the Tx Machine onto the next record if necessary - allowing
-// for missed interrupts, and so on.
-// ------------------------------------------------------------------------
-
-static void TxMachine(struct i82559* p_i82559)
-{
-    int tx_descriptor_active;
-    cyg_uint32 ioaddr;
-
-    tx_descriptor_active = p_i82559->tx_descriptor_active;
-    ioaddr = p_i82559->io_address;  
-    
-    // See if the CU is idle when we think it isn't; this is the only place
-    // tx_descriptor_active is advanced. (Also recovers from a dropped intr)
-    if ( p_i82559->tx_in_progress ) {
-        cyg_uint16 status;
-        status = INW(ioaddr + SCBStatus);
-        if ( 0 == (status & CU_STATUS_MASK) ) {
-            // It is idle.  So ack the TX interrupts
-            OUTW( SCB_INTACK_TX, ioaddr + SCBStatus);
-            // (see pages 6-10 & 6-90)
-
-            // and step on to the next queued tx.
-            p_i82559->tx_in_progress = 0;
-            if ( ++tx_descriptor_active >= MAX_TX_DESCRIPTORS )
-                tx_descriptor_active = 0;
-            p_i82559->tx_descriptor_active = tx_descriptor_active;
-        }
-    }
-
-    // is the CU idle, and there a next tx to set going?
-    if ( ( ! p_i82559->tx_in_progress )
-         && p_i82559->tx_descriptor_add != tx_descriptor_active ) {
-        TxCB *p_txcb;
-        p_txcb = p_i82559->tx_ring[tx_descriptor_active];
-        CYG_ASSERT( (cyg_uint8 *)p_txcb >= i82559_heap_base, "txcb under" );
-        CYG_ASSERT( (cyg_uint8 *)p_txcb <  i82559_heap_free, "txcb over" );
-#ifdef DEBUG_82559
-        os_printf("Tx %d %x: Starting Engines, KEY %x\n",
-                  p_i82559->index, (int)p_i82559, key );
-#endif
-        // make sure no command operating
-        wait_for_cmd_done(ioaddr); 
-        // start Tx operation
-        OUTL(VIRT_TO_BUS(p_txcb), ioaddr + SCBPointer);
-        OUTW(CU_START, ioaddr + SCBCmd);
-        p_i82559->tx_in_progress = 1;
-    }
-}
-
-// ------------------------------------------------------------------------
-//
-//  Function : TxDone          (Called from delivery thread)
-//
-// This returns Tx's from the Tx Machine to the stack (ie. reports
-// completion) - allowing for missed interrupts, and so on.
-// ------------------------------------------------------------------------
-
-static void TxDone(struct i82559* p_i82559)
-{
-    struct cyg_netdevtab_entry *ndp;
-    struct eth_drv_sc *sc;
-    int tx_descriptor_remove = p_i82559->tx_descriptor_remove;
-
-    ndp = (struct cyg_netdevtab_entry *)(p_i82559->ndp);
-    sc = (struct eth_drv_sc *)(ndp->device_instance);
-
-    CHECK_NDP_SC_LINK();
-    
-    // "Done" txen are from here to active, OR 
-    // the remove one if the queue is full AND its status is nonzero:
-    while (  (tx_descriptor_remove != p_i82559->tx_descriptor_active) ||
-             ( p_i82559->tx_queue_full &&
-              (0 != p_i82559->tx_ring[ tx_descriptor_remove ]->txstatus) ) ) {
-        unsigned long key = p_i82559->tx_keys[ tx_descriptor_remove ];
-#ifdef DEBUG_82559
-        os_printf("TxDone %d %x: KEY %x\n",
-                  p_i82559->index, (int)p_i82559, key );
-#endif
-        (sc->funs->eth_drv->tx_done)( sc, key, 1 /* status */ );
-        
-        if ( ++tx_descriptor_remove >= MAX_TX_DESCRIPTORS )
-            tx_descriptor_remove = 0;
-        p_i82559->tx_descriptor_remove = tx_descriptor_remove;
-        p_i82559->tx_queue_full = 0;
-    }
-}
-
-
-// ------------------------------------------------------------------------
-//
-//  Function : i82559_can_send
-//
-// ------------------------------------------------------------------------
-
-static int 
-i82559_can_send(struct eth_drv_sc *sc)
-{
-    struct i82559 *p_i82559;
-    int ints;
-
-    p_i82559 = (struct i82559 *)sc->driver_private;
-
-    IF_BAD_82559( p_i82559 ) {
-#ifdef DEBUG
-        os_printf( "i82559_send: Bad device pointer %x\n", p_i82559 );
-#endif
-        return 0;
-    }
-    
-    // Advance TxMachine atomically
-    ints = Mask82559Interrupt(p_i82559);
-    TxMachine(p_i82559);
-    Acknowledge82559Interrupt(p_i82559); // This can eat an Rx interrupt, so
-    PacketRxReady(p_i82559);
-    UnMask82559Interrupt(p_i82559,ints);
-
-    return ! p_i82559->tx_queue_full;
-}
-
-// ------------------------------------------------------------------------
-//
-//  Function : i82559_send
-//
-// ------------------------------------------------------------------------
-
-static void 
-i82559_send(struct eth_drv_sc *sc,
-            struct eth_drv_sg *sg_list, int sg_len, int total_len,
-            unsigned long key)
-{
-    struct i82559 *p_i82559;
-    int tx_descriptor_add, ints;
-    TxCB *p_txcb;
-    cyg_uint32 ioaddr;
-
-    p_i82559 = (struct i82559 *)sc->driver_private;
-
-    IF_BAD_82559( p_i82559 ) {
-#ifdef DEBUG
-        os_printf( "i82559_send: Bad device pointer %x\n", p_i82559 );
-#endif
-        return;
-    }
-
-#ifdef DEBUG_82559
-    os_printf("Tx %d %x: %d sg's, %d bytes, KEY %x\n",
-              p_i82559->index, (int)p_i82559, sg_len, total_len, key );
-#endif
-
-    if ( ! p_i82559->active )
-        return;                         // device inactive, no return
-#ifdef KEEP_STATISTICS
-    statistics[p_i82559->index].tx_count++;
-#endif
-    ioaddr = p_i82559->io_address;      // get device I/O address
-
-    if ( p_i82559->tx_queue_full ) {
-#ifdef KEEP_STATISTICS
-        statistics[p_i82559->index].tx_dropped++;
-#endif
-#ifdef DEBUG_82559
-        os_printf( "i82559_send: Queue full, device %x, key %x\n",
-                   p_i82559, key );
-#endif
-    }
-    else {
-        struct eth_drv_sg *last_sg;
-        volatile cyg_uint8 *to_p;
-
-        tx_descriptor_add = p_i82559->tx_descriptor_add;
-
-        p_i82559->tx_keys[tx_descriptor_add] = key;
-
-        p_txcb = p_i82559->tx_ring[tx_descriptor_add];
-
-        CYG_ASSERT( (cyg_uint8 *)p_txcb >= i82559_heap_base, "txcb under" );
-        CYG_ASSERT( (cyg_uint8 *)p_txcb <  i82559_heap_free, "txcb over" );
-
-        p_txcb->txstatus = 0;
-        p_txcb->command = TxCB_CMD_TRANSMIT | TxCB_CMD_S
-                                | TxCB_CMD_I | TxCB_CMD_EL;
-        p_txcb->link = VIRT_TO_BUS((cyg_uint32)p_txcb);
-        p_txcb->tbd_address = 0xFFFFFFFF;
-        p_txcb->tbd_number = 0;
-        p_txcb->tx_threshold = 16;
-        p_txcb->eof = 1;
-        p_txcb->count = total_len;
-
-        // Copy from the sglist into the txcb
-        to_p = &p_txcb->buffer[0];
-
-        CYG_ASSERT( 0 < sg_len, "sg_len underflow" );
-        CYG_ASSERT( MAX_ETH_DRV_SG >= sg_len, "sg_len overflow" );
-
-        for ( last_sg = &sg_list[sg_len]; sg_list < last_sg; sg_list++ ) {
-            cyg_uint8 *from_p;
-            int l;
-            
-            from_p = (cyg_uint8 *)(sg_list->buf);
-            l = sg_list->len;
-
-            if ( l > total_len )
-                l = total_len;
-
-            memcpy( (unsigned char *)to_p, from_p, l );
-            to_p += l;
-            total_len -= l;
-
-            if ( 0 > total_len ) 
-                break; // Should exit via sg_last normally
-        }
-
-        CYG_ASSERT( 0 == total_len, "length mismatch in tx" );
-        CYG_ASSERT( last_sg == sg_list, "sg count mismatch in tx" );
-        CYG_ASSERT( &p_txcb->buffer[0] < to_p, "to_p wild in tx" );
-        CYG_ASSERT( &p_txcb->buffer[0] + MAX_TX_PACKET_SIZE >= to_p,
-                    "to_p overflow in tx" );
-  
-        // Next descriptor
-        if ( ++tx_descriptor_add >= MAX_TX_DESCRIPTORS)
-            tx_descriptor_add = 0;
-        p_i82559->tx_descriptor_add = tx_descriptor_add;
-
-        // From this instant, interrupts can advance the world and start,
-        // even complete, this tx request...
-
-        if ( p_i82559->tx_descriptor_remove == tx_descriptor_add )
-            p_i82559->tx_queue_full = 1;
-    }
-
-    // Try advancing the Tx Machine regardless
-
-    // no more interrupts until started
-    ints = Mask82559Interrupt(p_i82559);
-
-    // Check that either:
-    //     tx is already active, there is other stuff queued,
-    // OR  this tx just added is the current active one
-    // OR  this tx just added is already complete
-    CYG_ASSERT(
-        // The machine is busy:
-        (p_i82559->tx_in_progress == 1) ||
-        // or: The machine is idle and this just added is the next one
-        (((p_i82559->tx_descriptor_add-1) == p_i82559->tx_descriptor_active)
-         || ((0 == p_i82559->tx_descriptor_add) &&
-             ((MAX_TX_DESCRIPTORS-1) == p_i82559->tx_descriptor_active))) ||
-        // or: This tx is already complete
-        (p_i82559->tx_descriptor_add == p_i82559->tx_descriptor_active),
-                "Active/add mismatch" );
-
-    // Advance TxMachine atomically
-    TxMachine(p_i82559);
-    Acknowledge82559Interrupt(p_i82559); // This can eat an Rx interrupt, so
-    PacketRxReady(p_i82559);
-    UnMask82559Interrupt(p_i82559, ints);
-}
-
-// ------------------------------------------------------------------------
-//
-//  Function : i82559_reset
-//
-// ------------------------------------------------------------------------
-static void i82559_reset(struct i82559* p_i82559)
-{
-    cyg_uint32 ioaddr;
-    int count;
-
-    ioaddr = p_i82559->io_address;
-    // make sure no command operating
-    wait_for_cmd_done(ioaddr);   
- 
-    OUTL(I82559_SELECTIVE_RESET, ioaddr + SCBPort);
-  
-    for (count = 10 ; count-- ; ) {
-        udelay(1000);
-    }
-
-    OUTL(I82559_RESET, ioaddr + SCBPort);
-    
-    for (count = 10 ; count-- ; ) {
-      udelay(1000);
-    }
-}
-
-
-// ------------------------------------------------------------------------
-//
-//                       INTERRUPT HANDLERS
-//
-// ------------------------------------------------------------------------
-
-static cyg_uint32 eth_isr(cyg_vector_t vector, cyg_addrword_t data)
-{
-    struct i82559* p_i82559 = (struct i82559 *)data;
-    cyg_uint16 status;
-    cyg_uint32 ioaddr;
-
-    IF_BAD_82559( p_i82559 ) {
-#ifdef DEBUG
-        os_printf( "i82559_isr: Bad device pointer %x\n", p_i82559 );
-#endif
-        return 0;
-    }
-
-    ioaddr = p_i82559->io_address;
-    status = INW(ioaddr + SCBStatus);
-    // Acknowledge all INT sources that were active
-    OUTW( status & SCB_INTACK_MASK, ioaddr + SCBStatus);
-    // (see pages 6-10 & 6-90)
-
-#ifdef KEEP_STATISTICS
-    statistics[p_i82559->index].interrupts++;
-
-    // receiver left ready state ?
-    if ( status & SCB_STATUS_RNR )
-        statistics[p_i82559->index].rx_resource++;
-
-    // frame receive interrupt ?
-    if ( status & SCB_STATUS_FR )
-        statistics[p_i82559->index].rx_count++;
-
-    // transmit interrupt ?
-    if ( status & SCB_STATUS_CX )
-        statistics[p_i82559->index].tx_complete++;
-#endif
-
-    // Advance the Tx Machine regardless
-    TxMachine(p_i82559);
-
-    // it should have settled down now...
-    Acknowledge82559Interrupt(p_i82559);
-
-    return CYG_ISR_CALL_DSR;        // schedule DSR
-}
-
-
-// ------------------------------------------------------------------------
-
-static 
-void eth_dsr(cyg_vector_t vector, cyg_ucount32 count, cyg_addrword_t data)
-{
-    struct i82559* p_i82559 = (struct i82559 *)data;
-    struct cyg_netdevtab_entry *ndp =
-        (struct cyg_netdevtab_entry *)(p_i82559->ndp);
-    struct eth_drv_sc *sc = (struct eth_drv_sc *)(ndp->device_instance);
-
-    // but here, it must be a *sc:
-    eth_drv_dsr( vector, count, (cyg_addrword_t)sc );
-}
-
-// ------------------------------------------------------------------------
-// This is called from the function below (used to be uni-DSR)
-static inline void
-uni_deliver(struct i82559* p_i82559)
-{
-    // First pass any rx data up the stack
-    PacketRxReady(p_i82559);
-
-    // Then scan for completed Txen and inform the stack
-    TxDone(p_i82559);
-}
-
-
-// ------------------------------------------------------------------------
-void i82559_deliver(struct eth_drv_sc *sc)
-{
-    struct i82559* p_i82559;
-
-    p_i82559 = &i82559[0];
-    if ( p_i82559->active )
-	uni_deliver( p_i82559 );
-}
-
-// ------------------------------------------------------------------------
-// Device table entry to operate the chip in a polled mode.
-// Only diddle the interface we were asked to!
-
-void i82559_poll(struct eth_drv_sc *sc)
-{
-    struct i82559 *p_i82559;
-    int ints;
-    p_i82559 = (struct i82559 *)sc->driver_private;
-    
-    IF_BAD_82559( p_i82559 ) {
-#ifdef DEBUG
-        os_printf( "i82559_poll: Bad device pointer %x\n", p_i82559 );
-#endif
-        return;
-    }
-
-    // Do these atomically
-    ints = Mask82559Interrupt(p_i82559);
-
-    // As it happens, this driver always requests the DSR to be called:
-    (void)eth_isr( CYGNUM_HAL_INTERRUPT_ETHERNET, (cyg_addrword_t)p_i82559 );
-
-    // (no harm in calling this ints-off also, when polled)
-    uni_deliver( p_i82559 );
-
-    Acknowledge82559Interrupt(p_i82559);
-    UnMask82559Interrupt(p_i82559, ints);
-}
-
-// ------------------------------------------------------------------------
-// Determine interrupt vector used by a device - for attaching GDB stubs
-// packet handler.
-int
-i82559_int_vector(struct eth_drv_sc *sc)
-{
-    struct i82559 *p_i82559;
-    p_i82559 = (struct i82559 *)sc->driver_private;
-    return (p_i82559->vector);
-}
-
-#if 0
-int
-i82559_int_op( struct eth_drv_sc *sc, int mask)
-{
-    struct i82559 *p_i82559;
-    p_i82559 = (struct i82559 *)sc->driver_private;
-
-    if ( 1 == mask )
-        return Mask82559Interrupt( p_i82559 );
-
-    if ( 0 == mask )
-        UnMask82559Interrupt( p_i82559, 0x0fffffff ); // enable all
-
-    return 0;
-}
-#endif
-    
-
-	// form a second level small page entry
-#define SL_SMPAGE_ENTRY(base,ap3,ap2,ap1,ap0,c,b) \
-	( ((base) << 12) | ((ap3) << 10) | ((ap2) << 8) | ((ap1) << 6) |\
-	      ((ap0) << 4) | ((c) << 3) | ((b) << 2) | 2)
-
-// ------------------------------------------------------------------------
-//
-//  Function : pci_init_find_82559s
-//
-// This is called exactly once at the start of time to:
-//  o setup some uncached memory for bus mastering
-//  o scan the PCI bus for objects
-//  o record them in the device table
-//  o acquire all the info needed for the driver to access them
-//  o instantiate interrupts for them
-//  o attach those interrupts appropriately
-// ------------------------------------------------------------------------
-static int
-pci_init_find_82559s( void )
-{
-    cyg_pci_device_id devid;
-    cyg_pci_device dev_info;
-    cyg_uint16 cmd;
-    int device_index;
-
-#ifdef DEBUG
-    db_printf("pci_init_find_82559s()\n");
-#endif
-
-    // allocate memory to be used in ioctls later
-    if (mem_reserved_ioctl != (void*)0) {
-#ifdef DEBUG
-        db_printf("pci_init_find_82559s() called > once\n");
-#endif
-        return 0;
-    }
-
-    // First initialize the heap in PCI window'd memory
-    i82559_heap_size = CYGHWR_HAL_ARM_IQ80310_PCI_MEM_MAP_SIZE;  
-    i82559_heap_base = (cyg_uint8*)CYGHWR_HAL_ARM_IQ80310_PCI_MEM_MAP_BASE;
-
-    // only first 1MB of board uses 4K page table
-    if (CYGHWR_HAL_ARM_IQ80310_PCI_MEM_MAP_BASE > (cyg_addrword_t)0xa0100000) {
-#ifdef DEBUG
-        db_printf("Can't get shared mem\n");
-#endif
-	return 0;
-    }
-
-    {
-	// page table for 1st 1M of RAM
-	unsigned *ram_mmutab = (unsigned *)0xA0008400; 
-	unsigned base = ((unsigned)i82559_heap_base) / 4096;
-	unsigned offset = ((unsigned)i82559_heap_base - 0xa0000000) / 4096;
-	int i;
-
-	for (i = 0; i < (i82559_heap_size/4096); i++)
-	    ram_mmutab[offset+i] = SL_SMPAGE_ENTRY(base+i, 3, 3, 3, 3, 0, 0);
-
-	HAL_DCACHE_SYNC();
-	asm volatile ("mcr p15, 0, %0, c7, c10, 4;\n"	// drain WB
-		      "mcr p15, 0, %0, c8, c7, 0;\n"	// flush TLBs
-		      : : "r"(i) );
-    }
-
-    i82559_heap_free = i82559_heap_base;
-
-    mem_reserved_ioctl = pciwindow_mem_alloc(MAX_MEM_RESERVED_IOCTL);
-
-    cyg_pci_init();
-
-#ifdef DEBUG
-    db_printf("Finished cyg_pci_init();\n");
-#endif
-
-    devid = CYG_PCI_NULL_DEVID;
-
-    for (device_index = 0; device_index < MAX_82559; device_index++) {
-        struct i82559 *p_i82559 = &i82559[device_index];
-        p_i82559->index = device_index;
-
-        if (cyg_pci_find_device(0x8086, 0x1209, &devid) ) {
-#ifdef DEBUG
-            db_printf("eth%d = 82559\n", device_index);
-#endif
-            cyg_pci_get_device_info(devid, &dev_info);
-
-            if (cyg_pci_translate_interrupt(&dev_info, &p_i82559->vector)) {
-#ifdef DEBUG
-                db_printf(" Wired to HAL vector %d\n", p_i82559->vector);
-#endif
-#ifndef CYGPKG_REDBOOT
-                cyg_drv_interrupt_create(
-                    p_i82559->vector,
-                    0,                  // Priority - unused
-                    (CYG_ADDRWORD)p_i82559, // Data item passed to ISR & DSR
-                    eth_isr,            // ISR
-                    eth_dsr,            // DSR
-                    &p_i82559->interrupt_handle, // handle to intr obj
-                    &p_i82559->interrupt_object ); // space for int obj
-
-                cyg_drv_interrupt_attach(p_i82559->interrupt_handle);
-#endif
-
-                // Don't unmask the interrupt yet, that could get us into a
-                // race.
-
-            } else {
-                p_i82559->vector=0;
-#ifdef DEBUG
-                db_printf(" Does not generate interrupts.\n");
-#endif
-            }
-
-            if (cyg_pci_configure_device(&dev_info)) {
-#ifdef DEBUG
-                int i;
-                db_printf("Found device on bus %d, devfn 0x%02x:\n",
-                          CYG_PCI_DEV_GET_BUS(devid),
-                          CYG_PCI_DEV_GET_DEVFN(devid));
-
-                if (dev_info.command & CYG_PCI_CFG_COMMAND_ACTIVE) {
-                    db_printf(" Note that board is active. Probed"
-                              " sizes invalid.!\n");
-                }
-                db_printf(" Vendor    0x%04x", dev_info.vendor);
-                db_printf("\n Device    0x%04x", dev_info.device);
-                db_printf("\n Command   0x%04x, Status 0x%04x\n",
-                          dev_info.command, dev_info.status);
-                
-                db_printf(" Class/Rev 0x%08x", dev_info.class_rev);
-                db_printf("\n Header 0x%02x\n", dev_info.header_type);
-
-                db_printf(" SubVendor 0x%04x, Sub ID 0x%04x\n",
-                          dev_info.header.normal.sub_vendor, 
-                          dev_info.header.normal.sub_id);
-
-                for(i = 0; i < CYG_PCI_MAX_BAR; i++) {
-                    db_printf(" BAR[%d]    0x%08x /", i, dev_info.base_address[i]);
-                    db_printf(" probed size 0x%08x / CPU addr 0x%08x\n",
-                              dev_info.base_size[i], dev_info.base_map[i]);
-                }
-                db_printf(" eth%d configured\n", device_index);
-#endif
-                p_i82559->found = 1;
-                p_i82559->active = 0;
-                p_i82559->devid = devid;
-                p_i82559->memory_address = dev_info.base_map[0];
-                p_i82559->io_address = dev_info.base_map[1];
-#ifdef DEBUG
-                db_printf(" memory address = 0x%08x\n", dev_info.base_map[0]);
-                db_printf(" I/O address = 0x%08x\n", dev_info.base_map[1]);
-#endif
-
-                // Don't use cyg_pci_set_device_info since it clears
-                // some of the fields we want to print out below.
-                cyg_pci_read_config_uint16(dev_info.devid, CYG_PCI_CFG_COMMAND, &cmd);
-                cmd |= CYG_PCI_CFG_COMMAND_IO // enable I/O space
-                    | CYG_PCI_CFG_COMMAND_MEMORY // enable memory space
-                    | CYG_PCI_CFG_COMMAND_MASTER; // enable bus master
-                cyg_pci_write_config_uint16(dev_info.devid, CYG_PCI_CFG_COMMAND, cmd);
-
-                // Now the PCI part of the device is configured, reset it. This 
-                // should make it safe to enable the interrupt
-                i82559_reset(p_i82559);
-
-                if (p_i82559->vector != 0) {
-                    cyg_drv_interrupt_acknowledge(p_i82559->vector);
-#ifndef CYGPKG_REDBOOT
-                    cyg_drv_interrupt_unmask(p_i82559->vector);
-#endif
-                }
-#ifdef DEBUG
-                db_printf(" **** Device enabled for I/O and Memory and Bus Master\n");
-#endif
-            }
-            else {
-                p_i82559->found = 0;
-                p_i82559->active = 0;
-#ifdef DEBUG
-                db_printf("Failed to configure device %d\n",device_index);
-#endif
-            }
-        }
-        else {
-            p_i82559->found = 0;
-            p_i82559->active = 0;
-#ifdef DEBUG
-            db_printf("eth%d not found\n", device_index);
-#endif
-        }
-    }
-
-    // Now a delay to ensure the hardware has "come up" before you try to
-    // use it.  Yes, really, the full 2 seconds.  It's only really
-    // necessary if DEBUG is off - otherwise all that printout wastes
-    // enough time.  No kidding.
-    udelay( 2000000 );
-    return 1;
-}
-
-#ifdef CYGPKG_NET
-// ------------------------------------------------------------------------
-//
-//  Function : eth_set_promiscuous_mode
-//
-//  Return : 0 = It worked.
-//           non0 = It failed.
-// ------------------------------------------------------------------------
-
-static int eth_set_promiscuous_mode(struct i82559* p_i82559)
-{
-    cyg_uint32  ioaddr;
-    volatile CONFIG_CMD_STRUCT *ccs;
-
-    IF_BAD_82559( p_i82559 ) {
-#ifdef DEBUG
-        os_printf( "eth_set_promiscuos_mode: Bad device pointer %x\n",
-                   p_i82559 );
-#endif
-        return -1;
-    }
-
-    ioaddr = p_i82559->io_address;  
-    wait_for_cmd_done(ioaddr); 
-    // load cu base address = 0 */ 
-    OUTL(0, ioaddr + SCBPointer);         
-    // 32 bit linear addressing used
-                                        
-    OUTW(SCB_M | CU_ADDR_LOAD, ioaddr + SCBCmd);
-    // wait for SCB command complete
-    wait_for_cmd_done(ioaddr);   
-  
-    ccs = (CONFIG_CMD_STRUCT *)mem_reserved_ioctl;
-  
-    // Check the malloc we did earlier worked
-    if (ccs == (void*)0) 
-        return 2; // Failed
-  
-    ccs->cb_entry.cb_cmd=0x2;
-    ccs->cb_entry.cb_cmd_word=0x0;
-    ccs->cb_entry.cb_status_word=0x0;
-    ccs->cb_entry.cb_int=0;
-    ccs->cb_entry.cb_suspend=1;
-    ccs->cb_entry.cb_el=1;
-    ccs->cb_entry.cb_complete=0;
-    ccs->cb_entry.cb_link_offset=VIRT_TO_BUS((cyg_uint32)&ccs);
-    
-    // Default values from the Intel Manual
-    ccs->config_bytes[0]=0x13;
-    ccs->config_bytes[1]=0x8;
-    ccs->config_bytes[2]=0x0;
-    ccs->config_bytes[3]=0x0;
-    ccs->config_bytes[4]=0x0;
-    ccs->config_bytes[5]=0x0;
-    ccs->config_bytes[6]=0xb2; // (promisc ? 0x80 : 0) | 0x32 for small stats,
-    ccs->config_bytes[7]=0x0;  // \      ditto         | 0x12 for stats with PAUSE stats
-    ccs->config_bytes[8]=0x0;  //  \     ditto         | 0x16 for PAUSE + TCO stats
-    ccs->config_bytes[9]=0x0;
-    ccs->config_bytes[10]=0x28;
-    ccs->config_bytes[11]=0x0;
-    ccs->config_bytes[12]=0x60;
-    ccs->config_bytes[13]=0x0;          // arp
-    ccs->config_bytes[14]=0x0;          // arp
-    
-    ccs->config_bytes[15]=0x81;         // promiscuous mode set
-                                        // \ or 0x80 for normal mode.
-    ccs->config_bytes[16]=0x0;
-    ccs->config_bytes[17]=0x40;
-    ccs->config_bytes[18]=0x72;         // Keep the Padding Enable bit
-    
-    // wait for SCB command complete
-    wait_for_cmd_done(ioaddr);   
-    
-    OUTL(VIRT_TO_BUS(ccs), ioaddr + SCBPointer); 
-    OUTW(SCB_M | CU_START, ioaddr + SCBCmd);    
-  
-    udelay(10000);
-
-    // now check for result ...
-    wait_for_cmd_done(ioaddr);   
-  
-    if ( (!ccs->cb_entry.cb_ok) || (!ccs->cb_entry.cb_complete) )
-        return 1; // Failed
-
-    wait_for_cmd_done(ioaddr);
-    /* load pointer to Rx Ring */
-    
-    OUTL(VIRT_TO_BUS(p_i82559->rx_ring[0]),
-         ioaddr + SCBPointer);
-    OUTW(RUC_START, ioaddr + SCBCmd);
-
-    return 0; // OK
-}
-#endif
-
-// ------------------------------------------------------------------------
-// We use this as a templete when writing a new MAC address into the
-// eeproms. The MAC address in the first few bytes is over written
-// with the correct MAC address and then the whole lot is programmed
-// into the serial EEPROM. The checksum is calculated on the fly and
-// sent instead of the last two bytes.
-// The values are copied from the Intel EtherPro10/100+ &c devices
-// in the EBSA boards.
-
-#ifdef CYGPKG_DEVS_ETH_ARM_IQ80310_WRITE_EEPROM
-
-#define ee00 0x00, 0x00 // shorthand
-
-static char eeprom_burn[126] = { 
-/* halfword addresses! */
-/*  0: */  0x00, 0x90,   0x27, 0x8c,       0x57, 0x82,   0x03, 0x02,
-/*  4: */     ee00   ,   0x01, 0x02,       0x01, 0x47,      ee00   ,
-/*  8: */  0x13, 0x72,   0x06, 0x83,       0xa2, 0x40,   0x0c, 0x00,
-/*  C: */  0x86, 0x80,      ee00   ,          ee00   ,      ee00   ,
-/* 10: */     ee00   ,      ee00   ,          ee00   ,      ee00   ,
-/* 14: */     ee00   ,      ee00   ,          ee00   ,      ee00   ,
-/* 18: */     ee00   ,      ee00   ,          ee00   ,      ee00   ,
-/* 1C: */     ee00   ,      ee00   ,          ee00   ,      ee00   ,
-/* 20: */     ee00   ,      ee00   ,          ee00   ,      ee00   ,
-/* 24: */     ee00   ,      ee00   ,          ee00   ,      ee00   ,
-/* 28: */     ee00   ,      ee00   ,          ee00   ,      ee00   ,
-/* 2C: */     ee00   ,      ee00   ,          ee00   ,      ee00   ,
-/* 30: */  0x28, 0x01,      ee00   ,          ee00   ,      ee00   ,
-/* 34: */     ee00   ,      ee00   ,          ee00   ,      ee00   ,
-/* 38: */     ee00   ,      ee00   ,          ee00   ,      ee00   ,
-/* 3C: */     ee00   ,      ee00   ,          ee00   
-};
-#undef ee00
-
-#endif
-
-// ------------------------------------------------------------------------
-//
-//  Function : eth_set_mac_address
-//
-//  Return : 0 = It worked.
-//           non0 = It failed.
-// ------------------------------------------------------------------------
-static int eth_set_mac_address(struct i82559* p_i82559, char *addr)
-{
-#ifdef CYGPKG_DEVS_ETH_ARM_IQ80310_WRITE_EEPROM
-    int checksum, i, count;
-    // (this is the length of the *EEPROM*s address, not MAC address)
-    int addr_length;
-#endif
-    cyg_uint32  ioaddr;
-    volatile CONFIG_CMD_STRUCT *ccs;
-  
-    IF_BAD_82559( p_i82559 ) {
-#ifdef DEBUG
-        os_printf( "eth_set_mac_address : Bad device pointer %x\n",
-                   p_i82559 );
-#endif
-        return -1;
-    }
-
-    ioaddr = p_i82559->io_address;      
-    
-    wait_for_cmd_done(ioaddr); 
-
-    ccs = (CONFIG_CMD_STRUCT *)mem_reserved_ioctl;
-    if (ccs == (void*)0)
-        return 2;
-
-    ccs->cb_entry.cb_cmd=0x1;
-    ccs->cb_entry.cb_cmd_word=0x0;
-    ccs->cb_entry.cb_status_word=0x0;
-    ccs->cb_entry.cb_int=0;
-    ccs->cb_entry.cb_suspend=1;
-    ccs->cb_entry.cb_el=1;
-  
-    memcpy((char *)(ccs->config_bytes),addr,6);
-
-    ccs->config_bytes[6]=0x0;
-    ccs->config_bytes[7]=0x0;
-  
-    ioaddr = p_i82559->io_address;  
-  
-    OUTL(VIRT_TO_BUS(ccs), ioaddr + SCBPointer); 
-    OUTW(SCB_M | CU_START, ioaddr + SCBCmd);    
-    // Next delay seems to be required, otherwise,
-    // cb_ok/cb_complete won't be set later.
-
-    udelay(1000);
-    wait_for_cmd_done(ioaddr);   
-  
-    // now check for result ...
-    if ( (!ccs->cb_entry.cb_ok) || (!ccs->cb_entry.cb_complete) )
-        return 3;
-  
-#ifdef CYGPKG_DEVS_ETH_ARM_IQ80310_WRITE_EEPROM
-
-    addr_length = get_eeprom_size( ioaddr );
-
-    // now set this address in the device eeprom ....
-    (void)memcpy(eeprom_burn,addr,6);
-
-    // No idea what these were for...
-    // eeprom_burn[20] &= 0xfe;   
-    // eeprom_burn[20] |= p_i82559->index;   
-        
-    program_eeprom( ioaddr, addr_length, eeprom_burn );
-   
-    // update 82559 driver data structure ...
-    udelay( 100000 );
-
-    // by reading EEPROM to get the mac address back
-    for (checksum = 0, i = 0, count = 0; count < 64; count++) {
-        cyg_uint16 value;
-        // read word from eeprom
-        value = read_eeprom(ioaddr, count, addr_length);
-        checksum += value;
-        if (count < 3) {
-            p_i82559->mac_address[i++] = value & 0xFF;
-            p_i82559->mac_address[i++] = (value >> 8) & 0xFF;
-        }
-    }
-    
-#ifdef DEBUG
-    os_printf("MAC Address = %02X %02X %02X %02X %02X %02X\n",
-              p_i82559->mac_address[0], p_i82559->mac_address[1],
-              p_i82559->mac_address[2], p_i82559->mac_address[3],
-              p_i82559->mac_address[4], p_i82559->mac_address[5]);
-#endif
-
-    p_i82559->mac_addr_ok = 1;
-
-    for ( i = 0, count = 0; i < 6; i++ )
-        if ( p_i82559->mac_address[i] != addr[i] )
-            count++;
-
-    if ( count ) {
-#ifdef DEBUG
-        os_printf( "Warning: MAC Address read back wrong!  %d bytes differ.\n",
-                   count );
-#endif
-        p_i82559->mac_addr_ok = 0;
-    }
-
-    // If the EEPROM checksum is wrong, the MAC address read from the
-    // EEPROM is probably wrong as well. In that case, we don't set
-    // mac_addr_ok.
-    if ((checksum & 0xFFFF) != 0xBABA)  {
-#ifdef DEBUG
-        os_printf( "Warning: Invalid EEPROM checksum %04X for device %d\n",
-                   checksum, p_i82559->index);
-#endif
-        p_i82559->mac_addr_ok = 0;
-    }
-#else
-    p_i82559->mac_addr_ok = 1;
-#endif // ! CYGPKG_DEVS_ETH_ARM_IQ80310_WRITE_EEPROM
-
-    return p_i82559->mac_addr_ok ? 0 : 1;
-}
-
-#ifdef CYGPKG_DEVS_ETH_ARM_IQ80310_WRITE_EEPROM
-// ------------------------------------------------------------------------
-static void
-write_eeprom(long ioaddr, int location, int addr_len, unsigned short value)
-{
-    int ee_addr = ioaddr + SCBeeprom;
-    int write_cmd = location | EE_WRITE_CMD(addr_len); 
-    int i;
-    
-    OUTW(EE_ENB & ~EE_CS, ee_addr);
-    eeprom_delay( 100 );
-    OUTW(EE_ENB, ee_addr);
-    eeprom_delay( 100 );
-
-//    os_printf("\n write_eeprom : write_cmd : %x",write_cmd);  
-//    os_printf("\n addr_len : %x  value : %x ",addr_len,value);  
-
-    /* Shift the write command bits out. */
-    for (i = (addr_len+2); i >= 0; i--) {
-        short dataval = (write_cmd & (1 << i)) ? EE_DATA_WRITE : 0;
-        OUTW(EE_ENB | dataval, ee_addr);
-        eeprom_delay(100);
-        OUTW(EE_ENB | dataval | EE_SHIFT_CLK, ee_addr);
-        eeprom_delay(150);
-    }
-    OUTW(EE_ENB, ee_addr);
-        
-    for (i = 15; i >= 0; i--) {
-        short dataval = (value & (1 << i)) ? EE_DATA_WRITE : 0;
-        OUTW(EE_ENB | dataval, ee_addr);
-        eeprom_delay(100);
-        OUTW(EE_ENB | dataval | EE_SHIFT_CLK, ee_addr);
-        eeprom_delay(150);
-    }
-
-    /* Terminate the EEPROM access. */
-    OUTW(EE_ENB & ~EE_CS, ee_addr);
-    eeprom_delay(150000); // let the write take effect
-}
-
-// ------------------------------------------------------------------------
-static int write_enable_eeprom(long ioaddr,  int addr_len)
-{
-    int ee_addr = ioaddr + SCBeeprom;
-    int write_en_cmd = EE_WRITE_EN_CMD(addr_len); 
-    int i;
-
-    OUTW(EE_ENB & ~EE_CS, ee_addr);
-    OUTW(EE_ENB, ee_addr);
-
-#ifdef DEBUG_82559
-    os_printf("write_en_cmd : %x",write_en_cmd);
-#endif
-
-    // Shift the wr/er enable command bits out.
-    for (i = (addr_len+2); i >= 0; i--) {
-	short dataval = (write_en_cmd & (1 << i)) ? EE_DATA_WRITE : 0;
-	OUTW(EE_ENB | dataval, ee_addr);
-	eeprom_delay(100);
-	OUTW(EE_ENB | dataval | EE_SHIFT_CLK, ee_addr);
-	eeprom_delay(150);
-    }
-
-    // Terminate the EEPROM access.
-    OUTW(EE_ENB & ~EE_CS, ee_addr);
-    eeprom_delay(EEPROM_DONE_DELAY);
-}
-
-
-// ------------------------------------------------------------------------
-static void
-program_eeprom(cyg_uint32 ioaddr, cyg_uint32 eeprom_size, cyg_uint8 *data)
-{
-  cyg_uint32 i;
-  cyg_uint16 checksum = 0;
-  cyg_uint16 value;
-
-  // First enable erase/write operations on the eeprom.
-  // This is done through the EWEN instruction.
-  write_enable_eeprom( ioaddr, eeprom_size );
-
-  for (i=0 ; i< 63 ; i++) {
-    value = ((unsigned short *)data)[i];
-    checksum += value;
-#ifdef DEBUG_82559
-    os_printf("\n i : %x ... value to be written : %x",i,value);
-#endif
-    write_eeprom( ioaddr, i, eeprom_size, value);
-#ifdef DEBUG_82559
-    os_printf("\n val read : %x ",read_eeprom(ioaddr,i,eeprom_size));
-#endif
-  }
-  value = 0xBABA - checksum;
-#ifdef DEBUG_82559
-  os_printf("\n i : %x ... checksum adjustment val to be written : %x",i,value);
-#endif
-  write_eeprom( ioaddr, i, eeprom_size, value );
-}
-
-// ------------------------------------------------------------------------
-#endif // ! CYGPKG_DEVS_ETH_ARM_IQ80310_WRITE_EEPROM
-
-
-// ------------------------------------------------------------------------
-//
-//  Function : eth_get_mac_address
-//
-// ------------------------------------------------------------------------
-#ifdef ETH_DRV_GET_MAC_ADDRESS
-static int eth_get_mac_address(struct i82559* p_i82559, char *addr)
-{
-    IF_BAD_82559( p_i82559 ) {
-#ifdef DEBUG
-        os_printf( "eth_get_mac_address : Bad device pointer %x\n",
-                   p_i82559 );
-#endif
-        return -1;
-    }
-
-    memcpy( addr, (char *)(&p_i82559->mac_address[0]), 6 );
-    return 0;
-}
-#endif
-// ------------------------------------------------------------------------
-//
-//  Function : i82559_ioctl
-//
-// ------------------------------------------------------------------------
-static int i82559_ioctl(struct eth_drv_sc *sc, unsigned long key,
-                        void *data, int data_length)
-{
-    struct i82559 *p_i82559;
-
-    p_i82559 = (struct i82559 *)sc->driver_private;
-
-    IF_BAD_82559( p_i82559 ) {
-#ifdef DEBUG
-        os_printf( "i82559_ioctl/control: Bad device pointer %x\n", p_i82559 );
-#endif
-        return -1;
-    }
-
-#ifdef DEBUG
-    db_printf( "i82559_ioctl: device eth%d at %x; key is 0x%x, data at %x[%d]\n",
-               p_i82559->index, p_i82559, key, data, data_length );
-#endif
-
-    switch ( key ) {
-
-#ifdef ETH_DRV_SET_MAC_ADDRESS
-    case ETH_DRV_SET_MAC_ADDRESS:
-        if ( 6 != data_length )
-            return -2;
-        return eth_set_mac_address( p_i82559, data );
-#endif
-
-#ifdef ETH_DRV_GET_MAC_ADDRESS
-    case ETH_DRV_GET_MAC_ADDRESS:
-        return eth_get_mac_address( p_i82559, data );
-#endif
-
-#ifdef ETH_DRV_GET_IF_STATS_UD
-    case ETH_DRV_GET_IF_STATS_UD: // UD == UPDATE
-        ETH_STATS_INIT( sc );    // so UPDATE the statistics structure
-#endif
-        // drop through
-#ifdef ETH_DRV_GET_IF_STATS
-    case ETH_DRV_GET_IF_STATS:
-#endif
-#if defined(ETH_DRV_GET_IF_STATS) || defined (ETH_DRV_GET_IF_STATS_UD)
-    {
-        struct ether_drv_stats *p = (struct ether_drv_stats *)data;
-        int i;
-        static unsigned char my_chipset[]
-            = { ETH_DEV_DOT3STATSETHERCHIPSET };
-
-        strcpy( p->description, CYGDAT_DEVS_ETH_DESCRIPTION );
-        CYG_ASSERT( 48 > strlen(p->description), "Description too long" );
-
-        for ( i = 0; i < SNMP_CHIPSET_LEN; i++ )
-            if ( 0 == (p->snmp_chipset[i] = my_chipset[i]) )
-                break;
-
-        i = i82559_status( sc );
-
-        if ( !( i & GEN_STATUS_LINK) ) {
-            p->operational = 2;         // LINK DOWN
-            p->duplex = 1;              // UNKNOWN
-            p->speed = 0;
-        }
-        else {
-            p->operational = 3;            // LINK UP
-            p->duplex = (i & GEN_STATUS_FDX) ? 3 : 2; // 2 = SIMPLEX, 3 = DUPLEX
-            p->speed = ((i & GEN_STATUS_100MBPS) ? 100 : 10) * 1000000;
-        }
-
-#ifdef KEEP_STATISTICS
-        {
-            I82559_COUNTERS *pc = &i82559_counters[ p_i82559->index ];
-            STATISTICS      *ps = &statistics[      p_i82559->index ];
-
-            // Admit to it...
-            p->supports_dot3        = true;
-
-            // Those commented out are not available on this chip.
-
-            p->tx_good              = pc->tx_good             ;
-            p->tx_max_collisions    = pc->tx_max_collisions   ;
-            p->tx_late_collisions   = pc->tx_late_collisions  ;
-            p->tx_underrun          = pc->tx_underrun         ;
-            p->tx_carrier_loss      = pc->tx_carrier_loss     ;
-            p->tx_deferred          = pc->tx_deferred         ;
-            //p->tx_sqetesterrors   = pc->tx_sqetesterrors    ;
-            p->tx_single_collisions = pc->tx_single_collisions;
-            p->tx_mult_collisions   = pc->tx_mult_collisions  ;
-            p->tx_total_collisions  = pc->tx_total_collisions ;
-            p->rx_good              = pc->rx_good             ;
-            p->rx_crc_errors        = pc->rx_crc_errors       ;
-            p->rx_align_errors      = pc->rx_align_errors     ;
-            p->rx_resource_errors   = pc->rx_resource_errors  ;
-            p->rx_overrun_errors    = pc->rx_overrun_errors   ;
-            p->rx_collisions        = pc->rx_collisions       ;
-            p->rx_short_frames      = pc->rx_short_frames     ;
-            //p->rx_too_long_frames = pc->rx_too_long_frames  ;
-            //p->rx_symbol_errors   = pc->rx_symbol_errors    ;
-        
-            p->interrupts           = ps->interrupts          ;
-            p->rx_count             = ps->rx_count            ;
-            p->rx_deliver           = ps->rx_deliver          ;
-            p->rx_resource          = ps->rx_resource         ;
-            p->rx_restart           = ps->rx_restart          ;
-            p->tx_count             = ps->tx_count            ;
-            p->tx_complete          = ps->tx_complete         ;
-            p->tx_dropped           = ps->tx_dropped          ;
-        }
-#endif // KEEP_STATISTICS
-
-        p->tx_queue_len = MAX_TX_DESCRIPTORS;
-
-        return 0; // OK
-    }
-#endif
-
-    default:
-        break;
-    }
-    return -1;
-}
-
-// ------------------------------------------------------------------------
-//
-// Statistics update...
-//
-// ------------------------------------------------------------------------
-
-#ifdef KEEP_STATISTICS
-#ifdef CYGDBG_DEVS_ETH_ARM_IQ80310_KEEP_82559_STATISTICS
-void update_statistics(struct i82559* p_i82559)
-{
-    I82559_COUNTERS *p_statistics;
-    cyg_uint32 *p_counter;
-    cyg_uint32 *p_register;
-    int reg_count, ints;
-    
-    ints = Mask82559Interrupt(p_i82559);
-
-    // This points to the sthared memory stats area/command block
-    p_statistics = (I82559_COUNTERS *)(p_i82559->p_statistics);
-
-    if ( (p_statistics->done & 0xFFFF) == 0xA007 ) {
-        p_counter = (cyg_uint32 *)&i82559_counters[ p_i82559->index ];
-        p_register = (cyg_uint32 *)p_statistics;
-        for ( reg_count = 0;
-              reg_count < sizeof( I82559_COUNTERS ) / sizeof( cyg_uint32 ) - 1;
-              reg_count++ ) {
-            *p_counter += *p_register;
-            p_counter++;
-            p_register++;
-        }
-        p_statistics->done = 0;
-        // make sure no command operating
-        wait_for_cmd_done(p_i82559->io_address);
-        // start register dump
-        OUTW(CU_DUMPSTATS, p_i82559->io_address + SCBCmd);
-    }
-    Acknowledge82559Interrupt(p_i82559); // This can eat an Rx interrupt, so
-    PacketRxReady(p_i82559);
-
-    UnMask82559Interrupt(p_i82559, ints);
-}
-#endif
-#endif // KEEP_STATISTICS
-
-// ------------------------------------------------------------------------
-//
-//
-//           CODE FOR DEBUGGING PURPOSES ONLY
-//
-//
-// ------------------------------------------------------------------------
-void dump_txcb(TxCB *p_txcb)
-{
-    os_printf("TxCB @ %x\n", (int)p_txcb);
-    os_printf("status = %04X ", p_txcb->txstatus);
-    os_printf("command = %04X ", p_txcb->command);
-    os_printf("link = %08X ", p_txcb->link);
-    os_printf("tbd = %08X ", p_txcb->tbd_address);
-    os_printf("count = %d ", p_txcb->count);
-    os_printf("eof = %x ", p_txcb->eof);
-    os_printf("threshold = %d ", p_txcb->tx_threshold);
-    os_printf("tbd number = %d\n", p_txcb->tbd_number);
-}
-
-// This is intended to be the body of a THREAD that prints stuff every 10
-// seconds or so:
-#ifdef KEEP_STATISTICS
-#ifdef DISPLAY_STATISTICS
-void DisplayStatistics(void)
-{
-    int i;
-    I82559_COUNTERS *p_statistics;
-    cyg_uint32 *p_counter;
-    cyg_uint32 *p_register;
-    int reg_count;
-    int status;
-    
-    while ( 1 ) {
-#ifdef DISPLAY_82559_STATISTICS
-        for ( i = 0; i < 2; i ++ ) {
-            p_statistics = (I82559_COUNTERS *)i82559[i].p_statistics;
-            if ( (p_statistics->done & 0xFFFF) == 0xA007 ) {
-                p_counter = (cyg_uint32 *)&i82559_counters[i];
-                p_register = (cyg_uint32 *)&p_statistics->tx_good;
-                for ( reg_count = 20; reg_count != 0; reg_count--) {
-                    *p_counter += *p_register;
-                    p_counter++;
-                    p_register++;
-                }
-                p_statistics->done = 0;
-                // make sure no command operating
-            	wait_for_cmd_done(i82559[i].io_address);
-                // start register dump
-                OUTW(CU_DUMPSTATS, i82559[i].io_address + SCBCmd);
-            }
-        }
-#endif
-        os_printf("\nRx\nPackets = %d  %d\n",
-        statistics[0].rx_count, statistics[1].rx_count);
-        os_printf("Deliver   %d  %d\n",
-        statistics[0].rx_deliver, statistics[1].rx_deliver);
-        os_printf("Resource  %d  %d\n",
-        statistics[0].rx_resource, statistics[1].rx_resource);
-        os_printf("Restart   %d  %d\n",
-        statistics[0].rx_restart, statistics[1].rx_restart);
-
-#ifdef DISPLAY_82559_STATISTICS
-        os_printf("Count     %d  %d\n",
-        i82559_counters[0].rx_good, i82559_counters[1].rx_good);
-        os_printf("CRC       %d  %d\n",
-        i82559_counters[0].rx_crc_errors, i82559_counters[1].rx_crc_errors);
-        os_printf("Align     %d  %d\n",
-        i82559_counters[0].rx_align_errors, i82559_counters[1].rx_align_errors);
-        os_printf("Resource  %d  %d\n",
-        i82559_counters[0].rx_resource_errors, i82559_counters[1].rx_resource_errors);
-        os_printf("Overrun   %d  %d\n",
-        i82559_counters[0].rx_overrun_errors, i82559_counters[1].rx_overrun_errors);
-        os_printf("Collision %d  %d\n",
-        i82559_counters[0].rx_collisions, i82559_counters[1].rx_collisions);
-        os_printf("Short     %d  %d\n",
-        i82559_counters[0].rx_short_frames, i82559_counters[1].rx_short_frames);
-#endif
-        os_printf("\nTx\nPackets = %d  %d\n",
-        statistics[0].tx_count, statistics[1].tx_count);
-        os_printf("Complete  %d  %d\n",
-        statistics[0].tx_complete, statistics[1].tx_complete);
-        os_printf("Dropped   %d  %d\n",
-        statistics[0].tx_dropped, statistics[1].tx_dropped);
-        os_printf("Count     %d  %d\n",
-        i82559_counters[0].tx_good, i82559_counters[1].tx_good);
-#ifdef DISPLAY_82559_STATISTICS
-        os_printf("Collision %d  %d\n",
-        i82559_counters[0].tx_max_collisions,i82559_counters[1].tx_max_collisions);
-        os_printf("Late Col. %d  %d\n",
-        i82559_counters[0].tx_late_collisions,i82559_counters[1].tx_late_collisions);
-        os_printf("Underrun  %d  %d\n",
-        i82559_counters[0].tx_underrun,i82559_counters[1].tx_underrun);
-        os_printf("Carrier   %d  %d\n",
-        i82559_counters[0].tx_carrier_loss,i82559_counters[1].tx_carrier_loss);
-        os_printf("Deferred  %d  %d\n",
-        i82559_counters[0].tx_deferred, i82559_counters[1].tx_deferred);
-        os_printf("1 Col     %d  %d\n",
-        i82559_counters[0].tx_single_collisions, i82559_counters[0].tx_single_collisions);
-        os_printf("Mult. Col %d  %d\n",
-        i82559_counters[0].tx_mult_collisions, i82559_counters[0].tx_mult_collisions);
-        os_printf("Total Col %d  %d\n",
-        i82559_counters[0].tx_total_collisions, i82559_counters[0].tx_total_collisions);
-#endif
-        status = INB(i82559[0].io_address + SCBGenStatus);
-        os_printf("Interface 0 Link = %s, %s Mbps, %s Duplex\n",
-            status & GEN_STATUS_LINK ? "Up" : "Down",
-            status & GEN_STATUS_100MBPS ?  "100" : "10",
-            status & GEN_STATUS_FDX ? "Full" : "Half");
-
-        status = INB(i82559[1].io_address + SCBGenStatus);
-        os_printf("Interface 1 Link = %s, %s Mbps, %s Duplex\n",
-            status & GEN_STATUS_LINK ? "Up" : "Down",
-            status & GEN_STATUS_100MBPS ?  "100" : "10",
-            status & GEN_STATUS_FDX ? "Full" : "Half");
-
-        cyg_thread_delay(1000);
-    }
-}
-#endif // DISPLAY_STATISTICS
-#endif // KEEP_STATISTICS
-
-void dump_rfd(RFD *p_rfd, int anyway )
-{
-    if ( (0 != p_rfd->rxstatus) || anyway ) {
-        os_printf("RFD @ %x = ", (int)p_rfd);
-        os_printf("status = %x ", p_rfd->rxstatus);
-        os_printf("link = %x ", p_rfd->link);
-//        os_printf("rdb_address = %x ", p_rfd->rdb_address);
-        os_printf("count = %x ", p_rfd->count);
-        os_printf("f = %x ", p_rfd->f);
-        os_printf("eof = %x ", p_rfd->eof);
-        os_printf("size = %x\n", p_rfd->size);
-        os_printf("[%04x %04x %04x] ",
-                  *((cyg_uint16 *)(&(p_rfd->buffer[0]))),
-                  *((cyg_uint16 *)(&(p_rfd->buffer[2]))),
-                  *((cyg_uint16 *)(&(p_rfd->buffer[4]))) );
-        os_printf("[%04x %04x %04x] %04x : ",          
-                  *((cyg_uint16 *)(&(p_rfd->buffer[6]))),
-                  *((cyg_uint16 *)(&(p_rfd->buffer[8]))),
-                  *((cyg_uint16 *)(&(p_rfd->buffer[10]))),
-                  *((cyg_uint16 *)(&(p_rfd->buffer[12]))) );
-        os_printf("(%04x %04x %04x %04x) ",            
-                  *((cyg_uint16 *)(&(p_rfd->buffer[14]))),
-                  *((cyg_uint16 *)(&(p_rfd->buffer[16]))),
-                  *((cyg_uint16 *)(&(p_rfd->buffer[18]))),
-                  *((cyg_uint16 *)(&(p_rfd->buffer[20]))) );
-        os_printf("[%04x %04x %04x] ",                 
-                  *((cyg_uint16 *)(&(p_rfd->buffer[22]))),
-                  *((cyg_uint16 *)(&(p_rfd->buffer[24]))),
-                  *((cyg_uint16 *)(&(p_rfd->buffer[26]))) );
-        os_printf("%d.%d.%d.%d ",
-                  *((cyg_uint8  *)(&(p_rfd->buffer[28]))),
-                  *((cyg_uint8  *)(&(p_rfd->buffer[29]))),
-                  *((cyg_uint8  *)(&(p_rfd->buffer[30]))),
-                  *((cyg_uint8  *)(&(p_rfd->buffer[31]))) );
-        os_printf("[%04x %04x %04x] ",                 
-                  *((cyg_uint16 *)(&(p_rfd->buffer[32]))),
-                  *((cyg_uint16 *)(&(p_rfd->buffer[34]))),
-                  *((cyg_uint16 *)(&(p_rfd->buffer[36]))) );
-        os_printf("%d.%d.%d.%d ...\n",
-                  *((cyg_uint8  *)(&(p_rfd->buffer[38]))),
-                  *((cyg_uint8  *)(&(p_rfd->buffer[39]))),
-                  *((cyg_uint8  *)(&(p_rfd->buffer[40]))),
-                  *((cyg_uint8  *)(&(p_rfd->buffer[41]))) );
-    }
-}
-
-void dump_all_rfds( int intf )
-{
-    struct i82559* p_i82559 = &i82559[intf];
-    int i, j;
-    j = p_i82559->next_rx_descriptor;
-    os_printf("rx descriptors for interface %d (eth%d):\n", intf, intf );
-    for ( i = 0; i < MAX_RX_DESCRIPTORS; i++ )
-        dump_rfd( p_i82559->rx_ring[i], (i > (j-3) && (i <= j)) );
-    os_printf("next rx descriptor = %x\n\n", j);
-}
-
-
-void dump_packet(cyg_uint8 *p_buffer, int length)
-{
-    int count;
-
-    count = 0;
-    while ( length > 0 ) {
-        if ( count == 0 )
-            os_printf("\n");
-        count = (count + 1) & 0x0F;
-        os_printf("%02X ", *p_buffer++);
-        length--;
-    }
-    os_printf("\n");
-}
-
-// ------------------------------------------------------------------------
-
-// EOF if_iq80310.c
deleted file mode 100644
--- a/packages/devs/eth/arm/iq80310/current/src/if_shmem.S
+++ /dev/null
@@ -1,59 +0,0 @@
-// #========================================================================
-// #
-// #    if_shmem.S
-// #
-// #    Declare a chunk of 4Kbyte aligned memory for use by bus-mastering
-// #    PCI ethernet device.
-// #
-// #========================================================================
-// ####COPYRIGHTBEGIN####
-//                                                                          
-// -------------------------------------------                              
-// The contents of this file are subject to the Red Hat eCos Public License 
-// Version 1.1 (the "License"); you may not use this file except in         
-// compliance with the License.  You may obtain a copy of the License at    
-// http://www.redhat.com/                                                   
-//                                                                          
-// Software distributed under the License is distributed on an "AS IS"      
-// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.  See the 
-// License for the specific language governing rights and limitations under 
-// the License.                                                             
-//                                                                          
-// The Original Code is eCos - Embedded Configurable Operating System,      
-// released September 30, 1998.                                             
-//                                                                          
-// The Initial Developer of the Original Code is Red Hat.                   
-// Portions created by Red Hat are                                          
-// Copyright (C) 1998, 1999, 2000 Red Hat, Inc.                             
-// All Rights Reserved.                                                     
-// -------------------------------------------                              
-//                                                                          
-// ####COPYRIGHTEND####
-// #========================================================================
-// ######DESCRIPTIONBEGIN####
-// #
-// # Author(s):     msalter
-// # Contributors:  msalter
-// # Date:          2000-11-03
-// # Purpose:       
-// # Description:   This file defines a chunk of aligned memory for use
-// #                by bus-mastering PCI ethernet device.
-// #
-// #####DESCRIPTIONEND####
-// #
-// #========================================================================
-
-#include <pkgconf/devs_eth_arm_iq80310.h>
-        
-#define MAX_PACKET_SIZE   1536
-#define SIZEOF_DESCRIPTOR 16
-	
-	.bss
-	.p2align(12)
-	.globl cyg_io_iq80310_i82559_shmem
-cyg_io_iq80310_i82559_shmem:
-	.rept ((MAX_PACKET_SIZE + SIZEOF_DESCRIPTOR) * \
-               (CYGNUM_DEVS_ETH_ARM_IQ80310_MAX_TX_DESCRIPTORS + \
-                CYGNUM_DEVS_ETH_ARM_IQ80310_MAX_RX_DESCRIPTORS))
-	.byte 0
-	.endr
--- a/packages/devs/eth/intel/i82559/current/ChangeLog
+++ b/packages/devs/eth/intel/i82559/current/ChangeLog
@@ -1,3 +1,12 @@
+2002-01-03  Mark Salter  <msalter@redhat.com>
+
+	* src/if_i82559.c (pci_init_find_82559s): Remove check that
+	assumes driver owns entire PCI window.
+
+	* cdl/intel_i82559_eth_drivers.cdl: Add
+	CYGNUM_DEVS_ETH_INTEL_I82559_MAX_TX_DESCRIPTORS and
+	CYGNUM_DEVS_ETH_INTEL_I82559_MAX_RX_DESCRIPTORS.
+
 2001-11-19  Hugo Tyson  <hmt@redhat.com>
 2001-11-19  Anssi Pulkkinen <Anssi.Pulkkinen@ascom.ch>
 
--- a/packages/devs/eth/intel/i82559/current/cdl/intel_i82559_eth_drivers.cdl
+++ b/packages/devs/eth/intel/i82559/current/cdl/intel_i82559_eth_drivers.cdl
@@ -119,6 +119,40 @@ cdl_package CYGPKG_DEVS_ETH_INTEL_I82559
 	    carefully chosen decision, hence this option."
     }
 
+    cdl_option CYGNUM_DEVS_ETH_INTEL_I82559_MAX_RX_DESCRIPTORS {
+        display       "Maximum number of RX descriptors"
+        flavor  data
+        default_value { CYGPKG_REDBOOT ? 4 : 128 }
+        define        MAX_RX_DESCRIPTORS
+        description   "
+                An RX descriptor is used for each ethernet frame required
+                to be passed to the upper networking layers. This option
+                sets the maximum number of these. Higher numbers use more
+                memory, lower numbers will reduce performance. The system
+                appears to work OK with as few as 8 descriptors but limps
+                painfully with only 4. Performance is better with more than
+                8, but assuming the size of non-cached (so useless for anything
+                else) memory window is 1Mb, we might as well use it all.
+                128 RX and TX descriptors uses the whole 1Mb, near enough."
+    }
+    
+    cdl_option CYGNUM_DEVS_ETH_INTEL_I82559_MAX_TX_DESCRIPTORS {
+        display       "Maximum number of TX descriptors"
+        flavor  data
+        default_value { CYGPKG_REDBOOT ? 4 : 128 }
+        define        MAX_TX_DESCRIPTORS
+        description   "
+                A TX descriptor is used for each ethernet frame passed down
+                from upper networking layers for transmission. This option
+                sets the maximum number of these. Higher numbers use more
+                memory, lower numbers will reduce performance. The system
+                appears to work OK with as few as 8 descriptors but limps
+                painfully with only 4. Performance is better with more than
+                8, but assuming the size of non-cached (so useless for anything
+                else) memory window is 1Mb, we might as well use it all.
+                128 RX and TX descriptors uses the whole 1Mb, near enough."
+    }
+
     cdl_component CYGPKG_DEVS_ETH_INTEL_I82559_OPTIONS {
         display "Intel 82559 ethernet driver build options"
         flavor  none
--- a/packages/devs/eth/intel/i82559/current/src/if_i82559.c
+++ b/packages/devs/eth/intel/i82559/current/src/if_i82559.c
@@ -23,7 +23,7 @@
 //                                                                          
 // The Initial Developer of the Original Code is Red Hat.                   
 // Portions created by Red Hat are                                          
-// Copyright (C) 1998, 1999, 2000, 2001 Red Hat, Inc.
+// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
 // All Rights Reserved.                                                     
 // -------------------------------------------                              
 //                                                                          
@@ -2700,25 +2700,6 @@ pci_init_find_82559s( void )
                 CYGHWR_INTEL_I82559_PCI_MEM_MAP_BASE,
       "PCI window configured does not match PCI memory section base" );
 #endif
-    CYG_ASSERT( CYGMEM_SECTION_pci_window_SIZE ==
-                CYGHWR_INTEL_I82559_PCI_MEM_MAP_SIZE,
-        "PCI window configured does not match PCI memory section size" );
-
-    if (
-#ifdef CYGARC_UNCACHED_ADDRESS
-         CYGARC_UNCACHED_ADDRESS((CYG_ADDRWORD)CYGMEM_SECTION_pci_window) !=
-#else
-         (CYG_ADDRWORD)CYGMEM_SECTION_pci_window !=
-#endif
-         CYGHWR_INTEL_I82559_PCI_MEM_MAP_BASE
-         ||
-         CYGMEM_SECTION_pci_window_SIZE !=
-         CYGHWR_INTEL_I82559_PCI_MEM_MAP_SIZE ) {
-#ifdef DEBUG
-        db_printf("pci_init_find_82559s(): PCI window misconfigured\n");
-#endif
-        return 0;
-    }
 
     // First initialize the heap in PCI window'd memory
     i82559_heap_size = CYGHWR_INTEL_I82559_PCI_MEM_MAP_SIZE;
--- a/packages/devs/flash/amd/am29xxxxx/current/ChangeLog
+++ b/packages/devs/flash/amd/am29xxxxx/current/ChangeLog
@@ -1,3 +1,12 @@
+2002-01-03  Jonathan Larmour  <jlarmour@redhat.com>
+2001-12-20  Koichi Nagashima  <naga@r-lab.co.jp>
+
+	* cdl/flash_amd_am29xxxxx.cdl: Add support for Toshiba TC58FVB800 part.
+	* include/flash_am29xxxxx_parts.inl: Ditto.
+
+	* include/flash_am29xxxxx.inl: Fix FLASH_Reset definition.
+	Check sector erase timer correctly.
+
 2001-10-31  Jesper Skov  <jskov@redhat.com>
 
 	* include/flash_am29xxxxx_parts.inl: Removed fix me comments -
--- a/packages/devs/flash/amd/am29xxxxx/current/cdl/flash_amd_am29xxxxx.cdl
+++ b/packages/devs/flash/amd/am29xxxxx/current/cdl/flash_amd_am29xxxxx.cdl
@@ -32,7 +32,7 @@
 ######DESCRIPTIONBEGIN####
 #
 # Author(s):      gthomas
-# Contributors:   gthomas, jskov
+# Contributors:   gthomas, jskov, Koichi Nagashima
 # Date:           2001-02-20
 #
 #####DESCRIPTIONEND####
@@ -116,4 +116,13 @@ cdl_package CYGPKG_DEVS_FLASH_AMD_AM29XX
             able to recognize and handle the AM29LV800
             part in the family."
     }
+
+    cdl_option CYGHWR_DEVS_FLASH_AMD_TC58FVB800 {
+        display       "Toshiba TC58FVB800 flash memory support"
+        default_value 0
+        implements    CYGINT_DEVS_FLASH_AMD_VARIANTS
+        description   "
+            When this option is enabled, the AMD flash driver will be
+            able to recognize and handle the Toshiba TC58FVB800."
+    }
 }
--- a/packages/devs/flash/amd/am29xxxxx/current/include/flash_am29xxxxx.inl
+++ b/packages/devs/flash/amd/am29xxxxx/current/include/flash_am29xxxxx.inl
@@ -34,7 +34,7 @@
 //#####DESCRIPTIONBEGIN####
 //
 // Author(s):    gthomas
-// Contributors: gthomas, jskov
+// Contributors: gthomas, jskov, Koichi Nagashima
 // Date:         2001-02-21
 // Purpose:      
 // Description:  AMD AM29xxxxx series flash device driver
@@ -67,7 +67,7 @@
 // Common device details.
 #define FLASH_Read_ID                   FLASHWORD( 0x90 )
 #define FLASH_WP_State                  FLASHWORD( 0x90 )
-#define FLASH_Reset                     FLASHWORD( 0xFF )
+#define FLASH_Reset                     FLASHWORD( 0xF0 )
 #define FLASH_Program                   FLASHWORD( 0xA0 )
 #define FLASH_Block_Erase               FLASHWORD( 0x30 )
 
@@ -314,7 +314,8 @@ flash_erase_block(void* block, unsigned 
         timeout = 10000000;              // how many retries?
         while (true) {
             state = *b_v;
-            if ((state & FLASH_Sector_Erase_Timer) == 0) break;
+            if ((state & FLASH_Sector_Erase_Timer)
+				== FLASH_Sector_Erase_Timer) break;
 
             if (--timeout == 0) {
                 res = FLASH_ERR_DRV_TIMEOUT;
--- a/packages/devs/flash/amd/am29xxxxx/current/include/flash_am29xxxxx_parts.inl
+++ b/packages/devs/flash/amd/am29xxxxx/current/include/flash_am29xxxxx_parts.inl
@@ -34,7 +34,7 @@
 //#####DESCRIPTIONBEGIN####
 //
 // Author(s):    jskov
-// Contributors: jskov
+// Contributors: jskov, Koichi Nagashima
 // Date:         2001-06-08
 // Purpose:
 // Description:  AMD AM29xxxxx part descriptors
@@ -208,6 +208,24 @@
         banked     : false
     },
 #endif
+#ifdef CYGHWR_DEVS_FLASH_AMD_TC58FVB800
+    {   // Toshiba TC58FVB800 (compatible with AM29LV800-B except for IDs.)
+        device_id  : FLASHWORD(0xCE),
+        block_size : 0x10000 * CYGNUM_FLASH_INTERLEAVE,
+        block_count: 16,
+        device_size: 0x100000 * CYGNUM_FLASH_INTERLEAVE,
+        base_mask  : ~(0x100000 * CYGNUM_FLASH_INTERLEAVE - 1),
+        bootblock  : true,
+        bootblocks : { 0x000000 * CYGNUM_FLASH_INTERLEAVE,
+                       0x004000 * CYGNUM_FLASH_INTERLEAVE,
+                       0x002000 * CYGNUM_FLASH_INTERLEAVE,
+                       0x002000 * CYGNUM_FLASH_INTERLEAVE,
+                       0x008000 * CYGNUM_FLASH_INTERLEAVE,
+                       0
+                     },
+        banked     : false
+    },
+#endif
 
 #else // 16 bit devices
 
@@ -361,7 +379,6 @@
         banked     : false
     },
 #endif
-
 #ifdef CYGHWR_DEVS_FLASH_AMD_AM29LV640
     {   // MBM29LV640xx
         device_id  : FLASHWORD(0x22d7),
@@ -373,6 +390,24 @@
         banked     : false
     },
 #endif
+#ifdef CYGHWR_DEVS_FLASH_AMD_TC58FVB800
+    {   // Toshiba TC58FVB800 (compatible with AM29LV800-B except for IDs.)
+        device_id  : FLASHWORD(0xCE),
+        block_size : 0x10000 * CYGNUM_FLASH_INTERLEAVE,
+        block_count: 16,
+        device_size: 0x100000 * CYGNUM_FLASH_INTERLEAVE,
+        base_mask  : ~(0x100000 * CYGNUM_FLASH_INTERLEAVE - 1),
+        bootblock  : true,
+        bootblocks : { 0x000000 * CYGNUM_FLASH_INTERLEAVE,
+                       0x004000 * CYGNUM_FLASH_INTERLEAVE,
+                       0x002000 * CYGNUM_FLASH_INTERLEAVE,
+                       0x002000 * CYGNUM_FLASH_INTERLEAVE,
+                       0x008000 * CYGNUM_FLASH_INTERLEAVE,
+                       0
+                     },
+        banked     : false
+    },
+#endif
 
 #endif // 16 bit devices
 
new file mode 100644
--- /dev/null
+++ b/packages/devs/flash/sh/cq7750/current/ChangeLog
@@ -0,0 +1,29 @@
+2001-12-20  Koichi Nagashima  <naga@r-lab.co.jp>
+
+	* Cloned from EDK7708 flash package.
+
+//===========================================================================
+//####COPYRIGHTBEGIN####
+//                                                                          
+// -------------------------------------------                              
+// The contents of this file are subject to the Red Hat eCos Public License 
+// Version 1.1 (the "License"); you may not use this file except in         
+// compliance with the License.  You may obtain a copy of the License at    
+// http://www.redhat.com/                                                   
+//                                                                          
+// Software distributed under the License is distributed on an "AS IS"      
+// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.  See the 
+// License for the specific language governing rights and limitations under 
+// the License.                                                             
+//                                                                          
+// The Original Code is eCos - Embedded Configurable Operating System,      
+// released September 30, 1998.                                             
+//                                                                          
+// The Initial Developer of the Original Code is Red Hat.                   
+// Portions created by Red Hat are                                          
+// Copyright (C) 1998, 1999, 2000, 2001 Red Hat, Inc.
+// All Rights Reserved.                                                     
+// -------------------------------------------                              
+//                                                                          
+//####COPYRIGHTEND####
+//===========================================================================
new file mode 100644
--- /dev/null
+++ b/packages/devs/flash/sh/cq7750/current/cdl/flash_cq7750.cdl
@@ -0,0 +1,63 @@
+# ====================================================================
+#
+#      flash_cq7750.cdl
+#
+#      FLASH memory - Hardware support on CqREEK SH7750 board
+#
+# ====================================================================
+#####COPYRIGHTBEGIN####
+#                                                                          
+# -------------------------------------------                              
+# The contents of this file are subject to the Red Hat eCos Public License 
+# Version 1.1 (the "License"); you may not use this file except in         
+# compliance with the License.  You may obtain a copy of the License at    
+# http://www.redhat.com/                                                   
+#                                                                          
+# Software distributed under the License is distributed on an "AS IS"      
+# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.  See the 
+# License for the specific language governing rights and limitations under 
+# the License.                                                             
+#                                                                          
+# The Original Code is eCos - Embedded Configurable Operating System,      
+# released September 30, 1998.                                             
+#                                                                          
+# The Initial Developer of the Original Code is Red Hat.                   
+# Portions created by Red Hat are                                          
+# Copyright (C) 1998, 1999, 2000, 2001 Red Hat, Inc.
+# All Rights Reserved.                                                     
+# -------------------------------------------                              
+#                                                                          
+#####COPYRIGHTEND####
+# ====================================================================
+######DESCRIPTIONBEGIN####
+#
+# Author(s):      Koichi Nagashima
+# Contributors:   Koichi Nagashima
+# Date:           2001-12-20
+#
+#####DESCRIPTIONEND####
+#
+# ====================================================================
+
+cdl_package CYGPKG_DEVS_FLASH_CQ7750 {
+    display       "CqREEK SH7750 board FLASH memory support"
+    description   "FLASH memory device support for CqREEK SH7750  board"
+
+    parent        CYGPKG_IO_FLASH
+    active_if	  CYGPKG_IO_FLASH
+    requires	  CYGPKG_HAL_SH_SH7750_CQ7750
+
+    compile       cq7750_flash.c
+
+    # Arguably this should do in the generic package
+    # but then there is a logic loop so you can never enable it.
+    cdl_interface CYGINT_DEVS_FLASH_AMD_AM29XXXXX_REQUIRED {
+        display   "Generic AMD AM29LV800B driver required"
+    }
+
+    implements    CYGINT_DEVS_FLASH_AMD_AM29XXXXX_REQUIRED
+    requires	  CYGHWR_DEVS_FLASH_AMD_TC58FVB800
+    # requires      CYGHWR_DEVS_FLASH_AMD_AM29LV800
+}
+
+# EOF flash_cq7750.cdl
new file mode 100644
--- /dev/null
+++ b/packages/devs/flash/sh/cq7750/current/src/cq7750_flash.c
@@ -0,0 +1,57 @@
+//==========================================================================
+//
+//      cq7750_flash.c
+//
+//      Flash programming for Atmel device on Hitachi CQ7750 board
+//
+//==========================================================================
+//####COPYRIGHTBEGIN####
+//                                                                          
+// -------------------------------------------                              
+// The contents of this file are subject to the Red Hat eCos Public License 
+// Version 1.1 (the "License"); you may not use this file except in         
+// compliance with the License.  You may obtain a copy of the License at    
+// http://www.redhat.com/                                                   
+//                                                                          
+// Software distributed under the License is distributed on an "AS IS"      
+// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.  See the 
+// License for the specific language governing rights and limitations under 
+// the License.                                                             
+//                                                                          
+// The Original Code is eCos - Embedded Configurable Operating System,      
+// released September 30, 1998.                                             
+//                                                                          
+// The Initial Developer of the Original Code is Red Hat.                   
+// Portions created by Red Hat are                                          
+// Copyright (C) 1998, 1999, 2000, 2001 Red Hat, Inc.
+// All Rights Reserved.                                                     
+// -------------------------------------------                              
+//                                                                          
+//####COPYRIGHTEND####
+//==========================================================================
+//#####DESCRIPTIONBEGIN####
+//
+// Author(s):    Koichi Nagashima
+// Contributors: Koichi Nagashima
+// Date:         2001-12-20
+// Purpose:      
+// Description:  
+//              
+//####DESCRIPTIONEND####
+//
+//==========================================================================
+
+
+// A Toshiba TC58FVB800FT-85 is equipped with the CQ7750 platform.
+
+#define CYGNUM_FLASH_INTERLEAVE	(1)
+#define CYGNUM_FLASH_SERIES	(1)
+#define CYGNUM_FLASH_WIDTH	(16)
+#define CYGNUM_FLASH_BASE 	(0x80000000u)
+// #define CYGHWR_FLASH_AM29XXXXX_NO_WRITE_PROTECT
+
+#include "cyg/io/flash_am29xxxxx.inl"
+
+
+// ------------------------------------------------------------------------
+// EOF cq7750_flash.c
--- a/packages/ecos.db
+++ b/packages/ecos.db
@@ -173,6 +173,16 @@ package CYGPKG_DEVS_FLASH_SH_EDK7708 {
 	   on the Hitachi EDK7708 platform."
 }
 
+package CYGPKG_DEVS_FLASH_CQ7750 {
+	alias 		{ "Support for flash memory on CqREEK SH7750 board" flash_cq7750 }
+	directory	devs/flash/sh/cq7750
+	script		flash_cq7750.cdl
+	hardware
+        description "
+           This package contains hardware support for flash memory
+	   on the CqREEK SH7750 platform."
+}
+
 package CYGPKG_DEVS_FLASH_MIPS_OCELOT {
 	alias 		{ "Support for flash memory on PMC-Sierra/Ocelot board" flash_qed_ocelot }
 	directory	devs/flash/mips/ocelot
@@ -996,7 +1006,7 @@ library loader."
 }
 
 package CYGPKG_COMPRESS_ZLIB {
-        alias           { "Zlib compress/decompress" zlib_compress compress_zlib }
+        alias           { "Zlib compress/decompress" zlib_compress compress_zlib zlib }
         directory       services/compress/zlib
         script          compress_zlib.cdl
         description "
@@ -2135,13 +2145,14 @@ target sa1100mm {
 
 target iq80310 {
 	alias { "Intel IQ80310 XScale board" iq80310 }
-	packages { CYGPKG_HAL_ARM
+        packages { CYGPKG_HAL_ARM
                    CYGPKG_HAL_ARM_IQ80310
                    CYGPKG_IO_PCI
-		   CYGPKG_DEVS_ETH_ARM_IQ80310
+                   CYGPKG_DEVS_ETH_INTEL_I82559
+                   CYGPKG_DEVS_ETH_ARM_IQ80310
                    CYGPKG_IO_SERIAL_GENERIC_16X5X
-		   CYGPKG_IO_SERIAL_ARM_IQ80310
-		   CYGPKG_DEVS_FLASH_IQ80310
+                   CYGPKG_IO_SERIAL_ARM_IQ80310
+                   CYGPKG_DEVS_FLASH_IQ80310
         }
         description "
         The iq80310 target provides the packages needed to run
@@ -2209,6 +2220,8 @@ target cq7750 {
         packages { CYGPKG_HAL_SH
                    CYGPKG_HAL_SH_SH4
                    CYGPKG_HAL_SH_SH7750_CQ7750
+		   CYGPKG_DEVS_FLASH_CQ7750
+		   CYGPKG_DEVS_FLASH_AMD_AM29XXXXX
                    CYGPKG_IO_SERIAL_SH_SCIF }
         description "
            The sh7750 target provides the packages needed to run
--- a/packages/hal/arm/iq80310/current/ChangeLog
+++ b/packages/hal/arm/iq80310/current/ChangeLog
@@ -1,3 +1,16 @@
+2002-01-03  Mark Salter  <msalter@redhat.com>
+
+	* misc/redboot_ROM.ecm: Use generic i82559 package.
+	* misc/redboot_ROMA.ecm: Ditto.
+	* misc/redboot_RAM.ecm: Ditto.
+	* misc/redboot_RAMA.ecm: Ditto.
+
+	* include/plf_io.h (CYGARC_UNCACHED_ADDRESS): New macro to return
+	uncached alias for a cached address.
+	(CYGARC_VIRT_TO_BUS): Macro to convert virtual to physical addresses.
+	* include/hal_platform_setup.h: Add uncached alias for first 128M of
+	SDRAM.
+
 2001-10-03  Jonathan Larmour  <jlarmour@redhat.com>
 
 	* src/diag/io_utils.c: Switch to diag_printf from printf.
--- a/packages/hal/arm/iq80310/current/include/hal_platform_setup.h
+++ b/packages/hal/arm/iq80310/current/include/hal_platform_setup.h
@@ -219,12 +219,22 @@
 	.set	__base,__base+1
 
 	// Invalid
-	.rept	0xF00 - 0xD01
+	.rept	0xE00 - 0xD01
 	.word 0
 	.set	__base,__base+1
 	.endr
 
+	// Uncached and unbuffered alias for first 256MB of SDRAM. This
+	// area can be used by device drivers for DMA operations. Buffers
+	// should be cache aligned.
+	.set	__base,0xA00
+	.rept	0xF00 - 0xE00
+	FL_SECTION_ENTRY __base,0,3,0,0,0,0
+	.set	__base,__base+1
+	.endr
+
 	// only I/O at 0xFE8xxxxx
+	.set	__base,0xF00
 	.rept	0x1000 - 0xF00
 	FL_SECTION_ENTRY __base,0,3,0,0,0,0
 	.set	__base,__base+1
--- a/packages/hal/arm/iq80310/current/include/plf_io.h
+++ b/packages/hal/arm/iq80310/current/include/plf_io.h
@@ -26,7 +26,7 @@
 //                                                                          
 // The Initial Developer of the Original Code is Red Hat.                   
 // Portions created by Red Hat are                                          
-// Copyright (C) 1998, 1999, 2000 Red Hat, Inc.                             
+// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.                             
 // All Rights Reserved.                                                     
 // -------------------------------------------                              
 //                                                                          
@@ -196,6 +196,13 @@ externC void cyg_hal_plf_pci_init(void);
     }                                                                         \
     CYG_MACRO_END
 
+// Some of SDRAM is aliased as uncached memory for drivers.
+#define CYGARC_UNCACHED_ADDRESS(_x_) \
+  (((((unsigned long)(_x_)) >> 28)==0xA) ? (((unsigned long)(_x_))|0x40000000) : (_x_))
+#define CYGARC_VIRT_TO_BUS(_x_) \
+  (((((unsigned long)(_x_)) >> 28)==0xA) ? (_x_) : (((unsigned long)(_x_))&~0x40000000))
+
+
 //-----------------------------------------------------------------------------
 // end of plf_io.h
 #endif // CYGONCE_PLF_IO_H
--- a/packages/hal/arm/iq80310/current/misc/redboot_RAM.ecm
+++ b/packages/hal/arm/iq80310/current/misc/redboot_RAM.ecm
@@ -14,6 +14,7 @@ cdl_configuration eCos {
     package -hardware CYGPKG_HAL_ARM current ;
     package -hardware CYGPKG_HAL_ARM_IQ80310 current ;
     package -hardware CYGPKG_IO_PCI current ;
+    package -hardware CYGPKG_DEVS_ETH_INTEL_I82559 current ;
     package -hardware CYGPKG_DEVS_ETH_ARM_IQ80310 current ;
     package -hardware CYGPKG_IO_SERIAL_ARM_IQ80310 current ;
     package -hardware CYGPKG_DEVS_FLASH_IQ80310 current ;
@@ -28,14 +29,6 @@ cdl_option CYGBLD_BUILD_GDB_STUBS {
     user_value 0
 };
 
-cdl_option CYGDBG_DEVS_ETH_ARM_IQ80310_CHATTER {
-    user_value 0
-};
-
-cdl_option CYGNUM_DEVS_ETH_ARM_IQ80310_DEV_COUNT {
-    user_value 1
-};
-
 cdl_option CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT {
     user_value 0
 };
--- a/packages/hal/arm/iq80310/current/misc/redboot_RAMA.ecm
+++ b/packages/hal/arm/iq80310/current/misc/redboot_RAMA.ecm
@@ -14,6 +14,7 @@ cdl_configuration eCos {
     package -hardware CYGPKG_HAL_ARM current ;
     package -hardware CYGPKG_HAL_ARM_IQ80310 current ;
     package -hardware CYGPKG_IO_PCI current ;
+    package -hardware CYGPKG_DEVS_ETH_INTEL_I82559 current ;
     package -hardware CYGPKG_DEVS_ETH_ARM_IQ80310 current ;
     package -hardware CYGPKG_IO_SERIAL_ARM_IQ80310 current ;
     package -hardware CYGPKG_DEVS_FLASH_IQ80310 current ;
@@ -28,14 +29,6 @@ cdl_option CYGBLD_BUILD_GDB_STUBS {
     user_value 0
 };
 
-cdl_option CYGDBG_DEVS_ETH_ARM_IQ80310_CHATTER {
-    user_value 0
-};
-
-cdl_option CYGNUM_DEVS_ETH_ARM_IQ80310_DEV_COUNT {
-    user_value 1
-};
-
 cdl_option CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT {
     user_value 0
 };
--- a/packages/hal/arm/iq80310/current/misc/redboot_ROM.ecm
+++ b/packages/hal/arm/iq80310/current/misc/redboot_ROM.ecm
@@ -14,28 +14,21 @@ cdl_configuration eCos {
     package -hardware CYGPKG_HAL_ARM current ;
     package -hardware CYGPKG_HAL_ARM_IQ80310 current ;
     package -hardware CYGPKG_IO_PCI current ;
+    package -hardware CYGPKG_DEVS_ETH_INTEL_I82559 current ;
     package -hardware CYGPKG_DEVS_ETH_ARM_IQ80310 current ;
     package -hardware CYGPKG_IO_SERIAL_ARM_IQ80310 current ;
+    package -hardware CYGPKG_DEVS_FLASH_IQ80310 current ;
     package -template CYGPKG_HAL current ;
     package -template CYGPKG_INFRA current ;
     package -template CYGPKG_REDBOOT current ;
     package CYGPKG_IO_FLASH current ;
     package CYGPKG_IO_ETH_DRIVERS current ;
-    package CYGPKG_DEVS_FLASH_IQ80310 current ;
 };
 
 cdl_option CYGBLD_BUILD_GDB_STUBS {
     user_value 0
 };
 
-cdl_option CYGDBG_DEVS_ETH_ARM_IQ80310_CHATTER {
-    user_value 0
-};
-
-cdl_option CYGNUM_DEVS_ETH_ARM_IQ80310_DEV_COUNT {
-    user_value 1
-};
-
 cdl_option CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT {
     user_value 0
 };
--- a/packages/hal/arm/iq80310/current/misc/redboot_ROMA.ecm
+++ b/packages/hal/arm/iq80310/current/misc/redboot_ROMA.ecm
@@ -14,28 +14,21 @@ cdl_configuration eCos {
     package -hardware CYGPKG_HAL_ARM current ;
     package -hardware CYGPKG_HAL_ARM_IQ80310 current ;
     package -hardware CYGPKG_IO_PCI current ;
+    package -hardware CYGPKG_DEVS_ETH_INTEL_I82559 current ;
     package -hardware CYGPKG_DEVS_ETH_ARM_IQ80310 current ;
     package -hardware CYGPKG_IO_SERIAL_ARM_IQ80310 current ;
+    package -hardware CYGPKG_DEVS_FLASH_IQ80310 current ;
     package -template CYGPKG_HAL current ;
     package -template CYGPKG_INFRA current ;
     package -template CYGPKG_REDBOOT current ;
     package CYGPKG_IO_FLASH current ;
     package CYGPKG_IO_ETH_DRIVERS current ;
-    package CYGPKG_DEVS_FLASH_IQ80310 current ;
 };
 
 cdl_option CYGBLD_BUILD_GDB_STUBS {
     user_value 0
 };
 
-cdl_option CYGDBG_DEVS_ETH_ARM_IQ80310_CHATTER {
-    user_value 0
-};
-
-cdl_option CYGNUM_DEVS_ETH_ARM_IQ80310_DEV_COUNT {
-    user_value 1
-};
-
 cdl_option CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT {
     user_value 0
 };
--- a/packages/io/fileio/current/ChangeLog
+++ b/packages/io/fileio/current/ChangeLog
@@ -1,3 +1,13 @@
+2002-01-04  Wade Jensen <Wade_Jensen@inter-tel.com>
+2002-01-04  Jonathan Larmour  <jlarmour@redhat.com>
+
+	* src/socket.cxx (recvfrom): Set msg.msg_namelen correctly for
+	NULL fromlen.
+
+2001-12-28  Gary Thomas  <gthomas@redhat.com>
+
+	* src/io.cxx (readwrite): Add missing check for return (errors).
+
 2001-11-29  Jonathan Larmour  <jlarmour@redhat.com>
 
 	* src/file.cxx (chdir): Don't detach from current dir if unset.
--- a/packages/io/fileio/current/src/io.cxx
+++ b/packages/io/fileio/current/src/io.cxx
@@ -125,6 +125,9 @@ static ssize_t readwrite( int fd, void *
     cyg_fp_free( fp );
 
     CYG_CANCELLATION_POINT;
+
+    if( ret != 0 )
+        FILEIO_RETURN(ret);
  
     FILEIO_RETURN_VALUE(cnt);
 }
--- a/packages/io/fileio/current/src/socket.cxx
+++ b/packages/io/fileio/current/src/socket.cxx
@@ -497,14 +497,14 @@ Cyg_Mutex nstab_lock[CYGNUM_FILEIO_NSTAB
         cyg_sock_ops *ops = (cyg_sock_ops *)fp->f_xops;
 
         // Set up a message header...
-	msg.msg_name = (caddr_t)from;
-        msg.msg_namelen = *fromlen;
-	msg.msg_iov = &iov;
-	msg.msg_iovlen = 1;
-	iov.iov_base = buf;
-	iov.iov_len = len;
-	msg.msg_control = 0;
-	msg.msg_flags = flags;        
+        msg.msg_name = (caddr_t)from;
+        msg.msg_namelen = fromlen ? *fromlen : 0;
+        msg.msg_iov = &iov;
+        msg.msg_iovlen = 1;
+        iov.iov_base = buf;
+        iov.iov_len = len;
+        msg.msg_control = 0;
+        msg.msg_flags = flags;        
 
         LOCK_SOCKET( fp );
 
--- a/packages/redboot/current/ChangeLog
+++ b/packages/redboot/current/ChangeLog
@@ -1,3 +1,10 @@
+2002-01-03  Gary Thomas  <gthomas@redhat.com>
+
+	* src/xyzModem.c (xyzModem_stream_read): BUG 57497
+	Try and detect (and remove) ^Z characters placed at end of stream.  
+	This data confuses higher processing, like the zlib decompression 
+	routines.
+
 2001-12-16  Mark Salter  <msalter@redhat.com>
 
 	* src/fs/ide.c: Add ATAPI support.
@@ -1938,7 +1945,7 @@ 2000-07-12  Gary Thomas  <gthomas@redhat
 //                                                                          
 // The Initial Developer of the Original Code is Red Hat.                   
 // Portions created by Red Hat are                                          
-// Copyright (C) 1998, 1999, 2000, 2001 Red Hat, Inc.
+// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
 // All Rights Reserved.                                                     
 // -------------------------------------------                              
 //                                                                          
--- a/packages/redboot/current/src/xyzModem.c
+++ b/packages/redboot/current/src/xyzModem.c
@@ -23,7 +23,7 @@
 //                                                                          
 // The Initial Developer of the Original Code is Red Hat.                   
 // Portions created by Red Hat are                                          
-// Copyright (C) 1998, 1999, 2000, 2001 Red Hat, Inc.                             
+// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.                             
 // All Rights Reserved.                                                     
 // -------------------------------------------                              
 //                                                                          
@@ -56,6 +56,7 @@
 #define BSP 0x08
 #define NAK 0x15
 #define CAN 0x18
+#define EOF 0x1A  // ^Z for DOS officionados
 
 // Data & state local to the protocol
 static struct {
@@ -373,6 +374,17 @@ xyzModem_stream_read(char *buf, int size
                         CYGACC_COMM_IF_PUTC(*xyz.__chan, ACK);
                         ZM_DEBUG(zm_dprintf("ACK block %d (%d)\n", xyz.blk, __LINE__));
                         xyz.next_blk = (xyz.next_blk + 1) & 0xFF;
+                        // Data blocks can be padded with ^Z (EOF) characters
+                        // This code tries to detect and remove them
+                        if (xyz.mode != xyzModem_zmodem) {
+                            if ((xyz.bufp[xyz.len-1] == EOF) &&
+                                (xyz.bufp[xyz.len-2] == EOF) &&
+                                (xyz.bufp[xyz.len-3] == EOF)) {
+                                while (xyz.len && (xyz.bufp[xyz.len-1] == EOF)) {
+                                    xyz.len--;
+                                }
+                            }
+                        }
                         break;
                     } else if (xyz.blk == ((xyz.next_blk - 1) & 0xFF)) {
                         // Just re-ACK this so sender will get on with it