News: This forum is now permanently frozen.
Pages: [1]
Topic: Patch for Firebox III running 1.32  (Read 1208 times)
« on: June 03, 2010, 21:13:41 »
Dyna *
Posts: 1

Hi Folks,

I forward ported the patched that was for 1.2x (FreeBSD 4.11) to work with 1.32 (FreeBSD 6.4), I just did it so there has not been any extensive testing. It's not much change as you can see. The ata subsystem quite  different in 6.4 so it's a whole different file, location and function Smiley ..

The network bit is the same but I'm including it below just to make it a bit clearer..

Anyways here it is:

--- src/sys/dev/ata/ata-lowlevel.c      2008-10-02 03:57:24.000000000 +0100
+++ src.pathced/sys/dev/ata/ata-lowlevel.c      2010-06-01 01:40:32.000000000 +0100
@@ -53,6 +53,16 @@
 static void ata_tf_read(struct ata_request *);
 static void ata_tf_write(struct ata_request *);

+/* Hack for Firebox III */
+static __inline void
+ad_vlb_sync(struct resource *port)
+{
+     (void)ATA_INB(port, ATA_SECTOR);
+     (void)ATA_INB(port, ATA_SECTOR);
+     (void)ATA_INB(port, ATA_SECTOR);
+}
+
+
 /*
  * low level ATA functions
  */
@@ -820,10 +830,14 @@
        ATA_IDX_INSW_STRM(ch, ATA_DATA,
                          (void*)((uintptr_t)request->data+request->donecount),
                          size / sizeof(int16_t));
-    else
+    else {
+       disable_intr();
+       ad_vlb_sync(ch->r_io[ATA_DATA].res);
        ATA_IDX_INSL_STRM(ch, ATA_DATA,
                          (void*)((uintptr_t)request->data+request->donecount),
                          size / sizeof(int32_t));
+       enable_intr();
+    }

     if (request->transfersize < length) {
        device_printf(request->dev, "WARNING - %s read data overrun %d>%d\n",
@@ -845,10 +859,14 @@
        ATA_IDX_OUTSW_STRM(ch, ATA_DATA,
                           (void*)((uintptr_t)request->data+request->donecount),
                           size / sizeof(int16_t));
-    else
+    else {
+       disable_intr();
+       ad_vlb_sync(ch->r_io[ATA_DATA].res);
        ATA_IDX_OUTSL_STRM(ch, ATA_DATA,
                           (void*)((uintptr_t)request->data+request->donecount),
                           size / sizeof(int32_t));
+       enable_intr();
+    }

     if (request->transfersize < length) {
        device_printf(request->dev, "WARNING - %s write data underrun %d>%d\n",


-- The network bit

--- src//sys/pci/if_dc.c        2008-11-24 21:26:26.000000000 +0000
+++ src.pathced//sys/pci/if_dc.c        2010-06-01 00:56:12.000000000 +0100
@@ -2030,7 +2030,7 @@
        switch(sc->dc_type) {
        case DC_TYPE_98713:
        case DC_TYPE_98713A:
-       case DC_TYPE_987x5:
+       /*case DC_TYPE_987x5:*/
        case DC_TYPE_PNICII:
                dc_read_eeprom(sc, (caddr_t)&mac_offset,
                    (DC_EE_NODEADDR_OFFSET / 2), 1, 0);


Cheers Dyna
 
Pages: [1]
 
 
Powered by SMF 1.1.20 | SMF © 2013, Simple Machines