Date: Tue, 7 Jan 2003 09:01:48 -0800 (PST) From: John Baldwin <jhb@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 23343 for review Message-ID: <200301071701.h07H1mqM043983@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=23343 Change 23343 by jhb@jhb_laptop on 2003/01/07 09:01:39 IFC @23338. Affected files ... .. //depot/projects/smpng/sys/alpha/alpha/dump_machdep.c#3 integrate .. //depot/projects/smpng/sys/boot/pc98/boot2/bios.S#2 integrate .. //depot/projects/smpng/sys/boot/pc98/boot2/boot.c#3 integrate .. //depot/projects/smpng/sys/boot/pc98/boot2/disk.c#4 integrate .. //depot/projects/smpng/sys/boot/pc98/boot2/sys.c#2 integrate .. //depot/projects/smpng/sys/boot/pc98/libpc98/biosdisk.c#5 integrate .. //depot/projects/smpng/sys/cam/scsi/scsi_da.c#30 integrate .. //depot/projects/smpng/sys/conf/files#60 integrate .. //depot/projects/smpng/sys/conf/files.ia64#22 integrate .. //depot/projects/smpng/sys/conf/ldscript.i386#4 integrate .. //depot/projects/smpng/sys/dev/bge/if_bge.c#19 integrate .. //depot/projects/smpng/sys/dev/bge/if_bgereg.h#11 integrate .. //depot/projects/smpng/sys/dev/ccd/ccd.c#18 integrate .. //depot/projects/smpng/sys/dev/firewire/firewire.c#7 integrate .. //depot/projects/smpng/sys/dev/firewire/firewire.h#3 integrate .. //depot/projects/smpng/sys/dev/firewire/firewirebusreg.h#2 delete .. //depot/projects/smpng/sys/dev/firewire/firewirereg.h#3 integrate .. //depot/projects/smpng/sys/dev/firewire/fwcrom.c#2 integrate .. //depot/projects/smpng/sys/dev/firewire/fwdev.c#2 integrate .. //depot/projects/smpng/sys/dev/firewire/fwohci.c#6 integrate .. //depot/projects/smpng/sys/dev/firewire/fwohci_pci.c#7 integrate .. //depot/projects/smpng/sys/dev/firewire/fwohcireg.h#3 integrate .. //depot/projects/smpng/sys/dev/firewire/fwohcivar.h#3 integrate .. //depot/projects/smpng/sys/dev/firewire/if_fwe.c#5 integrate .. //depot/projects/smpng/sys/dev/firewire/sbp.c#7 integrate .. //depot/projects/smpng/sys/dev/gem/if_gem.c#10 integrate .. //depot/projects/smpng/sys/dev/gem/if_gemvar.h#5 integrate .. //depot/projects/smpng/sys/dev/hme/if_hme.c#8 integrate .. //depot/projects/smpng/sys/dev/hme/if_hmereg.h#4 integrate .. //depot/projects/smpng/sys/dev/hme/if_hmevar.h#3 integrate .. //depot/projects/smpng/sys/dev/raidframe/rf_freebsdkintf.c#4 integrate .. //depot/projects/smpng/sys/dev/sab/sab.c#5 integrate .. //depot/projects/smpng/sys/dev/sound/pcm/dsp.c#9 integrate .. //depot/projects/smpng/sys/dev/ubsec/ubsec.c#5 integrate .. //depot/projects/smpng/sys/dev/ubsec/ubsecvar.h#3 integrate .. //depot/projects/smpng/sys/dev/vinum/vinumdaemon.c#5 integrate .. //depot/projects/smpng/sys/dev/vinum/vinuminterrupt.c#4 integrate .. //depot/projects/smpng/sys/dev/vinum/vinumio.c#10 integrate .. //depot/projects/smpng/sys/dev/vinum/vinumrequest.c#8 integrate .. //depot/projects/smpng/sys/dev/wi/wi_hostap.c#11 integrate .. //depot/projects/smpng/sys/fs/devfs/devfs_vnops.c#25 integrate .. //depot/projects/smpng/sys/fs/fdescfs/fdesc_vnops.c#10 integrate .. //depot/projects/smpng/sys/fs/hpfs/hpfs_vnops.c#15 integrate .. //depot/projects/smpng/sys/fs/msdosfs/msdosfs_vnops.c#14 integrate .. //depot/projects/smpng/sys/fs/ntfs/ntfs_vnops.c#10 integrate .. //depot/projects/smpng/sys/fs/nwfs/nwfs_vnops.c#5 integrate .. //depot/projects/smpng/sys/fs/portalfs/portal_vnops.c#12 integrate .. //depot/projects/smpng/sys/fs/pseudofs/pseudofs_vnops.c#22 integrate .. //depot/projects/smpng/sys/fs/smbfs/smbfs_vnops.c#14 integrate .. //depot/projects/smpng/sys/fs/specfs/spec_vnops.c#20 integrate .. //depot/projects/smpng/sys/fs/udf/udf_vnops.c#7 integrate .. //depot/projects/smpng/sys/fs/unionfs/union_vnops.c#8 integrate .. //depot/projects/smpng/sys/geom/bde/g_bde.h#3 integrate .. //depot/projects/smpng/sys/geom/bde/g_bde_crypt.c#6 integrate .. //depot/projects/smpng/sys/geom/bde/g_bde_work.c#4 integrate .. //depot/projects/smpng/sys/geom/geom_bsd.c#19 integrate .. //depot/projects/smpng/sys/geom/geom_pc98.c#13 integrate .. //depot/projects/smpng/sys/gnu/ext2fs/ext2_bmap.c#3 integrate .. //depot/projects/smpng/sys/gnu/ext2fs/ext2_vnops.c#14 integrate .. //depot/projects/smpng/sys/i386/i386/identcpu.c#12 integrate .. //depot/projects/smpng/sys/ia64/acpica/madt.c#8 integrate .. //depot/projects/smpng/sys/ia64/conf/GENERIC#27 integrate .. //depot/projects/smpng/sys/ia64/conf/SKI#9 integrate .. //depot/projects/smpng/sys/ia64/ia64/clock.c#10 integrate .. //depot/projects/smpng/sys/ia64/ia64/interrupt.c#16 integrate .. //depot/projects/smpng/sys/ia64/ia64/locore.s#15 integrate .. //depot/projects/smpng/sys/ia64/ia64/mp_machdep.c#18 integrate .. //depot/projects/smpng/sys/ia64/ia64/pmap.c#41 integrate .. //depot/projects/smpng/sys/ia64/ia64/sapic.c#11 integrate .. //depot/projects/smpng/sys/ia64/include/bus.h#5 integrate .. //depot/projects/smpng/sys/ia64/include/clock.h#4 integrate .. //depot/projects/smpng/sys/ia64/include/cpufunc.h#15 integrate .. //depot/projects/smpng/sys/ia64/include/intr.h#3 integrate .. //depot/projects/smpng/sys/ia64/include/intrcnt.h#3 integrate .. //depot/projects/smpng/sys/isofs/cd9660/cd9660_vnops.c#8 integrate .. //depot/projects/smpng/sys/kern/imgact_elf.c#25 integrate .. //depot/projects/smpng/sys/kern/imgact_elf32.c#2 integrate .. //depot/projects/smpng/sys/kern/imgact_elf64.c#2 integrate .. //depot/projects/smpng/sys/kern/imgact_elfN.c#2 delete .. //depot/projects/smpng/sys/kern/init_main.c#30 integrate .. //depot/projects/smpng/sys/kern/kern_descrip.c#41 integrate .. //depot/projects/smpng/sys/kern/kern_exec.c#50 integrate .. //depot/projects/smpng/sys/kern/kern_mib.c#18 integrate .. //depot/projects/smpng/sys/kern/kern_ntptime.c#11 integrate .. //depot/projects/smpng/sys/kern/kern_physio.c#5 integrate .. //depot/projects/smpng/sys/kern/kern_proc.c#42 integrate .. //depot/projects/smpng/sys/kern/kern_shutdown.c#32 integrate .. //depot/projects/smpng/sys/kern/kern_sig.c#51 integrate .. //depot/projects/smpng/sys/kern/kern_tc.c#18 integrate .. //depot/projects/smpng/sys/kern/kern_thread.c#15 integrate .. //depot/projects/smpng/sys/kern/subr_disklabel.c#12 integrate .. //depot/projects/smpng/sys/kern/subr_diskmbr.c#6 integrate .. //depot/projects/smpng/sys/kern/subr_mbuf.c#23 integrate .. //depot/projects/smpng/sys/kern/subr_prf.c#23 integrate .. //depot/projects/smpng/sys/kern/subr_prof.c#16 integrate .. //depot/projects/smpng/sys/kern/syscalls.master#24 integrate .. //depot/projects/smpng/sys/kern/uipc_socket.c#32 integrate .. //depot/projects/smpng/sys/kern/vfs_aio.c#33 integrate .. //depot/projects/smpng/sys/kern/vfs_bio.c#33 integrate .. //depot/projects/smpng/sys/kern/vfs_default.c#12 integrate .. //depot/projects/smpng/sys/kern/vfs_syscalls.c#50 integrate .. //depot/projects/smpng/sys/kern/vnode_if.src#12 integrate .. //depot/projects/smpng/sys/modules/firewire/firewire/Makefile#5 integrate .. //depot/projects/smpng/sys/net/if_loop.c#13 integrate .. //depot/projects/smpng/sys/net/if_stf.c#17 integrate .. //depot/projects/smpng/sys/netinet/tcp_syncache.c#16 integrate .. //depot/projects/smpng/sys/netinet6/esp_input.c#10 integrate .. //depot/projects/smpng/sys/netinet6/icmp6.c#11 integrate .. //depot/projects/smpng/sys/netinet6/ip6_fw.c#9 integrate .. //depot/projects/smpng/sys/netinet6/ip6_input.c#19 integrate .. //depot/projects/smpng/sys/netinet6/ip6_output.c#16 integrate .. //depot/projects/smpng/sys/netinet6/ipsec.c#7 integrate .. //depot/projects/smpng/sys/nfsclient/nfs_vnops.c#19 integrate .. //depot/projects/smpng/sys/opencrypto/crypto.c#4 integrate .. //depot/projects/smpng/sys/opencrypto/cryptodev.c#4 integrate .. //depot/projects/smpng/sys/opencrypto/cryptodev.h#2 integrate .. //depot/projects/smpng/sys/pc98/pc98/diskslice_machdep.c#6 integrate .. //depot/projects/smpng/sys/pc98/pc98/fd.c#17 integrate .. //depot/projects/smpng/sys/pccard/pcic_pci.c#26 integrate .. //depot/projects/smpng/sys/pci/if_rl.c#20 integrate .. //depot/projects/smpng/sys/pci/if_xl.c#17 integrate .. //depot/projects/smpng/sys/pci/if_xlreg.h#6 integrate .. //depot/projects/smpng/sys/powerpc/powerpc/atomic.S#1 branch .. //depot/projects/smpng/sys/powerpc/powerpc/locore.S#1 branch .. //depot/projects/smpng/sys/powerpc/powerpc/ofwmagic.S#1 branch .. //depot/projects/smpng/sys/powerpc/powerpc/swtch.S#1 branch .. //depot/projects/smpng/sys/security/mac_lomac/mac_lomac.c#4 integrate .. //depot/projects/smpng/sys/sparc64/include/bus.h#9 integrate .. //depot/projects/smpng/sys/sparc64/include/bus_private.h#2 integrate .. //depot/projects/smpng/sys/sparc64/include/elf.h#8 integrate .. //depot/projects/smpng/sys/sparc64/include/iommureg.h#4 integrate .. //depot/projects/smpng/sys/sparc64/include/iommuvar.h#6 integrate .. //depot/projects/smpng/sys/sparc64/include/pmap.h#19 integrate .. //depot/projects/smpng/sys/sparc64/pci/ofw_pci.c#7 integrate .. //depot/projects/smpng/sys/sparc64/pci/psycho.c#16 integrate .. //depot/projects/smpng/sys/sparc64/pci/psychoreg.h#6 integrate .. //depot/projects/smpng/sys/sparc64/pci/psychovar.h#6 integrate .. //depot/projects/smpng/sys/sparc64/sbus/sbus.c#6 integrate .. //depot/projects/smpng/sys/sparc64/sparc64/bus_machdep.c#9 integrate .. //depot/projects/smpng/sys/sparc64/sparc64/cache.c#9 integrate .. //depot/projects/smpng/sys/sparc64/sparc64/iommu.c#10 integrate .. //depot/projects/smpng/sys/sparc64/sparc64/pmap.c#32 integrate .. //depot/projects/smpng/sys/sparc64/sparc64/tlb.c#6 integrate .. //depot/projects/smpng/sys/sparc64/sparc64/tsb.c#17 integrate .. //depot/projects/smpng/sys/sparc64/sparc64/vm_machdep.c#26 integrate .. //depot/projects/smpng/sys/sys/buf.h#14 integrate .. //depot/projects/smpng/sys/sys/ccdvar.h#4 integrate .. //depot/projects/smpng/sys/sys/conf.h#18 integrate .. //depot/projects/smpng/sys/sys/copyright.h#4 integrate .. //depot/projects/smpng/sys/sys/diskpc98.h#3 integrate .. //depot/projects/smpng/sys/sys/dmap.h#3 delete .. //depot/projects/smpng/sys/sys/exec.h#3 integrate .. //depot/projects/smpng/sys/sys/imgact_elf.h#6 integrate .. //depot/projects/smpng/sys/sys/mbuf.h#16 integrate .. //depot/projects/smpng/sys/sys/proc.h#69 integrate .. //depot/projects/smpng/sys/sys/sysctl.h#15 integrate .. //depot/projects/smpng/sys/sys/syslimits.h#5 integrate .. //depot/projects/smpng/sys/sys/systm.h#36 integrate .. //depot/projects/smpng/sys/ufs/ffs/ffs_inode.c#11 integrate .. //depot/projects/smpng/sys/ufs/ufs/ufs_bmap.c#7 integrate .. //depot/projects/smpng/sys/ufs/ufs/ufs_vnops.c#24 integrate .. //depot/projects/smpng/sys/vm/swap_pager.c#22 integrate .. //depot/projects/smpng/sys/vm/swap_pager.h#6 integrate .. //depot/projects/smpng/sys/vm/vm_kern.c#10 integrate .. //depot/projects/smpng/sys/vm/vm_map.c#27 integrate .. //depot/projects/smpng/sys/vm/vm_meter.c#12 integrate .. //depot/projects/smpng/sys/vm/vm_object.c#24 integrate .. //depot/projects/smpng/sys/vm/vm_page.c#26 integrate .. //depot/projects/smpng/sys/vm/vm_pageout.c#22 integrate .. //depot/projects/smpng/sys/vm/vm_swap.c#19 integrate .. //depot/projects/smpng/sys/vm/vnode_pager.c#24 integrate Differences ... ==== //depot/projects/smpng/sys/alpha/alpha/dump_machdep.c#3 (text+ko) ==== @@ -32,7 +32,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/alpha/alpha/dump_machdep.c,v 1.2 2002/08/31 03:21:59 jhb Exp $ + * $FreeBSD: src/sys/alpha/alpha/dump_machdep.c,v 1.3 2003/01/03 00:19:54 ticso Exp $ */ #include <sys/param.h> @@ -73,6 +73,18 @@ strncpy(kdh.panicstring, panicstr, sizeof kdh.panicstring); kdh.parity = kerneldump_parity(&kdh); + /* + * Check if we will have enough room to save the coredump. + * The partition size needed is the sum of: + * Memory to save + header + trailer + Room to leave untouched + * at partition head. (an arbitrary amount). + */ + if (di->mediasize < + Maxmem * (off_t)PAGE_SIZE + sizeof kdh * 2 + 64*1024) { + printf("\nDump failed. Partition too small.\n"); + return; + } + dumplo = di->mediaoffset + di->mediasize - Maxmem * (off_t)PAGE_SIZE; dumplo -= sizeof kdh * 2; i = di->dumper(di->priv, &kdh, NULL, dumplo, sizeof kdh); ==== //depot/projects/smpng/sys/boot/pc98/boot2/bios.S#2 (text+ko) ==== @@ -24,7 +24,7 @@ * the rights to redistribute these changes. * * from: Mach, Revision 2.2 92/04/04 11:34:26 rpd - * $FreeBSD: src/sys/boot/pc98/boot2/bios.S,v 1.3 2001/05/24 11:18:32 nyan Exp $ + * $FreeBSD: src/sys/boot/pc98/boot2/bios.S,v 1.4 2003/01/06 13:43:13 nyan Exp $ */ /* @@ -94,6 +94,26 @@ #ifndef CDBOOT /* + * PC-9801/PC-9821 SCSI MO booting + * 2002/06/05-07/03 Kawanobe Koh <kawanobe@st.rim.or.jp> + * + */ +scsi_hd: + .code16 + push %cx + push %ds + mov %bl, %cl /* UA */ + and $0x0F, %cl + xor %ax, %ax + mov %ax, %ds + mov (0x0482), %al /* SCSI HD equipment bits */ + shr %cl, %al + pop %ds + pop %cx + test $1, %al + ret + +/* * biosread(dev, cyl, head, sec, nsec, offset) * Read "nsec" sectors from disk to offset "offset" in boot segment * BIOS call "INT 0x1B Function 0xn6" to read sectors from disk into memory @@ -118,54 +138,58 @@ push %esi push %edi - movb 0x14(%ebp), %dl /* sector */ - movb 0x10(%ebp), %dh /* head */ - movw 0x0c(%ebp), %cx /* cylinder */ - movb 0x08(%ebp), %al /* DA/UA */ - movb $0x06, %ah - andb $0xf0, %al - cmpb $0x30, %al - jz fd - cmpb $0x90, %al - jnz 1f -fd: - incb %dl - movb $0x02, %ch - movb $0xd6, %ah -1: - movb 0x08(%ebp), %al - movl %eax, %ebx + mov 0x08(%ebp), %bl /* (byte) DA/UA */ + mov 0x0C(%ebp), %ecx /* (word) cylinder */ + mov 0x10(%ebp), %dh /* (byte) head */ + mov 0x14(%ebp), %dl /* (byte) sector */ + mov 0x18(%ebp), %esi /* (byte) number of sectors */ + mov 0x1C(%ebp), %edi /* (word) destination offset */ /* prot_to_real will set %es to BOOTSEG */ call EXT(prot_to_real) /* enter real mode */ - mov %ebx, %eax - xor %ebx, %ebx - addr32 - movb 0x18(%ebp), %bl /* number of sectors */ .code16 - shl $9, %ebx - push %ebx - .code32 - addr32 - data32 - mov 0x1c(%ebp), %ebx - .code16 - mov %ebx, %ebp - pop %ebx + mov $0x06, %bh /* read data function */ + mov %bl, %al /* DA */ + and $0xF0, %al + cmp $0x30, %al /* 1440KB FD */ + jz read_floppy + cmp $0x90, %al /* 1200KB FD */ + jz read_floppy + cmp $0xA0, %al /* SCSI HD or MO */ + jnz read_next + call scsi_hd + jnz read_next +read_linear: + mov %dh, %al /* change to linear sector */ + shl $5, %al /* multiply by 32 sector per track */ + add %dl, %al + xor %dh, %dh /* higher 16 bits into %dx */ + mov %ch, %dl + mov %cl, %ch /* lower 16 bits into %cx */ + mov %al, %cl + and $0x7F, %bl /* linear access DA/UA */ + jmp read_next +read_floppy: + inc %dx /* sector address begins from one */ + mov $0x02, %ch /* 512 bytes sector */ + mov $0xD6, %bh /* MT MFM retry seek */ +read_next: + mov %si, %ax /* number of sectors */ + shl $9, %ax /* multiply by 512 bytes */ + xchg %bx, %ax + mov %di, %bp /* destination offset */ + int $0x1B /* disk bios call */ + jc read_end + xor %ax, %ax +read_end: + mov %ax, %bx /* save return value */ - int $0x1b - jc 1f .code32 - xor %eax, %eax -1: - /* save return value (actually movw %ax, %bx) */ - mov %eax, %ebx - data32 call EXT(real_to_prot) /* back to protected mode */ xor %eax, %eax - movb %bh, %al /* return value in %ax */ + mov %bh, %al /* return value in %eax */ pop %edi pop %esi @@ -360,46 +384,61 @@ push %ebp mov %esp, %ebp push %ebx - push %esi - push %edi + + mov 0x08(%ebp), %bl /* (byte) DA/UA */ - movb 0x8(%ebp), %dl /* diskinfo(drive #) */ call EXT(prot_to_real) /* enter real mode */ .code16 + mov %bl, %al /* DA */ + and $0xf0, %al + mov $18, %dl /* 1440KB FD sectors per track */ + cmp $0x30, %al + jz floppy + mov $15, %dl /* 1200KB FD sectors per track */ + cmp $0x90, %al + jz floppy + cmp $0xA0, %al /* SCSI HD or MO */ + jnz sense + call scsi_hd + jnz sense - movb %dl, %al /* ask for disk info */ - andb $0xf0, %al - cmpb $0x30, %al - jz fdd4 - cmpb $0x90, %al - jz fdd + push %ds /* SCSI MO or CD ? */ + xor %ax, %ax + mov %ax, %ds + and $0x0F, %bx /* UA */ + shl $2, %bx /* parameter offset */ + add $0x0460, %bx + mov (%bx), %al /* SCSI equipment parameter[0] */ + and $0x1F, %al /* peripheral device type */ + cmp $7, %al /* SCSI MO */ + jnz good + add $3, %bx + mov (%bx), %al /* SCSI equipment parameter[3] */ + test $0x30, %al /* sector length from 256 to 2048 */ + jnz good + or $0x10, %al /* forced set 512 bytes sector */ + mov %al, (%bx) + mov $0xA100, %dx /* refered by C language */ + mov %dx, %ds + mov %al, (%bx) +good: + pop %ds - movb %dl, %al - movb $0x84, %ah - + mov $0xFFFE, %cx /* virtual 65535 cylinders setting */ + mov $0x0820, %dx /* standard 8 heads and 32 sectors */ + jmp ok +sense: + mov $0x84, %ah /* ask for disk info */ + mov %bl, %al int $0x1b - - jnc ok + jnc ok /* use %cx and %dx after */ /* * Urk. Call failed. It is not supported for floppies by old BIOS's. * Guess it's a 15-sector floppy. */ -fdd4: - movb $18, %dl - jmp 1f -fdd: - movb $15, %dl /* max sector */ -1: - subb %ah, %ah /* %ax = 0 */ - movb %al, %al - movb %ah, %bh /* %bh = 0 */ - movb $2, %bl /* %bl bits 0-3 = drive type, - bit 2 = 1.2M */ - movb $79, %ch /* max track */ - movb $1, %cl /* # floppy drives installed */ - movb $2, %dh /* max head */ - /* es:di = parameter table */ - /* carry = 0 */ +floppy: + mov $79, %cx /* 80 cylinders 1200K and 1440K FD */ + mov $2, %dh /* 2 heads as double side */ ok: .code32 data32 @@ -412,12 +451,9 @@ * 8 bit sector */ mov %ecx, %eax - sall $16,%eax /* << 16 */ - movb %dh, %ah /* max head */ - movb %dl, %al /* max sector (and # sectors) */ + sal $16, %eax /* max cylinder number from zero */ + mov %dx, %ax /* number of heads and sectors */ - pop %edi - pop %esi pop %ebx pop %ebp ret ==== //depot/projects/smpng/sys/boot/pc98/boot2/boot.c#3 (text+ko) ==== @@ -24,7 +24,7 @@ * the rights to redistribute these changes. * * from: Mach, [92/04/03 16:51:14 rvb] - * $FreeBSD: src/sys/boot/pc98/boot2/boot.c,v 1.9 2002/10/03 16:20:14 nyan Exp $ + * $FreeBSD: src/sys/boot/pc98/boot2/boot.c,v 1.10 2003/01/06 13:43:13 nyan Exp $ */ @@ -118,11 +118,16 @@ dosdev = drive; #ifdef PC98 maj = (drive&0x70) >> 3; /* a good first bet */ - if (maj == 4) { /* sd */ + if (maj == 4) { /* da */ disk_equips = *(unsigned char *)V(0xA1482); unit = 0; for (i=0; i<(drive&0x0f); i++) { - unit += (disk_equips >> i) & 1; + int media = ((unsigned *)V(0xA1460))[i] & 0x1F; + + if ((disk_equips >> i) & 1) /* HD */ + unit++; + else if (media == 7) /* MO */ + unit++; } } else { unit = drive & 0x0f; ==== //depot/projects/smpng/sys/boot/pc98/boot2/disk.c#4 (text+ko) ==== @@ -24,7 +24,7 @@ * the rights to redistribute these changes. * * from: Mach, Revision 2.2 92/04/04 11:35:49 rpd - * $FreeBSD: src/sys/boot/pc98/boot2/disk.c,v 1.6 2002/10/03 16:20:14 nyan Exp $ + * $FreeBSD: src/sys/boot/pc98/boot2/disk.c,v 1.8 2003/01/06 13:43:13 nyan Exp $ */ /* @@ -77,7 +77,7 @@ int devopen(void) { - struct dos_partition *dptr; + struct pc98_partition *dptr; struct disklabel *dl; char *p; int i, sector = 0, di, dosdev_copy; @@ -99,7 +99,7 @@ #else /* EMBEDDED_DISKLABEL */ #ifdef PC98 p = Bread(dosdev_copy, 1); - dptr = (struct dos_partition *)p; + dptr = (struct pc98_partition *)p; slice = WHOLE_DISK_SLICE; for (i = 0; i < NDOSPART; i++, dptr++) if (dptr->dp_mid == DOSPTYP_386BSD) { @@ -129,17 +129,6 @@ printf("bad disklabel\n"); return 1; } - if( (maj == 4) || (maj == 0) || (maj == 1)) - { - if (dl->d_type == DTYPE_SCSI) - { - maj = 4; /* use scsi as boot dev */ - } - else - { - maj = 0; /* must be ESDI/IDE */ - } - } /* This little trick is for OnTrack DiskManager disks */ boff = dl->d_partitions[part].p_offset - dl->d_partitions[2].p_offset + sector; ==== //depot/projects/smpng/sys/boot/pc98/boot2/sys.c#2 (text+ko) ==== @@ -24,7 +24,7 @@ * the rights to redistribute these changes. * * from: Mach, Revision 2.2 92/04/04 11:36:34 rpd - * $FreeBSD: src/sys/boot/pc98/boot2/sys.c,v 1.2 1999/08/28 00:40:26 peter Exp $ + * $FreeBSD: src/sys/boot/pc98/boot2/sys.c,v 1.3 2003/01/06 13:43:14 nyan Exp $ */ /* @@ -275,8 +275,8 @@ switch(maj) { #ifdef PC98 - case 4: /* sd */ - dosdev_copy = biosdrive | 0xa0; + case 4: /* da */ + dosdev_copy = biosdrive | 0xA0; /* SCSI HD or MO */ #else /* IBM-PC */ case 0: case 4: @@ -284,8 +284,8 @@ #endif break; #ifdef PC98 - case 0: - case 2: + case 0: /* wd */ + case 2: /* 1200KB fd */ dosdev_copy = (maj << 3) | unit | 0x80; #else case 2: @@ -293,7 +293,7 @@ #endif break; #ifdef PC98 - case 6:/* 1.44MB FD */ + case 6: /* 1440KB fd */ dosdev_copy = (maj << 3) | unit; break; #endif ==== //depot/projects/smpng/sys/boot/pc98/libpc98/biosdisk.c#5 (text+ko) ==== @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/boot/pc98/libpc98/biosdisk.c,v 1.19 2002/10/07 15:26:10 nyan Exp $ + * $FreeBSD: src/sys/boot/pc98/libpc98/biosdisk.c,v 1.21 2003/01/06 13:43:15 nyan Exp $ */ /* @@ -81,9 +81,12 @@ #define BD_FLOPPY 0x0004 #define BD_LABELOK 0x0008 #define BD_PARTTABOK 0x0010 +#ifdef PC98 +#define BD_OPTICAL 0x0020 +#endif struct disklabel od_disklabel; int od_nslices; /* slice count */ - struct dos_partition od_slicetab[MAX_SLICES]; + struct pc98_partition od_slicetab[MAX_SLICES]; }; /* @@ -109,7 +112,7 @@ static int bd_int13probe(struct bdinfo *bd); -static void bd_printslice(struct open_disk *od, struct dos_partition *dp, +static void bd_printslice(struct open_disk *od, struct pc98_partition *dp, char *prefix, int verbose); static void bd_printbsdslice(struct open_disk *od, daddr_t offset, char *prefix, int verbose); @@ -198,7 +201,7 @@ } } else { - if ((unit & 0xa0) == 0xa0) + if ((unit & 0xF0) == 0xA0) /* SCSI HD or MO */ bdinfo[nbdinfo].bd_da_unit = da_drive++; } /* XXX we need "disk aliases" to make this simpler */ @@ -257,6 +260,14 @@ bd->bd_flags |= BD_MODEINT13; return(1); } + if ((bd->bd_unit & 0xF0) == 0xA0) { + int media = ((unsigned *)PTOV(0xA1460))[bd->bd_unit & 0x0F] & 0x1F; + + if (media == 7) { /* MO */ + bd->bd_flags |= BD_MODEINT13 | BD_OPTICAL; + return(1); + } + } return(0); #else v86.ctl = V86_FLAGS; @@ -298,7 +309,7 @@ char line[80]; struct i386_devdesc dev; struct open_disk *od; - struct dos_partition *dptr; + struct pc98_partition *dptr; for (i = 0; i < nbdinfo; i++) { #ifdef PC98 @@ -523,7 +534,7 @@ static int bd_opendisk(struct open_disk **odp, struct i386_devdesc *dev) { - struct dos_partition *dptr; + struct pc98_partition *dptr; struct disklabel *lp; struct open_disk *od; int sector, slice, i; @@ -605,7 +616,7 @@ * copy the partition table, then pick up any extended partitions. */ bcopy(buf + DOSPARTOFF, &od->od_slicetab, - sizeof(struct dos_partition) * NDOSPART); + sizeof(struct pc98_partition) * NDOSPART); #ifdef PC98 od->od_nslices = NDOSPART; /* extended slices start here */ #else @@ -810,7 +821,7 @@ static int bd_bestslice(struct open_disk *od) { - struct dos_partition *dp; + struct pc98_partition *dp; int pref, preflevel; int i, prefslice; @@ -1081,7 +1092,13 @@ v86.eax = 0x0600 | od->od_unit; v86.ecx = cyl; } - v86.edx = (hd << 8) | sec; + if (od->od_flags & BD_OPTICAL) { + v86.eax &= 0xFF7F; + v86.ecx = dblk & 0xFFFF; + v86.edx = dblk >> 16; + } else { + v86.edx = (hd << 8) | sec; + } v86.ebx = x * BIOSDISK_SECSIZE; v86.es = VTOPSEG(xp); v86.ebp = VTOPOFF(xp); @@ -1362,6 +1379,10 @@ od->od_cyl = 79; od->od_hds = 2; od->od_sec = (od->od_unit & 0xf0) == 0x30 ? 18 : 15; + } else if (od->od_flags & BD_OPTICAL) { + od->od_cyl = 0xFFFE; + od->od_hds = 8; + od->od_sec = 32; } else { v86.ctl = V86_FLAGS; v86.addr = 0x1b; @@ -1423,19 +1444,26 @@ if (*(u_char *)PTOV(addr) & (1 << (unit & 0x0f))) if (hds++ == bunit) break; + + if (unit >= 0xA0) { + int media = ((unsigned *)PTOV(0xA1460))[unit & 0x0F] & 0x1F; + + if (media == 7 && hds++ == bunit) /* SCSI MO */ + return(0xFFFE0820); /* C:65535 H:8 S:32 */ + } if (++unit == 0x84) { - unit = 0xa0; /* SCSI HDD */ + unit = 0xA0; /* SCSI HDD */ addr = 0xA1482; } } if (unit == 0xa7) - return 0x4f010f; + return 0x4F020F; /* 1200KB FD C:80 H:2 S:15 */ v86.ctl = V86_FLAGS; v86.addr = 0x1b; v86.eax = 0x8400 | unit; v86int(); if (v86.efl & 0x1) - return 0x4f010f; + return 0x4F020F; /* 1200KB FD C:80 H:2 S:15 */ return ((v86.ecx & 0xffff) << 16) | (v86.edx & 0xffff); #else v86.ctl = V86_FLAGS; ==== //depot/projects/smpng/sys/cam/scsi/scsi_da.c#30 (text+ko) ==== @@ -25,7 +25,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/cam/scsi/scsi_da.c,v 1.118 2002/12/18 21:47:52 njl Exp $ + * $FreeBSD: src/sys/cam/scsi/scsi_da.c,v 1.120 2003/01/06 19:30:21 peter Exp $ */ #ifdef _KERNEL ==== //depot/projects/smpng/sys/conf/files#60 (text+ko) ==== @@ -1,4 +1,4 @@ -# $FreeBSD: src/sys/conf/files,v 1.742 2003/01/01 19:49:29 jake Exp $ +# $FreeBSD: src/sys/conf/files,v 1.743 2003/01/04 22:07:48 jake Exp $ # # The long compile-with and dependency lines are required because of # limitations in config: backslash-newline doesn't work in strings, and @@ -966,9 +966,7 @@ isofs/cd9660/cd9660_util.c optional cd9660 isofs/cd9660/cd9660_vfsops.c optional cd9660 isofs/cd9660/cd9660_vnops.c optional cd9660 -kern/imgact_elf32.c standard -kern/imgact_elf64.c standard -kern/imgact_elfN.c standard +kern/imgact_elf.c standard kern/imgact_shell.c standard kern/inflate.c optional gzip kern/init_main.c standard ==== //depot/projects/smpng/sys/conf/files.ia64#22 (text+ko) ==== @@ -1,7 +1,7 @@ # This file tells config what files go into building a kernel, # files marked standard are always included. # -# $FreeBSD: src/sys/conf/files.ia64,v 1.41 2002/10/24 19:05:03 jhb Exp $ +# $FreeBSD: src/sys/conf/files.ia64,v 1.42 2003/01/04 22:07:48 jake Exp $ # # The long compile-with and dependency lines are required because of # limitations in config: backslash-newline doesn't work in strings, and @@ -109,6 +109,7 @@ isa/psm.c optional psm isa/syscons_isa.c optional sc isa/vga_isa.c optional vga +kern/imgact_elf32.c optional ia32 kern/subr_diskmbr.c standard libkern/ia64/bswap16.S standard libkern/ia64/bswap32.S standard ==== //depot/projects/smpng/sys/conf/ldscript.i386#4 (text+ko) ==== @@ -1,4 +1,4 @@ -/* $FreeBSD: src/sys/conf/ldscript.i386,v 1.6 2002/10/11 19:38:04 obrien Exp $ */ +/* $FreeBSD: src/sys/conf/ldscript.i386,v 1.7 2003/01/06 07:37:15 phk Exp $ */ OUTPUT_FORMAT("elf32-i386-freebsd", "elf32-i386-freebsd", "elf32-i386-freebsd") OUTPUT_ARCH(i386) ENTRY(btext) @@ -65,10 +65,14 @@ CONSTRUCTORS } .data1 : { *(.data1) } + _start_ctors = .; + PROVIDE (start_ctors = .); .ctors : { *(.ctors) } + _stop_ctors = .; + PROVIDE (stop_ctors = .); .dtors : { *(.dtors) ==== //depot/projects/smpng/sys/dev/bge/if_bge.c#19 (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_bge.c,v 1.25 2002/11/14 23:54:49 sam Exp $ + * $FreeBSD: src/sys/dev/bge/if_bge.c,v 1.27 2003/01/07 01:33:03 jdp Exp $ */ /* @@ -122,7 +122,7 @@ #if !defined(lint) static const char rcsid[] = - "$FreeBSD: src/sys/dev/bge/if_bge.c,v 1.25 2002/11/14 23:54:49 sam Exp $"; + "$FreeBSD: src/sys/dev/bge/if_bge.c,v 1.27 2003/01/07 01:33:03 jdp Exp $"; #endif /* @@ -131,6 +131,7 @@ * ID burned into it, though it will always be overriden by the vendor * ID in the EEPROM. Just to be safe, we cover all possibilities. */ +#define BGE_DEVDESC_MAX 64 /* Maximum device description length */ static struct bge_type bge_devs[] = { { ALT_VENDORID, ALT_DEVICEID_BCM5700, @@ -849,7 +850,6 @@ { int i; struct bge_rcb *rcb; - struct bge_rcb_opaque *rcbo; for (i = 0; i < BGE_JUMBO_RX_RING_CNT; i++) { if (bge_newbuf_jumbo(sc, i, NULL) == ENOBUFS) @@ -859,9 +859,8 @@ sc->bge_jumbo = i - 1; rcb = &sc->bge_rdata->bge_info.bge_jumbo_rx_rcb; - rcbo = (struct bge_rcb_opaque *)rcb; - rcb->bge_flags = 0; - CSR_WRITE_4(sc, BGE_RX_JUMBO_RCB_MAXLEN_FLAGS, rcbo->bge_reg2); + rcb->bge_maxlen_flags = BGE_RCB_MAXLEN_FLAGS(0, 0); + CSR_WRITE_4(sc, BGE_RX_JUMBO_RCB_MAXLEN_FLAGS, rcb->bge_maxlen_flags); CSR_WRITE_4(sc, BGE_MBX_RX_JUMBO_PROD_LO, sc->bge_jumbo); @@ -1066,7 +1065,7 @@ struct bge_softc *sc; { struct bge_rcb *rcb; - struct bge_rcb_opaque *rcbo; + volatile struct bge_rcb *vrcb; int i; /* @@ -1137,17 +1136,15 @@ rcb = &sc->bge_rdata->bge_info.bge_std_rx_rcb; BGE_HOSTADDR(rcb->bge_hostaddr) = vtophys(&sc->bge_rdata->bge_rx_std_ring); - rcb->bge_max_len = BGE_MAX_FRAMELEN; + rcb->bge_maxlen_flags = BGE_RCB_MAXLEN_FLAGS(BGE_MAX_FRAMELEN, 0); if (sc->bge_extram) rcb->bge_nicaddr = BGE_EXT_STD_RX_RINGS; else rcb->bge_nicaddr = BGE_STD_RX_RINGS; - rcb->bge_flags = 0; - rcbo = (struct bge_rcb_opaque *)rcb; - CSR_WRITE_4(sc, BGE_RX_STD_RCB_HADDR_HI, rcbo->bge_reg0); - CSR_WRITE_4(sc, BGE_RX_STD_RCB_HADDR_LO, rcbo->bge_reg1); - CSR_WRITE_4(sc, BGE_RX_STD_RCB_MAXLEN_FLAGS, rcbo->bge_reg2); - CSR_WRITE_4(sc, BGE_RX_STD_RCB_NICADDR, rcbo->bge_reg3); + CSR_WRITE_4(sc, BGE_RX_STD_RCB_HADDR_HI, rcb->bge_hostaddr.bge_addr_hi); + CSR_WRITE_4(sc, BGE_RX_STD_RCB_HADDR_LO, rcb->bge_hostaddr.bge_addr_lo); + CSR_WRITE_4(sc, BGE_RX_STD_RCB_MAXLEN_FLAGS, rcb->bge_maxlen_flags); + CSR_WRITE_4(sc, BGE_RX_STD_RCB_NICADDR, rcb->bge_nicaddr); /* * Initialize the jumbo RX ring control block @@ -1159,24 +1156,24 @@ rcb = &sc->bge_rdata->bge_info.bge_jumbo_rx_rcb; BGE_HOSTADDR(rcb->bge_hostaddr) = vtophys(&sc->bge_rdata->bge_rx_jumbo_ring); - rcb->bge_max_len = BGE_MAX_FRAMELEN; + rcb->bge_maxlen_flags = + BGE_RCB_MAXLEN_FLAGS(BGE_MAX_FRAMELEN, BGE_RCB_FLAG_RING_DISABLED); if (sc->bge_extram) rcb->bge_nicaddr = BGE_EXT_JUMBO_RX_RINGS; else rcb->bge_nicaddr = BGE_JUMBO_RX_RINGS; - rcb->bge_flags = BGE_RCB_FLAG_RING_DISABLED; - - rcbo = (struct bge_rcb_opaque *)rcb; - CSR_WRITE_4(sc, BGE_RX_JUMBO_RCB_HADDR_HI, rcbo->bge_reg0); - CSR_WRITE_4(sc, BGE_RX_JUMBO_RCB_HADDR_LO, rcbo->bge_reg1); - CSR_WRITE_4(sc, BGE_RX_JUMBO_RCB_MAXLEN_FLAGS, rcbo->bge_reg2); - CSR_WRITE_4(sc, BGE_RX_JUMBO_RCB_NICADDR, rcbo->bge_reg3); + CSR_WRITE_4(sc, BGE_RX_JUMBO_RCB_HADDR_HI, + rcb->bge_hostaddr.bge_addr_hi); + CSR_WRITE_4(sc, BGE_RX_JUMBO_RCB_HADDR_LO, + rcb->bge_hostaddr.bge_addr_lo); + CSR_WRITE_4(sc, BGE_RX_JUMBO_RCB_MAXLEN_FLAGS, rcb->bge_maxlen_flags); + CSR_WRITE_4(sc, BGE_RX_JUMBO_RCB_NICADDR, rcb->bge_nicaddr); /* Set up dummy disabled mini ring RCB */ rcb = &sc->bge_rdata->bge_info.bge_mini_rx_rcb; - rcb->bge_flags = BGE_RCB_FLAG_RING_DISABLED; - rcbo = (struct bge_rcb_opaque *)rcb; - CSR_WRITE_4(sc, BGE_RX_MINI_RCB_MAXLEN_FLAGS, rcbo->bge_reg2); + rcb->bge_maxlen_flags = + BGE_RCB_MAXLEN_FLAGS(0, BGE_RCB_FLAG_RING_DISABLED); + CSR_WRITE_4(sc, BGE_RX_MINI_RCB_MAXLEN_FLAGS, rcb->bge_maxlen_flags); /* * Set the BD ring replentish thresholds. The recommended @@ -1191,37 +1188,37 @@ * bit in the flags field of all the TX send ring control blocks. * These are located in NIC memory. */ - rcb = (struct bge_rcb *)(sc->bge_vhandle + BGE_MEMWIN_START + + vrcb = (volatile struct bge_rcb *)(sc->bge_vhandle + BGE_MEMWIN_START + BGE_SEND_RING_RCB); for (i = 0; i < BGE_TX_RINGS_EXTSSRAM_MAX; i++) { - rcb->bge_flags = BGE_RCB_FLAG_RING_DISABLED; - rcb->bge_max_len = 0; - rcb->bge_nicaddr = 0; - rcb++; + vrcb->bge_maxlen_flags = + BGE_RCB_MAXLEN_FLAGS(0, BGE_RCB_FLAG_RING_DISABLED); + vrcb->bge_nicaddr = 0; + vrcb++; } /* Configure TX RCB 0 (we use only the first ring) */ - rcb = (struct bge_rcb *)(sc->bge_vhandle + BGE_MEMWIN_START + + vrcb = (volatile struct bge_rcb *)(sc->bge_vhandle + BGE_MEMWIN_START + BGE_SEND_RING_RCB); - rcb->bge_hostaddr.bge_addr_hi = 0; - BGE_HOSTADDR(rcb->bge_hostaddr) = + vrcb->bge_hostaddr.bge_addr_hi = 0; + BGE_HOSTADDR(vrcb->bge_hostaddr) = vtophys(&sc->bge_rdata->bge_tx_ring); - rcb->bge_nicaddr = BGE_NIC_TXRING_ADDR(0, BGE_TX_RING_CNT); - rcb->bge_max_len = BGE_TX_RING_CNT; - rcb->bge_flags = 0; + vrcb->bge_nicaddr = BGE_NIC_TXRING_ADDR(0, BGE_TX_RING_CNT); + vrcb->bge_maxlen_flags = BGE_RCB_MAXLEN_FLAGS(BGE_TX_RING_CNT, 0); /* Disable all unused RX return rings */ - rcb = (struct bge_rcb *)(sc->bge_vhandle + BGE_MEMWIN_START + + vrcb = (volatile struct bge_rcb *)(sc->bge_vhandle + BGE_MEMWIN_START + BGE_RX_RETURN_RING_RCB); for (i = 0; i < BGE_RX_RINGS_MAX; i++) { - rcb->bge_hostaddr.bge_addr_hi = 0; - rcb->bge_hostaddr.bge_addr_lo = 0; - rcb->bge_flags = BGE_RCB_FLAG_RING_DISABLED; - rcb->bge_max_len = BGE_RETURN_RING_CNT; - rcb->bge_nicaddr = 0; + vrcb->bge_hostaddr.bge_addr_hi = 0; + vrcb->bge_hostaddr.bge_addr_lo = 0; + vrcb->bge_maxlen_flags = + BGE_RCB_MAXLEN_FLAGS(BGE_RETURN_RING_CNT, + BGE_RCB_FLAG_RING_DISABLED); + vrcb->bge_nicaddr = 0; CSR_WRITE_4(sc, BGE_MBX_RX_CONS0_LO + (i * (sizeof(u_int64_t))), 0); - rcb++; + vrcb++; } /* Initialize RX ring indexes */ @@ -1235,14 +1232,13 @@ * The return rings live entirely within the host, so the * nicaddr field in the RCB isn't used. */ - rcb = (struct bge_rcb *)(sc->bge_vhandle + BGE_MEMWIN_START + + vrcb = (volatile struct bge_rcb *)(sc->bge_vhandle + BGE_MEMWIN_START + BGE_RX_RETURN_RING_RCB); - rcb->bge_hostaddr.bge_addr_hi = 0; - BGE_HOSTADDR(rcb->bge_hostaddr) = + vrcb->bge_hostaddr.bge_addr_hi = 0; + BGE_HOSTADDR(vrcb->bge_hostaddr) = vtophys(&sc->bge_rdata->bge_rx_return_ring); - rcb->bge_nicaddr = 0x00000000; - rcb->bge_max_len = BGE_RETURN_RING_CNT; - rcb->bge_flags = 0; + vrcb->bge_nicaddr = 0x00000000; + vrcb->bge_maxlen_flags = BGE_RCB_MAXLEN_FLAGS(BGE_RETURN_RING_CNT, 0); /* Set random backoff seed for TX */ CSR_WRITE_4(sc, BGE_TX_RANDOM_BACKOFF, @@ -1422,6 +1418,7 @@ { struct bge_type *t; struct bge_softc *sc; + char *descbuf; >>> TRUNCATED FOR MAIL (1000 lines) <<< To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe p4-projects" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200301071701.h07H1mqM043983>