PC-9800 additional for 2.5.61-ac1 (0/21) summary
Subsystems (12)
PATCH 1/1 PC-9800 additional for 2.5.61-ac1 (0/21) summary
This is additional patch to support NEC PC-9800 subarchitecture against 2.5.61-ac1.
All patches must aplly after updating files in 2.5.61-ac1 by patch previously posted.
Sorry, scsi.patch is now working. I'll post it later.
Comments and test reports are wellcome.
Description:
o alsa-pc98.patch (1/21)
ALSA sound drivers for PC98.
o apm.patch (2/21)
APM support for PC98. Including PC98's BIOS bug fix.
o console.patch (3/21)
PC98 Standard console support (without japanese kanji character).
o core-misc.patch (4/21)
Small core patches for PC98.
o dma.patch (5/21)
DMA support for PC98.
o fs.patch (6/21)
FAT fs and partition table support for PC98.
o ide.patch (7/21)
PC98 standard IDE I/F support.
o kanji.patch (8/21)
japanese kanji character support for PC98 console.
o kconfig.patch (9/21)
Add selection CONFIG_X86_PC9800.
o network_card.patch (10/21)
C-bus(PC98's legacy bus like ISA) network cards support.
o parport.patch (11/21)
Parallel port support.
o pci.patch (12/21)
Small changes for PCI support.
o pcmcia.patch (13/21)
Small change for PCMCIA (16bits) support.
o pnp.patch (14/21)
Small change for Legacy bus PNP support.
o rtc.patch (15/21)
Support RTC for PC98, using mach-* scheme.
o scsi.patch (16/21)
SCSI host adapter support.
o serial.patch (17/21)
Serial port support for PC98.
o setup.patch (18/21)
Support difference of IO port/memory address, using mach-* scheme.
o smp.patch (19/21)
SMP support for PC98.
o timer.patch (20/21)
Support difference of timer, using mach-* scheme.
o traps.patch (21/21)
Support difference of NMI handling, using mach-* scheme.
PATCH 1/1 PC-9800 additional for 2.5.61-ac1 (1/21) ALSA
This is additional patch to support NEC PC-9800 subarchitecture against 2.5.61-ac1. (1/21)
ALSA sound drivers for PC98.
sound/isa/Kconfig +6 -0
@@ -39,6 +39,12 @@ Say 'Y' or 'M' to include support for CS4235,CS4236,CS4237B,CS4238B,CS4239 chips from Cirrus Logic - Crystal Semiconductors. +config SND_PC98_CS4232 + tristate "NEC PC9800 CS4232 driver" + depends on SND + help + Say 'Y' or 'M' to include support for NEC PC-9801/PC-9821 sound cards + config SND_ES968 tristate "Generic ESS ES968 driver" depends on SND && ISAPNP
sound/isa/cs423x/Makefile +2 -0
@@ -8,6 +8,7 @@ snd-cs4231-objs := cs4231.o snd-cs4232-objs := cs4232.o snd-cs4236-objs := cs4236.o +snd-pc98-cs4232-objs := pc98.o # Toplevel Module Dependency obj-$(CONFIG_SND_AZT2320) += snd-cs4231-lib.o
@@ -20,5 +21,6 @@ obj-$(CONFIG_SND_INTERWAVE_STB) += snd-cs4231-lib.o obj-$(CONFIG_SND_OPTI92X_CS4231) += snd-cs4231-lib.o obj-$(CONFIG_SND_WAVEFRONT) += snd-cs4231-lib.o +obj-$(CONFIG_SND_PC98_CS4232) += snd-pc98-cs4232.o snd-cs4231-lib.o obj-m := $(sort $(obj-m))
sound/isa/cs423x/pc98.c +466 -0
466 lines not on this page · raw message
sound/isa/cs423x/pc9801_118_magic.h +411 -0
411 lines not on this page · raw message
sound/isa/cs423x/sound_pc9800.h +23 -0
@@ -0,0 +1,23 @@ +#ifndef _SOUND_PC9800_H_ +#define _SOUND_PC9800_H_ + +#include <asm/io.h> + +#define PC9800_SOUND_IO_ID 0xa460 + +/* Sound Functions ID. */ +#define PC9800_SOUND_ID () ((inb(PC9800_SOUND_IO_ID) >> 4) & 0x0f) + +#define PC9800_SOUND_ID_DO 0x0/* PC-98DO+ Internal */ +#define PC9800_SOUND_ID_GS 0x1/* PC-98GS Internal */ +#define PC9800_SOUND_ID_73 0x2/* PC-9801-73 (base 0x18x) */ +#define PC9800_SOUND_ID_73A 0x3/* PC-9801-73/76 (base 0x28x) */ +#define PC9800_SOUND_ID_86 0x4/* PC-9801-86 and compatible (base 0x18x) */ +#define PC9800_SOUND_ID_86A 0x5/* PC-9801-86 (base 0x28x) */ +#define PC9800_SOUND_ID_NF 0x6/* PC-9821Nf/Np Internal */ +#define PC9800_SOUND_ID_XMATE 0x7/* X-Mate Internal and compatible */ +#define PC9800_SOUND_ID_118 0x8/* PC-9801-118 and compatible(CanBe Internal, etc.) */ + +#define PC9800_SOUND_ID_UNKNOWN 0xf/* Unknown (No Sound System or PC-9801-26) */ + +#endif
sound/core/Makefile +1 -0
@@ -93,6 +93,7 @@ obj-$(CONFIG_SND_YMFPCI) += snd-pcm.o snd-timer.o snd.o snd-rawmidi.o snd-hwdep.o obj-$(CONFIG_SND_POWERMAC) += snd-pcm.o snd-timer.o snd.o obj-$(CONFIG_SND_SA11XX_UDA1341) += snd-pcm.o snd-timer.o snd.o +obj-$(CONFIG_SND_PC98_CS4232) += snd-pcm.o snd-timer.o snd.o snd-rawmidi.o snd-hwdep.o ifeq ($(CONFIG_SND_SB16_CSP),y) obj-$(CONFIG_SND_SB16) += snd-hwdep.o obj-$(CONFIG_SND_SBAWE) += snd-hwdep.o
sound/drivers/mpu401/Makefile +1 -0
@@ -37,5 +37,6 @@ obj-$(CONFIG_SND_ALI5451) += snd-mpu401-uart.o obj-$(CONFIG_SND_TRIDENT) += snd-mpu401-uart.o obj-$(CONFIG_SND_YMFPCI) += snd-mpu401-uart.o +obj-$(CONFIG_SND_PC98_CS4232) += snd-mpu401-uart.o obj-m := $(sort $(obj-m))
sound/drivers/opl3/Makefile +1 -0
@@ -24,6 +24,7 @@ obj-$(CONFIG_SND_OPL3SA2) += $(OPL3_OBJS) obj-$(CONFIG_SND_AD1816A) += $(OPL3_OBJS) obj-$(CONFIG_SND_CS4232) += $(OPL3_OBJS) +obj-$(CONFIG_SND_PC98_CS4232) += $(OPL3_OBJS) obj-$(CONFIG_SND_CS4236) += $(OPL3_OBJS) obj-$(CONFIG_SND_ES1688) += $(OPL3_OBJS) obj-$(CONFIG_SND_GUSEXTREME) += $(OPL3_OBJS)
PATCH 1/1 PC-9800 additional for 2.5.61-ac1 (2/21) APM
In reply to Osamu TomitaThis is additional patch to support NEC PC-9800 subarchitecture against 2.5.61-ac1. (2/21)
APM support for PC98. Including PC98's BIOS bug fix.
arch/i386/kernel/apm.c +12 -4
@@ -226,6 +226,8 @@#include <asm/uaccess.h> #include <asm/desc.h> +#include "io_ports.h" +extern spinlock_t i8253_lock;extern unsigned long get_cmos_time (void );extern void machine_real_restart (unsigned char *,int );
@@ -621,6 +623,9 @@ __asm__ __volatile__(APM_DO_ZERO_SEGS "pushl %%edi\n\t" "pushl %%ebp\n\t" +#ifdef CONFIG_X86_PC9800 + "pushfl\n\t" +#endif"lcall *%%cs:apm_bios_entry\n\t" "setc %%al\n\t" "popl %%ebp\n\t"
@@ -682,6 +687,9 @@ __asm__ __volatile__(APM_DO_ZERO_SEGS "pushl %%edi\n\t" "pushl %%ebp\n\t" +#ifdef CONFIG_X86_PC9800 + "pushfl\n\t" +#endif"lcall *%%cs:apm_bios_entry\n\t" "setc %%bl\n\t" "popl %%ebp\n\t"
@@ -722,7 +730,7 @@if (apm_bios_call_simple (APM_FUNC_VERSION ,0 , *val, &eax))return (eax >>8 ) &0xff ; - *val = eax; + *val = pc98 ? ((eax &0xff00 ) | ((eax &0x00f0 ) >>4 )) : eax;return APM_SUCCESS ; }
@@ -1211,11 +1219,11 @@ {#ifdef INIT_TIMER_AFTER_SUSPEND /* set the clock to 100 Hz */ -outb_p (0x34 ,0x43 );/* binary, mode 2, LSB/MSB, ch 0 */ +outb_p (0x34 ,PIT_MODE );/* binary, mode 2, LSB/MSB, ch 0 */ udelay (10 ); -outb_p (LATCH &0xff ,0x40 );/* LSB */ +outb_p (LATCH &0xff ,PIT_CH0 );/* LSB */ udelay (10 ); -outb (LATCH >>8 ,0x40 );/* MSB */ +outb (LATCH >>8 ,PIT_CH0 );/* MSB */ udelay (10 );#endif }
include/linux/apm_bios.h +24 -0
@@ -20,6 +20,7 @@typedef unsigned short apm_eventinfo_t ;#ifdef __KERNEL__ +#include <linux/config.h> #define APM_CS (GDT_ENTRY_APMBIOS_BASE * 8)#define APM_CS_16 (APM_CS + 8)
@@ -60,6 +61,28 @@/* * The APM function codes */ +#ifdef CONFIG_X86_PC9800 +#define APM_FUNC_INST_CHECK 0x9a00 +#define APM_FUNC_REAL_CONN 0x9a01 +#define APM_FUNC_16BIT_CONN 0x9a02 +#define APM_FUNC_32BIT_CONN 0x9a03 +#define APM_FUNC_DISCONN 0x9a04 +#define APM_FUNC_IDLE 0x9a05 +#define APM_FUNC_BUSY 0x9a06 +#define APM_FUNC_SET_STATE 0x9a07 +#define APM_FUNC_ENABLE_PM 0x9a08 +#define APM_FUNC_RESTORE_BIOS 0x9a09 +#define APM_FUNC_GET_STATUS 0x9a3a +#define APM_FUNC_GET_EVENT 0x9a0b +#define APM_FUNC_GET_STATE 0x9a0c +#define APM_FUNC_ENABLE_DEV_PM 0x9a0d +#define APM_FUNC_VERSION 0x9a3e +#define APM_FUNC_ENGAGE_PM 0x9a3f +#define APM_FUNC_GET_CAP 0x9a10 +#define APM_FUNC_RESUME_TIMER 0x9a11 +#define APM_FUNC_RESUME_ON_RING 0x9a12 +#define APM_FUNC_TIMER 0x9a13 +#else #define APM_FUNC_INST_CHECK 0x5300#define APM_FUNC_REAL_CONN 0x5301#define APM_FUNC_16BIT_CONN 0x5302
@@ -80,6 +103,7 @@#define APM_FUNC_RESUME_TIMER 0x5311#define APM_FUNC_RESUME_ON_RING 0x5312#define APM_FUNC_TIMER 0x5313 +#endif /* * Function code for APM_FUNC_RESUME_TIMER
PATCH 1/1 PC-9800 additional for 2.5.61-ac1 (3/21) console
In reply to Osamu TomitaThis is additional patch to support NEC PC-9800 subarchitecture against 2.5.61-ac1. (3/21)
PC98 Standard console support (without japanese kanji character).
drivers/char/Makefile +4 -0
@@ -5,7 +5,11 @@ # # This file contains the font map for the default (hardware) font # +ifeq ($(CONFIG_X86_PC9800),y) +FONTMAPFILE = pc9800.uni +else FONTMAPFILE = cp437.uni +endif obj-y += mem.o tty_io.o n_tty.o tty_ioctl.o pty.o misc.o random.o
drivers/char/console_macros.h +4 -0
@@ -55,6 +55,10 @@#define s_reverse (vc_cons[currcons].d->vc_s_reverse)#define ulcolor (vc_cons[currcons].d->vc_ulcolor)#define halfcolor (vc_cons[currcons].d->vc_halfcolor) +#define def_attr (vc_cons[currcons].d->vc_def_attr) +#define ul_attr (vc_cons[currcons].d->vc_ul_attr) +#define half_attr (vc_cons[currcons].d->vc_half_attr) +#define bold_attr (vc_cons[currcons].d->vc_bold_attr)#define tab_stop (vc_cons[currcons].d->vc_tab_stop)#define palette (vc_cons[currcons].d->vc_palette)#define bell_pitch (vc_cons[currcons].d->vc_bell_pitch)
drivers/char/console_pc9800.h +14 -0
@@ -0,0 +1,14 @@ +#ifndef __CONSOLE_PC9800_H +#define __CONSOLE_PC9800_H + +#define BLANK_ATTR 0x00E1 + +#define JIS_CODE 0x01 +#define EUC_CODE 0x00 +#define SJIS_CODE 0x02 +#define JIS_CODE_ASCII 0x00 +#define JIS_CODE_78 0x01 +#define JIS_CODE_83 0x02 +#define JIS_CODE_90 0x03 + +#endif /* __CONSOLE_PC9800_H */
drivers/char/consolemap.c +55 -3
76 lines not on this page · raw message
drivers/char/pc9800.uni +260 -0
260 lines not on this page · raw message
drivers/char/vt.c +50 -13
161 lines not on this page · raw message
drivers/char/vt_ioctl.c +19 -0
@@ -63,9 +63,11 @@asmlinkage long sys_ioperm (unsigned long from,unsigned long num,int on);#endif +#ifndef CONFIG_X86_PC9800 unsigned int video_font_height;unsigned int default_font_height;unsigned int video_scan_lines; +#endif /* * these are the valid i/o ports we're allowed to change. they map all the
@@ -637,6 +639,17 @@return 0 ; } +#ifdef CONFIG_X86_PC9800 +case VT_GDC_RESIZE : + { +if (!perm) +return -EPERM ; +/* con_adjust_height(0);*/ +update_screen (console); +return 0 ; + } +#endif +case VT_SETMODE : {struct vt_mode tmp;
@@ -830,7 +843,9 @@__get_user (clin, &vtconsize->v_clin);__get_user (vcol, &vtconsize->v_vcol);__get_user (ccol, &vtconsize->v_ccol); +#ifndef CONFIG_X86_PC9800 vlin = vlin ? vlin : video_scan_lines; +#endif if (clin) {if (ll) {if (ll != vlin/clin)
@@ -849,10 +864,12 @@if (clin >32 )return -EINVAL ; +#ifndef CONFIG_X86_PC9800 if (vlin) video_scan_lines = vlin;if (clin) video_font_height = clin; +#endif for (i =0 ; i <MAX_NR_CONSOLES ; i++)vc_resize (i, cc, ll);
@@ -1022,8 +1039,10 @@ vt_cons[new_console]->vt_mode.frsig =0 ; vt_cons[new_console]->vt_pid =-1 ; vt_cons[new_console]->vt_newvt =-1 ; +#ifndef CONFIG_X86_PC9800 if (!in_interrupt ())/* Via keyboard.c:SAK() - akpm */ reset_palette (new_console) ; +#endif }/*
drivers/video/console/Kconfig +13 -1
@@ -6,7 +6,7 @@ config VGA_CONSOLE bool "VGA text console" - depends on !ARCH_ACORN && !ARCH_EBSA110 || !4xx && !8xx + depends on !X86_PC9800 && !ARCH_ACORN && !ARCH_EBSA110 || !4xx && !8xx help Saying Y here will allow you to use Linux in text mode through a display that complies with the generic VGA standard. Virtually
@@ -97,6 +97,18 @@ Say Y to build a console driver for Sun machines that uses the terminal emulation built into their console PROMS. +config GDC_CONSOLE + bool "PC-9800 GDC text console" + depends on X86_PC9800 + default y + help + This enables support for PC-9800 standard text mode console. + If use NEC PC-9801/PC-9821, Say Y. + +config GDC_32BITACCESS + bool "Enable 32-bit access to text video RAM" + depends on GDC_CONSOLE + config DUMMY_CONSOLE bool depends on PROM_CONSOLE!=y || VGA_CONSOLE!=y || SGI_NEWPORT_CONSOLE!=y
include/linux/console.h +10 -1
@@ -17,6 +17,13 @@#include <linux/types.h> #include <linux/kdev_t.h> #include <linux/spinlock.h> +#include <linux/config.h> + +#ifdef CONFIG_X86_PC9800 +typedef __u32 vram_char_t ; +#else +typedef __u16 vram_char_t ; +#endif struct vc_data ;struct console_font_op ;
@@ -32,7 +39,7 @@void (*con_init)(struct vc_data *,int );void (*con_deinit)(struct vc_data *);void (*con_clear)(struct vc_data *,int ,int ,int ,int ); -void (*con_putc)(struct vc_data *,int ,int ,int ); +void (*con_putc)(struct vc_data *,int ,vram_char_t ,int );void (*con_putcs)(struct vc_data *,const unsigned short *,int ,int ,int );void (*con_cursor)(struct vc_data *,int );int (*con_scroll)(struct vc_data *,int ,int ,int ,int );
@@ -49,6 +56,7 @@void (*con_invert_region)(struct vc_data *,u16 *,int );u16 *(*con_screen_pos)(struct vc_data *,int );unsigned long (*con_getxy)(struct vc_data *,unsigned long ,int *,int *); +int (*con_setterm_command)(struct vc_data *); };extern const struct consw *conswitchp;
@@ -56,6 +64,7 @@extern const struct consw dummy_con;/* dummy console buffer */ extern const struct consw fb_con;/* frame buffer based console */ extern const struct consw vga_con;/* VGA text console */ +extern const struct consw gdc_con;/* PC-9800 GDC text console */ extern const struct consw newport_con;/* SGI Newport console */ extern const struct consw prom_con;/* SPARC PROM console */
include/linux/console_struct.h +12 -1
@@ -9,6 +9,9 @@* to achieve effects such as fast scrolling by changing the origin. */ +#include <linux/config.h> +#include <linux/console.h> +#define NPAR 16struct vc_data {
@@ -25,10 +28,14 @@unsigned char vc_s_color;/* Saved foreground & background */ unsigned char vc_ulcolor;/* Color for underline mode */ unsigned char vc_halfcolor;/* Color for half intensity mode */ +unsigned char vc_def_attr;/* Default attributes */ +unsigned char vc_ul_attr;/* Attribute for underline mode */ +unsigned char vc_half_attr;/* Attribute for half intensity mode */ +unsigned char vc_bold_attr;/* Attribute for bold mode */ unsigned short vc_complement_mask;/* [#] Xor mask for mouse pointer */ unsigned short vc_hi_font_mask;/* [#] Attribute set for upper 256 chars of font or 0 if not supported */ struct console_font_op vc_font;/* Current VC font set */ -unsigned short vc_video_erase_char;/* Background erase character */ +vram_char_t vc_video_erase_char;/* Background erase character */ unsigned short vc_s_complement_mask;/* Saved mouse pointer mask */ unsigned int vc_x, vc_y;/* Cursor position */ unsigned int vc_top, vc_bottom;/* Scrolling region */
@@ -106,6 +113,10 @@#define CUR_HWMASK 0x0f#define CUR_SWMASK 0xfff0 +#ifdef CONFIG_X86_PC9800 +#define CUR_DEFAULT CUR_BLOCK +#else #define CUR_DEFAULT CUR_UNDERLINE +#endif #define CON_IS_VISIBLE (conp) (*conp->vc_display_fg == conp)
include/linux/tty.h +4 -0
@@ -123,6 +123,10 @@#define VIDEO_TYPE_PMAC 0x60/* PowerMacintosh frame buffer. */ +#define VIDEO_TYPE_98NORMAL 0xa4/* NEC PC-9800 normal */ +#define VIDEO_TYPE_9840 0xa5/* NEC PC-9800 normal 40 lines */ +#define VIDEO_TYPE_98HIRESO 0xa6/* NEC PC-9800 hireso */ +/* * This character is the same as _POSIX_VDISABLE: it cannot be used as * a c_cc[] character, but indicates that a particular special character
include/linux/vt.h +1 -0
@@ -50,5 +50,6 @@#define VT_RESIZEX 0x560A/* set kernel's idea of screensize + more */ #define VT_LOCKSWITCH 0x560B/* disallow vt switching */ #define VT_UNLOCKSWITCH 0x560C/* allow vt switching */ +#define VT_GDC_RESIZE 0x5698#endif /* _LINUX_VT_H */
include/linux/vt_buffer.h +4 -0
@@ -19,6 +19,10 @@#include <asm/vga.h> #endif +#ifdef CONFIG_GDC_CONSOLE +#include <asm/gdc.h> +#endif +#ifndef VT_BUF_HAVE_RW #define scr_writew (val, addr) (*(addr) = (val))#define scr_readw (addr) (*(addr))
PATCH 1/1 PC-9800 additional for 2.5.61-ac1 (5/21)
In reply to Osamu TomitaThis is additional patch to support NEC PC-9800 subarchitecture against 2.5.61-ac1. (5/21)
DMA support for PC98.
include/asm-i386/dma.h +7 -0
@@ -10,6 +10,9 @@#include <linux/config.h> #include <linux/spinlock.h> /* And spinlocks */ +#ifdef CONFIG_X86_PC9800 +#include <asm/pc9800_dma.h> +#else /* !CONFIG_X86_PC9800 */ #include <asm/io.h> /* need byte IO */ #include <linux/delay.h>
@@ -72,8 +75,10 @@#define MAX_DMA_CHANNELS 8 +#ifndef CONFIG_X86_PC9800 /* The maximum address that we can perform a DMA transfer to on this platform */ #define MAX_DMA_ADDRESS (PAGE_OFFSET+0x1000000) +#endif /* 8237 DMA controllers */ #define IO_DMA1_BASE 0x00/* 8 bit slave DMA, channels 0..3 */
@@ -295,4 +300,6 @@#define isa_dma_bridge_buggy (0)#endif +#endif /* CONFIG_X86_PC9800 */ +#endif /* _ASM_DMA_H */
include/asm-i386/pc9800_dma.h +238 -0
238 lines not on this page · raw message
include/asm-i386/scatterlist.h +6 -0
@@ -1,6 +1,8 @@ #ifndef _I386_SCATTERLIST_H #define _I386_SCATTERLIST_H +#include <linux/config.h> + struct scatterlist { struct page *page; unsigned int offset;
@@ -8,6 +10,10 @@ unsigned int length; }; +#ifdef CONFIG_X86_PC9800 +#define ISA_DMA_THRESHOLD (0xffffffff) +#else #define ISA_DMA_THRESHOLD (0x00ffffff) +#endif #endif /* !(_I386_SCATTERLIST_H) */
kernel/dma.c +3 -0
@@ -9,6 +9,7 @@* [It also happened to remove the sizeof(char *) == sizeof(int) * assumption introduced because of those /proc/dma patches. -- Hennus] */ +#include <linux/config.h> #include <linux/module.h> #include <linux/kernel.h> #include <linux/errno.h>
@@ -62,10 +63,12 @@ { 0, 0 }, { 0, 0 }, { 0, 0 }, +#ifndef CONFIG_X86_PC9800 { 1, "cascade" }, { 0, 0 }, { 0, 0 }, { 0, 0 } +#endif };
PATCH 1/1 PC-9800 additional for 2.5.61-ac1 (4/21) misc core
In reply to Osamu TomitaThis is additional patch to support NEC PC-9800 subarchitecture against 2.5.61-ac1. (4/21)
Small core patches for PC98. I think these are small and clean.
include/asm-i386/io.h +6 -0
@@ -27,6 +27,8 @@* Linus */ +#include <linux/config.h> +/* * Bit simplified and optimized by Jan Hubicka * Support of BIGMEM added by Gerhard Wichert, Siemens AG, July 1999.
@@ -288,7 +290,11 @@#ifdef SLOW_IO_BY_JUMPING #define __SLOW_DOWN_IO "jmp 1f; 1: jmp 1f; 1:"#else +#ifdef CONFIG_X86_PC9800 +#define __SLOW_DOWN_IO "outb %%al,$0x5f;" +#else #define __SLOW_DOWN_IO "outb %%al,$0x80;" +#endif #endif static inline void slow_down_io (void ) {
include/asm-i386/irq.h +4 -0
@@ -17,7 +17,11 @@static __inline__int irq_cannonicalize (int irq) { +#ifdef CONFIG_X86_PC9800 +return ((irq ==7 ) ?11 : irq); +#else return ((irq ==2 ) ?9 : irq); +#endif }extern void disable_irq (unsigned int );
include/asm-i386/pc9800.h +27 -0
@@ -0,0 +1,27 @@ +/* +* PC-9800 machine types. +* +* Copyright (C) 1999 TAKAI Kosuke <[email protected]> +* (Linux/98 Project) +*/ + +#ifndef _ASM_PC9800_H_ +#define _ASM_PC9800_H_ + +#include <asm/pc9800_sca.h> +#include <asm/types.h> + +#define __PC9800SCA (type, pa) (*(type *) phys_to_virt(pa)) +#define __PC9800SCA_TEST_BIT (pa, n) \ + ((__PC9800SCA(u8, pa) & (1U << (n))) != 0) + +#define PC9800_HIGHRESO_P () __PC9800SCA_TEST_BIT(PC9800SCA_BIOS_FLAG, 3) +#define PC9800_8MHz_P () __PC9800SCA_TEST_BIT(PC9800SCA_BIOS_FLAG, 7) + +/* 0x2198 is 98 21 on memory... */ +#define PC9800_9821_P () (__PC9800SCA(u16, PC9821SCA_ROM_ID) == 0x2198) + +/* Note PC9821_...() are valid only when PC9800_9821_P() was true. */ +#define PC9821_IDEIF_DOUBLE_P () __PC9800SCA_TEST_BIT(PC9821SCA_ROM_FLAG4, 4) + +#endif
include/linux/kernel.h +6 -0
@@ -224,4 +224,10 @@#define __FUNCTION__ (__func__)#endif +#ifdef CONFIG_X86_PC9800 +#define pc98 1 +#else +#define pc98 0 +#endif +#endif
PATCH 1/1 PC-9800 additional for 2.5.61-ac1 (6/21) fs/patition
In reply to Osamu TomitaThis is additional patch to support NEC PC-9800 subarchitecture against 2.5.61-ac1. (6/21)
FAT fs and partition table support for PC98.
FAT fs created by PC9800 MS-DOS has curious media descripter. (BUG?)
fs/fat/inode.c +3 -1
@@ -939,7 +939,9 @@ error = first; goto out_fail; } -if (FAT_FIRST_ENT (sb, media) != first) { +if (FAT_FIRST_ENT (sb, media) != first + && (!pc98 || media !=0xf8 || (first &0xff ) !=0xfe )) + {if (!silent) { printk(KERN_ERR "FAT: invalid first entry of FAT " "(0x%x != 0x%x)\n",
fs/partitions/Kconfig +7 -0
@@ -177,6 +177,13 @@ If unsure, say N. +config NEC98_PARTITION + bool "NEC PC-9800 partition table support" if PARTITION_ADVANCED + default y if !PARTITION_ADVANCED && X86_PC9800 + help + Say Y here if you would like to be able to read the hard disk + partition table format used by NEC PC-9800 machines. + config SGI_PARTITION bool "SGI partition support" if PARTITION_ADVANCED default y if !PARTITION_ADVANCED && (SGI_IP22 || SGI_IP27)
fs/partitions/Makefile +1 -0
@@ -16,3 +16,4 @@ obj-$(CONFIG_ULTRIX_PARTITION) += ultrix.o obj-$(CONFIG_IBM_PARTITION) += ibm.o obj-$(CONFIG_EFI_PARTITION) += efi.o +obj-$(CONFIG_NEC98_PARTITION) += nec98.o msdos.o
fs/partitions/check.c +4 -0
@@ -28,6 +28,7 @@#include "ldm.h" #include "mac.h" #include "msdos.h" +#include "nec98.h" #include "osf.h" #include "sgi.h" #include "sun.h"
@@ -51,6 +52,9 @@#ifdef CONFIG_LDM_PARTITION ldm_partition, /* this must come before msdos */#endif +#ifdef CONFIG_NEC98_PARTITION + nec98_partition, /* must be come before `msdos_partition' */ +#endif #ifdef CONFIG_MSDOS_PARTITION msdos_partition,#endif
fs/partitions/msdos.c +1 -1
@@ -219,7 +219,7 @@* Create devices for BSD partitions listed in a disklabel, under a * dos-like partition. See parse_extended() for more information. */ -static void +void parse_bsd (struct parsed_partitions *state,struct block_device *bdev,u32 offset,u32 size,int origin,char *flavour,int max_partitions)
fs/partitions/nec98.c +270 -0
270 lines not on this page · raw message
fs/partitions/nec98.h +10 -0
@@ -0,0 +1,10 @@ +/* +* NEC PC-9800 series partition supports +* +* Copyright (C) 1998-2000 Kyoto University Microcomputer Club +*/ + +#define NEC98_PTABLE_MAGIC 0xAA55 + +extern int nec98_partition (struct parsed_partitions *state, +struct block_device *bdev);
PATCH 1/1 PC-9800 additional for 2.5.61-ac1 (7/21) IDE
In reply to Osamu TomitaThis is additional patch to support NEC PC-9800 subarchitecture against 2.5.61-ac1. (7/21)
PC98 standard IDE I/F support.
drivers/ide/Kconfig +5 -0
@@ -1054,6 +1054,11 @@ If unsure, say N. +config BLK_DEV_IDE_PC9800 + bool + depends on X86_PC9800 + default y + ##if [ "$CONFIG_IDE_TASKFILE_IO" = "y" ]; then ## dep_mbool CONFIG_BLK_DEV_TF_DISK $CONFIG_BLK_DEV_IDEDISK ##else
drivers/ide/ide-disk.c +67 -0
79 lines not on this page · raw message
drivers/ide/ide-probe.c +13 -3
@@ -573,7 +573,7 @@if (hwif->mmio ==2 )return 0 ; - addr_errs =hwif_check_region (hwif, hwif->io_ports[IDE_DATA_OFFSET ],1 ); + addr_errs =hwif_check_region (hwif, hwif->io_ports[IDE_DATA_OFFSET ], pc98 ?2 :1 );for (i =IDE_ERROR_OFFSET ; i <=IDE_STATUS_OFFSET ; i++) addr_errs +=hwif_check_region (hwif, hwif->io_ports[i],1 );if (hwif->io_ports[IDE_CONTROL_OFFSET ])
@@ -622,7 +622,9 @@ }for (i =IDE_DATA_OFFSET ; i <=IDE_STATUS_OFFSET ; i++) -hwif_request_region (hwif->io_ports[i],1 , hwif->name); +hwif_request_region (hwif->io_ports[i], + (pc98 && i ==IDE_DATA_OFFSET ) ?2 :1 , + hwif->name); }//EXPORT_SYMBOL(hwif_register);
@@ -644,6 +646,9 @@#if CONFIG_BLK_DEV_PDC4030 (hwif->chipset != ide_pdc4030 || hwif->channel == 0) &&#endif /* CONFIG_BLK_DEV_PDC4030 */ +#if CONFIG_BLK_DEV_IDE_PC9800 + (hwif->chipset != ide_pc9800 || !hwif->mate->present) && +#endif (hwif_check_regions(hwif))) {u16 msgout =0 ;for (unit =0 ; unit <MAX_DRIVES ; ++unit) {
@@ -973,7 +978,7 @@/* all CPUs; safe now that hwif->hwgroup is set up */ spin_unlock_irqrestore (&ide_lock, flags); -#if !defined(__mc68000__) && !defined(CONFIG_APUS ) && !defined(__sparc__) +#if !defined(__mc68000__) && !defined(CONFIG_APUS ) && !defined(__sparc__) && !defined(CONFIG_X86_PC9800 ) printk("%s at 0x%03lx-0x%03lx,0x%03lx on irq %d", hwif->name, hwif->io_ports[IDE_DATA_OFFSET], hwif->io_ports[IDE_DATA_OFFSET]+7,
@@ -983,6 +988,11 @@ hwif->io_ports[IDE_DATA_OFFSET ], hwif->io_ports[IDE_DATA_OFFSET ]+7 , hwif->io_ports[IDE_CONTROL_OFFSET], __irq_itoa(hwif->irq)); +#elif defined(CONFIG_X86_PC9800 ) +printk ("%s at 0x%03lx-0x%03lx,0x%03lx on irq %d" , hwif->name, + hwif->io_ports[IDE_DATA_OFFSET ], + hwif->io_ports[IDE_DATA_OFFSET ]+15 , + hwif->io_ports[IDE_CONTROL_OFFSET ], hwif->irq);#else printk ("%s at %x on irq 0x%08x" , hwif->name, hwif->io_ports[IDE_DATA_OFFSET ], hwif->irq);
drivers/ide/ide-proc.c +3 -0
@@ -365,6 +365,9 @@case ide_cy82c693: name ="cy82c693" ;break ;case ide_4drives: name ="4drives" ;break ;case ide_pmac: name ="mac-io" ;break ; +#ifdef CONFIG_X86_PC9800 +case ide_pc9800: name ="pc9800" ;break ; +#endif default : name ="(unknown)" ;break ; } len =sprintf (page,"%s\n" , name);
drivers/ide/ide.c +8 -1
@@ -547,7 +547,8 @@ }for (i =IDE_DATA_OFFSET ; i <=IDE_STATUS_OFFSET ; i++) {if (hwif->io_ports[i]) { -hwif_release_region (hwif->io_ports[i],1 ); +hwif_release_region (hwif->io_ports[i], + (pc98 && i ==IDE_DATA_OFFSET ) ?2 :1 ); } } }
@@ -2011,6 +2012,12 @@ }#endif /* CONFIG_BLK_DEV_IDEPCI */ +#ifdef CONFIG_BLK_DEV_IDE_PC9800 + { +extern void ide_probe_for_pc9800 (void ); +ide_probe_for_pc9800 (); + } +#endif #ifdef CONFIG_ETRAX_IDE {extern void init_e100_ide (void );
drivers/ide/legacy/Makefile +5 -0
@@ -2,6 +2,7 @@ obj-$(CONFIG_BLK_DEV_ALI14XX) += ali14xx.o obj-$(CONFIG_BLK_DEV_DTC2278) += dtc2278.o obj-$(CONFIG_BLK_DEV_HT6560B) += ht6560b.o +obj-$(CONFIG_BLK_DEV_IDE_PC9800) += pc9800.o obj-$(CONFIG_BLK_DEV_PDC4030) += pdc4030.o obj-$(CONFIG_BLK_DEV_QD65XX) += qd65xx.o obj-$(CONFIG_BLK_DEV_UMC8672) += umc8672.o
@@ -15,6 +16,10 @@ obj-$(CONFIG_BLK_DEV_IDECS) += ide-cs.o # Last of all +ifneq ($(CONFIG_X86_PC9800),y) obj-$(CONFIG_BLK_DEV_HD) += hd.o +else +obj-$(CONFIG_BLK_DEV_HD) += hd98.o +endif EXTRA_CFLAGS := -Idrivers/ide
drivers/ide/legacy/hd98.c +904 -0
904 lines not on this page · raw message
drivers/ide/legacy/pc9800.c +82 -0
82 lines not on this page · raw message
include/asm-i386/ide.h +18 -0
@@ -26,6 +26,9 @@static __inline__int ide_default_irq (ide_ioreg_t base) {switch (base) { +#ifdef CONFIG_X86_PC9800 +case 0x640 :return 9 ; +#endif /* CONFIG_X86_PC9800 */ case 0x1f0 :return 14 ;case 0x170 :return 15 ;case 0x1e8 :return 11 ;
@@ -39,7 +42,11 @@static __inline__ide_ioreg_t ide_default_io_base (int index) { +#ifdef CONFIG_X86_PC9800 +static unsigned long ata_io_base[MAX_HWIFS ] = {0x640 ,0x640 ,0 ,0 ,0 ,0 }; +#else /* CONFIG_X86_PC9800 */ static unsigned long ata_io_base[MAX_HWIFS ] = {0x1f0 ,0x170 ,0x1e8 ,0x168 ,0x1e0 ,0x160 }; +#endif /* !CONFIG_X86_PC9800 */ return ata_io_base[index]; }
@@ -48,13 +55,24 @@ {ide_ioreg_t reg = data_port;int i; +#ifdef CONFIG_X86_PC9800 +ide_ioreg_t increment = data_port ==0x640 ?2 :1 ; +#endif for (i =IDE_DATA_OFFSET ; i <=IDE_STATUS_OFFSET ; i++) { hw->io_ports[i] = reg; +#ifdef CONFIG_X86_PC9800 + reg += increment; +#else reg +=1 ; +#endif }if (ctrl_port) { hw->io_ports[IDE_CONTROL_OFFSET ] = ctrl_port; +#ifdef CONFIG_X86_PC9800 + }else if (data_port ==0x640 ) { + hw->io_ports[IDE_CONTROL_OFFSET ] =0x74c ; +#endif }else { hw->io_ports[IDE_CONTROL_OFFSET ] = hw->io_ports[IDE_DATA_OFFSET ] +0x206 ; }
include/linux/hdreg.h +19 -0
@@ -5,11 +5,29 @@* This file contains some defines for the AT-hd-controller. * Various sources. */ +#include <linux/config.h> /* ide.c has its own port definitions in "ide.h" */ #define HD_IRQ 14 +#ifdef CONFIG_X86_PC9800 +/* Hd controller regs. for NEC PC-9800 */ +#define HD_DATA 0x640/* _CTL when writing */ +#define HD_ERROR 0x642/* see err-bits */ +#define HD_NSECTOR 0x644/* nr of sectors to read/write */ +#define HD_SECTOR 0x646/* starting sector */ +#define HD_LCYL 0x648/* starting cylinder */ +#define HD_HCYL 0x64a/* high byte of starting cyl */ +#define HD_CURRENT 0x64c/* 101dhhhh , d=drive, hhhh=head */ +#define HD_STATUS 0x64e/* see status-bits */ +#define HD_FEATURE HD_ERROR/* same io address, read=error, write=feature */ +#define HD_PRECOMP HD_FEATURE/* obsolete use of this port - predates IDE */ +#define HD_COMMAND HD_STATUS/* same io address, read=status, write=cmd */ + +#define HD_CMD 0x74c/* used for resets */ +#define HD_ALTSTATUS 0x74c/* same as HD_STATUS but doesn't clear irq */ +#else /* !CONFIG_X86_PC9800 */ /* Hd controller regs. Ref: IBM AT Bios-listing */ #define HD_DATA 0x1f0/* _CTL when writing */ #define HD_ERROR 0x1f1/* see err-bits */
@@ -25,6 +43,7 @@#define HD_CMD 0x3f6/* used for resets */ #define HD_ALTSTATUS 0x3f6/* same as HD_STATUS but doesn't clear irq */ +#endif /* CONFIG_X86_PC9800 */ /* remainder is shared between hd.c, ide.c, ide-cd.c, and the hdparm utility */
include/linux/ide.h +1 -1
@@ -294,7 +294,7 @@ ide_qd65xx, ide_umc8672, ide_ht6560b, ide_pdc4030, ide_rz1000, ide_trm290, ide_cmd646, ide_cy82c693, ide_4drives, - ide_pmac, ide_etrax100, ide_acorn + ide_pmac, ide_etrax100, ide_acorn, ide_pc9800 } hwif_chipset_t; typedef struct ide_io_ops_s {
PATCH 1/1 PC-9800 additional for 2.5.61-ac1 (9/21) kconfig
In reply to Osamu TomitaThis is additional patch to support NEC PC-9800 subarchitecture against 2.5.61-ac1. (9/21)
Add selection CONFIG_X86_PC9800.
arch/i386/Kconfig +8 -2
@@ -75,6 +75,12 @@ If you don't have one of these computers, you should say N here. +config X86_PC9800 + bool "PC-9800 (NEC)" + help + To make kernel for NEC PC-9801/PC-9821 sub-architecture, say Y. + If say Y, kernel works -ONLY- on PC-9800 architecture. + config X86_BIGSMP bool "Support for other sub-arch SMP systems with more than 8 CPUs" help
@@ -1197,7 +1203,7 @@ config EISA bool "EISA support" - depends on ISA + depends on ISA && !X86_PC9800 ---help--- The Extended Industry Standard Architecture (EISA) bus was developed as an open alternative to the IBM MicroChannel bus.
@@ -1215,7 +1221,7 @@ config MCA bool "MCA support" - depends on !(X86_VISWS || X86_VOYAGER) + depends on !(X86_VISWS || X86_VOYAGER || X86_PC9800) help MicroChannel Architecture is found in some IBM PS/2 machines and laptops. It is a bus system similar to PCI or ISA. See
PATCH 1/1 PC-9800 additional for 2.5.61-ac1 (8/21) kanji
In reply to Osamu TomitaThis is additional patch to support NEC PC-9800 subarchitecture against 2.5.61-ac1. (8/21)
Add japanese kanji character support to PC98 console.
drivers/char/console_macros.h +10 -0
@@ -64,6 +64,16 @@#define complement_mask (vc_cons[currcons].d->vc_complement_mask)#define s_complement_mask (vc_cons[currcons].d->vc_s_complement_mask)#define hi_font_mask (vc_cons[currcons].d->vc_hi_font_mask) +#define kanji_mode (vc_cons[currcons].d->vc_kanji_mode) +#define s_kanji_mode (vc_cons[currcons].d->vc_s_kanji_mode) +#define kanji_char1 (vc_cons[currcons].d->vc_kanji_char1) +#define translate_ex (vc_cons[currcons].d->vc_translate_ex) +#define G0_charset_ex (vc_cons[currcons].d->vc_G0_charset_ex) +#define G1_charset_ex (vc_cons[currcons].d->vc_G1_charset_ex) +#define saved_G0_ex (vc_cons[currcons].d->vc_saved_G0_ex) +#define saved_G1_ex (vc_cons[currcons].d->vc_saved_G1_ex) +#define kanji_jis_mode (vc_cons[currcons].d->vc_kanji_jis_mode) +#define s_kanji_jis_mode (vc_cons[currcons].d->vc_s_kanji_jis_mode)#define vcmode (vt_cons[currcons]->vc_mode)
drivers/char/vt.c +342 -51
540 lines not on this page · raw message
drivers/video/console/Kconfig +4 -0
@@ -221,5 +221,9 @@ bool "Mini 4x6 font" depends on !SPARC32 && !SPARC64 && FONTS +config KANJI + bool "Japanese Kanji support" + depends on X86_PC9800 + endmenu
include/linux/console_struct.h +12 -0
@@ -83,6 +83,18 @@struct vc_data **vc_display_fg;/* [!] Ptr to var holding fg console for this display */ unsigned long vc_uni_pagedir;unsigned long *vc_uni_pagedir_loc;/* [!] Location of uni_pagedir variable for this console */ +#ifdef CONFIG_KANJI +unsigned char vc_kanji_char1; +unsigned char vc_kanji_mode; +unsigned char vc_kanji_jis_mode; +unsigned char vc_s_kanji_mode; +unsigned char vc_s_kanji_jis_mode; +unsigned int vc_translate_ex; +unsigned char vc_G0_charset_ex; +unsigned char vc_G1_charset_ex; +unsigned char vc_saved_G0_ex; +unsigned char vc_saved_G1_ex; +#endif /* CONFIG_KANJI */ /* additional information is in vt_kern.h */ };
include/linux/consolemap.h +1 -0
@@ -7,6 +7,7 @@#define GRAF_MAP 1#define IBMPC_MAP 2#define USER_MAP 3 +#define JP_MAP 4struct vc_data ;
PATCH 1/1 PC-9800 additional for 2.5.61-ac1 (12/21) PCI
In reply to Osamu TomitaThis is additional patch to support NEC PC-9800 subarchitecture against 2.5.61-ac1. (12/21)
Small changes for PCI support.
Fix for difference of IRQ numbers and IO addresses.
arch/i386/pci/irq.c +27 -0
@@ -5,6 +5,7 @@*/ #include <linux/config.h> +#include <linux/pci_ids.h> #include <linux/types.h> #include <linux/kernel.h> #include <linux/pci.h>
@@ -25,6 +26,7 @@static struct irq_routing_table *pirq_table; +#ifndef CONFIG_X86_PC9800 /* * Never use: 0, 1, 2 (timer, keyboard, and cascade) * Avoid using: 13, 14 and 15 (FP error and IDE).
@@ -36,6 +38,20 @@1000000 ,1000000 ,1000000 ,1000 ,1000 ,0 ,1000 ,1000 ,0 ,0 ,0 ,0 ,1000 ,100000 ,100000 ,100000 }; +#else +/* +* Never use: 0, 1, 2, 7 (timer, keyboard, CRT VSYNC and cascade) +* Avoid using: 8, 9 and 15 (FP error and IDE). +* Penalize: 4, 5, 11, 12, 13, 14 (known ISA uses: serial, floppy, sound, mouse +* and parallel) +*/ +unsigned int pcibios_irq_mask =0xff78 ; + +static int pirq_penalty[16 ] = { +1000000 ,1000000 ,1000000 ,0 ,1000 ,1000 ,0 ,1000000 , +100000 ,100000 ,0 ,1000 ,1000 ,1000 ,1000 ,100000 +}; +#endif struct irq_router {char *name;
@@ -612,6 +628,17 @@ r->set (pirq_router_dev, dev, pirq,11 ); } +#ifdef CONFIG_X86_PC9800 +if ((dev->class >>8 ) ==PCI_CLASS_BRIDGE_CARDBUS ) { +if (pci_find_device (PCI_VENDOR_ID_INTEL , +PCI_DEVICE_ID_INTEL_82439TX ,NULL ) !=NULL ) { +if (mask &0x0040 ) { + mask &=0x0040 ;/* assign IRQ 6 only */ +printk ("pci-irq: Use IRQ6 for CardBus controller\n" ); + } + } + } +#endif /* * Find the best IRQ to assign: use the one * reported by the device if possible.
drivers/pcmcia/yenta.c +6 -0
@@ -8,6 +8,7 @@* Dynamically adjust the size of the bridge resource * */ +#include <linux/config.h> #include <linux/init.h> #include <linux/pci.h> #include <linux/sched.h>
@@ -510,6 +511,7 @@add_timer (&socket->poll_timer); } +#ifndef CONFIG_X86_PC9800 /* * Only probe "regular" interrupts, don't * touch dangerous spots like the mouse irq,
@@ -520,6 +522,10 @@* Default to 11, 10, 9, 7, 6, 5, 4, 3. */ static u32 isa_interrupts =0x0ef8 ; +#else +/* Default to 12, 10, 6, 5, 3. */ +static u32 isa_interrupts =0x1468 ; +#endif static unsigned int yenta_probe_irq (pci_socket_t *socket,u32 isa_irq_mask) {
include/asm-i386/pci.h +4 -0
@@ -17,7 +17,11 @@#endif extern unsigned long pci_mem_start; +#ifdef CONFIG_X86_PC9800 +#define PCIBIOS_MIN_IO 0x4000 +#else #define PCIBIOS_MIN_IO 0x1000 +#endif #define PCIBIOS_MIN_MEM (pci_mem_start)void pcibios_config_init (void );
PATCH 1/1 PC-9800 additional for 2.5.61-ac1 (13/21) PCMCIA
In reply to Osamu TomitaThis is additional patch to support NEC PC-9800 subarchitecture against 2.5.61-ac1. (13/21)
Small change for PCMCIA (16bits) support.
For fix usable IRQ number.
drivers/pcmcia/i82365.c +4 -0
@@ -187,7 +187,11 @@ };/* Default ISA interrupt mask */ +#ifndef CONFIG_X86_PC9800 #define I365_MASK 0xdeb8/* irq 15,14,12,11,10,9,7,5,4,3 */ +#else +#define I365_MASK 0xd668/* irq 15,14,12,10,9,6,5,3 */ +#endif #ifdef CONFIG_ISA static int grab_irq;
PATCH 1/1 PC-9800 additional for 2.5.61-ac1 (14/21) PNP
In reply to Osamu TomitaThis is additional patch to support NEC PC-9800 subarchitecture against 2.5.61-ac1. (14/21)
Small change for Legacy bus PNP support.
For fix IO port address.
drivers/pnp/isapnp/core.c +5 -0
@@ -72,8 +72,13 @@MODULE_PARM_DESC (isapnp_verbose,"ISA Plug & Play verbose mode" );MODULE_LICENSE ("GPL" ); +#ifdef CONFIG_X86_PC9800 +#define _PIDXR 0x259 +#define _PNPWRP 0xa59 +#else #define _PIDXR 0x279#define _PNPWRP 0xa79 +#endif /* short tags */ #define _STAG_PNPVERNO 0x01
PATCH 1/1 PC-9800 additional for 2.5.61-ac1 (11/21) parport
In reply to Osamu TomitaThis is additional patch to support NEC PC-9800 subarchitecture against 2.5.61-ac1. (11/21)
Parallel port support.
drivers/parport/parport_pc.c +61 -5
@@ -332,7 +332,10 @@unsigned char parport_pc_read_status (struct parport *p) { -return inb (STATUS (p)); +if (pc98 && p->base ==0x40 ) +return ((inb (0x42 ) &0x04 ) <<5 ) |PARPORT_STATUS_ERROR ; +else +return inb (STATUS (p)); }void parport_pc_disable_irq (struct parport *p)
@@ -1644,6 +1647,8 @@ {unsigned char r, w; +if (pc98 && pb->base ==0x40 ) +return PARPORT_MODE_PCSPP ;/* * first clear an eventually pending EPP timeout * I ([email protected]) have an SMSC chipset
@@ -1777,6 +1782,9 @@ {int ok =0 ; +if (pc98 && pb->base ==0x40 ) +return 0 ;/* never support */ +clear_epp_timeout (pb);/* try to tri-state the buffer */
@@ -1908,6 +1916,9 @@ config & 0x80 ? "Level" : "Pulses"); configb =inb (CONFIGB (pb)); +if (pc98 && (CONFIGB (pb) ==0x14d ) && ((configb &0x38 ) ==0x30 )) + configb = (configb & ~0x38 ) |0x28 ;/* IRQ 14 */ +printk (KERN_DEBUG "0x%lx: ECP port cfgA=0x%02x cfgB=0x%02x\n" , pb->base, config, configb);printk (KERN_DEBUG "0x%lx: ECP settings irq=" , pb->base);
@@ -2048,6 +2059,9 @@ECR_WRITE (pb,ECR_CNF <<5 );/* Configuration MODE */ intrLine = (inb (CONFIGB (pb)) >>3 ) &0x07 ; +if (pc98 && (CONFIGB (pb) ==0x14d ) && (intrLine ==6 )) + intrLine =5 ;/* IRQ 14 */ + irq = lookup[intrLine];ECR_WRITE (pb, oecr);
@@ -2212,7 +2226,14 @@struct parport tmp;struct parport *p = &tmp;int probedirq =PARPORT_IRQ_NONE ; -if (check_region (base,3 ))return NULL ; +if (pc98 && base ==0x40 ) { +int i; +for (i =0 ; i <8 ; i +=2 ) +if (check_region (base + i,1 ))return NULL ; + }else { +if (check_region (base,3 ))return NULL ; + } + priv =kmalloc (sizeof (struct parport_pc_private ),GFP_KERNEL );if (!priv) {printk (KERN_DEBUG "parport (0x%lx): no memory!\n" , base);
@@ -2245,7 +2266,7 @@if (base_hi && !check_region (base_hi,3 ))parport_ECR_present (p); -if (base !=0x3bc ) { +if (!pc98 && base !=0x3bc ) {if (!check_region (base+0x3 ,5 )) {if (!parport_EPP_supported (p))parport_ECPEPP_supported (p);
@@ -2343,7 +2364,12 @@printk (KERN_INFO "%s: irq %d detected\n" , p->name, probedirq);parport_proc_register (p); -request_region (p->base,3 , p->name); +if (pc98 && p->base ==0x40 ) { +int i; +for (i =0 ; i <8 ; i +=2 ) +request_region (p->base + i,1 , p->name); + }else +request_region (p->base,3 , p->name);if (p->size >3 )request_region (p->base +3 , p->size -3 , p->name);if (p->modes &PARPORT_MODE_ECP )
@@ -2413,7 +2439,13 @@free_dma (p->dma);if (p->irq !=PARPORT_IRQ_NONE )free_irq (p->irq, p); -release_region (p->base,3 ); +if (pc98 && p->base ==0x40 ) { +int i; +for (i =0 ; i <8 ; i +=2 ) +release_region (p->base + i,1 ); + }else +release_region (p->base,3 ); +if (p->size >3 )release_region (p->base +3 , p->size -3 );if (p->modes &PARPORT_MODE_ECP )
@@ -2996,6 +3028,30 @@ {int count =0 ; +if (pc98) { +/* Set default resource settings for old style parport */ +int base =0x40 ; +int base_hi =0 ; +int irq =PARPORT_IRQ_NONE ; +int dma =PARPORT_DMA_NONE ; + +/* Check PC9800 old style parport */ +outb (inb (0x149 ) & ~0x10 ,0x149 );/* disable IEEE1284 */ +if (!(inb (0x149 ) &0x10 )) {/* IEEE1284 disabled ? */ +outb (inb (0x149 ) |0x10 ,0x149 );/* enable IEEE1284 */ +if (inb (0x149 ) &0x10 ) {/* IEEE1284 enabled ? */ +/* Set default settings for IEEE1284 parport */ + base =0x140 ; + base_hi =0x14c ; + irq =14 ; +/* dma = PARPORT_DMA_NONE; */ + } + } + +if (parport_pc_probe_port (base, base_hi, irq, dma,NULL )) + count++; + } +if (parport_pc_probe_port (0x3bc ,0x7bc , autoirq, autodma,NULL )) count++;if (parport_pc_probe_port (0x378 ,0x778 , autoirq, autodma,NULL ))
include/linux/parport_pc.h +10 -0
@@ -119,6 +119,11 @@#endif ctr = (ctr & ~mask) ^ val; ctr &= priv->ctr_writable;/* only write writable bits. */ +#ifdef CONFIG_X86_PC9800 +if (p->base ==0x40 && ((priv->ctr) ^ ctr) &0x01 ) +outb (0x0e | ((ctr &0x01 ) ^0x01 ),0x46 ); + else +#endif /* CONFIG_X86_PC9800 */ outb (ctr,CONTROL (p)); priv->ctr = ctr;/* Update soft copy */ return ctr;
@@ -191,6 +196,11 @@extern __inline__unsigned char parport_pc_read_status (struct parport *p) { +#ifdef CONFIG_X86_PC9800 +if (p->base ==0x40 ) +return ((inb (0x42 ) &0x04 ) <<5 ) |PARPORT_STATUS_ERROR ; + else +#endif /* CONFIG_X86_PC9800 */ return inb (STATUS (p)); }
PATCH 1/1 PC-9800 additional for 2.5.61-ac1 (10/21) network card
In reply to Osamu TomitaThis is additional patch to support NEC PC-9800 subarchitecture against 2.5.61-ac1. (10/21)
C-bus(PC98's legacy bus like ISA) network cards support.
PCI netwwork card works fine without patch.
drivers/net/3c509.c +36 -8
@@ -56,6 +56,10 @@v1.19b 08Nov2002 Marc Zyngier <[email protected]> - Introduce driver model for EISA cards. */ +/* +FIXES for PC-9800: +Shu Iwanaga: 3c569B(PC-9801 C-bus) support +*/ #define DRV_NAME "3c509"#define DRV_VERSION "1.19b"
@@ -257,7 +261,7 @@ };#endif /* CONFIG_MCA */ -#ifdef __ISAPNP__ +#if defined(__ISAPNP__) && !defined(CONFIG_X86_PC9800) static struct isapnp_device_id el3_isapnp_adapters[] __initdata = { { ISAPNP_ANY_ID, ISAPNP_ANY_ID, ISAPNP_VENDOR('T', 'C', 'M'), ISAPNP_FUNCTION(0x5090),
@@ -350,7 +354,7 @@if (lp->pmdev)pm_unregister (lp->pmdev);#endif -#ifdef __ISAPNP__ +#if defined(__ISAPNP__) && !defined(CONFIG_X86_PC9800 )if (lp->type ==EL3_PNP )pnp_device_detach (to_pnp_dev (lp->dev));#endif
@@ -368,12 +372,12 @@int ioaddr, irq, if_port;u16 phys_addr[3 ];static int current_tag; -#ifdef __ISAPNP__ +#if defined(__ISAPNP__) && !defined(CONFIG_X86_PC9800 )static int pnp_cards;struct pnp_dev *idev =NULL ;#endif /* __ISAPNP__ */ -#ifdef __ISAPNP__ +#if defined(__ISAPNP__) && !defined(CONFIG_X86_PC9800 )if (nopnp ==1 ) goto no_pnp;
@@ -421,6 +425,9 @@ no_pnp:#endif /* __ISAPNP__ */ +#ifdef CONFIG_X86_PC9800 + id_port =0x71d0 ; +#else /* Select an open I/O location at 0x1*0 to do contention select. */ for ( ; id_port <0x200 ; id_port +=0x10 ) {if (check_region (id_port,1 ))
@@ -435,6 +442,7 @@printk (" WARNING: No I/O port available for 3c509 activation.\n" ); return -ENODEV; } +#endif /* CONFIG_X86_PC9800 */ /* Next check for all ISA bus boards by sending the ID sequence to the ID_PORT. We find cards past the first by setting the 'current_tag' on cards as they are found. Cards with their tag set will not
@@ -465,7 +473,7 @@ phys_addr[i] =htons (id_read_eeprom (i)); } -#ifdef __ISAPNP__ +#if defined(__ISAPNP__) && !defined(CONFIG_X86_PC9800 )if (nopnp ==0 ) {/* The ISA PnP 3c509 cards respond to the ID sequence. This check is needed in order not to register them twice. */
@@ -490,9 +498,19 @@ {unsigned int iobase =id_read_eeprom (8 ); if_port = iobase >>14 ; +#ifdef CONFIG_X86_PC9800 + ioaddr =0x40d0 + ((iobase &0x1f ) <<8 ); +#else ioaddr =0x200 + ((iobase &0x1f ) <<4 ); +#endif } irq =id_read_eeprom (9 ) >>12 ; +#ifdef CONFIG_X86_PC9800 +if (irq ==7 ) + irq =6 ; +else if (irq ==15 ) + irq =13 ; +#endif if (!(dev =init_etherdev (NULL ,sizeof (struct el3_private ))))return -ENOMEM ;
@@ -522,7 +540,11 @@outb (0xd0 + ++current_tag, id_port);/* Activate the adaptor at the EEPROM location. */ +#ifdef CONFIG_X86_PC9800 +outb ((ioaddr >>8 ) |0xe0 , id_port); +#else outb ((ioaddr >>4 ) |0xe0 , id_port); +#endif EL3WINDOW (0 );if (inw (ioaddr) !=0x6d50 ) {
@@ -534,7 +556,7 @@/* Free the interrupt so that some other card can use it. */ outw (0x0f00 , ioaddr +WN0_IRQ ); -#ifdef __ISAPNP__ +#if defined(__ISAPNP__) && !defined(CONFIG_X86_PC9800 ) found: /* PNP jumps here... */#endif /* __ISAPNP__ */
@@ -543,7 +565,7 @@ dev->irq = irq; dev->if_port = if_port; lp = dev->priv; -#ifdef __ISAPNP__ +#if defined(__ISAPNP__) && !defined(CONFIG_X86_PC9800 ) lp->dev = &idev->dev;#endif
@@ -1388,6 +1410,12 @@outw (0x0001 , ioaddr +4 );/* Set the IRQ line. */ +#ifdef CONFIG_X86_PC9800 +if (dev->irq ==6 ) + dev->irq =7 ; +else if (dev->irq ==13 ) + dev->irq =15 ; +#endif outw ((dev->irq <<12 ) |0x0f00 , ioaddr +WN0_IRQ );/* Set the station address in window 2 each time opened. */
@@ -1550,7 +1578,7 @@MODULE_PARM_DESC (irq,"IRQ number(s) (assigned)" );MODULE_PARM_DESC (xcvr,"tranceiver(s) (0=internal, 1=external)" );MODULE_PARM_DESC (max_interrupt_work,"maximum events handled per interrupt" ); -#ifdef __ISAPNP__ +#if defined(__ISAPNP__) && !defined(CONFIG_X86_PC9800 )MODULE_PARM (nopnp,"i" );MODULE_PARM_DESC (nopnp,"disable ISA PnP support (0-1)" );MODULE_DEVICE_TABLE (isapnp, el3_isapnp_adapters);
drivers/net/8390.h +2 -1
@@ -123,7 +123,8 @@#define inb_p (port) in_8(port)#define outb_p (val,port) out_8(port,val) -#elif defined(CONFIG_ARM_ETHERH ) || defined(CONFIG_ARM_ETHERH_MODULE ) +#elif defined(CONFIG_ARM_ETHERH ) || defined(CONFIG_ARM_ETHERH_MODULE ) || \ + defined(CONFIG_NET_CBUS )#define EI_SHIFT (x) (ei_local->reg_offset[x])#else #define EI_SHIFT (x) (x)
drivers/net/Kconfig +52 -3
79 lines not on this page · raw message
drivers/net/Makefile +1 -0
@@ -86,6 +86,7 @@ obj-$(CONFIG_WD80x3) += wd.o 8390.o obj-$(CONFIG_EL2) += 3c503.o 8390.o obj-$(CONFIG_NE2000) += ne.o 8390.o +obj-$(CONFIG_NE2K_CBUS) += ne.o 8390.o obj-$(CONFIG_NE2_MCA) += ne2.o 8390.o obj-$(CONFIG_HPLAN) += hp.o 8390.o obj-$(CONFIG_HPLAN_PLUS) += hp-plus.o 8390.o
drivers/net/Makefile.lib +1 -0
@@ -19,6 +19,7 @@ obj-$(CONFIG_MACMACE) += crc32.o obj-$(CONFIG_MIPS_AU1000_ENET) += crc32.o obj-$(CONFIG_NATSEMI) += crc32.o +obj-$(CONFIG_NE2K_CBUS) += crc32.o obj-$(CONFIG_PCMCIA_FMVJ18X) += crc32.o obj-$(CONFIG_PCMCIA_SMC91C92) += crc32.o obj-$(CONFIG_PCMCIA_XIRTULIP) += crc32.o
drivers/net/Space.c +1 -1
@@ -233,7 +233,7 @@ #ifdef CONFIG_E2100 /* Cabletron E21xx series. */ {e2100_probe, 0}, #endif -#ifdef CONFIG_NE2000 /* ISA (use ne2k-pci for PCI cards) */ +#if defined(CONFIG_NE2000) || defined(CONFIG_NE2K_CBUS) /* ISA & PC-9800 CBUS (use ne2k-pci for PCI cards) */ {ne_probe, 0}, #endif #ifdef CONFIG_LANCE /* ISA/VLB (use pcnet32 for PCI cards) */
drivers/net/at1700.c +102 -13
249 lines not on this page · raw message
drivers/net/ne.c +336 -12
548 lines not on this page · raw message
drivers/net/ne2k_cbus.h +481 -0
481 lines not on this page · raw message
PATCH 1/1 PC-9800 additional for 2.5.61-ac1 (17/21) serial
In reply to Osamu TomitaThis is additional patch to support NEC PC-9800 subarchitecture against 2.5.61-ac1. (17/21)
Serial port support for PC98.
- Patch for onboard modem.
- New driver for 1st COM port.
PC98 has 2 COM ports. 1st port uses 8251 upper compatible chip and 2nd port uses 16550A compatible chip.
drivers/serial/8250_pnp.c +5 -0
@@ -188,6 +188,8 @@ { "MVX00A1", 0 },/* PC Rider K56 Phone System PnP */ { "MVX00F2", 0 }, +/* NEC 98NOTE SPEAKER PHONE FAX MODEM(33600bps) */ + { "nEC8241", 0 },/* Pace 56 Voice Internal Plug & Play Modem */ { "PMC2430", 0 },/* Generic */
@@ -373,6 +375,9 @@ ((port->min ==0x2f8 ) || (port->min ==0x3f8 ) || (port->min ==0x2e8 ) || +#ifdef CONFIG_X86_PC9800 + (port->min ==0x8b0 ) || +#endif (port->min == 0x3e8))) return 0; }
drivers/serial/Kconfig +14 -3
@@ -372,14 +372,25 @@ bool "Use NEC V850E on-chip UART for console" depends on V850E_NB85E_UART +config SERIAL98 + tristate "PC-9800 8251-based primary serial port support" + depends on X86_PC9800 + help + If you want to use standard primary serial ports on PC-9800, + say Y. Otherwise, say N. + +config SERIAL98_CONSOLE + bool "Support for console on PC-9800 standard serial port" + depends on SERIAL98=y + config SERIAL_CORE tristate - default m if SERIAL_AMBA!=y && SERIAL_CLPS711X!=y && SERIAL_21285!=y && !SERIAL_SA1100 && !SERIAL_ANAKIN && !SERIAL_UART00 && SERIAL_8250!=y && SERIAL_MUX!=y && !SERIAL_ROCKETPORT && !SERIAL_SUNCORE && !V850E_NB85E_UART && (SERIAL_AMBA=m || SERIAL_CLPS711X=m || SERIAL_21285=m || SERIAL_8250=m || SERIAL_MUX=m) - default y if SERIAL_AMBA=y || SERIAL_CLPS711X=y || SERIAL_21285=y || SERIAL_SA1100 || SERIAL_ANAKIN || SERIAL_UART00 || SERIAL_8250=y || SERIAL_MUX=y || SERIAL_ROCKETPORT || SERIAL_SUNCORE || V850E_NB85E_UART + default m if SERIAL_AMBA!=y && SERIAL_CLPS711X!=y && SERIAL_21285!=y && !SERIAL_SA1100 && !SERIAL_ANAKIN && !SERIAL_UART00 && SERIAL_8250!=y && SERIAL_MUX!=y && !SERIAL_ROCKETPORT && !SERIAL_SUNCORE && !V850E_NB85E_UART && (SERIAL_AMBA=m || SERIAL_CLPS711X=m || SERIAL_21285=m || SERIAL_8250=m || SERIAL_MUX=m || SERIAL98=m) + default y if SERIAL_AMBA=y || SERIAL_CLPS711X=y || SERIAL_21285=y || SERIAL_SA1100 || SERIAL_ANAKIN || SERIAL_UART00 || SERIAL_8250=y || SERIAL_MUX=y || SERIAL_ROCKETPORT || SERIAL_SUNCORE || V850E_NB85E_UART || SERIAL98=y config SERIAL_CORE_CONSOLE bool - depends on SERIAL_AMBA_CONSOLE || SERIAL_CLPS711X_CONSOLE || SERIAL_21285_CONSOLE || SERIAL_SA1100_CONSOLE || SERIAL_ANAKIN_CONSOLE || SERIAL_UART00_CONSOLE || SERIAL_8250_CONSOLE || SERIAL_MUX_CONSOLE || SERIAL_SUNCORE || V850E_NB85E_UART_CONSOLE + depends on SERIAL_AMBA_CONSOLE || SERIAL_CLPS711X_CONSOLE || SERIAL_21285_CONSOLE || SERIAL_SA1100_CONSOLE || SERIAL_ANAKIN_CONSOLE || SERIAL_UART00_CONSOLE || SERIAL_8250_CONSOLE || SERIAL_MUX_CONSOLE || SERIAL_SUNCORE || V850E_NB85E_UART_CONSOLE || SERIAL98_CONSOLE default y config SERIAL_68328
drivers/serial/Makefile +1 -0
@@ -27,3 +27,4 @@ obj-$(CONFIG_SERIAL_68360) += 68360serial.o obj-$(CONFIG_SERIAL_COLDFIRE) += mcfserial.o obj-$(CONFIG_V850E_NB85E_UART) += nb85e_uart.o +obj-$(CONFIG_SERIAL98) += serial98.o
drivers/serial/serial98.c +1125 -0
1,125 lines not on this page · raw message
include/linux/serial_core.h +8 -0
@@ -59,6 +59,14 @@/* NEC v850. */ #define PORT_NB85E_UART 40 +/* NEC PC-9800 */ +#define PORT_8251_PC98 41 +#define PORT_19K_PC98 42 +#define PORT_FIFO_PC98 43 +#define PORT_VFAST_PC98 44 +#define PORT_PC9861 45 +#define PORT_PC9801_101 46 +#ifdef __KERNEL__
PATCH 1/1 PC-9800 additional for 2.5.61-ac1 (18/21) setup
In reply to Osamu TomitaThis is additional patch to support NEC PC-9800 subarchitecture against 2.5.61-ac1. (18/21)
Support difference of IO port/memory address, using mach-* scheme.
arch/i386/kernel/setup.c +5 -94
@@ -23,6 +23,7 @@* This file handles the architecture-dependent parts of initialization */ +#include <linux/config.h> #include <linux/sched.h> #include <linux/mm.h> #include <linux/tty.h>
@@ -43,6 +44,7 @@#include <asm/setup.h> #include <asm/arch_hooks.h> #include "setup_arch_pre.h" +#include "mach_resources.h" int disable_pse__initdata =0 ;
@@ -104,98 +106,8 @@static char command_line[COMMAND_LINE_SIZE ];char saved_command_line[COMMAND_LINE_SIZE ]; -struct resource standard_io_resources[] = { - {"dma1" ,0x00 ,0x1f ,IORESOURCE_BUSY }, - {"pic1" ,0x20 ,0x3f ,IORESOURCE_BUSY }, - {"timer" ,0x40 ,0x5f ,IORESOURCE_BUSY }, - {"keyboard" ,0x60 ,0x6f ,IORESOURCE_BUSY }, - {"dma page reg" ,0x80 ,0x8f ,IORESOURCE_BUSY }, - {"pic2" ,0xa0 ,0xbf ,IORESOURCE_BUSY }, - {"dma2" ,0xc0 ,0xdf ,IORESOURCE_BUSY }, - {"fpu" ,0xf0 ,0xff ,IORESOURCE_BUSY } -}; -#ifdef CONFIG_MELAN -standard_io_resources[1] = { "pic1", 0x20, 0x21, IORESOURCE_BUSY }; -standard_io_resources[5] = { "pic2", 0xa0, 0xa1, IORESOURCE_BUSY }; -#endif - -#define STANDARD_IO_RESOURCES (sizeof(standard_io_resources)/sizeof(struct resource)) -static struct resource code_resource = {"Kernel code" ,0x100000 ,0 };static struct resource data_resource = {"Kernel data" ,0 ,0 }; -static struct resource vram_resource = {"Video RAM area" ,0xa0000 ,0xbffff ,IORESOURCE_BUSY }; - -/* System ROM resources */ -#define MAXROMS 6 -static struct resource rom_resources[MAXROMS ] = { - {"System ROM" ,0xF0000 ,0xFFFFF ,IORESOURCE_BUSY }, - {"Video ROM" ,0xc0000 ,0xc7fff ,IORESOURCE_BUSY } -}; - -#define romsignature (x) (*(unsigned short *)(x) == 0xaa55) - -static void __init probe_roms (void ) -{ -int roms =1 ; -unsigned long base; -unsigned char *romstart; - -request_resource (&iomem_resource, rom_resources+0 ); - -/* Video ROM is standard at C000:0000 - C7FF:0000, check signature */ -for (base =0xC0000 ; base <0xE0000 ; base +=2048 ) { - romstart =isa_bus_to_virt (base); -if (!romsignature (romstart)) -continue ; -request_resource (&iomem_resource, rom_resources + roms); - roms++; -break ; - } - -/* Extension roms at C800:0000 - DFFF:0000 */ -for (base =0xC8000 ; base <0xE0000 ; base +=2048 ) { -unsigned long length; - - romstart =isa_bus_to_virt (base); -if (!romsignature (romstart)) -continue ; - length = romstart[2 ] *512 ; -if (length) { -unsigned int i; -unsigned char chksum; - - chksum =0 ; -for (i =0 ; i < length; i++) - chksum += romstart[i]; - -/* Good checksum? */ -if (!chksum) { - rom_resources[roms].start = base; - rom_resources[roms].end = base + length -1 ; - rom_resources[roms].name ="Extension ROM" ; - rom_resources[roms].flags =IORESOURCE_BUSY ; - -request_resource (&iomem_resource, rom_resources + roms); - roms++; -if (roms >=MAXROMS ) -return ; - } - } - } - -/* Final check for motherboard extension rom at E000:0000 */ - base =0xE0000 ; - romstart =isa_bus_to_virt (base); - -if (romsignature (romstart)) { - rom_resources[roms].start = base; - rom_resources[roms].end = base +65535 ; - rom_resources[roms].name ="Extension ROM" ; - rom_resources[roms].flags =IORESOURCE_BUSY ; - -request_resource (&iomem_resource, rom_resources + roms); - } -}static void __init limit_regions (unsigned long long size) {
@@ -832,11 +744,8 @@request_resource (res, &data_resource); } } -request_resource (&iomem_resource, &vram_resource); -/* request I/O space for devices used on all i[345]86 PCs */ -for (i =0 ; i <STANDARD_IO_RESOURCES ; i++) -request_resource (&ioport_resource, standard_io_resources+i); +mach_request_resource ( );/* Tell the PCI layer not to allocate too close to the RAM area.. */ low_mem_size = ((max_low_pfn <<PAGE_SHIFT ) +0xfffff ) & ~0xfffff ;
@@ -917,6 +826,8 @@#ifdef CONFIG_VT #if defined(CONFIG_VGA_CONSOLE ) conswitchp = &vga_con; +#elif defined(CONFIG_GDC_CONSOLE ) + conswitchp = &gdc_con;#elif defined(CONFIG_DUMMY_CONSOLE ) conswitchp = &dummy_con;#endif
include/asm-i386/mach-default/mach_resources.h +113 -0
113 lines not on this page · raw message
include/asm-i386/mach-pc9800/mach_resources.h +192 -0
192 lines not on this page · raw message
PATCH 1/1 PC-9800 additional for 2.5.61-ac1 (21/21) traps
In reply to Osamu TomitaThis is additional patch to support NEC PC-9800 subarchitecture against 2.5.61-ac1. (21/21)
Support difference of NMI handling, using mach-* scheme.
arch/i386/kernel/traps.c +5 -7
@@ -50,6 +50,8 @@#include <linux/irq.h> #include <linux/module.h> +#include "mach_traps.h" + asmlinkage int system_call(void); asmlinkage void lcall7(void); asmlinkage void lcall27(void);
@@ -387,8 +389,7 @@printk ("You probably have a hardware problem with your RAM chips\n" );/* Clear and disable the memory parity error line. */ - reason = (reason &0xf ) |4 ; -outb (reason,0x61 ); +clear_mem_error (reason); }static void io_check_error (unsigned char reason,struct pt_regs * regs)
@@ -425,7 +426,7 @@static void default_do_nmi (struct pt_regs * regs) { -unsigned char reason =inb (0x61 ); +unsigned char reason =get_nmi_reason ();if (!(reason &0xc0 )) {#if CONFIG_X86_LOCAL_APIC
@@ -449,10 +450,7 @@* Reassert NMI in case it became active meanwhile * as it's edge-triggered. */ -outb (0x8f ,0x70 ); -inb (0x71 );/* dummy */ -outb (0x0f ,0x70 ); -inb (0x71 );/* dummy */ +reassert_nmi (); }static int dummy_nmi_callback (struct pt_regs * regs,int cpu)
include/asm-i386/mach-default/mach_traps.h +29 -0
@@ -0,0 +1,29 @@ +/* +* include/asm-i386/mach-default/mach_traps.h +* +* Machine specific NMI handling for generic. +* Split out from traps.c by Osamu Tomita <[email protected]> +*/ +#ifndef _MACH_TRAPS_H +#define _MACH_TRAPS_H + +static inline void clear_mem_error (unsigned char reason) +{ + reason = (reason &0xf ) |4 ; +outb (reason,0x61 ); +} + +static inline unsigned char get_nmi_reason (void ) +{ +return inb (0x61 ); +} + +static inline void reassert_nmi (void ) +{ +outb (0x8f ,0x70 ); +inb (0x71 );/* dummy */ +outb (0x0f ,0x70 ); +inb (0x71 );/* dummy */ +} + +#endif /* !_MACH_TRAPS_H */
include/asm-i386/mach-pc9800/mach_traps.h +27 -0
@@ -0,0 +1,27 @@ +/* +* include/asm-i386/mach-pc9800/mach_traps.h +* +* Machine specific NMI handling for PC-9800. +* Written by Osamu Tomita <[email protected]> +*/ +#ifndef _MACH_TRAPS_H +#define _MACH_TRAPS_H + +static inline void clear_mem_error (unsigned char reason) +{ +outb (0x08 ,0x37 ); +outb (0x09 ,0x37 ); +} + +static inline unsigned char get_nmi_reason (void ) +{ +return (inb (0x33 ) &6 ) ?0x80 :0 ; +} + +static inline void reassert_nmi (void ) +{ +outb (0x09 ,0x50 );/* disable NMI once */ +outb (0x09 ,0x52 );/* re-enable it */ +} + +#endif /* !_MACH_TRAPS_H */
PATCH 1/1 PC-9800 additional for 2.5.61-ac1 (19/21) SMP
In reply to Osamu TomitaThis is additional patch to support NEC PC-9800 subarchitecture against 2.5.61-ac1. (19/21)
SMP support for PC98.
arch/i386/kernel/mpparse.c +23 -6
@@ -33,6 +33,7 @@#include <mach_apic.h> #include <mach_mpparse.h> +#include <bios_ebda.h> /* Have we found an MP table */ int smp_found_config;
@@ -654,7 +655,8 @@* Read the physical hardware table. Anything here will * override the defaults. */ -if (!smp_read_mpc ((void *)mpf->mpf_physptr)) { +if (!smp_read_mpc (pc98 ?phys_to_virt (mpf->mpf_physptr) + : (void *)mpf->mpf_physptr)) { smp_found_config =0 ;printk (KERN_ERR "BIOS bug, MP table errors detected!...\n" );printk (KERN_ERR "... disabling SMP support. (tell your hw vendor)\n" );
@@ -708,8 +710,23 @@printk (KERN_INFO "found SMP MP-table at %08lx\n" ,virt_to_phys (mpf));reserve_bootmem (virt_to_phys (mpf),PAGE_SIZE ); -if (mpf->mpf_physptr) -reserve_bootmem (mpf->mpf_physptr,PAGE_SIZE ); +if (mpf->mpf_physptr) { +/* +* We cannot access to MPC table to compute +* table size yet, as only few megabytes from +* the bottom is mapped now. +* PC-9800's MPC table places on the very last +* of physical memory; so that simply reserving +* PAGE_SIZE from mpg->mpf_physptr yields BUG() +* in reserve_bootmem. +*/ +unsigned long size =PAGE_SIZE ; +unsigned long end = max_low_pfn *PAGE_SIZE ; +if (mpf->mpf_physptr + size > end) + size = end - mpf->mpf_physptr; +reserve_bootmem (mpf->mpf_physptr, size); + } + mpf_found = mpf;return 1 ; }
@@ -752,9 +769,9 @@* MP1.4 SPEC states to only scan first 1K of 4K EBDA. */ - address = *(unsigned short *)phys_to_virt (0x40E ); - address <<=4 ; -smp_scan_config (address,0x400 ); + address =get_bios_ebda (); +if (address) +smp_scan_config (address,0x400 ); }
arch/i386/kernel/smpboot.c +14 -0
@@ -823,13 +823,27 @@store_NMI_vector (&nmi_high, &nmi_low); +#ifndef CONFIG_X86_PC9800 CMOS_WRITE (0xa ,0xf ); +#else +/* reset code is stored in 8255 on PC-9800. */ +outb (0x0e ,0x37 );/* SHUT0 = 0 */ +#endif local_flush_tlb ();Dprintk ("1.\n" ); *((volatile unsigned short *)TRAMPOLINE_HIGH ) = start_eip >>4 ;Dprintk ("2.\n" ); *((volatile unsigned short *)TRAMPOLINE_LOW ) = start_eip &0xf ;Dprintk ("3.\n" ); +#ifdef CONFIG_X86_PC9800 +/* +* On PC-9800, continuation on warm reset is done by loading +* %ss:%sp from 0x0000:0404 and executing 'lret', so: +*/ +/* 0x3f0 is on unused interrupt vector and should be safe... */ + *((volatile unsigned long *)phys_to_virt (0x404 )) =0x000003f0 ; +Dprintk ("4.\n" ); +#endif /* * Starting actual IPI sequence...
include/asm-i386/mach-default/bios_ebda.h +15 -0
@@ -0,0 +1,15 @@ +#ifndef _MACH_BIOS_EBDA_H +#define _MACH_BIOS_EBDA_H + +/* +* there is a real-mode segmented pointer pointing to the +* 4K EBDA area at 0x40E. +*/ +static inline unsigned int get_bios_ebda (void ) +{ +unsigned int address = *(unsigned short *)phys_to_virt (0x40E ); + address <<=4 ; +return address;/* 0 means none */ +} + +#endif /* _MACH_BIOS_EBDA_H */
include/asm-i386/mach-pc9800/bios_ebda.h +14 -0
@@ -0,0 +1,14 @@ +#ifndef _MACH_BIOS_EBDA_H +#define _MACH_BIOS_EBDA_H + +/* +* PC-9800 has no EBDA. +* Its BIOS uses 0x40E for other purpose, +* Not pointer to 4K EBDA area. +*/ +static inline unsigned int get_bios_ebda (void ) +{ +return 0 ;/* 0 means none */ +} + +#endif /* _MACH_BIOS_EBDA_H */
include/asm-i386/mach-pc9800/mach_wakecpu.h +45 -0
45 lines not on this page · raw message
include/asm-i386/mach-pc9800/smpboot_hooks.h +33 -0
@@ -0,0 +1,33 @@ +/* two abstractions specific to kernel/smpboot.c, mainly to cater to visws +* which needs to alter them. */ + +static inline void smpboot_clear_io_apic_irqs (void ) +{ + io_apic_irqs =0 ; +} + +static inline void smpboot_setup_warm_reset_vector (void ) +{ +/* +* Install writable page 0 entry to set BIOS data area. +*/ +local_flush_tlb (); + +/* +* Paranoid: Set warm reset code and vector here back +* to default values. +*/ +outb (0x0f ,0x37 );/* SHUT0 = 1 */ + + *((volatile long *)phys_to_virt (0x404 )) =0 ; +} + +static inline void smpboot_setup_io_apic (void ) +{ +/* +* Here we can be sure that there is an IO-APIC in the system. Let's +* go and set it up: +*/ +if (!skip_ioapic_setup && nr_ioapics) +setup_IO_APIC (); +}
PATCH 1/1 PC-9800 additional for 2.5.61-ac1 (20/21) timer
In reply to Osamu TomitaThis is additional patch to support NEC PC-9800 subarchitecture against 2.5.61-ac1. (20/21)
Support difference of timer, using mach-* scheme.
arch/i386/kernel/timers/timer_pit.c +15 -7
@@ -16,6 +16,7 @@extern spinlock_t i8259A_lock;extern spinlock_t i8253_lock;#include "do_timer.h" +#include "io_ports.h" static int init_pit (void ) {
@@ -77,7 +78,8 @@ {int count;unsigned long flags; -static int count_p =LATCH ;/* for the first call after boot */ +static int count_p; +static int is_1st_boot =1 ;/* for the first call after boot */ static unsigned long jiffies_p =0 ;/*
@@ -85,11 +87,17 @@*/ unsigned long jiffies_t; +/* for support LATCH is not constant */ +if (is_1st_boot) { + is_1st_boot =0 ; + count_p =LATCH ; + } +spin_lock_irqsave (&i8253_lock, flags);/* timer count may underflow right here */ -outb_p (0x00 ,0x43 );/* latch the count ASAP */ +outb_p (0x00 ,PIT_MODE );/* latch the count ASAP */ - count =inb_p (0x40 );/* read the latched count */ + count =inb_p (PIT_CH0 );/* read the latched count */ /* * We do this guaranteed double memory access instead of a _p
@@ -97,13 +105,13 @@*/ jiffies_t = jiffies; - count |=inb_p (0x40 ) <<8 ; + count |=inb_p (PIT_CH0 ) <<8 ;/* VIA686a test code... reset the latch if count > max + 1 */ if (count >LATCH ) { -outb_p (0x34 ,0x43 ); -outb_p (LATCH &0xff ,0x40 ); -outb (LATCH >>8 ,0x40 ); +outb_p (0x34 ,PIT_MODE ); +outb_p (LATCH &0xff ,PIT_CH0 ); +outb (LATCH >>8 ,PIT_CH0 ); count =LATCH -1 ; }
arch/i386/kernel/timers/timer_tsc.c +13 -81
127 lines not on this page · raw message
include/asm-i386/mach-default/calibrate_tsc.h +90 -0
90 lines not on this page · raw message
include/asm-i386/mach-pc9800/do_timer.h +80 -0
80 lines not on this page · raw message
include/asm-i386/mach-pc9800/calibrate_tsc.h +71 -0
71 lines not on this page · raw message
include/asm-i386/timex.h +4 -0
@@ -9,11 +9,15 @@#include <linux/config.h> #include <asm/msr.h> +#ifdef CONFIG_X86_PC9800 +extern int CLOCK_TICK_RATE ; +#else #ifdef CONFIG_MELAN # define CLOCK_TICK_RATE 1189200/* AMD Elan has different frequency! */ #else # define CLOCK_TICK_RATE 1193180/* Underlying HZ */ #endif +#endif #define CLOCK_TICK_FACTOR 20/* Factor of both 1000000 and CLOCK_TICK_RATE */ #define FINETUNE ((((((long)LATCH * HZ - CLOCK_TICK_RATE) << SHIFT_HZ) * \
This is patchset to support NEC PC-9800 subarchitecture against 2.5.60 (22/34).
Misc files for support PC98.
kernel/timer.c +5 -0
@@ -437,8 +437,13 @@/* * Timekeeping variables */ +#ifdef CONFIG_X86_PC9800 +extern unsigned long tick_usec;/* ACTHZ period (usec) */ +extern unsigned long tick_nsec;/* USER_HZ period (nsec) */ +#else unsigned long tick_usec =TICK_USEC ;/* ACTHZ period (usec) */ unsigned long tick_nsec =TICK_NSEC (TICK_USEC );/* USER_HZ period (nsec) */ +#endif /* The current time */ struct timespec xtime __attribute__ ((aligned (16)));
PATCH 1/1 PC-9800 additional for 2.5.61-ac1 (15/21) RTC
In reply to Osamu TomitaThis is additional patch to support NEC PC-9800 subarchitecture against 2.5.61-ac1. (15/21)
Support RTC for PC98, using mach-* scheme.
arch/i386/kernel/time.c +17 -98
@@ -55,12 +55,15 @@#include <asm/processor.h> #include <asm/timer.h> -#include <linux/mc146818rtc.h> +#include "mach_time.h" +#include <linux/timex.h> #include <linux/config.h> #include <asm/arch_hooks.h> +#include "io_ports.h" +extern spinlock_t i8259A_lock;int pit_latch_buggy;/* extern */
@@ -137,69 +140,13 @@write_sequnlock_irq (&xtime_lock); } -/* -* In order to set the CMOS clock precisely, set_rtc_mmss has to be -* called 500 ms after the second nowtime has started, because when -* nowtime is written into the registers of the CMOS clock, it will -* jump to the next second precisely 500 ms later. Check the Motorola -* MC146818A or Dallas DS12887 data sheet for details. -* -* BUG: This routine does not handle hour overflow properly; it just -* sets the minutes. Usually you'll only notice that after reboot! -*/ static int set_rtc_mmss (unsigned long nowtime) { -int retval =0 ; -int real_seconds, real_minutes, cmos_minutes; -unsigned char save_control, save_freq_select; +int retval;/* gets recalled with irq locally disabled */ spin_lock (&rtc_lock); - save_control =CMOS_READ (RTC_CONTROL );/* tell the clock it's being set */ -CMOS_WRITE ((save_control|RTC_SET ),RTC_CONTROL ); - - save_freq_select =CMOS_READ (RTC_FREQ_SELECT );/* stop and reset prescaler */ -CMOS_WRITE ((save_freq_select|RTC_DIV_RESET2 ),RTC_FREQ_SELECT ); - - cmos_minutes =CMOS_READ (RTC_MINUTES ); -if (!(save_control &RTC_DM_BINARY ) ||RTC_ALWAYS_BCD ) -BCD_TO_BIN (cmos_minutes); - -/* -* since we're only adjusting minutes and seconds, -* don't interfere with hour overflow. This avoids -* messing with unknown time zones but requires your -* RTC not to be off by more than 15 minutes -*/ - real_seconds = nowtime %60 ; - real_minutes = nowtime /60 ; -if (((abs (real_minutes - cmos_minutes) +15 )/30 ) &1 ) - real_minutes +=30 ;/* correct for half hour time zone */ - real_minutes %=60 ; - -if (abs (real_minutes - cmos_minutes) <30 ) { -if (!(save_control &RTC_DM_BINARY ) ||RTC_ALWAYS_BCD ) { -BIN_TO_BCD (real_seconds); -BIN_TO_BCD (real_minutes); - } -CMOS_WRITE (real_seconds,RTC_SECONDS ); -CMOS_WRITE (real_minutes,RTC_MINUTES ); - }else { -printk (KERN_WARNING -"set_rtc_mmss: can't update from %d to %d\n" , - cmos_minutes, real_minutes); - retval =-1 ; - } - -/* The following flags have to be released exactly in this order, -* otherwise the DS12887 (popular MC146818A clone with integrated -* battery and quartz) will not reset the oscillator and will not -* update precisely 500 ms later. You won't find this mentioned in -* the Dallas Semiconductor data sheets, but who believes data -* sheets anyway ... -- Markus Kuhn -*/ -CMOS_WRITE (save_control,RTC_CONTROL ); -CMOS_WRITE (save_freq_select,RTC_FREQ_SELECT ); + retval =mach_set_rtc_mmss (nowtime);spin_unlock (&rtc_lock);return retval;
@@ -225,9 +172,9 @@* on an 82489DX-based system. */ spin_lock (&i8259A_lock); -outb (0x0c ,0x20 ); +outb (0x0c ,PIC_MASTER_OCW3 );/* Ack the IRQ; AEOI will end it automatically. */ -inb (0x20 ); +inb (PIC_MASTER_POLL ); spin_unlock(&i8259A_lock); }#endif
@@ -241,14 +188,14 @@*/ if ((time_status &STA_UNSYNC ) ==0 && xtime.tv_sec > last_rtc_update +660 && - (xtime.tv_nsec /1000 ) >=500000 - ((unsigned )TICK_SIZE ) /2 && - (xtime.tv_nsec /1000 ) <=500000 + ((unsigned )TICK_SIZE ) /2 ) { + (xtime.tv_nsec /1000 ) >=TIME1 - ((unsigned )TICK_SIZE ) /2 && + (xtime.tv_nsec /1000 ) <=TIME2 + ((unsigned )TICK_SIZE ) /2 ) {if (set_rtc_mmss (xtime.tv_sec) ==0 ) last_rtc_update = xtime.tv_sec;else last_rtc_update = xtime.tv_sec -600 ;/* do it again in 60 s */ } - +#ifdef CONFIG_MCA if ( MCA_bus ) {/* The PS/2 uses level-triggered interrupts. You can't
@@ -329,43 +276,15 @@/* not static: needed by APM */ unsigned long get_cmos_time (void ) { -unsigned int year, mon, day, hour, min, sec; -int i; +unsigned long retval;spin_lock (&rtc_lock); -/* The Linux interpretation of the CMOS clock register contents: -* When the Update-In-Progress (UIP) flag goes from 1 to 0, the -* RTC registers show the second which has precisely just started. -* Let's hope other operating systems interpret the RTC the same way. -*/ -/* read RTC exactly on falling edge of update flag */ -for (i =0 ; i <1000000 ; i++)/* may take up to 1 second... */ -if (CMOS_READ (RTC_FREQ_SELECT ) &RTC_UIP ) -break ; -for (i =0 ; i <1000000 ; i++)/* must try at least 2.228 ms */ -if (!(CMOS_READ (RTC_FREQ_SELECT ) &RTC_UIP )) -break ; -do {/* Isn't this overkill ? UIP above should guarantee consistency */ - sec =CMOS_READ (RTC_SECONDS ); - min =CMOS_READ (RTC_MINUTES ); - hour =CMOS_READ (RTC_HOURS ); - day =CMOS_READ (RTC_DAY_OF_MONTH ); - mon =CMOS_READ (RTC_MONTH ); - year =CMOS_READ (RTC_YEAR ); - }while (sec !=CMOS_READ (RTC_SECONDS )); -if (!(CMOS_READ (RTC_CONTROL ) &RTC_DM_BINARY ) ||RTC_ALWAYS_BCD ) - { -BCD_TO_BIN (sec); -BCD_TO_BIN (min); -BCD_TO_BIN (hour); -BCD_TO_BIN (day); -BCD_TO_BIN (mon); -BCD_TO_BIN (year); - } + + retval =mach_get_cmos_time (); +spin_unlock (&rtc_lock); -if ((year +=1900 ) <1970 ) - year +=100 ; -return mktime (year, mon, day, hour, min, sec); + +return retval; }/* XXX this driverfs stuff should probably go elsewhere later -john */
include/asm-i386/mach-default/mach_time.h +122 -0
122 lines not on this page · raw message
include/asm-i386/mach-pc9800/mach_time.h +136 -0
136 lines not on this page · raw message