This list is closed, nobody may subscribe to it.
2004 |
Jan
(53) |
Feb
(78) |
Mar
(34) |
Apr
(26) |
May
(25) |
Jun
(34) |
Jul
(16) |
Aug
(16) |
Sep
(2) |
Oct
(58) |
Nov
(13) |
Dec
(32) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2005 |
Jan
(62) |
Feb
(4) |
Mar
(40) |
Apr
(9) |
May
(13) |
Jun
(26) |
Jul
(32) |
Aug
(24) |
Sep
(18) |
Oct
(18) |
Nov
(14) |
Dec
|
2006 |
Jan
(15) |
Feb
(2) |
Mar
(23) |
Apr
(2) |
May
(2) |
Jun
(13) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(1) |
Dec
|
2007 |
Jan
(1) |
Feb
(45) |
Mar
|
Apr
(13) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(1) |
Nov
(31) |
Dec
(5) |
2008 |
Jan
(6) |
Feb
(34) |
Mar
(113) |
Apr
(40) |
May
(19) |
Jun
(5) |
Jul
(41) |
Aug
(13) |
Sep
(53) |
Oct
(4) |
Nov
(53) |
Dec
|
2009 |
Jan
(1) |
Feb
(29) |
Mar
(66) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(163) |
Nov
|
Dec
(91) |
From: <aot...@us...> - 2004-03-02 23:55:33
|
Update of /cvsroot/gc-linux/linux/drivers/exi In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv2879/drivers/exi Modified Files: exi-driver.c Log Message: Added `exi_bus_dev' - parent to all devices attached to the bus. Index: exi-driver.c =================================================================== RCS file: /cvsroot/gc-linux/linux/drivers/exi/exi-driver.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- exi-driver.c 2 Mar 2004 23:27:37 -0000 1.2 +++ exi-driver.c 2 Mar 2004 23:43:24 -0000 1.3 @@ -70,6 +70,10 @@ } +struct device exi_bus_dev = { + .bus_id = "exi0", +}; + struct bus_type exi_bus_type = { .name = "exi", .match = exi_bus_match, @@ -77,11 +81,19 @@ static int __init exi_driver_init(void) { - return bus_register(&exi_bus_type); + int err; + + if ((err = device_register(&exi_bus_dev))) + goto out; + if ((err = bus_register(&exi_bus_type))) + goto out; +out: + return err; } postcore_initcall(exi_driver_init); +EXPORT_SYMBOL(exi_bus_dev); EXPORT_SYMBOL(exi_bus_type); EXPORT_SYMBOL(exi_driver_register); EXPORT_SYMBOL(exi_driver_unregister); |
From: <aot...@us...> - 2004-03-02 23:39:46
|
Update of /cvsroot/gc-linux/linux/include/linux In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv30330/include/linux Modified Files: exi.h Log Message: Added match callback to do generic driver binding - exi_bus_match() Index: exi.h =================================================================== RCS file: /cvsroot/gc-linux/linux/include/linux/exi.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- exi.h 27 Feb 2004 12:26:02 -0000 1.1 +++ exi.h 2 Mar 2004 23:27:38 -0000 1.2 @@ -9,15 +9,23 @@ struct exi_dev { - struct device dev; + unsigned long id; + + struct device dev; }; #define to_exi_dev(n) container_of(n, struct exi_dev, dev) + +struct exi_device_id { + unsigned long dev_id; +}; + struct exi_driver { - char *name; + char *name; + struct exi_device_id *id_table; - struct device_driver driver; + struct device_driver driver; }; #define to_exi_driver(drv) container_of(drv, struct exi_driver, driver) |
From: <aot...@us...> - 2004-03-02 23:39:46
|
Update of /cvsroot/gc-linux/linux/drivers/exi In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv30330/drivers/exi Modified Files: exi-driver.c Log Message: Added match callback to do generic driver binding - exi_bus_match() Index: exi-driver.c =================================================================== RCS file: /cvsroot/gc-linux/linux/drivers/exi/exi-driver.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- exi-driver.c 27 Feb 2004 12:26:02 -0000 1.1 +++ exi-driver.c 2 Mar 2004 23:27:37 -0000 1.2 @@ -40,9 +40,39 @@ driver_unregister(&drv->driver); } +/** + * exi_bus_match - attach a driver to a device. + * @dev: device structure to match. + * @drv: driver structure to match against. + * + * Attaches a driver to a device by matching the device IDs + * the driver claims to support with the actual device ID of + * a particular device. + * + * Returns 1 when driver is attached, 0 otherwise. + */ +static int exi_bus_match(struct device *dev, struct device_driver *drv) +{ + struct exi_dev *exi_dev = to_exi_dev(dev); + struct exi_driver *exi_drv = to_exi_driver(drv); + const struct exi_device_id *ids = exi_drv->id_table; + + if (!ids) + return 0; + + while (ids->dev_id) { + if (ids->dev_id == exi_dev->id) + return 1; + ids++; + } + + return 0; +} + struct bus_type exi_bus_type = { .name = "exi", + .match = exi_bus_match, }; static int __init exi_driver_init(void) |
From: <ham...@us...> - 2004-03-02 16:04:38
|
Update of /cvsroot/gc-linux/linux/drivers/block In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv23664/linux/drivers/block Modified Files: gc_aram.c Log Message: improofed delay .. no idea how long i have to wait .. Index: gc_aram.c =================================================================== RCS file: /cvsroot/gc-linux/linux/drivers/block/gc_aram.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- gc_aram.c 2 Mar 2004 10:16:28 -0000 1.3 +++ gc_aram.c 2 Mar 2004 15:52:41 -0000 1.4 @@ -91,7 +91,7 @@ AR_DMA_CNT_L = length & 0xFFFF; // For security - udelay(10000); + udelay(1000); // Without the Break, the While loop loops endless int counter=0; |
From: <ham...@us...> - 2004-03-02 16:00:46
|
Update of /cvsroot/gc-linux/linux/drivers/net In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22872/linux/drivers/net Modified Files: gc-net.c Log Message: modifications everywhere Index: gc-net.c =================================================================== RCS file: /cvsroot/gc-linux/linux/drivers/net/gc-net.c,v retrieving revision 1.21 retrieving revision 1.22 diff -u -d -r1.21 -r1.22 --- gc-net.c 1 Mar 2004 09:05:17 -0000 1.21 +++ gc-net.c 2 Mar 2004 15:48:53 -0000 1.22 @@ -22,6 +22,9 @@ * $Id$ * * $Log$ + * Revision 1.22 2004/03/02 15:48:53 hamtitampti + * modifications everywhere + * * Revision 1.21 2004/03/01 09:05:17 hamtitampti * added timeout for TX lock * @@ -142,7 +145,6 @@ #define BBA_DBG(format, arg...); { } //#define BBA_DBG(format, arg...) printk(f,## arg) -#define BBA_IRQ 4 #define IRQ_EXI 4 //#define PKT_BUF_SZ 1536 /* Size of each temporary Rx buffer. */ @@ -163,7 +165,7 @@ -void gcif_irq_handler(int channel, int event, void *ct); +void exi_irq_handler(int channel, int event, void *ct); /////////////////////////////////////////////////////////////////////////////////////////////////////// // must be MOVED LATER @@ -393,6 +395,8 @@ exi_deselect(0); } + + void eth_exi_outb(int reg, unsigned char byte) { unsigned short val; @@ -483,7 +487,7 @@ #define GBA_RX_RRP 0x1 #define GBA_RX_RHBP 0xf -static irqreturn_t gc_bba_interrupt(int irq, void *dev_id, struct pt_regs * regs); +static irqreturn_t gc_exi_interrupt(int irq, void *dev_id, struct pt_regs * regs); static int adapter_init(struct net_device *dev); @@ -501,7 +505,7 @@ struct gc_private *priv = (struct gc_private *)dev->priv; BBA_DBG("gc_bba_open\n"); - int ret = request_irq(dev->irq, gc_bba_interrupt, 0, dev->name, dev); + int ret = request_irq(dev->irq, gc_exi_interrupt, 0, dev->name, dev); if (ret) { BBA_DBG(KERN_ERR "%s: unable to get IRQ %d\n", dev->name, dev->irq); return ret; @@ -764,7 +768,7 @@ #define BBA_IRQ_RBFI 0x80 -static void inline gcif_service(struct net_device *dev) +static void inline exi_service(struct net_device *dev) { struct gc_private *priv = (struct gc_private *)dev->priv; @@ -774,7 +778,7 @@ int status = inb9 & inb8; - BBA_DBG("gcif_service: %08x %08x status %08x\n", inb8, inb9, status); + BBA_DBG("exi_service: %08x %08x status %08x\n", inb8, inb9, status); if (!status) { eth_outb(9, 0xff); @@ -864,7 +868,7 @@ * Handle the network interface interrupts. */ -static irqreturn_t gc_bba_interrupt(int irq, void *dev_id, struct pt_regs * regs) +static irqreturn_t gc_exi_interrupt(int irq, void *dev_id, struct pt_regs * regs) { struct net_device *dev = (struct net_device *)dev_id; @@ -1001,7 +1005,7 @@ dev->priv = (struct gc_private *)kmalloc(sizeof(struct net_device_stats), GFP_KERNEL); priv = (struct gc_private *)dev->priv; - dev->irq = BBA_IRQ; + dev->irq = IRQ_EXI; dev->get_stats = gc_stats; @@ -1099,8 +1103,6 @@ dev->name[IFNAMSIZ-1]= 0; */ - exi_request_irq(2, EXI_EVENT_IRQ, gcif_irq_handler, NULL); - eth_exi_outb(0x2, 0xFF); eth_exi_outb(0x3, 0xFF); @@ -1115,30 +1117,7 @@ return 0; /* OK */ } -static struct net_device gc_bba_dev; - -static int __init gc_bba_init(void) -{ - memset(&gc_bba_dev,0,sizeof(struct net_device)); - - - BBA_DBG("gc_bba_init\n"); - -// exi_init(); - - gc_bba_dev.init = gc_bba_probe; - if (register_netdev(&gc_bba_dev) != 0) - return -EIO; - return 0; -} - -static void __exit gc_bba_exit(void) -{ - BBA_DBG("gc_bba_exit\n"); - unregister_netdev(&gc_bba_dev); -} - -void gcif_irq_handler(int channel, int event, void *ct) +void exi_irq_handler(int channel, int event, void *ct) { // struct netif *netif = (struct netif*)ct; int s; @@ -1184,7 +1163,7 @@ { BBA_DBG("GC_IRQ service.\n"); eth_exi_outb(3, 0x80); - gcif_service(dev); + exi_service(dev); eth_exi_outb(2, 0xF8); return; } @@ -1194,6 +1173,34 @@ } +static struct net_device *gc_bba_dev; + +static int __init gc_bba_init(void) +{ + gc_bba_dev = alloc_etherdev(sizeof(struct net_device)); + memset(gc_bba_dev,0,sizeof(struct net_device)); + + BBA_DBG("gc_bba_init\n"); + +// exi_init(); + + gc_bba_dev->init = gc_bba_probe; + if (register_netdev(gc_bba_dev) != 0) + return -EIO; + + exi_request_irq(2, EXI_EVENT_IRQ, exi_irq_handler, NULL); + + return 0; +} + +static void __exit gc_bba_exit(void) +{ + BBA_DBG("gc_bba_exit\n"); + unregister_netdev(gc_bba_dev); +} + + + module_init(gc_bba_init); module_exit(gc_bba_exit); |
From: <mi...@us...> - 2004-03-02 10:38:11
|
Update of /cvsroot/gc-linux/linux/drivers/block In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22624 Added Files: Kconfig Makefile Log Message: Makefile and Kconfig for ARAM driver --- NEW FILE: Kconfig --- # # Block device driver configuration # menu "Block devices" config BLK_DEV_FD tristate "Normal floppy disk support" depends on (!X86_PC9800 && !ARCH_S390 && !M68K) || Q40 || (SUN3X && BROKEN) ---help--- If you want to use the floppy disk drive(s) of your PC under Linux, say Y. Information about this driver, especially important for IBM Thinkpad users, is contained in <file:Documentation/floppy.txt>. That file also contains the location of the Floppy driver FAQ as well as location of the fdutils package used to configure additional parameters of the driver at run time. To compile this driver as a module, choose M here: the module will be called floppy. config AMIGA_FLOPPY tristate "Amiga floppy support" depends on AMIGA config ATARI_FLOPPY tristate "Atari floppy support" depends on ATARI config BLK_DEV_FD98 tristate "NEC PC-9800 floppy disk support" depends on X86_PC9800 ---help--- If you want to use the floppy disk drive(s) of NEC PC-9801/PC-9821, say Y. config BLK_DEV_SWIM_IOP bool "Macintosh IIfx/Quadra 900/Quadra 950 floppy support (EXPERIMENTAL)" depends on MAC && EXPERIMENTAL && BROKEN help Say Y here to support the SWIM (Super Woz Integrated Machine) IOP floppy controller on the Macintosh IIfx and Quadra 900/950. config BLK_DEV_PS2 tristate "PS/2 ESDI hard disk support" depends on MCA && MCA_LEGACY help Say Y here if you have a PS/2 machine with a MCA bus and an ESDI hard disk. To compile this driver as a module, choose M here: the module will be called ps2esdi. config AMIGA_Z2RAM tristate "Amiga Zorro II ramdisk support" depends on ZORRO help This enables support for using Chip RAM and Zorro II RAM as a ramdisk or as a swap partition. Say Y if you want to include this driver in the kernel. To compile this driver as a module, choose M here: the module will be called z2ram. config GAMECUBE_ARAM tristate "GameCube ARAM ramdisk support" depends on GAMECUBE help This enables support for using the GameCube's 16 MB of ARAM as a ramdisk or as a swap partition. Say Y if you want to include this driver in the kernel. To compile this driver as a module, choose M here: the module will be called gc_aram. config ATARI_ACSI tristate "Atari ACSI support" depends on ATARI && BROKEN ---help--- This enables support for the Atari ACSI interface. The driver supports hard disks and CD-ROMs, which have 512-byte sectors, or can be switched to that mode. Due to the ACSI command format, only disks up to 1 GB are supported. Special support for certain ACSI to SCSI adapters, which could relax that, isn't included yet. The ACSI driver is also the basis for certain other drivers for devices attached to the ACSI bus: Atari SLM laser printer, BioNet-100 Ethernet, and PAMsNet Ethernet. If you want to use one of these devices, you need ACSI support, too. To compile this driver as a module, choose M here: the module will be called acsi. comment "Some devices (e.g. CD jukebox) support multiple LUNs" depends on ATARI && ATARI_ACSI config ACSI_MULTI_LUN bool "Probe all LUNs on each ACSI device" depends on ATARI_ACSI help If you have a ACSI device that supports more than one LUN (Logical Unit Number), e.g. a CD jukebox, you should say Y here so that all will be found by the ACSI driver. An ACSI device with multiple LUNs acts logically like multiple ACSI devices. The vast majority of ACSI devices have only one LUN, and so most people can say N here and should in fact do so, because it is safer. config ATARI_SLM tristate "Atari SLM laser printer support" depends on ATARI && ATARI_ACSI!=n help If you have an Atari SLM laser printer, say Y to include support for it in the kernel. Otherwise, say N. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called acsi_slm. Be warned: the driver needs much ST-RAM and can cause problems due to that fact! config BLK_DEV_XD tristate "XT hard disk support" depends on ISA help Very old 8 bit hard disk controllers used in the IBM XT computer will be supported if you say Y here. To compile this driver as a module, choose M here: the module will be called xd. It's pretty unlikely that you have one of these: say N. config PARIDE tristate "Parallel port IDE device support" depends on PARPORT ---help--- There are many external CD-ROM and disk devices that connect through your computer's parallel port. Most of them are actually IDE devices using a parallel port IDE adapter. This option enables the PARIDE subsystem which contains drivers for many of these external drives. Read <file:Documentation/paride.txt> for more information. If you have said Y to the "Parallel-port support" configuration option, you may share a single port between your printer and other parallel port devices. Answer Y to build PARIDE support into your kernel, or M if you would like to build it as a loadable module. If your parallel port support is in a loadable module, you must build PARIDE as a module. If you built PARIDE support into your kernel, you may still build the individual protocol modules and high-level drivers as loadable modules. If you build this support as a module, it will be called paride. To use the PARIDE support, you must say Y or M here and also to at least one high-level driver (e.g. "Parallel port IDE disks", "Parallel port ATAPI CD-ROMs", "Parallel port ATAPI disks" etc.) and to at least one protocol driver (e.g. "ATEN EH-100 protocol", "MicroSolutions backpack protocol", "DataStor Commuter protocol" etc.). source "drivers/block/paride/Kconfig" config BLK_CPQ_DA tristate "Compaq SMART2 support" depends on PCI help This is the driver for Compaq Smart Array controllers. Everyone using these boards should say Y here. See the file <file:Documentation/cpqarray.txt> for the current list of boards supported by this driver, and for further information on the use of this driver. config BLK_CPQ_CISS_DA tristate "Compaq Smart Array 5xxx support" depends on PCI help This is the driver for Compaq Smart Array 5xxx controllers. Everyone using these boards should say Y here. See <file:Documentation/cciss.txt> for the current list of boards supported by this driver, and for further information on the use of this driver. config CISS_SCSI_TAPE bool "SCSI tape drive support for Smart Array 5xxx" depends on BLK_CPQ_CISS_DA && SCSI help When enabled (Y), this option allows SCSI tape drives and SCSI medium changers (tape robots) to be accessed via a Compaq 5xxx array controller. (See Documentation/cciss.txt for more details.) "SCSI support" and "SCSI tape support" must also be enabled for this option to work. When this option is disabled (N), the SCSI portion of the driver is not compiled. config BLK_DEV_DAC960 tristate "Mylex DAC960/DAC1100 PCI RAID Controller support" depends on PCI help This driver adds support for the Mylex DAC960, AcceleRAID, and eXtremeRAID PCI RAID controllers. See the file <file:Documentation/README.DAC960> for further information about this driver. To compile this driver as a module, choose M here: the module will be called DAC960. config BLK_DEV_UMEM tristate "Micro Memory MM5415 Battery Backed RAM support (EXPERIMENTAL)" depends on PCI && EXPERIMENTAL ---help--- Saying Y here will include support for the MM5415 family of battery backed (Non-volatile) RAM cards. http://www.umem.com/ The cards appear as block devices that can be partitioned into as many as 15 partitions. To compile this driver as a module, choose M here: the module will be called umem. The umem driver has not yet been allocated a MAJOR number, so one is chosen dynamically. Use "devfs" or look in /proc/devices for the device number config BLK_DEV_LOOP tristate "Loopback device support" ---help--- Saying Y here will allow you to use a regular file as a block device; you can then create a file system on that block device and mount it just as you would mount other block devices such as hard drive partitions, CD-ROM drives or floppy drives. The loop devices are block special device files with major number 7 and typically called /dev/loop0, /dev/loop1 etc. This is useful if you want to check an ISO 9660 file system before burning the CD, or if you want to use floppy images without first writing them to floppy. Furthermore, some Linux distributions avoid the need for a dedicated Linux partition by keeping their complete root file system inside a DOS FAT file using this loop device driver. To use the loop device, you need the losetup utility, found in the util-linux package, see <ftp://ftp.kernel.org/pub/linux/utils/util-linux/>. The loop device driver can also be used to "hide" a file system in a disk partition, floppy, or regular file, either using encryption (scrambling the data) or steganography (hiding the data in the low bits of, say, a sound file). This is also safe if the file resides on a remote file server. There are several ways of doing this. Some of these require kernel patches. The vanilla kernel offers the cryptoloop option. If you want to use that, say Y to both LOOP and CRYPTOLOOP, and make sure you have a recent (version 2.12 or later) version of util-linux. Note that this loop device has nothing to do with the loopback device used for network connections from the machine to itself. To compile this driver as a module, choose M here: the module will be called loop. Most users will answer N here. config BLK_DEV_CRYPTOLOOP tristate "Cryptoloop Support" select CRYPTO depends on BLK_DEV_LOOP ---help--- Say Y here if you want to be able to use the ciphers that are provided by the CryptoAPI as loop transformation. This might be used as hard disk encryption. config BLK_DEV_NBD tristate "Network block device support" depends on NET ---help--- Saying Y here will allow your computer to be a client for network block devices, i.e. it will be able to use block devices exported by servers (mount file systems on them etc.). Communication between client and server works over TCP/IP networking, but to the client program this is hidden: it looks like a regular local file access to a block device special file such as /dev/nd0. Network block devices also allows you to run a block-device in userland (making server and client physically the same computer, communicating using the loopback network device). Read <file:Documentation/nbd.txt> for more information, especially about where to find the server code, which runs in user space and does not need special kernel support. Note that this has nothing to do with the network file systems NFS or Coda; you can say N here even if you intend to use NFS or Coda. To compile this driver as a module, choose M here: the module will be called nbd. If unsure, say N. config BLK_DEV_RAM tristate "RAM disk support" ---help--- Saying Y here will allow you to use a portion of your RAM memory as a block device, so that you can make file systems on it, read and write to it and do all the other things that you can do with normal block devices (such as hard drives). It is usually used to load and store a copy of a minimal root file system off of a floppy into RAM during the initial install of Linux. Note that the kernel command line option "ramdisk=XX" is now obsolete. For details, read <file:Documentation/ramdisk.txt>. To compile this driver as a module, choose M here: the module will be called rd. Most normal users won't need the RAM disk functionality, and can thus say N here. config BLK_DEV_RAM_SIZE int "Default RAM disk size" depends on BLK_DEV_RAM default "4096" help The default value is 4096. Only change this if you know what are you doing. If you are using IBM S/390, then set this to 8192. config BLK_DEV_INITRD bool "Initial RAM disk (initrd) support" help The initial RAM disk is a RAM disk that is loaded by the boot loader (loadlin or lilo) and that is mounted as root before the normal boot procedure. It is typically used to load modules needed to mount the "real" root file system, etc. See <file:Documentation/initrd.txt> for details. config LBD bool "Support for Large Block Devices" depends on X86 || MIPS32 || PPC32 || ARCH_S390_31 || SUPERH help Say Y here if you want to attach large (bigger than 2TB) discs to your machine, or if you want to have a raid or loopback device bigger than 2TB. Otherwise say N. source "drivers/s390/block/Kconfig" endmenu --- NEW FILE: Makefile --- # # Makefile for the kernel block device drivers. # # 12 June 2000, Christoph Hellwig <hc...@in...> # Rewritten to use lists instead of if-statements. # # Note : at this point, these files are compiled on all systems. # In the future, some of these should be built conditionally. # # # NOTE that ll_rw_blk.c must come early in linkage order - it starts the # kblockd threads # obj-y := elevator.o ll_rw_blk.o ioctl.o genhd.o scsi_ioctl.o obj-$(CONFIG_IOSCHED_NOOP) += noop-iosched.o obj-$(CONFIG_IOSCHED_AS) += as-iosched.o obj-$(CONFIG_IOSCHED_DEADLINE) += deadline-iosched.o obj-$(CONFIG_MAC_FLOPPY) += swim3.o obj-$(CONFIG_BLK_DEV_FD) += floppy.o obj-$(CONFIG_BLK_DEV_FD98) += floppy98.o obj-$(CONFIG_AMIGA_FLOPPY) += amiflop.o obj-$(CONFIG_ATARI_FLOPPY) += ataflop.o obj-$(CONFIG_BLK_DEV_SWIM_IOP) += swim_iop.o obj-$(CONFIG_ATARI_ACSI) += acsi.o obj-$(CONFIG_ATARI_SLM) += acsi_slm.o obj-$(CONFIG_AMIGA_Z2RAM) += z2ram.o obj-$(CONFIG_GAMECUBE_ARAM) += gc_aram.o obj-$(CONFIG_BLK_DEV_RAM) += rd.o obj-$(CONFIG_BLK_DEV_LOOP) += loop.o obj-$(CONFIG_BLK_DEV_PS2) += ps2esdi.o obj-$(CONFIG_BLK_DEV_XD) += xd.o obj-$(CONFIG_BLK_CPQ_DA) += cpqarray.o obj-$(CONFIG_BLK_CPQ_CISS_DA) += cciss.o obj-$(CONFIG_BLK_DEV_DAC960) += DAC960.o obj-$(CONFIG_BLK_DEV_UMEM) += umem.o obj-$(CONFIG_BLK_DEV_NBD) += nbd.o obj-$(CONFIG_BLK_DEV_CRYPTOLOOP) += cryptoloop.o |
From: <ham...@us...> - 2004-03-02 10:28:10
|
Update of /cvsroot/gc-linux/linux/drivers/block In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20864/linux/drivers/block Modified Files: gc_aram.c Log Message: Aram seems to work (in my tree i disabled the soundcard driver for to be sure) some non-logical things happen during ARAM copy, but sure somebody will figure out. i testet swap, and minix filesystem on in, and it worked without troubles. hampti Index: gc_aram.c =================================================================== RCS file: /cvsroot/gc-linux/linux/drivers/block/gc_aram.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- gc_aram.c 2 Mar 2004 09:22:02 -0000 1.2 +++ gc_aram.c 2 Mar 2004 10:16:28 -0000 1.3 @@ -1,7 +1,7 @@ /* gc_aram.c - by GC-Linux Team , hamtitampti + by GC-Linux Team , hamtitampti , 2004 */ /* // Some test things @@ -90,8 +90,10 @@ AR_DMA_CNT_H = (type << 15) | (length >> 16); AR_DMA_CNT_L = length & 0xFFFF; + // For security udelay(10000); - // Missing: Ready Flag for Transfer finished.... + + // Without the Break, the While loop loops endless int counter=0; while (AI_DSP_STATUS & 0x200) { counter++; @@ -127,6 +129,7 @@ } #else if (rq_data_dir(req) == READ) { + //memset(req->buffer,0,len); flush_dcache_range((unsigned long)req->buffer,(unsigned long)req->buffer + len); ARAM_StartDMA((unsigned long)req->buffer,start+ARAM_SOUNDMEMORYOFFSET, len,ARAM_READ); flush_dcache_range((unsigned long)req->buffer,(unsigned long)req->buffer + len); |
From: <ham...@us...> - 2004-03-02 09:33:43
|
Update of /cvsroot/gc-linux/linux/drivers/block In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv9968/linux/drivers/block Modified Files: gc_aram.c Log Message: he does alrady some things Index: gc_aram.c =================================================================== RCS file: /cvsroot/gc-linux/linux/drivers/block/gc_aram.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- gc_aram.c 1 Mar 2004 17:57:38 -0000 1.1 +++ gc_aram.c 2 Mar 2004 09:22:02 -0000 1.2 @@ -6,7 +6,7 @@ /* // Some test things - echo hello | dd of=/dev/aram seek=10 + echo hello1234567890hello1234567890 | dd of=/dev/aram seek=10 dd if=/dev/aram skip=10 cat /dev/aram | wc -c @@ -19,10 +19,12 @@ #include <linux/init.h> #include <linux/module.h> #include <linux/blkdev.h> +#include <linux/delay.h> #include <asm/setup.h> #include <asm/bitops.h> #include <asm/pgtable.h> +#include <asm/cacheflush.h> #define ARAM_MAJOR Z2RAM_MAJOR @@ -41,6 +43,7 @@ #define ARAM_BUFFERSIZE 10*1024 #else #define ARAM_BUFFERSIZE 14*1024*1024 + //#define ARAM_BUFFERSIZE 10*1024 #define ARAM_SOUNDMEMORYOFFSET 1024*1024 #endif @@ -53,41 +56,55 @@ static int current_device = -1; static spinlock_t aram_lock = SPIN_LOCK_UNLOCKED; - +extern void flush_cache(void *start, unsigned int len); static struct block_device_operations aram_fops; static struct gendisk *aram_gendisk; -#define AR_DMA_MMADDR_H *(volatile unsigned short*)0xCC005020 -#define AR_DMA_MMADDR_L *(volatile unsigned short*)0xCC005022 -#define AR_DMA_ARADDR_H *(volatile unsigned short*)0xCC005024 -#define AR_DMA_ARADDR_L *(volatile unsigned short*)0xCC005026 -#define AR_DMA_CNT_H *(volatile unsigned short*)0xCC005028 -#define AR_DMA_CNT_L *(volatile unsigned short*)0xCC00502A +#define AR_DMA_MMADDR_H *(unsigned short*)0xCC005020 +#define AR_DMA_MMADDR_L *(unsigned short*)0xCC005022 +#define AR_DMA_ARADDR_H *(unsigned short*)0xCC005024 +#define AR_DMA_ARADDR_L *(unsigned short*)0xCC005026 +#define AR_DMA_CNT_H *(unsigned short*)0xCC005028 +#define AR_DMA_CNT_L *(unsigned short*)0xCC00502A +#define AI_DSP_STATUS *(unsigned short*)0xCC00500A #define ARAM_READ 1 #define ARAM_WRITE 0 +int ARAM_DMA_lock = 0; void ARAM_StartDMA (unsigned long mmAddr, unsigned long arAddr, unsigned long length, unsigned long type) { + while(ARAM_DMA_lock); + ARAM_DMA_lock = 1; + + //printk("ARAM DMA copy -> %08x - %08x - %d %d\n",mmAddr,arAddr,length,type); + AR_DMA_MMADDR_H = mmAddr >> 16; AR_DMA_MMADDR_L = mmAddr & 0xFFFF; - + AR_DMA_ARADDR_H = arAddr >> 16; AR_DMA_ARADDR_L = arAddr & 0xFFFF; - + AR_DMA_CNT_H = (type << 15) | (length >> 16); AR_DMA_CNT_L = length & 0xFFFF; - - // Missing: Ready Flag for Transfer finished.... - //while (); ?????????? + udelay(10000); + // Missing: Ready Flag for Transfer finished.... + int counter=0; + while (AI_DSP_STATUS & 0x200) { + counter++; + if (counter>0xfffff) break; + }; + ARAM_DMA_lock = 0; } - - - +/* + echo YUHUUhello1234567890hello12345678901234567890CCC > /dev/aram + dd if=/dev/aram + cat /dev/aram | wc -c +*/ static void do_aram_request(request_queue_t *q) { struct request *req; @@ -110,8 +127,11 @@ } #else if (rq_data_dir(req) == READ) { + flush_dcache_range((unsigned long)req->buffer,(unsigned long)req->buffer + len); ARAM_StartDMA((unsigned long)req->buffer,start+ARAM_SOUNDMEMORYOFFSET, len,ARAM_READ); + flush_dcache_range((unsigned long)req->buffer,(unsigned long)req->buffer + len); } else { + flush_dcache_range((unsigned long)req->buffer,(unsigned long)req->buffer + len); ARAM_StartDMA((unsigned long)req->buffer,start+ARAM_SOUNDMEMORYOFFSET, len,ARAM_WRITE); } #endif |
From: <ham...@us...> - 2004-03-01 18:08:51
|
Update of /cvsroot/gc-linux/linux/drivers/block In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28474/linux/drivers/block Added Files: gc_aram.c Log Message: added prelimiary aram block device driver, driver works well, but there is some ARAM corruption with the Audio thing ... --- NEW FILE: gc_aram.c --- /* gc_aram.c by GC-Linux Team , hamtitampti */ /* // Some test things echo hello | dd of=/dev/aram seek=10 dd if=/dev/aram skip=10 cat /dev/aram | wc -c */ #define DEVICE_NAME "ARAM" #include <linux/major.h> #include <linux/vmalloc.h> #include <linux/init.h> #include <linux/module.h> #include <linux/blkdev.h> #include <asm/setup.h> #include <asm/bitops.h> #include <asm/pgtable.h> #define ARAM_MAJOR Z2RAM_MAJOR #define TRUE (1) #define FALSE (0) //#define ARAM_DBG printk #define ARAM_DBG(format, arg...); { } //#define RAMDISK #undef RAMDISK #ifdef RAMDISK unsigned char *RAMDISKBuffer; #define ARAM_BUFFERSIZE 10*1024 #else #define ARAM_BUFFERSIZE 14*1024*1024 #define ARAM_SOUNDMEMORYOFFSET 1024*1024 #endif #define ARAM_CHUNKMASK 0xff static int current_device = -1; static spinlock_t aram_lock = SPIN_LOCK_UNLOCKED; static struct block_device_operations aram_fops; static struct gendisk *aram_gendisk; #define AR_DMA_MMADDR_H *(volatile unsigned short*)0xCC005020 #define AR_DMA_MMADDR_L *(volatile unsigned short*)0xCC005022 #define AR_DMA_ARADDR_H *(volatile unsigned short*)0xCC005024 #define AR_DMA_ARADDR_L *(volatile unsigned short*)0xCC005026 #define AR_DMA_CNT_H *(volatile unsigned short*)0xCC005028 #define AR_DMA_CNT_L *(volatile unsigned short*)0xCC00502A #define ARAM_READ 1 #define ARAM_WRITE 0 void ARAM_StartDMA (unsigned long mmAddr, unsigned long arAddr, unsigned long length, unsigned long type) { AR_DMA_MMADDR_H = mmAddr >> 16; AR_DMA_MMADDR_L = mmAddr & 0xFFFF; AR_DMA_ARADDR_H = arAddr >> 16; AR_DMA_ARADDR_L = arAddr & 0xFFFF; AR_DMA_CNT_H = (type << 15) | (length >> 16); AR_DMA_CNT_L = length & 0xFFFF; // Missing: Ready Flag for Transfer finished.... //while (); ?????????? } static void do_aram_request(request_queue_t *q) { struct request *req; while ((req = elv_next_request(q)) != NULL) { unsigned long start = req->sector << 9; unsigned long len = req->current_nr_sectors << 9; if (start + len > ARAM_BUFFERSIZE) { printk( KERN_ERR DEVICE_NAME ": bad access: block=%lu, count=%u\n", req->sector, req->current_nr_sectors); end_request(req, 0); continue; } #ifdef RAMDISK if (rq_data_dir(req) == READ) { memcpy(req->buffer, (char *)&RAMDISKBuffer[start], len); } else { memcpy((char *)&RAMDISKBuffer[start], req->buffer, len); } #else if (rq_data_dir(req) == READ) { ARAM_StartDMA((unsigned long)req->buffer,start+ARAM_SOUNDMEMORYOFFSET, len,ARAM_READ); } else { ARAM_StartDMA((unsigned long)req->buffer,start+ARAM_SOUNDMEMORYOFFSET, len,ARAM_WRITE); } #endif end_request(req, 1); } } static int aram_open( struct inode *inode, struct file *filp ) { ARAM_DBG("A-RAM Open device\n"); int device; int rc = -ENOMEM; device = iminor(inode); if ( current_device != -1 && current_device != device ) { rc = -EBUSY; goto err_out; } #ifdef RAMDISK if ( current_device == -1 ) { current_device = device; set_capacity(aram_gendisk,ARAM_BUFFERSIZE>>9); } #endif return 0; err_out: ARAM_DBG("A-RAM Open device Error %d\n",rc); return rc; } static int aram_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) { ARAM_DBG("A-RAM IOCTL\n"); return 0; } static int aram_release( struct inode *inode, struct file *filp ) { ARAM_DBG("A-RAM Close device\n"); if ( current_device == -1 ) return 0; return 0; } static struct block_device_operations aram_fops = { .owner = THIS_MODULE, .open = aram_open, .release = aram_release, .ioctl = aram_ioctl, }; static struct request_queue *aram_queue; int __init aram_init(void) { int ret; printk("A-Ram Block Device Driver Init\n"); ret = -EBUSY; if (register_blkdev(ARAM_MAJOR, DEVICE_NAME)) goto err; ret = -ENOMEM; aram_gendisk = alloc_disk(1); if (!aram_gendisk) goto out_disk; aram_queue = blk_init_queue(do_aram_request, &aram_lock); if (!aram_queue) goto out_queue; aram_gendisk->major = ARAM_MAJOR; aram_gendisk->first_minor = 0; aram_gendisk->fops = &aram_fops; sprintf(aram_gendisk->disk_name, "aram"); strcpy(aram_gendisk->devfs_name, aram_gendisk->disk_name); aram_gendisk->queue = aram_queue; set_capacity(aram_gendisk,ARAM_BUFFERSIZE>>9); add_disk(aram_gendisk); #ifdef RAMDISK RAMDISKBuffer = kmalloc(ARAM_BUFFERSIZE,GFP_KERNEL); #endif return 0; out_queue: put_disk(aram_gendisk); out_disk: unregister_blkdev(ARAM_MAJOR, DEVICE_NAME); err: return ret; } void __exit aram_cleanup(void) { blk_unregister_region(MKDEV(ARAM_MAJOR, 0), 256); if ( unregister_blkdev( ARAM_MAJOR, DEVICE_NAME ) != 0 ) printk( KERN_ERR DEVICE_NAME ": unregister of device failed\n"); del_gendisk(aram_gendisk); put_disk(aram_gendisk); blk_cleanup_queue(aram_queue); #ifdef RAMDISK kfree(RAMDISKBuffer); #endif return; } MODULE_LICENSE("GPL"); module_init(aram_init); module_exit(aram_cleanup); |
From: <ham...@us...> - 2004-03-01 18:07:07
|
Update of /cvsroot/gc-linux/linux/drivers/block In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28154/block Log Message: Directory /cvsroot/gc-linux/linux/drivers/block added to the repository |
From: <ham...@us...> - 2004-03-01 09:16:10
|
Update of /cvsroot/gc-linux/linux/drivers/net In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv21630/linux/drivers/net Modified Files: gc-net.c Log Message: added timeout for TX lock Index: gc-net.c =================================================================== RCS file: /cvsroot/gc-linux/linux/drivers/net/gc-net.c,v retrieving revision 1.20 retrieving revision 1.21 diff -u -d -r1.20 -r1.21 --- gc-net.c 29 Feb 2004 08:36:29 -0000 1.20 +++ gc-net.c 1 Mar 2004 09:05:17 -0000 1.21 @@ -22,6 +22,9 @@ * $Id$ * * $Log$ + * Revision 1.21 2004/03/01 09:05:17 hamtitampti + * added timeout for TX lock + * * Revision 1.20 2004/02/29 08:36:29 hamtitampti * improofed internal structure, read comment in file * @@ -543,6 +546,8 @@ netif_stop_queue(dev); if (priv->tx_lock) { + if ((dev->trans_start + 2*HZ)< jiffies) priv->tx_lock = 0; + priv->stats.tx_dropped++; udelay(1000); netif_wake_queue(dev); |
From: <ham...@us...> - 2004-02-29 08:46:37
|
Update of /cvsroot/gc-linux/linux/drivers/net In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13964/linux/drivers/net Modified Files: gc-net.c Log Message: improofed internal structure, read comment in file Index: gc-net.c =================================================================== RCS file: /cvsroot/gc-linux/linux/drivers/net/gc-net.c,v retrieving revision 1.19 retrieving revision 1.20 diff -u -d -r1.19 -r1.20 --- gc-net.c 27 Feb 2004 00:06:33 -0000 1.19 +++ gc-net.c 29 Feb 2004 08:36:29 -0000 1.20 @@ -22,6 +22,9 @@ * $Id$ * * $Log$ + * Revision 1.20 2004/02/29 08:36:29 hamtitampti + * improofed internal structure, read comment in file + * * Revision 1.19 2004/02/27 00:06:33 hamtitampti * changed IRQ timing, but .. yes, the bus is too slow it seems * @@ -34,6 +37,84 @@ * */ +/* + Important Notes for Developers: + + currently speeds: + 1008 bytes from 192.168.0.2: icmp_seq=1 ttl=64 time=3.3 ms + 2008 bytes from 192.168.0.2: icmp_seq=1 ttl=64 time=6.0 ms + 5008 bytes from 192.168.0.2: icmp_seq=2 ttl=64 time=14.1 ms + 10008 bytes from 192.168.0.2: icmp_seq=0 ttl=64 time=27.0 ms + 20008 bytes from 192.168.0.2: icmp_seq=0 ttl=64 time=53.2 ms + 65000 bytes about 172ms (with Win2000) + + As you see, the Delay increases "linear" + this comes due to a Bandwith Problem with the EXI bus. + + note: + All ! i repeat ALL + packets are received with the + static void gc_input(struct net_device *dev) + and sent to the linux kernel then. + + BUT ! + the Transmit Back , the + static int gc_bba_start_xmit(struct sk_buff *skb, struct net_device *dev) + + As you see inside this function, i check, if the Transmit is currently in progress + if "yes" (priv->tx_lock) + i wait then a small time, and return with 1 ! + (otherwise, the linux kernel try's to resume the packet .. about 1mill / sec or so) + the Return 1; indicates to the linux kernel to resume the packet tramsission. + + if (priv->tx_lock) { + priv->stats.tx_dropped++; + udelay(1000); + netif_wake_queue(dev); + return 1; // This return will Resume the packet try + } + + So it happens, that the packet wich the linux Stack wants to send , enters multiple times the Xmit thing. + Until it time-out in Linux Packet buffer, logically. + + due to the tx_dropped, you see in ifconfig the dropped TX packets increasing. + Clear, there are more dropped packets then (as kernel resumes automaticall) + but i had no better idea. + + RX packets:582 errors:0 dropped:0 overruns:0 frame:0 + TX packets:475 errors:0 dropped:775 overruns:0 carrier:0 + + + Flood Performance: + 1K: 2531 packets transmitted, 2103 packets received, 16% packet loss + 2K: 1095 packets transmitted, 736 packets received, 32% packet loss + 4K: 886 packets transmitted, 472 packets received, 46% packet loss + 8K: 773 packets transmitted, 276 packets received, 64% packet loss + + ok + AT last: + + Even at flood, the kernel gets all RX (received frames) + but fails due to send back. + + + 100Mbit issue: + eth_outb(0x30, 0x2); + + This activates 100Mbit + Testet and operational. (market out in source) + + BAD: the ping / flood gets more worse. + as the packets arrive now faster, the bus almost crashes. + + BOYS, Write a Faster EXI driver, this is the maximum we can do now. + + hamtitampti + + + +*/ + #include <linux/module.h> #include <linux/kernel.h> #include <linux/types.h> @@ -71,6 +152,7 @@ spinlock_t lock; spinlock_t phylock; /* phy lock */ unsigned long lockflags; /* Lock flags */ + int tx_lock; // Statistical Data struct net_device_stats stats; @@ -157,8 +239,7 @@ while (len) { int tc = len; - if (tc > 4) - tc = 4; + if (tc > 4) tc = 4; exi_imm(channel, d, tc, mode, 0); exi_sync(channel); len-=tc; @@ -404,30 +485,6 @@ /* - -static inline u8 de600_read_status(struct net_device *dev) -{ - u8 status; - - outb_p(STATUS, DATA_PORT); - status = inb(STATUS_PORT); - outb_p(NULL_COMMAND | HI_NIBBLE, DATA_PORT); - - return status; -} - -static inline u8 de600_read_byte(unsigned char type, struct net_device *dev) -{ - // dev used by macros - u8 lo; - outb_p((type), DATA_PORT); - lo = ((unsigned char)inb(STATUS_PORT)) >> 4; - outb_p((type) | HI_NIBBLE, DATA_PORT); - return ((unsigned char)inb(STATUS_PORT) & (unsigned char)0xf0) | lo; -} -*/ - -/* * Open/initialize the board. This is called (in the current kernel) * after booting when 'ifconfig <dev->name> $IP_ADDR' is run (in rc.inet1). * @@ -463,12 +520,6 @@ static int gc_bba_close(struct net_device *dev) { BBA_DBG("gc_bba_close\n"); - -// //select_nic(); -// de600_put_command(RESET); -// de600_put_command(STOP_RESET); -// de600_put_command(0); -// //select_prn(); free_irq(dev->irq, dev); return 0; } @@ -480,15 +531,6 @@ return &priv->stats; } -static inline void trigger_interrupt(struct net_device *dev) -{ -// de600_put_command(FLIP_IRQ); -// //select_prn(); -// DE600_SLOW_DOWN; -// //select_nic(); -// de600_put_command(0); -} - /* * Copy a buffer to the adapter transmit page memory. * Start sending. @@ -497,17 +539,29 @@ static int gc_bba_start_xmit(struct sk_buff *skb, struct net_device *dev) { struct gc_private *priv = (struct gc_private *)dev->priv; - unsigned char Reg0; + + netif_stop_queue(dev); + + if (priv->tx_lock) { + priv->stats.tx_dropped++; + udelay(1000); + netif_wake_queue(dev); + return 1; // This return will Resume the packet try + } + + priv->tx_lock = 1; - spin_lock_irqsave(&priv->lock, priv->lockflags); - netif_stop_queue(dev); + netif_wake_queue(dev); + spin_lock_irqsave(&priv->lock, priv->lockflags); + //while(eth_inb(0x3a)&0x1); // TX Fifo Page to 0 + eth_outb(0xf, 0); eth_outb(0xe, 0); - + //printk("XMIT packet : len %d\n",skb->len); /* We send using the FIFO mode @@ -516,13 +570,16 @@ BBA_DBG("gc_bba_start_xmit:len=%d, page %d/%d\n", skb->len, tx_fifo_in, free_tx_pages); // We set the packetbuffer to beginning... - + + eth_outb(0x3e, skb->len&0xff); + eth_outb(0x3f, (skb->len&0x0f00)>>8); + unsigned int val=0xC0004800; // register 0x48 is the output queue exi_select(0, 2, 5); exi_imm(0, &val, 4, EXI_WRITE, 0); exi_sync(0); - + // Send Data from skb buffer to Network Driver now exi_imm_ex(0, skb->data, skb->len, EXI_WRITE); @@ -544,13 +601,13 @@ val |=4; eth_outb(0, val); - spin_unlock_irqrestore(&priv->lock, priv->lockflags); + dev->trans_start = jiffies; - dev_kfree_skb(skb); - - priv->stats.tx_bytes++; + priv->stats.tx_bytes += skb->len; priv->stats.tx_packets++; + + dev_kfree_skb(skb); return 0; } @@ -570,7 +627,7 @@ /* Input Flow concept: Take a look to Hardware spec page 35 */ - +/* eth_outb(0x3a, 2); if (eth_inb(0x3a) & 2) { @@ -578,7 +635,7 @@ priv->stats.rx_missed_errors++; return ; } - +*/ /* Receive Buffer Write Page Pointer: Current receive write page pointer. The MSB is the Reg17h.3 bit. The LSB is the Reg16h.0 bit. This register is controlled by @@ -597,7 +654,6 @@ p_read = eth_inb(0x18); p_read |= (eth_inb(0x19)&0x0f) << 8; - if (p_read == p_write) return; //printk("Received a packet .. (start)\n"); @@ -686,13 +742,22 @@ dev->last_rx = jiffies; priv->stats.rx_packets ++; /* count all receives */ - priv->stats.rx_bytes ++; /* count all received bytes */ + priv->stats.rx_bytes += skb->len; /* count all received bytes */ gc_input(dev); return ; } +#define BBA_IRQ_FRAGI 0x01 +#define BBA_IRQ_RI 0x02 +#define BBA_IRQ_TI 0x04 +#define BBA_IRQ_REI 0x08 +#define BBA_IRQ_TEI 0x10 +#define BBA_IRQ_FIFOEI 0x20 +#define BBA_IRQ_BUSEI 0x40 +#define BBA_IRQ_RBFI 0x80 + static void inline gcif_service(struct net_device *dev) { @@ -705,61 +770,73 @@ int status = inb9 & inb8; BBA_DBG("gcif_service: %08x %08x status %08x\n", inb8, inb9, status); - + if (!status) { eth_outb(9, 0xff); BBA_DBG("?? GC irq but no irq ??\n"); } - - if (status & 4) + + if (status & BBA_IRQ_FRAGI) // 0x1 { - eth_outb(9, 4); - // We clear the IRQ - netif_wake_queue(dev); /* allow more packets into adapter */ - - - // TX Transmisstion compleated ... - - /* - int s = eth_inb(4); - if (s) // should not occur, since 4 == TX OK - BBA_DBG("tx error %02x\n", s); - */ + eth_outb(9, BBA_IRQ_FRAGI); + BBA_DBG("Fragmentet Interrupt\n"); } - if (status & 2) + if (status & BBA_IRQ_RI) // 0x2 { // We clear the IRQ - eth_outb(9, 2); + eth_outb(9, BBA_IRQ_RI); spin_lock_irqsave(&priv->lock, priv->lockflags); gc_input(dev); spin_unlock_irqrestore(&priv->lock, priv->lockflags); } + + if (status & BBA_IRQ_TI) // 0x4 + { + eth_outb(9, BBA_IRQ_TI); + // We clear the IRQ + netif_wake_queue(dev); /* allow more packets into adapter */ + priv->tx_lock = 0; + // TX Transmisstion compleated ... + } - if (status & 8) + if (status & BBA_IRQ_REI) // 0x8 { - eth_outb(9, 8); - //printk("receive error :(\n"); + eth_outb(9, BBA_IRQ_REI); + BBA_DBG("receive error :(\n"); + priv->stats.rx_frame_errors++; } - if (status & 0x10) + if (status & BBA_IRQ_TEI) // 0x10 { - eth_outb(9, 0x10); + eth_outb(9, BBA_IRQ_TEI); netif_wake_queue(dev); /* allow more packets into adapter */ - //printk("tx error\n"); + priv->tx_lock = 0; + BBA_DBG("tx error\n"); + priv->stats.tx_errors++; } - if (status & 0x20) + + if (status & BBA_IRQ_FIFOEI) // 0x20 { - eth_outb(9, 0x20); - BBA_DBG("rx fifo error\n"); + eth_outb(9, BBA_IRQ_FIFOEI); + BBA_DBG("rx/tx fifo error\n"); + adapter_init(dev); + priv->stats.rx_errors++; } - if (status & 0x80) + + if (status & BBA_IRQ_BUSEI) // 0x40 { - eth_outb(9, 0x80); - //printk("rx overflow!\n"); - gc_input(dev); - + eth_outb(9, BBA_IRQ_BUSEI); + BBA_DBG("Bus Error\n"); + } + + if (status & BBA_IRQ_RBFI) // 0x80 + { + eth_outb(9, BBA_IRQ_RBFI); + BBA_DBG("rx overflow!\n"); + //gc_input(dev); + priv->stats.rx_over_errors++; // RWP eth_outb(0x16, GBA_RX_RWP); eth_outb(0x17, 0x0); @@ -771,16 +848,9 @@ // RHBP eth_outb(0x1a, GBA_RX_RHBP); eth_outb(0x1b, 0); - - - } - if (status & ~(0xBE)) - { - eth_outb(9, status & ~0xBE); - BBA_DBG("status %02x\n", status & ~0xBE); } -// eth_outb(9, status); + } @@ -795,8 +865,6 @@ struct net_device *dev = (struct net_device *)dev_id; struct gc_private *priv = (struct gc_private *)dev->priv; - int retrig = 0; - /* This might just as well be deleted now, no crummy drivers present :-) */ if ((dev == NULL) || (dev->irq != irq)) { BBA_DBG(KERN_ERR "%s: bogus interrupt %d\n", dev?dev->name:"GC_BBA", irq); @@ -820,9 +888,6 @@ have_irq(ch * 3 + EXI_EVENT_IRQ); } - if (retrig) - trigger_interrupt(dev); - spin_unlock(&priv->lock); return IRQ_HANDLED; @@ -958,7 +1023,7 @@ BBA_DBG("initializing BBA...\n"); - + priv->tx_lock = 0; eth_outb(0x60, 0); // unknown udelay(10000); @@ -982,7 +1047,7 @@ eth_outb(1, 0x10|PACKETS_PER_IRQ | BBA_PROMISC); eth_outb(0x14, 0x0); - eth_outb(0x15, 0x8); + eth_outb(0x15, 0x6); eth_outb(0x50, 0x80); @@ -1037,7 +1102,7 @@ eth_outb(8, 0xFF); // enable all IRQs eth_outb(9, 0xFF); // clear all irqs - //eth_outb(0x30, 0x2); // 100 Mbit ? + //eth_outb(0x30, 0x2); // 100 Mbit ? -- FATAL , IF speed so high, EXI totally overloaded BBA_DBG("after all: irq mask %x %x\n", eth_inb(8), eth_inb(9)); @@ -1077,24 +1142,22 @@ eth_exi_outb(2, 0); s = eth_exi_inb(3); - if (s & 0x80) + if (s & 0x08) { -// BBA_DBG("GC_IRQ service.\n"); - eth_exi_outb(3, 0x80); - gcif_service(dev); + BBA_DBG("GCIF - EXI - HASH function\n"); + eth_exi_outb(3, 0x08); eth_exi_outb(2, 0xF8); return; } - if (s & 0x40) + + if (s & 0x10) { - eth_exi_outb(3, 0x40); + BBA_DBG("GCIF - EXI - patchtru!\n"); + eth_exi_outb(3, 0x10); eth_exi_outb(2, 0xF8); -// BBA_DBG("GCIF - EXI - 0x40!\n"); - adapter_init(dev); return; - -// return; } + if (s & 0x20) { BBA_DBG("GCIF - EXI - CMDERR!\n"); @@ -1102,20 +1165,25 @@ eth_exi_outb(2, 0xF8); return; } - if (s & 0x10) + + if (s & 0x40) { - BBA_DBG("GCIF - EXI - patchtru!\n"); - eth_exi_outb(3, 0x10); + eth_exi_outb(3, 0x40); eth_exi_outb(2, 0xF8); + BBA_DBG("GCIF - EXI - 0x40!\n"); + adapter_init(dev); return; - } - if (s & 0x08) + } + + if (s & 0x80) { - BBA_DBG("GCIF - EXI - HASH function\n"); - eth_exi_outb(3, 0x08); + BBA_DBG("GC_IRQ service.\n"); + eth_exi_outb(3, 0x80); + gcif_service(dev); eth_exi_outb(2, 0xF8); return; } + // printk("GCIF - EXI - ?? %02x\n", s); eth_exi_outb(2, 0xF8); } |
From: <mi...@us...> - 2004-02-27 23:31:44
|
Update of /cvsroot/gc-linux/htdocs/xml/en In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7268/xml/en Modified Files: screenshots.xml Log Message: ... Index: screenshots.xml =================================================================== RCS file: /cvsroot/gc-linux/htdocs/xml/en/screenshots.xml,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- screenshots.xml 27 Feb 2004 23:19:42 -0000 1.4 +++ screenshots.xml 27 Feb 2004 23:22:42 -0000 1.5 @@ -4,7 +4,7 @@ <info> <title>Screenshots</title> <author>Michael Steil</author> - <date>2 February 2004</date> + <date>28 February 2004</date> </info> <h2>A full Linux system over NFS (28 Feb 2004)</h2> |
From: <mi...@us...> - 2004-02-27 23:29:26
|
Update of /cvsroot/gc-linux/htdocs/xml/de In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6906/xml/de Added Files: contact.xml Log Message: ... --- NEW FILE: contact.xml --- <?xml version="1.0" encoding="iso-8859-1"?> <?xml-stylesheet type="text/xsl" href="iparticle.xsl"?> <iparticle> <info> <title>Kontakt</title> </info> <p>Das GameCube Linux Projekt besteht aus mehreren Entwicklern und Testern weltweit. Bitte versuchen Sie den richtigen Ansprechpartner zu kontaktieren. Für allgemeine Frage setzen Sie sich bitte mit Michael in Kontakt.</p> <p><b>Michael Steil</b> <<a href="mailto:steil@in.tum.de">steil@in.tum.de</a>>, IRC: "mist"<br/> PGP: <a href="http://www.weihenstephan.org/~michaste/Michael_Steil.gpg.asc">http://www.weihenstephan.org/~michaste/Michael_Steil.gpg.asc</a>, fingerprint: BA1C 5B3A 462E B830 03DC 1D01 6970 821B 118C 4215</p> <p><b>Costis S.</b> <<a href="mailto:co...@gb...">co...@gb...</a>>, IRC: "Costis"<br/> </p> <p><b>Edgar Hucek</b> <<a href="mailto:hostmaster@ed-soft.at">hostmaster@ed-soft.at</a>>, IRC: "gimli,ed,ed[work]"</p> <p><b>Lehner Franz</b> <<a href="mailto:franz@lehner.at">franz@lehner.at</a>>, IRC: "hamtitampti"<br/> PGP: <a href="http://www.lehner.at/franz.asc">http://www.lehner.at/franz.asc</a></p> <p><b>Stefan Esser</b> <<a href="mailto:sesser@nopiracy.de">sesser@nopiracy.de</a>>, IRC: "ionic"</p> <p><b>Bitte beachten:</b> Support oder Fragen die sich auf die Entwicklung beziehen, sollten an die <a href="mailinglist.html">Mailing Listen</a> gerichtet werden, es sei denn, der Grund lässt nur persönlichen Kontakt zu. Sie können ältere Diskussionsbeiträge in den <a href="mailinglist.html">Archiven der Mailing Listen</a> suchen - die Wahrscheinlichkeit ist ziemlich hoch, dass Ihre Frage dort bereits beantwortet wurde.</p> <p>Neben der Mailing Liste gibt es auch <b>Unterstützung im IRC Channel</b>: <a href="irc://irc.oftc.net/gc-linux">#gc-linux</a> @ <a href="http://www.oftc.net/oftc/infrastructure/">oftc.net</a>.</p> <p>(Das System zur Erstellung der Webseite stammt von <a href="http://www.xbox-linux.org/docs/contact.html">Manuel Vetterli</a>.)</p> </iparticle> <!-- translator: Adrian von Buttlar --> |
From: <mi...@us...> - 2004-02-27 23:28:46
|
Update of /cvsroot/gc-linux/htdocs/xml/en In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6764/xml/en Modified Files: news.xml screenshots.xml yagcd.xml Log Message: ... Index: news.xml =================================================================== RCS file: /cvsroot/gc-linux/htdocs/xml/en/news.xml,v retrieving revision 1.13 retrieving revision 1.14 diff -u -d -r1.13 -r1.14 --- news.xml 8 Feb 2004 01:03:31 -0000 1.13 +++ news.xml 27 Feb 2004 23:19:42 -0000 1.14 @@ -2,6 +2,16 @@ <?xml-stylesheet href="news.xsl" type="text/xsl"?> <news> <item> + <date>28 February 2004</date> + <title>X Window and MPlayer partially working</title> + <text>Look at the <a href="docs/screenshots.html">screenshots</a>!</text> + </item> + <item> + <date>27 February 2004</date> + <title>Ethernet fully functional at 10 MBit</title> + <text>hamtitampti fixed the Ethernet driver, we now have stable TCP/IP traffic at rates of 1.05 MB/sec - and NFS-Root works flawlessly!</text> + </item> + <item> <date>6 February 2004</date> <title>First steps towards a full Linux system</title> <text>Jon Masters has contributed a workaround for the NFS problem, so that it now possible to boot a full system over NFS - though very slowly. hamtitampti is currently rewriting the network driver.</text> Index: screenshots.xml =================================================================== RCS file: /cvsroot/gc-linux/htdocs/xml/en/screenshots.xml,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- screenshots.xml 3 Feb 2004 02:53:33 -0000 1.3 +++ screenshots.xml 27 Feb 2004 23:19:42 -0000 1.4 @@ -7,6 +7,18 @@ <date>2 February 2004</date> </info> + <h2>A full Linux system over NFS (28 Feb 2004)</h2> + + <p>Thanks to a fully functional (10 MBit only, so far) network driver, we can boot a full Linux system over NFS, i.e. another computer connected via Ethernet provides the full filesystem. This way, we can easily run many standard applications.</p> + <p>The picture on the left shows an X Window session. All applications are running on another Linux computer, but the X server is running on the GameCube.</p> + <p>The picture on the right is not some work of art by Andy Warhol, but Marilyn Monroe starring in "Some like it hot" playing in MPlayer - with colours off.</p> + + <p> + <a href="../pic/x-window.jpg"><img src="../pic/x-window.jpg" width="160"/></a> + <a href="../pic/marilyn.jpg"><img src="../pic/marilyn.jpg" width="160"/></a> + </p> + + <h2>GameCube Linux Alpha (2 Feb 2004)</h2> <p>This is what can be seen if you point your web browser to your GameCube's IP:</p> Index: yagcd.xml =================================================================== RCS file: /cvsroot/gc-linux/htdocs/xml/en/yagcd.xml,v retrieving revision 1.7 retrieving revision 1.8 diff -u -d -r1.7 -r1.8 --- yagcd.xml 6 Feb 2004 13:39:48 -0000 1.7 +++ yagcd.xml 27 Feb 2004 23:19:42 -0000 1.8 @@ -9,7 +9,7 @@ <a href="../../down/yet_another_gamecube_doc.pdf.tar.gz">pdf</a> (primary document, recommended for printing)<br /> <hr /> -<small><b>last modified: Thu, 05 Feb 2004 09:04:41 </b></small><br /> +<small><b>last modified: Tue, 10 Feb 2004 03:53:32 </b></small><br /> <h1 align="center">Yet Another Gamecube Documentation<br /> <font size="-1">(but one that's worth printing)</font> </h1> @@ -740,21 +740,6 @@ without any unencrypted BIOS data for comparison. [...4356 lines suppressed...] <div class="p"><!----></div> - <h2><a name="tth_sEc16"> -16</a>  Credits</h2> + <h2><a name="tth_sEc17"> +17</a>  Credits</h2> <div class="p"><!----></div> besides freely available datasheets and patents, this document was created based @@ -16964,6 +18109,10 @@ <tr><td align="center"></td><td align="right">some image format info</td></tr> +<tr><td align="center"><b>Steven Looman</b></td><td align="right">st...@kr...</td></tr> + +<tr><td align="center"></td><td align="right">keyboard scancodes, comments on adapters</td></tr> + <tr><td align="center"><b>Aktnot</b></td><td align="right">http://cube.iu.hio.no/s104086/</td></tr> <tr><td align="center"></td><td align="right">additional rtc/ipl pinout info</td></tr> |
From: <aot...@us...> - 2004-02-27 12:34:43
|
Update of /cvsroot/gc-linux/linux/include/linux In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3286/include/linux Added Files: exi.h Log Message: EXI support, part 1 - Driver model stuff, take 1. --- NEW FILE: exi.h --- /* * include/linux/exi.h */ #ifndef __EXI_H #define __EXI_H #include <linux/device.h> struct exi_dev { struct device dev; }; #define to_exi_dev(n) container_of(n, struct exi_dev, dev) struct exi_driver { char *name; struct device_driver driver; }; #define to_exi_driver(drv) container_of(drv, struct exi_driver, driver) extern struct bus_type exi_bus_type; extern int exi_driver_register(struct exi_driver *drv); extern void exi_driver_unregister(struct exi_driver *drv); #endif /* !__EXI_H */ |
From: <aot...@us...> - 2004-02-27 12:34:43
|
Update of /cvsroot/gc-linux/linux/drivers In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3286/drivers Added Files: Makefile Log Message: EXI support, part 1 - Driver model stuff, take 1. --- NEW FILE: Makefile --- # # Makefile for the Linux kernel device drivers. # # 15 Sep 2000, Christoph Hellwig <hc...@in...> # Rewritten to use lists instead of if-statements. # obj-$(CONFIG_PCI) += pci/ obj-$(CONFIG_PARISC) += parisc/ obj-$(CONFIG_ACPI_BOOT) += acpi/ # PnP must come after ACPI since it will eventually need to check if acpi # was used and do nothing if so obj-$(CONFIG_PNP) += pnp/ # char/ comes before serial/ etc so that the VT console is the boot-time # default. obj-y += char/ obj-y += serial/ obj-$(CONFIG_PARPORT) += parport/ obj-y += base/ block/ misc/ net/ media/ obj-$(CONFIG_NUBUS) += nubus/ obj-$(CONFIG_ATM) += atm/ obj-$(CONFIG_PPC_PMAC) += macintosh/ obj-$(CONFIG_IDE) += ide/ obj-$(CONFIG_FC4) += fc4/ obj-$(CONFIG_SCSI) += scsi/ obj-$(CONFIG_FUSION) += message/ obj-$(CONFIG_IEEE1394) += ieee1394/ obj-y += cdrom/ video/ obj-$(CONFIG_MTD) += mtd/ obj-$(CONFIG_PCMCIA) += pcmcia/ obj-$(CONFIG_DIO) += dio/ obj-$(CONFIG_SBUS) += sbus/ obj-$(CONFIG_ZORRO) += zorro/ obj-$(CONFIG_MAC) += macintosh/ obj-$(CONFIG_PARIDE) += block/paride/ obj-$(CONFIG_TC) += tc/ obj-$(CONFIG_USB) += usb/ obj-$(CONFIG_USB_GADGET) += usb/gadget/ obj-$(CONFIG_INPUT) += input/ obj-$(CONFIG_GAMEPORT) += input/gameport/ obj-$(CONFIG_SERIO) += input/serio/ obj-$(CONFIG_I2O) += message/ obj-$(CONFIG_I2C) += i2c/ obj-$(CONFIG_PHONE) += telephony/ obj-$(CONFIG_MD) += md/ obj-$(CONFIG_BT) += bluetooth/ obj-$(CONFIG_ISDN_BOOL) += isdn/ obj-$(CONFIG_MCA) += mca/ obj-$(CONFIG_EISA) += eisa/ obj-$(CONFIG_CPU_FREQ) += cpufreq/ obj-$(CONFIG_EXI) += exi/ |
From: <aot...@us...> - 2004-02-27 12:34:43
|
Update of /cvsroot/gc-linux/linux/arch/ppc In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3286/arch/ppc Modified Files: Kconfig Log Message: EXI support, part 1 - Driver model stuff, take 1. Index: Kconfig =================================================================== RCS file: /cvsroot/gc-linux/linux/arch/ppc/Kconfig,v retrieving revision 1.7 retrieving revision 1.8 diff -u -d -r1.7 -r1.8 --- Kconfig 18 Feb 2004 20:01:57 -0000 1.7 +++ Kconfig 27 Feb 2004 12:26:01 -0000 1.8 @@ -1009,6 +1009,16 @@ source "drivers/pci/Kconfig" +config EXI + bool "EXI support (EXPERIMENTAL)" + depends on GAMECUBE && EXPERIMENTAL + default y + help + This adds support for the Expansion Interface (bus) as found in + the Nintendo GameCube. + + Say Y. + config HOTPLUG bool "Support for hot-pluggable devices" ---help--- |
From: <aot...@us...> - 2004-02-27 12:34:43
|
Update of /cvsroot/gc-linux/linux/drivers/exi In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3286/drivers/exi Added Files: Makefile exi-driver.c Log Message: EXI support, part 1 - Driver model stuff, take 1. --- NEW FILE: Makefile --- # # Makefile for the EXI bus core. # obj-$(CONFIG_EXI) += exi-driver.o --- NEW FILE: exi-driver.c --- /* * drivers/exi/exi-driver.c * * Copyright (C) 2004 Arthur Othieno <a.o...@bl...> */ #define DEBUG #include <linux/init.h> #include <linux/kernel.h> #include <linux/device.h> #include <linux/exi.h> /** * exi_driver_register - register an EXI device driver. * @drv: driver structure to register. * * Registers an EXI device driver with the bus * and consequently with the driver model core. */ int exi_driver_register(struct exi_driver *drv) { drv->driver.name = drv->name; drv->driver.bus = &exi_bus_type; return driver_register(&drv->driver); } /** * exi_driver_unregister - unregister an EXI device driver. * @drv: driver structure to unregister. * * Unregisters an EXI device driver with the bus * and consequently with the driver model core. */ void exi_driver_unregister(struct exi_driver *drv) { driver_unregister(&drv->driver); } struct bus_type exi_bus_type = { .name = "exi", }; static int __init exi_driver_init(void) { return bus_register(&exi_bus_type); } postcore_initcall(exi_driver_init); EXPORT_SYMBOL(exi_bus_type); EXPORT_SYMBOL(exi_driver_register); EXPORT_SYMBOL(exi_driver_unregister); |
From: <aot...@us...> - 2004-02-27 12:11:12
|
Update of /cvsroot/gc-linux/linux/drivers/exi In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31250/drivers/exi Log Message: Directory /cvsroot/gc-linux/linux/drivers/exi added to the repository |
From: <ham...@us...> - 2004-02-27 00:14:51
|
Update of /cvsroot/gc-linux/linux/drivers/net In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv2198/linux/drivers/net Modified Files: gc-net.c Log Message: changed IRQ timing, but .. yes, the bus is too slow it seems Index: gc-net.c =================================================================== RCS file: /cvsroot/gc-linux/linux/drivers/net/gc-net.c,v retrieving revision 1.18 retrieving revision 1.19 diff -u -d -r1.18 -r1.19 --- gc-net.c 26 Feb 2004 22:33:51 -0000 1.18 +++ gc-net.c 27 Feb 2004 00:06:33 -0000 1.19 @@ -22,8 +22,8 @@ * $Id$ * * $Log$ - * Revision 1.18 2004/02/26 22:33:51 hamtitampti - * 0% packet loss now :-) + * Revision 1.19 2004/02/27 00:06:33 hamtitampti + * changed IRQ timing, but .. yes, the bus is too slow it seems * * Revision 1.17 2004/02/11 20:15:27 hamtitampti * small changes, little bit better now @@ -58,9 +58,6 @@ #define BBA_DBG(format, arg...); { } //#define BBA_DBG(format, arg...) printk(f,## arg) -//#define PACKETS_PER_IRQ (0x40) // 2 packets / irq -#define PACKETS_PER_IRQ 0 // IRQ / packet - #define BBA_IRQ 4 #define IRQ_EXI 4 //#define PKT_BUF_SZ 1536 /* Size of each temporary Rx buffer. */ @@ -389,9 +386,11 @@ #define RUNT 60 /* Too small Ethernet packet */ #define ETH_LEN 6 -/* - * D-Link driver variables: - */ + +#define BBA_PROMISC 0 +#define PACKETS_PER_IRQ (0x40) // 2 packets / irq +//#define PACKETS_PER_IRQ 0 // IRQ / packet + #define GBA_IRQ_MASK 0xFF @@ -502,6 +501,9 @@ spin_lock_irqsave(&priv->lock, priv->lockflags); netif_stop_queue(dev); + + //while(eth_inb(0x3a)&0x1); + // TX Fifo Page to 0 eth_outb(0xf, 0); eth_outb(0xe, 0); @@ -608,14 +610,6 @@ eth_ins(p_read << 8, descr, 4); - next_receive_frame = descr[0]; - next_receive_frame |= (descr[1] & 0x0f) << 8; - - if (next_receive_frame>0xf) next_receive_frame = 1; - - eth_outb(0x18, next_receive_frame&0xff); - eth_outb(0x19, (next_receive_frame&0x0f00)>>8); - /* Size Looks Crazy, but ok, the Packet Lenght is indeed 3 nibbles = 12 bits @@ -681,23 +675,19 @@ netif_rx(skb); + next_receive_frame = descr[0]; + next_receive_frame |= (descr[1] & 0x0f) << 8; + + + eth_outb(0x18, next_receive_frame&0xff); + eth_outb(0x19, (next_receive_frame&0x0f00)>>8); + /* update stats */ dev->last_rx = jiffies; priv->stats.rx_packets ++; /* count all receives */ priv->stats.rx_bytes ++; /* count all received bytes */ - /* - next_receive_frame = descr[0]; - next_receive_frame |= (descr[1] & 0x0f) << 8; - - printk("Current Framepointer: %d\n",p_read); - printk("Next Framepointer: %d\n",next_receive_frame); - printk("Write Framepointer: %d\n",p_write); - printk("Recieved Len: %d\n",skb->len); - - if (next_receive_frame != p_write) printk("Multipacket Seen\n"); - if (next_receive_frame != p_write) gc_input(dev); - */ + gc_input(dev); return ; @@ -767,7 +757,7 @@ if (status & 0x80) { eth_outb(9, 0x80); - BBA_DBG("rx overflow!\n"); + //printk("rx overflow!\n"); gc_input(dev); // RWP @@ -888,7 +878,7 @@ eth_outb(0x5b, eth_inb(0x5b)&~(1<<7)); eth_outb(0x5e, 1); eth_outb(0x5c, eth_inb(0x5c)|4); - eth_outb(1, 0x11 | PACKETS_PER_IRQ); + eth_outb(1, 0x10 | PACKETS_PER_IRQ | BBA_PROMISC); eth_outb(0x50, 0x80); @@ -912,8 +902,7 @@ eth_outb(0x1a, GBA_RX_RHBP); eth_outb(0x1b, 0); - eth_outb(1, (eth_inb(1) & 0xFE) | 0x12| PACKETS_PER_IRQ); - + eth_outb(0, 8); eth_outb(0x32, 8); @@ -989,7 +978,11 @@ eth_outb(0x5b, eth_inb(0x5b)&~(1<<7)); eth_outb(0x5e, 1); eth_outb(0x5c, eth_inb(0x5c)|4); - eth_outb(1, 0x11|PACKETS_PER_IRQ); + + eth_outb(1, 0x10|PACKETS_PER_IRQ | BBA_PROMISC); + + eth_outb(0x14, 0x0); + eth_outb(0x15, 0x8); eth_outb(0x50, 0x80); @@ -1012,7 +1005,6 @@ eth_outb(0x1a, GBA_RX_RHBP); eth_outb(0x1b, 0); - eth_outb(1, (eth_inb(1) & 0xFE) | 0x12| PACKETS_PER_IRQ); eth_outb(0, 8); eth_outb(0x32, 8); @@ -1045,7 +1037,7 @@ eth_outb(8, 0xFF); // enable all IRQs eth_outb(9, 0xFF); // clear all irqs -// eth_outb(0x30, (eth_inb(0x30) | 0x2)); // 100 Mbit ? + //eth_outb(0x30, 0x2); // 100 Mbit ? BBA_DBG("after all: irq mask %x %x\n", eth_inb(8), eth_inb(9)); |
From: <aot...@us...> - 2004-02-26 22:55:41
|
Update of /cvsroot/gc-linux/linux/arch/ppc/platforms In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18609/arch/ppc/platforms Modified Files: gamecube.c Log Message: Added gamecube_show_cpuinfo() Index: gamecube.c =================================================================== RCS file: /cvsroot/gc-linux/linux/arch/ppc/platforms/gamecube.c,v retrieving revision 1.12 retrieving revision 1.13 diff -u -d -r1.12 -r1.13 --- gamecube.c 26 Feb 2004 22:32:59 -0000 1.12 +++ gamecube.c 26 Feb 2004 22:47:26 -0000 1.13 @@ -6,6 +6,7 @@ #include <linux/config.h> #include <linux/console.h> #include <linux/initrd.h> +#include <linux/seq_file.h> #include <asm/machdep.h> #include <asm/bootinfo.h> @@ -64,6 +65,15 @@ tb_to_us = mulhwu_scale_factor(freq/divisor, 1000000); } +static int +gamecube_show_cpuinfo(struct seq_file *m) +{ + seq_printf(m, "vendor\t\t: IBM\n"); + seq_printf(m, "machine\t\t: Nintendo GameCube\n"); + + return 0; +} + void __init platform_init(unsigned long r3, unsigned long r4, unsigned long r5, unsigned long r6, unsigned long r7) @@ -79,8 +89,7 @@ #endif ppc_md.setup_arch = gamecube_setup_arch; - ppc_md.setup_io_mappings = gamecube_map_io; - ppc_md.find_end_of_memory = gamecube_find_end_of_memory; + ppc_md.show_cpuinfo = gamecube_show_cpuinfo; ppc_md.init_IRQ = gamecube_init_IRQ; ppc_md.get_irq = gamecube_get_irq; @@ -91,6 +100,9 @@ ppc_md.calibrate_decr = gamecube_calibrate_decr; + ppc_md.find_end_of_memory = gamecube_find_end_of_memory; + ppc_md.setup_io_mappings = gamecube_map_io; + #ifdef CONFIG_DUMMY_CONSOLE conswitchp = &dummy_con; #endif |
From: <ham...@us...> - 2004-02-26 22:42:07
|
Update of /cvsroot/gc-linux/linux/drivers/net In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15698/linux/drivers/net Modified Files: gc-net.c Log Message: 0% packet loss now :-) Index: gc-net.c =================================================================== RCS file: /cvsroot/gc-linux/linux/drivers/net/gc-net.c,v retrieving revision 1.17 retrieving revision 1.18 diff -u -d -r1.17 -r1.18 --- gc-net.c 11 Feb 2004 20:15:27 -0000 1.17 +++ gc-net.c 26 Feb 2004 22:33:51 -0000 1.18 @@ -22,6 +22,9 @@ * $Id$ * * $Log$ + * Revision 1.18 2004/02/26 22:33:51 hamtitampti + * 0% packet loss now :-) + * * Revision 1.17 2004/02/11 20:15:27 hamtitampti * small changes, little bit better now * @@ -390,15 +393,12 @@ * D-Link driver variables: */ -static volatile int rx_page; - -#define TX_PAGES 2 -static volatile int tx_fifo[TX_PAGES]; -static volatile int tx_fifo_in; -static volatile int tx_fifo_out; -static volatile int free_tx_pages = TX_PAGES; -static int was_down; +#define GBA_IRQ_MASK 0xFF +#define GBA_RX_BP 0x1 +#define GBA_RX_RWP 0x1 +#define GBA_RX_RRP 0x1 +#define GBA_RX_RHBP 0xf static irqreturn_t gc_bba_interrupt(int irq, void *dev_id, struct pt_regs * regs); static int adapter_init(struct net_device *dev); @@ -466,7 +466,6 @@ BBA_DBG("gc_bba_close\n"); // //select_nic(); - rx_page = 0; // de600_put_command(RESET); // de600_put_command(STOP_RESET); // de600_put_command(0); @@ -503,6 +502,9 @@ spin_lock_irqsave(&priv->lock, priv->lockflags); netif_stop_queue(dev); + // TX Fifo Page to 0 + eth_outb(0xf, 0); + eth_outb(0xe, 0); //printk("XMIT packet : len %d\n",skb->len); /* @@ -650,13 +652,29 @@ /* 'skb->data' points to the start of sk_buff data area. */ skb_put(skb,size); - + // We calculate the DMA position ptr = (p_read << 8) + 4; - // We read the Network buffer into the skb->data - eth_ins(ptr, skb->data, size); - skb->protocol=eth_type_trans(skb,dev); + //printk("Packet: %d %d\n",p_read,size); + + if ((ptr + size) < ((GBA_RX_RHBP+1)<<8)) { + // Full packet is linear to read + eth_ins(ptr, skb->data, size); + skb->protocol=eth_type_trans(skb,dev); + } else { + int temp_size = ((GBA_RX_RHBP+1)<<8) - ptr; + + // Full packet is Fragmentet to read + eth_ins(ptr, skb->data, temp_size); + p_read = GBA_RX_BP; + + eth_ins(p_read<<8, &skb->data[temp_size], size-temp_size); + skb->protocol=eth_type_trans(skb,dev); + + } + + /* We update the Read Page Pointer with the next pointer, which was given to us */ @@ -753,15 +771,15 @@ gc_input(dev); // RWP - eth_outb(0x16, 0x1); + eth_outb(0x16, GBA_RX_RWP); eth_outb(0x17, 0x0); // RRP - eth_outb(0x18, 0x1); + eth_outb(0x18, GBA_RX_RRP); eth_outb(0x19, 0x0); // RHBP - eth_outb(0x1a, 0xF); + eth_outb(0x1a, GBA_RX_RHBP); eth_outb(0x1b, 0); @@ -835,8 +853,7 @@ SET_MODULE_OWNER(dev); - /* probe for adapter */ - rx_page = 0; + //select_nic(); exi_select(0, 2, 5); @@ -879,21 +896,20 @@ - // BP - eth_outb(0xA, 0x1); - eth_outb(0xB, 0x0); - + eth_outb(0xA, GBA_RX_BP); + eth_outb(0xB, 0x0); + // RWP - eth_outb(0x16, 0x1); + eth_outb(0x16, GBA_RX_RWP); eth_outb(0x17, 0x0); // RRP - eth_outb(0x18, 0x1); + eth_outb(0x18, GBA_RX_RRP); eth_outb(0x19, 0x0); // RHBP - eth_outb(0x1a, 0xF); + eth_outb(0x1a, GBA_RX_RHBP); eth_outb(0x1b, 0); eth_outb(1, (eth_inb(1) & 0xFE) | 0x12| PACKETS_PER_IRQ); @@ -951,9 +967,6 @@ struct gc_private *priv = (struct gc_private *)dev->priv; - //select_nic(); - rx_page = 0; /* used by RESET */ - BBA_DBG("initializing BBA...\n"); @@ -984,19 +997,19 @@ // BP - eth_outb(0xA, 0x1); - eth_outb(0xB, 0x0); - + eth_outb(0xA, GBA_RX_BP); + eth_outb(0xB, 0x0); + // RWP - eth_outb(0x16, 0x1); + eth_outb(0x16, GBA_RX_RWP); eth_outb(0x17, 0x0); // RRP - eth_outb(0x18, 0x1); + eth_outb(0x18, GBA_RX_RRP); eth_outb(0x19, 0x0); // RHBP - eth_outb(0x1a, 0xF); + eth_outb(0x1a, GBA_RX_RHBP); eth_outb(0x1b, 0); eth_outb(1, (eth_inb(1) & 0xFE) | 0x12| PACKETS_PER_IRQ); |
From: <aot...@us...> - 2004-02-26 22:41:13
|
Update of /cvsroot/gc-linux/linux/arch/ppc/platforms In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15545/arch/ppc/platforms Modified Files: gamecube.c Log Message: Fix compiler warning in platform_init() Index: gamecube.c =================================================================== RCS file: /cvsroot/gc-linux/linux/arch/ppc/platforms/gamecube.c,v retrieving revision 1.11 retrieving revision 1.12 diff -u -d -r1.11 -r1.12 --- gamecube.c 26 Feb 2004 21:20:09 -0000 1.11 +++ gamecube.c 26 Feb 2004 22:32:59 -0000 1.12 @@ -8,6 +8,7 @@ #include <linux/initrd.h> #include <asm/machdep.h> +#include <asm/bootinfo.h> #include <asm/time.h> #include <asm/io.h> |
From: <aot...@us...> - 2004-02-26 21:28:22
|
Update of /cvsroot/gc-linux/linux/arch/ppc/platforms In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31212/arch/ppc/platforms Modified Files: Makefile gamecube.c Added Files: gamecube_pic.c Log Message: Moved interrupt code into arch/ppc/platforms/gamecube_pic.c --- NEW FILE: gamecube_pic.c --- /* * arch/ppc/platforms/gamecube_pic.c */ #undef DEBUG #include <linux/irq.h> #include <linux/init.h> #include <linux/kernel.h> #include <asm/io.h> static void gamecube_mask_and_ack_irq(unsigned int irq) { pr_debug("mask_and_ack(): %x, %x\n", GAMECUBE_IN(GAMECUBE_PIIM), GAMECUBE_IN(GAMECUBE_PIIC)); if (irq < GAMECUBE_IRQS) { GAMECUBE_OUT(GAMECUBE_PIIM, GAMECUBE_IN(GAMECUBE_PIIM) & ~(1 << irq)); /* mask */ GAMECUBE_OUT(GAMECUBE_PIIC, 1 << irq); /* ack */ } pr_debug("after mask_and_ack(): %x, %x\n", GAMECUBE_IN(GAMECUBE_PIIM), GAMECUBE_IN(GAMECUBE_PIIC)); } static void gamecube_mask_irq(unsigned int irq) { pr_debug("mask(): %x, %x\n", GAMECUBE_IN(GAMECUBE_PIIM), GAMECUBE_IN(GAMECUBE_PIIC)); if (irq < GAMECUBE_IRQS) GAMECUBE_OUT(GAMECUBE_PIIM, GAMECUBE_IN(GAMECUBE_PIIM) & ~(1 << irq)); /* mask */ } static void gamecube_unmask_irq(unsigned int irq) { pr_debug(" before unmask(): %x, %x\n", GAMECUBE_IN(GAMECUBE_PIIM), GAMECUBE_IN(GAMECUBE_PIIC)); if (irq < GAMECUBE_IRQS) GAMECUBE_OUT(GAMECUBE_PIIM, GAMECUBE_IN(GAMECUBE_PIIM) | (1 << irq)); pr_debug("after unmask(): %x, %x\n", GAMECUBE_IN(GAMECUBE_PIIM), GAMECUBE_IN(GAMECUBE_PIIC)); } static struct hw_interrupt_type gamecube_pic = { .typename = " GC-PIC ", .enable = gamecube_unmask_irq, .disable = gamecube_mask_irq, .ack = gamecube_mask_and_ack_irq, }; void __init gamecube_init_IRQ(void) { int i; GAMECUBE_OUT(GAMECUBE_PIIM, 0); /* disable all irqs */ GAMECUBE_OUT(GAMECUBE_PIIC, 0xffffffff); /* ack all irqs */ for (i = 0; i < GAMECUBE_IRQS; i++) irq_desc[i].handler = &gamecube_pic; } /* * Find the highest IRQ that's generating an interrupt, if any. */ int gamecube_get_irq(struct pt_regs *regs) { int irq = 0; u_int irq_status, irq_test = 1; pr_debug("get_irq(): %x, %x\n", GAMECUBE_IN(GAMECUBE_PIIM), GAMECUBE_IN(GAMECUBE_PIIC)); irq_status = GAMECUBE_IN(GAMECUBE_PIIC) & GAMECUBE_IN(GAMECUBE_PIIM); if (irq_status == 0) { pr_debug("GC-PIC: Received a spurious IRQ\n"); return -1; /* while(1);*/ } do { if (irq_status & irq_test) break; irq++; irq_test <<= 1; } while (irq < GAMECUBE_IRQS); return irq; } Index: Makefile =================================================================== RCS file: /cvsroot/gc-linux/linux/arch/ppc/platforms/Makefile,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- Makefile 18 Feb 2004 20:01:58 -0000 1.5 +++ Makefile 26 Feb 2004 21:20:09 -0000 1.6 @@ -46,7 +46,7 @@ obj-$(CONFIG_PRPMC800) += prpmc800_setup.o prpmc800_pci.o obj-$(CONFIG_SANDPOINT) += sandpoint.o obj-$(CONFIG_SPRUCE) += spruce_setup.o spruce_pci.o -obj-$(CONFIG_GAMECUBE) += gamecube.o +obj-$(CONFIG_GAMECUBE) += gamecube.o gamecube_pic.o obj-$(CONFIG_GAMECUBE_CONSOLE) += console.o obj-$(CONFIG_GAMECUBE_RESET_SWITCH) += gc-rsw.o obj-$(CONFIG_GAMECUBE_DVD_COVER) += gc-dvdcover.o Index: gamecube.c =================================================================== RCS file: /cvsroot/gc-linux/linux/arch/ppc/platforms/gamecube.c,v retrieving revision 1.10 retrieving revision 1.11 diff -u -d -r1.10 -r1.11 --- gamecube.c 5 Feb 2004 12:33:11 -0000 1.10 +++ gamecube.c 26 Feb 2004 21:20:09 -0000 1.11 @@ -1,14 +1,23 @@ -#include <linux/config.h> +/* + * arch/ppc/platforms/gamecube.c + */ + #include <linux/init.h> -#include <linux/pagemap.h> -#include <linux/irq.h> +#include <linux/config.h> #include <linux/console.h> #include <linux/initrd.h> + +#include <asm/machdep.h> #include <asm/time.h> #include <asm/io.h> -#include <asm/machdep.h> + #include "console.h" + +extern void gamecube_init_IRQ(void); +extern int gamecube_get_irq(struct pt_regs *regs); + + void __init gamecube_setup_arch(void) { @@ -27,88 +36,6 @@ } static void -gamecube_unmask_irq(unsigned int irq) -{ - //printk("unmask(): %x, %x\n", GAMECUBE_IN(GAMECUBE_PIIM), GAMECUBE_IN(GAMECUBE_PIIC)); - if (irq < GAMECUBE_IRQS) { - GAMECUBE_OUT(GAMECUBE_PIIM, GAMECUBE_IN(GAMECUBE_PIIM) | (1 << irq)); - } - //printk("after unmask(): %x, %x\n", GAMECUBE_IN(GAMECUBE_PIIM), GAMECUBE_IN(GAMECUBE_PIIC)); -} - -static void -gamecube_mask_irq(unsigned int irq) -{ - //printk("mask(): %x, %x\n", GAMECUBE_IN(GAMECUBE_PIIM), GAMECUBE_IN(GAMECUBE_PIIC)); - if (irq < GAMECUBE_IRQS) { - GAMECUBE_OUT(GAMECUBE_PIIM, GAMECUBE_IN(GAMECUBE_PIIM) & ~(1 << irq)); /* mask */ - } -} - -static void -gamecube_mask_and_ack_irq(unsigned int irq) -{ - //printk("mask_and_ack(): %x, %x\n", GAMECUBE_IN(GAMECUBE_PIIM), GAMECUBE_IN(GAMECUBE_PIIC)); - if (irq < GAMECUBE_IRQS) { - GAMECUBE_OUT(GAMECUBE_PIIM, GAMECUBE_IN(GAMECUBE_PIIM) & ~(1 << irq)); /* mask */ - GAMECUBE_OUT(GAMECUBE_PIIC, 1 << irq); /* ack */ - } - //printk("after mask_and_ack(): %x, %x\n", GAMECUBE_IN(GAMECUBE_PIIM), GAMECUBE_IN(GAMECUBE_PIIC)); -} - -static struct hw_interrupt_type gamecube_pic = { - "GameCube PIC", - NULL, /* startup */ - NULL, /* shutdown */ - gamecube_unmask_irq, - gamecube_mask_irq, - gamecube_mask_and_ack_irq, - NULL, /* end */ - NULL /* set_affinity */ -}; - -static void __init -gamecube_init_IRQ(void) -{ - int i; - - GAMECUBE_OUT(GAMECUBE_PIIM,0); /* disable all irqs */ - GAMECUBE_OUT(GAMECUBE_PIIC,0xffffffff); /* ack all irqs */ - - for (i = 0; i < GAMECUBE_IRQS; i++) { - irq_desc[i].handler = &gamecube_pic; - } -} - -/* - * Find the highest IRQ that generating an interrupt, if any. - */ -int -gamecube_get_irq(struct pt_regs *regs) -{ - int irq = 0; - u_int irq_status, irq_test = 1; - - //printk("get_irq(): %x, %x\n", GAMECUBE_IN(GAMECUBE_PIIM), GAMECUBE_IN(GAMECUBE_PIIC)); - irq_status = GAMECUBE_IN(GAMECUBE_PIIC) & GAMECUBE_IN(GAMECUBE_PIIM); - - if(irq_status==0) { - return -1; - //printk("\nPanic: IRQ for no reason!\n\n\n\n\n\n"); - //while(1); - } - do - { - if (irq_status & irq_test) - break; - irq++; - irq_test <<= 1; - } while (irq < GAMECUBE_IRQS); - - return irq; -} - -static void gamecube_restart(char *cmd) { printk("gamecube_restart()\n"); |