--- linux/drivers/acorn/block/fd1772.c.predag Fri Sep 1 23:11:23 2000 +++ linux/drivers/acorn/block/fd1772.c Sun Sep 3 20:20:48 2000 @@ -3,7 +3,7 @@ * Based on ataflop.c in the m68k Linux * Copyright (C) 1993 Greg Harp * Atari Support by Bjoern Brauel, Roman Hodek - * Archimedes Support by Dave Gilbert (gilbertd@cs.man.ac.uk) + * Archimedes Support by Dave Gilbert (linux@treblig.org) * * Big cleanup Sep 11..14 1994 Roman Hodek: * - Driver now works interrupt driven @@ -118,11 +118,16 @@ * DAG 30/01/99 - Started frobbing for 2.2.1 * DAG 20/06/99 - A little more frobbing: * Included include/asm/uaccess.h for get_user/put_user + * + * DAG 1/09/00 - Dusted off for 2.4.0-test7 + * MAX_SECTORS was name clashing so it is now FD1772_... + * Minor parameter, name layouts for 2.4.x differences */ #include #include #include +#include #include #include #include @@ -242,7 +247,7 @@ outb(val, (reg / 2) + FDC1772BASE); }; -#define MAX_SECTORS 22 +#define FD1772_MAX_SECTORS 22 unsigned char *DMABuffer; /* buffer for writes */ /*static unsigned long PhysDMABuffer; *//* physical address */ @@ -369,18 +374,18 @@ static int fd_test_drive_present(int drive); static void config_types(void); static int floppy_open(struct inode *inode, struct file *filp); -static void floppy_release(struct inode *inode, struct file *filp); +static int floppy_release(struct inode *inode, struct file *filp); /************************* End of Prototypes **************************/ static struct timer_list motor_off_timer = -{NULL, NULL, 0, 0, fd_motor_off_timer}; +{ {NULL,NULL}, 0, 0, fd_motor_off_timer}; #ifdef TRACKBUFFER static struct timer_list readtrack_timer = - { NULL, NULL, 0, 0, fd_readtrack_check }; + { {NULL,NULL}, 0, 0, fd_readtrack_check }; #endif static struct timer_list timeout_timer = -{NULL, NULL, 0, 0, fd_times_out}; +{ {NULL,NULL}, 0, 0, fd_times_out}; /* DAG: Haven't got a clue what this is? */ int stdma_islocked(void) @@ -720,7 +725,7 @@ unit[SelectedDrive].disktype->stretch); udelay(25); save_flags(flags); - cliIF(); + clf(); SET_IRQ_HANDLER(fd_seek_done); FDC1772_WRITE(FDC1772REG_CMD, FDC1772CMD_SEEK | unit[SelectedDrive].steprate | /* DAG */ @@ -810,7 +815,7 @@ DPRINT(("fd_rwsec() before setup DMA \n")); /* Setup DMA - Heavily modified by DAG */ save_flags(flags); - cliIF(); + clf(); disable_dma(FLOPPY_DMA); set_dma_mode(FLOPPY_DMA, rwflag ? DMA_MODE_WRITE : DMA_MODE_READ); set_dma_addr(FLOPPY_DMA, (long) paddr); /* DAG - changed from Atari specific */ @@ -877,7 +882,7 @@ DPRINT(("fd_readtrack_check @ %d\n",jiffies)); save_flags(flags); - cliIF(); + clf(); del_timer( &readtrack_timer ); @@ -893,10 +898,10 @@ } /* get the current DMA address */ - addr=fdc1772_dataaddr; /* DAG - ? */ + addr=(unsigned long)fdc1772_dataaddr; /* DAG - ? */ DPRINT(("fd_readtrack_check: addr=%x PhysTrackBuffer=%x\n",addr,PhysTrackBuffer)); - if (addr >= PhysTrackBuffer + unit[SelectedDrive].disktype->spt*512) { + if (addr >= (unsigned int)PhysTrackBuffer + unit[SelectedDrive].disktype->spt*512) { /* already read enough data, force an FDC interrupt to stop * the read operation */ @@ -1008,7 +1013,7 @@ } else { - /*cache_clear (PhysTrackBuffer, MAX_SECTORS * 512);*/ + /*cache_clear (PhysTrackBuffer, FD1772_MAX_SECTORS * 512);*/ BufferDrive = SelectedDrive; BufferSide = ReqSide; BufferTrack = ReqTrack; @@ -1118,9 +1123,9 @@ /* Prevent "aliased" accesses. */ -static fd_ref[4] = +static int fd_ref[4] = {0, 0, 0, 0}; -static fd_device[4] = +static int fd_device[4] = {0, 0, 0, 0}; /* @@ -1311,7 +1316,7 @@ }; }; -void do_fd_request(void) +void do_fd_request(request_queue_t* q) { unsigned long flags; @@ -1352,9 +1357,6 @@ int drive, device; device = inode->i_rdev; - switch (cmd) { - RO_IOCTLS(inode->i_rdev, param); - } drive = MINOR(device); switch (cmd) { case FDFMTBEG: @@ -1553,7 +1555,7 @@ } -static void floppy_release(struct inode *inode, struct file *filp) +static int floppy_release(struct inode *inode, struct file *filp) { int drive = MINOR(inode->i_rdev) & 3; @@ -1563,11 +1565,12 @@ printk("floppy_release with fd_ref == 0"); fd_ref[drive] = 0; } + + return 0; } static struct block_device_operations floppy_fops = { - owner: THIS_MODULE, open: floppy_open, release: floppy_release, ioctl: fd_ioctl, @@ -1609,10 +1612,9 @@ /* initialize check_change timer */ init_timer(&fd_timer); fd_timer.function = check_change; -} #ifdef TRACKBUFFER - DMABuffer = (char *)kmalloc((MAX_SECTORS+1)*512,GFP_KERNEL); /* Atari uses 512 - I want to eventually cope with 1K sectors */ + DMABuffer = (char *)kmalloc((FD1772_MAX_SECTORS+1)*512,GFP_KERNEL); /* Atari uses 512 - I want to eventually cope with 1K sectors */ TrackBuffer = DMABuffer + 512; #else /* Allocate memory for the DMAbuffer - on the Atari this takes it @@ -1635,7 +1637,7 @@ blk_size[MAJOR_NR] = floppy_sizes; blksize_size[MAJOR_NR] = floppy_blocksizes; - blk_dev[MAJOR_NR].request_fn = DEVICE_REQUEST; + blk_init_queue(BLK_DEFAULT_QUEUE(MAJOR_NR), DEVICE_REQUEST); config_types(); --- linux/arch/arm/kernel/dma-arc.c.predag Sun Sep 3 20:48:04 2000 +++ linux/arch/arm/kernel/dma-arc.c Sun Sep 3 20:47:38 2000 @@ -31,7 +31,7 @@ unsigned long flags; DPRINTK("enable_dma fdc1772 data read\n"); save_flags(flags); - cliIF(); + clf(); memcpy ((void *)0x1c, (void *)&fdc1772_dma_read, &fdc1772_dma_read_end - &fdc1772_dma_read); @@ -47,7 +47,7 @@ unsigned long flags; DPRINTK("enable_dma fdc1772 data write\n"); save_flags(flags); - cliIF(); + clf(); memcpy ((void *)0x1c, (void *)&fdc1772_dma_write, &fdc1772_dma_write_end - &fdc1772_dma_write); fdc1772_setupdma(dma->buf.length, dma->buf.address); /* Sets data pointer up */ @@ -78,7 +78,7 @@ DPRINTK("arc_floppy_cmdend_enable_dma\n"); /*printk("enable_dma fdc1772 command end FIQ\n");*/ save_flags(flags); - cliIF(); + clf(); /* B fdc1772_comendhandler */ *((unsigned int *)0x1c)=0xea000000 | --- linux-2.4.0-test6-rmk6/arch/arm/kernel/head-armo.S.predag Sat Aug 26 20:37:23 2000 +++ linux-2.4.0-test6-rmk6/arch/arm/kernel/head-armo.S Sat Aug 26 22:24:34 2000 @@ -72,6 +72,7 @@ mov pc, lr detect_proc_type: + mov r3, lr @ Taking the undef trap will overwrite our lr mov r2, #0xea000000 @ Point undef instr to continuation adr r0, continue - 12 orr r0, r2, r0, lsr #2 @@ -80,8 +81,9 @@ ldr r0, arm2_id swp r2, r2, [r1] @ check for swp (ARM2 can't) ldr r0, arm250_id - mrc 15, 0, r0, c0, c0 @ check for CP#15 (ARM250 can't) + mrc 15, 0, ip, c0, c0 @ check for CP#15 (ARM250 can't) + mov r0, ip continue: mov r2, #0xeb000000 @ Make undef vector loop sub r2, r2, #2 str r2, [r1, #4] - mov pc, lr + mov pc, r3 quest(request_queue_t* q) { unsigned long flags; @@ -1352,9 +1357,6 @@ int drive, device; device = inode->i_rdev; - switch (cmd) { - RO_IOCTLS(inode->i_rdev, param); - } drive = MINOR(device); switch (cmd) { case FDFMTBEG: @@ -1553,7 +1555,7 @@ } -static void floppy_release(struct inode *inode, struct file *filp) +static int floppy_release(struct inode *inode, struct file *filp) { int drive = MINOR(inode->i_rdev) & 3; @@ -1563,11 +1565,12 @@ printk("floppy_release with fd_ref == 0"); fd_ref[drive] = 0; } + + return 0; } static struct block_device_operations floppy_fops = { - owner: THIS_MODULE, open: floppy_open, release: floppy_release, ioctl: fd_ioctl, @@ -1609,10 +1612,9 @@ /* initialize check_change timer */ init_timer(&fd_timer); fd_timer.function = check_change; -} #ifdef TRACKBUFFER - DMABuffer = (char *)kmalloc((MAX_SECTORS+1)*512,GFP_KERNEL); /* Atari uses 512 - I want to eventually cope with 1K sectors */ + DMABuffer = (char *)kmalloc((FD1772_MAX_SECTORS+1)*512,GFP_KERNEL); /* Atari uses 512 - I want to eventually cope with 1K sectors */ TrackBuffer = DMABuffer + 512; #else /* Allocate memory for the DMAbuffer - on the Atari this takes it @@ -1635,7 +1637,7 @@ blk_size[MAJOR_NR] = floppy_sizes; blksize_size[MAJOR_NR] = floppy_blocksizes; - blk_dev[MAJOR_NR].request_fn = DEVICE_REQUEST; + blk_init_queue(BLK_DEFAULT_QUEUE(MAJOR_NR), DEVICE_REQUEST); config_types(); --- linux/arch/arm/kernel/dma-arc.c.predag Sun Sep 3 20:48:04 2000 +++ linux/arch/arm/kernel/dma-arc.c Sun Sep 3 20:47:38 2000 @@ -31,7 +31,7 @@ unsigned long flags; DPRINTK("enable_dma fdc1772 data read\n"); save_flags(flags); - cliIF(); + clf(); memcpy ((void *)0x1c, (void *)&fdc1772_dma_read, &fdc1772_dma_read_end - &fdc1772_dma_read); @@ -47,7 +47,7 @@ unsigned long flags; DPRINTK("enable_dma fdc1772 data write\n"); save_flags(flags); - cliIF(); + clf(); memcpy ((void *)0x1c, (void *)&fdc1772_dma_write, &fdc1772_dma_write_end - &fdc1772_dma_write); fdc1772_setupdma(dma->buf.length, dma->buf.address); /* Sets data pointer up */ @@ -78,7 +78,7 @@ DPRINTK("arc_floppy_cmdend_enable_dma\n"); /*printk("enable_dma fdc1772 command end FIQ\n");*/ save_flags(flags); - cliIF(); + clf(); /* B fdc1772_comendhandler */ *((unsigned int *)0x1c)=0xea000000 | --- linux-2.4.0-test6-rmk6/arch/arm/kernel/head-armo.S.predag Sat Aug 26 20:37:23 2000 +++ linux-2.4.0-test6-rmk6/arch/arm/kernel/head-armo.S Sat Aug 26 22:24:34 2000 @@ -72,6 +72,7 @@ mov pc, lr detect_proc_type: + mov r3, lr @ Taking the undef trap will overwrite our lr mov r2, #0xea000000 @ Point undef instr to continuation adr r0, continue - 12 orr r0, r2, r0, lsr #2 @@ -80,8 +81,9 @@ ldr r0, arm2_id swp r2, r2, [r1] @ check for swp (ARM2 can't) ldr r0, arm250_id - mrc 15, 0, r0, c0, c0 @ check for CP#15 (ARM250 can't) + mrc 15, 0, ip, c0, c0 @ check for CP#15 (ARM250 can't) + mov r0, ip continue: mov r2, #0xeb000000 @ Make undef vector loop sub r2, r2, #2 str r2, [r1, #4] - mov pc, lr + mov pc, r3