The Great PC98 Merge.

All new code is "#ifdef PC98"ed so this should make no difference to
PC/AT (and its clones) users.

Ok'd by:	core
Submitted by:	FreeBSD(98) development team
This commit is contained in:
Satoshi Asami 1996-06-14 11:02:28 +00:00
parent 4924f5c24f
commit ad63a118b2
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=16363
40 changed files with 893 additions and 35 deletions

View File

@ -1,5 +1,9 @@
# $Id: Makefile,v 1.3 1994/08/25 13:54:28 paul Exp $
# $Id: Makefile,v 1.4 1995/12/26 13:57:32 bde Exp $
.if defined(MACHINE_PC98) && ${MACHINE_PC98} == "yes"
SUBDIR= pc98/boot
.else
SUBDIR= ${MACHINE}/boot
.endif
.include <bsd.subdir.mk>

View File

@ -25,7 +25,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.
*
* $Id: console.h,v 1.19 1995/05/30 08:00:28 rgrimes Exp $
* $Id: console.h,v 1.20 1996/01/30 22:54:15 mpp Exp $
*/
#ifndef _CONSOLE_H_
@ -78,6 +78,10 @@
#define CONS_GETINFO _IOWR('c', 73, vid_info_t)
#define CONS_GETVERS _IOR('c', 74, int)
#ifdef PC98
#define ADJUST_CLOCK _IO('t',100) /* for 98note resume */
#endif /* for PC98 */
#define VT_OPENQRY _IOR('v', 1, int)
#define VT_SETMODE _IOW('v', 2, vtmode_t)
#define VT_GETMODE _IOR('v', 3, vtmode_t)
@ -118,6 +122,9 @@ struct mouse_info {
#define KD_CGA 3 /* color graphics adapter */
#define KD_EGA 4 /* enhanced graphics adapter */
#define KD_VGA 5 /* video graphics adapter */
#ifdef PC98
#define KD_PC98 6
#endif
#define KD_TEXT 0 /* set text mode restore fonts */
#define KD_TEXT0 0 /* ditto */
@ -242,6 +249,13 @@ typedef struct ssaver ssaver_t;
#define MKEY 0x400 /* meta key marker (prepend ESC)*/
#define BKEY 0x800 /* backtab (ESC [ Z) */
#ifdef PC98
#define KB_DATA 0x41 /* kbd data port */
#define KB_STAT 0x43 /* kbd status port */
#define KB_BUF_FULL 0x02 /* kbd has char pending */
#define KB_READY 0x02 /* kbd ready for command */
#define KB_WRITE 0x43 /* kbd write command */
#else
#define KB_DATA 0x60 /* kbd data port */
#define KB_STAT 0x64 /* kbd status port */
#define KB_BUF_FULL 0x01 /* kbd has char pending */
@ -255,8 +269,13 @@ typedef struct ssaver ssaver_t;
#define KB_ACK 0xFA /* kbd acknowledge answer */
#define KB_RESEND 0xFE /* kbd resend cmd answer */
#define KB_RESET 0xFF /* kbd reset */
#endif
/* video mode definitions */
#ifdef PC98
#define M_PC98_80x25 98 /* PC98 80x25 */
#define M_PC98_80x30 99 /* PC98 80x30 */
#else
#define M_B40x25 0 /* black & white 40 columns */
#define M_C40x25 1 /* color 40 columns */
#define M_B80x25 2 /* black & white 80 columns */
@ -298,7 +317,12 @@ typedef struct ssaver ssaver_t;
#define M_HGC_P0 0xe0 /* hercules graphics - page 0 @ B0000 */
#define M_HGC_P1 0xe1 /* hercules graphics - page 1 @ B8000 */
#define M_MCA_MODE 0xff /* monochrome adapter mode */
#endif
#ifdef PC98
#define SW_PC98_80x25 _IO('S', M_PC98_80x25)
#define SW_PC98_80x30 _IO('S', M_PC98_80x30)
#else
#define SW_B40x25 _IO('S', M_B40x25)
#define SW_C40x25 _IO('S', M_C40x25)
#define SW_B80x25 _IO('S', M_B80x25)
@ -335,5 +359,6 @@ typedef struct ssaver ssaver_t;
#define SW_CG640x480 _IO('S', M_VGA12)
#define SW_VGA13 _IO('S', M_VGA13)
#define SW_VGA_CG320 _IO('S', M_VGA13)
#endif
#endif

View File

@ -3,7 +3,7 @@
* Garrett Wollman, September 1994.
* This file is in the public domain.
*
* $Id: clock.h,v 1.12 1996/04/22 19:40:27 nate Exp $
* $Id: clock.h,v 1.13 1996/05/01 08:38:50 bde Exp $
*/
#ifndef _MACHINE_CLOCK_H_
@ -93,7 +93,15 @@ int acquire_timer0 __P((int rate,
int acquire_timer2 __P((int mode));
int release_timer0 __P((void));
int release_timer2 __P((void));
#ifndef PC98
int rtcin __P((int val));
#else
int acquire_timer1 __P((int mode));
int release_timer1 __P((void));
void rtc_serialcombit __P((int i));
void rtc_serialcom __P((int i));
void rtc_outb __P((int val));
#endif
int sysbeep __P((int pitch, int period));
#endif /* KERNEL && !LOCORE */

View File

@ -30,7 +30,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $Id: cpufunc.h,v 1.48 1996/03/31 04:05:21 bde Exp $
* $Id: cpufunc.h,v 1.49 1996/04/07 18:30:56 bde Exp $
*/
/*
@ -253,6 +253,53 @@ outw(u_int port, u_short data)
__asm __volatile("outw %0,%%dx" : : "a" (data), "d" (port));
}
#ifdef PC98
static inline u_char
epson_inb(u_int port)
{
u_char data;
outb(0x43f, 0x42);
data = inb(port);
outb(0x43f, 0x40);
return (data);
}
static inline void
epson_outb(u_int port, u_char data)
{
outb(0x43f, 0x42);
outb(port,data);
outb(0x43f, 0x40);
}
static inline void
epson_insw(u_int port, void *addr, size_t cnt)
{
int s;
s = splbio();
outb(0x43f, 0x42);
disable_intr();
insw((u_int)port, (void *)addr, (size_t)cnt);
outb(0x43f, 0x40);
splx(s);
}
static inline void
epson_outsw(u_int port, void *addr, size_t cnt)
{
int s;
s = splbio();
outb(0x43f, 0x42);
disable_intr();
outsw((u_int)port, (void *)addr, (size_t)cnt);
outb(0x43f, 0x40);
splx(s);
}
#endif /* PC98 */
static __inline void
pmap_update(void)
{

View File

@ -34,9 +34,13 @@
* SUCH DAMAGE.
*
* from: @(#)isa.h 5.7 (Berkeley) 5/9/91
* $Id: isa.h,v 1.17 1995/11/18 09:29:39 bde Exp $
* $Id: isa.h,v 1.18 1996/01/30 22:55:57 mpp Exp $
*/
#ifdef PC98
#error isa.h is included from PC-9801 source
#endif
#ifndef _I386_ISA_ISA_H_
#define _I386_ISA_ISA_H_

View File

@ -17,7 +17,7 @@
* 4. Modifications may be freely made to this file if the above conditions
* are met.
*
* $Id: if_ed_p.c,v 1.1 1996/05/18 17:56:40 se Exp $
* $Id: if_ed_p.c,v 1.2 1996/06/11 00:51:49 alex Exp $
*/
#include <pci.h>
@ -29,7 +29,11 @@
#include <sys/kernel.h>
#include <pci/pcireg.h>
#include <pci/pcivar.h>
#ifdef PC98
#include <pc98/pc98/pc98_device.h>
#else
#include <i386/isa/isa_device.h>
#endif
#include <ed.h>

View File

@ -1,4 +1,4 @@
/* $Id: msdosfs_denode.c,v 1.16 1996/01/19 03:58:42 dyson Exp $ */
/* $Id: msdosfs_denode.c,v 1.17 1996/06/12 03:37:42 davidg Exp $ */
/* $NetBSD: msdosfs_denode.c,v 1.9 1994/08/21 18:44:00 ws Exp $ */
/*-
@ -495,6 +495,13 @@ detrunc(dep, length, flags, cred, p)
NOCRED, &bp);
} else {
bn = de_blk(pmp, length);
#ifdef PC98
/*
* 1024 byte/sector support
*/
if (pmp->pm_BytesPerSec == 1024)
DETOV(dep)->v_flag |= 0x10000;
#endif
error = bread(DETOV(dep), bn, pmp->pm_bpcluster,
NOCRED, &bp);
}

View File

@ -1,4 +1,4 @@
/* $Id: msdosfs_lookup.c,v 1.5 1995/11/07 14:06:43 phk Exp $ */
/* $Id: msdosfs_lookup.c,v 1.6 1995/12/03 16:42:01 bde Exp $ */
/* $NetBSD: msdosfs_lookup.c,v 1.14 1994/08/21 18:44:07 ws Exp $ */
/*-
@ -171,6 +171,13 @@ msdosfs_lookup(ap)
#ifdef MSDOSFS_DEBUG
printf("msdosfs_lookup(): cache hit, vnode %08x, file %s\n",
vdp, dp->de_Name);
#endif
#ifdef PC98
/*
* 1024 byte/sector support
*/
if (pmp->pm_BytesPerSec == 1024)
vdp->v_flag |= 0x10000;
#endif
return 0;
}

View File

@ -1,4 +1,4 @@
/* $Id: msdosfs_vfsops.c,v 1.11 1996/01/05 18:31:43 wollman Exp $ */
/* $Id: msdosfs_vfsops.c,v 1.12 1996/04/03 23:05:40 gpalmer Exp $ */
/* $NetBSD: msdosfs_vfsops.c,v 1.19 1994/08/21 18:44:10 ws Exp $ */
/*-
@ -273,6 +273,10 @@ mountmsdosfs(devvp, mp, p)
struct buf *bp0 = NULL;
struct byte_bpb33 *b33;
struct byte_bpb50 *b50;
#ifdef PC98
u_int pc98_wrk;
u_int Phy_Sector_Size;
#endif
/*
* Multiple mounts of the same block special file aren't allowed.
@ -311,7 +315,12 @@ mountmsdosfs(devvp, mp, p)
* also add some checking on the bsOemName field. So far I've seen
* the following values: "IBM 3.3" "MSDOS3.3" "MSDOS5.0"
*/
#ifdef PC98
devvp->v_flag &= 0xffff;
error = bread(devvp, 0, 1024, NOCRED, &bp0);
#else
error = bread(devvp, 0, 512, NOCRED, &bp0);
#endif
if (error)
goto error_exit;
bp0->b_flags |= B_AGE;
@ -319,7 +328,14 @@ mountmsdosfs(devvp, mp, p)
b33 = (struct byte_bpb33 *) bsp->bs33.bsBPB;
b50 = (struct byte_bpb50 *) bsp->bs50.bsBPB;
#ifdef MSDOSFS_CHECKSIG
#ifdef PC98
if (bsp->bs50.bsBootSectSig != BOOTSIG &&
bsp->bs50.bsBootSectSig != 0 && /* PC98 DOS 3.3x */
bsp->bs50.bsBootSectSig != 15760 && /* PC98 DOS 5.0 */
bsp->bs50.bsBootSectSig != 64070) { /* PC98 DOS 3.3B */
#else
if (bsp->bs50.bsBootSectSig != BOOTSIG) {
#endif
error = EINVAL;
goto error_exit;
}
@ -353,7 +369,11 @@ mountmsdosfs(devvp, mp, p)
/* XXX - We should probably check more values here */
if (!pmp->pm_BytesPerSec || !pmp->pm_SectPerClust ||
!pmp->pm_Heads || pmp->pm_Heads > 255 ||
#ifdef PC98
!pmp->pm_SecPerTrack || pmp->pm_SecPerTrack > 255) {
#else
!pmp->pm_SecPerTrack || pmp->pm_SecPerTrack > 63) {
#endif
error = EINVAL;
goto error_exit;
}
@ -365,6 +385,41 @@ mountmsdosfs(devvp, mp, p)
pmp->pm_HiddenSects = getushort(b33->bpbHiddenSecs);
pmp->pm_HugeSectors = pmp->pm_Sectors;
}
#ifdef PC98 /* for PC98 added Satoshi Yasuda */
Phy_Sector_Size = 512;
if ((devvp->v_rdev>>8) == 2) { /* floppy check */
if (((devvp->v_rdev&077) == 2) && (pmp->pm_HugeSectors == 1232)) {
Phy_Sector_Size = 1024; /* 2HD */
/*
* 1024byte/sector support
*/
devvp->v_flag |= 0x10000;
} else {
if ((((devvp->v_rdev&077) == 3) /* 2DD 8 or 9 sector */
&& (pmp->pm_HugeSectors == 1440)) /* 9 sector */
|| (((devvp->v_rdev&077) == 4)
&& (pmp->pm_HugeSectors == 1280)) /* 8 sector */
|| (((devvp->v_rdev&077) == 5)
&& (pmp->pm_HugeSectors == 2880))) { /* 1.44M */
Phy_Sector_Size = 512;
} else {
if (((devvp->v_rdev&077) != 1)
&& ((devvp->v_rdev&077) != 0)) { /* 2HC */
error = EINVAL;
goto error_exit;
}
}
}
}
pc98_wrk = pmp->pm_BytesPerSec / Phy_Sector_Size;
pmp->pm_BytesPerSec = Phy_Sector_Size;
pmp->pm_SectPerClust = pmp->pm_SectPerClust * pc98_wrk;
pmp->pm_HugeSectors = pmp->pm_HugeSectors * pc98_wrk;
pmp->pm_ResSectors = pmp->pm_ResSectors * pc98_wrk;
pmp->pm_FATsecs = pmp->pm_FATsecs * pc98_wrk;
pmp->pm_SecPerTrack = pmp->pm_SecPerTrack * pc98_wrk;
pmp->pm_HiddenSects = pmp->pm_HiddenSects * pc98_wrk;
#endif /* */
pmp->pm_fatblk = pmp->pm_ResSectors;
pmp->pm_rootdirblk = pmp->pm_fatblk +
(pmp->pm_FATs * pmp->pm_FATsecs);
@ -420,8 +475,18 @@ mountmsdosfs(devvp, mp, p)
bit <<= 1;
}
#ifdef PC98
if (Phy_Sector_Size == 512) {
pmp->pm_brbomask = 0x01ff; /* 512 byte blocks only (so far) */
pmp->pm_bnshift = 9; /* shift right 9 bits to get bn */
} else {
pmp->pm_brbomask = 0x03ff;
pmp->pm_bnshift = 10;
}
#else
pmp->pm_brbomask = 0x01ff; /* 512 byte blocks only (so far) */
pmp->pm_bnshift = 9; /* shift right 9 bits to get bn */
#endif
/*
* Release the bootsector buffer.

View File

@ -1,4 +1,4 @@
/* $Id: msdosfs_vnops.c,v 1.29 1995/12/03 16:42:02 bde Exp $ */
/* $Id: msdosfs_vnops.c,v 1.30 1995/12/07 12:47:20 davidg Exp $ */
/* $NetBSD: msdosfs_vnops.c,v 1.20 1994/08/21 18:44:13 ws Exp $ */
/*-
@ -558,6 +558,13 @@ msdosfs_read(ap)
NOCRED, &bp);
} else {
rablock = lbn + 1;
#ifdef PC98
/*
* 1024byte/sector support
*/
if (pmp->pm_BytesPerSec == 1024)
vp->v_flag |= 0x10000;
#endif
if (vp->v_lastr + 1 == lbn &&
rablock * pmp->pm_bpcluster < dep->de_FileSize) {
rasize = pmp->pm_bpcluster;
@ -693,6 +700,13 @@ msdosfs_write(ap)
osize = dep->de_FileSize;
#ifdef PC98
/*
* 1024byte/sector support
*/
if (pmp->pm_BytesPerSec == 1024)
thisvp->v_flag |= 0x10000;
#endif
/*
* If we write beyond the end of the file, extend it to its ultimate
* size ahead of the time to hopefully get a contiguous area.

View File

@ -3,7 +3,7 @@
* Garrett Wollman, September 1994.
* This file is in the public domain.
*
* $Id: clock.h,v 1.12 1996/04/22 19:40:27 nate Exp $
* $Id: clock.h,v 1.13 1996/05/01 08:38:50 bde Exp $
*/
#ifndef _MACHINE_CLOCK_H_
@ -93,7 +93,15 @@ int acquire_timer0 __P((int rate,
int acquire_timer2 __P((int mode));
int release_timer0 __P((void));
int release_timer2 __P((void));
#ifndef PC98
int rtcin __P((int val));
#else
int acquire_timer1 __P((int mode));
int release_timer1 __P((void));
void rtc_serialcombit __P((int i));
void rtc_serialcom __P((int i));
void rtc_outb __P((int val));
#endif
int sysbeep __P((int pitch, int period));
#endif /* KERNEL && !LOCORE */

View File

@ -25,7 +25,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.
*
* $Id: console.h,v 1.19 1995/05/30 08:00:28 rgrimes Exp $
* $Id: console.h,v 1.20 1996/01/30 22:54:15 mpp Exp $
*/
#ifndef _CONSOLE_H_
@ -78,6 +78,10 @@
#define CONS_GETINFO _IOWR('c', 73, vid_info_t)
#define CONS_GETVERS _IOR('c', 74, int)
#ifdef PC98
#define ADJUST_CLOCK _IO('t',100) /* for 98note resume */
#endif /* for PC98 */
#define VT_OPENQRY _IOR('v', 1, int)
#define VT_SETMODE _IOW('v', 2, vtmode_t)
#define VT_GETMODE _IOR('v', 3, vtmode_t)
@ -118,6 +122,9 @@ struct mouse_info {
#define KD_CGA 3 /* color graphics adapter */
#define KD_EGA 4 /* enhanced graphics adapter */
#define KD_VGA 5 /* video graphics adapter */
#ifdef PC98
#define KD_PC98 6
#endif
#define KD_TEXT 0 /* set text mode restore fonts */
#define KD_TEXT0 0 /* ditto */
@ -242,6 +249,13 @@ typedef struct ssaver ssaver_t;
#define MKEY 0x400 /* meta key marker (prepend ESC)*/
#define BKEY 0x800 /* backtab (ESC [ Z) */
#ifdef PC98
#define KB_DATA 0x41 /* kbd data port */
#define KB_STAT 0x43 /* kbd status port */
#define KB_BUF_FULL 0x02 /* kbd has char pending */
#define KB_READY 0x02 /* kbd ready for command */
#define KB_WRITE 0x43 /* kbd write command */
#else
#define KB_DATA 0x60 /* kbd data port */
#define KB_STAT 0x64 /* kbd status port */
#define KB_BUF_FULL 0x01 /* kbd has char pending */
@ -255,8 +269,13 @@ typedef struct ssaver ssaver_t;
#define KB_ACK 0xFA /* kbd acknowledge answer */
#define KB_RESEND 0xFE /* kbd resend cmd answer */
#define KB_RESET 0xFF /* kbd reset */
#endif
/* video mode definitions */
#ifdef PC98
#define M_PC98_80x25 98 /* PC98 80x25 */
#define M_PC98_80x30 99 /* PC98 80x30 */
#else
#define M_B40x25 0 /* black & white 40 columns */
#define M_C40x25 1 /* color 40 columns */
#define M_B80x25 2 /* black & white 80 columns */
@ -298,7 +317,12 @@ typedef struct ssaver ssaver_t;
#define M_HGC_P0 0xe0 /* hercules graphics - page 0 @ B0000 */
#define M_HGC_P1 0xe1 /* hercules graphics - page 1 @ B8000 */
#define M_MCA_MODE 0xff /* monochrome adapter mode */
#endif
#ifdef PC98
#define SW_PC98_80x25 _IO('S', M_PC98_80x25)
#define SW_PC98_80x30 _IO('S', M_PC98_80x30)
#else
#define SW_B40x25 _IO('S', M_B40x25)
#define SW_C40x25 _IO('S', M_C40x25)
#define SW_B80x25 _IO('S', M_B80x25)
@ -335,5 +359,6 @@ typedef struct ssaver ssaver_t;
#define SW_CG640x480 _IO('S', M_VGA12)
#define SW_VGA13 _IO('S', M_VGA13)
#define SW_VGA_CG320 _IO('S', M_VGA13)
#endif
#endif

View File

@ -30,7 +30,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $Id: cpufunc.h,v 1.48 1996/03/31 04:05:21 bde Exp $
* $Id: cpufunc.h,v 1.49 1996/04/07 18:30:56 bde Exp $
*/
/*
@ -253,6 +253,53 @@ outw(u_int port, u_short data)
__asm __volatile("outw %0,%%dx" : : "a" (data), "d" (port));
}
#ifdef PC98
static inline u_char
epson_inb(u_int port)
{
u_char data;
outb(0x43f, 0x42);
data = inb(port);
outb(0x43f, 0x40);
return (data);
}
static inline void
epson_outb(u_int port, u_char data)
{
outb(0x43f, 0x42);
outb(port,data);
outb(0x43f, 0x40);
}
static inline void
epson_insw(u_int port, void *addr, size_t cnt)
{
int s;
s = splbio();
outb(0x43f, 0x42);
disable_intr();
insw((u_int)port, (void *)addr, (size_t)cnt);
outb(0x43f, 0x40);
splx(s);
}
static inline void
epson_outsw(u_int port, void *addr, size_t cnt)
{
int s;
s = splbio();
outb(0x43f, 0x42);
disable_intr();
outsw((u_int)port, (void *)addr, (size_t)cnt);
outb(0x43f, 0x40);
splx(s);
}
#endif /* PC98 */
static __inline void
pmap_update(void)
{

View File

@ -22,7 +22,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $Id: devconf.h,v 1.11 1995/11/14 20:52:14 phk Exp $
* $Id: devconf.h,v 1.12 1995/11/20 12:41:31 phk Exp $
*/
/*
* devconf.h - machine-dependent device configuration table
@ -35,9 +35,25 @@
#define PARENTNAMELEN 32
#ifdef PC98
enum machdep_devtype { MDDT_CPU, MDDT_PC98, MDDT_PCI, MDDT_SCSI,
MDDT_DISK, MDDT_BUS, NDEVTYPES };
#else
enum machdep_devtype { MDDT_CPU, MDDT_ISA, MDDT_EISA, MDDT_PCI, MDDT_SCSI,
MDDT_DISK, MDDT_BUS, NDEVTYPES };
#endif
#ifdef PC98
#define DEVTYPENAMES { \
"cpu", \
"pc98", \
"pci", \
"scsi", \
"disk", \
"bus", \
0 \
}
#else
#define DEVTYPENAMES { \
"cpu", \
"isa", \
@ -48,6 +64,7 @@ enum machdep_devtype { MDDT_CPU, MDDT_ISA, MDDT_EISA, MDDT_PCI, MDDT_SCSI,
"bus", \
0 \
}
#endif
struct machdep_devconf {
enum machdep_devtype mddc_devtype;
@ -63,8 +80,12 @@ struct machdep_devconf {
#define dc_devtype dc_md.mddc_devtype
#define dc_flags dc_md.mddc_flags
#ifdef PC98
#define kdc_pc98 kdc_parentdata
#else
#define kdc_isa kdc_parentdata
#define kdc_eisa kdc_parentdata
#endif
#define kdc_scsi kdc_parentdata
#define CPU_EXTERNALLEN (0)

View File

@ -1,7 +1,7 @@
/*
* random.h -- A strong random number generator
*
* $Id: random.h,v 1.3 1995/12/29 08:04:13 markm Exp $
* $Id: random.h,v 1.4 1996/01/30 22:54:53 mpp Exp $
*
* Version 0.95, last modified 18-Oct-95
*
@ -51,9 +51,14 @@
#define _MACHINE_RANDOM_H_ 1
#if defined(KERNEL)
#ifdef PC98
#include <pc98/pc98/icu.h>
#include <pc98/pc98/pc98_device.h>
#else
#include <i386/isa/icu.h>
#include <i386/isa/isa_device.h>
#endif
#endif
#include <sys/ioctl.h>
#define MEM_SETIRQ _IOW('r', 1, u_int16_t) /* set interrupt */

View File

@ -64,6 +64,9 @@
#define SNDCARD_TRXPRO 16
#define SNDCARD_TRXPRO_SB 17
#define SNDCARD_TRXPRO_MPU 18
#ifdef PC98
#define SNDCARD_PCM86 19
#endif
/***********************************
* IOCTL Commands for /dev/sequencer

View File

@ -34,9 +34,13 @@
* SUCH DAMAGE.
*
* from: @(#)isa.h 5.7 (Berkeley) 5/9/91
* $Id: isa.h,v 1.17 1995/11/18 09:29:39 bde Exp $
* $Id: isa.h,v 1.18 1996/01/30 22:55:57 mpp Exp $
*/
#ifdef PC98
#error isa.h is included from PC-9801 source
#endif
#ifndef _I386_ISA_ISA_H_
#define _I386_ISA_ISA_H_

View File

@ -31,9 +31,13 @@
* SUCH DAMAGE.
*
* from: @(#)isa_device.h 7.1 (Berkeley) 5/9/91
* $Id: isa_device.h,v 1.28 1996/01/30 22:56:02 mpp Exp $
* $Id: isa_device.h,v 1.29 1996/04/08 19:38:57 smpatel Exp $
*/
#ifdef PC98
#error isa_device.h is included from PC-9801 source
#endif
#ifndef _I386_ISA_ISA_DEVICE_H_
#define _I386_ISA_ISA_DEVICE_H_

View File

@ -39,7 +39,7 @@
* SUCH DAMAGE.
*
* @(#)init_main.c 8.9 (Berkeley) 1/21/94
* $Id: init_main.c,v 1.40 1996/03/11 06:14:38 hsu Exp $
* $Id: init_main.c,v 1.42 1996/06/11 23:50:48 dyson Exp $
*/
#include "opt_rlimit.h"
@ -283,8 +283,15 @@ char copyright[] =
"Copyright (c) 1982, 1986, 1989, 1991, 1993\n\tThe Regents of the University of California.\nCopyright (c) 1992 Hewlett-Packard Company\nCopyright (c) 1992 Motorola Inc.\nAll rights reserved.\n\n";
#else
char copyright[] =
#ifdef PC98
"Copyright (c) 1994-1996 FreeBSD(98) porting team.\n"
"Copyright (c) 1982, 1986, 1989, 1991, 1993\n\tThe Regents of the University of California.\n"
"Copyright (c) 1992 A.Kojima F.Ukai M.Ishii (KMC).\n"
"\tAll rights reserved.\n\n";
#else
"Copyright (c) 1982, 1986, 1989, 1991, 1993\n\tThe Regents of the University of California. All rights reserved.\n\n";
#endif
#endif
static void print_caddr_t __P((void *data));
static void
print_caddr_t(data)

View File

@ -18,7 +18,7 @@
* 5. Modifications may be freely made to this file if the above conditions
* are met.
*
* $Id: vfs_bio.c,v 1.91 1996/05/24 05:21:58 dyson Exp $
* $Id: vfs_bio.c,v 1.92 1996/05/31 00:41:37 dyson Exp $
*/
/*
@ -1062,6 +1062,13 @@ getblk(struct vnode * vp, daddr_t blkno, int size, int slpflag, int slptimeo)
splx(s);
allocbuf(bp, size);
#ifdef PC98
/*
* 1024byte/sector support
*/
#define B_XXX2 0x8000000
if (vp->v_flag & 0x10000) bp->b_flags |= B_XXX2;
#endif
return (bp);
}
}

View File

@ -1,4 +1,4 @@
/* $Id: msdosfs_denode.c,v 1.16 1996/01/19 03:58:42 dyson Exp $ */
/* $Id: msdosfs_denode.c,v 1.17 1996/06/12 03:37:42 davidg Exp $ */
/* $NetBSD: msdosfs_denode.c,v 1.9 1994/08/21 18:44:00 ws Exp $ */
/*-
@ -495,6 +495,13 @@ detrunc(dep, length, flags, cred, p)
NOCRED, &bp);
} else {
bn = de_blk(pmp, length);
#ifdef PC98
/*
* 1024 byte/sector support
*/
if (pmp->pm_BytesPerSec == 1024)
DETOV(dep)->v_flag |= 0x10000;
#endif
error = bread(DETOV(dep), bn, pmp->pm_bpcluster,
NOCRED, &bp);
}

View File

@ -1,4 +1,4 @@
/* $Id: msdosfs_lookup.c,v 1.5 1995/11/07 14:06:43 phk Exp $ */
/* $Id: msdosfs_lookup.c,v 1.6 1995/12/03 16:42:01 bde Exp $ */
/* $NetBSD: msdosfs_lookup.c,v 1.14 1994/08/21 18:44:07 ws Exp $ */
/*-
@ -171,6 +171,13 @@ msdosfs_lookup(ap)
#ifdef MSDOSFS_DEBUG
printf("msdosfs_lookup(): cache hit, vnode %08x, file %s\n",
vdp, dp->de_Name);
#endif
#ifdef PC98
/*
* 1024 byte/sector support
*/
if (pmp->pm_BytesPerSec == 1024)
vdp->v_flag |= 0x10000;
#endif
return 0;
}

View File

@ -1,4 +1,4 @@
/* $Id: msdosfs_vfsops.c,v 1.11 1996/01/05 18:31:43 wollman Exp $ */
/* $Id: msdosfs_vfsops.c,v 1.12 1996/04/03 23:05:40 gpalmer Exp $ */
/* $NetBSD: msdosfs_vfsops.c,v 1.19 1994/08/21 18:44:10 ws Exp $ */
/*-
@ -273,6 +273,10 @@ mountmsdosfs(devvp, mp, p)
struct buf *bp0 = NULL;
struct byte_bpb33 *b33;
struct byte_bpb50 *b50;
#ifdef PC98
u_int pc98_wrk;
u_int Phy_Sector_Size;
#endif
/*
* Multiple mounts of the same block special file aren't allowed.
@ -311,7 +315,12 @@ mountmsdosfs(devvp, mp, p)
* also add some checking on the bsOemName field. So far I've seen
* the following values: "IBM 3.3" "MSDOS3.3" "MSDOS5.0"
*/
#ifdef PC98
devvp->v_flag &= 0xffff;
error = bread(devvp, 0, 1024, NOCRED, &bp0);
#else
error = bread(devvp, 0, 512, NOCRED, &bp0);
#endif
if (error)
goto error_exit;
bp0->b_flags |= B_AGE;
@ -319,7 +328,14 @@ mountmsdosfs(devvp, mp, p)
b33 = (struct byte_bpb33 *) bsp->bs33.bsBPB;
b50 = (struct byte_bpb50 *) bsp->bs50.bsBPB;
#ifdef MSDOSFS_CHECKSIG
#ifdef PC98
if (bsp->bs50.bsBootSectSig != BOOTSIG &&
bsp->bs50.bsBootSectSig != 0 && /* PC98 DOS 3.3x */
bsp->bs50.bsBootSectSig != 15760 && /* PC98 DOS 5.0 */
bsp->bs50.bsBootSectSig != 64070) { /* PC98 DOS 3.3B */
#else
if (bsp->bs50.bsBootSectSig != BOOTSIG) {
#endif
error = EINVAL;
goto error_exit;
}
@ -353,7 +369,11 @@ mountmsdosfs(devvp, mp, p)
/* XXX - We should probably check more values here */
if (!pmp->pm_BytesPerSec || !pmp->pm_SectPerClust ||
!pmp->pm_Heads || pmp->pm_Heads > 255 ||
#ifdef PC98
!pmp->pm_SecPerTrack || pmp->pm_SecPerTrack > 255) {
#else
!pmp->pm_SecPerTrack || pmp->pm_SecPerTrack > 63) {
#endif
error = EINVAL;
goto error_exit;
}
@ -365,6 +385,41 @@ mountmsdosfs(devvp, mp, p)
pmp->pm_HiddenSects = getushort(b33->bpbHiddenSecs);
pmp->pm_HugeSectors = pmp->pm_Sectors;
}
#ifdef PC98 /* for PC98 added Satoshi Yasuda */
Phy_Sector_Size = 512;
if ((devvp->v_rdev>>8) == 2) { /* floppy check */
if (((devvp->v_rdev&077) == 2) && (pmp->pm_HugeSectors == 1232)) {
Phy_Sector_Size = 1024; /* 2HD */
/*
* 1024byte/sector support
*/
devvp->v_flag |= 0x10000;
} else {
if ((((devvp->v_rdev&077) == 3) /* 2DD 8 or 9 sector */
&& (pmp->pm_HugeSectors == 1440)) /* 9 sector */
|| (((devvp->v_rdev&077) == 4)
&& (pmp->pm_HugeSectors == 1280)) /* 8 sector */
|| (((devvp->v_rdev&077) == 5)
&& (pmp->pm_HugeSectors == 2880))) { /* 1.44M */
Phy_Sector_Size = 512;
} else {
if (((devvp->v_rdev&077) != 1)
&& ((devvp->v_rdev&077) != 0)) { /* 2HC */
error = EINVAL;
goto error_exit;
}
}
}
}
pc98_wrk = pmp->pm_BytesPerSec / Phy_Sector_Size;
pmp->pm_BytesPerSec = Phy_Sector_Size;
pmp->pm_SectPerClust = pmp->pm_SectPerClust * pc98_wrk;
pmp->pm_HugeSectors = pmp->pm_HugeSectors * pc98_wrk;
pmp->pm_ResSectors = pmp->pm_ResSectors * pc98_wrk;
pmp->pm_FATsecs = pmp->pm_FATsecs * pc98_wrk;
pmp->pm_SecPerTrack = pmp->pm_SecPerTrack * pc98_wrk;
pmp->pm_HiddenSects = pmp->pm_HiddenSects * pc98_wrk;
#endif /* */
pmp->pm_fatblk = pmp->pm_ResSectors;
pmp->pm_rootdirblk = pmp->pm_fatblk +
(pmp->pm_FATs * pmp->pm_FATsecs);
@ -420,8 +475,18 @@ mountmsdosfs(devvp, mp, p)
bit <<= 1;
}
#ifdef PC98
if (Phy_Sector_Size == 512) {
pmp->pm_brbomask = 0x01ff; /* 512 byte blocks only (so far) */
pmp->pm_bnshift = 9; /* shift right 9 bits to get bn */
} else {
pmp->pm_brbomask = 0x03ff;
pmp->pm_bnshift = 10;
}
#else
pmp->pm_brbomask = 0x01ff; /* 512 byte blocks only (so far) */
pmp->pm_bnshift = 9; /* shift right 9 bits to get bn */
#endif
/*
* Release the bootsector buffer.

View File

@ -1,4 +1,4 @@
/* $Id: msdosfs_vnops.c,v 1.29 1995/12/03 16:42:02 bde Exp $ */
/* $Id: msdosfs_vnops.c,v 1.30 1995/12/07 12:47:20 davidg Exp $ */
/* $NetBSD: msdosfs_vnops.c,v 1.20 1994/08/21 18:44:13 ws Exp $ */
/*-
@ -558,6 +558,13 @@ msdosfs_read(ap)
NOCRED, &bp);
} else {
rablock = lbn + 1;
#ifdef PC98
/*
* 1024byte/sector support
*/
if (pmp->pm_BytesPerSec == 1024)
vp->v_flag |= 0x10000;
#endif
if (vp->v_lastr + 1 == lbn &&
rablock * pmp->pm_bpcluster < dep->de_FileSize) {
rasize = pmp->pm_bpcluster;
@ -693,6 +700,13 @@ msdosfs_write(ap)
osize = dep->de_FileSize;
#ifdef PC98
/*
* 1024byte/sector support
*/
if (pmp->pm_BytesPerSec == 1024)
thisvp->v_flag |= 0x10000;
#endif
/*
* If we write beyond the end of the file, extend it to its ultimate
* size ahead of the time to hopefully get a contiguous area.

View File

@ -70,7 +70,7 @@
* Paul Mackerras (paulus@cs.anu.edu.au).
*/
/* $Id: ppp_tty.c,v 1.7 1996/06/12 19:24:03 gpalmer Exp $ */
/* $Id: ppp_tty.c,v 1.8 1996/06/12 20:07:09 nate Exp $ */
/* from Id: ppp_tty.c,v 1.3 1995/08/16 01:36:40 paulus Exp */
/* from if_sl.c,v 1.11 84/10/04 12:54:47 rick Exp */
@ -98,8 +98,12 @@
#ifdef i386 /* fiddle with the spl locking */
# include <machine/spl.h>
#ifdef PC98
# include <i386/pc98/pc98_device.h>
#else
# include <i386/isa/isa_device.h>
#endif
#endif
#include <net/if.h>
#include <net/if_types.h>

View File

@ -43,6 +43,9 @@
#define PCIC_VG469 7
#define PCIC_RF5C396 8 /* Ricoh RF5C396 */
#define PCIC_IBM_KING 9 /* IBM KING PCMCIA Controller */
#ifdef PC98
#define PCIC_PC98 10
#endif
/*
* Address of the controllers. Each controller can manage
* two PCMCIA slots. Up to 8 slots are supported in total.

View File

@ -47,9 +47,15 @@
#include <sys/devfsext.h>
#endif /*DEVFS*/
#ifdef PC98
#include <pc98/pc98/pc98.h>
#include <pc98/pc98/pc98_device.h>
#include <pc98/pc98/icu.h>
#else
#include <i386/isa/isa.h>
#include <i386/isa/isa_device.h>
#include <i386/isa/icu.h>
#endif /* PC98 */
#include "apm.h"
#if NAPM > 0
@ -480,6 +486,8 @@ allocate_driver(struct slot *sp, struct drv_desc *drvp)
struct pccard_drv *dp;
int err, irq = 0, s;
/* BUCHI */
dp = find_driver(drvp->name);
if (dp == 0)
return(ENXIO);
@ -499,6 +507,12 @@ allocate_driver(struct slot *sp, struct drv_desc *drvp)
* If an interrupt mask has been given, then check it
* against the slot interrupt (if one has been allocated).
*/
/* BUCHI */
#if 0
printf("drvp->irqmask=0x%x, dp->imask=0x%x, sp->irq=0x%x, sp->ctrl->irqs=0x%x\n", drvp->irqmask, dp->imask, sp->irq, sp->ctrl->irqs);
printf("name=%s, unit=%d, mem=0x%x, memsz=%d, iobase=0x%x, irqmask=0x%x\n", drvp->name, drvp->unit, drvp->mem, drvp->memsize, drvp->iobase, drvp->irqmask);
#endif
if (drvp->irqmask && dp->imask) {
if ((sp->ctrl->irqs & drvp->irqmask)==0)
return(EINVAL);

View File

@ -28,6 +28,11 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
* pcic98 : PC9801 original PCMCIA controller code for NS/A,Ne,NX/C,NR/L.
* by Noriyuki Hosobuchi <yj8n-hsbc@asahi-net.or.jp>
*/
#ifdef LKM
#define NPCIC 1
#else
@ -51,11 +56,20 @@
#include <machine/clock.h>
#include <machine/laptops.h>
#ifdef PC98
#include <pc98/pc98/pc98.h>
#include <pc98/pc98/pc98_device.h>
#include <pc98/pc98/icu.h>
#else
#include <i386/isa/isa.h>
#include <i386/isa/isa_device.h>
#include <i386/isa/icu.h>
#endif
#include <pccard/i82365.h>
#ifdef PC98
#include <pccard/pcic98reg.h>
#endif
#include <pccard/card.h>
#include <pccard/driver.h>
#include <pccard/slot.h>
@ -295,6 +309,49 @@ pcic_memory(struct slot *slotp, int win)
struct mem_desc *mp = &slotp->mem[win];
int reg = mp->window * PCIC_MEMSIZE + PCIC_MEMBASE;
#ifdef PC98
if (sp->controller == PCIC_PC98){
if (mp->flags & MDF_ACTIVE){
/* slot = 0, window = 0, sys_addr = 0xda000, length = 8KB */
unsigned char x;
if ((unsigned long)mp->start != 0xda000){
printf("sys_addr must be 0xda000. requested address = 0x%x\n",
mp->start);
return(EINVAL);
}
/* omajinai ??? */
outb(PCIC98_REG0, 0);
x = inb(PCIC98_REG1);
x &= 0xfc;
x |= 0x02;
outb(PCIC98_REG1, x);
outw(PCIC98_REG_PAGOFS, 0);
if (mp->flags & MDF_ATTR){
outb(PCIC98_REG6, inb(PCIC98_REG6) | PCIC98_ATTRMEM);
}else{
outb(PCIC98_REG6, inb(PCIC98_REG6) & (~PCIC98_ATTRMEM));
}
outb(PCIC98_REG_WINSEL, PCIC98_MAPWIN);
#if 0
if (mp->flags & MDF_16BITS == 1){ /* 16bit */
outb(PCIC98_REG2, inb(PCIC98_REG2) & (~PCIC98_8BIT));
}else{ /* 8bit */
outb(PCIC98_REG2, inb(PCIC98_REG2) | PCIC98_8BIT);
}
#endif
}else{
outb(PCIC98_REG_WINSEL, PCIC98_UNMAPWIN);
}
return 0;
}
#endif /* PC98 */
if (mp->flags & MDF_ACTIVE)
{
unsigned long sys_addr = (unsigned long)mp->start >> 12;
@ -365,7 +422,46 @@ pcic_io(struct slot *slotp, int win)
int mask, reg;
struct pcic_slot *sp = slotp->cdata;
struct io_desc *ip = &slotp->io[win];
#ifdef PC98
if (sp->controller == PCIC_PC98){
unsigned char x;
#if 0
if (win =! 0){
printf("pcic98:Illegal PCIC I/O window request(%d)!", win);
return(EINVAL);
}
#endif
if (ip->flags & IODF_ACTIVE){
unsigned short base;
x = inb(PCIC98_REG2) & 0x0f;
if (! (ip->flags & IODF_16BIT))
x |= PCIC98_8BIT;
if (ip->size > 16) /* 128bytes mapping */
x |= PCIC98_MAP128;
x |= PCIC98_IOMEMORY;
outb(PCIC98_REG2, x);
base = 0x80d0;
outw(PCIC98_REG4, base); /* 98side IO base */
outw(PCIC98_REG5, ip->start); /* card side IO base */
#ifdef PCIC_DEBUG
printf("pcic98: IO mapped 0x%04x(98) -> 0x%04x(Card) and width %d bytes\n",
base, ip->start, ip->size);
#endif
ip->start = base;
}else{
outb(PCIC98_REG2, inb(PCIC98_REG2) & (~PCIC98_IOMEMORY));
}
return 0;
}
#endif
switch (win) {
case 0:
mask = PCIC_IO0_EN;
@ -649,8 +745,52 @@ pcic_probe ()
if (pcic_irq > 0)
putb(sp, PCIC_STAT_INT, (pcic_irq << 4) | 0xF);
}
#ifdef PC98
if (validslots == 0){
sp = pcic_slots; slot = 0;
if (inb(PCIC98_REG0) != 0xff){
sp->controller = PCIC_PC98;
sp->revision = 0;
cinfo.name = "PC98 Original";
cinfo.maxmem = 1;
cinfo.maxio = 1;
/* cinfo.irqs = PCIC_INT_MASK_ALLOWED;*/
cinfo.irqs = 0x1468;
validslots++;
sp->slot = slot;
if (kdc_pcic[slot].kdc_state == DC_UNKNOWN) {
if (slot != 0)
kdc_pcic[slot] = kdc_pcic[0];
kdc_pcic[slot].kdc_unit = slot;
kdc_pcic[slot].kdc_state = DC_UNCONFIGURED;
kdc_pcic[slot].kdc_description = cinfo.name;
dev_attach(kdc_pcic+slot);
}
slotp = pccard_alloc_slot(&cinfo);
if (slotp == 0){
printf("pcic98: slotp == NULL\n");
goto pcic98_probe_end;
}
kdc_pcic[slot].kdc_state = DC_IDLE;
slotp->cdata = sp;
sp->slotp = slotp;
/* Check for a card in this slot */
if (inb(PCIC98_REG1) & PCIC98_CARDEXIST){
/* PCMCIA card exist */
slotp->laststate = slotp->state = filled;
pccard_event(sp->slotp, card_inserted);
} else {
slotp->laststate = slotp->state = empty;
}
}
pcic98_probe_end:
}
#endif /* PC98 */
if (validslots)
timeout(pcictimeout,0,hz/2);
/* BUCHI */
return(validslots);
}
@ -690,6 +830,35 @@ pcic_power(struct slot *slotp)
struct pcic_slot *sp = slotp->cdata;
switch(sp->controller) {
#ifdef PC98
case PCIC_PC98:
reg = inb(PCIC98_REG6) & (~PCIC98_VPP12V);
switch(slotp->pwr.vpp) {
default:
return(EINVAL);
case 50:
break;
case 120:
reg |= PCIC98_VPP12V;
break;
}
outb(PCIC98_REG6, reg);
DELAY (100*1000);
reg = inb(PCIC98_REG2) & (~PCIC98_VCC3P3V);
switch(slotp->pwr.vcc) {
default:
return(EINVAL);
case 33:
reg |= PCIC98_VCC3P3V;
break;
case 50:
break;
}
outb(PCIC98_REG2, reg);
DELAY (100*1000);
return (0);
#endif
case PCIC_PD672X:
case PCIC_PD6710:
case PCIC_VG468:
@ -760,7 +929,35 @@ static void
pcic_mapirq (struct slot *slotp, int irq)
{
struct pcic_slot *sp = slotp->cdata;
#ifdef PC98
if (sp->controller == PCIC_PC98){
unsigned char x;
switch (irq){
case 3:
x = PCIC98_INT0; break;
case 5:
x = PCIC98_INT1; break;
case 6:
x = PCIC98_INT2; break;
case 10:
x = PCIC98_INT4; break;
case 12:
x = PCIC98_INT5; break;
case 0: /* disable */
x = PCIC98_INTDISABLE;
break;
default:
printf("pcic98: illegal irq %d\n", irq);
return;
}
#ifdef PCIC_DEBUG
printf("pcic98: irq=%d mapped.\n", irq);
#endif
outb(PCIC98_REG3, x);
return;
}
#endif
if (irq == 0)
clrb(sp, PCIC_INT_GEN, 0xF);
else
@ -777,6 +974,19 @@ pcic_reset(void *chan)
struct slot *slotp = chan;
struct pcic_slot *sp = slotp->cdata;
#ifdef PC98
if (sp->controller == PCIC_PC98){
outb(PCIC98_REG0, 0);
outb(PCIC98_REG2, inb(PCIC98_REG2) & (~PCIC98_IOMEMORY));
outb(PCIC98_REG3, PCIC98_INTDISABLE);
outb(PCIC98_REG2, inb(PCIC98_REG2) & (~PCIC98_VCC3P3V));
outb(PCIC98_REG6, inb(PCIC98_REG6) & (~PCIC98_VPP12V));
outb(PCIC98_REG1, 0);
selwakeup(&slotp->selp);
return;
}
#endif
switch (slotp->insert_seq) {
case 0: /* Something funny happended on the way to the pub... */
return;
@ -816,6 +1026,11 @@ pcic_disable(struct slot *slotp)
{
struct pcic_slot *sp = slotp->cdata;
#ifdef PC98
if (sp->controller == PCIC_PC98){
return;
}
#endif
putb(sp, PCIC_INT_GEN, 0);
putb(sp, PCIC_POWER, 0);
}
@ -845,6 +1060,26 @@ pcicintr(int unit)
unsigned char chg;
struct pcic_slot *sp = pcic_slots;
#ifdef PC98
if (sp->controller == PCIC_PC98){
slot = 0;
s = splhigh();
/* Check for a card in this slot */
if (inb(PCIC98_REG1) & PCIC98_CARDEXIST){
if (sp->slotp->laststate != filled){
kdc_pcic[slot].kdc_state = DC_BUSY;;
pccard_event(sp->slotp, card_inserted);
}
} else {
if (sp->slotp->laststate != empty){
kdc_pcic[slot].kdc_state = DC_IDLE;;
pccard_event(sp->slotp, card_removed);
}
}
splx(s);
return;
}
#endif /* PC98 */
s = splhigh();
for (slot = 0; slot < PCIC_MAX_SLOTS; slot++, sp++)
if (sp->slotp && (chg = getb(sp, PCIC_STAT_CHG)) != 0)

View File

@ -93,7 +93,11 @@ struct pccard_drv {
*/
struct pccard_dev {
struct pccard_dev *next; /* List of drivers */
#ifdef PC98
struct pc98_device isahd; /* Device details */
#else
struct isa_device isahd; /* Device details */
#endif
struct pccard_drv *drv;
void *arg; /* Device argument */
struct slot *sp; /* Back pointer to slot */

View File

@ -17,7 +17,7 @@
* 4. Modifications may be freely made to this file if the above conditions
* are met.
*
* $Id: if_ed_p.c,v 1.1 1996/05/18 17:56:40 se Exp $
* $Id: if_ed_p.c,v 1.2 1996/06/11 00:51:49 alex Exp $
*/
#include <pci.h>
@ -29,7 +29,11 @@
#include <sys/kernel.h>
#include <pci/pcireg.h>
#include <pci/pcivar.h>
#ifdef PC98
#include <pc98/pc98/pc98_device.h>
#else
#include <i386/isa/isa_device.h>
#endif
#include <ed.h>

View File

@ -26,7 +26,7 @@
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $Id: wd82371.c,v 1.3 1996/04/07 17:39:17 bde Exp $
* $Id: wd82371.c,v 1.4 1996/05/02 14:20:50 phk Exp $
*/
#include "pci.h"
@ -44,7 +44,11 @@
#include <machine/pmap.h> /* for vtophys */
#ifdef PC98
#include <pc98/pc98/wdreg.h>
#else
#include <i386/isa/wdreg.h>
#endif
#include <pci/pcivar.h>
#include <pci/pcireg.h>

View File

@ -16,7 +16,7 @@
*
* New configuration setup: dufault@hda.com
*
* $Id: scsiconf.c,v 1.58 1996/04/07 17:32:42 bde Exp $
* $Id: scsiconf.c,v 1.59 1996/06/03 14:25:11 jfieber Exp $
*/
#include "opt_scsi.h"
@ -29,6 +29,9 @@
#include <sys/sysctl.h>
#include <sys/devconf.h>
#include <sys/conf.h>
#ifdef PC98
#include <sys/device.h>
#endif
#include <machine/clock.h>
@ -619,6 +622,11 @@ scsi_assign_unit(struct scsi_link *sc_link)
{
int i;
int found;
#ifdef PC98
struct cfdata cf;
cf.cf_flags = 0;
#endif
found = 0;
for (i = 0; scsi_dinit[i].name; i++) {
if ((strcmp(sc_link->device->name, scsi_dinit[i].name) == 0) &&
@ -630,6 +638,9 @@ scsi_assign_unit(struct scsi_link *sc_link)
sc_link->scsibus == scsi_dinit[i].cunit) {
sc_link->dev_unit = scsi_dinit[i].unit;
found = 1;
#ifdef PC98
cf.cf_flags = scsi_dinit[i].flags;
#endif
if (bootverbose)
printf("%s is configured at %d\n",
sc_link->device->name, sc_link->dev_unit);
@ -640,6 +651,18 @@ scsi_assign_unit(struct scsi_link *sc_link)
if (!found)
sc_link->dev_unit = sc_link->device->free_unit++;
#ifdef PC98
if (!found) {
for (i = 0; scsi_dinit[i].name; i++) {
if ((strcmp(sc_link->device->name, scsi_dinit[i].name) == 0) &&
(scsi_dinit[i].target == SCCONF_UNSPEC))
cf.cf_flags = scsi_dinit[i].flags;
}
}
if (sc_link->adapter->open_target_lu)
(*(sc_link->adapter->open_target_lu))(sc_link, &cf);
#endif
return sc_link->dev_unit;
}

View File

@ -14,7 +14,7 @@
*
* Ported to run under 386BSD by Julian Elischer (julian@tfs.com) Sept 1992
*
* $Id: scsiconf.h,v 1.40 1996/03/10 07:13:11 gibbs Exp $
* $Id: scsiconf.h,v 1.41 1996/03/31 03:19:09 gibbs Exp $
*/
#ifndef SCSI_SCSICONF_H
#define SCSI_SCSICONF_H 1
@ -56,6 +56,9 @@ typedef int errval;
struct buf;
struct scsi_xfer;
#ifdef PC98
struct cfdata;
#endif
/*
* These entrypoints are called by the high-end drivers to get services from
@ -66,7 +69,12 @@ struct scsi_adapter
{
/* 04*/ int32_t (*scsi_cmd) __P((struct scsi_xfer *xs));
/* 08*/ void (*scsi_minphys) __P((struct buf *bp));
#ifdef PC98
/* 12*/ int32_t (*open_target_lu) __P((struct scsi_link *sc_link,
struct cfdata *cf));
#else
/* 12*/ int32_t (*open_target_lu) __P((void));
#endif
/* 16*/ int32_t (*close_target_lu) __P((void));
/* 20*/ u_int32_t (*adapter_info) __P((int unit)); /* see definitions below */
/* 24*/ char *name; /* name of scsi bus controller */

View File

@ -14,7 +14,7 @@
*
* Ported to run under 386BSD by Julian Elischer (julian@dialix.oz.au) Sept 1992
*
* $Id: sd.c,v 1.88 1996/05/02 14:20:54 phk Exp $
* $Id: sd.c,v 1.89 1996/05/02 22:20:52 phk Exp $
*/
#include "opt_bounce.h"
@ -52,7 +52,11 @@
static u_int32_t sdstrats, sdqueues;
#define SECSIZE 512
#ifdef PC98
#define SDOUTSTANDING 2
#else
#define SDOUTSTANDING 4
#endif
#define SD_RETRIES 4
#define MAXTRANSFER 8 /* 1 page at a time */
@ -738,7 +742,9 @@ sd_get_parms(unit, flags)
union disk_pages pages;
} scsi_sense;
u_int32_t sectors;
#ifdef PC98
unsigned char *tmp;
#endif
/*
* First check if we have it all loaded
*/
@ -752,6 +758,39 @@ sd_get_parms(unit, flags)
scsi_cmd.op_code = MODE_SENSE;
scsi_cmd.page = 4;
scsi_cmd.length = 0x20;
#ifdef PC98
#define PC98_SYSTEM_PARAMETER(x) pc98_system_parameter[(x)-0x400]
tmp = (unsigned char *)&PC98_SYSTEM_PARAMETER(0x460 + sc_link->target*4);
if ((PC98_SYSTEM_PARAMETER(0x482) &
((1 << sc_link->target)&0xff)) != 0) {
disk_parms->sectors = *tmp;
disk_parms->cyls = ((*(tmp+3)<<8)|*(tmp+2))&0xfff;
switch (*(tmp + 3) & 0x30) {
case 0x00:
disk_parms->secsiz = 256;
printf("Warning!: not supported.\n");
break;
case 0x10:
disk_parms->secsiz = 512;
break;
case 0x20:
disk_parms->secsiz = 1024;
printf("Warning!: not supported.\n");
break;
default:
disk_parms->secsiz = 512;
printf("Warning!: not supported. But force to 512\n");
}
if (*(tmp+3) & 0x40) {
disk_parms->cyls += (*(tmp+1)&0xf0)<<8;
disk_parms->heads = *(tmp+1)&0x0f;
} else {
disk_parms->heads = *(tmp+1);
}
disk_parms->disksize = disk_parms->sectors * disk_parms->heads *
disk_parms->cyls;
} else
#endif
/*
* If the command worked, use the results to fill out
* the parameter structure

View File

@ -31,7 +31,7 @@
* SUCH DAMAGE.
*
* @(#)disklabel.h 8.2 (Berkeley) 7/10/94
* $Id: disklabel.h,v 1.20 1996/03/11 02:06:30 hsu Exp $
* $Id: disklabel.h,v 1.21 1996/05/03 05:38:34 asami Exp $
*/
#ifndef _SYS_DISKLABEL_H_
@ -199,6 +199,10 @@ struct disklabel {
#define DTYPE_FLOPPY 10 /* floppy */
#define DTYPE_CCD 11 /* concatenated disk */
#ifdef PC98
#define DSTYPE_SEC256 0x80 /* physical sector size=256*/
#endif
#ifdef DKTYPENAMES
static char *dktypenames[] = {
"unknown",
@ -312,6 +316,34 @@ struct partinfo {
/* DOS partition table -- located in boot block */
#ifdef PC98
#define DOSBBSECTOR 0 /* DOS boot block relative sector number */
#define DOSLABELSECTOR 1 /* 0: 256b/s, 1: 512b/s */
#define DOSPARTOFF 0
#define NDOSPART 16
#define DOSPTYP_386BSD 0x94 /* 386BSD partition type */
#define MBR_PTYPE_FreeBSD 0x94 /* FreeBSD partition type */
struct dos_partition {
unsigned char dp_mid;
#define DOSMID_386BSD (0x14|0x80) /* 386bsd|bootable */
unsigned char dp_sid;
#define DOSSID_386BSD (0x44|0x80) /* 386bsd|active */
unsigned char dp_dum1;
unsigned char dp_dum2;
unsigned char dp_ipl_sct;
unsigned char dp_ipl_head;
unsigned short dp_ipl_cyl;
unsigned char dp_ssect; /* starting sector */
unsigned char dp_shd; /* starting head */
unsigned short dp_scyl; /* starting cylinder */
unsigned char dp_esect; /* end sector */
unsigned char dp_ehd; /* end head */
unsigned short dp_ecyl; /* end cylinder */
unsigned char dp_name[16];
};
#else /* IBMPC */
#define DOSBBSECTOR 0 /* DOS boot block relative sector number */
#define DOSPARTOFF 446
#define NDOSPART 4
@ -329,6 +361,7 @@ struct dos_partition {
unsigned long dp_start; /* absolute starting sector number */
unsigned long dp_size; /* partition size in sectors */
};
#endif
#define DPSECT(s) ((s) & 0x3f) /* isolate relevant bits of sector */
#define DPCYL(c, s) ((c) + (((s) & 0xc0)<<2)) /* and those that are cylinder */

View File

@ -31,7 +31,7 @@
* SUCH DAMAGE.
*
* @(#)disklabel.h 8.2 (Berkeley) 7/10/94
* $Id: disklabel.h,v 1.20 1996/03/11 02:06:30 hsu Exp $
* $Id: disklabel.h,v 1.21 1996/05/03 05:38:34 asami Exp $
*/
#ifndef _SYS_DISKLABEL_H_
@ -199,6 +199,10 @@ struct disklabel {
#define DTYPE_FLOPPY 10 /* floppy */
#define DTYPE_CCD 11 /* concatenated disk */
#ifdef PC98
#define DSTYPE_SEC256 0x80 /* physical sector size=256*/
#endif
#ifdef DKTYPENAMES
static char *dktypenames[] = {
"unknown",
@ -312,6 +316,34 @@ struct partinfo {
/* DOS partition table -- located in boot block */
#ifdef PC98
#define DOSBBSECTOR 0 /* DOS boot block relative sector number */
#define DOSLABELSECTOR 1 /* 0: 256b/s, 1: 512b/s */
#define DOSPARTOFF 0
#define NDOSPART 16
#define DOSPTYP_386BSD 0x94 /* 386BSD partition type */
#define MBR_PTYPE_FreeBSD 0x94 /* FreeBSD partition type */
struct dos_partition {
unsigned char dp_mid;
#define DOSMID_386BSD (0x14|0x80) /* 386bsd|bootable */
unsigned char dp_sid;
#define DOSSID_386BSD (0x44|0x80) /* 386bsd|active */
unsigned char dp_dum1;
unsigned char dp_dum2;
unsigned char dp_ipl_sct;
unsigned char dp_ipl_head;
unsigned short dp_ipl_cyl;
unsigned char dp_ssect; /* starting sector */
unsigned char dp_shd; /* starting head */
unsigned short dp_scyl; /* starting cylinder */
unsigned char dp_esect; /* end sector */
unsigned char dp_ehd; /* end head */
unsigned short dp_ecyl; /* end cylinder */
unsigned char dp_name[16];
};
#else /* IBMPC */
#define DOSBBSECTOR 0 /* DOS boot block relative sector number */
#define DOSPARTOFF 446
#define NDOSPART 4
@ -329,6 +361,7 @@ struct dos_partition {
unsigned long dp_start; /* absolute starting sector number */
unsigned long dp_size; /* partition size in sectors */
};
#endif
#define DPSECT(s) ((s) & 0x3f) /* isolate relevant bits of sector */
#define DPCYL(c, s) ((c) + (((s) & 0xc0)<<2)) /* and those that are cylinder */

View File

@ -31,7 +31,7 @@
* SUCH DAMAGE.
*
* @(#)disklabel.h 8.2 (Berkeley) 7/10/94
* $Id: disklabel.h,v 1.20 1996/03/11 02:06:30 hsu Exp $
* $Id: disklabel.h,v 1.21 1996/05/03 05:38:34 asami Exp $
*/
#ifndef _SYS_DISKLABEL_H_
@ -199,6 +199,10 @@ struct disklabel {
#define DTYPE_FLOPPY 10 /* floppy */
#define DTYPE_CCD 11 /* concatenated disk */
#ifdef PC98
#define DSTYPE_SEC256 0x80 /* physical sector size=256*/
#endif
#ifdef DKTYPENAMES
static char *dktypenames[] = {
"unknown",
@ -312,6 +316,34 @@ struct partinfo {
/* DOS partition table -- located in boot block */
#ifdef PC98
#define DOSBBSECTOR 0 /* DOS boot block relative sector number */
#define DOSLABELSECTOR 1 /* 0: 256b/s, 1: 512b/s */
#define DOSPARTOFF 0
#define NDOSPART 16
#define DOSPTYP_386BSD 0x94 /* 386BSD partition type */
#define MBR_PTYPE_FreeBSD 0x94 /* FreeBSD partition type */
struct dos_partition {
unsigned char dp_mid;
#define DOSMID_386BSD (0x14|0x80) /* 386bsd|bootable */
unsigned char dp_sid;
#define DOSSID_386BSD (0x44|0x80) /* 386bsd|active */
unsigned char dp_dum1;
unsigned char dp_dum2;
unsigned char dp_ipl_sct;
unsigned char dp_ipl_head;
unsigned short dp_ipl_cyl;
unsigned char dp_ssect; /* starting sector */
unsigned char dp_shd; /* starting head */
unsigned short dp_scyl; /* starting cylinder */
unsigned char dp_esect; /* end sector */
unsigned char dp_ehd; /* end head */
unsigned short dp_ecyl; /* end cylinder */
unsigned char dp_name[16];
};
#else /* IBMPC */
#define DOSBBSECTOR 0 /* DOS boot block relative sector number */
#define DOSPARTOFF 446
#define NDOSPART 4
@ -329,6 +361,7 @@ struct dos_partition {
unsigned long dp_start; /* absolute starting sector number */
unsigned long dp_size; /* partition size in sectors */
};
#endif
#define DPSECT(s) ((s) & 0x3f) /* isolate relevant bits of sector */
#define DPCYL(c, s) ((c) + (((s) & 0xc0)<<2)) /* and those that are cylinder */

View File

@ -23,7 +23,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $Id: diskslice.h,v 1.11 1996/01/27 04:18:15 bde Exp $
* $Id: diskslice.h,v 1.12 1996/01/30 23:00:31 mpp Exp $
*/
#ifndef _SYS_DISKSLICE_H_
@ -44,6 +44,10 @@ struct diskslice {
u_long ds_offset; /* starting sector */
u_long ds_size; /* number of sectors */
int ds_type; /* (foreign) slice type */
#ifdef PC98
int ds_subtype; /* sub slice type */
u_char ds_name[16]; /* slice name */
#endif
struct dkbad_intern *ds_bad; /* bad sector table, if any */
struct disklabel *ds_label; /* BSD label, if any */
void *ds_bdev; /* devfs token for whole slice */

View File

@ -1,7 +1,7 @@
/*
* random.h -- A strong random number generator
*
* $Id: random.h,v 1.3 1995/12/29 08:04:13 markm Exp $
* $Id: random.h,v 1.4 1996/01/30 22:54:53 mpp Exp $
*
* Version 0.95, last modified 18-Oct-95
*
@ -51,9 +51,14 @@
#define _MACHINE_RANDOM_H_ 1
#if defined(KERNEL)
#ifdef PC98
#include <pc98/pc98/icu.h>
#include <pc98/pc98/pc98_device.h>
#else
#include <i386/isa/icu.h>
#include <i386/isa/isa_device.h>
#endif
#endif
#include <sys/ioctl.h>
#define MEM_SETIRQ _IOW('r', 1, u_int16_t) /* set interrupt */

View File

@ -64,6 +64,9 @@
#define SNDCARD_TRXPRO 16
#define SNDCARD_TRXPRO_SB 17
#define SNDCARD_TRXPRO_MPU 18
#ifdef PC98
#define SNDCARD_PCM86 19
#endif
/***********************************
* IOCTL Commands for /dev/sequencer