Frederick Ros wrote:
matthieu castet wrote :
| Salut,
| le module devenant de plus en plus gros a cause du nouveau firmware de | l'eagle III et comme j'avais envi de faire mumuse avec l'interface | noyeau de chargement de firmware, j'ai codé un petit truc pour sortir le | firmware du module.
| La taille du module est passe de 120 Ko a 80 Ko.
| Ca devrait marche aussi bien sur les archi big et little indian.

Ca fait qq temps que je voulais jouer avec, mais bon le manque de temps
allie a ma paresse...  ;)
Par contre je ne me rappelle plus si c'est bien porte sur les 2.4 (j'en
ai plus a la maison..), et a partir de quelle version ...

http://kerneltrap.org/node/view/813 semble indique que c'est a partir du 2.4.23 pour le backport.

Matthieu

PS : je joint une version plus propre de la modif au niveau du driver
Index: driver/eu_utils.c
===================================================================
RCS file: /cvs/eagleusb/eagleusb/driver/eu_utils.c,v
retrieving revision 1.6
diff -u -r1.6 eu_utils.c
--- driver/eu_utils.c   9 Oct 2004 11:59:56 -0000       1.6
+++ driver/eu_utils.c   10 Oct 2004 11:15:46 -0000
@@ -29,8 +29,15 @@
 #include "eu_utils.h"
 #include "macros.h"
 #include "debug.h"
-#include "eu_firmware.h"
 
+//need CONFIG_FW_LOADER
+#define EXTERN_FW
+
+#ifdef EXTERN_FW
+#include "linux/firmware.h"
+#else
+#include "eu_firmware.h"
+#endif
 
 /* ----------------------- Private Macros/Variables ------------------------ */
 
@@ -73,8 +80,15 @@
 {
     int ret= 0;
     uint8_t value;
+#ifdef EXTERN_FW
+    const struct firmware *fw_entry;
+    int size;
+    uint8_t *pfw;
+    char *fw_name;
+#else
     uint32_t i = 0;
     eu_hex_record_t *pfirm;
+#endif
     
     eu_enters (DBG_UTILS);
 
@@ -91,6 +105,47 @@
         goto byebye;
     }
 
+#ifdef EXTERN_FW
+if ( IS_EAGLE_I (pid) ) 
+    {
+        fw_name = "eagleI.fw";
+    }
+    else  if ( !IS_EAGLE_III (pid) )
+    {
+        fw_name = "eagleII.fw";
+    }
+    else 
+    {
+        fw_name = "eagleIII.fw";
+    }
+
+    ret = request_firmware(&fw_entry, fw_name, &ins->usbdev->dev);
+    if(ret)
+    {
+        eu_err ("%s : Firmware not available\n", fw_name);
+        goto byebye;
+    }
+    pfw = fw_entry->data;
+
+    size = fw_entry->size;
+    while (size>0) 
+    {
+        uint8_t len = *pfw;
+        uint16_t add = le16_to_cpu(*(uint16_t*)(pfw+1));
+        ret = eu_send_modem_cmd (ins,
+                                 add,
+                                 len,
+                                 pfw+3);
+        if ( ret < 0 ) 
+        {
+            eu_err ("eu_send_modem_cmd of download data failed (%d)\n",ret);
+            goto byebye;
+        }
+        pfw += len + 3;
+        size -= len + 3;
+    }
+    release_firmware(fw_entry);
+#else
     if ( IS_EAGLE_I (pid) ) 
     {
         pfirm = &eu_eagle_I_firmware[0];
@@ -119,6 +174,7 @@
         }
         pfirm ++;
     }
+#endif
 
     /*
      * De-assert reset

Reply via email to