Commit ccb5ba85 authored by Linus Torvalds's avatar Linus Torvalds

Linux 2.4.0-test9pre2

    - scsi fixes
    - network updates
    - PCI bridge scanning fix: assign numbers properly
    - sparc updates
    - Riel VM update
    - disallow re-mounting same filesystem in same place multiple times.
      Too confusing. And /etc/mtab gets strange.
    - PPC updates (including PPC-related drivers etc)
    - more initcall updates
    - various net drvr updates and fixes
    - "extern inline" -> "static inline".  It doesn't matter right now,
      but it's proactive for future gcc versions.
parent 1fc53b22
......@@ -1088,22 +1088,25 @@ CONFIG_BLK_DEV_IDEDOUBLER
Support for PowerMac IDE devices (must also enable IDE)
CONFIG_BLK_DEV_IDE_PMAC
No help for CONFIG_BLK_DEV_IDE_PMAC
This driver provides support for the built-in IDE controller on most
of the recent Apple Power Macintoshes and PowerBooks.
If unsure, say Y.
PowerMac IDE DMA support
CONFIG_BLK_DEV_IDEDMA_PMAC
No help for CONFIG_BLK_DEV_IDEDMA_PMAC
This option allows the driver for the built-in IDE controller on
Power Macintoshes and PowerBooks to use DMA (direct memory access)
to transfer data to and from memory. Saying Y is safe and improves
performance.
Use DMA by default
CONFIG_IDEDMA_PMAC_AUTO
Prior to kernel version 2.1.112, Linux used to automatically use
DMA for IDE drives and chipsets which support it. Due to concerns
about a couple of cases where buggy hardware may have caused damage,
the default is now to NOT use DMA automatically. To revert to the
previous behaviour, say Y to this question.
If you suspect your hardware is at all flakey, say N here.
Do NOT email the IDE kernel people regarding this issue!
CONFIG_BLK_DEV_IDEDMA_PMAC_AUTO
This option allows the driver for the built-in IDE controller on
Power Macintoshes and PowerBooks to use DMA automatically, without
it having to be explicitly enabled. This option is provided because
of concerns about a couple of cases where using DMA on buggy PC
hardware may have caused damage. Saying Y should be safe on all
Apple machines.
Macintosh Quadra/Powerbook IDE interface support
CONFIG_BLK_DEV_MAC_IDE
......@@ -9984,10 +9987,24 @@ CONFIG_USB_WMFORCE
The module will be called wmforce.o. If you want to compile it as a
module, say M here and read Documentation/modules.txt.
Use input layer for ADB devices
CONFIG_INPUT_ADBHID
Say Y here if you want to have ADB (Apple Desktop Bus) HID devices
such as keyboards, mice, joysticks, or graphic tablets handled by the
input layer. If you say Y here, make sure to say Y to the
corresponding drivers "Keyboard support" (CONFIG_INPUT_KEYBDEV),
"Mouse Support" (CONFIG_INPUT_MOUSEDEV) and "Event interface support"
(CONFIG_INPUT_EVDEV) as well.
If you say N here, you still have the option of using the old ADB
keyboard and mouse drivers.
If unsure, say Y.
Keyboard support
CONFIG_INPUT_KEYBDEV
Say Y here if you want your USB HID keyboard to be able to serve as
a system keyboard.
Say Y here if you want your USB HID keyboard (or an ADB keyboard
handled by the input layer) to be able to serve as a system keyboard.
This driver is also available as a module ( = code which can be
inserted in and removed from the running kernel whenever you want).
......@@ -9996,10 +10013,11 @@ CONFIG_INPUT_KEYBDEV
Mouse support
CONFIG_INPUT_MOUSEDEV
Say Y here if you want your USB HID mouse to be accessible as
char devices 13:32+ - /dev/input/mouseX and 13:63 - /dev/input/mice
as an emulated PS/2 mouse. That way, all user space programs will
be able to use your mouse.
Say Y here if you want your USB HID mouse (or ADB mouse handled by
the input layer) to be accessible as char devices 13:32+ -
/dev/input/mouseX and 13:63 - /dev/input/mice as an emulated ImPS/2
mouse. That way, all user space programs will be able to use your
mouse.
If unsure, say Y.
......@@ -10034,8 +10052,8 @@ CONFIG_INPUT_JOYDEV
Event interface support
CONFIG_INPUT_EVDEV
Say Y here if you want your USB HID device events be accessible
under char device 13:64+ - /dev/inputX in a generic way.
Say Y here if you want your USB or ADB HID device events be accessible
under char device 13:64+ - /dev/input/eventX in a generic way.
This is the future ...
USB Scanner support
......@@ -15430,6 +15448,42 @@ CONFIG_PMAC_PBOOK
have it autoloaded. The act of removing the module shuts down the
sound hardware for more power savings.
Mac-on-Linux support
CONFIG_MOL
This option enables low-level support for Mac-on-Linux.
MOL lets you run MacOS and Linux simultaneously. Please
visit <http://www.maconlinux.org> for more information.
If unsure, say Y.
ADB raw keycode support
CONFIG_MAC_ADBKEYCODES
This provides support for sending raw ADB keycodes to console
devices. This is the default up to 2.4.0, but in future this may be
phased out in favor of generic Linux keycodes. If you say Y here, you
can dynamically switch via the
/proc/sys/dev/mac_hid/keyboard_sends_linux_keycodes
sysctl and with the "keyboard_sends_linux_keycodes=" kernel argument.
If unsure, say Y here.
Mouse button 2+3 emulation support
CONFIG_MAC_EMUMOUSEBTN
This provides generic support for emulating the 2nd and 3rd mouse
button with keypresses. If you say Y here, the emulation is still
disabled by default. The emulation is controlled by these sysctl entries:
/proc/sys/dev/mac_hid/mouse_button_emulation
/proc/sys/dev/mac_hid/mouse_button2_keycode
/proc/sys/dev/mac_hid/mouse_button3_keycode
Enhanced Real Time Clock Support
CONFIG_PPC_RTC
If you say Y here and create a character special file /dev/rtc with
major number 10 and minor number 135 using mknod ("man mknod"), you
will get access to the real time clock (or hardware clock) built
into your computer.
If unsure, say Y here.
Support for Open Firmware device tree in /proc
CONFIG_PROC_DEVICETREE
This option adds a device-tree directory under /proc which contains
......
......@@ -6,3 +6,5 @@ commands.txt
- overview of kbuild commands
config-language.txt
- specification of Config Language, the language in Config.in files
makefiles.txt
- developer information for linux kernel makefiles
This diff is collapsed.
......@@ -131,6 +131,8 @@ James Fidell, Taso Hatzi, Peter K - intrepid test team
And thanks to every supporter free software.
(see top of 8139too.c for further credits and kudos)
Submitting Bug Reports
......@@ -157,38 +159,42 @@ the list, please report it. That's why we do beta releases, after all...
1) Work with Donald to merge fixes and updates into his driver.
2) 2.2.x COMPATIBILITY SUPPORT IS BROKEN. DO NOT USE IT.
It is included only for enterprising hackers willing to help fix it.
2) ethtool support
3) PPC platform has stability problems.
3) PPC platform has stability problems. (XXX: verify this is still true)
4) Sparc64 platform not tested at all.
5) Identify and fix "rx wedge" when ping flooded. (WIP)
7) N-Way auto-negotiation is known to fail in some cases. This problem
also occurs in the rtl8139 driver in kernels 2.2.x/2.3.x. Solution:
Following technique in sunhme and sunbmac, use a kernel timer to
manually perform autonegotiation in case the network or card cannot do
it automatically. (patches welcome)
8) Much improved command line / module parameter setup. (patches and
suggestions welcome) (WIP)
9) Better documentation. (patches welcome)
10) (rtl8139-diag modified from Becker version, DONE)
User-mode (or maybe optional /proc) diagnostics program.
11) RTL8139C support untested.
12) 10base-T support flaky or slow
12) 10base-T support flaky or slow (todo: verify this is still true)
Change History
--------------
Version 0.9.10 - September 12, 2000
* Never wrap an Rx packet (faster Rx interrupt handling)
* Clear all TxAborted conditions (bug fix)
* Correct copyright
* More credits
* Update NWay doc URL
* Clean up commonly used ifdef switches
* Reorg info displayed at bootup/modprobe time
* Remove some unneeded spinlocks
* Misc cosmetic code cleanup
* Always print interrupt status for abnormal interrupts
* Use RealTek-recommended FIFO and DMA burst settings (1024 bytes)
Version 0.9.9 - September 9, 2000
* Fix oops-able bug in Rx ring wrap calculation (David Ford)
......
......@@ -188,6 +188,11 @@ pci_find_capability() Find specified capability in device's capability
list.
pci_module_init() Inline helper function for ensuring correct
pci_driver initialization and error handling.
pci_resource_start() Returns bus start address for a given PCI region
pci_resource_end() Returns bus end address for a given PCI region
pci_resource_len() Returns the byte length of a PCI region
pci_set_drvdata() Set private driver data pointer for a pci_dev
pci_get_drvdata() Return private driver data pointer for a pci_dev
7. Miscellaneous hints
......
......@@ -161,7 +161,7 @@ DRIVERS-$(CONFIG_DIO) += drivers/dio/dio.a
DRIVERS-$(CONFIG_SBUS) += drivers/sbus/sbus.a
DRIVERS-$(CONFIG_ZORRO) += drivers/zorro/zorro.a
DRIVERS-$(CONFIG_FC4) += drivers/fc4/fc4.a
DRIVERS-$(CONFIG_PPC) += drivers/macintosh/macintosh.o
DRIVERS-$(CONFIG_ALL_PPC) += drivers/macintosh/macintosh.o
DRIVERS-$(CONFIG_MAC) += drivers/macintosh/macintosh.o
DRIVERS-$(CONFIG_ISAPNP) += drivers/pnp/pnp.o
DRIVERS-$(CONFIG_SGI_IP22) += drivers/sgi/sgi.a
......@@ -174,7 +174,7 @@ DRIVERS-$(CONFIG_INPUT) += drivers/input/inputdrv.o
DRIVERS-$(CONFIG_I2O) += drivers/i2o/i2o.o
DRIVERS-$(CONFIG_IRDA) += drivers/net/irda/irda.o
DRIVERS-$(CONFIG_I2C) += drivers/i2c/i2c.o
DRIVERS-$(CONFIG_PHONE) += drivers/telephony/telephony.a
DRIVERS-$(CONFIG_PHONE) += drivers/telephony/telephony.o
DRIVERS-$(CONFIG_ACPI_INTERPRETER) += drivers/acpi/acpi.o
DRIVERS += $(DRIVERS-y)
......
......@@ -21,6 +21,12 @@
/*
* See http://www.geocities.com/SiliconValley/Hardware/3165/
* for the user-level ACPI stuff
*
* Changes:
* Arnaldo Carvalho de Melo <acme@conectiva.com.br> - 2000/08/31
* - check copy*user return
* - get rid of check_region
* - get rid of verify_area
*/
#include <linux/config.h>
......@@ -135,8 +141,7 @@ static int acpi_do_stat(ctl_table *ctl,
*len = 0;
return 0;
}
copy_to_user(buffer, str, size);
return 0;
return copy_to_user(buffer, str, size) ? -EFAULT : 0;
}
static void cx_statistics(unsigned int x, unsigned long time)
......@@ -1283,11 +1288,9 @@ static void acpi_power_off(void)
*/
static int acpi_claim(unsigned long start, unsigned long size)
{
if (start && size) {
if (check_region(start, size))
if (start && size)
if (!request_region(start, size, "acpi"))
return -EBUSY;
request_region(start, size, "acpi");
}
return 0;
}
......@@ -1391,7 +1394,8 @@ static int acpi_do_ulong(ctl_table *ctl,
val = *(unsigned long*) ctl->data;
size = sprintf(str, "0x%08lx\n", val);
if (*len >= size) {
copy_to_user(buffer, str, size);
if (copy_to_user(buffer, str, size))
return -EFAULT;
*len = size;
}
else
......@@ -1404,7 +1408,8 @@ static int acpi_do_ulong(ctl_table *ctl,
size = sizeof(str) - 1;
if (size > *len)
size = *len;
copy_from_user(str, buffer, size);
if (copy_from_user(str, buffer, size))
return -EFAULT;
str[size] = '\0';
val = simple_strtoul(str, &strend, 0);
if (strend == str)
......@@ -1423,22 +1428,22 @@ static int acpi_verify_table(void *buffer,
size_t size,
struct acpi_table_info *info)
{
struct acpi_table hdr;
size_t table_size;
if (size < sizeof(struct acpi_table))
return -EINVAL;
else if (verify_area(VERIFY_READ, buffer, size))
if (copy_from_user(&hdr, buffer, sizeof(hdr)))
return -EFAULT;
else {
struct acpi_table hdr;
size_t table_size;
copy_from_user(&hdr, buffer, sizeof(hdr));
table_size = (size_t) hdr.length;
if (hdr.signature != info->expected_signature
|| table_size < size
|| (info->expected_size
&& table_size != info->expected_size))
return -EINVAL;
}
table_size = (size_t) hdr.length;
if (hdr.signature != info->expected_signature
|| table_size < size
|| (info->expected_size
&& table_size != info->expected_size))
return -EINVAL;
return 0;
}
......@@ -1496,7 +1501,8 @@ static int acpi_do_table(ctl_table *ctl,
error = acpi_verify_table(buffer, *len, info);
if (error)
return error;
copy_from_user(&hdr, buffer, sizeof(hdr));
if (copy_from_user(&hdr, buffer, sizeof(hdr)))
return -EFAULT;
table_size = (size_t) hdr.length;
write_lock(&acpi_do_table_lock);
......@@ -1517,7 +1523,8 @@ static int acpi_do_table(ctl_table *ctl,
error = -ENOMEM;
}
if (data)
copy_from_user(data, buffer, size);
if (copy_from_user(data, buffer, size))
error = -EFAULT;
write_unlock(&acpi_do_table_lock);
}
......@@ -1565,7 +1572,8 @@ static int acpi_do_event_reg(ctl_table *ctl,
size = sprintf(str, "0x%08x\n", val);
if (*len >= size) {
copy_to_user(buffer, str, size);
if (copy_to_user(buffer, str, size))
return -EFAULT;
*len = size;
}
else
......@@ -1580,7 +1588,8 @@ static int acpi_do_event_reg(ctl_table *ctl,
size = sizeof(str) - 1;
if (size > *len)
size = *len;
copy_from_user(str, buffer, size);
if (copy_from_user(str, buffer, size))
return -EFAULT;
str[size] = '\0';
val = (u32) simple_strtoul(str, &strend, 0);
if (strend == str)
......@@ -1682,7 +1691,8 @@ static int acpi_do_event(ctl_table *ctl,
pm1_status,
gpe_status,
event_state);
copy_to_user(buffer, str, size);
if (copy_to_user(buffer, str, size))
return -EFAULT;
*len = size;
file->f_pos += size;
......
......@@ -11,12 +11,15 @@ if [ "$CONFIG_NET_ETHERNET" = "y" ]; then
bool 'Ethernet on SCC2' CONFIG_SCC2_ENET
fi
fi
bool 'FCC Ethernet' CONFIG_FCC_ENET
if [ "$CONFIG_FCC_ENET" = "y" ]; then
bool 'Ethernet on FCC1' CONFIG_FCC1_ENET
if [ "$CONFIG_FCC1_ENET" != "y" ]; then
bool 'Ethernet on FCC2' CONFIG_FCC2_ENET
fi
#
# CONFIG_FEC_ENET is only used to get netdevices to call our init
# function. Any combination of FCC1,2,3 are supported.
#
bool 'FCC Ethernet' CONFIG_FEC_ENET
if [ "$CONFIG_FEC_ENET" = "y" ]; then
bool 'Ethernet on FCC1' CONFIG_FCC1_ENET
bool 'Ethernet on FCC2' CONFIG_FCC2_ENET
bool 'Ethernet on FCC3' CONFIG_FCC3_ENET
fi
endmenu
fi
......@@ -10,8 +10,8 @@
O_TARGET := 8260_io.a
O_OBJS = commproc.o uart.o
ifdef CONFIG_FCC_ENET
O_OBJS += fcc.o
ifdef CONFIG_FEC_ENET
O_OBJS += fcc_enet.o
endif
ifdef CONFIG_SCC_ENET
O_OBJS += enet.o
......
......@@ -69,17 +69,27 @@ m8260_cpm_reset(void)
cpmp = (cpm8260_t *)commproc;
}
/* Allocate some memory from the dual ported ram. We may want to
* enforce alignment restrictions, but right now everyone is a good
* citizen.
/* Allocate some memory from the dual ported ram.
* To help protocols with object alignment restrictions, we do that
* if they ask.
*/
uint
m8260_cpm_dpalloc(uint size)
m8260_cpm_dpalloc(uint size, uint align)
{
uint retloc;
uint align_mask, off;
uint savebase;
if ((dp_alloc_base + size) >= dp_alloc_top)
align_mask = align - 1;
savebase = dp_alloc_base;
if ((off = (dp_alloc_base & align_mask)) != 0)
dp_alloc_base += (align - off);
if ((dp_alloc_base + size) >= dp_alloc_top) {
dp_alloc_base = savebase;
return(CPM_DP_NOSPACE);
}
retloc = dp_alloc_base;
dp_alloc_base += size;
......@@ -91,12 +101,22 @@ m8260_cpm_dpalloc(uint size)
* UART "fifos" and the like.
*/
uint
m8260_cpm_hostalloc(uint size)
m8260_cpm_hostalloc(uint size, uint align)
{
uint retloc;
uint align_mask, off;
uint savebase;
if ((host_buffer + size) >= host_end)
align_mask = align - 1;
savebase = host_buffer;
if ((off = (host_buffer & align_mask)) != 0)
host_buffer += (align - off);
if ((host_buffer + size) >= host_end) {
host_buffer = savebase;
return(0);
}
retloc = host_buffer;
host_buffer += size;
......
......@@ -466,8 +466,11 @@ for (;;) {
cep->stats.rx_bytes += pkt_len;
/* This does 16 byte alignment, much more than we need.
*/
skb = dev_alloc_skb(pkt_len);
* The packet length includes FCS, but we don't want to
* include that when passing upstream as it messes up
* bridging applications.
*/
skb = dev_alloc_skb(pkt_len-4);
if (skb == NULL) {
printk("%s: Memory squeeze, dropping packet.\n", dev->name);
......@@ -475,10 +478,10 @@ for (;;) {
}
else {
skb->dev = dev;
skb_put(skb,pkt_len); /* Make room */
skb_put(skb,pkt_len-4); /* Make room */
eth_copy_and_sum(skb,
(unsigned char *)__va(bdp->cbd_bufaddr),
pkt_len, 0);
pkt_len-4, 0);
skb->protocol=eth_type_trans(skb,dev);
netif_rx(skb);
}
......@@ -549,10 +552,10 @@ static void set_multicast_list(struct net_device *dev)
/* Log any net taps. */
printk("%s: Promiscuous mode enabled.\n", dev->name);
cep->sccp->scc_pmsr |= SCC_PMSR_PRO;
cep->sccp->scc_pmsr |= SCC_PSMR_PRO;
} else {
cep->sccp->scc_pmsr &= ~SCC_PMSR_PRO;
cep->sccp->scc_pmsr &= ~SCC_PSMR_PRO;
if (dev->flags & IFF_ALLMULTI) {
/* Catch all multicast addresses, so set the
......@@ -678,11 +681,11 @@ int __init scc_enet_init(void)
* These are relative offsets in the DP ram address space.
* Initialize base addresses for the buffer descriptors.
*/
i = m8260_cpm_dpalloc(sizeof(cbd_t) * RX_RING_SIZE);
i = m8260_cpm_dpalloc(sizeof(cbd_t) * RX_RING_SIZE, 8);
ep->sen_genscc.scc_rbase = i;
cep->rx_bd_base = (cbd_t *)&immap->im_dprambase[i];
i = m8260_cpm_dpalloc(sizeof(cbd_t) * TX_RING_SIZE);
i = m8260_cpm_dpalloc(sizeof(cbd_t) * TX_RING_SIZE, 8);
ep->sen_genscc.scc_tbase = i;
cep->tx_bd_base = (cbd_t *)&immap->im_dprambase[i];
......@@ -816,7 +819,7 @@ int __init scc_enet_init(void)
/* Set processing mode. Use Ethernet CRC, catch broadcast, and
* start frame search 22 bit times after RENA.
*/
sccp->scc_pmsr = (SCC_PMSR_ENCRC | SCC_PMSR_NIB22);
sccp->scc_pmsr = (SCC_PSMR_ENCRC | SCC_PSMR_NIB22);
/* It is now OK to enable the Ethernet transmitter.
* Unfortunately, there are board implementation differences here.
......
This diff is collapsed.
......@@ -977,8 +977,7 @@ static int rs_8xx_write(struct tty_struct * tty, int from_user,
}
if (from_user) {
if (c !=
copy_from_user(__va(bdp->cbd_bufaddr), buf, c)) {
if (copy_from_user(__va(bdp->cbd_bufaddr), buf, c)) {
if (!ret)
ret = -EFAULT;
break;
......@@ -2396,10 +2395,10 @@ int __init rs_8xx_init(void)
io->iop_pdird &= ~0x00800000;
io->iop_psord &= ~0x00c00000;
#if USE_SMC2
io->iop_ppara |= 0x01800000;
io->iop_pdira |= 0x00800000;
io->iop_pdira &= ~0x01000000;
io->iop_psora &= ~0x01800000;
io->iop_ppara |= 0x00c00000;
io->iop_pdira |= 0x00400000;
io->iop_pdira &= ~0x00800000;
io->iop_psora &= ~0x00c00000;
#endif
/* Configure SCC2 and SCC3. Be careful about the fine print.
......@@ -2473,11 +2472,11 @@ int __init rs_8xx_init(void)
* descriptors from dual port ram, and a character
* buffer area from host mem.
*/
dp_addr = m8260_cpm_dpalloc(sizeof(cbd_t) * RX_NUM_FIFO);
dp_addr = m8260_cpm_dpalloc(sizeof(cbd_t) * RX_NUM_FIFO, 8);
/* Allocate space for FIFOs in the host memory.
*/
mem_addr = m8260_cpm_hostalloc(RX_NUM_FIFO * RX_BUF_SIZE);
mem_addr = m8260_cpm_hostalloc(RX_NUM_FIFO * RX_BUF_SIZE, 1);
/* Set the physical address of the host memory
* buffers in the buffer descriptors, and the
......@@ -2506,11 +2505,11 @@ int __init rs_8xx_init(void)
sup->scc_genscc.scc_rbase = dp_addr;
}
dp_addr = m8260_cpm_dpalloc(sizeof(cbd_t) * TX_NUM_FIFO);
dp_addr = m8260_cpm_dpalloc(sizeof(cbd_t) * TX_NUM_FIFO, 8);
/* Allocate space for FIFOs in the host memory.
*/
mem_addr = m8260_cpm_hostalloc(TX_NUM_FIFO * TX_BUF_SIZE);
mem_addr = m8260_cpm_hostalloc(TX_NUM_FIFO * TX_BUF_SIZE, 1);
/* Set the physical address of the host memory
* buffers in the buffer descriptors, and the
......@@ -2716,11 +2715,11 @@ static int __init serial_console_setup(struct console *co, char *options)
/* Allocate space for two buffer descriptors in the DP ram.
*/
dp_addr = m8260_cpm_dpalloc(sizeof(cbd_t) * 2);
dp_addr = m8260_cpm_dpalloc(sizeof(cbd_t) * 2, 8);
/* Allocate space for two 2 byte FIFOs in the host memory.
*/
mem_addr = m8260_cpm_hostalloc(4);
mem_addr = m8260_cpm_hostalloc(4, 1);
/* Set the physical address of the host memory buffers in
* the buffer descriptors.
......
......@@ -484,8 +484,11 @@ for (;;) {
cep->stats.rx_bytes += pkt_len;
/* This does 16 byte alignment, much more than we need.
*/
skb = dev_alloc_skb(pkt_len);
* The packet length includes FCS, but we don't want to
* include that when passing upstream as it messes up
* bridging applications.
*/
skb = dev_alloc_skb(pkt_len-4);
if (skb == NULL) {
printk("%s: Memory squeeze, dropping packet.\n", dev->name);
......@@ -493,10 +496,10 @@ for (;;) {
}
else {
skb->dev = dev;
skb_put(skb,pkt_len); /* Make room */
skb_put(skb,pkt_len-4); /* Make room */
eth_copy_and_sum(skb,
(unsigned char *)__va(bdp->cbd_bufaddr),
pkt_len, 0);
pkt_len-4, 0);
skb->protocol=eth_type_trans(skb,dev);
netif_rx(skb);
}
......
......@@ -669,18 +669,21 @@ while (!(bdp->cbd_sc & BD_ENET_RX_EMPTY)) {
#endif
/* This does 16 byte alignment, exactly what we need.
* The packet length includes FCS, but we don't want to
* include that when passing upstream as it messes up
* bridging applications.
*/
skb = dev_alloc_skb(pkt_len);
skb = dev_alloc_skb(pkt_len-4);
if (skb == NULL) {
printk("%s: Memory squeeze, dropping packet.\n", dev->name);
fep->stats.rx_dropped++;
} else {
skb->dev = dev;
skb_put(skb,pkt_len); /* Make room */
skb_put(skb,pkt_len-4); /* Make room */
eth_copy_and_sum(skb,
(unsigned char *)__va(bdp->cbd_bufaddr),
pkt_len, 0);
pkt_len-4, 0);
skb->protocol=eth_type_trans(skb,dev);
netif_rx(skb);
}
......
......@@ -67,11 +67,13 @@ initrd.o: ramdisk.image.gz piggyback
zImage: $(OBJS) no_initrd.o addnote
$(LD) $(LD_ARGS) -o $@ $(OBJS) no_initrd.o $(LIBS)
./addnote $@
cp $@ $@.rs6k
./addnote $@.rs6k
zImage.initrd: $(OBJS) initrd.o addnote
$(LD) $(LD_ARGS) -o $@ $(OBJS) initrd.o $(LIBS)
./addnote $@
cp $@ $@.rs6k
./addnote $@.rs6k
else
znetboot:
......
......@@ -22,12 +22,23 @@ char arch[] = "PowerPC";
#define N_DESCR 6
unsigned int descr[N_DESCR] = {
#if 1
/* values for IBM RS/6000 machines */
0xffffffff, /* real-mode = true */
0x00c00000, /* real-base, i.e. where we expect OF to be */
0xffffffff, /* real-size */
0xffffffff, /* virt-base */
0xffffffff, /* virt-size */
0x4000, /* load-base */
#else
/* values for longtrail CHRP */
0, /* real-mode = false */
0xffffffff, /* real-base */
0xffffffff, /* real-size */
0xffffffff, /* virt-base */
0xffffffff, /* virt-size */
0x00600000, /* load-base */
#endif
};
unsigned char buf[512];
......@@ -63,7 +74,7 @@ unsigned char buf[512];
unsigned char elf_magic[4] = { 0x7f, 'E', 'L', 'F' };
main(int ac, char **av)
int main(int ac, char **av)
{
int fd, n, i;
int ph, ps, np;
......
......@@ -8,7 +8,7 @@ HOSTCFLAGS = -O -I$(TOPDIR)/include
CFLAGS = $(CPPFLAGS) -O -fno-builtin
OBJCOPY_ARGS = -O aixcoff-rs6000 -R .stab -R .stabstr -R .comment
COFF_LD_ARGS = -e _start -T ld.script -Ttext 500000 -Tdata 510000 -Bstatic
CHRP_LD_ARGS = -Ttext 0x00400000
CHRP_LD_ARGS = -Ttext 0x01000000
COFFOBJS = coffcrt0.o start.o coffmain.o misc.o string.o zlib.o image.o
CHRPOBJS = crt0.o start.o chrpmain.o misc.o string.o zlib.o image.o
......
......@@ -22,13 +22,18 @@ void stop_imac_usb(void);
#define get_16be(x) (*(unsigned short *)(x))
#define get_32be(x) (*(unsigned *)(x))
#define RAM_START 0x00000000
#define RAM_END (8<<20)
#define RAM_END (16 << 20)
#define PROG_START 0x00010000
#define PROG_SIZE 0x003f0000
#define SCRATCH_SIZE (128 << 10)
char *avail_ram;
char *end_avail;
char *begin_avail, *end_avail;
char *avail_high;
unsigned int heap_use;
unsigned int heap_max;
extern char _end[];
extern char image_data[];
......@@ -60,29 +65,30 @@ boot(int a1, int a2, void *prom)
im = image_data;
len = image_len;
/* claim 3MB starting at PROG_START */
claim(PROG_START, 3 << 20, 0);
claim(PROG_START, PROG_SIZE, 0);
dst = (void *) PROG_START;
if (im[0] == 0x1f && im[1] == 0x8b) {
/* claim 512kB for scratch space */
avail_ram = (char *) claim(0, 512 << 10, 0x10);
end_avail = avail_ram + (512 << 10);
printf("avail_ram = %x\n", avail_ram);
/* claim some memory for scratch space */
avail_ram = (char *) claim(0, SCRATCH_SIZE, 0x10);
begin_avail = avail_high = avail_ram;
end_avail = avail_ram + SCRATCH_SIZE;
printf("heap at 0x%x\n", avail_ram);
printf("gunzipping (0x%x <- 0x%x:0x%0x)...", dst, im, im+len);
gunzip(dst, 3 << 20, im, &len);
gunzip(dst, PROG_SIZE, im, &len);
printf("done %u bytes\n", len);
printf("%u bytes of heap consumed, max in use %u\n",
avail_high - begin_avail, heap_max);
} else {
memmove(dst, im, len);
}
flush_cache(dst, len);
stop_imac_ethernet();
stop_imac_usb();
make_bi_recs((unsigned long) dst + len);
sa = (unsigned long)PROG_START;
printf("start address = 0x%x\n", sa);
(*(void (*)())sa)(0, 0, prom, a1, a2);
(*(void (*)())sa)(a1, a2, prom);
printf("returned?\n");
......@@ -122,6 +128,7 @@ void make_bi_recs(unsigned long addr)
rec = (struct bi_record *)((unsigned long)rec + rec->size);
}
#if 0
#define eieio() asm volatile("eieio");
void stop_imac_ethernet(void)
......@@ -172,14 +179,35 @@ void stop_imac_usb(void)
*usb_ctrl = 0x01000000; /* cpu_to_le32(1) */
eieio();
}
#endif
struct memchunk {
unsigned int size;
struct memchunk *next;
};
static struct memchunk *freechunks;
void *zalloc(void *x, unsigned items, unsigned size)
{
void *p = avail_ram;
void *p;
struct memchunk **mpp, *mp;
size *= items;
size = (size + 7) & -8;
heap_use += size;
if (heap_use > heap_max)
heap_max = heap_use;
for (mpp = &freechunks; (mp = *mpp) != 0; mpp = &mp->next) {
if (mp->size == size) {
*mpp = mp->next;
return mp;
}
}
p = avail_ram;
avail_ram += size;
if (avail_ram > avail_high)
avail_high = avail_ram;
if (avail_ram > end_avail) {
printf("oops... out of memory\n");
pause();
......@@ -189,6 +217,17 @@ void *zalloc(void *x, unsigned items, unsigned size)
void zfree(void *x, void *addr, unsigned nb)
{
struct memchunk *mp = addr;
nb = (nb + 7) & -8;
heap_use -= nb;
if (avail_ram == addr + nb) {
avail_ram = addr;
return;
}
mp->size = nb;
mp->next = freechunks;
freechunks = mp;
}
#define HEAD_CRC 2
......
......@@ -88,11 +88,15 @@ fi
if [ "$CONFIG_4xx" = "y" -o "$CONFIG_8xx" = "y" ]; then
bool 'Math emulation' CONFIG_MATH_EMULATION
fi
endmenu
mainmenu_option next_comment
comment 'General setup'
bool 'High memory support (experimental)' CONFIG_HIGHMEM
bool 'Mac-on-Linux support' CONFIG_MOL
define_bool CONFIG_ISA n
define_bool CONFIG_SBUS n
......@@ -140,20 +144,6 @@ if [ "$CONFIG_4xx" != "y" -a "$CONFIG_8xx" != "y" ]; then
bool 'Backward compatibility mode for Xpmac' CONFIG_FB_COMPAT_XPMAC
fi
bool 'Power management support for PowerBooks' CONFIG_PMAC_PBOOK
bool 'Support for PowerMac floppy' CONFIG_MAC_FLOPPY
tristate 'Support for PowerMac serial ports' CONFIG_MAC_SERIAL
if [ "$CONFIG_MAC_SERIAL" = "y" ]; then
bool ' Support for console on serial port' CONFIG_SERIAL_CONSOLE
fi
bool 'Apple Desktop Bus (ADB) support' CONFIG_ADB
if [ "$CONFIG_ADB" = "y" ]; then
bool ' Include CUDA ADB driver' CONFIG_ADB_CUDA
bool ' Include MacIO ADB driver' CONFIG_ADB_MACIO
bool ' Include PMU (Powerbook) ADB driver' CONFIG_ADB_PMU
bool 'Support for ADB keyboard' CONFIG_ADB_KEYBOARD
bool 'Support for ADB mouse' CONFIG_ADBMOUSE
fi
tristate 'Support for /dev/rtc' CONFIG_PPC_RTC
bool 'Support for Open Firmware device tree in /proc' CONFIG_PROC_DEVICETREE
bool 'Support for early boot text console (BootX only)' CONFIG_BOOTX_TEXT
......@@ -192,7 +182,6 @@ endmenu
source drivers/mtd/Config.in
source drivers/pnp/Config.in
source drivers/block/Config.in
#source drivers.new/Config.in
if [ "$CONFIG_NET" = "y" ]; then
source net/Config.in
......@@ -262,6 +251,43 @@ comment 'Console drivers'
source drivers/video/Config.in
endmenu
source drivers/input/Config.in
mainmenu_option next_comment
comment 'Macintosh device drivers'
if [ "$CONFIG_ALL_PPC" = "y" ]; then
# we want to change this to something like CONFIG_SYSCTRL_CUDA/PMU
bool 'Support for CUDA based PowerMacs' CONFIG_ADB_CUDA
bool 'Support for PMU based PowerMacs' CONFIG_ADB_PMU
if [ "$CONFIG_ADB_PMU" = "y" ]; then
bool ' Power management support for PowerBooks' CONFIG_PMAC_PBOOK
# made a separate option since backlight may end up beeing used
# on non-powerbook machines (but only on PMU based ones AFAIK)
bool ' Backlight control for LCD screens' CONFIG_PMAC_BACKLIGHT
fi
bool 'Support for PowerMac floppy' CONFIG_MAC_FLOPPY
tristate 'Support for PowerMac serial ports' CONFIG_MAC_SERIAL
if [ "$CONFIG_MAC_SERIAL" = "y" ]; then
bool ' Support for console on serial port' CONFIG_SERIAL_CONSOLE
fi
bool 'Apple Desktop Bus (ADB) support' CONFIG_ADB
if [ "$CONFIG_ADB" = "y" ]; then
bool ' Include MacIO (CHRP) ADB driver' CONFIG_ADB_MACIO
fi
fi
if [ "$CONFIG_ADB" = "y" ]; then
dep_bool ' Use input layer for ADB devices' CONFIG_INPUT_ADBHID $CONFIG_INPUT
if [ "$CONFIG_INPUT_ADBHID" = "y" ]; then
define_bool CONFIG_MAC_HID y
bool ' Support for ADB raw keycodes' CONFIG_MAC_ADBKEYCODES
bool ' Support for mouse button 2+3 emulation' CONFIG_MAC_EMUMOUSEBTN
else
bool ' Support for ADB keyboard (old driver)' CONFIG_ADB_KEYBOARD
fi
fi
endmenu
source drivers/char/Config.in
source drivers/media/Config.in
......@@ -287,7 +313,6 @@ source arch/ppc/8260_io/Config.in
fi
source drivers/usb/Config.in
source drivers/input/Config.in
mainmenu_option next_comment
comment 'Kernel hacking'
......
This diff is collapsed.
......@@ -8,13 +8,19 @@
#
CONFIG_EXPERIMENTAL=y
#
# Loadable module support
#
# CONFIG_MODULES is not set
#
# Platform support
#
CONFIG_PPC=y
# CONFIG_6xx is not set
# CONFIG_4xx is not set
# CONFIG_PPC64BRIDGE is not set
# CONFIG_POWER3 is not set
# CONFIG_POWER4 is not set
CONFIG_8260=y
# CONFIG_8xx is not set
CONFIG_6xx=y
......@@ -28,14 +34,10 @@ CONFIG_EST8260=y
# CONFIG_ALTIVEC is not set
CONFIG_MACH_SPECIFIC=y
#
# Loadable module support
#
# CONFIG_MODULES is not set
#
# General setup
#
# CONFIG_HIGHMEM is not set
# CONFIG_ISA is not set
# CONFIG_SBUS is not set
# CONFIG_PCI is not set
......@@ -56,14 +58,16 @@ CONFIG_KERNEL_ELF=y
# CONFIG_PARPORT is not set
# CONFIG_VGA_CONSOLE is not set
# CONFIG_FB is not set
# CONFIG_PMAC_PBOOK is not set
# CONFIG_MAC_FLOPPY is not set
# CONFIG_MAC_SERIAL is not set
# CONFIG_ADB is not set
# CONFIG_PPC_RTC is not set
# CONFIG_PROC_DEVICETREE is not set
# CONFIG_BOOTX_TEXT is not set
# CONFIG_MOTOROLA_HOTSWAP is not set
#
# Memory Technology Devices (MTD)
#
# CONFIG_MTD is not set
#
# Plug and Play configuration
#
......@@ -84,8 +88,10 @@ CONFIG_BLK_DEV_LOOP=y
# CONFIG_BLK_DEV_MD is not set
# CONFIG_MD_LINEAR is not set
# CONFIG_MD_RAID0 is not set
# CONFIG_RAID15_DANGEROUS is not set
# CONFIG_MD_RAID1 is not set
# CONFIG_MD_RAID5 is not set
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_SIZE=4096
CONFIG_BLK_DEV_INITRD=y
#
......@@ -105,17 +111,11 @@ CONFIG_IP_MULTICAST=y
CONFIG_IP_PNP=y
CONFIG_IP_PNP_BOOTP=y
# CONFIG_IP_PNP_RARP is not set
# CONFIG_IP_ROUTER is not set
# CONFIG_NET_IPIP is not set
# CONFIG_NET_IPGRE is not set
# CONFIG_IP_MROUTE is not set
CONFIG_IP_ALIAS=y
# CONFIG_INET_ECN is not set
CONFIG_SYN_COOKIES=y
#
# (it is safe to leave these untouched)
#
CONFIG_SKB_LARGE=y
# CONFIG_IPV6 is not set
# CONFIG_KHTTPD is not set
# CONFIG_ATM is not set
......@@ -126,9 +126,9 @@ CONFIG_SKB_LARGE=y
# CONFIG_IPX is not set
# CONFIG_ATALK is not set
# CONFIG_DECNET is not set
# CONFIG_BRIDGE is not set
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
# CONFIG_BRIDGE is not set
# CONFIG_LLC is not set
# CONFIG_ECONET is not set
# CONFIG_WAN_ROUTER is not set
......@@ -164,6 +164,7 @@ CONFIG_NETDEVICES=y
# CONFIG_DUMMY is not set
# CONFIG_BONDING is not set
# CONFIG_EQUALIZER is not set
# CONFIG_TUN is not set
# CONFIG_ETHERTAP is not set
# CONFIG_NET_SB1000 is not set
......@@ -244,6 +245,15 @@ CONFIG_NET_ETHERNET=y
#
# CONFIG_FB is not set
#
# Input core support
#
# CONFIG_INPUT is not set
#
# Macintosh device drivers
#
#
# Character devices
#
......@@ -269,19 +279,19 @@ CONFIG_UNIX98_PTY_COUNT=256
# Joysticks
#
# CONFIG_JOYSTICK is not set
#
# Input core support is needed for joysticks
#
# CONFIG_QIC02_TAPE is not set
#
# Watchdog Cards
#
# CONFIG_WATCHDOG is not set
# CONFIG_INTEL_RNG is not set
# CONFIG_NVRAM is not set
# CONFIG_RTC is not set
#
# Video For Linux
#
# CONFIG_VIDEO_DEV is not set
# CONFIG_DTLK is not set
# CONFIG_R3964 is not set
# CONFIG_APPLICOM is not set
......@@ -290,9 +300,13 @@ CONFIG_UNIX98_PTY_COUNT=256
# Ftape, the floppy tape device driver
#
# CONFIG_FTAPE is not set
# CONFIG_DRM is not set
# CONFIG_DRM_TDFX is not set
# CONFIG_AGP is not set
# CONFIG_DRM is not set
#
# Multimedia devices
#
# CONFIG_VIDEO_DEV is not set
#
# File systems
......@@ -310,6 +324,7 @@ CONFIG_UNIX98_PTY_COUNT=256
# CONFIG_UMSDOS_FS is not set
# CONFIG_VFAT_FS is not set
# CONFIG_EFS_FS is not set
# CONFIG_JFFS_FS is not set
# CONFIG_CRAMFS is not set
# CONFIG_RAMFS is not set
# CONFIG_ISO9660_FS is not set
......@@ -369,6 +384,7 @@ CONFIG_PARTITION_ADVANCED=y
# CONFIG_MAC_PARTITION is not set
# CONFIG_MSDOS_PARTITION is not set
# CONFIG_SGI_PARTITION is not set
# CONFIG_ULTRIX_PARTITION is not set
# CONFIG_SUN_PARTITION is not set
# CONFIG_NLS is not set
......@@ -382,7 +398,7 @@ CONFIG_PARTITION_ADVANCED=y
#
CONFIG_SCC_ENET=y
CONFIG_SCC1_ENET=y
# CONFIG_FCC_ENET is not set
# CONFIG_FEC_ENET is not set
#
# USB support
......
......@@ -14,14 +14,12 @@ CONFIG_EXPERIMENTAL=y
CONFIG_PPC=y
CONFIG_6xx=y
# CONFIG_4xx is not set
# CONFIG_PPC64BRIDGE is not set
# CONFIG_82xx is not set
# CONFIG_PPC64 is not set
# CONFIG_8260 is not set
# CONFIG_8xx is not set
# CONFIG_PMAC is not set
# CONFIG_PREP is not set
# CONFIG_CHRP is not set
# CONFIG_ALL_PPC is not set
CONFIG_GEMINI=y
# CONFIG_EST8260 is not set
# CONFIG_APUS is not set
# CONFIG_SMP is not set
CONFIG_ALTIVEC=y
......@@ -37,7 +35,8 @@ CONFIG_KMOD=y
#
# General setup
#
# CONFIG_PCI is not set
# CONFIG_ISA is not set
# CONFIG_SBUS is not set
CONFIG_PCI=y
CONFIG_NET=y
CONFIG_SYSCTL=y
......@@ -47,8 +46,12 @@ CONFIG_KCORE_ELF=y
CONFIG_BINFMT_ELF=y
CONFIG_KERNEL_ELF=y
# CONFIG_BINFMT_MISC is not set
# CONFIG_PCI_NAMES is not set
# CONFIG_HOTPLUG is not set
# CONFIG_PCMCIA is not set
#
# Parallel port support
#
# CONFIG_PARPORT is not set
# CONFIG_VGA_CONSOLE is not set
# CONFIG_FB is not set
......@@ -57,7 +60,6 @@ CONFIG_KERNEL_ELF=y
# CONFIG_MAC_SERIAL is not set
# CONFIG_ADB is not set
# CONFIG_PROC_DEVICETREE is not set
# CONFIG_TOTALMP is not set
# CONFIG_BOOTX_TEXT is not set
# CONFIG_MOTOROLA_HOTSWAP is not set
......@@ -70,22 +72,16 @@ CONFIG_KERNEL_ELF=y
# Block devices
#
# CONFIG_BLK_DEV_FD is not set
# CONFIG_BLK_DEV_IDE is not set
#
# Please see Documentation/ide.txt for help/info on IDE drives
# Additional Block Devices
#
# CONFIG_BLK_DEV_HD_ONLY is not set
# CONFIG_BLK_CPQ_DA is not set
# CONFIG_BLK_DEV_LOOP is not set
# CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_LVM is not set
# CONFIG_BLK_DEV_MD is not set
# CONFIG_RAID15_DANGEROUS is not set
# CONFIG_BLK_DEV_RAM is not set
# CONFIG_BLK_DEV_XD is not set
# CONFIG_BLK_DEV_DAC960 is not set
# CONFIG_PARIDE is not set
# CONFIG_BLK_DEV_IDE_MODES is not set
# CONFIG_BLK_DEV_HD is not set
#
# Networking options
......@@ -137,6 +133,13 @@ CONFIG_SKB_LARGE=y
#
# CONFIG_NET_SCHED is not set
#
# ATA/IDE/MFM/RLL support
#
# CONFIG_IDE is not set
# CONFIG_BLK_DEV_IDE_MODES is not set
# CONFIG_BLK_DEV_HD is not set
#
# SCSI support
#
......@@ -148,7 +151,6 @@ CONFIG_SCSI=y
CONFIG_BLK_DEV_SD=y
CONFIG_SD_EXTRA_DEVS=40
# CONFIG_CHR_DEV_ST is not set
CONFIG_ST_EXTRA_DEVS=2
CONFIG_BLK_DEV_SR=y
CONFIG_BLK_DEV_SR_VENDOR=y
CONFIG_SR_EXTRA_DEVS=2
......@@ -171,7 +173,6 @@ CONFIG_SCSI_CONSTANTS=y
# CONFIG_SCSI_AHA1542 is not set
# CONFIG_SCSI_AHA1740 is not set
# CONFIG_SCSI_AIC7XXX is not set
# CONFIG_SCSI_IPS is not set
# CONFIG_SCSI_ADVANSYS is not set
# CONFIG_SCSI_IN2000 is not set
# CONFIG_SCSI_AM53C974 is not set
......@@ -184,43 +185,22 @@ CONFIG_SCSI_CONSTANTS=y
# CONFIG_SCSI_FUTURE_DOMAIN is not set
# CONFIG_SCSI_GDTH is not set
# CONFIG_SCSI_GENERIC_NCR5380 is not set
# CONFIG_SCSI_INITIO is not set
# CONFIG_SCSI_INIA100 is not set
# CONFIG_SCSI_NCR53C406A is not set
# CONFIG_SCSI_SYM53C416 is not set
# CONFIG_SCSI_SIM710 is not set
# CONFIG_SCSI_NCR53C7xx is not set
# CONFIG_SCSI_NCR53C8XX is not set
CONFIG_SCSI_SYM53C8XX=y
CONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS=8
CONFIG_SCSI_NCR53C8XX_MAX_TAGS=32
CONFIG_SCSI_NCR53C8XX_SYNC=20
# CONFIG_SCSI_NCR53C8XX_PROFILE is not set
# CONFIG_SCSI_NCR53C8XX_IOMAPPED is not set
# CONFIG_SCSI_NCR53C8XX_PQS_PDS is not set
# CONFIG_SCSI_NCR53C8XX_SYMBIOS_COMPAT is not set
# CONFIG_SCSI_NCR53C7xx_sync is not set
# CONFIG_SCSI_NCR53C7xx_FAST is not set
# CONFIG_SCSI_NCR53C7xx_DISCONNECT is not set
# CONFIG_SCSI_PAS16 is not set
# CONFIG_SCSI_PCI2000 is not set
# CONFIG_SCSI_PCI2220I is not set
# CONFIG_SCSI_PSI240I is not set
# CONFIG_SCSI_QLOGIC_FAS is not set
# CONFIG_SCSI_QLOGIC_ISP is not set
# CONFIG_SCSI_QLOGIC_FC is not set
# CONFIG_SCSI_QLOGIC_1280 is not set
# CONFIG_SCSI_SEAGATE is not set
# CONFIG_SCSI_DC390T is not set
# CONFIG_SCSI_T128 is not set
# CONFIG_SCSI_U14_34F is not set
# CONFIG_SCSI_ULTRASTOR is not set
# CONFIG_SCSI_DEBUG is not set
# CONFIG_SCSI_MESH is not set
# CONFIG_SCSI_MAC53C94 is not set
# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
#
# IEEE 1394 (FireWire) support
#
# CONFIG_IEEE1394 is not set
#
# Network device support
......@@ -232,6 +212,7 @@ CONFIG_NETDEVICES=y
#
# CONFIG_ARCNET is not set
# CONFIG_DUMMY is not set
# CONFIG_BONDING is not set
# CONFIG_EQUALIZER is not set
# CONFIG_ETHERTAP is not set
# CONFIG_NET_SB1000 is not set
......@@ -249,12 +230,10 @@ CONFIG_NCR885E=y
# CONFIG_LANCE is not set
# CONFIG_NET_VENDOR_SMC is not set
# CONFIG_NET_VENDOR_RACAL is not set
# CONFIG_RTL8139 is not set
# CONFIG_DM9102 is not set
# CONFIG_AT1700 is not set
# CONFIG_DEPCA is not set
# CONFIG_NET_ISA is not set
# CONFIG_NET_EISA is not set
# CONFIG_NET_PCI is not set
# CONFIG_NET_POCKET is not set
#
......@@ -274,7 +253,7 @@ CONFIG_NCR885E=y
# CONFIG_NET_RADIO is not set
#
# Token Ring driver support
# Token Ring devices
#
# CONFIG_TR is not set
# CONFIG_NET_FC is not set
......@@ -291,6 +270,11 @@ CONFIG_NCR885E=y
#
# CONFIG_HAMRADIO is not set
#
# IrDA (infrared) support
#
# CONFIG_IRDA is not set
#
# ISDN subsystem
#
......@@ -361,12 +345,7 @@ CONFIG_UNIX98_PTY_COUNT=256
# CONFIG_AGP is not set
#
# USB support
#
# CONFIG_USB is not set
#
# Filesystems
# File systems
#
# CONFIG_QUOTA is not set
# CONFIG_AUTOFS_FS is not set
......@@ -378,12 +357,14 @@ CONFIG_UNIX98_PTY_COUNT=256
# CONFIG_FAT_FS is not set
# CONFIG_EFS_FS is not set
# CONFIG_CRAMFS is not set
# CONFIG_RAMFS is not set
CONFIG_ISO9660_FS=y
# CONFIG_JOLIET is not set
# CONFIG_MINIX_FS is not set
# CONFIG_NTFS_FS is not set
# CONFIG_HPFS_FS is not set
CONFIG_PROC_FS=y
# CONFIG_DEVFS_FS is not set
CONFIG_DEVPTS_FS=y
# CONFIG_QNX4FS_FS is not set
# CONFIG_ROMFS_FS is not set
......@@ -397,6 +378,7 @@ CONFIG_EXT2_FS=y
#
# CONFIG_CODA_FS is not set
CONFIG_NFS_FS=y
# CONFIG_NFS_V3 is not set
# CONFIG_NFSD is not set
CONFIG_SUNRPC=y
CONFIG_LOCKD=y
......@@ -415,6 +397,11 @@ CONFIG_MSDOS_PARTITION=y
#
# CONFIG_SOUND is not set
#
# USB support
#
# CONFIG_USB is not set
#
# Kernel hacking
#
......
......@@ -8,19 +8,28 @@
#
CONFIG_EXPERIMENTAL=y
#
# Loadable module support
#
# CONFIG_MODULES is not set
#
# Platform support
#
CONFIG_PPC=y
# CONFIG_6xx is not set
# CONFIG_4xx is not set
# CONFIG_PPC64BRIDGE is not set
# CONFIG_POWER3 is not set
# CONFIG_POWER4 is not set
# CONFIG_8260 is not set
CONFIG_8xx=y
CONFIG_SERIAL_CONSOLE=y
# CONFIG_RPXLITE is not set
CONFIG_RPXCLASSIC=y
# CONFIG_BSEIP is not set
# CONFIG_TQM8xxL is not set
# CONFIG_TQM860L is not set
# CONFIG_TQM860 is not set
# CONFIG_MBX is not set
# CONFIG_WINCEPT is not set
# CONFIG_ALL_PPC is not set
......@@ -28,14 +37,10 @@ CONFIG_RPXCLASSIC=y
CONFIG_MACH_SPECIFIC=y
CONFIG_MATH_EMULATION=y
#
# Loadable module support
#
# CONFIG_MODULES is not set
#
# General setup
#
# CONFIG_HIGHMEM is not set
# CONFIG_ISA is not set
# CONFIG_SBUS is not set
# CONFIG_PCI is not set
......@@ -55,6 +60,11 @@ CONFIG_KERNEL_ELF=y
#
# CONFIG_PARPORT is not set
#
# Memory Technology Devices (MTD)
#
# CONFIG_MTD is not set
#
# Plug and Play configuration
#
......@@ -75,8 +85,10 @@ CONFIG_BLK_DEV_LOOP=y
# CONFIG_BLK_DEV_MD is not set
# CONFIG_MD_LINEAR is not set
# CONFIG_MD_RAID0 is not set
# CONFIG_RAID15_DANGEROUS is not set
# CONFIG_MD_RAID1 is not set
# CONFIG_MD_RAID5 is not set
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_SIZE=4096
CONFIG_BLK_DEV_INITRD=y
#
......@@ -96,17 +108,11 @@ CONFIG_IP_MULTICAST=y
CONFIG_IP_PNP=y
CONFIG_IP_PNP_BOOTP=y
# CONFIG_IP_PNP_RARP is not set
# CONFIG_IP_ROUTER is not set
# CONFIG_NET_IPIP is not set
# CONFIG_NET_IPGRE is not set
# CONFIG_IP_MROUTE is not set
CONFIG_IP_ALIAS=y
# CONFIG_INET_ECN is not set
CONFIG_SYN_COOKIES=y
#
# (it is safe to leave these untouched)
#
CONFIG_SKB_LARGE=y
# CONFIG_IPV6 is not set
# CONFIG_KHTTPD is not set
# CONFIG_ATM is not set
......@@ -117,9 +123,9 @@ CONFIG_SKB_LARGE=y
# CONFIG_IPX is not set
# CONFIG_ATALK is not set
# CONFIG_DECNET is not set
# CONFIG_BRIDGE is not set
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
# CONFIG_BRIDGE is not set
# CONFIG_LLC is not set
# CONFIG_ECONET is not set
# CONFIG_WAN_ROUTER is not set
......@@ -155,6 +161,7 @@ CONFIG_NETDEVICES=y
# CONFIG_DUMMY is not set
# CONFIG_BONDING is not set
# CONFIG_EQUALIZER is not set
# CONFIG_TUN is not set
# CONFIG_ETHERTAP is not set
# CONFIG_NET_SB1000 is not set
......@@ -235,6 +242,15 @@ CONFIG_NET_ETHERNET=y
#
# CONFIG_FB is not set
#
# Input core support
#
# CONFIG_INPUT is not set
#
# Macintosh device drivers
#
#
# Character devices
#
......@@ -260,19 +276,19 @@ CONFIG_UNIX98_PTY_COUNT=256
# Joysticks
#
# CONFIG_JOYSTICK is not set
#
# Input core support is needed for joysticks
#
# CONFIG_QIC02_TAPE is not set
#
# Watchdog Cards
#
# CONFIG_WATCHDOG is not set
# CONFIG_INTEL_RNG is not set
# CONFIG_NVRAM is not set
# CONFIG_RTC is not set
#
# Video For Linux
#
# CONFIG_VIDEO_DEV is not set
# CONFIG_DTLK is not set
# CONFIG_R3964 is not set
# CONFIG_APPLICOM is not set
......@@ -281,9 +297,13 @@ CONFIG_UNIX98_PTY_COUNT=256
# Ftape, the floppy tape device driver
#
# CONFIG_FTAPE is not set
# CONFIG_DRM is not set
# CONFIG_DRM_TDFX is not set
# CONFIG_AGP is not set
# CONFIG_DRM is not set
#
# Multimedia devices
#
# CONFIG_VIDEO_DEV is not set
#
# File systems
......@@ -301,6 +321,7 @@ CONFIG_UNIX98_PTY_COUNT=256
# CONFIG_UMSDOS_FS is not set
# CONFIG_VFAT_FS is not set
# CONFIG_EFS_FS is not set
# CONFIG_JFFS_FS is not set
# CONFIG_CRAMFS is not set
# CONFIG_RAMFS is not set
# CONFIG_ISO9660_FS is not set
......@@ -360,6 +381,7 @@ CONFIG_PARTITION_ADVANCED=y
# CONFIG_MAC_PARTITION is not set
# CONFIG_MSDOS_PARTITION is not set
# CONFIG_SGI_PARTITION is not set
# CONFIG_ULTRIX_PARTITION is not set
# CONFIG_SUN_PARTITION is not set
# CONFIG_NLS is not set
......@@ -374,7 +396,9 @@ CONFIG_PARTITION_ADVANCED=y
CONFIG_SCC_ENET=y
CONFIG_SCC1_ENET=y
CONFIG_FEC_ENET=y
CONFIG_ENET_BIG_BUFFERS=y
CONFIG_8xxSMC2=y
# CONFIG_8xx_ALTSMC2 is not set
CONFIG_8xxSCC=y
#
......
This diff is collapsed.
......@@ -99,8 +99,10 @@ endif
ifeq ($(CONFIG_ALL_PPC),y)
O_OBJS += pmac_pic.o pmac_setup.o pmac_time.o feature.o pmac_pci.o prom.o \
chrp_setup.o chrp_time.o chrp_pci.o open_pic.o indirect_pci.o \
prep_pci.o i8259.o prep_nvram.o prep_time.o residual.o \
pmac_backlight.o
prep_pci.o i8259.o prep_nvram.o prep_time.o residual.o
ifeq ($(CONFIG_PMAC_BACKLIGHT),y)
O_OBJS += pmac_backlight.o
endif
OX_OBJS += prep_setup.o
endif
ifeq ($(CONFIG_GEMINI),y)
......
......@@ -304,7 +304,7 @@ __apus
void apus_calibrate_decr(void)
{
#ifdef CONFIG_APUS
int freq, divisor;
unsigned long freq;
/* This algorithm for determining the bus speed was
contributed by Ralph Schmidt. */
......@@ -335,8 +335,8 @@ void apus_calibrate_decr(void)
bus_speed = 60;
freq = 15000000;
} else if ((bus_speed >= 63) && (bus_speed < 69)) {
bus_speed = 66;
freq = 16500000;
bus_speed = 67;
freq = 16666667;
} else {
printk ("APUS: Unable to determine bus speed (%d). "
"Defaulting to 50MHz", bus_speed);
......@@ -375,12 +375,10 @@ void apus_calibrate_decr(void)
}
freq *= 60; /* try to make freq/1e6 an integer */
divisor = 60;
printk("time_init: decrementer frequency = %d/%d\n", freq, divisor);
decrementer_count = freq / HZ / divisor;
count_period_num = divisor;
count_period_den = freq / 1000000;
printk("time_init: decrementer frequency = %lu.%.6lu MHz\n",
freq/1000000, freq%1000000);
tb_ticks_per_jiffy = freq / HZ;
tb_to_us = mulhwu_scale_factor(freq, 1000000);
__bus_speed = bus_speed;
__speed_test_failed = speed_test_failed;
......
......@@ -284,13 +284,38 @@ hydra_init(void)
return 1;
}
#ifdef CONFIG_POWER4
static void
power4_fixup_dev(struct pci_dev *dev)
{
int i;
unsigned long offset;
for (i = 0; i < 6; ++i) {
if (dev->resource[i].start == 0)
continue;
offset = pci_address_offset(dev->bus->number,
dev->resource[i].flags);
if (offset) {
dev->resource[i].start += offset;
dev->resource[i].end += offset;
printk("device %x.%x[%d] now [%lx..%lx]\n",
dev->bus->number, dev->devfn, i,
dev->resource[i].start,
dev->resource[i].end);
}
/* zap the 2nd function of the winbond chip */
if (dev->resource[i].flags & IORESOURCE_IO
&& dev->bus->number == 0 && dev->devfn == 0x81)
dev->resource[i].flags &= ~IORESOURCE_IO;
}
}
#endif /* CONFIG_POWER4 */
void __init
chrp_pcibios_fixup(void)
{
struct pci_dev *dev;
#ifdef CONFIG_POWER4
int i;
#endif
int *brp;
struct device_node *np;
extern struct pci_ops generic_pci_ops;
......@@ -316,10 +341,8 @@ chrp_pcibios_fixup(void)
/* PCI interrupts are controlled by the OpenPIC */
pci_for_each_dev(dev) {
np = find_pci_device_OFnode(dev->bus->number, dev->devfn);
if ( (np != 0) && (np->n_intrs > 0) && (np->intrs[0].line != 0))
if ((np != 0) && (np->n_intrs > 0) && (np->intrs[0].line != 0))
dev->irq = np->intrs[0].line;
if ( dev->irq )
dev->irq = openpic_to_irq( dev->irq );
/* these need to be absolute addrs for OF and Matrox FB -- Cort */
if ( dev->vendor == PCI_VENDOR_ID_MATROX )
{
......@@ -337,25 +360,7 @@ chrp_pcibios_fixup(void)
dev->devfn, PCI_VENDOR_ID, PCI_VENDOR_ID_AMD);
}
#ifdef CONFIG_POWER4
for (i = 0; i < 6; ++i) {
unsigned long offset;
if (dev->resource[i].start == 0)
continue;
offset = pci_address_offset(dev->bus->number,
dev->resource[i].flags);
if (offset) {
dev->resource[i].start += offset;
dev->resource[i].end += offset;
printk("device %x.%x[%d] now [%lx..%lx]\n",
dev->bus->number, dev->devfn, i,
dev->resource[i].start,
dev->resource[i].end);
}
/* zap the 2nd function of the winbond chip */
if (dev->resource[i].flags & IORESOURCE_IO
&& dev->bus->number == 0 && dev->devfn == 0x81)
dev->resource[i].flags &= ~IORESOURCE_IO;
}
power4_fixup_dev(dev);
#else
if (dev->bus->number > 0 && python_busnr > 0)
dev->resource[0].start += dev->bus->number*0x01000000;
......@@ -363,6 +368,40 @@ chrp_pcibios_fixup(void)
}
}
static struct {
/* parent is iomem */
struct resource ram, pci_mem, isa_mem, pci_io, pci_cfg, rom_exp, flash;
/* parent is isa_mem */
struct resource nvram;
} gg2_resources = {
ram: { "RAM", 0x00000000, 0xbfffffff, IORESOURCE_MEM },
pci_mem: { "GG2 PCI mem", 0xc0000000, 0xf6ffffff, IORESOURCE_MEM },
isa_mem: { "GG2 ISA mem", 0xf7000000, 0xf7ffffff },
pci_io: { "GG2 PCI I/O", 0xf8000000, 0xf8ffffff },
pci_cfg: { "GG2 PCI cfg", 0xfec00000, 0xfec7ffff },
rom_exp: { "ROM exp", 0xff000000, 0xff7fffff, },
flash: { "Flash ROM", 0xfff80000, 0xffffffff },
nvram: { "NVRAM", 0xf70e0000, 0xf70e7fff },
};
static void __init gg2_pcibios_fixup(void)
{
int i;
extern unsigned long *end_of_DRAM;
chrp_pcibios_fixup();
gg2_resources.ram.end = (unsigned long)end_of_DRAM-PAGE_OFFSET;
for (i = 0; i < 7; i++)
request_resource(&iomem_resource,
&((struct resource *)&gg2_resources)[i]);
request_resource(&gg2_resources.isa_mem, &gg2_resources.nvram);
}
static void __init gg2_pcibios_fixup_bus(struct pci_bus *bus)
{
bus->resource[1] = &gg2_resources.pci_mem;
}
decl_config_access_method(grackle);
decl_config_access_method(indirect);
decl_config_access_method(rtas);
......@@ -372,6 +411,7 @@ chrp_setup_pci_ptrs(void)
{
struct device_node *py;
ppc_md.pcibios_fixup = chrp_pcibios_fixup;
#ifdef CONFIG_POWER4
set_config_access_method(rtas);
pci_dram_offset = 0;
......@@ -428,16 +468,17 @@ chrp_setup_pci_ptrs(void)
}
else
{
/* LongTrail */
pci_dram_offset = 0;
isa_mem_base = 0xf7000000;
isa_io_base = 0xf8000000;
set_config_access_method(gg2);
ppc_md.pcibios_fixup = gg2_pcibios_fixup;
ppc_md.pcibios_fixup_bus = gg2_pcibios_fixup_bus;
}
}
}
#endif /* CONFIG_POWER4 */
ppc_md.pcibios_fixup = chrp_pcibios_fixup;
}
#ifdef CONFIG_PPC64BRIDGE
......
This diff is collapsed.
......@@ -33,18 +33,20 @@ static int nvram_as1 = NVRAM_AS1;
static int nvram_as0 = NVRAM_AS0;
static int nvram_data = NVRAM_DATA;
void __init chrp_time_init(void)
long __init chrp_time_init(void)
{
struct device_node *rtcs;
int base;
rtcs = find_compatible_devices("rtc", "pnpPNP,b00");
if (rtcs == NULL || rtcs->addrs == NULL)
return;
return 0;
base = rtcs->addrs[0].address;
nvram_as1 = 0;
nvram_as0 = base;
nvram_data = base + 1;
return 0;
}
int __chrp chrp_cmos_clock_read(int addr)
......@@ -116,28 +118,34 @@ int __chrp chrp_set_rtc_time(unsigned long nowtime)
unsigned long __chrp chrp_get_rtc_time(void)
{
unsigned int year, mon, day, hour, min, sec;
int i;
int uip, i;
/* 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 (chrp_cmos_clock_read(RTC_FREQ_SELECT) & RTC_UIP)
break;
for (i = 0 ; i < 1000000 ; i++) /* must try at least 2.228 ms */
if (!(chrp_cmos_clock_read(RTC_FREQ_SELECT) & RTC_UIP))
break;
do { /* Isn't this overkill ? UIP above should guarantee consistency */
/* Since the UIP flag is set for about 2.2 ms and the clock
* is typically written with a precision of 1 jiffy, trying
* to obtain a precision better than a few milliseconds is
* an illusion. Only consistency is interesting, this also
* allows to use the routine for /dev/rtc without a potential
* 1 second kernel busy loop triggered by any reader of /dev/rtc.
*/
for ( i = 0; i<1000000; i++) {
uip = chrp_cmos_clock_read(RTC_FREQ_SELECT);
sec = chrp_cmos_clock_read(RTC_SECONDS);
min = chrp_cmos_clock_read(RTC_MINUTES);
hour = chrp_cmos_clock_read(RTC_HOURS);
day = chrp_cmos_clock_read(RTC_DAY_OF_MONTH);
mon = chrp_cmos_clock_read(RTC_MONTH);
year = chrp_cmos_clock_read(RTC_YEAR);
} while (sec != chrp_cmos_clock_read(RTC_SECONDS));
uip |= chrp_cmos_clock_read(RTC_FREQ_SELECT);
if ((uip & RTC_UIP)==0) break;
}
if (!(chrp_cmos_clock_read(RTC_CONTROL) & RTC_DM_BINARY) || RTC_ALWAYS_BCD)
{
BCD_TO_BIN(sec);
......@@ -156,8 +164,7 @@ unsigned long __chrp chrp_get_rtc_time(void)
void __init chrp_calibrate_decr(void)
{
struct device_node *cpu;
int *fp, divisor;
unsigned long freq;
unsigned int freq, *fp;
if (via_calibrate_decr())
return;
......@@ -169,15 +176,13 @@ void __init chrp_calibrate_decr(void)
freq = 16666000; /* hardcoded default */
cpu = find_type_devices("cpu");
if (cpu != 0) {
fp = (int *) get_property(cpu, "timebase-frequency", NULL);
fp = (unsigned int *)
get_property(cpu, "timebase-frequency", NULL);
if (fp != 0)
freq = *fp;
}
freq *= 30;
divisor = 30;
printk("time_init: decrementer frequency = %lu/%d (%ld MHz)\n", freq,
divisor, (freq/divisor)>>20);
decrementer_count = freq / HZ / divisor;
count_period_num = divisor;
count_period_den = freq / 1000000;
printk("time_init: decrementer frequency = %u.%.6u MHz\n",
freq/1000000, freq%1000000);
tb_ticks_per_jiffy = freq / HZ;
tb_to_us = mulhwu_scale_factor(freq, 1000000);
}
This diff is collapsed.
This diff is collapsed.
......@@ -336,7 +336,7 @@ void __init gemini_init_IRQ(void)
#define gemini_rtc_write(val,x) (writeb((val),(GEMINI_RTC+(x))))
/* ensure that the RTC is up and running */
void __init gemini_time_init(void)
long __init gemini_time_init(void)
{
unsigned char reg;
......@@ -347,6 +347,7 @@ void __init gemini_time_init(void)
gemini_rtc_write((reg & ~(M48T35_RTC_STOPPED)), M48T35_RTC_CONTROL);
gemini_rtc_write((reg | M48T35_RTC_SET), M48T35_RTC_CONTROL);
}
return 0;
}
#undef DEBUG_RTC
......
......@@ -27,6 +27,7 @@
#include <asm/processor.h>
#include <asm/page.h>
#include <linux/config.h>
#include "mol.h"
/*
* Load a PTE into the hash table, if possible.
......@@ -593,6 +594,11 @@ _GLOBAL(flush_hash_segments)
* flush_hash_page(unsigned context, unsigned long va)
*/
_GLOBAL(flush_hash_page)
#ifdef CONFIG_MOL
mflr r10
MOL_HOOK_MMU(10, r6)
mtlr r10
#endif
lis r6,Hash@ha
lwz r6,Hash@l(r6) /* hash table base */
cmpwi 0,r6,0 /* hash table in use? */
......
This diff is collapsed.
This diff is collapsed.
......@@ -286,6 +286,7 @@ void power_save(void)
case 6: /* 603e */
case 7: /* 603ev */
case 8: /* 750 */
case 12: /* 7400 */
save_flags(msr);
__cli();
if (!current->need_resched) {
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -231,10 +231,11 @@ oak_halt(void)
/*
* Document me.
*/
void __init
long __init
oak_time_init(void)
{
/* XXX - Implement me */
return 0;
}
/*
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -204,17 +204,12 @@ pmac_get_irq(struct pt_regs *regs)
unsigned long bits = 0;
#ifdef CONFIG_SMP
void pmac_smp_message_recv(void);
void pmac_smp_message_recv(struct pt_regs *);
/* IPI's are a hack on the powersurge -- Cort */
if ( smp_processor_id() != 0 )
{
#ifdef CONFIG_XMON
static int xmon_2nd;
if (xmon_2nd)
xmon(regs);
#endif
pmac_smp_message_recv();
pmac_smp_message_recv(regs);
return -2; /* ignore, already handled */
}
#endif /* CONFIG_SMP */
......
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.
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.
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