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
..
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