Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 10 Jul 2008 08:23:03 GMT
From:      Hans Petter Selasky <hselasky@FreeBSD.org>
To:        Perforce Change Reviews <perforce@FreeBSD.org>
Subject:   PERFORCE change 144993 for review
Message-ID:  <200807100823.m6A8N3sD066899@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=144993

Change 144993 by hselasky@hselasky_laptop001 on 2008/07/10 08:22:27

	
	IFC @ 144988
	
	Getting closer to integrate.

Affected files ...

.. //depot/projects/usb/src/sys/amd64/amd64/machdep.c#10 integrate
.. //depot/projects/usb/src/sys/amd64/amd64/mp_machdep.c#11 integrate
.. //depot/projects/usb/src/sys/amd64/amd64/pmap.c#12 integrate
.. //depot/projects/usb/src/sys/amd64/include/pmap.h#7 integrate
.. //depot/projects/usb/src/sys/amd64/include/vmparam.h#9 integrate
.. //depot/projects/usb/src/sys/cam/scsi/scsi_da.c#9 integrate
.. //depot/projects/usb/src/sys/dev/ata/ata-chipset.c#11 integrate
.. //depot/projects/usb/src/sys/dev/ata/ata-pci.h#9 integrate
.. //depot/projects/usb/src/sys/dev/cs/if_cs.c#4 integrate
.. //depot/projects/usb/src/sys/dev/cs/if_csreg.h#3 integrate
.. //depot/projects/usb/src/sys/dev/if_ndis/if_ndis.c#9 integrate
.. //depot/projects/usb/src/sys/dev/re/if_re.c#9 integrate
.. //depot/projects/usb/src/sys/kern/link_elf.c#9 integrate
.. //depot/projects/usb/src/sys/kern/link_elf_obj.c#9 integrate
.. //depot/projects/usb/src/sys/net/raw_cb.c#5 integrate
.. //depot/projects/usb/src/sys/net/raw_cb.h#3 integrate
.. //depot/projects/usb/src/sys/net/raw_usrreq.c#5 integrate
.. //depot/projects/usb/src/sys/net/rtsock.c#9 integrate
.. //depot/projects/usb/src/sys/netgraph/bluetooth/common/ng_bluetooth.c#3 integrate
.. //depot/projects/usb/src/sys/netgraph/bluetooth/include/ng_bluetooth.h#3 integrate
.. //depot/projects/usb/src/sys/netgraph/bluetooth/include/ng_btsocket.h#2 integrate
.. //depot/projects/usb/src/sys/netgraph/ng_iface.c#4 integrate
.. //depot/projects/usb/src/sys/netgraph/ng_ip_input.c#2 integrate
.. //depot/projects/usb/src/sys/netinet/in_pcb.c#10 integrate
.. //depot/projects/usb/src/sys/netinet/in_pcb.h#9 integrate
.. //depot/projects/usb/src/sys/netinet/sctp_asconf.c#9 integrate
.. //depot/projects/usb/src/sys/netinet/sctp_asconf.h#7 integrate
.. //depot/projects/usb/src/sys/netinet/sctp_bsd_addr.c#8 integrate
.. //depot/projects/usb/src/sys/netinet/sctp_bsd_addr.h#7 integrate
.. //depot/projects/usb/src/sys/netinet/sctp_cc_functions.h#3 integrate
.. //depot/projects/usb/src/sys/netinet/sctp_constants.h#8 integrate
.. //depot/projects/usb/src/sys/netinet/sctp_crc32.h#3 integrate
.. //depot/projects/usb/src/sys/netinet/sctp_indata.c#9 integrate
.. //depot/projects/usb/src/sys/netinet/sctp_indata.h#5 integrate
.. //depot/projects/usb/src/sys/netinet/sctp_input.c#9 integrate
.. //depot/projects/usb/src/sys/netinet/sctp_input.h#5 integrate
.. //depot/projects/usb/src/sys/netinet/sctp_os_bsd.h#8 integrate
.. //depot/projects/usb/src/sys/netinet/sctp_output.c#9 integrate
.. //depot/projects/usb/src/sys/netinet/sctp_output.h#7 integrate
.. //depot/projects/usb/src/sys/netinet/sctp_pcb.c#9 integrate
.. //depot/projects/usb/src/sys/netinet/sctp_pcb.h#9 integrate
.. //depot/projects/usb/src/sys/netinet/sctp_sysctl.h#7 integrate
.. //depot/projects/usb/src/sys/netinet/sctp_timer.c#8 integrate
.. //depot/projects/usb/src/sys/netinet/sctp_timer.h#5 integrate
.. //depot/projects/usb/src/sys/netinet/sctp_uio.h#8 integrate
.. //depot/projects/usb/src/sys/netinet/sctp_usrreq.c#9 integrate
.. //depot/projects/usb/src/sys/netinet/sctp_var.h#9 integrate
.. //depot/projects/usb/src/sys/netinet/sctputil.c#9 integrate
.. //depot/projects/usb/src/sys/netinet/sctputil.h#8 integrate
.. //depot/projects/usb/src/sys/netinet6/in6_pcb.c#9 integrate
.. //depot/projects/usb/src/sys/netinet6/in6_src.c#9 integrate
.. //depot/projects/usb/src/sys/netinet6/ip6_var.h#6 integrate
.. //depot/projects/usb/src/sys/netinet6/raw_ip6.c#9 integrate
.. //depot/projects/usb/src/sys/netinet6/sctp6_usrreq.c#9 integrate
.. //depot/projects/usb/src/sys/netinet6/sctp6_var.h#7 integrate
.. //depot/projects/usb/src/sys/netinet6/udp6_usrreq.c#10 integrate
.. //depot/projects/usb/src/sys/netipsec/keysock.c#5 integrate
.. //depot/projects/usb/src/sys/pci/if_rlreg.h#9 integrate

Differences ...

==== //depot/projects/usb/src/sys/amd64/amd64/machdep.c#10 (text+ko) ====

@@ -39,7 +39,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/machdep.c,v 1.686 2008/04/25 05:18:47 jeff Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/machdep.c,v 1.687 2008/07/09 19:44:37 peter Exp $");
 
 #include "opt_atalk.h"
 #include "opt_atpic.h"
@@ -1466,6 +1466,10 @@
 	_udatasel = GSEL(GUDATA_SEL, SEL_UPL);
 	_ucode32sel = GSEL(GUCODE32_SEL, SEL_UPL);
 
+	load_ds(_udatasel);
+	load_es(_udatasel);
+	load_fs(_udatasel);
+
 	/* setup proc 0's pcb */
 	thread0.td_pcb->pcb_flags = 0;
 	thread0.td_pcb->pcb_cr3 = KPML4phys;

==== //depot/projects/usb/src/sys/amd64/amd64/mp_machdep.c#11 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/mp_machdep.c,v 1.290 2008/07/04 17:36:12 alc Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/mp_machdep.c,v 1.291 2008/07/09 19:44:37 peter Exp $");
 
 #include "opt_cpu.h"
 #include "opt_kstack_pages.h"
@@ -98,6 +98,8 @@
 /* SMP page table page */
 extern pt_entry_t *SMPpt;
 
+extern int  _udatasel;
+
 struct pcb stoppcbs[MAXCPU];
 
 /* Variables needed for SMP tlb shootdown. */
@@ -564,7 +566,9 @@
 	 */
 
 	load_cr4(rcr4() | CR4_PGE);
-
+	load_ds(_udatasel);
+	load_es(_udatasel);
+	load_fs(_udatasel);
 	mtx_unlock_spin(&ap_boot_mtx);
 
 	/* wait until all the AP's are up */

==== //depot/projects/usb/src/sys/amd64/amd64/pmap.c#12 (text+ko) ====

@@ -77,7 +77,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.626 2008/07/07 17:25:09 alc Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.628 2008/07/09 06:04:10 alc Exp $");
 
 /*
  *	Manages physical address maps.
@@ -175,7 +175,7 @@
 
 static int ndmpdp;
 static vm_paddr_t dmaplimit;
-vm_offset_t kernel_vm_end;
+vm_offset_t kernel_vm_end = VM_MIN_KERNEL_ADDRESS;
 pt_entry_t pg_nx;
 
 SYSCTL_NODE(_vm, OID_AUTO, pmap, CTLFLAG_RD, 0, "VM/pmap parameters");
@@ -446,19 +446,15 @@
 
 	/* Now map the page tables at their location within PTmap */
 	for (i = 0; i < NKPT; i++) {
-		((pd_entry_t *)KPDphys)[(KERNBASE - VM_MIN_KERNEL_ADDRESS) /
-		    NBPDR + i] = KPTphys + (i << PAGE_SHIFT);
-		((pd_entry_t *)KPDphys)[(KERNBASE - VM_MIN_KERNEL_ADDRESS) /
-		    NBPDR + i] |= PG_RW | PG_V;
+		((pd_entry_t *)KPDphys)[i] = KPTphys + (i << PAGE_SHIFT);
+		((pd_entry_t *)KPDphys)[i] |= PG_RW | PG_V;
 	}
 
 	/* Map from zero to end of allocations under 2M pages */
 	/* This replaces some of the KPTphys entries above */
 	for (i = 0; (i << PDRSHIFT) < *firstaddr; i++) {
-		((pd_entry_t *)KPDphys)[(KERNBASE - VM_MIN_KERNEL_ADDRESS) /
-		    NBPDR + i] = i << PDRSHIFT;
-		((pd_entry_t *)KPDphys)[(KERNBASE - VM_MIN_KERNEL_ADDRESS) /
-		    NBPDR + i] |= PG_RW | PG_V | PG_PS | PG_G;
+		((pd_entry_t *)KPDphys)[i] = i << PDRSHIFT;
+		((pd_entry_t *)KPDphys)[i] |= PG_RW | PG_V | PG_PS | PG_G;
 	}
 
 	/* And connect up the PD to the PDP */
@@ -1703,25 +1699,34 @@
 	vm_paddr_t paddr;
 	vm_page_t nkpg;
 	pd_entry_t *pde, newpdir;
-	pdp_entry_t newpdp;
+	pdp_entry_t *pdpe;
 
 	mtx_assert(&kernel_map->system_mtx, MA_OWNED);
-	if (kernel_vm_end == 0) {
-		kernel_vm_end = VM_MIN_KERNEL_ADDRESS;
-		while ((*pmap_pde(kernel_pmap, kernel_vm_end) & PG_V) != 0) {
-			kernel_vm_end = (kernel_vm_end + PAGE_SIZE * NPTEPG) & ~(PAGE_SIZE * NPTEPG - 1);
-			if (kernel_vm_end - 1 >= kernel_map->max_offset) {
-				kernel_vm_end = kernel_map->max_offset;
-				break;                       
-			}
-		}
-	}
-	addr = roundup2(addr, PAGE_SIZE * NPTEPG);
+
+	/*
+	 * Return if "addr" is within the range of kernel page table pages
+	 * that were preallocated during pmap bootstrap.  Moreover, leave
+	 * "kernel_vm_end" and the kernel page table as they were.
+	 *
+	 * The correctness of this action is based on the following
+	 * argument: vm_map_findspace() allocates contiguous ranges of the
+	 * kernel virtual address space.  It calls this function if a range
+	 * ends after "kernel_vm_end".  If the kernel is mapped between
+	 * "kernel_vm_end" and "addr", then the range cannot begin at
+	 * "kernel_vm_end".  In fact, its beginning address cannot be less
+	 * than the kernel.  Thus, there is no immediate need to allocate
+	 * any new kernel page table pages between "kernel_vm_end" and
+	 * "KERNBASE".
+	 */
+	if (KERNBASE < addr && addr <= KERNBASE + NKPT * NBPDR)
+		return;
+
+	addr = roundup2(addr, NBPDR);
 	if (addr - 1 >= kernel_map->max_offset)
 		addr = kernel_map->max_offset;
 	while (kernel_vm_end < addr) {
-		pde = pmap_pde(kernel_pmap, kernel_vm_end);
-		if (pde == NULL) {
+		pdpe = pmap_pdpe(kernel_pmap, kernel_vm_end);
+		if ((*pdpe & PG_V) == 0) {
 			/* We need a new PDP entry */
 			nkpg = vm_page_alloc(NULL, kernel_vm_end >> PDPSHIFT,
 			    VM_ALLOC_INTERRUPT | VM_ALLOC_NOOBJ |
@@ -1731,13 +1736,13 @@
 			if ((nkpg->flags & PG_ZERO) == 0)
 				pmap_zero_page(nkpg);
 			paddr = VM_PAGE_TO_PHYS(nkpg);
-			newpdp = (pdp_entry_t)
+			*pdpe = (pdp_entry_t)
 				(paddr | PG_V | PG_RW | PG_A | PG_M);
-			*pmap_pdpe(kernel_pmap, kernel_vm_end) = newpdp;
 			continue; /* try again */
 		}
+		pde = pmap_pdpe_to_pde(pdpe, kernel_vm_end);
 		if ((*pde & PG_V) != 0) {
-			kernel_vm_end = (kernel_vm_end + PAGE_SIZE * NPTEPG) & ~(PAGE_SIZE * NPTEPG - 1);
+			kernel_vm_end = (kernel_vm_end + NBPDR) & ~PDRMASK;
 			if (kernel_vm_end - 1 >= kernel_map->max_offset) {
 				kernel_vm_end = kernel_map->max_offset;
 				break;                       
@@ -1754,9 +1759,9 @@
 			pmap_zero_page(nkpg);
 		paddr = VM_PAGE_TO_PHYS(nkpg);
 		newpdir = (pd_entry_t) (paddr | PG_V | PG_RW | PG_A | PG_M);
-		*pmap_pde(kernel_pmap, kernel_vm_end) = newpdir;
+		pde_store(pde, newpdir);
 
-		kernel_vm_end = (kernel_vm_end + PAGE_SIZE * NPTEPG) & ~(PAGE_SIZE * NPTEPG - 1);
+		kernel_vm_end = (kernel_vm_end + NBPDR) & ~PDRMASK;
 		if (kernel_vm_end - 1 >= kernel_map->max_offset) {
 			kernel_vm_end = kernel_map->max_offset;
 			break;                       

==== //depot/projects/usb/src/sys/amd64/include/pmap.h#7 (text+ko) ====

@@ -39,7 +39,7 @@
  *
  *	from: hp300: @(#)pmap.h	7.2 (Berkeley) 12/16/90
  *	from: @(#)pmap.h	7.4 (Berkeley) 5/12/91
- * $FreeBSD: src/sys/amd64/include/pmap.h,v 1.145 2008/07/06 22:36:28 alc Exp $
+ * $FreeBSD: src/sys/amd64/include/pmap.h,v 1.146 2008/07/08 22:59:17 alc Exp $
  */
 
 #ifndef _MACHINE_PMAP_H_
@@ -115,7 +115,7 @@
 #endif
 
 #define NKPML4E		1		/* number of kernel PML4 slots */
-#define NKPDPE		6		/* number of kernel PDP slots */
+#define NKPDPE		howmany(NKPT, NPDEPG)/* number of kernel PDP slots */
 
 #define	NUPML4E		(NPML4EPG/2)	/* number of userland PML4 pages */
 #define	NUPDPE		(NUPML4E*NPDPEPG)/* number of userland PDP pages */
@@ -131,7 +131,7 @@
 #define	KPML4I		(NPML4EPG-1)	/* Top 512GB for KVM */
 #define	DMPML4I		(KPML4I-1)	/* Next 512GB down for direct map */
 
-#define	KPDPI		(NPDPEPG-7)	/* kernel map starts at -7GB */
+#define	KPDPI		(NPDPEPG-2)	/* kernbase at -2GB */
 
 /*
  * XXX doesn't really belong here I guess...

==== //depot/projects/usb/src/sys/amd64/include/vmparam.h#9 (text+ko) ====

@@ -38,7 +38,7 @@
  * SUCH DAMAGE.
  *
  *	from: @(#)vmparam.h	5.9 (Berkeley) 5/12/91
- * $FreeBSD: src/sys/amd64/include/vmparam.h,v 1.55 2008/07/05 20:44:55 alc Exp $
+ * $FreeBSD: src/sys/amd64/include/vmparam.h,v 1.56 2008/07/08 22:59:17 alc Exp $
  */
 
 
@@ -163,12 +163,12 @@
  */
 
 #define	VM_MAX_KERNEL_ADDRESS	KVADDR(KPML4I, NPDPEPG-1, NPDEPG-1, NPTEPG-1)
-#define	VM_MIN_KERNEL_ADDRESS	KVADDR(KPML4I, KPDPI, 0, 0)
+#define	VM_MIN_KERNEL_ADDRESS	KVADDR(KPML4I, NPDPEPG-7, 0, 0)
 
 #define	DMAP_MIN_ADDRESS	KVADDR(DMPML4I, 0, 0, 0)
 #define	DMAP_MAX_ADDRESS	KVADDR(DMPML4I+1, 0, 0, 0)
 
-#define	KERNBASE		MAX(0xffffffff80000000ul, VM_MIN_KERNEL_ADDRESS)
+#define	KERNBASE		KVADDR(KPML4I, KPDPI, 0, 0)
 
 #define	UPT_MAX_ADDRESS		KVADDR(PML4PML4I, PML4PML4I, PML4PML4I, PML4PML4I)
 #define	UPT_MIN_ADDRESS		KVADDR(PML4PML4I, 0, 0, 0)

==== //depot/projects/usb/src/sys/cam/scsi/scsi_da.c#9 (text+ko) ====

@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/cam/scsi/scsi_da.c,v 1.226 2008/01/12 19:24:55 maxim Exp $");
+__FBSDID("$FreeBSD: src/sys/cam/scsi/scsi_da.c,v 1.227 2008/07/09 17:00:14 remko Exp $");
 
 #include <sys/param.h>
 
@@ -536,6 +536,14 @@
 		 "*"}, /*quirks*/ DA_Q_NO_SYNC_CACHE
 	},
 	{
+		/*
+		 * Samsung YP-U3 mp3-player
+		 * PR: 125398
+		 */
+		{T_DIRECT, SIP_MEDIA_REMOVABLE, "Samsung", "YP-U3",
+		 "*"}, /*quirks*/ DA_Q_NO_SYNC_CACHE
+	},
+	{
 		{T_DIRECT, SIP_MEDIA_REMOVABLE, "Netac", "OnlyDisk*",
 		 "2000"}, /*quirks*/ DA_Q_NO_SYNC_CACHE
 	}

==== //depot/projects/usb/src/sys/dev/ata/ata-chipset.c#11 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/ata/ata-chipset.c,v 1.220 2008/06/11 08:48:25 sos Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/ata/ata-chipset.c,v 1.223 2008/07/09 15:10:53 remko Exp $");
 
 #include "opt_ata.h"
 #include <sys/param.h>
@@ -2129,6 +2129,7 @@
      { ATA_I82801HB_R1,  0, AHCI, 0x00, ATA_SA300, "ICH8" },
      { ATA_I82801HB_AH4, 0, AHCI, 0x00, ATA_SA300, "ICH8" },
      { ATA_I82801HB_AH6, 0, AHCI, 0x00, ATA_SA300, "ICH8" },
+     { ATA_I82801HBM,    0,    0, 0x00, ATA_UDMA5, "ICH8M" },
      { ATA_I82801HBM_S1, 0, AHCI, 0x00, ATA_SA300, "ICH8M" },
      { ATA_I82801HBM_S2, 0, AHCI, 0x00, ATA_SA300, "ICH8M" },
      { ATA_I82801IB_S1,  0, AHCI, 0x00, ATA_SA300, "ICH9" },
@@ -2136,6 +2137,7 @@
      { ATA_I82801IB_AH2, 0, AHCI, 0x00, ATA_SA300, "ICH9" },
      { ATA_I82801IB_AH4, 0, AHCI, 0x00, ATA_SA300, "ICH9" },
      { ATA_I82801IB_AH6, 0, AHCI, 0x00, ATA_SA300, "ICH9" },
+     { ATA_I82801IB_R1,  0, AHCI, 0x00, ATA_SA300, "ICH9" },
      { ATA_I31244,       0,    0, 0x00, ATA_SA150, "31244" },
      { 0, 0, 0, 0, 0, 0}};
 
@@ -4987,12 +4989,15 @@
 	ctlr->r_type2 = SYS_RES_MEMORY;
 	ctlr->r_rid2 = PCIR_BAR(5);
 	if (!(ctlr->r_res2 = bus_alloc_resource_any(dev, ctlr->r_type2,
-						    &ctlr->r_rid2, RF_ACTIVE)))
-	    return ENXIO;
+						    &ctlr->r_rid2, RF_ACTIVE))) {
+	    if (ctlr->chip->chipid != ATA_SII0680 ||
+			    (pci_read_config(dev, 0x8a, 1) & 1))
+		return ENXIO;
+	}
 
 	if (ctlr->chip->cfg2 & SIISETCLK) {
 	    if ((pci_read_config(dev, 0x8a, 1) & 0x30) != 0x10)
-		pci_write_config(dev, 0x8a, 
+		pci_write_config(dev, 0x8a,
 				 (pci_read_config(dev, 0x8a, 1) & 0xcf)|0x10,1);
 	    if ((pci_read_config(dev, 0x8a, 1) & 0x30) != 0x10)
 		device_printf(dev, "%s could not set ATA133 clock\n",
@@ -5012,7 +5017,9 @@
 	/* enable PCI interrupt as BIOS might not */
 	pci_write_config(dev, 0x8a, (pci_read_config(dev, 0x8a, 1) & 0x3f), 1);
 
-	ctlr->allocate = ata_sii_allocate;
+	if (ctlr->r_res2)
+	    ctlr->allocate = ata_sii_allocate;
+
 	if (ctlr->chip->max_dma >= ATA_SA150) {
 	    ctlr->reset = ata_sii_reset;
 	    ctlr->setmode = ata_sata_setmode;

==== //depot/projects/usb/src/sys/dev/ata/ata-pci.h#9 (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-pci.h,v 1.86 2008/04/21 10:51:38 sos Exp $
+ * $FreeBSD: src/sys/dev/ata/ata-pci.h,v 1.88 2008/07/09 15:07:53 remko Exp $
  */
 
 /* structure holding chipset config info */
@@ -173,12 +173,14 @@
 #define ATA_I82801HB_R1         0x28228086
 #define ATA_I82801HB_AH4        0x28248086
 #define ATA_I82801HB_S2         0x28258086
+#define ATA_I82801HBM           0x28508086
 #define ATA_I82801HBM_S1        0x28298086
 #define ATA_I82801HBM_S2        0x282a8086
 #define ATA_I82801IB_S1         0x29208086
 #define ATA_I82801IB_AH2        0x29218086
 #define ATA_I82801IB_AH6        0x29228086
 #define ATA_I82801IB_AH4        0x29238086
+#define ATA_I82801IB_R1         0x29258086
 #define ATA_I82801IB_S2         0x29268086
 #define ATA_I31244              0x32008086
 

==== //depot/projects/usb/src/sys/dev/cs/if_cs.c#4 (text+ko) ====

@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/cs/if_cs.c,v 1.53 2008/06/06 17:27:19 imp Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/cs/if_cs.c,v 1.54 2008/07/09 16:47:55 imp Exp $");
 
 /*
  *
@@ -202,7 +202,7 @@
 	else
 		self_control &= ~HCB1;
 	cs_writereg(sc, PP_SelfCTL, self_control);
-	DELAY(500000);
+	DELAY(500000);	/* Bad! */
 }
 
 
@@ -332,9 +332,9 @@
 	} else if (get_eeprom_cksum(START_EEPROM_DATA,CHKSUM_LEN, eeprom_buff)<0) {
 		device_printf(dev, "EEPROM cheksum bad, assuming defaults.\n");
 	} else {
-		sc->auto_neg_cnf = eeprom_buff[AUTO_NEG_CNF_OFFSET/2];
-		sc->adapter_cnf = eeprom_buff[ADAPTER_CNF_OFFSET/2];
-		sc->isa_config = eeprom_buff[ISA_CNF_OFFSET/2];
+		sc->auto_neg_cnf = eeprom_buff[AUTO_NEG_CNF_OFFSET];
+		sc->adapter_cnf = eeprom_buff[ADAPTER_CNF_OFFSET];
+		sc->isa_config = eeprom_buff[ISA_CNF_OFFSET];
 		for (i=0; i<ETHER_ADDR_LEN/2; i++) {
 			sc->enaddr[i*2] = eeprom_buff[i];
 			sc->enaddr[i*2+1] = eeprom_buff[i] >> 8;
@@ -1226,10 +1226,10 @@
 			error = cs_duplex_auto(sc);
 		break;
 	case IFM_10_2:
-		error = enable_bnc(sc);
+		enable_bnc(sc);
 		break;
 	case IFM_10_5:
-		error = enable_aui(sc);
+		enable_aui(sc);
 		break;
 	}
 

==== //depot/projects/usb/src/sys/dev/cs/if_csreg.h#3 (text+ko) ====

@@ -27,7 +27,7 @@
  */
 
 /*
- * $FreeBSD: src/sys/dev/cs/if_csreg.h,v 1.7 2008/06/06 04:56:27 imp Exp $
+ * $FreeBSD: src/sys/dev/cs/if_csreg.h,v 1.8 2008/07/09 16:47:55 imp Exp $
  */
 
 #define CS_89x0_IO_PORTS	0x0020
@@ -408,28 +408,43 @@
 #define BIOS_LAST_OFFSET	0x0fc00
 
 /*
- *  Byte offsets into the EEPROM configuration buffer
+ *  Word offsets into the EEPROM configuration buffer
  */
-#define ISA_CNF_OFFSET		0x6
-#define TX_CTL_OFFSET		(ISA_CNF_OFFSET + 8)	/*  8900 eeprom */
-#define AUTO_NEG_CNF_OFFSET	(ISA_CNF_OFFSET + 8)	/*  8920 eeprom */
+#define ISA_CNF_OFFSET		0x3
+#define		INT_NO_MASK		0x000F
+#define		DMA_NO_MASK		0x0070
+#define		USE_SA			0x0080
+#define		IOCHRDY_ENABLE		0x0100
+#define		ISA_DMA_SIZE		0x0200	/* 0 16k 1 64k */
+#define		ISA_AUTO_RxDMA		0x0400
+#define		ISA_RxDMA		0x0800
+#define		DMA_BURST		0x1000
+#define		STREAM_TRANSFER		0x2000
+#define		ANY_ISA_DMA		(ISA_AUTO_RxDMA | ISA_RxDMA)
+#define		BOOT_PROM_FLAG		0x4000
+#define		MEMORY_MODE		0x8000
+
+#define	PACKET_PAGE_BASE	(ISA_CNF_OFFSET + 1)
+#define	BOOT_ROM_BASE		(ISA_CNF_OFFSET + 2)
+#define	BOOT_PROM_MASK		(ISA_CNF_OFFSET + 3)
 
-/*
- *  the assumption here is that the bits in the eeprom are generally 
- *  in the same position as those in the autonegctl register. 
- *  Of course the IMM bit is not in that register so it must be 
- *  masked out
- */
-#define EE_FORCE_FDX		0x8000
-#define EE_NLP_ENABLE		0x0200
-#define EE_AUTO_NEG_ENABLE	0x0100
-#define EE_ALLOW_FDX		0x0080
-#define EE_AUTO_NEG_CNF_MASK	(EE_FORCE_FDX | EE_NLP_ENABLE | 	\
+#define TX_CTL_OFFSET		(ISA_CNF_OFFSET + 4)	/*  8900 eeprom */
+#define AUTO_NEG_CNF_OFFSET	(ISA_CNF_OFFSET + 4)	/*  8920 eeprom */
+	/*
+	 *  the assumption here is that the bits in the eeprom are generally 
+	 *  in the same position as those in the autonegctl register. 
+	 *  Of course the IMM bit is not in that register so it must be 
+	 *  masked out
+	 */
+#define		EE_FORCE_FDX		0x8000
+#define		EE_NLP_ENABLE		0x0200
+#define		EE_AUTO_NEG_ENABLE	0x0100
+#define		EE_ALLOW_FDX		0x0080
+#define		EE_AUTO_NEG_CNF_MASK	(EE_FORCE_FDX | EE_NLP_ENABLE | \
 				 EE_AUTO_NEG_ENABLE | EE_ALLOW_FDX)
+#define		IMM_BIT			0x0040	/*  ignore missing media */
 
-#define IMM_BIT			0x0040	/*  ignore missing media	 */
-
-#define ADAPTER_CNF_OFFSET	(AUTO_NEG_CNF_OFFSET + 2)
+#define ADAPTER_CNF_OFFSET	(ISA_CNF_OFFSET + 5)
 #define A_CNF_MEDIA             0x0007
 #define A_CNF_10B_T		0x0001
 #define A_CNF_AUI		0x0002
@@ -440,24 +455,18 @@
 #define A_CNF_MEDIA_AUI		0x0040
 #define A_CNF_MEDIA_10B_2	0x0060
 #define A_CNF_DC_DC_POLARITY	0x0080
+#define A_CNF_WAKE_ENABLED	0x0100
+#define A_CNF_WAKE_CFG		0x0200
+#define A_CNF_CAN_WAKE		0x0400
+#define A_CNF_OPT_FLAGS		0x1800	/* 00 server, 01 DOS 10 multi-user */
 #define A_CNF_NO_AUTO_POLARITY	0x2000
 #define A_CNF_LOW_RX_SQUELCH	0x4000
 #define A_CNF_EXTND_10B_2	0x8000
 
+#define MFG_DATE_OFFSET		(ISA_CNF_OFFSET + 8)
+
 #define PACKET_PAGE_OFFSET	0x8
 
-/*
- *  Bit definitions for the ISA configuration word from the EEPROM
- */
-#define INT_NO_MASK		0x000F
-#define DMA_NO_MASK		0x0070
-#define ISA_DMA_SIZE		0x0200
-#define ISA_AUTO_RxDMA		0x0400
-#define ISA_RxDMA		0x0800
-#define DMA_BURST		0x1000
-#define STREAM_TRANSFER		0x2000
-#define ANY_ISA_DMA		(ISA_AUTO_RxDMA | ISA_RxDMA)
-
 /*  DMA controller registers */
 #define DMA_BASE		0x00   /* DMA controller base */
 #define DMA_BASE_2		0x0C0  /* DMA controller base */

==== //depot/projects/usb/src/sys/dev/if_ndis/if_ndis.c#9 (text+ko) ====

@@ -34,7 +34,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/if_ndis/if_ndis.c,v 1.142 2008/06/11 13:40:15 cokane Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/if_ndis/if_ndis.c,v 1.143 2008/07/09 00:10:55 cokane Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -1717,8 +1717,10 @@
 	if (sc->ndis_link == 1 &&
 	    sc->ndis_sts == NDIS_STATUS_MEDIA_DISCONNECT) {
 		sc->ndis_link = 0;
+		NDIS_UNLOCK(sc);
 		if (sc->ndis_80211)
 			ieee80211_new_state(vap, IEEE80211_S_SCAN, 0);
+		NDIS_LOCK(sc);
 		if_link_state_change(sc->ifp, LINK_STATE_DOWN);
 	}
 

==== //depot/projects/usb/src/sys/dev/re/if_re.c#9 (text+ko) ====

@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/re/if_re.c,v 1.125 2008/07/02 08:00:14 yongari Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/re/if_re.c,v 1.127 2008/07/09 01:58:18 yongari Exp $");
 
 /*
  * RealTek 8139C+/8169/8169S/8110S/8168/8111/8101E PCI NIC driver
@@ -170,7 +170,7 @@
 	{ RT_VENDORID, RT_DEVICEID_8139, 0,
 	    "RealTek 8139C+ 10/100BaseTX" },
 	{ RT_VENDORID, RT_DEVICEID_8101E, 0,
-	    "RealTek 8101E PCIe 10/100baseTX" },
+	    "RealTek 8101E/8102E/8102EL PCIe 10/100baseTX" },
 	{ RT_VENDORID, RT_DEVICEID_8168, 0,
 	    "RealTek 8168/8168B/8168C/8168CP/8111B/8111C/8111CP PCIe "
 	    "Gigabit Ethernet" },
@@ -206,6 +206,8 @@
 	{ RL_HWREV_8101, RL_8139, "8101"},
 	{ RL_HWREV_8100E, RL_8169, "8100E"},
 	{ RL_HWREV_8101E, RL_8169, "8101E"},
+	{ RL_HWREV_8102E, RL_8169, "8102E"},
+	{ RL_HWREV_8102EL, RL_8169, "8102EL"},
 	{ RL_HWREV_8168_SPIN2, RL_8169, "8168"},
 	{ RL_HWREV_8168_SPIN3, RL_8169, "8168"},
 	{ RL_HWREV_8168C, RL_8169, "8168C/8111C"},
@@ -1240,7 +1242,13 @@
 		break;
 	case RL_HWREV_8100E:
 	case RL_HWREV_8101E:
-		sc->rl_flags |= RL_FLAG_INVMAR | RL_FLAG_PHYWAKE;
+		sc->rl_flags |= RL_FLAG_NOJUMBO | RL_FLAG_INVMAR |
+		    RL_FLAG_PHYWAKE;
+		break;
+	case RL_HWREV_8102E:
+	case RL_HWREV_8102EL:
+		sc->rl_flags |= RL_FLAG_NOJUMBO | RL_FLAG_INVMAR |
+		    RL_FLAG_PHYWAKE | RL_FLAG_DESCV2 | RL_FLAG_MACSTAT;
 		break;
 	case RL_HWREV_8168_SPIN1:
 	case RL_HWREV_8168_SPIN2:

==== //depot/projects/usb/src/sys/kern/link_elf.c#9 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/kern/link_elf.c,v 1.97 2008/05/23 00:49:39 jb Exp $");
+__FBSDID("$FreeBSD: src/sys/kern/link_elf.c,v 1.98 2008/07/08 23:51:38 edwin Exp $");
 
 #include "opt_ddb.h"
 #include "opt_gdb.h"
@@ -232,9 +232,12 @@
 extern struct _dynamic _DYNAMIC;
 
 static void
-link_elf_error(const char *s)
+link_elf_error(const char *filename, const char *s)
 {
-    printf("kldload: %s\n", s);
+	if (filename == NULL)
+		printf("kldload: %s\n", s);
+	else
+		printf("kldload: %s: %s\n", filename, s);
 }
 
 /*
@@ -624,23 +627,23 @@
 
     if (hdr->e_ident[EI_CLASS] != ELF_TARG_CLASS
       || hdr->e_ident[EI_DATA] != ELF_TARG_DATA) {
-	link_elf_error("Unsupported file layout");
+	link_elf_error(filename, "Unsupported file layout");
 	error = ENOEXEC;
 	goto out;
     }
     if (hdr->e_ident[EI_VERSION] != EV_CURRENT
       || hdr->e_version != EV_CURRENT) {
-	link_elf_error("Unsupported file version");
+	link_elf_error(filename, "Unsupported file version");
 	error = ENOEXEC;
 	goto out;
     }
     if (hdr->e_type != ET_EXEC && hdr->e_type != ET_DYN) {
-	link_elf_error("Unsupported file type");
+	link_elf_error(filename, "Unsupported file type");
 	error = ENOEXEC;
 	goto out;
     }
     if (hdr->e_machine != ELF_TARG_MACH) {
-	link_elf_error("Unsupported machine");
+	link_elf_error(filename, "Unsupported machine");
 	error = ENOEXEC;
 	goto out;
     }
@@ -653,7 +656,7 @@
     if (!((hdr->e_phentsize == sizeof(Elf_Phdr)) &&
 	  (hdr->e_phoff + hdr->e_phnum*sizeof(Elf_Phdr) <= PAGE_SIZE) &&
 	  (hdr->e_phoff + hdr->e_phnum*sizeof(Elf_Phdr) <= nbytes)))
-	link_elf_error("Unreadable program headers");
+	link_elf_error(filename, "Unreadable program headers");
 
     /*
      * Scan the program header entries, and save key information.
@@ -671,7 +674,7 @@
 
 	case PT_LOAD:
 	    if (nsegs == MAXSEGS) {
-		link_elf_error("Too many sections");
+		link_elf_error(filename, "Too many sections");
 		error = ENOEXEC;
 		goto out;
 	    }
@@ -691,7 +694,7 @@
 	    break;
 
 	case PT_INTERP:
-	    link_elf_error("Unsupported file type");
+	    link_elf_error(filename, "Unsupported file type");
 	    error = ENOEXEC;
 	    goto out;
 	}
@@ -699,12 +702,12 @@
 	++phdr;
     }
     if (phdyn == NULL) {
-	link_elf_error("Object is not dynamically-linked");
+	link_elf_error(filename, "Object is not dynamically-linked");
 	error = ENOEXEC;
 	goto out;
     }
     if (nsegs == 0) {
-	link_elf_error("No sections");
+	link_elf_error(filename, "No sections");
 	error = ENOEXEC;
 	goto out;
     }

==== //depot/projects/usb/src/sys/kern/link_elf_obj.c#9 (text+ko) ====

@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/kern/link_elf_obj.c,v 1.100 2008/06/20 06:24:34 alc Exp $");
+__FBSDID("$FreeBSD: src/sys/kern/link_elf_obj.c,v 1.101 2008/07/08 23:51:38 edwin Exp $");
 
 #include "opt_ddb.h"
 #include "opt_mac.h"
@@ -170,9 +170,12 @@
 static int	relocate_file(elf_file_t ef);
 
 static void
-link_elf_error(const char *s)
+link_elf_error(const char *filename, const char *s)
 {
-	printf("kldload: %s\n", s);
+	if (filename == NULL)
+		printf("kldload: %s\n", s);
+	else
+		printf("kldload: %s: %s\n", filename, s);
 }
 
 static void
@@ -460,23 +463,23 @@
 
 	if (hdr->e_ident[EI_CLASS] != ELF_TARG_CLASS
 	    || hdr->e_ident[EI_DATA] != ELF_TARG_DATA) {
-		link_elf_error("Unsupported file layout");
+		link_elf_error(filename, "Unsupported file layout");
 		error = ENOEXEC;
 		goto out;
 	}
 	if (hdr->e_ident[EI_VERSION] != EV_CURRENT
 	    || hdr->e_version != EV_CURRENT) {
-		link_elf_error("Unsupported file version");
+		link_elf_error(filename, "Unsupported file version");
 		error = ENOEXEC;
 		goto out;
 	}
 	if (hdr->e_type != ET_REL) {
-		link_elf_error("Unsupported file type");
+		link_elf_error(filename, "Unsupported file type");
 		error = ENOEXEC;
 		goto out;
 	}
 	if (hdr->e_machine != ELF_TARG_MACH) {
-		link_elf_error("Unsupported machine");
+		link_elf_error(filename, "Unsupported machine");
 		error = ENOEXEC;
 		goto out;
 	}
@@ -540,19 +543,19 @@
 		}
 	}
 	if (ef->nprogtab == 0) {
-		link_elf_error("file has no contents");
+		link_elf_error(filename, "file has no contents");
 		error = ENOEXEC;
 		goto out;
 	}
 	if (nsym != 1) {
 		/* Only allow one symbol table for now */
-		link_elf_error("file has no valid symbol table");
+		link_elf_error(filename, "file has no valid symbol table");
 		error = ENOEXEC;
 		goto out;
 	}
 	if (symstrindex < 0 || symstrindex > hdr->e_shnum ||
 	    shdr[symstrindex].sh_type != SHT_STRTAB) {
-		link_elf_error("file has invalid symbol strings");
+		link_elf_error(filename, "file has invalid symbol strings");
 		error = ENOEXEC;
 		goto out;
 	}

==== //depot/projects/usb/src/sys/net/raw_cb.c#5 (text+ko) ====

@@ -28,17 +28,19 @@
  * SUCH DAMAGE.
  *
  *	@(#)raw_cb.c	8.1 (Berkeley) 6/10/93
- * $FreeBSD: src/sys/net/raw_cb.c,v 1.36 2008/07/05 18:03:39 rwatson Exp $
+ * $FreeBSD: src/sys/net/raw_cb.c,v 1.39 2008/07/09 18:41:31 rwatson Exp $
  */
 
 #include <sys/param.h>
 #include <sys/domain.h>
 #include <sys/lock.h>
+#include <sys/kernel.h>
 #include <sys/malloc.h>
 #include <sys/mutex.h>
 #include <sys/protosw.h>
 #include <sys/socket.h>
 #include <sys/socketvar.h>
+#include <sys/sysctl.h>
 #include <sys/systm.h>
 
 #include <net/raw_cb.h>
@@ -55,8 +57,15 @@
 struct mtx rawcb_mtx;
 struct rawcb_list_head rawcb_list;
 
-const static u_long	raw_sendspace = RAWSNDQ;
-const static u_long	raw_recvspace = RAWRCVQ;
+SYSCTL_NODE(_net, OID_AUTO, raw, CTLFLAG_RW, 0, "Raw socket infrastructure");
+
+static u_long	raw_sendspace = RAWSNDQ;
+SYSCTL_ULONG(_net_raw, OID_AUTO, sendspace, CTLFLAG_RW, &raw_sendspace, 0,
+    "Default raw socket send space");
+
+static u_long	raw_recvspace = RAWRCVQ;
+SYSCTL_ULONG(_net_raw, OID_AUTO, recvspace, CTLFLAG_RW, &raw_recvspace, 0,
+    "Default raw socket receive space");
 
 /*
  * Allocate a control block and a nominal amount of buffer space for the
@@ -69,12 +78,13 @@
 	int error;
 
 	/*
-	 * It is assumed that raw_attach is called
-	 * after space has been allocated for the
-	 * rawcb.
+	 * It is assumed that raw_attach is called after space has been
+	 * allocated for the rawcb; consumer protocols may simply allocate
+	 * type struct rawcb, or a wrapper data structure that begins with a
+	 * struct rawcb.
 	 */
-	if (rp == 0)
-		return (ENOBUFS);
+	KASSERT(rp != NULL, ("raw_attach: rp == NULL"));
+
 	error = soreserve(so, raw_sendspace, raw_recvspace);
 	if (error)
 		return (error);
@@ -101,42 +111,5 @@
 	mtx_lock(&rawcb_mtx);
 	LIST_REMOVE(rp, list);
 	mtx_unlock(&rawcb_mtx);
-#ifdef notdef
-	if (rp->rcb_laddr)
-		m_freem(dtom(rp->rcb_laddr));
-	rp->rcb_laddr = 0;
-#endif
 	free((caddr_t)(rp), M_PCB);
 }
-
-/*
- * Disconnect raw socket.
- */
-void
-raw_disconnect(struct rawcb *rp)
-{
-
-#ifdef notdef
-	if (rp->rcb_faddr)
-		m_freem(dtom(rp->rcb_faddr));
-	rp->rcb_faddr = 0;
-#endif
-}
-
-#ifdef notdef
-#include <sys/mbuf.h>
-
-int
-raw_bind(struct socket *so, struct mbuf *nam)
-{
-	struct sockaddr *addr = mtod(nam, struct sockaddr *);
-	struct rawcb *rp;
-
-	if (ifnet == 0)
-		return (EADDRNOTAVAIL);
-	rp = sotorawcb(so);
-	nam = m_copym(nam, 0, M_COPYALL, M_WAIT);
-	rp->rcb_laddr = mtod(nam, struct sockaddr *);
-	return (0);
-}
-#endif

==== //depot/projects/usb/src/sys/net/raw_cb.h#3 (text+ko) ====

@@ -28,7 +28,7 @@
  * SUCH DAMAGE.
  *
  *	@(#)raw_cb.h	8.1 (Berkeley) 6/10/93
- * $FreeBSD: src/sys/net/raw_cb.h,v 1.21 2008/07/05 19:12:55 rwatson Exp $
+ * $FreeBSD: src/sys/net/raw_cb.h,v 1.22 2008/07/09 15:48:16 rwatson Exp $
  */
 
 #ifndef _NET_RAW_CB_H_
@@ -43,8 +43,6 @@
 struct rawcb {
 	LIST_ENTRY(rawcb) list;
 	struct	socket *rcb_socket;	/* back pointer to socket */
-	struct	sockaddr *rcb_faddr;	/* destination address */
-	struct	sockaddr *rcb_laddr;	/* socket's address */
 	struct	sockproto rcb_proto;	/* protocol family, protocol */
 };
 
@@ -72,9 +70,7 @@
  */
 int	 raw_attach(struct socket *, int);
 void	 raw_detach(struct rawcb *);
-void	 raw_disconnect(struct rawcb *);
-void	 raw_input(struct mbuf *, struct sockproto *, struct sockaddr *,
-	    struct sockaddr *);
+void	 raw_input(struct mbuf *, struct sockproto *, struct sockaddr *);
 
 /*
  * Generic pr_usrreqs entries for raw socket protocols, usually wrapped so

==== //depot/projects/usb/src/sys/net/raw_usrreq.c#5 (text+ko) ====

@@ -28,7 +28,7 @@
  * SUCH DAMAGE.
  *
  *	@(#)raw_usrreq.c	8.1 (Berkeley) 6/10/93
- * $FreeBSD: src/sys/net/raw_usrreq.c,v 1.45 2008/07/05 18:03:39 rwatson Exp $
+ * $FreeBSD: src/sys/net/raw_usrreq.c,v 1.46 2008/07/09 15:48:16 rwatson Exp $
  */
 
 #include <sys/param.h>
@@ -67,8 +67,7 @@
  * Raw protocol interface.
  */
 void
-raw_input(struct mbuf *m0, struct sockproto *proto, struct sockaddr *src,
-    struct sockaddr *dst)
+raw_input(struct mbuf *m0, struct sockproto *proto, struct sockaddr *src)
 {
 	struct rawcb *rp;
 	struct mbuf *m = m0;
@@ -82,19 +81,6 @@
 		if (rp->rcb_proto.sp_protocol  &&
 		    rp->rcb_proto.sp_protocol != proto->sp_protocol)
 			continue;
-		/*
-		 * We assume the lower level routines have placed the address
-		 * in a canonical format suitable for a structure comparison.
-		 *
-		 * Note that if the lengths are not the same the comparison
-		 * will fail at the first byte.
-		 */
-#define	equal(a1, a2) \
-  (bcmp((caddr_t)(a1), (caddr_t)(a2), a1->sa_len) == 0)
-		if (rp->rcb_laddr && !equal(rp->rcb_laddr, dst))
-			continue;
-		if (rp->rcb_faddr && !equal(rp->rcb_faddr, src))
-			continue;
 		if (last) {
 			struct mbuf *n;
 			n = m_copy(m, 0, (int)M_COPYALL);
@@ -133,20 +119,18 @@
 static void
 raw_uabort(struct socket *so)
 {
-	struct rawcb *rp = sotorawcb(so);
+
+	KASSERT(sotorawcb(so) != NULL, ("raw_uabort: rp == NULL"));
 
-	KASSERT(rp != NULL, ("raw_uabort: rp == NULL"));
-	raw_disconnect(rp);
 	soisdisconnected(so);

>>> TRUNCATED FOR MAIL (1000 lines) <<<



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200807100823.m6A8N3sD066899>