If you say Y here, you will use the full-featured IDE driver to
control up to four IDE interfaces, each being able to serve a
"master" and a "slave" device, for a total of up to eight IDE
- disk/cdrom/tape/floppy drives.
+ disk/cdrom/tape/floppy drives. People with SCSI-only systems
+ should say 'N' here.
Useful information about large (>540MB) IDE disks, sound card IDE
ports, module support, and other topics, is contained in
more detailed information, read the Disk-HOWTO, available via FTP
(user: anonymous) from ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO.
+ People with SCSI-only systems can say 'N' here.
+
Use old disk-only driver on primary interface
CONFIG_BLK_DEV_HD_IDE
There are two drivers for MFM/RLL/IDE disks. Most people use just
addresses. Normally, just say N here; you will then use the new
driver for all 4 interfaces.
+ People with SCSI-only systems can say 'N' here.
+
Include IDE/ATA-2 DISK support
CONFIG_BLK_DEV_IDEDISK
This will include enhanced support for MFM/RLL/IDE hard disks. If you
have a MFM/RLL/IDE disk, and there is no special reason to use the
- old hard disk driver instead, say Y.
+ old hard disk driver instead, say Y. If all your disks are SCSI, say 'N'.
If you want to compile this driver as a module ( = code which can be
inserted in and removed from the running kernel whenever you want),
CONFIG_BLK_DEV_IDETAPE
If you have an IDE tape drive using the ATAPI protocol, say Y.
ATAPI is a newer protocol used by IDE tape and CDROM drives, similar
- to the SCSI protocol.
+ to the SCSI protocol (but say 'N' if your tape is a SCSI device).
If you say Y here, the tape drive will be identified at boot time
along with other IDE devices, as "hdb" or "hdc", or something
If both this SCSI emulation and native ATAPI support are compiled
into the kernel, the native support will be used.
- If unsure, say N.
+ People with SCSI-only systems should say 'N' here. If unsure, say N.
CMD640 chipset bugfix/support
CONFIG_BLK_DEV_CMD640
The CMD640 chip is also used on add-in cards by Acculogic, and on
the "CSA-6400E PCI to IDE controller" that some people have. For
- details, read Documentation/ide.txt. If unsure, say Y.
+ details, read Documentation/ide.txt.
+
+ People with SCSI-only systems should say 'N' here. If unsure, say Y.
CMD640 enhanced support
CONFIG_BLK_DEV_CMD640_ENHANCED
severe data corruption under many conditions. Say Y here to include
code which automatically detects and corrects the problem under
Linux. This may slow disk throughput by a few percent, but at least
- things will operate 100% reliably. If unsure, say Y.
+ things will operate 100% reliably.
+
+ People with SCSI-only systems can say 'N' here. If unsure, say Y.
Generic PCI IDE chipset support
CONFIG_BLK_DEV_IDEPCI
Enable this for PCI systems which use IDE drive(s).
This option helps the IDE driver to automatically detect and
configure all PCI-based IDE interfaces in your system.
- It is safe to say Y to this question.
+
+ People with SCSI-only systems should say 'N' here. It is safe to
+ say 'Y' to this question.
Generic PCI bus-master DMA support
CONFIG_BLK_DEV_IDEDMA
chipsets. Most of these also require special kernel boot parameters
to actually turn on the support at runtime.
+ People with SCSI-only systems should say 'N' here.
+
Generic 4 drives/port support
CONFIG_BLK_DEV_4DRIVES
Certain older chipsets, including the Tekram 690CD, use a
W: Web-page with status/info
S: Status, one of the following:
- Supported: Someone is actually paid to look after this (wildly
- improbable).
+ Supported: Someone is actually paid to look after this.
Maintained: Someone actually looks after it.
Odd Fixes: It has a maintainer but they don't have time to do
much other than throw the odd patch in. See below..
if [ -f VIDEO_MODULES ]; then inst_mod VIDEO_MODULES video; fi; \
if [ -f FC4_MODULES ]; then inst_mod FC4_MODULES fc4; fi; \
\
- ls *.o > .allmods; \
- echo $$MODULES | tr ' ' '\n' | sort | comm -23 .allmods - > .misc; \
- if [ -s .misc ]; then inst_mod .misc misc; fi; \
- rm -f .misc .allmods; \
+ ls *.o > $$MODLIB/.allmods; \
+ echo $$MODULES | tr ' ' '\n' | sort | comm -23 $$MODLIB/.allmods - > $$MODLIB/.misc; \
+ if [ -s $$MODLIB/.misc ]; then inst_mod $$MODLIB/.misc misc; fi; \
+ rm -f $$MODLIB/.misc $$MODLIB/.allmods; \
)
# modules disabled....
);
}
- printk("IRQ to pin mappings:\n");
- for (i = 0; i < PIN_MAP_SIZE; i++)
- printk("%d->%d(%d) ", i, irq_2_pin[i].pin, irq_2_pin[i].next);
- printk("\n");
+ printk(KERN_DEBUG "IRQ to pin mappings:\n");
+ for (i = 0; i < NR_IRQS; i++) {
+ struct irq_pin_list *entry = irq_2_pin + i;
+ if (entry->pin < 0)
+ continue;
+ printk(KERN_DEBUG "IRQ%d ", i);
+ for (;;) {
+ printk("-> %d", entry->pin);
+ if (!entry->next)
+ break;
+ entry = irq_2_pin + entry->next;
+ }
+ printk("\n");
+ }
printk(".................................... done.\n");
* Copyright (C) 1997 Martin Mares <mj@atrey.karlin.mff.cuni.cz>
*
* The __delay function must _NOT_ be inlined as its execution time
- * depends wildly on alignment on many x86 processors.
+ * depends wildly on alignment on many x86 processors. The additional
+ * jump magic is needed to get the timing stable on all the CPU's
+ * we have to worry about.
*/
#include <linux/sched.h>
void __delay(unsigned long loops)
{
__asm__ __volatile__(
- "1:\tdecl %0\n\tjns 1b"
+ "\tjmp 1f\n"
+ ".align 16\n"
+ "1:\tjmp 2f\n"
+ ".align 16\n"
+ "2:\tdecl %0\n\tjns 2b"
:/* no outputs */
:"a" (loops)
:"ax");
tsk = current;
mm = tsk->mm;
- if (in_interrupt())
- die("page fault from irq handler",regs,error_code);
+ if (in_interrupt() || mm == &init_mm)
+ die("page fault without a user context",regs,error_code);
down(&mm->mmap_sem);
* -
*/
+#include <linux/config.h>
#include <linux/types.h>
#include <linux/kernel.h>
#include <linux/sched.h>
* via them as are assorted bits and bobs - eg rtc, adb.
*/
-#include <linux/config.h>
#include <linux/types.h>
#include <linux/kernel.h>
#include <linux/mm.h>
RO_IOCTLS(inode->i_rdev,arg);
default:
- printk ("Unknown md_ioctl %d\n", cmd);
return -EINVAL;
}
#include <asm/io.h>
#include <asm/system.h>
#include <asm/uaccess.h>
+#include <asm/bitops.h>
#include <asm/linux_logo.h>
{
int currcons = fg_console;
unsigned char c;
- static int printing = 0;
+ static unsigned long printing = 0;
const ushort *start;
ushort cnt = 0;
ushort myx = x;
- if (!printable || printing)
- return; /* console not yet initialized */
- printing = 1;
+ /* console busy or not yet initialized */
+ if (!printable || test_and_set_bit(0, &printing))
+ return;
if (kmsg_redirect && vc_cons_allocated(kmsg_redirect - 1))
currcons = kmsg_redirect - 1;
}
if (vcmode != KD_TEXT)
- return;
+ goto quit;
/* undraw cursor first */
if (IS_FG)
* Problems caused when we have need_wrap set on '\n' character */
disable_bh(CONSOLE_BH);
while (count--) {
- enable_bh(CONSOLE_BH);
c = *b++;
- disable_bh(CONSOLE_BH);
if (c == 10 || c == 13 || c == 8 || need_wrap) {
if (cnt > 0) {
if (IS_VISIBLE)
poke_blanked_console();
quit:
- printing = 0;
+ clear_bit(0, &printing);
}
static kdev_t vt_console_device(struct console *c)
#define I2C_DEBUG(x) if (i2c_debug) (x)
static int scan = 0;
-static int verbose = 1;
+static int verbose = 0;
static int i2c_debug = 0;
MODULE_PARM(scan,"i");
{
int port;
int curvol; /* 1 or 0 */
- unsigned long curfreq; /* RSF16_PREC * freq in MHz */
+ unsigned long curfreq; /* freq in kHz */
__u32 flags;
};
if(device->bus->id!=I2C_BUSID_BT848)
return -EINVAL;
- printk(KERN_DEBUG "saa5249_attach: bus %p\n", device->bus);
strcpy(device->name, IF_NAME);
/*
static int saa5249_detach(struct i2c_device *device)
{
struct video_device *vd=device->data;
- printk(KERN_DEBUG "saa5249_detach\n");
video_unregister_device(vd);
kfree(vd->priv);
kfree(vd);
static int saa5249_command(struct i2c_device *device,
unsigned int cmd, void *arg)
{
- printk(KERN_DEBUG "saa5249_command\n");
return -EINVAL;
}
struct saa5249_device *t=vd->priv;
int pgbuf;
- printk("t=%p\n",t);
if (t->bus==NULL)
return -ENODEV;
- printk("Do i2c %p\n",t->bus);
if (i2c_senddata(t, CCTWR, 0, 0, -1) || /* Select R11 */
/* Turn off parity checks (we do this ourselves) */
i2c_senddata(t, CCTWR, 1, disp_modes[t->disp_mode][0], 0, -1) ||
return -EIO;
}
- printk("clean\n");
for (pgbuf = 0; pgbuf < NUM_DAUS; pgbuf++)
{
memset(t->vdau[pgbuf].pgbuf, ' ', sizeof(t->vdau[0].pgbuf));
t->is_searching[pgbuf] = FALSE;
}
t->virtual_mode=FALSE;
- printk("Go\n");
MOD_INC_USE_COUNT;
return 0;
}
{
struct tty_struct *tty = (struct tty_struct *) data;
struct file * filp;
+ struct file * cons_filp = NULL;
struct task_struct *p;
+ int closecount = 0, n;
if (!tty)
return;
if (!filp->f_dentry->d_inode)
continue;
if (filp->f_dentry->d_inode->i_rdev == CONSOLE_DEV ||
- filp->f_dentry->d_inode->i_rdev == SYSCONS_DEV)
+ filp->f_dentry->d_inode->i_rdev == SYSCONS_DEV) {
+ cons_filp = filp;
continue;
+ }
if (filp->f_op != &tty_fops)
continue;
+ closecount++;
tty_fasync(-1, filp, 0);
filp->f_op = &hung_up_tty_fops;
}
tty->session = 0;
tty->pgrp = -1;
tty->ctrl_status = 0;
- if (tty->driver.hangup)
+ /*
+ * If one of the devices matches a console pointer, we
+ * cannot just call hangup() because that will cause
+ * tty->count and state->count to go out of sync.
+ * So we just call close() the right number of times.
+ */
+ if (cons_filp) {
+ if (tty->driver.close)
+ for (n = 0; n < closecount; n++)
+ tty->driver.close(tty, cons_filp);
+ } else if (tty->driver.hangup)
(tty->driver.hangup)(tty);
unlock_kernel();
}
if (!c)
return -ENODEV;
device = c->device(c);
+ filp->f_flags |= O_NONBLOCK; /* Don't let /dev/console block */
noctty = 1;
}
#ifdef CONFIG_UNIX98_PTYS
{
struct video_init *vfli = video_init_list;
- printk(KERN_INFO "Linux video capture interface: v0.01 ALPHA\n");
+ printk(KERN_INFO "Linux video capture interface: v1.00\n");
if(register_chrdev(VIDEO_MAJOR,"video_capture", &video_fops))
{
printk("video_dev: unable to get major %d\n", VIDEO_MAJOR);
CHECK_PPP_MAGIC(ppp);
+ /* ppp_dev_close may be called with tbusy==1 so we must set it to 0 */
+ dev->tbusy=0;
+
MOD_DEC_USE_COUNT;
return 0;
{
x25_channel_t* chan = dev->priv;
if(chan==NULL)
- return chan;
+ return NULL;
return &chan->ifstats;
}
end_head = largest->end_head;
end_sector = largest->end_sector & 0x3f;
+ if( end_head + 1 == 0 || end_sector == 0 ) return -1;
+
#ifdef DEBUG
printk ("scsicam_bios_param : end at h = %d, c = %d, s = %d\n",
end_head, end_cyl, end_sector);
#ifdef __ASSEMBLY__
#define ALIGN __ALIGN
-#define ALIGN_STRING __ALIGN_STRING
+#define ALIGN_STR __ALIGN_STR
#define ENTRY(name) \
.globl SYMBOL_NAME(name); \
#include <linux/dio.h>
#endif
+#ifdef CONFIG_ZORRO
+#include <linux/zorro.h>
+#endif
+
#ifdef CONFIG_MTRR
# include <asm/mtrr.h>
#endif
#ifdef CONFIG_SYSCTL
sysctl_init();
#endif
-#ifdef CONFIG_DIO
- dio_init();
-#endif
/*
* Ok, at this point all CPU's should be initialized, so
#ifdef CONFIG_ARCH_ACORN
ecard_init();
#endif
+#ifdef CONFIG_ZORRO
+ zorro_init();
+#endif
+#ifdef CONFIG_DIO
+ dio_init();
+#endif
/* Networking initialization needs a process context */
sock_init();
#include <linux/smp.h>
#include <linux/smp_lock.h>
#include <linux/init.h>
+#include <linux/vmalloc.h>
#include <asm/uaccess.h>
#include <asm/pgtable.h>
return -ENOMEM;
}
- shp->shm_pages = (ulong *) kmalloc (numpages*sizeof(ulong),GFP_KERNEL);
+ shp->shm_pages = (ulong *) vmalloc (numpages*sizeof(ulong));
if (!shp->shm_pages) {
shm_segs[id] = (struct shmid_ds *) IPC_UNUSED;
wake_up (&shm_lock);
shm_swp--;
}
}
- kfree(shp->shm_pages);
+ vfree(shp->shm_pages);
shm_tot -= numpages;
kfree(shp);
return;
int kswapd(void *unused)
{
struct wait_queue wait = { current, NULL };
+
current->session = 1;
current->pgrp = 1;
- sprintf(current->comm, "kswapd");
+ strcpy(current->comm, "kswapd");
sigfillset(¤t->blocked);
/*
xprt_reserve(task);
goto out;
} else if (task->tk_status == -ETIMEDOUT) {
- printk("RPC: task timed out\n");
+ dprintk("RPC: task timed out\n");
task->tk_action = call_timeout;
goto out;
} else {
#include CURSES_LOC
+/*
+ * Colors in ncurses 1.9.9e do not work properly since foreground and
+ * background colors are OR'd rather than separately masked. This version
+ * of dialog was hacked to work with ncurses 1.9.9e, making it incompatible
+ * with standard curses. The simplest fix (to make this work with standard
+ * curses) uses the wbkgdset() function, not used in the original hack.
+ * Turn it off if we're building with 1.9.9e, since it just confuses things.
+ */
+#if defined(NCURSES_VERSION) && defined(_NEED_WRAP) && !defined(GCC_PRINTFLIKE)
+#define OLD_NCURSES 1
+#undef wbkgdset
+#define wbkgdset(w,p) /*nothing*/
+#else
+#define OLD_NCURSES 0
+#endif
+
+#define TR(params) _tracef params
+
#define ESC 27
#define TAB 9
#define MAX_LEN 2048
(void) setlocale (LC_ALL, "");
#endif
+#ifdef TRACE
+ trace(TRACE_CALLS|TRACE_UPDATE);
+#endif
if (argc < 2) {
Usage (argv[0]);
exit (-1);
/* Clear 'residue' of last item */
wattrset (win, menubox_attr);
wmove (win, choice, 0);
+#if OLD_NCURSES
for (i = 0; i < menu_width; i++)
waddch (win, ' ');
+#else
+ wclrtoeol(win);
+#endif
wattrset (win, selected ? item_selected_attr : item_attr);
mvwaddstr (win, choice, item_x, menu_item);
if (hotkey) {
for (i = 0; i < width - 2; i++)
waddch (dialog, ACS_HLINE);
wattrset (dialog, dialog_attr);
+ wbkgdset (dialog, dialog_attr & A_COLOR);
waddch (dialog, ACS_RTEE);
if (title != NULL) {
/* Create window for text region, used for scrolling text */
text = subwin (dialog, height - 4, width - 2, y + 1, x + 1);
+ wattrset (text, dialog_attr);
+ wbkgdset (text, dialog_attr & A_COLOR);
keypad (text, TRUE);
for (i = 0; i < width - 2; i++)
waddch (dialog, ACS_HLINE);
wattrset (dialog, dialog_attr);
+ wbkgdset (dialog, dialog_attr & A_COLOR);
waddch (dialog, ACS_RTEE);
if (title != NULL) {
getyx (win, y, x);
/* Clear 'residue' of previous line */
+#if OLD_NCURSES
for (i = 0; i < width - x; i++)
waddch (win, ' ');
+#else
+ wclrtoeol(win);
+#endif
}
/*
exit (-1);
}
wattrset (win, position_indicator_attr);
+ wbkgdset (win, position_indicator_attr & A_COLOR);
percent = !file_size ?
100 : ((fpos - bytes_read + page - buf) * 100) / file_size;
wmove (win, height - 3, width - 9);