Commit 92be757d authored by Linus Torvalds's avatar Linus Torvalds

Import 2.3.6pre2

parent 121fc34c
......@@ -829,7 +829,7 @@ S: 14059 Berlin
S: Germany
N: Michael Hipp
E: mhipp@student.uni-tuebingen.de
E: hippm@informatik.uni-tuebingen.de
D: drivers for the racal ni5210 & ni6510 Ethernet-boards
S: Talstr. 1
S: D - 72072 Tuebingen
......
......@@ -67,6 +67,13 @@ arch/i386/mm: dummy
MAKEBOOT = $(MAKE) -C arch/$(ARCH)/boot
vmlinux: arch/i386/vmlinux.lds
arch/i386/vmlinux.lds: arch/i386/vmlinux.lds.S FORCE
gcc -E -C -P -I$(HPATH) -imacros $(HPATH)/asm-i386/page_offset.h -Ui386 arch/i386/vmlinux.lds.S >arch/i386/vmlinux.lds
FORCE: ;
zImage: vmlinux
@$(MAKEBOOT) zImage
......
......@@ -58,12 +58,12 @@ _main:
mov ds,ax
mov ax,#INITSEG
mov es,ax
mov cx,#256
mov cx,#128
sub si,si
sub di,di
cld
rep
movsw
movsd
jmpi go,INITSEG
! ax and es already contain INITSEG
......
......@@ -33,6 +33,10 @@ if [ "$CONFIG_M686" = "y" ]; then
define_bool CONFIG_X86_GOOD_APIC y
fi
choice 'Maximum Physical Memory' \
"1GB CONFIG_1GB \
2GB CONFIG_2GB" 1GB
bool 'Math emulation' CONFIG_MATH_EMULATION
bool 'MTRR (Memory Type Range Register) support' CONFIG_MTRR
bool 'Symmetric multi-processing support' CONFIG_SMP
......
......@@ -21,6 +21,8 @@ CONFIG_X86_BSWAP=y
CONFIG_X86_POPAD_OK=y
CONFIG_X86_TSC=y
CONFIG_X86_GOOD_APIC=y
CONFIG_1GB=y
# CONFIG_2GB is not set
# CONFIG_MATH_EMULATION is not set
# CONFIG_MTRR is not set
CONFIG_SMP=y
......@@ -252,6 +254,11 @@ CONFIG_EEXPRESS_PRO100=y
#
# CONFIG_HAMRADIO is not set
#
# IrDA subsystem support
#
# CONFIG_IRDA is not set
#
# ISDN subsystem
#
......@@ -318,6 +325,7 @@ CONFIG_USB_KBD=y
# CONFIG_USB_AUDIO is not set
# CONFIG_USB_ACM is not set
# CONFIG_USB_PRINTER is not set
# CONFIG_USB_SCSI is not set
#
# Filesystems
......
......@@ -112,21 +112,25 @@ static int mca_default_procfn(char* buf, int slot);
static ssize_t proc_mca_read(struct file*, char*, size_t, loff_t *);
static struct file_operations proc_mca_operations = {
NULL, /* array_lseek */
proc_mca_read, /* array_read */
NULL, /* array_write */
NULL, /* array_readdir */
NULL, /* array_poll */
NULL, /* array_ioctl */
NULL, /* llseek */
proc_mca_read, /* read */
NULL, /* write */
NULL, /* readdir */
NULL, /* poll */
NULL, /* ioctl */
NULL, /* mmap */
NULL, /* no special open code */
NULL, /* open */
NULL, /* flush */
NULL, /* no special release code */
NULL /* can't fsync */
NULL, /* release */
NULL, /* fsync */
NULL, /* fascync */
NULL, /* check_media_change */
NULL, /* revalidate */
NULL /* lock */
};
static struct inode_operations proc_mca_inode_operations = {
&proc_mca_operations, /* default base directory file-ops */
&proc_mca_operations, /* default file-ops */
NULL, /* create */
NULL, /* lookup */
NULL, /* link */
......@@ -142,7 +146,10 @@ static struct inode_operations proc_mca_inode_operations = {
NULL, /* writepage */
NULL, /* bmap */
NULL, /* truncate */
NULL /* permission */
NULL, /* permission */
NULL, /* smap */
NULL, /* updatepage */
NULL /* revalidate */
};
#endif
......@@ -220,18 +227,19 @@ __initfunc(void mca_init(void))
if(!MCA_bus)
return;
printk("Micro Channel bus detected.\n");
save_flags(flags);
cli();
/* Allocate MCA_info structure (at address divisible by 8) */
mca_info = kmalloc(sizeof(struct MCA_info), GFP_KERNEL);
mca_info = (struct MCA_info *)kmalloc(sizeof(struct MCA_info), GFP_KERNEL);
if(mca_info == NULL) {
printk("Failed to allocate memory for mca_info!");
restore_flags(flags);
return;
}
memset(mca_info, 0, sizeof(struct MCA_info));
save_flags(flags);
cli();
/* Make sure adapter setup is off */
......@@ -705,12 +713,15 @@ __initfunc(void mca_do_proc_init(void))
mca_info->slot[i].dev = 0;
if(!mca_isadapter(i)) continue;
node = kmalloc(sizeof(struct proc_dir_entry), GFP_KERNEL);
node = (struct proc_dir_entry *)kmalloc(sizeof(struct proc_dir_entry), GFP_KERNEL);
if(node == NULL) {
printk("Failed to allocate memory for MCA proc-entries!");
return;
}
memset(node, 0, sizeof(struct proc_dir_entry));
if(i < MCA_MAX_SLOT_NR) {
node->low_ino = PROC_MCA_SLOT + i;
node->namelen = sprintf(mca_info->slot[i].procname,
......@@ -854,7 +865,7 @@ static ssize_t proc_mca_read(struct file* file,
type = inode->i_ino;
pid = type >> 16;
type &= 0x0000ffff;
start = 0;
start = NULL;
dp = (struct proc_dir_entry *) inode->u.generic_ip;
length = mca_fill((char *) page, pid, type,
&start, ppos, count);
......@@ -862,7 +873,7 @@ static ssize_t proc_mca_read(struct file* file,
free_page(page);
return length;
}
if(start != 0) {
if(start != NULL) {
/* We have had block-adjusting processing! */
copy_to_user(buf, start, length);
......
......@@ -12,6 +12,8 @@
*
* Force Centaur C6 processors to report MTRR capability.
* Bart Hartgers <bart@etpmod.phys.tue.nl>, May 199.
*
* Intel Mobile Pentium II detection fix. Sean Gilley, June 1999.
*/
/*
......@@ -688,7 +690,7 @@ static struct cpu_model_info cpu_models[] __initdata = {
NULL, NULL, NULL, NULL }},
{ X86_VENDOR_INTEL, 6,
{ "Pentium Pro A-step", "Pentium Pro", NULL, "Pentium II (Klamath)",
NULL, "Pentium II (Deschutes)", "Celeron (Mendocino)", NULL,
NULL, "Pentium II (Deschutes)", "Mobile Pentium II", NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }},
{ X86_VENDOR_AMD, 4,
{ NULL, NULL, NULL, "486 DX/2", NULL, NULL, NULL, "486 DX/2-WB",
......@@ -794,13 +796,19 @@ __initfunc(void identify_cpu(struct cpuinfo_x86 *c))
if (c->x86_model <= 16)
p = cpu_models[i].model_names[c->x86_model];
/* Names for the Pentium II processors */
/* Names for the Pentium II Celeron processors
detectable only by also checking the cache size */
if ((cpu_models[i].vendor == X86_VENDOR_INTEL)
&& (cpu_models[i].x86 == 6)
&& (c->x86_model == 5)
&& (c->x86_cache_size == 0)) {
p = "Celeron (Covington)";
}
&& (cpu_models[i].x86 == 6)){
if(c->x86_model == 6 && c->x86_cache_size == 128) {
p = "Celeron (Mendocino)";
}
else {
if (c->x86_model == 5 && c->x86_cache_size == 0) {
p = "Celeron (Covington)";
}
}
}
}
}
......
......@@ -390,6 +390,7 @@ __initfunc(void mem_init(unsigned long start_mem, unsigned long end_mem))
int datapages = 0;
int initpages = 0;
unsigned long tmp;
unsigned long endbase;
end_mem &= PAGE_MASK;
high_memory = (void *) end_mem;
......@@ -417,8 +418,10 @@ __initfunc(void mem_init(unsigned long start_mem, unsigned long end_mem))
* IBM messed up *AGAIN* in their thinkpad: 0xA0000 -> 0x9F000.
* They seem to have done something stupid with the floppy
* controller as well..
* The amount of available base memory is in WORD 40:13.
*/
while (start_low_mem < 0x9f000+PAGE_OFFSET) {
endbase = PAGE_OFFSET + ((*(unsigned short *)__va(0x413) * 1024) & PAGE_MASK);
while (start_low_mem < endbase) {
clear_bit(PG_reserved, &mem_map[MAP_NR(start_low_mem)].flags);
start_low_mem += PAGE_SIZE;
}
......
/* ld script to make i386 Linux kernel
* Written by Martin Mares <mj@atrey.karlin.mff.cuni.cz>
* Written by Martin Mares <mj@atrey.karlin.mff.cuni.cz>;
*/
OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
OUTPUT_ARCH(i386)
ENTRY(_start)
SECTIONS
{
. = 0xC0000000 + 0x100000;
. = 0xC0000000 + 0x100000;
_text = .; /* Text and read-only data */
.text : {
*(.text)
......
/* ld script to make i386 Linux kernel
* Written by Martin Mares <mj@atrey.karlin.mff.cuni.cz>;
*/
OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
OUTPUT_ARCH(i386)
ENTRY(_start)
SECTIONS
{
. = PAGE_OFFSET_RAW + 0x100000;
_text = .; /* Text and read-only data */
.text : {
*(.text)
*(.fixup)
*(.gnu.warning)
} = 0x9090
.text.lock : { *(.text.lock) } /* out-of-line lock text */
.rodata : { *(.rodata) }
.kstrtab : { *(.kstrtab) }
. = ALIGN(16); /* Exception table */
__start___ex_table = .;
__ex_table : { *(__ex_table) }
__stop___ex_table = .;
__start___ksymtab = .; /* Kernel symbol table */
__ksymtab : { *(__ksymtab) }
__stop___ksymtab = .;
_etext = .; /* End of text section */
.data : { /* Data */
*(.data)
CONSTRUCTORS
}
_edata = .; /* End of data section */
. = ALIGN(8192); /* init_task */
.data.init_task : { *(.data.init_task) }
. = ALIGN(4096); /* Init code and data */
__init_begin = .;
.text.init : { *(.text.init) }
.data.init : { *(.data.init) }
. = ALIGN(4096);
__init_end = .;
. = ALIGN(32);
.data.cacheline_aligned : { *(.data.cacheline_aligned) }
. = ALIGN(4096);
.data.page_aligned : { *(.data.idt) }
__bss_start = .; /* BSS */
.bss : {
*(.bss)
}
_end = . ;
/* Stabs debugging sections. */
.stab 0 : { *(.stab) }
.stabstr 0 : { *(.stabstr) }
.stab.excl 0 : { *(.stab.excl) }
.stab.exclstr 0 : { *(.stab.exclstr) }
.stab.index 0 : { *(.stab.index) }
.stab.indexstr 0 : { *(.stab.indexstr) }
.comment 0 : { *(.comment) }
}
......@@ -176,6 +176,7 @@ source drivers/video/Config.in
endmenu
source drivers/char/Config.in
source drivers/usb/Config.in
source fs/Config.in
mainmenu_option next_comment
......
/* $Id: ioctl32.c,v 1.62 1999/05/01 09:17:44 davem Exp $
/* $Id: ioctl32.c,v 1.62.2.1 1999/06/09 04:53:03 davem Exp $
* ioctl32.c: Conversion between 32bit and 64bit native ioctls.
*
* Copyright (C) 1997 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
......@@ -37,6 +37,7 @@
#include <linux/fb.h>
#include <linux/ext2_fs.h>
#include <linux/videodev.h>
#include <linux/netdevice.h>
#include <scsi/scsi.h>
/* Ugly hack. */
......@@ -417,6 +418,23 @@ struct ifconf32 {
__kernel_caddr_t32 ifcbuf;
};
static int dev_ifname32(unsigned int fd, unsigned long arg)
{
struct device *dev;
struct ifreq32 ifr32;
int err;
if (copy_from_user(&ifr32, (struct ifreq32 *)arg, sizeof(struct ifreq32)))
return -EFAULT;
dev = dev_get_by_index(ifr32.ifr_ifindex);
if (!dev)
return -ENODEV;
err = copy_to_user((struct ifreq32 *)arg, &ifr32, sizeof(struct ifreq32));
return (err ? -EFAULT : 0);
}
static inline int dev_ifconf(unsigned int fd, unsigned long arg)
{
struct ifconf32 ifc32;
......@@ -1687,6 +1705,10 @@ asmlinkage int sys32_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg)
goto out;
}
switch (cmd) {
case SIOCGIFNAME:
error = dev_ifname32(fd, arg);
goto out;
case SIOCGIFCONF:
error = dev_ifconf(fd, arg);
goto out;
......
/*
bttv - Bt848 frame grabber driver
......@@ -545,6 +546,8 @@ static struct tvcard tvcards[] =
{ 3, 4, 0, 2, 0x01e000, { 2, 0, 1, 1}, {0x01c000, 0, 0x018000, 0x014000, 0x002000, 0 }},
/* "Leadtek WinView 601", */
{ 3, 1, 0, 2, 0x8300f8, { 2, 3, 1, 1,0}, {0x4fa007,0xcfa007,0xcfa007,0xcfa007,0xcfa007,0xcfa007}},
/* AVEC Intercapture */
{ 3, 1, 9, 2, 0, { 2, 3, 1, 1}, { 0, 0, 0, 0, 0}},
};
#define TVCARDS (sizeof(tvcards)/sizeof(tvcard))
......@@ -2900,6 +2903,18 @@ static void init_tea6300(struct i2c_bus *bus)
I2CWrite(bus, I2C_TEA6300, TEA6300_SW, 0x01, 1); /* mute off input A */
}
static void init_tea6320(struct i2c_bus *bus)
{
I2CWrite(bus, I2C_TEA6300, TEA6320_V, 0x28, 1); /* master volume */
I2CWrite(bus, I2C_TEA6300, TEA6320_FFL, 0x28, 1); /* volume left 0dB */
I2CWrite(bus, I2C_TEA6300, TEA6320_FFR, 0x28, 1); /* volume right 0dB */
I2CWrite(bus, I2C_TEA6300, TEA6320_FRL, 0x28, 1); /* volume rear left 0dB */
I2CWrite(bus, I2C_TEA6300, TEA6320_FRR, 0x28, 1); /* volume rear right 0dB */
I2CWrite(bus, I2C_TEA6300, TEA6320_BA, 0x11, 1); /* bass 0dB */
I2CWrite(bus, I2C_TEA6300, TEA6320_TR, 0x11, 1); /* treble 0dB */
I2CWrite(bus, I2C_TEA6300, TEA6320_S, TEA6320_S_GMU, 1); /* mute off input A */
}
static void init_tda8425(struct i2c_bus *bus)
{
I2CWrite(bus, I2C_TDA8425, TDA8425_VL, 0xFC, 1); /* volume left 0dB */
......@@ -3027,9 +3042,16 @@ static void idcard(int i)
if (I2CRead(&(btv->i2c), I2C_TEA6300) >=0)
{
if(btv->type==BTTV_AVEC_INTERCAP)
{
printk(KERN_INFO "bttv%d: fader chip: TEA6320\n",btv->nr);
btv->audio_chip = TEA6320;
init_tea6320(&(btv->i2c));
} else {
printk(KERN_INFO "bttv%d: fader chip: TEA6300\n",btv->nr);
btv->audio_chip = TEA6300;
init_tea6300(&(btv->i2c));
}
} else
printk(KERN_INFO "bttv%d: NO fader chip: TEA6300\n",btv->nr);
......@@ -3073,6 +3095,9 @@ static void idcard(int i)
case BTTV_WINVIEW_601:
strcpy(btv->video_dev.name,"BT848(Leadtek WinView 601)");
break;
case BTTV_AVEC_INTERCAP:
strcpy(btv->video_dev.name,"(AVEC Intercapture)");
break;
}
printk("%s\n",btv->video_dev.name);
audio(btv, AUDIO_MUTE);
......
......@@ -211,6 +211,7 @@ struct bttv
#define BTTV_ZOLTRIX 0x0f
#define BTTV_PIXVIEWPLAYTV 0x10
#define BTTV_WINVIEW_601 0x11
#define BTTV_AVEC_INTERCAP 0x12
#define AUDIO_TUNER 0x00
#define AUDIO_RADIO 0x01
......@@ -225,6 +226,7 @@ struct bttv
#define TDA8425 0x02
#define TDA9840 0x03
#define TEA6300 0x04
#define TEA6320 0x05
#define I2C_TSA5522 0xc2
#define I2C_TDA9840 0x84
......@@ -233,7 +235,7 @@ struct bttv
#define I2C_HAUPEE 0xa0
#define I2C_STBEE 0xae
#define I2C_VHX 0xc0
#define I2C_TEA6300 0x80
#define I2C_TEA6300 0x80 /* same as TEA6320 */
#define TDA9840_SW 0x00
#define TDA9840_LVADJ 0x02
......@@ -261,6 +263,22 @@ struct bttv
#define TEA6300_FA 0x04 /* fader control */
#define TEA6300_SW 0x05 /* mute and source switch */
#define TEA6320_V 0x00
#define TEA6320_FFR 0x01 /* volume front right */
#define TEA6320_FFL 0x02 /* volume front left */
#define TEA6320_FRR 0x03 /* volume rear right */
#define TEA6320_FRL 0x04 /* volume rear left */
#define TEA6320_BA 0x05 /* bass */
#define TEA6320_TR 0x06 /* treble */
#define TEA6320_S 0x07 /* switch register */
/* values for those registers: */
#define TEA6320_S_SA 0x01 /* stereo A input */
#define TEA6320_S_SB 0x02 /* stereo B */
#define TEA6320_S_SC 0x04 /* stereo C */
#define TEA6320_S_GMU 0x80 /* general mute */
#define PT2254_L_CHANEL 0x10
#define PT2254_R_CHANEL 0x08
#define PT2254_DBS_IN_2 0x400
......
/* cadet.c - A video4linux driver for the ADS Cadet AM/FM Radio Card
*
* by Fred Gleason <fredg@wava.com>
* Version 0.3.1
* Version 0.3.2
*
* (Loosely) based on code for the Aztech radio card by
*
......@@ -557,7 +557,7 @@ __initfunc(int cadet_init(struct video_init *v))
return -EINVAL;
request_region(io,2,"cadet");
printk(KERN_INFO "ADS Cadet Radio Card at %x\n",io);
printk(KERN_INFO "ADS Cadet Radio Card at 0x%x\n",io);
return 0;
}
......@@ -570,12 +570,11 @@ static int cadet_probe(void)
for(i=0;i<8;i++) {
io=iovals[i];
if(check_region(io,2)) {
return -1;
}
cadet_setfreq(1410);
if(cadet_getfreq()==1410) {
return io;
if(check_region(io,2)>=0) {
cadet_setfreq(1410);
if(cadet_getfreq()==1410) {
return io;
}
}
}
return -1;
......
......@@ -84,7 +84,9 @@ static struct tunertype tuners[] = {
// 16*170.00,16*450.00,0xa0,0x90,0x30,0x8e,0xc2,623},
16*170.00,16*450.00,0x02,0x04,0x01,0x8e,0xc2,623},
{"Temic 4036 FY5 NTSC", TEMIC, NTSC,
16*157.25,16*463.25,0xa0,0x90,0x30,0x8e,0xc2,732},
16*157.25,16*463.25,0xa0,0x90,0x30,0x8e,0xc2,732},
{"Alps HSBH1", TEMIC, NTSC,
16*137.25,16*385.25,0x01,0x02,0x08,0x8e,0xc2,732},
};
/* ---------------------------------------------------------------------- */
......
......@@ -31,6 +31,7 @@
#define TUNER_TEMIC_NTSC 6
#define TUNER_TEMIC_PAL_I 7
#define TUNER_TEMIC_4036FY5_NTSC 8
#define TUNER_ALPS_TSBH1_NTSC 9
#define NOTUNER 0
#define PAL 1
......
......@@ -1009,6 +1009,7 @@ vortex_start_xmit(struct sk_buff *skb, struct device *dev)
outb(0x00, ioaddr + TxStatus); /* Pop the status stack. */
}
}
vp->stats.tx_bytes+=skb->len;
return 0;
}
......@@ -1209,6 +1210,7 @@ vortex_rx(struct device *dev)
netif_rx(skb);
dev->last_rx = jiffies;
vp->stats.rx_packets++;
vp->stats.rx_bytes+=skb->len;
/* Wait a limited time to go to next packet. */
for (i = 200; i >= 0; i--)
if ( ! (inw(ioaddr + EL3_STATUS) & CmdInProgress))
......@@ -1256,6 +1258,7 @@ boomerang_rx(struct device *dev)
short pkt_len = rx_status & 0x1fff;
struct sk_buff *skb;
vp->stats.rx_bytes+=pkt_len;
if (vortex_debug > 4)
printk("Receiving packet size %d status %4.4x.\n",
pkt_len, rx_status);
......
/* $Id: cosa.c,v 1.21 1999/02/06 19:49:18 kas Exp $ */
/* $Id: cosa.c,v 1.24 1999/05/28 17:28:34 kas Exp $ */
/*
* Copyright (C) 1995-1997 Jan "Yenya" Kasprzak <kas@fi.muni.cz>
......@@ -75,6 +75,10 @@
* The Comtrol Hostess SV11 driver by Alan Cox
* The Sync PPP/Cisco HDLC layer (syncppp.c) ported to Linux by Alan Cox
*/
/*
* 5/25/1999 : Marcelo Tosatti <marcelo@conectiva.com.br>
* fixed a deadlock in cosa_sppp_open
*/
/* ---------- Headers, macros, data structures ---------- */
......@@ -1265,8 +1269,10 @@ static void put_driver_status(struct cosa_data *cosa)
debug_status_out(cosa, 0);
#endif
}
cosa_putdata8(cosa, 0);
cosa_putdata8(cosa, status);
#ifdef DEBUG_IO
debug_data_cmd(cosa, 0);
debug_data_cmd(cosa, status);
#endif
}
......@@ -1659,6 +1665,7 @@ static inline void tx_interrupt(struct cosa_data *cosa, int status)
printk(KERN_WARNING
"%s: No channel wants data in TX IRQ\n",
cosa->name);
put_driver_status_nolock(cosa);
clear_bit(TXBIT, &cosa->rxtx);
spin_unlock_irqrestore(&cosa->lock, flags);
return;
......
......@@ -739,7 +739,7 @@ net_send_packet(struct sk_buff *skb, struct device *dev)
if (tickssofar < 5)
return 1;
if (net_debug > 0) printk("%s: transmit timed out, %s?\n", dev->name,
tx_done(dev) ? "IRQ conflict" : "network cable problem");
tx_done(dev) ? "IRQ conflict ?" : "network cable problem");
/* Try to restart the adaptor. */
dev->tbusy=0;
dev->trans_start = jiffies;
......
......@@ -10,6 +10,7 @@ dep_tristate 'NSC PC87108' CONFIG_NSC_FIR $CONFIG_IRDA
dep_tristate 'Winbond W83977AF (IR)' CONFIG_WINBOND_FIR $CONFIG_IRDA
dep_tristate 'Sharp UIRCC' CONFIG_SHARP_FIR $CONFIG_IRDA
dep_tristate 'Toshiba Type-O IR Port' CONFIG_TOSHIBA_FIR $CONFIG_IRDA
dep_tristate 'SMC IrCC' CONFIG_SMC_IRCC_FIR $CONFIG_IRDA
comment 'Dongle support'
bool 'Serial dongle support' CONFIG_DONGLE
......
......@@ -28,6 +28,22 @@ else
endif
endif
ifeq ($(CONFIG_IRPORT_SIR),y)
L_OBJS += irport.o
else
ifeq ($(CONFIG_IRPORT_SIR),m)
M_OBJS += irport.o
endif
endif
ifeq ($(CONFIG_IRPORT_SIR),y)
L_OBJS += irport.o
else
ifeq ($(CONFIG_IRPORT_SIR),m)
M_OBJS += irport.o
endif
endif
ifeq ($(CONFIG_NSC_FIR),y)
L_OBJS += pc87108.o
else
......@@ -60,6 +76,30 @@ else
endif
endif
ifeq ($(CONFIG_TOSHIBA_FIR),y)
L_OBJS += toshoboe.o
else
ifeq ($(CONFIG_TOSHIBA_FIR),m)
M_OBJS += toshoboe.o
endif
endif
ifeq ($(CONFIG_TOSHIBA_FIR),y)
L_OBJS += toshoboe.o
else
ifeq ($(CONFIG_TOSHIBA_FIR),m)
M_OBJS += toshoboe.o
endif
endif
ifeq ($(CONFIG_SMC_IRCC_FIR),y)
L_OBJS += irport.o smc-ircc.o
else
ifeq ($(CONFIG_SMC_IRCC_FIR),m)
M_OBJS += irport.o smc-ircc.o
endif
endif
ifeq ($(CONFIG_ESI_DONGLE),y)
L_OBJS += esi.o
else
......@@ -100,6 +140,22 @@ else
endif
endif
ifeq ($(CONFIG_LITELINK_DONGLE),y)
L_OBJS += litelink.o
else
ifeq ($(CONFIG_LITELINK_DONGLE),m)
M_OBJS += litelink.o
endif
endif
ifeq ($(CONFIG_LITELINK_DONGLE),y)
L_OBJS += litelink.o
else
ifeq ($(CONFIG_LITELINK_DONGLE),m)
M_OBJS += litelink.o
endif
endif
include $(TOPDIR)/Rules.make
clean:
......
......@@ -7,7 +7,7 @@
* Status: Experimental.
* Author: Dag Brattli <dagb@cs.uit.no>
* Created at: Wed Oct 21 20:02:35 1998
* Modified at: Mon May 10 15:12:54 1999
* Modified at: Sun May 16 14:35:11 1999
* Modified by: Dag Brattli <dagb@cs.uit.no>
*
* Copyright (c) 1998-1999 Dag Brattli, All Rights Reserved.
......@@ -29,20 +29,15 @@
#include <linux/sched.h>
#include <linux/init.h>
#include <asm/ioctls.h>
#include <asm/segment.h>
#include <asm/uaccess.h>
#include <net/irda/irda.h>
#include <net/irda/irmod.h>
#include <net/irda/irda_device.h>
#include <net/irda/dongle.h>
static void actisys_reset(struct irda_device *dev, int unused);
static void actisys_reset(struct irda_device *dev);
static void actisys_open(struct irda_device *idev, int type);
static void actisys_close(struct irda_device *dev);
static void actisys_change_speed( struct irda_device *dev, int baudrate);
static void actisys_reset(struct irda_device *dev, int unused);
static void actisys_init_qos(struct irda_device *idev, struct qos_info *qos);
/* These are the baudrates supported */
......@@ -169,7 +164,7 @@ static void actisys_change_speed(struct irda_device *idev, int baudrate)
* 1. Clear DTR for a few ms.
*
*/
static void actisys_reset(struct irda_device *idev, int unused)
static void actisys_reset(struct irda_device *idev)
{
ASSERT(idev != NULL, return;);
ASSERT(idev->magic == IRDA_DEVICE_MAGIC, return;);
......
......@@ -6,7 +6,7 @@
* Status: Experimental.
* Author: Thomas Davis, <ratbert@radiks.net>
* Created at: Sat Feb 21 18:54:38 1998
* Modified at: Mon May 10 15:13:12 1999
* Modified at: Sun May 16 14:35:21 1999
* Modified by: Dag Brattli <dagb@cs.uit.no>
* Sources: esi.c
*
......@@ -31,10 +31,6 @@
#include <linux/sched.h>
#include <linux/init.h>
#include <asm/ioctls.h>
#include <asm/segment.h>
#include <asm/uaccess.h>
#include <net/irda/irda.h>
#include <net/irda/irmod.h>
#include <net/irda/irda_device.h>
......@@ -44,7 +40,7 @@
static void esi_open(struct irda_device *idev, int type);
static void esi_close(struct irda_device *driver);
static void esi_change_speed(struct irda_device *idev, int baud);
static void esi_reset(struct irda_device *idev, int unused);
static void esi_reset(struct irda_device *idev);
static void esi_qos_init(struct irda_device *idev, struct qos_info *qos);
static struct dongle dongle = {
......@@ -116,7 +112,7 @@ static void esi_change_speed(struct irda_device *idev, int baud)
irda_device_set_dtr_rts(idev, dtr, rts);
}
static void esi_reset( struct irda_device *idev, int unused)
static void esi_reset( struct irda_device *idev)
{
/* Empty */
}
......
......@@ -6,7 +6,7 @@
* Status: Experimental.
* Author: Dag Brattli <dagb@cs.uit.no>
* Created at: Sat Feb 6 21:02:33 1999
* Modified at: Mon May 10 16:01:33 1999
* Modified at: Tue Jun 1 08:47:41 1999
* Modified by: Dag Brattli <dagb@cs.uit.no>
*
* Copyright (c) 1999 Dag Brattli, All Rights Reserved.
......@@ -28,17 +28,13 @@
#include <linux/sched.h>
#include <linux/init.h>
#include <asm/ioctls.h>
#include <asm/segment.h>
#include <asm/uaccess.h>
#include <net/irda/irda.h>
#include <net/irda/irmod.h>
#include <net/irda/irda_device.h>
#include <net/irda/irtty.h>
#include <net/irda/dongle.h>
static void girbil_reset(struct irda_device *dev, int unused);
static void girbil_reset(struct irda_device *dev);
static void girbil_open(struct irda_device *dev, int type);
static void girbil_close(struct irda_device *dev);
static void girbil_change_speed(struct irda_device *dev, int baud);
......@@ -165,7 +161,7 @@ static void girbil_change_speed(struct irda_device *idev, int speed)
* 0. set RTS, and wait at least 5 ms
* 1. clear RTS
*/
void girbil_reset(struct irda_device *idev, int unused)
void girbil_reset(struct irda_device *idev)
{
__u8 control = GIRBIL_TXEN | GIRBIL_RXEN;
......@@ -177,22 +173,26 @@ void girbil_reset(struct irda_device *idev, int unused)
/* Sleep at least 5 ms */
current->state = TASK_INTERRUPTIBLE;
schedule_timeout(2);
schedule_timeout(MSECS_TO_JIFFIES(20));
/* Set DTR and clear RTS to enter command mode */
irda_device_set_dtr_rts(idev, FALSE, TRUE);
current->state = TASK_INTERRUPTIBLE;
schedule_timeout(2);
schedule_timeout(MSECS_TO_JIFFIES(20));
/* Write control byte */
irda_device_raw_write(idev, &control, 1);
current->state = TASK_INTERRUPTIBLE;
schedule_timeout(2);
schedule_timeout(MSECS_TO_JIFFIES(20));
/* Go back to normal mode */
irda_device_set_dtr_rts(idev, TRUE, TRUE);
/* Make sure the IrDA chip also goes to defalt speed */
if (idev->change_speed)
idev->change_speed(idev, 9600);
}
/*
......@@ -204,7 +204,7 @@ void girbil_reset(struct irda_device *idev, int unused)
static void girbil_init_qos(struct irda_device *idev, struct qos_info *qos)
{
qos->baud_rate.bits &= IR_9600|IR_19200|IR_38400|IR_57600|IR_115200;
qos->min_turn_time.bits &= 0xfe; /* All except 0 ms */
qos->min_turn_time.bits &= 0x03;
}
#ifdef MODULE
......
This diff is collapsed.
......@@ -6,7 +6,7 @@
* Status: Stable
* Author: Dag Brattli <dagb@cs.uit.no>
* Created at: Fri May 7 12:50:33 1999
* Modified at: Mon May 10 15:12:18 1999
* Modified at: Wed May 19 07:25:15 1999
* Modified by: Dag Brattli <dagb@cs.uit.no>
*
* Copyright (c) 1999 Dag Brattli, All Rights Reserved.
......@@ -33,19 +33,19 @@
#include <linux/tty.h>
#include <linux/sched.h>
#include <linux/init.h>
#include <asm/ioctls.h>
#include <asm/uaccess.h>
#include <net/irda/irda.h>
#include <net/irda/irmod.h>
#include <net/irda/irda_device.h>
#include <net/irda/dongle.h>
static void litelink_reset(struct irda_device *dev, int unused);
#define MIN_DELAY 25 /* 15 us, but wait a little more to be sure */
#define MAX_DELAY 10000 /* 1 ms */
static void litelink_open(struct irda_device *idev, int type);
static void litelink_close(struct irda_device *dev);
static void litelink_change_speed( struct irda_device *dev, int baudrate);
static void litelink_reset(struct irda_device *dev, int unused);
static void litelink_change_speed(struct irda_device *dev, int baudrate);
static void litelink_reset(struct irda_device *dev);
static void litelink_init_qos(struct irda_device *idev, struct qos_info *qos);
/* These are the baudrates supported */
......@@ -105,13 +105,13 @@ static void litelink_change_speed(struct irda_device *idev, int baudrate)
irda_device_set_dtr_rts(idev, TRUE, FALSE);
/* Sleep a minimum of 15 us */
udelay(15);
udelay(MIN_DELAY);
/* Go back to normal mode */
irda_device_set_dtr_rts(idev, TRUE, TRUE);
/* Sleep a minimum of 15 us */
udelay(15);
udelay(MIN_DELAY);
/* Cycle through avaiable baudrates until we reach the correct one */
for (i=0; i<5 && baud_rates[i] != baudrate; i++) {
......@@ -120,13 +120,13 @@ static void litelink_change_speed(struct irda_device *idev, int baudrate)
irda_device_set_dtr_rts(idev, FALSE, TRUE);
/* Sleep a minimum of 15 us */
udelay(15);
udelay(MIN_DELAY);
/* Set DTR, Set RTS */
irda_device_set_dtr_rts(idev, TRUE, TRUE);
/* Sleep a minimum of 15 us */
udelay(15);
udelay(MIN_DELAY);
}
}
......@@ -137,11 +137,8 @@ static void litelink_change_speed(struct irda_device *idev, int baudrate)
* called with a process context!
*
*/
static void litelink_reset(struct irda_device *idev, int unused)
static void litelink_reset(struct irda_device *idev)
{
struct irtty_cb *self;
struct tty_struct *tty;
ASSERT(idev != NULL, return;);
ASSERT(idev->magic == IRDA_DEVICE_MAGIC, return;);
......@@ -149,19 +146,19 @@ static void litelink_reset(struct irda_device *idev, int unused)
irda_device_set_dtr_rts(idev, TRUE, TRUE);
/* Sleep a minimum of 15 us */
udelay(15);
udelay(MIN_DELAY);
/* Clear RTS to reset dongle */
irda_device_set_dtr_rts(idev, TRUE, FALSE);
/* Sleep a minimum of 15 us */
udelay(15);
udelay(MIN_DELAY);
/* Go back to normal mode */
irda_device_set_dtr_rts(idev, TRUE, TRUE);
/* Sleep a minimum of 15 us */
udelay(15);
udelay(MIN_DELAY);
/* This dongles speed defaults to 115200 bps */
idev->qos.baud_rate.value = 115200;
......@@ -173,7 +170,7 @@ static void litelink_reset(struct irda_device *idev, int unused)
* Initialize QoS capabilities
*
*/
static void litelink_init_qos( struct irda_device *idev, struct qos_info *qos)
static void litelink_init_qos(struct irda_device *idev, struct qos_info *qos)
{
qos->baud_rate.bits &= IR_9600|IR_19200|IR_38400|IR_57600|IR_115200;
qos->min_turn_time.bits &= 0x40; /* Needs 0.01 ms */
......
This diff is collapsed.
This diff is collapsed.
/*********************************************************************
*
* Filename: tekram.c
* Version: 1.1
* Version: 1.2
* Description: Implementation of the Tekram IrMate IR-210B dongle
* Status: Experimental.
* Author: Dag Brattli <dagb@cs.uit.no>
* Created at: Wed Oct 21 20:02:35 1998
* Modified at: Mon May 10 16:10:17 1999
* Modified at: Sun May 16 14:33:42 1999
* Modified by: Dag Brattli <dagb@cs.uit.no>
*
* Copyright (c) 1998-1999 Dag Brattli, All Rights Reserved.
......@@ -28,16 +28,12 @@
#include <linux/sched.h>
#include <linux/init.h>
#include <asm/ioctls.h>
#include <asm/segment.h>
#include <asm/uaccess.h>
#include <net/irda/irda.h>
#include <net/irda/irda_device.h>
#include <net/irda/irtty.h>
#include <net/irda/dongle.h>
static void tekram_reset(struct irda_device *dev, int unused);
static void tekram_reset(struct irda_device *dev);
static void tekram_open(struct irda_device *dev, int type);
static void tekram_close(struct irda_device *dev);
static void tekram_change_speed(struct irda_device *dev, int baud);
......@@ -49,7 +45,7 @@ static void tekram_init_qos(struct irda_device *idev, struct qos_info *qos);
#define TEKRAM_19200 0x03
#define TEKRAM_9600 0x04
#define TEKRAM_PW 0x10 /* Pulse select bit */
#define TEKRAM_PW 0x10 /* Pulse select bit */
static struct dongle dongle = {
TEKRAM_DONGLE,
......@@ -112,7 +108,7 @@ static void tekram_change_speed(struct irda_device *idev, int baud)
ASSERT(idev != NULL, return;);
ASSERT(idev->magic == IRDA_DEVICE_MAGIC, return;);
switch (baud) {
default:
case 9600:
......@@ -121,7 +117,7 @@ static void tekram_change_speed(struct irda_device *idev, int baud)
case 19200:
byte = TEKRAM_PW|TEKRAM_19200;
break;
case 34800:
case 38400:
byte = TEKRAM_PW|TEKRAM_38400;
break;
case 57600:
......@@ -132,6 +128,9 @@ static void tekram_change_speed(struct irda_device *idev, int baud)
break;
}
/* Need to reset the dongle and go to 9600 bps before programming */
tekram_reset(idev);
/* Set DTR, Clear RTS */
irda_device_set_dtr_rts(idev, TRUE, FALSE);
......@@ -162,7 +161,7 @@ static void tekram_change_speed(struct irda_device *idev, int baud)
* 3. clear DTR to SPACE state, wait at least 50 us for further
* operation
*/
void tekram_reset(struct irda_device *idev, int unused)
void tekram_reset(struct irda_device *idev)
{
ASSERT(idev != NULL, return;);
ASSERT(idev->magic == IRDA_DEVICE_MAGIC, return;);
......@@ -185,8 +184,10 @@ void tekram_reset(struct irda_device *idev, int unused)
irda_device_set_dtr_rts(idev, TRUE, TRUE);
udelay(50);
/* Finished! */
/* Make sure the IrDA chip also goes to defalt speed */
if (idev->change_speed)
idev->change_speed(idev, 9600);
}
/*
......
......@@ -7,7 +7,7 @@
* Status: Experimental.
* Author: Dag Brattli <dagb@cs.uit.no>
* Created at: Sat Dec 26 10:59:03 1998
* Modified at: Mon May 10 22:11:09 1999
* Modified at: Wed May 19 15:29:56 1999
* Modified by: Dag Brattli <dagb@cs.uit.no>
*
* Copyright (c) 1998-1999 Dag Brattli, All Rights Reserved.
......@@ -216,7 +216,7 @@ static int uircc_open(int i, unsigned int iobase, unsigned int iobase2,
idev->netdev.open = uircc_net_open;
idev->netdev.stop = uircc_net_close;
irport_start(iobase2);
irport_start(idev, iobase2);
/* Open the IrDA device */
irda_device_open(idev, driver_name, self);
......@@ -251,7 +251,7 @@ static int uircc_close(struct irda_device *idev)
/* Disable modem */
outb(0x00, iobase+UIRCC_CR10);
irport_stop(idev->io.iobase2);
irport_stop(idev, idev->io.iobase2);
/* Release the PORT that this driver is using */
DEBUG(4, __FUNCTION__ "(), Releasing Region %03x\n", idev->io.iobase);
......@@ -350,7 +350,7 @@ static void uircc_change_speed(struct irda_device *idev, int speed)
case 37600:
case 57600:
case 115200:
irport_start(idev->io.iobase2);
irport_start(idev, idev->io.iobase2);
irport_change_speed(idev, speed);
/* Some magic to disable FIR and enable SIR */
......@@ -367,7 +367,7 @@ static void uircc_change_speed(struct irda_device *idev, int speed)
DEBUG(0, __FUNCTION__ "(), handling baud of 1152000\n");
break;
case 4000000:
irport_stop(idev->io.iobase2);
irport_stop(idev, idev->io.iobase2);
/* Some magic to disable SIR and enable FIR */
uircc_toshiba_cmd(&status, 0xffff, 0x001b, 0x0001);
......
......@@ -6,7 +6,7 @@
* Status: Experimental.
* Author: Paul VanderSpek
* Created at: Wed Nov 4 11:46:16 1998
* Modified at: Thu May 13 08:03:27 1999
* Modified at: Fri May 21 22:18:19 1999
* Modified by: Dag Brattli <dagb@cs.uit.no>
*
* Copyright (c) 1998-1999 Dag Brattli <dagb@cs.uit.no>
......@@ -80,8 +80,6 @@ static unsigned int dma[] =
static struct w83977af_ir *dev_self[] = { NULL, NULL, NULL, NULL};
static struct st_fifo_entry prev;
/* Some prototypes */
static int w83977af_open(int i, unsigned int iobase, unsigned int irq,
unsigned int dma);
......@@ -113,8 +111,6 @@ __initfunc(int w83977af_init(void))
DEBUG(0, __FUNCTION__ "()\n");
prev.status = 0;
for (i=0; (io[i] < 2000) && (i < 4); i++) {
int ioaddr = io[i];
if (check_region(ioaddr, CHIP_IO_EXTENT) < 0)
......
......@@ -5,7 +5,7 @@
* same Gnu Public License that covers that work.
*
* Alphacode 0.82 (96/09/29) for Linux 2.0.0 (or later)
* Copyrights (c) 1994,1995,1996 by M.Hipp (Michael.Hipp@student.uni-tuebingen.de)
* Copyrights (c) 1994,1995,1996 by M.Hipp (hippm@informatik.uni-tuebingen.de)
* [feel free to mail ....]
*
* when using as module: (no autoprobing!)
......
......@@ -4,7 +4,7 @@
* This is an extension to the Linux operating system, and is covered by the
* same Gnu Public License that covers that work.
*
* copyrights (c) 1994 by Michael Hipp (mhipp@student.uni-tuebingen.de)
* copyrights (c) 1994 by Michael Hipp (hippm@informatik.uni-tuebingen.de)
*
* I have done a look in the following sources:
* crynwr-packet-driver by Russ Nelson
......
......@@ -16,7 +16,7 @@
*
* comments/bugs/suggestions can be sent to:
* Michael Hipp
* email: Michael.Hipp@student.uni-tuebingen.de
* email: hippm@informatik.uni-tuebingen.de
*
* sources:
* some things are from the 'ni6510-packet-driver for dos by Russ Nelson'
......@@ -45,6 +45,7 @@
*/
/*
* 99.Jun.8: added support for /proc/net/dev byte count for xosview (HK)
* 96.Sept.29: virt_to_bus stuff added for new memory modell
* 96.April.29: Added Harald Koenig's Patches (MH)
* 96.April.13: enhanced error handling .. more tests (MH)
......@@ -966,8 +967,10 @@ static void ni65_xmit_intr(struct device *dev,int csr0)
p->stats.tx_errors++;
tmdp->status2 = 0;
}
else
else {
p->stats.tx_bytes -= (short)(tmdp->blen);
p->stats.tx_packets++;
}
#ifdef XMT_VIA_SKB
if(p->tmd_skb[p->tmdlast]) {
......@@ -1054,6 +1057,7 @@ static void ni65_recv_intr(struct device *dev,int csr0)
eth_copy_and_sum(skb, (unsigned char *) p->recvbounce[p->rmdnum],len,0);
#endif
p->stats.rx_packets++;
p->stats.rx_bytes += len;
skb->protocol=eth_type_trans(skb,dev);
netif_rx(skb);
}
......
......@@ -670,8 +670,8 @@ int scan_scsis_single (int channel, int dev, int lun, int *max_dev_lun,
SCpnt->request.rq_status = RQ_SCSI_BUSY;
spin_lock_irq(&io_request_lock);
scsi_do_cmd (SCpnt, (void *) scsi_cmd,
(void *) scsi_result,
256, scan_scsis_done, SCSI_TIMEOUT + 4 * HZ, 5);
(void *) NULL,
0, scan_scsis_done, SCSI_TIMEOUT + 4 * HZ, 5);
spin_unlock_irq(&io_request_lock);
down (&sem);
SCpnt->request.sem = NULL;
......
......@@ -1729,7 +1729,7 @@ static int fop_revalidate_scsidisk(kdev_t dev){
static void sd_detach(Scsi_Device * SDp)
{
Scsi_Disk * dpnt;
int i;
int i, j;
int max_p;
int start;
......@@ -1741,8 +1741,8 @@ static void sd_detach(Scsi_Device * SDp)
max_p = sd_gendisk.max_p;
start = i << sd_gendisk.minor_shift;
for (i=max_p - 1; i >=0 ; i--) {
int index = start+i;
for (j=max_p - 1; j >=0 ; j--) {
int index = start+j;
kdev_t devi = MKDEV_SD_PARTITION(index);
struct super_block *sb = get_super(devi);
sync_dev(devi);
......@@ -1759,7 +1759,7 @@ static void sd_detach(Scsi_Device * SDp)
SDp->attached--;
sd_template.dev_noticed--;
sd_template.nr_dev--;
SD_GENDISK(start).nr_real--;
SD_GENDISK(i).nr_real--;
return;
}
return;
......
This diff is collapsed.
......@@ -8,6 +8,7 @@ difficult to maintain, add yourself with a patch if desired.
Johannes Erdfelt <jerdfelt@sventech.com>
ham <ham@unsuave.com>
Bradley M Keryan <keryan@andrew.cmu.edu>
Paul Mackerras <paulus@cs.anu.edu.au>
Vojtech Pavlik <vojtech@twilight.ucw.cz>
Gregory P. Smith <greg@electricrain.com>
Linus Torvalds <torvalds@transmeta.com>
......
......@@ -29,7 +29,11 @@ if [ ! "$CONFIG_USB" = "n" ]; then
dep_tristate 'USB keyboard support' CONFIG_USB_KBD $CONFIG_USB
dep_tristate 'USB audio parsing support' CONFIG_USB_AUDIO $CONFIG_USB
dep_tristate 'USB Abstract Control Model support' CONFIG_USB_ACM $CONFIG_USB
dep_tristate 'Preliminary USB Printer support' CONFIG_USB_PRINTER $CONFIG_USB
dep_tristate 'USB Printer support' CONFIG_USB_PRINTER $CONFIG_USB
dep_tristate 'USB SCSI Support' CONFIG_USB_SCSI $CONFIG_USB
if [ "$CONFIG_USB_SCSI" != "n" ]; then
dep_tristate ' USB SCSI verbose debug' CONFIG_USB_SCSI_DEBUG $CONFIG_USB_SCSI
fi
fi
endmenu
......@@ -109,6 +109,13 @@ ifeq ($(CONFIG_USB_CPIA),m)
MIX_OBJS += cpia.o
endif
ifeq ($(CONFIG_USB_SCSI),y)
L_OBJS += usb_scsi.o
ifeq ($(CONFIG_USB_SCSI_DEBUG),y)
L_OBJS += usb_scsi_debug.o
endif
endif
include $(TOPDIR)/Rules.make
keymap.o: keymap.c
......@@ -116,8 +123,17 @@ keymap.o: keymap.c
keymap.c: maps/serial.map maps/usb.map maps/fixup.map
./mkmap > $@
keymap-mac.o: keymap-mac.c
keymap-mac.c: maps/mac.map maps/usb.map
./mkmap.adb > $@
ifneq ($(CONFIG_MAC_KEYBOARD),y)
usb-keyboard.o: keymap.o keyboard.o
$(LD) $(LD_RFLAG) -r -o $@ keymap.o keyboard.o
else
usb-keyboard.o: keymap-mac.o keyboard.o
$(LD) $(LD_RFLAG) -r -o $@ keymap-mac.o keyboard.o
endif
usb-uhci.o: uhci.o uhci-debug.o
$(LD) $(LD_RFLAG) -r -o $@ uhci.o uhci-debug.o
......
June 08, 1999 01:23:34
Paul Mackerras went through the OHCI (& USB code) to fix most of the
endianness issues so that the code now works on Linux-PPC. He also
simplified add_td_to_ed to be simpler & atomic to the hardware.
May 16, 1999 16:20:54
EDs are now allocated dynamically from their device's pool. Root hub
......
......@@ -241,8 +241,8 @@ static void usb_hub_port_connect_change(struct usb_device *hub, int port)
return;
}
portstatus = *((unsigned short *)buf + 0);
portchange = *((unsigned short *)buf + 1);
portstatus = le16_to_cpup((unsigned short *)buf + 0);
portchange = le16_to_cpup((unsigned short *)buf + 1);
if ((!(portstatus & USB_PORT_STAT_CONNECTION)) &&
(!(portstatus & USB_PORT_STAT_ENABLE))) {
......@@ -294,8 +294,8 @@ static void usb_hub_events(void)
continue;
}
portstatus = *((unsigned short *)buf + 0);
portchange = *((unsigned short *)buf + 1);
portstatus = le16_to_cpup((unsigned short *)buf + 0);
portchange = le16_to_cpup((unsigned short *)buf + 1);
if (portchange & USB_PORT_STAT_C_CONNECTION) {
printk("hub: port %d connection change\n", i + 1);
......
......@@ -56,10 +56,12 @@ usb_kbd_handle_key(unsigned char key, int down)
int scancode = (int) usb_kbd_map[key];
if(scancode)
{
#ifndef CONFIG_MAC_KEYBOARD
if(scancode & PCKBD_NEEDS_E0)
{
handle_scancode(0xe0, 1);
}
#endif /* CONFIG_MAC_KEYBOARD */
handle_scancode((scancode & ~PCKBD_NEEDS_E0), down);
}
}
......@@ -171,6 +173,9 @@ usb_kbd_probe(struct usb_device *dev)
struct usb_endpoint_descriptor *endpoint;
struct usb_keyboard *kbd;
if (dev->descriptor.bNumConfigurations < 1)
return -1;
interface = &dev->config[0].altsetting[0].interface[0];
endpoint = &interface->endpoint[0];
......
unsigned char usb_kbd_map[256] =
{
0x00, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x08, 0x02,
0x0e, 0x03, 0x05, 0x04, 0x22, 0x26, 0x28, 0x25,
0x2e, 0x2d, 0x1f, 0x23, 0x0c, 0x0f, 0x01, 0x11,
0x20, 0x09, 0x0d, 0x07, 0x10, 0x06, 0x12, 0x13,
0x14, 0x15, 0x17, 0x16, 0x1a, 0x1c, 0x19, 0x1d,
0x24, 0x35, 0x33, 0x30, 0x31, 0x1b, 0x18, 0x21,
0x1e, 0x2a, 0x00, 0x29, 0x27, 0x32, 0x2b, 0x2f,
0x2c, 0x39, 0x7a, 0x78, 0x63, 0x76, 0x60, 0x61,
0x62, 0x64, 0x65, 0x6d, 0x67, 0x6f, 0x69, 0x6b,
0x71, 0x72, 0x73, 0x74, 0x75, 0x77, 0x79, 0x3c,
0x3b, 0x3d, 0x3e, 0x47, 0x4b, 0x43, 0x4e, 0x45,
0x4c, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59,
0x5b, 0x5c, 0x52, 0x41, 0x00, 0x00, 0x00, 0x00,
0x69, 0x6b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x36, 0x38, 0x3a, 0x37, 0x7d, 0x7b, 0x7c, 0x37,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
This diff is collapsed.
#!/usr/bin/perl
($ME = $0) =~ s|.*/||;
$file = "maps/mac.map";
$line = 1;
open(PC, $file) || die("$!");
while(<PC>)
{
if(/^\s*keycode\s+(\d+|0x[0-9a-fA-F]+)\s*=\s*(\S+)/)
{
my($idx) = $1;
my($sym) = $2;
if ($idx =~ "0x.*") {
$idx = hex($idx);
} else {
$idx = int($idx);
}
if(defined($map{uc($sym)}))
{
# print STDERR "$file:$line: warning: `$sym' redefined\n";
}
$map{uc($sym)} = $idx;
}
$line++;
}
close(PC);
# $file = "maps/fixup.map";
# $line = 1;
# open(FIXUP, $file) || die("$!");
# while(<FIXUP>)
# {
# if(/^\s*keycode\s+(\d+)\s*=\s*/)
# {
# my($idx) = int($1);
# for $sym (split(/\s+/, $'))
# {
# $map{uc($sym)} = $idx;
# }
# }
# $line++;
# }
# close(FIXUP);
$file = "maps/usb.map";
$line = 1;
open(USB, $file) || die("$!");
while(<USB>)
{
if(/^\s*keycode\s+(\d+)\s*=\s*/)
{
my($idx) = int($1);
for $sym (split(/\s+/, $'))
{
my($val) = $map{uc($sym)};
$map[$idx] = $val;
if(!defined($val))
{
print STDERR "$file:$line: warning: `$sym' undefined\n";
}
else
{
last;
}
}
}
$line++;
}
close(USB);
print "unsigned char usb_kbd_map[256] = \n{\n";
for($x = 0; $x < 32; $x++)
{
if($x && !($x % 2))
{
print "\n";
}
print " ";
for($y = 0; $y < 8; $y++)
{
my($idx) = $x * 8 + $y;
print sprintf(" 0x%02x,",
int(defined($map[$idx]) ? $map[$idx]:0));
}
print "\n";
}
print "};\n";
......@@ -67,7 +67,7 @@ void show_ohci_status(struct ohci *ohci)
void show_ohci_ed(struct ohci_ed *ed)
{
int stat = ed->status;
int stat = le32_to_cpup(&ed->status);
int skip = (stat & OHCI_ED_SKIP);
int mps = (stat & OHCI_ED_MPS) >> 16;
int isoc = (stat & OHCI_ED_F_ISOC);
......@@ -75,8 +75,8 @@ void show_ohci_ed(struct ohci_ed *ed)
int dir = (stat & OHCI_ED_D);
int endnum = (stat & OHCI_ED_EN) >> 7;
int funcaddr = (stat & OHCI_ED_FA);
int halted = (ed->_head_td & 1);
int toggle = (ed->_head_td & 2) >> 1;
int halted = (le32_to_cpup(&ed->_head_td) & 1);
int toggle = (le32_to_cpup(&ed->_head_td) & 2) >> 1;
printk(KERN_DEBUG " ohci ED:\n");
printk(KERN_DEBUG " status = 0x%x\n", stat);
......@@ -92,23 +92,24 @@ void show_ohci_ed(struct ohci_ed *ed)
endnum,
funcaddr,
(stat & ED_ALLOCATED) ? " Allocated" : "");
printk(KERN_DEBUG " tail_td = 0x%x\n", ed->tail_td);
printk(KERN_DEBUG " tail_td = 0x%x\n", ed_tail_td(ed));
printk(KERN_DEBUG " head_td = 0x%x\n", ed_head_td(ed));
printk(KERN_DEBUG " next_ed = 0x%x\n", ed->next_ed);
printk(KERN_DEBUG " next_ed = 0x%x\n", le32_to_cpup(&ed->next_ed));
} /* show_ohci_ed() */
void show_ohci_td(struct ohci_td *td)
{
int td_round = td->info & OHCI_TD_ROUND;
int td_dir = td->info & OHCI_TD_D;
int td_int_delay = (td->info & OHCI_TD_IOC_DELAY) >> 21;
int td_toggle = (td->info & OHCI_TD_DT) >> 24;
int info = le32_to_cpup(&td->info);
int td_round = info & OHCI_TD_ROUND;
int td_dir = info & OHCI_TD_D;
int td_int_delay = (info & OHCI_TD_IOC_DELAY) >> 21;
int td_toggle = (info & OHCI_TD_DT) >> 24;
int td_errcnt = td_errorcount(*td);
int td_cc = OHCI_TD_CC_GET(td->info);
int td_cc = OHCI_TD_CC_GET(info);
printk(KERN_DEBUG " ohci TD hardware fields:\n");
printk(KERN_DEBUG " info = 0x%x\n", td->info);
printk(KERN_DEBUG " info = 0x%x\n", info);
printk(KERN_DEBUG " %s%s%s%d %s %s%d\n",
td_round ? "Rounding " : "",
(td_dir == OHCI_TD_D_IN) ? "Input " :
......@@ -125,9 +126,9 @@ void show_ohci_td(struct ohci_td *td)
printk(KERN_DEBUG " %s\n", td_allocated(*td) ? "Allocated" : "Free");
printk(KERN_DEBUG " cur_buf = 0x%x\n", td->cur_buf);
printk(KERN_DEBUG " next_td = 0x%x\n", td->next_td);
printk(KERN_DEBUG " buf_end = 0x%x\n", td->buf_end);
printk(KERN_DEBUG " cur_buf = 0x%x\n", le32_to_cpup(&td->cur_buf));
printk(KERN_DEBUG " next_td = 0x%x\n", le32_to_cpup(&td->next_td));
printk(KERN_DEBUG " buf_end = 0x%x\n", le32_to_cpup(&td->buf_end));
printk(KERN_DEBUG " ohci TD driver fields:\n");
printk(KERN_DEBUG " data = %p\n", td->data);
printk(KERN_DEBUG " dev_id = %p\n", td->dev_id);
......@@ -169,11 +170,14 @@ void show_ohci_hcca(struct ohci_hcca *hcca)
printk(KERN_DEBUG " ohci_hcca\n");
for (idx=0; idx<NUM_INTS; idx++) {
printk(KERN_DEBUG " int_table[%2d] == %p\n", idx, hcca->int_table +idx);
printk(KERN_DEBUG " int_table[%2d] == %x\n", idx,
le32_to_cpup(hcca->int_table + idx));
}
printk(KERN_DEBUG " frame_no == %d\n", hcca->frame_no);
printk(KERN_DEBUG " donehead == 0x%08x\n", hcca->donehead);
printk(KERN_DEBUG " frame_no == %d\n",
le16_to_cpup(&hcca->frame_no));
printk(KERN_DEBUG " donehead == 0x%08x\n",
le32_to_cpup(&hcca->donehead));
} /* show_ohci_hcca() */
......
This diff is collapsed.
......@@ -60,14 +60,14 @@ struct ohci_td {
#define TOGGLE_DATA1 (3 << 24) /* force Data1 */
#define td_force_toggle(b) (((b) | 2) << 24)
#define OHCI_TD_ERRCNT (3 << 26) /* error count */
#define td_errorcount(td) (((td).info >> 26) & 3)
#define clear_td_errorcount(td) ((td)->info &= ~(__u32)OHCI_TD_ERRCNT)
#define td_errorcount(td) ((le32_to_cpup(&(td).info) >> 26) & 3)
#define clear_td_errorcount(td) ((td)->info &= cpu_to_le32(~(__u32)OHCI_TD_ERRCNT))
#define OHCI_TD_CC (0xf << 28) /* condition code */
#define OHCI_TD_CC_GET(td_i) (((td_i) >> 28) & 0xf)
#define OHCI_TD_CC_NEW (OHCI_TD_CC) /* set this on all unaccessed TDs! */
#define td_cc_notaccessed(td) (((td).info >> 29) == 7)
#define td_cc_accessed(td) (((td).info >> 29) != 7)
#define td_cc_noerror(td) ((((td).info) & OHCI_TD_CC) == 0)
#define td_cc_notaccessed(td) ((le32_to_cpup(&(td).info) >> 29) == 7)
#define td_cc_accessed(td) ((le32_to_cpup(&(td).info) >> 29) != 7)
#define td_cc_noerror(td) (((le32_to_cpup(&(td).info)) & OHCI_TD_CC) == 0)
#define td_active(td) (!td_cc_noerror((td)) && (td_errorcount((td)) < 3))
#define td_done(td) (td_cc_noerror((td)) || (td_errorcount((td)) == 3))
......@@ -95,15 +95,17 @@ struct ohci_ed {
} __attribute((aligned(16)));
/* get the head_td */
#define ed_head_td(ed) ((ed)->_head_td & 0xfffffff0)
#define ed_head_td(ed) (le32_to_cpup(&(ed)->_head_td) & 0xfffffff0)
#define ed_tail_td(ed) (le32_to_cpup(&(ed)->tail_td))
/* save the carry & halted flag while setting the head_td */
#define set_ed_head_td(ed, td) ((ed)->_head_td = (td) | ((ed)->_head_td & 3))
#define set_ed_head_td(ed, td) ((ed)->_head_td = cpu_to_le32((td)) \
| ((ed)->_head_td & cpu_to_le32(3)))
/* Control the ED's halted flag */
#define ohci_halt_ed(ed) ((ed)->_head_td |= 1)
#define ohci_unhalt_ed(ed) ((ed)->_head_td &= ~(__u32)1)
#define ohci_ed_halted(ed) ((ed)->_head_td & 1)
#define ohci_halt_ed(ed) ((ed)->_head_td |= cpu_to_le32(1))
#define ohci_unhalt_ed(ed) ((ed)->_head_td &= cpu_to_le32(~(__u32)1))
#define ohci_ed_halted(ed) ((ed)->_head_td & cpu_to_le32(1))
#define OHCI_ED_SKIP (1 << 14)
#define OHCI_ED_MPS (0x7ff << 16)
......@@ -130,8 +132,8 @@ struct ohci_ed {
* driver or not. If the bit is set, it is being used.
*/
#define ED_ALLOCATED (1 << 31)
#define ed_allocated(ed) ((ed).status & ED_ALLOCATED)
#define allocate_ed(ed) ((ed)->status |= ED_ALLOCATED)
#define ed_allocated(ed) (le32_to_cpup(&(ed).status) & ED_ALLOCATED)
#define allocate_ed(ed) ((ed)->status |= cpu_to_le32(ED_ALLOCATED))
/*
* The HCCA (Host Controller Communications Area) is a 256 byte
......
......@@ -179,13 +179,14 @@ static ssize_t write_printer(struct file * file,
}
result = p->pusb_dev->bus->op->bulk_msg(p->pusb_dev,
usb_sndbulkpipe(p->pusb_dev, 1), obuf, thistime, &partial);
if (result & 0x08) { /* NAK - so hold for a while */
obuf += partial;
thistime -= partial;
if (result == USB_ST_TIMEOUT) { /* NAK - so hold for a while */
if(!maxretry--)
return -ETIME;
interruptible_sleep_on_timeout(&p->wait_q, NAK_TIMEOUT);
continue;
} else if (!result & partial) {
obuf += partial;
thistime -= partial;
} else
break;
};
......@@ -230,7 +231,7 @@ static ssize_t read_printer(struct file * file,
usb_rcvbulkpipe(p->pusb_dev, 2), buf, this_read, &partial);
/* unlike writes, we don't retry a NAK, just stop now */
if (result & 0x08)
if (!result & partial)
count = this_read = partial;
else if (result)
return -EIO;
......
This diff is collapsed.
......@@ -89,9 +89,10 @@ struct uhci_td {
usb_device_irq completed; /* Completion handler routine */
unsigned int *backptr; /* Where to remove this from.. */
void *dev_id;
int inuse; /* Inuse? */
int inuse; /* Inuse? (b0) Remove (b1)*/
struct uhci_qh *qh;
struct uhci_td *first;
struct usb_device *dev; /* the owning device */
} __attribute__((aligned(32)));
struct uhci_iso_td {
......
......@@ -61,6 +61,9 @@ int usb_init(void)
# ifdef CONFIG_USB_HUB
usb_hub_init();
# endif
# ifdef CONFIG_USB_SCSI
usb_scsi_init();
# endif
#endif
return 0;
}
......
This diff is collapsed.
......@@ -96,6 +96,30 @@ typedef struct {
#define USB_RT_HIDD (USB_TYPE_CLASS | USB_RECIP_INTERFACE)
/*
* Status codes
*/
#define USB_ST_NOERROR 0x0
#define USB_ST_CRC 0x1
#define USB_ST_BITSTUFF 0x2
#define USB_ST_DTMISMATCH 0x3
#define USB_ST_STALL 0x4
#define USB_ST_TIMEOUT 0x5
#define USB_ST_PIDCHECK 0x6
#define USB_ST_PIDUNDEF 0x7
#define USB_ST_DATAOVERRUN 0x8
#define USB_ST_DATAUNDERRUN 0x9
#define USB_ST_RESERVED1 0xA
#define USB_ST_RESERVED2 0xB
#define USB_ST_BUFFEROVERRUN 0xC
#define USB_ST_BUFFERUNDERRUN 0xD
#define USB_ST_RESERVED3 0xE
#define USB_ST_RESERVED4 0xF
/* internal errors */
#define USB_ST_REMOVED 0x100
#define USB_ST_INTERNALERROR -1
/*
* USB device number allocation bitmap. There's one bitmap
* per USB tree.
......@@ -193,7 +217,7 @@ struct usb_hub_descriptor {
__u8 bLength;
__u8 bDescriptorType;
__u8 bNbrPorts;
__u16 wHubCharacteristics;
__u8 wHubCharacteristics[2]; /* __u16 but not aligned! */
__u8 bPwrOn2PwrGood;
__u8 bHubContrCurrent;
/* DeviceRemovable and PortPwrCtrlMask want to be variable-length
......@@ -226,9 +250,10 @@ typedef int (*usb_device_irq)(int, void *, void *);
struct usb_operations {
struct usb_device *(*allocate)(struct usb_device *);
int (*deallocate)(struct usb_device *);
int (*control_msg)(struct usb_device *, unsigned int, void *, void *, int);
int (*control_msg)(struct usb_device *, unsigned int, devrequest *, void *, int);
int (*bulk_msg)(struct usb_device *, unsigned int, void *, int,unsigned long *);
int (*request_irq)(struct usb_device *, unsigned int, usb_device_irq, int, void *);
int (*remove_irq)(struct usb_device *, unsigned int, usb_device_irq, int, void *);
};
/*
......@@ -249,7 +274,8 @@ struct usb_device {
int devnum; /* Device number on USB bus */
int slow; /* Slow device? */
int maxpacketsize; /* Maximum packet size */
__u16 toggle; /* one bit for each endpoint */
int toggle; /* one bit for each endpoint */
int halted; /* endpoint halts */
struct usb_config_descriptor *actconfig;/* the active configuration */
int epmaxpacket[16]; /* endpoint specific maximums */
int ifnum; /* active interface number */
......@@ -348,7 +374,12 @@ extern void usb_destroy_configuration(struct usb_device *dev);
/* The D0/D1 toggle bits */
#define usb_gettoggle(dev, ep) (((dev)->toggle >> ep) & 1)
#define usb_dotoggle(dev, ep) ((dev)->toggle ^= (1 << ep))
#define usb_settoggle(dev, ep, bit) ((dev)->toggle = ((dev)->toggle & (0xfffe << ep)) | (bit << ep))
#define usb_settoggle(dev, ep, bit) ((dev)->toggle = ((dev)->toggle & ~(1 << ep)) | ((bit) << ep))
/* Endpoint halt */
#define usb_endpoint_halt(dev, ep) ((dev)->halted |= (1 << (ep)))
#define usb_endpoint_running(dev, ep) ((dev)->halted &= ~(1 << (ep)))
#define usb_endpoint_halted(dev, ep) ((dev)->halted & (1 << (ep)))
static inline unsigned int __create_pipe(struct usb_device *dev, unsigned int endpoint)
{
......@@ -388,6 +419,14 @@ int usb_set_protocol(struct usb_device *dev, int protocol);
int usb_set_idle(struct usb_device *dev, int duration, int report_id);
int usb_set_configuration(struct usb_device *dev, int configuration);
int usb_get_report(struct usb_device *dev);
int usb_clear_halt(struct usb_device *dev, int endp);
static inline char * usb_string(struct usb_device* dev, int index)
{
if (index <= dev->maxstring && dev->stringindex && dev->stringindex[index])
return dev->stringindex[index];
else
return NULL;
}
/*
* Debugging helpers..
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
0x28, 0x81, 0x14, 0x14, 0x20, 0x01, 0x90, 0x77,
0x0C, 0x20, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
......@@ -300,7 +300,7 @@ struct super_block *adfs_read_super(struct super_block *sb, void *data, int sile
*/
sb->s_op = &adfs_sops;
sb->u.adfs_sb.s_root = adfs_inode_generate(dr->root, 0);
sb->s_root = d_alloc_root(iget(sb, sb->u.adfs_sb.s_root), NULL);
sb->s_root = d_alloc_root(iget(sb, sb->u.adfs_sb.s_root));
if (!sb->s_root) {
for (i = 0; i < sb->u.adfs_sb.s_map_size; i++)
......@@ -312,8 +312,7 @@ struct super_block *adfs_read_super(struct super_block *sb, void *data, int sile
return sb;
error_free_bh:
if (bh)
brelse(bh);
brelse(bh);
error_unlock:
unlock_super(sb);
error_dec_use:
......
......@@ -543,7 +543,7 @@ affs_read_super(struct super_block *s, void *data, int silent)
root_inode = iget(s,root_block);
if (!root_inode)
goto out_no_root;
s->s_root = d_alloc_root(root_inode, NULL);
s->s_root = d_alloc_root(root_inode);
if (!s->s_root)
goto out_no_root;
s->s_root->d_op = &affs_dentry_operations;
......
......@@ -176,7 +176,7 @@ struct super_block *autofs_read_super(struct super_block *s, void *data,
* Get the root inode and dentry, but defer checking for errors.
*/
root_inode = iget(s, AUTOFS_ROOT_INO);
root = d_alloc_root(root_inode, NULL);
root = d_alloc_root(root_inode);
pipe = NULL;
/*
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment