Patch for Firebox III running "FreeBSD 6.4"



  • 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


Log in to reply