CONFIG_PNP_PARPORT
Some IEEE-1284 conforming parallel-port devices can identify
themselves when requested. Say Y to enable this feature, or M to
- compile it as a module (parport_ieee1284.o). If in doubt, say N.
+ compile it as a module (parport_probe.o). If in doubt, say N.
Enable loadable module support
CONFIG_MODULES
enabled. Those programs that would benefit from disabling this
facility can do it on a per connection basis themselves.
-IP: Drop source routed frames
-CONFIG_IP_NOSR
- Usually, the originator of an IP frame (packet) specifies only the
- destination, and the hosts along the way do the routing, i.e. they
- decide how to forward the frame. However, there is a feature of the
- IP protocol that allows to specify the full route for a given frame
- already at its origin. A frame with such a fully specified route is
- called "source routed". The question now is whether we should honour
- these route requests when such frames arrive, or if we should drop
- all those frames instead. Honouring them can introduce security
- problems (and is rarely a useful feature), and hence it is
- recommended that you say Y here unless you really know what you're
- doing.
-
IP: Allow large windows (not recommended if <16 MB of memory)
CONFIG_SKB_LARGE
On high speed, long distance networks the performance limit on
say M here and read Documentation/modules.txt. The module will be
called initio.o
+Initio 91XXU(W) SCSI support
+CONFIG_SCSI_INITIO
+ This is support for the Initio 91XXU(W) SCSI host adapter.
+ Please read the SCSI-HOWTO, available via FTP (user: anonymous) at
+ ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO.
+
+ If you want to compile this as a module ( = code which can be
+ inserted in and removed from the running kernel whenever you want),
+ say M here and read Documentation/modules.txt. The module will be
+ called initio.o
+
PAS16 SCSI support
CONFIG_SCSI_PAS16
This is support for a SCSI host adapter. It is explained in section
The module will be called pas16.o. If you want to compile it as a
module, say M here and read Documentation/modules.txt.
+Initio INI-A100U2W SCSI support
+CONFIG_SCSI_INIA100
+ This is support for the Initio INI-A100U2W SCSI host adapter.
+ Please read the SCSI-HOWTO, available via FTP (user: anonymous) at
+ ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO.
+
+ If you want to compile this as a module ( = code which can be
+ inserted in and removed from the running kernel whenever you want),
+ say M here and read Documentation/modules.txt. The module will be
+ called a100u2w.o
+
PCI2000 support
CONFIG_SCSI_PCI2000
This is support for the PCI2000I EIDE interface card which acts as a
say M here and read Documentation/modules.txt. The module will be
called NCR53c406.o.
+Symbios Logic sym53c416 support
+CONFIG_SCSI_SYM53C416
+ This is support for the sym53c416 SCSI host adapter. This is the
+ SCSI adapter that comes with some hp scanners. This driver requires that
+ the sym53c416 is configured first using some sort of pnp configuration
+ program (e.g. isapnp) or by a PnP aware BIOS. If you are using isapnp then
+ you need to compile it as a module and then load it using insmod after
+ isapnp has run. The parameters of the configured card(s) should be passed
+ to the driver. The format is:
+
+ insmod sym53c416 sym53c416=<base>,<irq> [sym53c416_1=<base>,<irq>]
+
+ There is support for up to four adapters. 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), say M here and read
+ Documentation/modules.txt.
+
Tekram DC390(T) and Am53/79C974 (PCscsi) SCSI support
CONFIG_SCSI_DC390T
This driver supports PCI SCSI host adapters based on the Am53C974A
here (the module will be called sound.o) if you haven't found a
driver for your sound card above, then pick your driver from the
list below.
+
+Persistent DMA buffers
+CONFIG_SOUND_DMAP
+ Linux can often have problems allocating DMA buffers for ISA cards on
+ machines with more than 16MB of RAM. This is because ISA DMA buffers
+ must exist below the 16MB boundry and it is quite possible that we
+ can't find a large enough free block in this region after the machine
+ has been running for any amount of time. If you say Y here the DMA
+ buffers (64Kb) will be allocated at boot time and kept until the
+ shutdown. This option is only usefull if you say Y to OSS sound
+ modules. If you say M to OSS sound modules then you can just pass to
+ the sound.o module a "dmabuf=1" command-line argument.
+
+ Say Y unless you have 16MB or less RAM or a PCI sound card.
Support for Aztech Sound Galaxy (non-PnP) cards
CONFIG_SOUND_SGALAXY
CONFIG_RADIO_SF16FMI_PORT
Enter the I/O port of your SF16FMI radio card.
+Typhoon Radio
+CONFIG_RADIO_TYPHOON
+ Choose Y here if you have one of these FM radio cards, and then fill
+ in the port address and the frequency used for muting below.
+
+ In order to control your radio card, you will need to use programs
+ that are compatible with the Video for Linux API. Information on
+ this API and pointers to "v4l" programs may be found on the WWW at
+ http://roadrunner.swansea.uk.linux.org/v4l.shtml; to browse the WWW,
+ you need to have access to a machine on the Internet that has a
+ program like lynx or netscape.
+
+ 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),
+ say M here and read Documentation/modules.txt. The module will be
+ called radio-typhoon.o
+
+Support for /proc/radio-typhoon
+CONFIG_RADIO_TYPHOON_PROC_FS
+ Say Y here if you want the typhoon radio card driver to write
+ status information (frequency, volume, muted, mute frequency,
+ base address) to /proc/radio-typhoon. The file can be viewed with
+ your favorite pager (i.e. use "more /proc/radio-typhoon" or "less
+ /proc/radio-typhoon" or simply "cat /proc/radio-typhoon").
+
+Typhoon I/O port (0x316 or 0x336)
+CONFIG_RADIO_TYPHOON_PORT
+ Enter the I/O port of your Typhoon or EcoRadio radio card.
+
+Typhoon frequency set when muting the device (kHz)
+CONFIG_RADIO_TYPHOON_MUTEFREQ
+ Enter the frequency used for muting the radio. The device is never
+ completely silent. If the volume is just turned down, you can still
+ hear silent voices and music. For that reason, the frequency of the
+ radio device is set to the frequency you can enter here whenever
+ the device is muted. There should be no local radio station at that
+ frequency.
+
Zoltrix Radio
CONFIG_RADIO_ZOLTRIX
Choose Y here if you have one of these FM radio cards, and then fill
Documentation/modules.txt. IrLAN emulates an Ethernet and makes it
possible to put up a wireless LAN using infrared beams.
-IrLAN Client Protocol
-CONFIG_IRLAN_CLIENT
- Say Y here if you want to build support for the IrLAN client
- protocol. If you want to compile it as a module, say M here and read
- Documentation/modules.txt. The IrLAN client protocol can be used to
- talk with infrared access points like the HP NetbeamIR, or the ESI
- JetEye NET. You can also connect to another Linux machine running
- the IrLAN server protocol for ad-hoc networking!
-
-IrLAN Server Protocol
-CONFIG_IRLAN_SERVER
- Say Y here if you want to build support for infrared LAN access. If
- you want to compile it as a module, say M here and read
- Documentation/modules.txt. The IrLAN server protocol makes it
- possible to set up a wireless LAN with a machine running the IrLAN
- client protocol. Notice that the IrLAN server protocol currently
- only emulates an access point and does not implement the ad-hoc
- specification of IrLAN, but this will not be noticeable by the user.
+ The IrLAN protocol can be used to talk with infrared access points
+ like the HP NetbeamIR, or the ESI JetEye NET. You can also connect
+ to another Linux machine running the IrLAN protocol for ac-hoc
+ networking!
IrOBEX Protocol
CONFIG_IROBEX
used by IrTTY. To activate support for Tekram dongles you will have
to insert "irattach -d tekram" in the /etc/irda/drivers script.
+Greenwich GIrBIL dongle
+CONFIG_GIRBIL_DONGLE
+ Say Y here if you want to build support for the Greenwich GIrBIL
+ dongle. If you want to compile it as a module, say M here and read
+ Documentation/modules.txt. The Greenwich dongle attaches to the
+ normal 9-pin serial port connector, and can currently only be used
+ by IrTTY. To activate support for Greenwich dongles you will have to
+ insert "irattach -d girbil" in the /etc/irda/drivers script.
+
VME (Motorola and BVM) support
CONFIG_VME
Say Y here if you want to build a kernel for a 680x0 based VME
printk("PCI: Unassigned I/O space for %02x:%02x\n", bus, devfn);
return;
}
- if ((dev->class >> 8) == PCI_CLASS_STORAGE_IDE && idx < 4 ||
- (dev->class >> 8) == PCI_CLASS_DISPLAY_VGA) {
+ if (((dev->class >> 8) == PCI_CLASS_STORAGE_IDE && idx < 4) ||
+ (dev->class >> 8) == PCI_CLASS_DISPLAY_VGA) {
/*
* In case the BIOS didn't assign an address 0--3 to an IDE
* controller, we don't try to fix it as it means "use default
* device.
*/
+#define CALIBRATE_LATCH (5 * LATCH)
+#define CALIBRATE_TIME (5 * 1000020/HZ)
+
__initfunc(static unsigned long calibrate_tsc(void))
{
- unsigned long retval;
+ /* Set the Gate high, disable speaker */
+ outb((inb(0x61) & ~0x02) | 0x01, 0x61);
- __asm__( /* set the Gate high, program CTC channel 2 for mode 0
- * (interrupt on terminal count mode), binary count,
- * load 5 * LATCH count, (LSB and MSB)
- * to begin countdown, read the TSC and busy wait.
- * BTW LATCH is calculated in timex.h from the HZ value
- */
+ /*
+ * Now let's take care of CTC channel 2
+ *
+ * Set the Gate high, program CTC channel 2 for mode 0,
+ * (interrupt on terminal count mode), binary count,
+ * load 5 * LATCH count, (LSB and MSB) to begin countdown.
+ */
+ outb(0xb0, 0x43); /* binary, mode 0, LSB/MSB, Ch 2 */
+ outb(CALIBRATE_LATCH & 0xff, 0x42); /* LSB of count */
+ outb(CALIBRATE_LATCH >> 8, 0x42); /* MSB of count */
+
+ {
+ unsigned long startlow, starthigh;
+ unsigned long endlow, endhigh;
+ unsigned long count;
+
+ __asm__ __volatile__("rdtsc":"=a" (startlow),"=d" (starthigh));
+ count = 0;
+ do {
+ count++;
+ } while ((inb(0x61) & 0x20) == 0);
+ __asm__ __volatile__("rdtsc":"=a" (endlow),"=d" (endhigh));
+
+ last_tsc_low = endlow;
+
+ /* Error: ECTCNEVERSET */
+ if (count <= 1)
+ goto bad_ctc;
+
+ /* 64-bit subtract - gcc just messes up with long longs */
+ __asm__("subl %2,%0\n\t"
+ "sbbl %3,%1"
+ :"=a" (endlow), "=d" (endhigh)
+ :"g" (startlow), "g" (starthigh),
+ "0" (endlow), "1" (endhigh));
+
+ /* Error: ECPUTOOFAST */
+ if (endhigh)
+ goto bad_ctc;
+
+ /* Error: ECPUTOOSLOW */
+ if (endlow <= CALIBRATE_TIME)
+ goto bad_ctc;
+
+ __asm__("divl %2"
+ :"=a" (endlow), "=d" (endhigh)
+ :"r" (endlow), "0" (0), "1" (CALIBRATE_TIME));
+
+ return endlow;
+ }
- /* Set the Gate high, disable speaker */
- "inb $0x61, %%al\n\t" /* Read port */
- "andb $0xfd, %%al\n\t" /* Turn off speaker Data */
- "orb $0x01, %%al\n\t" /* Set Gate high */
- "outb %%al, $0x61\n\t" /* Write port */
-
- /* Now let's take care of CTC channel 2 */
- "movb $0xb0, %%al\n\t" /* binary, mode 0, LSB/MSB, ch 2*/
- "outb %%al, $0x43\n\t" /* Write to CTC command port */
- "movl %1, %%eax\n\t"
- "outb %%al, $0x42\n\t" /* LSB of count */
- "shrl $8, %%eax\n\t"
- "outb %%al, $0x42\n\t" /* MSB of count */
-
- /* Read the TSC; counting has just started */
- "rdtsc\n\t"
- /* Move the value for safe-keeping. */
- "movl %%eax, %%ebx\n\t"
- "movl %%edx, %%ecx\n\t"
-
- /* Busy wait. Only 50 ms wasted at boot time. */
- "0: inb $0x61, %%al\n\t" /* Read Speaker Output Port */
- "testb $0x20, %%al\n\t" /* Check CTC channel 2 output (bit 5) */
- "jz 0b\n\t"
-
- /* And read the TSC. 5 jiffies (50.00077ms) have elapsed. */
- "rdtsc\n\t"
-
- /* Great. So far so good. Store last TSC reading in
- * last_tsc_low (only 32 lsb bits needed) */
- "movl %%eax, last_tsc_low\n\t"
- /* And now calculate the difference between the readings. */
- "subl %%ebx, %%eax\n\t"
- "sbbl %%ecx, %%edx\n\t" /* 64-bit subtract */
- /* but probably edx = 0 at this point (see below). */
- /* Now we have 5 * (TSC counts per jiffy) in eax. We want
- * to calculate TSC->microsecond conversion factor. */
-
- /* Note that edx (high 32-bits of difference) will now be
- * zero iff CPU clock speed is less than 85 GHz. Moore's
- * law says that this is likely to be true for the next
- * 12 years or so. You will have to change this code to
- * do a real 64-by-64 divide before that time's up. */
- "movl %%eax, %%ecx\n\t"
- "xorl %%eax, %%eax\n\t"
- "movl %2, %%edx\n\t"
- "divl %%ecx\n\t" /* eax= 2^32 / (1 * TSC counts per microsecond) */
- /* Return eax for the use of fast_gettimeoffset */
- "movl %%eax, %0\n\t"
- : "=r" (retval)
- : "r" (5 * LATCH), "r" (5 * 1000020/HZ)
- : /* we clobber: */ "ax", "bx", "cx", "dx", "cc", "memory");
- return retval;
+ /*
+ * The CTC wasn't reliable: we got a hit on the very first read,
+ * or the CPU was so fast/slow that the quotient wouldn't fit in
+ * 32 bits..
+ */
+bad_ctc:
+ return 0;
}
__initfunc(void time_init(void))
dodgy_tsc();
if (boot_cpu_data.x86_capability & X86_FEATURE_TSC) {
+ unsigned long tsc_quotient = calibrate_tsc();
+ if (tsc_quotient) {
+ fast_gettimeoffset_quotient = tsc_quotient;
+ use_tsc = 1;
#ifndef do_gettimeoffset
- do_gettimeoffset = do_fast_gettimeoffset;
+ do_gettimeoffset = do_fast_gettimeoffset;
#endif
- do_get_fast_time = do_gettimeofday;
- use_tsc = 1;
- fast_gettimeoffset_quotient = calibrate_tsc();
-
- /* report CPU clock rate in Hz.
- * The formula is (10^6 * 2^32) / (2^32 * 1 / (clocks/us)) =
- * clock/second. Our precision is about 100 ppm.
- */
- { unsigned long eax=0, edx=1000000;
- __asm__("divl %2"
- :"=a" (cpu_hz), "=d" (edx)
- :"r" (fast_gettimeoffset_quotient),
- "0" (eax), "1" (edx));
- printk("Detected %ld Hz processor.\n", cpu_hz);
+ do_get_fast_time = do_gettimeofday;
+
+ /* report CPU clock rate in Hz.
+ * The formula is (10^6 * 2^32) / (2^32 * 1 / (clocks/us)) =
+ * clock/second. Our precision is about 100 ppm.
+ */
+ { unsigned long eax=0, edx=1000000;
+ __asm__("divl %2"
+ :"=a" (cpu_hz), "=d" (edx)
+ :"r" (tsc_quotient),
+ "0" (eax), "1" (edx));
+ printk("Detected %ld Hz processor.\n", cpu_hz);
+ }
}
}
* 97-4-11 Making protocol independent of endianity etc.
* 97-9-13 Cosmetic changes
* 98-5-13 Attempt to make 64-bit-clean on 64-bit machines
+ * 99-1-11 Attempt to make 64-bit-clean on 32-bit machines <ankry@mif.pg.gda.pl>
*
* possible FIXME: make set_sock / set_blksize / set_size / do_it one syscall
* why not: would need verify_area and friends, would share yet another
#define LO_MAGIC 0x68797548
static int nbd_blksizes[MAX_NBD];
+static int nbd_blksize_bits[MAX_NBD];
static int nbd_sizes[MAX_NBD];
-static int nbd_bytesizes[MAX_NBD];
+static u64 nbd_bytesizes[MAX_NBD];
static struct nbd_device nbd_dev[MAX_NBD];
DEBUG("NBD: sending control, ");
request.magic = htonl(NBD_REQUEST_MAGIC);
request.type = htonl(req->cmd);
- request.from = cpu_to_be64( (u64) req->sector * (u64) 512);
+ request.from = cpu_to_be64( (u64) req->sector << 9);
request.len = htonl(req->current_nr_sectors << 9);
memcpy(request.handle, &req, sizeof(req));
unsigned int cmd, unsigned long arg)
{
struct nbd_device *lo;
- int dev, error;
+ int dev, error, temp;
/* Anyone capable of this syscall can do *real bad* things */
lo = &nbd_dev[dev];
switch (cmd) {
case NBD_CLEAR_SOCK:
+ nbd_clear_que(lo);
if (lo->head || lo->tail) {
printk(KERN_ERR "nbd: Some requests are in progress -> can not turn off.\n");
return -EBUSY;
}
return error;
case NBD_SET_BLKSIZE:
- if ((arg & 511) || (arg > PAGE_SIZE))
+ if ((arg & (arg-1)) || (arg < 512) || (arg > PAGE_SIZE))
return -EINVAL;
nbd_blksizes[dev] = arg;
- nbd_sizes[dev] = arg/nbd_blksizes[dev];
+ temp = arg >> 9;
+ nbd_blksize_bits[dev] = 9;
+ while (temp > 1) {
+ nbd_blksize_bits[dev]++;
+ temp >>= 1;
+ }
+ nbd_sizes[dev] = nbd_bytesizes[dev] >> nbd_blksize_bits[dev];
+ nbd_bytesizes[dev] = nbd_sizes[dev] << nbd_blksize_bits[dev];
return 0;
case NBD_SET_SIZE:
- nbd_bytesizes[dev] = arg;
- nbd_sizes[dev] = arg/nbd_blksizes[dev];
+ nbd_sizes[dev] = arg >> nbd_blksize_bits[dev];
+ nbd_bytesizes[dev] = nbd_sizes[dev] << nbd_blksize_bits[dev];
+ return 0;
+ case NBD_SET_SIZE_BLOCKS:
+ nbd_sizes[dev] = arg;
+ nbd_bytesizes[dev] = arg << nbd_blksize_bits[dev];
return 0;
case NBD_DO_IT:
if (!lo->file)
return 0;
#endif
case BLKGETSIZE:
- return put_user(nbd_bytesizes[dev]/512, (long *) arg);
+ return put_user(nbd_bytesizes[dev] << 9, (long *) arg);
}
return -EINVAL;
}
if (dev >= MAX_NBD)
return -ENODEV;
fsync_dev(inode->i_rdev);
+ invalidate_buffers(inode->i_rdev);
lo = &nbd_dev[dev];
if (lo->refcnt <= 0)
printk(KERN_ALERT "nbd_release: refcount(%d) <= 0\n", lo->refcnt);
nbd_dev[i].magic = LO_MAGIC;
nbd_dev[i].flags = 0;
nbd_blksizes[i] = 1024;
- nbd_bytesizes[i] = 0x7fffffff;
- nbd_sizes[i] = nbd_bytesizes[i]/nbd_blksizes[i];
+ nbd_blksize_bits[i] = 10;
+ nbd_bytesizes[i] = 0x7ffffc00; /* 2GB */
+ nbd_sizes[i] = nbd_bytesizes[i] >> nbd_blksize_bits[i];
}
return 0;
}
static void bttv_close(struct video_device *dev)
{
struct bttv *btv=(struct bttv *)dev;
- unsigned long f;
btv->user--;
audio(btv, AUDIO_INTERN);
* which is more than sufficient to be sure.
*/
+ current->state = TASK_UNINTERRUPTIBLE;
schedule_timeout(HZ/10); /* Wait 1/10th of a second */
/*
struct fb_info *info = p->fb_info;
if (softback_top) {
+ int l = fbcon_softback_size / conp->vc_size_row;
if (softback_lines)
fbcon_set_origin(conp);
softback_top = softback_curr = softback_in = softback_buf;
softback_lines = 0;
+
+ if (l > 5)
+ softback_end = softback_buf + l * conp->vc_size_row;
+ else {
+ /* Smaller scrollback makes no sense, and 0 would screw
+ the operation totally */
+ softback_top = 0;
+ }
}
if (logo_shown >= 0) {
struct vc_data *conp2 = vc_cons[logo_shown].d;
int h = op->height;
int size = h;
int i, k;
-#ifndef CONFIG_FBCON_FONTWIDTH8_ONLY
- int j;
-#endif
u8 *new_data, *data = op->data, *p;
#ifdef CONFIG_FBCON_FONTWIDTH8_ONLY
q -= conp->vc_size_row;
scr_memcpyw((u16 *)q, (u16 *)p, conp->vc_size_row);
}
- softback_lines -= i;
softback_in = p;
update_region(unit, conp->vc_origin, logo_lines * conp->vc_cols);
}
{
struct task_struct *p;
uid_t euid=0; /* Save the euid keep the lock short */
+ int ok = 0;
read_lock(&tasklist_lock);
*/
p = find_task_by_pid(pid);
- if(p)
- {
+ if (p) {
euid=p->euid;
+ ok = p->dumpable;
+ if(!cap_issubset(p->cap_permitted, current->cap_permitted))
+ ok=0;
if(!p->mm) /* Scooby scooby doo where are you ? */
p=NULL;
}
case PROC_PID_CPU:
return 0;
}
- if(capable(CAP_DAC_OVERRIDE) || current->fsuid == euid)
+ if(capable(CAP_DAC_OVERRIDE) || (current->fsuid == euid && ok))
return 0;
return 1;
}
struct sock_fprog /* Required for SO_ATTACH_FILTER. */
{
- unsigned int len; /* Number of filter blocks */
- struct sock_filter *filter;
+ unsigned short len; /* Number of filter blocks */
+ struct sock_filter *filter;
};
#ifdef __KERNEL__
#define NBD_CLEAR_SOCK _IO( 0xab, 4 )
#define NBD_CLEAR_QUE _IO( 0xab, 5 )
#define NBD_PRINT_DEBUG _IO( 0xab, 6 )
+#define NBD_SET_SIZE_BLOCKS _IO( 0xab, 7 )
#ifdef MAJOR_NR
#define NBD_REPLY_MAGIC 0x67446698
/* Do *not* use magics: 0x12560953 0x96744668. */
+/*
+ * This is packet used for communication between client and
+ * server. All data are in network byte order.
+ */
struct nbd_request {
u32 magic;
u32 type; /* == READ || == WRITE */
char handle[8];
u64 from;
u32 len;
-};
+}
+#ifdef __GNUC__
+ __attribute__ ((packed))
+#endif
+;
struct nbd_reply {
u32 magic;
return -EINVAL;
if ((len = PAGE_ALIGN(len)) == 0)
- return 0;
+ return -EINVAL;
/* Check if this memory area is ok - put it on the temporary
* list if so.. The checks here are pretty simple --