From owner-p4-projects@FreeBSD.ORG Fri Mar 9 10:57:46 2007 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 9237C16A405; Fri, 9 Mar 2007 10:57:46 +0000 (UTC) X-Original-To: perforce@freebsd.org Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 6848016A403 for ; Fri, 9 Mar 2007 10:57:46 +0000 (UTC) (envelope-from piso@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [69.147.83.41]) by mx1.freebsd.org (Postfix) with ESMTP id 4F41E13C491 for ; Fri, 9 Mar 2007 10:57:46 +0000 (UTC) (envelope-from piso@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.6/8.13.6) with ESMTP id l29Avkld008994 for ; Fri, 9 Mar 2007 10:57:46 GMT (envelope-from piso@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.6/8.13.4/Submit) id l29Avj42008991 for perforce@freebsd.org; Fri, 9 Mar 2007 10:57:45 GMT (envelope-from piso@freebsd.org) Date: Fri, 9 Mar 2007 10:57:45 GMT Message-Id: <200703091057.l29Avj42008991@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to piso@freebsd.org using -f From: Paolo Pisati To: Perforce Change Reviews Cc: Subject: PERFORCE change 115591 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 09 Mar 2007 10:57:47 -0000 http://perforce.freebsd.org/chv.cgi?CH=115591 Change 115591 by piso@piso_newluxor on 2007/03/09 10:56:46 IFC@115590 Affected files ... .. //depot/projects/soc2006/intr_filter/amd64/amd64/trap.c#8 integrate .. //depot/projects/soc2006/intr_filter/dev/ata/ata-all.h#4 integrate .. //depot/projects/soc2006/intr_filter/dev/ata/ata-chipset.c#13 integrate .. //depot/projects/soc2006/intr_filter/dev/bge/if_bge.c#14 integrate .. //depot/projects/soc2006/intr_filter/dev/bge/if_bgereg.h#12 integrate .. //depot/projects/soc2006/intr_filter/dev/mxge/eth_z8e.dat.gz.uu#3 integrate .. //depot/projects/soc2006/intr_filter/dev/mxge/ethp_z8e.dat.gz.uu#3 integrate .. //depot/projects/soc2006/intr_filter/dev/sound/pci/maestro3.c#3 integrate .. //depot/projects/soc2006/intr_filter/i386/i386/trap.c#7 integrate .. //depot/projects/soc2006/intr_filter/ia64/ia64/trap.c#6 integrate .. //depot/projects/soc2006/intr_filter/kern/kern_jail.c#8 integrate .. //depot/projects/soc2006/intr_filter/kern/kern_thread.c#7 integrate .. //depot/projects/soc2006/intr_filter/netgraph/ng_eiface.c#3 integrate .. //depot/projects/soc2006/intr_filter/netinet/udp_usrreq.c#8 integrate .. //depot/projects/soc2006/intr_filter/nfsclient/nfs_socket.c#9 integrate .. //depot/projects/soc2006/intr_filter/nfsclient/nfs_subs.c#3 integrate .. //depot/projects/soc2006/intr_filter/nfsclient/nfs_vnops.c#7 integrate .. //depot/projects/soc2006/intr_filter/nfsclient/nfsnode.h#3 integrate .. //depot/projects/soc2006/intr_filter/powerpc/powerpc/trap.c#5 integrate .. //depot/projects/soc2006/intr_filter/sparc64/sparc64/trap.c#4 integrate .. //depot/projects/soc2006/intr_filter/sun4v/sun4v/hcall.S#4 integrate .. //depot/projects/soc2006/intr_filter/sys/proc.h#9 integrate Differences ... ==== //depot/projects/soc2006/intr_filter/amd64/amd64/trap.c#8 (text+ko) ==== @@ -38,7 +38,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/amd64/amd64/trap.c,v 1.313 2006/12/17 06:48:39 kmacy Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/amd64/trap.c,v 1.314 2007/03/09 04:02:36 mohans Exp $"); /* * AMD64 Trap and System call handling @@ -813,6 +813,8 @@ CTR4(KTR_SYSC, "syscall enter thread %p pid %d proc %s code %d", td, td->td_proc->p_pid, td->td_proc->p_comm, code); + td->td_syscalls++; + if (error == 0) { td->td_retval[0] = 0; td->td_retval[1] = frame->tf_rdx; ==== //depot/projects/soc2006/intr_filter/dev/ata/ata-all.h#4 (text+ko) ==== @@ -23,7 +23,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $FreeBSD: src/sys/dev/ata/ata-all.h,v 1.120 2007/02/21 19:07:18 sos Exp $ + * $FreeBSD: src/sys/dev/ata/ata-all.h,v 1.121 2007/03/08 16:39:25 sos Exp $ */ /* ATA register defines */ @@ -491,6 +491,7 @@ #define ATA_ATA_SLAVE 0x02 #define ATA_ATAPI_MASTER 0x04 #define ATA_ATAPI_SLAVE 0x08 +#define ATA_PORTMULTIPLIER 0x10 struct mtx state_mtx; /* state lock */ int state; /* ATA channel state */ ==== //depot/projects/soc2006/intr_filter/dev/ata/ata-chipset.c#13 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/dev/ata/ata-chipset.c,v 1.186 2007/03/01 21:18:27 sos Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/ata/ata-chipset.c,v 1.188 2007/03/08 20:21:42 sos Exp $"); #include "opt_ata.h" #include @@ -55,10 +55,11 @@ static int ata_generic_chipinit(device_t dev); static void ata_generic_intr(void *data); static void ata_generic_setmode(device_t dev, int mode); -static void ata_sata_phy_reset(device_t dev); +static int ata_sata_phy_reset(device_t dev); static void ata_sata_phy_event(void *context, int dummy); static int ata_sata_connect(struct ata_channel *ch); static void ata_sata_setmode(device_t dev, int mode); +static int ata_request2fis_h2d(struct ata_request *request, u_int8_t *fis); static int ata_ahci_chipinit(device_t dev); static int ata_ahci_allocate(device_t dev); static int ata_ahci_status(device_t dev); @@ -97,6 +98,7 @@ static int ata_intel_31244_allocate(device_t dev); static int ata_intel_31244_status(device_t dev); static int ata_intel_31244_command(struct ata_request *request); +static void ata_intel_31244_reset(device_t dev); static int ata_ite_chipinit(device_t dev); static void ata_ite_setmode(device_t dev, int mode); static int ata_jmicron_chipinit(device_t dev); @@ -122,6 +124,7 @@ static int ata_nvidia_chipinit(device_t dev); static int ata_nvidia_allocate(device_t dev); static int ata_nvidia_status(device_t dev); +static void ata_nvidia_reset(device_t dev); static int ata_promise_chipinit(device_t dev); static int ata_promise_allocate(device_t dev); static int ata_promise_status(device_t dev); @@ -157,6 +160,7 @@ static void ata_sii_setmode(device_t dev, int mode); static int ata_sis_chipinit(device_t dev); static int ata_sis_allocate(device_t dev); +static void ata_sis_reset(device_t dev); static void ata_sis_setmode(device_t dev, int mode); static int ata_via_chipinit(device_t dev); static int ata_via_allocate(device_t dev); @@ -227,39 +231,6 @@ * SATA support functions */ static void -ata_sata_phy_reset(device_t dev) -{ - struct ata_channel *ch = device_get_softc(dev); - int loop, retry; - - if ((ATA_IDX_INL(ch, ATA_SCONTROL) & ATA_SC_DET_MASK) == ATA_SC_DET_IDLE) { - ata_sata_connect(ch); - return; - } - - for (retry = 0; retry < 10; retry++) { - for (loop = 0; loop < 10; loop++) { - ATA_IDX_OUTL(ch, ATA_SCONTROL, ATA_SC_DET_RESET); - ata_udelay(100); - if ((ATA_IDX_INL(ch, ATA_SCONTROL) & - ATA_SC_DET_MASK) == ATA_SC_DET_RESET) - break; - } - ata_udelay(5000); - for (loop = 0; loop < 10; loop++) { - ATA_IDX_OUTL(ch, ATA_SCONTROL, ATA_SC_DET_IDLE | - ATA_SC_IPM_DIS_PARTIAL | - ATA_SC_IPM_DIS_SLUMBER); - ata_udelay(100); - if ((ATA_IDX_INL(ch, ATA_SCONTROL) & ATA_SC_DET_MASK) == 0) { - ata_sata_connect(ch); - return; - } - } - } -} - -static void ata_sata_phy_event(void *context, int dummy) { struct ata_connect_task *tp = (struct ata_connect_task *)context; @@ -271,7 +242,7 @@ if (tp->action == ATA_C_ATTACH) { if (bootverbose) device_printf(tp->dev, "CONNECTED\n"); - ata_sata_connect(ch); + ATA_RESET(tp->dev); ata_identify(tp->dev); } if (tp->action == ATA_C_DETACH) { @@ -292,6 +263,36 @@ } static int +ata_sata_phy_reset(device_t dev) +{ + struct ata_channel *ch = device_get_softc(dev); + int loop, retry; + + if ((ATA_IDX_INL(ch, ATA_SCONTROL) & ATA_SC_DET_MASK) == ATA_SC_DET_IDLE) + return ata_sata_connect(ch); + + for (retry = 0; retry < 10; retry++) { + for (loop = 0; loop < 10; loop++) { + ATA_IDX_OUTL(ch, ATA_SCONTROL, ATA_SC_DET_RESET); + ata_udelay(100); + if ((ATA_IDX_INL(ch, ATA_SCONTROL) & + ATA_SC_DET_MASK) == ATA_SC_DET_RESET) + break; + } + ata_udelay(5000); + for (loop = 0; loop < 10; loop++) { + ATA_IDX_OUTL(ch, ATA_SCONTROL, ATA_SC_DET_IDLE | + ATA_SC_IPM_DIS_PARTIAL | + ATA_SC_IPM_DIS_SLUMBER); + ata_udelay(100); + if ((ATA_IDX_INL(ch, ATA_SCONTROL) & ATA_SC_DET_MASK) == 0) + return ata_sata_connect(ch); + } + } + return 0; +} + +static int ata_sata_connect(struct ata_channel *ch) { u_int32_t status; @@ -310,37 +311,12 @@ device_printf(ch->dev, "SATA connect status=%08x\n", status); return 0; } + if (bootverbose) + device_printf(ch->dev, "SATA connect time=%dms\n", timeout * 10); /* clear SATA error register */ ATA_IDX_OUTL(ch, ATA_SERROR, ATA_IDX_INL(ch, ATA_SERROR)); - /* poll 31 seconds for device ready */ - /* XXX SOS 10 secs for now as I have little patience */ - for (timeout = 0; timeout < 1000; timeout++) { - if (ATA_IDX_INB(ch, ATA_STATUS) & ATA_S_BUSY) - DELAY(10000); - else - break; - } - if (bootverbose) - device_printf(ch->dev, "SATA connect ready time=%dms\n", timeout * 10); - - /* if we have legacy resources an old fashioned reset might be needed */ - if (ch->r_io[ATA_DATA].res) - ata_generic_reset(ch->dev); - - /* register device type from signature */ - ch->devices = 0; - if (timeout < 1000) { - if ((ATA_IDX_INB(ch, ATA_CYL_LSB) == ATAPI_MAGIC_LSB) && - (ATA_IDX_INB(ch, ATA_CYL_MSB) == ATAPI_MAGIC_MSB)) - ch->devices = ATA_ATAPI_MASTER; - else - ch->devices = ATA_ATA_MASTER; - } - if (bootverbose) - device_printf(ch->dev, "sata_connect devices=0x%b\n", - ch->devices, "\20\3ATAPI_MASTER\1ATA_MASTER"); return 1; } @@ -378,6 +354,49 @@ } } +static int +ata_request2fis_h2d(struct ata_request *request, u_int8_t *fis) +{ + struct ata_device *atadev = device_get_softc(request->dev); + + if (request->flags & ATA_R_ATAPI) { + fis[0] = 0x27; /* host to device */ + fis[1] = 0x80; /* command FIS (note PM goes here) */ + fis[2] = ATA_PACKET_CMD; + if (request->flags & ATA_R_DMA) + fis[3] = ATA_F_DMA; + else { + fis[5] = request->transfersize; + fis[6] = request->transfersize >> 8; + } + fis[7] = ATA_D_LBA | atadev->unit; + fis[15] = ATA_A_4BIT; + return 20; + } + else { + ata_modify_if_48bit(request); + fis[0] = 0x27; /* host to device */ + fis[1] = 0x80; /* command FIS (note PM goes here) */ + fis[2] = request->u.ata.command; + fis[3] = request->u.ata.feature; + fis[4] = request->u.ata.lba; + fis[5] = request->u.ata.lba >> 8; + fis[6] = request->u.ata.lba >> 16; + fis[7] = ATA_D_LBA | atadev->unit; + if (!(atadev->flags & ATA_D_48BIT_ACTIVE)) + fis[7] |= (request->u.ata.lba >> 24 & 0x0f); + fis[8] = request->u.ata.lba >> 24; + fis[9] = request->u.ata.lba >> 32; + fis[10] = request->u.ata.lba >> 40; + fis[11] = request->u.ata.feature >> 8; + fis[12] = request->u.ata.count; + fis[13] = request->u.ata.count >> 8; + fis[15] = ATA_A_4BIT; + return 20; + } + return 0; +} + /* * AHCI v1.x compliant SATA chipset support functions @@ -440,17 +459,6 @@ struct ata_channel *ch = device_get_softc(dev); int offset = ch->unit << 7; - /* setup legacy cruft we need */ - ch->r_io[ATA_DATA].res = NULL; - ch->r_io[ATA_CYL_LSB].res = ctlr->r_res2; - ch->r_io[ATA_CYL_LSB].offset = ATA_AHCI_P_SIG + 2 + offset; - ch->r_io[ATA_CYL_MSB].res = ctlr->r_res2; - ch->r_io[ATA_CYL_MSB].offset = ATA_AHCI_P_SIG + 3 + offset; - ch->r_io[ATA_STATUS].res = ctlr->r_res2; - ch->r_io[ATA_STATUS].offset = ATA_AHCI_P_TFD + offset; - ch->r_io[ATA_ALTSTAT].res = ctlr->r_res2; - ch->r_io[ATA_ALTSTAT].offset = ATA_AHCI_P_TFD + offset; - /* set the SATA resources */ ch->r_io[ATA_SSTATUS].res = ctlr->r_res2; ch->r_io[ATA_SSTATUS].offset = ATA_AHCI_P_SSTS + offset; @@ -495,62 +503,48 @@ { struct ata_pci_controller *ctlr = device_get_softc(device_get_parent(dev)); struct ata_channel *ch = device_get_softc(dev); - struct ata_connect_task *tp; - u_int32_t action, istatus, sstatus, error, issued; + u_int32_t action = ATA_INL(ctlr->r_res2, ATA_AHCI_IS); int offset = ch->unit << 7; int tag = 0; - action = ATA_INL(ctlr->r_res2, ATA_AHCI_IS); if (action & (1 << ch->unit)) { - istatus = ATA_INL(ctlr->r_res2, ATA_AHCI_P_IS + offset); - issued = ATA_INL(ctlr->r_res2, ATA_AHCI_P_CI + offset); - sstatus = ATA_INL(ctlr->r_res2, ATA_AHCI_P_SSTS + offset); - error = ATA_INL(ctlr->r_res2, ATA_AHCI_P_SERR + offset); + u_int32_t istatus = ATA_INL(ctlr->r_res2, ATA_AHCI_P_IS + offset); + u_int32_t status = ATA_IDX_INL(ch, ATA_SSTATUS); + u_int32_t error = ATA_IDX_INL(ch, ATA_SERROR); /* clear interrupt(s) */ - ATA_OUTL(ctlr->r_res2, ATA_AHCI_IS, action); + ATA_OUTL(ctlr->r_res2, ATA_AHCI_IS, action & (1 << ch->unit)); ATA_OUTL(ctlr->r_res2, ATA_AHCI_P_IS + offset, istatus); - ATA_OUTL(ctlr->r_res2, ATA_AHCI_P_SERR + offset, error); + ATA_IDX_OUTL(ch, ATA_SERROR, error); - /* do we have cold connect surprise */ - if (istatus & ATA_AHCI_P_IX_CPD) { - printf("ata_ahci_status status=%08x sstatus=%08x error=%08x\n", - istatus, sstatus, error); - } + if (error) { + struct ata_connect_task *tp; - /* check for and handle connect events */ - if ((istatus & ATA_AHCI_P_IX_PC) && - (tp = (struct ata_connect_task *) - malloc(sizeof(struct ata_connect_task), - M_ATA, M_NOWAIT | M_ZERO))) { + /* if we have a connection event deal with it */ + if ((error & ATA_SE_PHY_CHANGED) && + (tp = (struct ata_connect_task *) + malloc(sizeof(struct ata_connect_task), + M_ATA, M_NOWAIT | M_ZERO))) { - if (bootverbose) - device_printf(ch->dev, "CONNECT requested\n"); - tp->action = ATA_C_ATTACH; - tp->dev = ch->dev; - TASK_INIT(&tp->task, 0, ata_sata_phy_event, tp); - taskqueue_enqueue(taskqueue_thread, &tp->task); + if (((status & ATA_SS_CONWELL_MASK) == ATA_SS_CONWELL_GEN1) || + ((status & ATA_SS_CONWELL_MASK) == ATA_SS_CONWELL_GEN2)) { + if (bootverbose) + device_printf(ch->dev, "CONNECT requested\n"); + tp->action = ATA_C_ATTACH; + } + else { + if (bootverbose) + device_printf(ch->dev, "DISCONNECT requested\n"); + tp->action = ATA_C_DETACH; + } + tp->dev = ch->dev; + TASK_INIT(&tp->task, 0, ata_sata_phy_event, tp); + taskqueue_enqueue(taskqueue_thread, &tp->task); + } } - /* check for and handle disconnect events */ - else if ((istatus & ATA_AHCI_P_IX_PRC) && - !((sstatus & ATA_SS_CONWELL_MASK) == ATA_SS_CONWELL_GEN1 || - (sstatus & ATA_SS_CONWELL_MASK) == ATA_SS_CONWELL_GEN2) && - (tp = (struct ata_connect_task *) - malloc(sizeof(struct ata_connect_task), - M_ATA, M_NOWAIT | M_ZERO))) { - - if (bootverbose) - device_printf(ch->dev, "DISCONNECT requested\n"); - tp->action = ATA_C_DETACH; - tp->dev = ch->dev; - TASK_INIT(&tp->task, 0, ata_sata_phy_event, tp); - taskqueue_enqueue(taskqueue_thread, &tp->task); - } - /* do we have any device action ? */ - if (!(issued & (1 << tag))) - return 1; + return (!(ATA_INL(ctlr->r_res2, ATA_AHCI_P_CI + offset) & (1 << tag))); } return 0; } @@ -667,8 +661,9 @@ if (!(ATA_INL(ctlr->r_res2, ATA_AHCI_PI) & (1 << ch->unit))) { device_printf(dev, "port not implemented\n"); - ch->devices = 0; + return; } + ch->devices = 0; /* kill off all activity on this channel */ cmd = ATA_INL(ctlr->r_res2, ATA_AHCI_P_CMD + offset); @@ -704,12 +699,22 @@ ATA_OUTL(ctlr->r_res2, ATA_AHCI_P_CMD + offset, ATA_AHCI_P_CMD_SUD); /* enable interface */ - ata_sata_phy_reset(dev); - - /* no ATAPI yet */ - if (ch->devices & ATA_ATAPI_MASTER) { - device_printf(ch->dev, "AHCI SATA ATAPI devices not supported yet\n"); - ch->devices = 0; + if (ata_sata_phy_reset(dev)) { + switch (ATA_INL(ctlr->r_res2, ATA_AHCI_P_SIG + offset)) { + case 0xeb140101: + ch->devices = ATA_ATAPI_MASTER; + device_printf(ch->dev, "SATA ATAPI devices not supported yet\n"); + ch->devices = 0; + break; + case 0x96690101: + ch->devices = ATA_PORTMULTIPLIER; + device_printf(ch->dev, "Portmultipliers not supported yet\n"); + ch->devices = 0; + break; + case 0x00000101: + ch->devices = ATA_ATA_MASTER; + break; + } } /* clear any interrupts pending on this channel */ @@ -754,47 +759,12 @@ static int ata_ahci_setup_fis(struct ata_ahci_cmd_tab *ctp, struct ata_request *request) { - struct ata_device *atadev = device_get_softc(request->dev); - bzero(ctp->cfis, 64); if (request->flags & ATA_R_ATAPI) { - ctp->cfis[0] = 0x27; /* host to device */ - ctp->cfis[1] = 0x80; /* command FIS (note PM goes here) */ - ctp->cfis[2] = ATA_PACKET_CMD; - if (request->flags & ATA_R_DMA) - ctp->cfis[3] = ATA_F_DMA; - else { - ctp->cfis[5] = request->transfersize; - ctp->cfis[6] = request->transfersize >> 8; - } - ctp->cfis[7] = ATA_D_LBA | atadev->unit; - ctp->cfis[15] = ATA_A_4BIT; bzero(ctp->acmd, 32); bcopy(request->u.atapi.ccb, ctp->acmd, 12); - return 20; } - else { - ata_modify_if_48bit(request); - ctp->cfis[0] = 0x27; /* host to device */ - ctp->cfis[1] = 0x80; /* command FIS (note PM goes here) */ - ctp->cfis[2] = request->u.ata.command; - ctp->cfis[3] = request->u.ata.feature; - ctp->cfis[4] = request->u.ata.lba; - ctp->cfis[5] = request->u.ata.lba >> 8; - ctp->cfis[6] = request->u.ata.lba >> 16; - ctp->cfis[7] = ATA_D_LBA | atadev->unit; - if (!(atadev->flags & ATA_D_48BIT_ACTIVE)) - ctp->cfis[7] |= (request->u.ata.lba >> 24 & 0x0f); - ctp->cfis[8] = request->u.ata.lba >> 24; - ctp->cfis[9] = request->u.ata.lba >> 32; - ctp->cfis[10] = request->u.ata.lba >> 40; - ctp->cfis[11] = request->u.ata.feature >> 8; - ctp->cfis[12] = request->u.ata.count; - ctp->cfis[13] = request->u.ata.count >> 8; - ctp->cfis[15] = ATA_A_4BIT; - return 20; - } - return 0; + return ata_request2fis_h2d(request, &ctp->cfis[0]); } @@ -1362,6 +1332,7 @@ } } + /* * Cyrix chipset support functions */ @@ -1751,7 +1722,7 @@ return ENXIO; ctlr->channels = 4; ctlr->allocate = ata_intel_31244_allocate; - ctlr->reset = ata_sata_phy_reset; + ctlr->reset = ata_intel_31244_reset; } ctlr->setmode = ata_sata_setmode; } @@ -2042,6 +2013,13 @@ return 0; } +static void +ata_intel_31244_reset(device_t dev) +{ + if (ata_sata_phy_reset(dev)) + ata_generic_reset(dev); +} + /* * Integrated Technology Express Inc. (ITE) chipset support functions @@ -2694,9 +2672,6 @@ u_int32_t rsp_in, rsp_out; int slot; - /* unload SG list */ - ch->dma->unload(ch->dev); - /* stop timeout */ callout_stop(&request->callout); @@ -2720,6 +2695,10 @@ if (!(request->status & ATA_S_ERROR) && !(request->flags & ATA_R_TIMEOUT)) request->donecount = request->bytecount; + + /* unload SG list */ + ch->dma->unload(ch->dev); + res = ATA_OP_FINISHED; } @@ -2754,7 +2733,8 @@ ATA_OUTL(ctlr->r_res1, 0x0200c + ATA_MV_EDMA_BASE(ch), ~0x0); /* enable channel and test for devices */ - ata_sata_phy_reset(dev); + if (ata_sata_phy_reset(dev)) + ata_generic_reset(dev); /* enable EDMA machinery */ ATA_OUTL(ctlr->r_res1, 0x02028 + ATA_MV_EDMA_BASE(ch), 0x00000001); @@ -2773,8 +2753,8 @@ for (i = 0; i < nsegs; i++) { prd[i].addrlo = htole32(segs[i].ds_addr); - prd[i].addrhi = 0; prd[i].count = htole32(segs[i].ds_len); + prd[i].addrhi = htole32((u_int64_t)segs[i].ds_addr >> 32); } prd[i - 1].count |= htole32(ATA_DMA_EOT); } @@ -2866,6 +2846,7 @@ } } + /* * NetCell chipset support functions */ @@ -2909,6 +2890,7 @@ return 0; } + /* * nVidia chipset support functions */ @@ -2971,7 +2953,7 @@ int offset = ctlr->chip->cfg2 & NV4 ? 0x0440 : 0x0010; ctlr->allocate = ata_nvidia_allocate; - ctlr->reset = ata_sata_phy_reset; + ctlr->reset = ata_nvidia_reset; /* enable control access */ pci_write_config(dev, 0x50, pci_read_config(dev, 0x50, 1) | 0x04,1); @@ -3086,6 +3068,13 @@ return (status & (0x01 << shift)); } +static void +ata_nvidia_reset(device_t dev) +{ + if (ata_sata_phy_reset(dev)) + ata_generic_reset(dev); +} + /* * Promise chipset support functions @@ -3755,7 +3744,8 @@ if ((ctlr->chip->cfg2 == PRSATA) || ((ctlr->chip->cfg2 == PRCMBO) && (ch->unit < 2))) { - ata_sata_phy_reset(dev); + if (ata_sata_phy_reset(dev)) + ata_generic_reset(dev); /* reset and enable plug/unplug intr */ ATA_OUTL(ctlr->r_res2, 0x06c, (0x00000011 << ch->unit)); @@ -3790,7 +3780,8 @@ (ATA_INL(ctlr->r_res2, 0x414 + (ch->unit << 8)) & ~0x00000003) | 0x00000001); - ata_sata_phy_reset(dev); + if (ata_sata_phy_reset(dev)) + ata_generic_reset(dev); /* reset and enable plug/unplug intr */ ATA_OUTL(ctlr->r_res2, 0x060, (0x00000011 << ch->unit)); @@ -4527,7 +4518,8 @@ ATA_OUTL(ctlr->r_res2, 0x48, ATA_INL(ctlr->r_res2, 0x48) & ~(0xc0 >> ch->unit)); - ata_sata_phy_reset(dev); + if (ata_sata_phy_reset(dev)) + ata_generic_reset(dev); /* enable PHY state change interrupt */ ATA_OUTL(ctlr->r_res2, 0x148 + offset, (1 << 16)); @@ -4713,7 +4705,7 @@ if ((ctlr->r_res2 = bus_alloc_resource_any(dev, ctlr->r_type2, &ctlr->r_rid2, RF_ACTIVE))) { ctlr->allocate = ata_sis_allocate; - ctlr->reset = ata_sata_phy_reset; + ctlr->reset = ata_sis_reset; /* enable PCI interrupt */ pci_write_config(dev, PCIR_COMMAND, @@ -4753,6 +4745,13 @@ } static void +ata_sis_reset(device_t dev) +{ + if (ata_sata_phy_reset(dev)) + ata_generic_reset(dev); +} + +static void ata_sis_setmode(device_t dev, int mode) { device_t gparent = GRANDPARENT(dev); @@ -5008,9 +5007,10 @@ struct ata_channel *ch = device_get_softc(dev); if ((ctlr->chip->cfg2 & VIABAR) && (ch->unit > 1)) - ata_generic_reset(dev); + ata_generic_reset(dev); else - ata_sata_phy_reset(dev); + if (ata_sata_phy_reset(dev)) + ata_generic_reset(dev); } static void ==== //depot/projects/soc2006/intr_filter/dev/bge/if_bge.c#14 (text+ko) ==== @@ -32,7 +32,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/dev/bge/if_bge.c,v 1.183 2007/03/08 00:49:26 jkim Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/bge/if_bge.c,v 1.184 2007/03/09 01:30:23 jkim Exp $"); /* * Broadcom BCM570x family gigabit ethernet driver for FreeBSD. @@ -256,6 +256,10 @@ { BGE_CHIPID_BCM5714_B3, "BCM5714 B3" }, { BGE_CHIPID_BCM5715_A0, "BCM5715 A0" }, { BGE_CHIPID_BCM5715_A1, "BCM5715 A1" }, + { BGE_CHIPID_BCM5715_A3, "BCM5715 A3" }, + { BGE_CHIPID_BCM5755_A0, "BCM5755 A0" }, + { BGE_CHIPID_BCM5755_A1, "BCM5755 A1" }, + { BGE_CHIPID_BCM5755_A2, "BCM5755 A2" }, /* 5754 and 5787 share the same ASIC ID */ { BGE_CHIPID_BCM5787_A0, "BCM5754/5787 A0" }, { BGE_CHIPID_BCM5787_A1, "BCM5754/5787 A1" }, ==== //depot/projects/soc2006/intr_filter/dev/bge/if_bgereg.h#12 (text+ko) ==== @@ -30,7 +30,7 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF * THE POSSIBILITY OF SUCH DAMAGE. * - * $FreeBSD: src/sys/dev/bge/if_bgereg.h,v 1.70 2007/02/12 23:58:52 jkim Exp $ + * $FreeBSD: src/sys/dev/bge/if_bgereg.h,v 1.71 2007/03/09 01:30:23 jkim Exp $ */ /* @@ -273,6 +273,7 @@ #define BGE_CHIPID_BCM5714_B3 0x80030000 #define BGE_CHIPID_BCM5715_A0 0x90000000 #define BGE_CHIPID_BCM5715_A1 0x90010000 +#define BGE_CHIPID_BCM5715_A3 0x90030000 #define BGE_CHIPID_BCM5755_A0 0xa0000000 #define BGE_CHIPID_BCM5755_A1 0xa0010000 #define BGE_CHIPID_BCM5755_A2 0xa0020000 ==== //depot/projects/soc2006/intr_filter/dev/mxge/eth_z8e.dat.gz.uu#3 (text+ko) ==== @@ -29,866 +29,986 @@ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -$FreeBSD: src/sys/dev/mxge/eth_z8e.dat.gz.uu,v 1.3 2006/09/15 19:24:45 gallatin Exp $ +$FreeBSD: src/sys/dev/mxge/eth_z8e.dat.gz.uu,v 1.4 2007/03/08 17:49:06 gallatin Exp $ ***************************************************************************/ begin 644 eth_z8e.dat.gz -M'XL("-3I"D4``V5T:%]Z.&4N9&%T`.Q:?6Q45W8_\V:,QQ.6F1@#8V-@,#;8 -MQH`#5H(JLW%WC4I4B"D?K5?0X%3.UDEI,DF\=&"-9WAX*QL1[!(KH0W@62V1 -MVHALJ,I*J43*9/%*J01^1*(J*Z7*K,M:LY%))GC`@_WFW?[.>_/LF?$SR6XB -M]1]&NGKOWGO.N>?KGG/N?4/T#7Z2^YM@/_P]_#W\/?P]_#W\/?S]/_WN2`[Z -M91_1N.ST1NF=^C=?%RJ&;5%R>OF9;G02XU(?.5_U"BU83`YQ3-JHR8*40))\ -M)10<)F<@(1&=.$3.H%\DE<`H#<5'*1@7,46]2YUWR:FHMZGS9?(.=OR6CBP$ -MO2(B^0V1-&EKDJ!@*>/>HJ'3MRAX.ALWN(2\U]`7,KG;3PEMT*>2ZI(V=KQ- -MCN!RDJZU1LBWDGDI:&!>NEX@Y\]^&)'$,=?>\DI:.?D>.*MY&N>#\AY=0F -M4A(JG7B!YEY)U)/2I1'34_;7XWD7,*/D>X5HA`IJ^T$G:M"TC2H\Q#GM<7BE$!'H[B.;!0Q%;T4Q'@/<#OB-HFDXS?B_%U_>2YV!EW]+XA -M1MT!LOD.49Y;)1MD>'8`8RN*=)P+4=IRD7'$HCU?:HOVQ+4W]]P1;^X92[VY -M)Q$\2,[4HCUWA_RZKCQ#?N@J1<[#M\GSS,NPD?H_=/AY\FH%SKBB_A<]TT%" -M*RC(LL&.S7^^B;;]\?0KY-U\LAF]@O( -MEAB374[(Y1B77;NB-M6;EBNAA(FNH-D#Y#!P7)<,^5U3\L.'6A+!-CO3P7@_ -M\*,F_F"@@=QAL@WPNC_;8DO3J#=\\Y'&C/6_DU[_AKG^T?3ZF"MT>\WU']'Y -MO!)@7W^$8,^M#!LE5Q?3PEB1B7_BC0S^VZ?X[P*^"W#U)O^,FR@H;+#R@0FI -MZ$/(][V)8"5-RN3$>\.DJ"31+6U?C6>S()X9+\BKJ?]J4DAFE1?XRY8])+.HQ+>E'O=TLAX93\:T*4SW)HT*VB -M8E^IOZ6F@W'!LBB!&S3O",>(JQC_@.8ER"T*F/8HTPV!UN$TK3#@XCS/M$PZ -M3"/Y72$87E&[&">L%DA]:!?0HN#I#NL7=.*3DZQ;.][MG@GL2UVW*ZTNPS'[N@E=%OM:0S;[&AY79E1(CU"WV'0'N[$F@D46!O40OL?N#*JLZ/O6_"H-L+&GO'F9[3W@4#S@F;P -M]]ZJ$`72_%W7G/;H.O+;,GU*MX'N2[=)Z[;',>9A'V+_>3HAU*$$S]?1TWZ5 -M)F0*[5.=-.1_FU).>T11$S24Z$?_79V_H40KX.)'4MWV"\"]##ZU9_P.^M,\ -M$1_R)YA>$&.I;6TB.OGW1-?:K@&';2`FW3;5[@Z$\JZ-7L38!S3WB%#9;Z^U -MM:(!]Z[JOC;Z`3WC]]/<6T'XJ?B"_5C,"]&VVYH8\E\%S*2`/JYSC-OV_)AX -M^NZXV'8[8DOUV"^D"NP1K<`>U7KL<7',T0)]%>@Z=SGV&?9U/(.Q4L,.#K_H -M=L"''"$EL!^V<^B^+GH)^+]ZZFJLM"ZZZ/0:_CO.>%7,=[HF%\O,TIQBOG"I?KK)CT -M*_[.ZSIQ@&K<"7(.R%JS^XB'D*^* -M^%W(N[H'[I&#\YA6@/4";B%>K:2!5Q#_9*H -M0YTI6M)T<)E01D5$"=RF`5W0^,_%58*5"O19:J_%[%]L0^"(UA/W"MP'D6M5UR7"XL -MC9(WH.=ASH/J9MX;H5GH%TW37^!-T^P3SL*N3H/O9&="Q)AVI/,.W0(,ZHBX -MZ"X,<(Z-')C@L6+XAC#X6E`\)M$BY/]XY-`$C720G6L@\(3Z9\T-YFE,IG?& -MI-V[,388I;5Z'@;.`O1O3,&`!OJW,G!VCTG5[V`LF8TSWYF-,]]K]L'?J.\` -MRU7T:^"'T4+&NO/K9T9\_+A=-R<^V1GX1H$/!P^R##K^1=^_2JQTB"1_P`WZC2=_T -M'1W>\)^8X3]%>Z=@4#X,^A($7<9@TU$EL9E0W[).P^Q3YIKN#L-ON(XUUXS" -M5S@F9_CG+5XKO4;$7`.T;['_Z+4[Z*?QTK8JBF7KHRB9K8\%SDP='H5O1FG^ -M5?9CRWWIM(>#]VEI4!/#\-4S\'L[/R&#O2D)>9WSKO*Y1^FXRS4!P\X'["W` -MO):&Y:-.++0 -M\Z`X`MM$P*\T0@L/LPV&:6$;RX-FP]@/Q#VQ%S;@.(%]NK`?SXC>9&I)]R\` -M;HO`.8+',=8B9!O'L$M8^WB4*LBHIQ+C`YRF.(Z!UU]=I8S[^4X\Y -MH#4@&3E*`Z]G9:T-^:A-.^8)Z^_I.>9#P_J6]*=BT**?IN-86',Z(NGX&X.L -M!<.T*(R^)*1%C3_7XM*'[7K"QOEX4=BB[4?K0.M.]_MU&<9:<7Y9%-904W`? -M[^UBK%PRWP>^Y+/,HC!T$9[5'E.\>O\R@]<+&;PZA\F[-\UK/)M7[UZT2K0& -MM.WI?F8K&I>]/JQ?:MB$Q[`&Z^)+G-$GF_5ZDL=9GSRNH79`OP[S'O:57LWP -MA>S:QKJNX1SU.L!U[N!^QYDJI -MCAN;RF5\'I<-_[E%Q9M8)LXS'+>X7L$9/6Z<#8LS\Q_'K<3%0TD'X_.YW,#W -MJK/%"/`Q%_FM;>@TT9`/=?#I!N3<"6+>AJFX2_?A%R>(WY6./R(%,$9,++XT -MB/4Y)@[Z[^#L"AN_PKY>_+LK'7'FZV+4EO(:-BF.\?ICW84M9UD&EC>QD6$0 -M_[T14]X3"SF>%??E\KIY\YKG6S?Y:@,5`5?FW0YX]QIQL<27GIW3.3CG!_NOB?N@=0KPT,/BG/R_."?_+^[+Z'O0#V?(X+%[R0;_B6'\?7.< -MZR?P&POJ=V,-?`=7.$R+W^9:*TWS5J:>TG+EU#^E.?5/J3=#KH3["/V96]WQ -M`Z[%(%><:R+XB!/U@1?K>OCN;Z2=[$H@1@.%J#4+7$DA%2?P#KN4MD9M$X[< -M&+;]^T^MV=&TS;?_N16Z>2@W%`HTBO4T'O"O8Y<)I- -M',#J..YVPK:S)UFO2RZ9>HVFZ6G=A?"GTAOP:\O8:)E#)'+WRMI- -M14OPNJJ1'UT!(5]N1NZ\:5US+$7]MR1NU'^N`/Q\8H26?HSG))Z_,&E&.IGF -M4IPS;3N95LYX&_QJPJV&FBWFNH1LWV$Q?AJQ>R)*2Z\SCQGC%X4\;Q?#1WD] -MX%C7#J[`J\7D!9_W1VC9\Z@A8P;/RS[(7F>9PYKG9:7@^;XUS\LVZKJ3P+;X5]@"^E]N8YQL&7W=UC;PA6L;^"Y9^XWOACA)5K2X%IADN[`=9NI_ -M^5Q3_U\A0PJPOYCVIS);#IU=UK(LWP]94M:R+.^VEF5Y&#RG9OK2\O+Z/IO02^@<.U9*1S/3$_(SZ2'J0/R/\%:'RH2;9S -MABY6O)R];EF+M2[*`M#%%]:Z*.NWUD79>=XNW]HFU?N2K -M%'EPQG0:<*,,-^I.&O;UO4+.SZGL$]"QB;?VB'EQRF=X)?!%1$&$Y=HK>XT5 -ME=9[#UI,=YL?+-8<3Q[SZ[P3^L;N@%.QO>V![8'VZ#\64/_Y9MS^(A: -MZW]%6K<5NZ#;3ZUU6^&?/6]4'(?\G\[T[XIS!@X=91SC^^3*!0QC^'%%BN?9 -MYS-P;H)6\[2O5]Q(T\BDJ[KC5CZ]LDBGE^!OL]1\EM<\0/0YK7R>X7A\A3?3 -MIU*M-F*X'-II^?-W#J3A&2X'IM_8.RMO9N^=E>>S\QWT#SQ- -MMIW#>SEX^-K^\H"]!'NO>M>P]ZI_R.9K58VUO5VE5@&T=I57G -ML_?2JK[IO83U]+U$C_X^>P&UPJQ[S]Q?7U'$`_T$ -M,?[O?-XV=%7UHVSY*INM=57IAZZ"UKJJ/&ZMJTK4/Q2+F -MYU3U'3W^C^T3\#N+^%\Y'?]+>$]4ZO64&$/\/T7YG`NF.],>U5N_7AZN;L_.P]6M7S\/5U^PMD'U1]8VJ(X:-EA=E&V# -MZN2T#:IBW]0&&MO@``V,T.J/\83^UQS)YF-UF[7^5X>@_P%K_:\^/7NN6/V^ -M?@:4:4`SZMG"G1W1G'IV]2>FKL#3>R-4\[=IWI[+AJMQ&.O8=LYD4-\WUFCYS_P(92D -MRO[0W([SB@7_4OTM@GN&S95BSU?"U -M->%L7UO3.NUK-8X6##?DY\RW6^W5M8!9Z?88.UPYFZW#M/T_K$/Q_.SI21FC= -M84-'M<]F\['.:ZVC=;70D6*MHW5;9]^OZ[#_29D9,]>%@F?T.P%][^U4$4MD -MLT87-H -M\AV?,.&,NXA03NRH]5K;K;;6VFZU6PR[U8:R[5;;DNW?T.OO8;MVGXA;VN_H -MGIO^3EKZ&3VV1*>/_KPC-OY?AB2._LU--]X'9)'LE<3U7EE<5]0[7*?,'Z;: -MVP9_(FGHHO86PX[+CY6:=URSK0U%Z -MK/(!W^V=YK<,P)[/I'/4&(N8W\SP?O4K:)G\)++Y6>]`OALT:*SW/(@&V\GP -M+[;C^LJONAOA.X,1VE!L[*?U.?7'^C;C[LO(,<^HN?ZVOMN=L/*W]6'3WU"S -M,=U?Y\Q'#+_;X!TKR*RCU^OUKR@T]E44<#EXR6R_7-_VH'O$M&S_:LA6EW,N -MV-#X8-DVM%K+MJ$C6[:ZG+N3#7K^'YN10S=<-.LL7QG73W5Y>KTUL$^4^ZSJ -MK0VWINHM'7Z#<18<0+T5SJU[&^B*FEMSU96[3UOQ7U>?CG][Y3E^5%:T5N5^%YS+,4E(CSOYV\[KA69,>7R+^2V"[X!AGR?Y?X/PH468 -M:_VPX[!^OOR-$TO.DG\Y)H\5;*SE;W>B9U,?\$Y'Z?'2!]P?AU+'"J]CG_#_ -M5*1_.W13XN^RG7@_(8N/^!U\".;C/^[+MX[$9?K'D=MAA%Y(0 -MPB:,'SG2+W8T2=AT3=G!??XWJ>N&[%_VNR\/,W2,VUR1/\$4GO342E>0FRH1Z7^'^6P_3$XFYZ7UH'[Q=4XP44=>P"0B[._?SSGR_[+)9 -M4E/[G-M[G_O'/-_O_'[GG7?>>6?FG7=2?T?MZX1_%CP7`"^,RL'X=99_P;2* -MOKGV4Y;Z1:KXQ0T*O/(=/6XPUJD7T]CJCQK6;G^5IQN+[M93&6`%_$5]L],,_";^,3XF(3PZ+;T5\ -M#N*9$M^*^-6(9V'QV1'Q*R+BET?$9T;$9T3$IZOQ8T5\S;CC!X?4>7HFWB_J -M'V(_Z!3MT[CF&8O+U#;,DVTL4]LP3[9Q1GQR6/SELHUE*@R7RS:6L;#X[(CX -M%1'QRR/B,R/B,R+BT]5XV<8?-L[>QA\V*6V$/)NAMH')-F:H;6"RC3/BD\/B -M3;*-&2H,)MG&#!86GQT1OR(B?GE$?&9$?$9$?+H:+]OXH\+9V_BCXDC>E+WL -MUILLCVZU/%DPXVP\'N6\Z6&_E'I?I/-5Q!AX8B?M76>A%-(-%3RP!F%QJ8UP -M_:3C==,_E'/DG9C63XVY;UC)IZ'[-K3'DEL,]H=\/.:QX7%'^B(/2Y7W,1QB -M_6R7O"A]?T+%][Z7X/O>]]J$+)J^PL/2#BGZ?O9VK9AO2:[NIS-PTD43>[LQ -M]PVX_:C'/DGZ9RZJMP_^+'!1TJE%G0-4#WBC72G93OM$/'/.Q'A[Z9)'@SVJUALMU+[A'E@D;H3@3: -MI#L_0<(AZO;&?#L/:R+-"%MB -M)=B5?HXG>IBFC=KX#J,&[24=[F*T21O6)FW04^]`F[1H$_J&X',7?TCS^GRA -M?RSF_NLSH[?O^O71V@>9F$GZN?X'%%^OP$EG!*-LB5_`4V$GVET&WMY(,*NP -M1NLON6ZC\I;JD2\/\)R8!9XSY\?W]>]0?H(%M*0W^B$\`$^`P1FMW@1-AZ9- -M&SV.TWBT2=ULC"6.\D]2%VKIL(?=W$CU>N,, -M'5)?:BE&^FW.D/Y41KR'="W*KEAH3.$/U+ -M77^55I!_172\9SQ^?KQGW$#QA/=S^6&&W`.LO.QYBTW`8248/"RC%S"O0)TN -MM5T>H$#H-\GP@6D^`?H1^N_:'S4;`TR3Y6>DHR1XQ+CC!J;*K=RQ)`Y]?9#J -M.WNMF8T!!WNTP8,$]]G*!0=W7<-T;R]8RPJ^RY(JKM.QC].8EMJB1=G1^/6Z -MS=LV77GE#)ZM$W`X;EC>+O1W;BA5ZZ8RX*\#?@[,OM^PX,95Y23?W7@5W6GD -MEX'_.2Z2^YH!1K*O,0O\%3SB#,ER2*?I:YY@?+*XQF=GUVPA -M7:D;.KL*&?KDQD6BO'TY6M#.(N2[,D;S`8LQZS!7W6B!O"STS,YSQQ'R;D(_ -MZ3.?9)EVJ6MZXYJ9NJ8W8HUW8QUCR]8QEKD0SJ[4L1UU5*EU>!"NCFGPK801 -M=N-^8X6%]FWL2`?YYX9F2HK]B!N'U7$7(;,:AMB-HZ1_#)D5-+S,I.ZGH.R#]4$AGPZ3/C7\A^I1GNT, -MNXQD5;K/@#HZ;`7\3WT%PXSTJ(-Q"2=D?$U"?U@]Q>'U4!LP -MAQ]J.(NUS'9V&?IP..A,.$%W16A.JP++D`H+\5JAPX8T=$>+\E)Z6D]XXQ+ZL_SC7-[A('A3 -M^PENDA="_9'Y'6/%E4I_9*;_]?V16:S"Y&'+2&=<%XVV$BJT3*YI,G_7#:HA -M.)[5!O.?=<#A2W-L:*[B$PKL)[I1)_CJQ&QZN;2.D3KG=$]@NA_L#;*_![$V -M&0`=Z^C."?5]_6E&9P>GLK8OY0BC^W-!NO>#--\0\R#2K,)\W.?[D/(/M'VJ -MMO.F/+6=8]_U*B&`X;!!M2[ -MFV0GE$GRG>UQ]@W2%\P*+.5T+](VRH<@-WEI;J;T[:<%'0V0[$-DM3TI^,J<"]9Q0^0G^/1YF$+K28[%IH-F;O9@OBN6\ -M$-M(.*(U.-:8=$^OD71;Y5VDY2_Q.$,S-VC3&B9!+^"/A6>86)_+?;];5G0U -M@R[H?E+12:2_Q8RY&KQC^4',K\U5)4R/,2CN>X\[;EEWM%3>$Z=[WJ0[ZV&W -M+!;SFM-P@&0;P'0"\]$!J9=*]T-N[J;V<+HO#-D5Z0Z1G!R,,ZARVR&,UUX: -ML_SL)QT8<[2>]B94>""S&)J(;A)\5W#PDGFY?A-3[](0?[+R:XB,:)3Q!N7$6DYW[S[^C>,B_ZI+,>XUC(+;;P]B^W`BX3M4-I -MUT$%SH/CCN60?^=F*_3B5>$&GAJ]!"NM4P"WT6_D[F)_V)VVY2TA'B'+)=Q& -MHY%`$>_%_,7J1QC=*?7&#QGICEQ\GZ\7ZX$`:QL1\YMFE<]KQ/CLI[$=%JYM -M4,8OPA=F;2L9P8@A'IDZ;3CN7HZ'XSU1L6-B>K -M&'E1GQHV[KBU\/QW;-*'7;9[06.W+:*[FP']7-.UPTQC`\]Q%?T!X;?^RNT# -M/PIRR$.W=LX;A:PX2OM,.>&&:]]C^P7K_;_N9IKT[N[^@@`]SZ -M6XHK'^;!W$`'\?'HLB7F`_"X/TI^>MLBF@MH'O@+\);R6L->SLTL6#O?"UBP -MT+2R:TMH_7';:M!,AE+N9TJYI>9,Z$"K:4:XUB#S%80_N'2ZS> -MN/0)N7]F>"-L[RSF4W;[]VGOC.L-52VTIHE+VFEDFR47';F]QQA6M,G^BZRVP'S=T^[-%<=T*1 -M1\3]V]GV8?D^L\&-0C#?)XVP5?=,0GZ9`N^9U#(3QD-\_0*6@K@%(VS%$BR1 -MDN!,WLORXU!N!LGPQT^3K+*B5&!6P1K1L09LT-8`T1MG:H -M7,"29]:[8I$\*U@ES@RV>=DW"JZGNW8KS=P1PR'[:N5=F94:8[.DP02L&8GV -M:!VKK$\@ZQLYU@L=?,JJ%6%8YQ*?%G`H=YD#E=^F\VAQASGW0;FVH7O.'K9" -M[,74/<_BGWJ>F8X_3.U:F2+R:'6,X`TZ:_>9+;D!N\`AP3N]9E3:X3XMRAMTYV%N4]JD -MXEK2UZI+75L.,.H?2@^_WCV*M)_,[!=*@[@?H-Q4VA.A.+EF#:5I07N`J])] -MP)'+-D)M?HE@];"5!]R%?XB^;PL^`+JOZ!/K]E5[5OF#7-ZQS5H>%')GUG+B -M"X*W7$/W*K)N-6ID_U);D#PP+@.\I,Y/TQQM1 -M[@^4^L;BY"_D.,U/WV#%^S;GR+,%*_`KK\4Y)FUG+E;RC<@[/PEQM -M&(W:WACP(`=8-MI#N;;..NAA -M_RCNO',]<(=U.=USI3TS6M_G3C`[R2.^N'0OCTOMEV,C:]`;M\0B\%@CVX)R -M(/^D"IGN0M:XLZ[[U':)MO@9]1=DCECU#LTIEOWTA:ZG/>S.?(G7=*]K`95Q -MY]?%F1#Z`[SADA&6/<1CJSO^NC*76/;071SE_MXI=D<`/-TB9&74!]H(XT%W -M-%$?77.(94@:O*.F3=ZU@BQ]1QIH7JX;IL]B-.(L)IR__E4P&J[K\+`[K"2S -M$[S;_"KON\.JKJ_$OM)VD]AC;A=[KW=,W_\7][,XV?"M%J+1.U>$XR3+'RR7O.:.Y7(M>YZT%^;V!C0DZT50QOF;F;9P.@.FC;7Q[1(-X]_9(U7 -MY1&NC[&332F$F;@C@[YZT*F)]E-)9P;^Q+[B(;(;DV=[@E&<&>M\+>UUEF'Z -M[2OL8?=#S@I\9$T(Q"4>@`SC!Q],PMK&#)DZ*5B3"%DVL4FV^S-E#2WA)O@E -M+U-MX@P68`C,1O:#_O,VNB@.\SJYYL<^`;C_`DS/F-@(?T?C5\ -ML]44C$L\&/S,FH#O`92?B?@F^L+?&/7,[S66AGK>H+V93IM7N_,UEOQ5QS^M -MQ:DKNS3.+]JN7\+V';O%;I0Y?5[(:>!]W>924\///.`CVUM1?]^ -MPN:Y_2NQ%D]A;5C[\#%KXK/HQU!?Q/`^'_)LM9H:]JHRV8]7EH(F+)O$_XI, -M"_DDDR1K]I'$7-9,=,&QLR&W5M8,N@DQ>B5<[/DS3\N!7PF -MQ6:*2;&9D@):TBGQAP.03T6Y6]BBEM/@*9C7;=^C8;[8@XQW-XL]4#W\K.D9IB.=[>X.N2_:A9'?;:9Q_Q.L -M_U=WS[Y.27-=*^;,--=7[2\JB_K];U6>L%7FE+)U,!9ROW?<)??0[A;VW4+R -M]$\^H#@*(QMP&:*?[[:2C*VL57YCF0Z3:Q7:"VB7]X,3QAUW9WA8OFK#S2?O -MC=^]VJ-)FQ5OZOUTL3WJ,[HL/2QY_]R%U -MW\58D2'H@/83A"RK!;_?*^ZPCTI>?UKA]7>_$U;/Z#0?1QUT+YS*E_/@W1U4 -M!\GPDK_?W3';^@#P6PFW067=XA[]2.*VF,52]Y -M;/Q;B/]6$[...W(Z/9I4(0>)^FN79%R+N-LE/+G/2N[4&OK7GZB;3[O'W?<8_&PN_/$ -MWBG\@J9(_JHF6?\CUVZDHSV!W&*6(67%U'[,!:ZP]O\;QFK4O4W(WDSDJ4DE -M.5S':Y9VX`L9,JT'WWB$T]>$KPM?S`%+[$236"N1/*H?B[MN8C;=$J)_VCMP -M5_V$9!D-[6&,L/L.'<=Z@Z3,K7X^:?D&N^@DPKCVWOCR5J:=N5]_+WKIW@RX -M)KANQNY#\'THY;Y#<'GCCGLA_]R3+V6%^\0=G`:2K>/F]\NV+&'PZWGL)U9JA,:AO6SP.$)_[-71TJKB@= -M\NDH71!ER#D6Z5&&FGX:KPO([A'Z"^EV`QY5'P?P3QS-9TR%WX>\P"O&[GTF -M]=Z[VJY*M(?BVH3<=U_*M+T9^"E?PVFQ1T?[G_%4#_PF27OW'9;KA'OM]TM8DV=;4SE/LWE&"_ZOR1]N5D&U:/+2WDAZL -M3?42WW4O]#%W2Y`=GQAFJX+<=8JM6S"9-C[Q7F=N_2[PI;%I^S^[6ZO -M.&>A?W$>3/OVRER9WZ;,E\$2.K.4MEKK+EN^*^!O]S//_7&73=,\E*# -M;8Y^60MWC1E2P8/O3SE:+.GFKRF7VMZFM-W#UHB]MVN;Q3H>_OOS9]V3`1W0 -M_(CYZ`L%%T?4^>BKS[W394_)LA](^EN6#3ZDZ[,1GW^@=,NS"/IP -MI@Y(_IP7-^FXWSOE7,+$_2\ML[L'_GVT/EF2 -M0K@E&6V?Q+V@J3[?N\R]IH>Y_3T8ATM2P*=8$#RJ?(@'!`X@NUG6TIW35`O- -M78I]B^FUQ;B#98^/Y>LA-\9C_=\2V)%C*1OBP96C,5RL4"M\*^?`T2U9E0Z&#<0+_D`,#->G#^Q39;U^8 -M[$>RB["GM]E*^\DS9+\P'JJ[4#ZAXMJO3V53SJ4=O:.,H;^PKLS5`>=-T?I7 -M/8LC.5C=#SJZ2,XA*"_[/#*$/K2WD_>+"U\KK]7+?9$\%V2M)+GF3'-U?S-` -MY=GE65K>H(>ME^M11[G8+^%%GW0TE0A;>(V2UA_\LSAG<1J:CA?3V=DGG6+O -MU\'L^,;3.5E?*2.[HAD-DPS".=.XOGF2M9]ANB'VH(7V$L7]R1'3&N">[)0( -MF0C^;`X>>S941WE)CM"\Q#6$>^?M:C -M[9I@3-H"6_MH:`]\[56A\X.`L@Y>6R?GZ+5U8AUET[9C\)Z?MT_DSR/_ROP_QS5C7\S_I]4_B_#__W*_P+\WZ3\ -M?PW_5RO_2?C_NO+_C1'V4$#YGX__#Y7_2_%_7-G#U9]BZWID.Q]"_^>MDWT\ -M'3;@83_I5O=B/.RA3LJ#54IV2-?5>5BV-2Q-CI+W -M@(=EK0X+7Z&$O^EA^\/;DG&A?"1:WRZ*9WG1PC7-T<-I/4TVI,3YM-"#>'@) -MW=4T5GO_)\^>%Y%$;C3NCG"'M#Z\5>Z;7%=EI?>NOE -M&>PHR6`AFT3K_XW&(95#:SUWH;3'1',7AC2RUE?J(0'$;XX+#QO=IE%F\WU6OO46>[S -MG^43]?\+<#\L;$1^(^#4-I*."]DS]1=Q+\:N#N%S5_F\;%7!.-^-N;?/=X;U -M%018^2C93S=RTNLL^X3%DXWAMHU5+ -M>X9DI_$#X$",*;K;A;7606,%`VT_@GGR.H]T2P_.U@XY)A_)D+PMALFQ_D@& -M?X'TIQ[)!']KAGP?]6RZ#&LK/_',3UU:R0_S4X):?06M(^D\@-<:NE_]=$)[ -MO&2([;B4F==,:)'FD7].*"3]]M0.K'.U/]\TH?WU)I?6+_AH?HI8/T#N(%G# -M/1`@'9YXKCR.]SCN?[F;OX#\RVA?HE?R>=*9'M -M,*0WC;#\/<8)IH73N#:0?)#_,LVK:/N^!M;#2:?.6/NW6ACDQ-C&/M]25^YVVAOX!#06 -M:^\Z3?J-&[P\+J:_H(1H9H-7V6]/&7<\6JK.?1XE'&45N`N7NJ0^ZX;?'2\D -M&3:F/P`:0-TZJAMIR+Z5IJ]XJ8OK8_,$39'M-?^'X!%#LKZ:V&S9_@W?H38@ -M'=T9O<+=(LZ,/*2+$#S;R%Q;!'Q7\[C8#CH;P[^87^0:/K93KDMC77(-'TM[ -M#Z:QN%B/Q,N&)RT;L)X&?!*W&[SE?X8?M$Y[";+^1S=V#3.FC*%+1N#/#62@ -M+Q_=2#:?4<8O4(8&7WGV-9U.E@6\K*#RE#HP!C?#:,`BZ]&`-8+"1CC;HFO03>!S":PP> -M*D/1U??9MK/$H-,P!/ZW`/F'P1,_Z!,VZ#Q8CQB&I%V7C>`O!A_I']*9#N@H -M9H0]-BS*(7W!8OXG\('+R$:3>(-#Z`]M_#[AYR3;2/O)1FD;[[$S"LX@`VS, -MRPI@@),M>'S)3^\&(-]52(OU\V/#:MJP>'N$/R/";U'L"UK&'1MSU'U1#WOL -M`,$.VHUZ;Y?V0VG>)%V/4^SQ_;T+&=M-^R)Z0TM"!2M`O\:@;1^2C=F^X5&2 -M\XSZ$4 -M.;178'N.D;VK^>B;(:[]/LU!HR].#L]Q^__`"D#/(^SQ([I2IFLXQ4QTSM/E >>> TRUNCATED FOR MAIL (1000 lines) <<<