Netgate Discussion Forum
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Search
    • Register
    • Login

    Patch for Firebox III running "FreeBSD 6.4"

    Scheduled Pinned Locked Moved Problems Installing or Upgrading pfSense Software
    1 Posts 1 Posters 1.4k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • D
      Dyna
      last edited by

      Hi Folks,

      I forward ported the patched that was for "FreeBSD 4.11" to work with "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 :) ..

      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

      1 Reply Last reply Reply Quote 0
      • First post
        Last post
      Copyright 2025 Rubicon Communications LLC (Netgate). All rights reserved.