aboutsummaryrefslogtreecommitdiff
path: root/linux/src/drivers/block
Commit message (Collapse)AuthorAgeFilesLines
* linux: Add noide and noahci kernel optionsSamuel Thibault2024-01-231-1/+4
| | | | | They were meant to be temporary, but that got longer, and people seem to expect them to be there now.
* linux: Skip probing IDE when 255 phys heads detectedDamien Zammit2023-02-011-1/+1
| | | | | This allows qemu -M q35 to boot without 30 second timeout failing on hd0, when disk is actually attached via ahci.
* Drop spurious changesSamuel Thibault2022-12-221-4/+1
|
* Warn only once about not being able to recycle pagesSamuel Thibault2022-12-221-1/+4
|
* block: Look out for disk sector number overflowSamuel Thibault2021-08-171-0/+12
| | | | | | | | | | * linux/dev/drivers/block/ahci.c (ahci_do_port_request): Reject sectors beyond LBA48 or LBA28. * linux/dev/glue/block.c (check_rw_block): New function. (rdwr_partial, rdwr_full): Use check_rw_block to reject block number overflows. * linux/src/drivers/block/ide.c (do_rw_disk): Reject sectors beyond LBA28 or CHS.
* simplify interrupt handlingDamien Zammit2019-11-101-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | We have removed spl levels, now remove the machinery to manage different PIC masks according to levels. Only keep machinery to disable interrupts whatever the level. * i386/i386/pic.c (pic_mask): Remove array. (picinit): Do not form PIC mask. Set initial PIC mask to 0. (form_pic_mask): Remove function. * i386/i386/pic.h (form_pic_mask, pic_mask): Remove declarations. * i386/i386/spl.S (SETMASK): Remove macro. (XEN_SETMASK): Add macro, containing the Xen version of SETMASK. (spl0, splx_cli, spl) [MACH_XEN]: Call XEN_SETMASK instead of SETMASK. * i386/i386/pit.c (clkstart): Do not call form_pic_mask. * i386/i386at/autoconf.c (take_dev_irq, take_ctlr_irq): Likewise. * i386/i386at/kd_mouse.c (kd_mouse_open, kd_mouse_close): Likewise. * linux/dev/arch/i386/kernel/irq.c (mask_irq, unmask_irq): Directly update curr_pic_mask without using pic_mask array. (init_IRQ, restore_IRQ): do not call form_pic_mask. * linux/dev/include/asm-i386/system.h: Include <i386/ipl.h>. (__save_flags, __restore_flags): Use curr_ipl and splx instead of hardware flags. * linux/dev/init/main.c (linux_init): Do not call cli. * linux/dev/kernel/sched.c (linux_timer_intr): Do not use pic_mask. * linux/src/drivers/block/ide.c (try_to_identify): Disable irq probing. * linux/src/drivers/scsi/NCR53c406a.c (NCR53c406a_detect): Disable irq probing.
* ide: Use default IRQ by defaultSamuel Thibault2019-11-101-0/+1
| | | | | | | | To avoid even trying to probe IRQs. Nowadays' hardware use the default IRQ anyway. * linux/src/drivers/block/ide.c (init_hwif_data): Set hwif->irq to default_irqs[index].
* Keep DMA enabled on QEMU disksSamuel Thibault2018-06-131-0/+8
| | | | | | | | When the host is very loaded, some requests might time out, but that is not a reason for disabling DMA, so keep it enabled. * linux/src/drivers/block/triton.c (config_drive_for_dma): When disk is QEMU, set using_dma and keep_settings to 1.
* Disable probing legacy IDE when AHCI driver worksSamuel Thibault2016-01-291-1/+10
| | | | | | | | * linux/src/drivers/block/ide.c (default_io_base): Do not qualify const. (ide_disable_base): New function. * linux/dev/include/linux/blk.h (ide_disable_base): New declaration. * linux/dev/drivers/block/ahci.c (ahci_probe_dev): Call ide_disable_base with each I/O BAR of the AHCI PCI card.
* Add nodma optionsSamuel Thibault2014-11-132-3/+8
| | | | | | | | | | | Some very slow qemu instances would eventually trigger DMA timeouts, let's give a way to disable DMA there, it does not actually slow down operations anyway. * linux/src/drivers/block/ide.h (ide_drive_s): Add nodma field. * linux/src/drivers/block/ide.c (do_identify): Do not call dmaproc(ide_dma_check) when nodma is 1. (ide_setup): Add nodma option.
* Pass ide and hd kernel options to ide driverSamuel Thibault2014-11-121-0/+12
| | | | | | | | | * linux/dev/drivers/block/genhd.c: Include <linux/hdreg.h> and <alloca.h> (device_setup): Look for ide and hd options, and call ide_setup with them. * linux/src/drivers/block/ide.c (ide_setup) [MACH]: Parse hd[0-7] instead of hd[a-h].
* Make open return ENXIO on missing CD-ROMSamuel Thibault2014-02-101-0/+4
| | | | | * linux/src/drivers/block/ide-cd.c (ide_cdrom_open): Return -ENXIO when CD sense failed.
* Add quiet flag to CD I/OSamuel Thibault2014-02-101-21/+26
| | | | | | | | | | | | | | | * linux/src/drivers/block/ide-cd.c (cdrom_queue_packet_command): Add `quiet' parameter, copied into the request. (cdrom_decode_status): Do not print I/O error when `quiet' field of request is non-zero. (cdrom_end_request): Do not print sense results when `quiet' field of request is non-zero. (cdrom_check_status, cdrom_read_capacity, cdrom_read_tocentry): Pass 1 to `cdrom_queue_packet_command''s `quiet' parameter. (cdrom_lockdoor, cdrom_eject, cdrom_pause, cdrom_startstop, cdrom_read_subchannel, cdrom_mode_sense, cdrom_mode_select, cdrom_play_lba_range_1, cdrom_read_block, cdrom_load_unload, ide_cdrom_ioctl): Pass 0 to `cdrom_queue_packet_command''s `quiet' parameter.
* Add missing initializationSamuel Thibault2014-02-101-0/+1
| | | | | * linux/src/drivers/block/ide.c (ide_init_drive_cmd): Initialize `quiet' field of request to 0;
* Add AHCI driverSamuel Thibault2013-05-101-0/+3
| | | | | | | | | | | | | * linux/dev/glue/kmem.c (vmtophys): New function. * linux/dev/include/linux/mm.h (vmtophys): New prototype. * linux/src/include/linux/pci.h (PCI_CLASS_STORAGE_SATA, PCI_CLASS_STORAGE_SATA_AHCI): New macros. * linux/dev/drivers/block/ahci.c: New file. * linux/dev/include/ahci.h: New file. * linux/Makefrag.am (liblinux_a_SOURCES): Add linux/dev/drivers/block/ahci.c and linux/dev/drivers/block/ahci.h. * linux/src/drivers/block/ide.c: Include <ahci.h>. (probe_for_hwifs): Call ahci_probe_pci.
* ide: Increase WAIT_DRQ to accomodate some CF cards and SSD drives.David S. Miller2012-12-211-1/+2
| | | | | | | | | | | | | Based upon a patch by Philippe De Muyter, and feedback from Mark Lord and Robert Hancock. As noted by Mark Lord, the outdated ATA1 spec specifies a 20msec timeout for setting DRQ but lots of common devices overshoot this. Signed-off-by: David S. Miller <davem@davemloft.net> (cherry picked from Linux kernel commit 602da297e293eb2cbd28dcdbbe247593a46a853a) * linux/src/drivers/block/ide.h (WAIT_DRQ): Increase to 1 s.
* IDE disk drives with unusual C/H/S.Thomas Schwinge2012-12-211-25/+48
| | | | * linux/src/drivers/block/ide.c: Partially update to Linux 2.0.40 code.
* Update DMA auto-enabling, make forcing DMA an optionSergio Lopez2012-09-233-189/+640
| | | | | | | | | | | | | | * linux/configfrag.ac (--enable-ide-forcedma): Add option. * linux/src/drivers/block/ide.c (ide_probe_promise_20246): Do not call ide_init_promise. (probe_for_hwifs): Add SI, VIA, AL PCI probing. * linux/src/drivers/block/ide.h (hwif_chipset_t): Add hpt343, udma and ultra66 chipsets. * linux/src/drivers/block/triton.c: Update to upstream 1.14 version. * linux/src/include/linux/hdreg.h (HDIO_GET_IDENTITY): Rename to ... (HDIO_OBSOLETE_IDENTITY): ... new macro. (HDIO_GET_IDENTITY): New macro. (hd_driveid): Add fields for extended identification.
* Fix declarationsSamuel Thibault2011-08-311-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * device/ds_routines.h (io_done_list): Add variable declaration. (device_io_map): Keep variable declaration and move definition to... * device/ds_routines.c: ... here. * i386/i386/fpu.c: Include <i386/pic.h> (curr_ipl): Remove declaration. (fpintr): Add int unit parameter. * linux/dev/glue/glue.h: New header. * i386/i386/fpu.h (fpintr): Add function prototype. * i386/i386/hardclock.c (clock_interrupt, linux_timer_intr): Remove prototypes. [LINUX_DEV]: Include <linux/dev/glue/glue.h> * i386/i386/ipl.h (curr_ipl): Add declaration. * i386/i386/pic.h (curr_pic_mask, pic_mask, prtnull, intnull): Add declarations. * i386/i386at/kd.h (kdintr): Add declaration. * i386/i386at/pic_isa.c: Include <i386/fpu.h> and <i386at/kd.h> (intnull, fpintr, hardclock, kdintr, prtnull): Remove prototypes. * i386/xen/xen.c: Include <kern/mach_clock.h> (clock_interrupt): Remove prototype. * linux/dev/arch/i386/kernel/irq.c: Include <linux/dev/glue/glue.h> and <machine/machspl.h> (linux_timer_intr, splhigh, spl0, curr_ipl, curr_pic_mask, pic_mask, get_options): Remove declarations. * linux/dev/drivers/block/floppy.c: Include <linux/dev/glue/glue.h> (issig, get_options): Remove declarations. * linux/dev/drivers/block/genhd.c: Include <linux/dev/glue/glue.h> (linux_intr_pri): Remove declaration. * linux/dev/glue/block.c: Include <devices/ds_routines.h> and <linux/dev/glue/glue.h>. (device_io_map, blksize_size): Remove declarations. * linux/dev/glue/kmem.c: Include <kern/printf.h> and <linux/dev/glue/glue.h> (alloc_contig_mem, printf): Remove declarations. * linux/dev/glue/misc.c: Include <printf.h> and <linux/dev/glue/glue.h> (vm_map_lookup_entry, printf): Remove prototypes. * linux/dev/glue/net.c: Include <kern/printf.h>, <device/ds_routines.h> and <linux/dev/glue/glue.h>. (linux_intr_pri, io_done_list): Remove declarations. * linux/dev/init/main.c: Include <machine/model_dep.h> and <linux/dev/glue/glue.h>. (phys_last_addr, alloc_contig_mem, free_contig_mem, init_IRQ, restore_IRQ, startrtclock, linux_version_init, linux_kmem_init, pci_init, linux_net_emulation_init, device_setup, linux_printk, linux_timer_intr, spl0, splhigh, form_pic_mask, linux_bad_intr, prtnull, intnull, linux_sched_init, pcmcia_init): Remove declarations. * linux/dev/kernel/sched.c: Include <kern/printf.h>, <machine/machspl.h> and <linux/dev/glue/glue.h>. (alloc_contig_mem, free_contig_mem, splhigh, splx, linux_soft_intr, issig, printf, linux_auto_config): Remove prototypes. * linux/dev/kernel/softirq.c: Include <linux/dev/glue/glue.h>. * linux/src/drivers/block/floppy.c: Include <linux/dev/glue/glue.h>. (get_options): Remove prototype. * linux/src/init/main.c: Include <linux/dev/glue/glue.h> (init_IRQ): Remove prototype.
* Move cdrom_sleep() definition to its original source fileGuillem Jover2011-08-301-2/+15
| | | | | | * linux/dev/kernel/sched.c (cdrom_sleep): Move to ... * linux/src/drivers/block/ide-cd.c [MACH]: ... here, make it static. Include <kern/sched_prim.h>.
* Match signedness of char pointer comparisons and assignmentsGuillem Jover2011-08-273-33/+39
| | | | | | | | | | | | | | | | | | | | | | * linux/dev/drivers/block/genhd.c (msdos_partition): Cast `data' assignment to `unsigned char *'. * linux/src/drivers/block/ide-cd.c (cdrom_queue_request_sense): Cast `buffer' assignment to `unsigned char *'. (cdrom_transfer_packet_command): Change `cmd_buf' argument type to `unsigned char *'. (cdrom_read_capacity): Cast `pc.buffer' assignments to `unsigned char *'. Use temporary `model' and `fw_rev' `const char *' variables to compare against literal strings and characters. * linux/src/drivers/block/ide.c (execute_drive_cmd): Cast `args' assignment to `byte *'. (ide_open): Cast `rq.buffer' assignment to `char *'. (ide_release): Likewise. (ide_ioctl): Likewise. (do_identify): Cast variables being compared against literal string to `char *'. (probe_for_drive): Likewise. * linux/src/drivers/block/ide.h (struct packet_command): Change `buffer' type to `unsigned char *'.
* Whitelist QEMU Hard-Drive for DMA.Samuel Thibault2011-07-211-7/+1
| | | | | | | | PIO has become very slow in Linux 2.6.35+, so we do not really have the choice any more. * linux/src/drivers/block/triton.c (good_dma_drives): Re-whitelist QEMU hard drive.
* Fix unexpected irq + irq timeout on writeSamuel Thibault2010-08-011-2/+4
| | | | | * linux/src/drivers/block/ide.c (do_rw_disk): Set IRQ handler before issuing write command.
* Un-whitelist the QEMU harddisk for DMA supportSamuel Thibault2010-07-311-1/+7
| | | | * linux/src/drivers/block/triton.c (good_dma_drives): Remove "QEMU HARDDISK".
* whitelist the QEMU harddisk for DMA supportSamuel Thibault2010-03-021-0/+1
| | | | | * linux/src/drivers/block/triton.c (good_dma_drives): Add "QEMU HARDDISK".
* ignore bogus FDPT information from BIOSSamuel Thibault2010-01-041-5/+17
|
* Update constants to nowadays standardsSamuel Thibault2009-10-141-1/+1
| | | | | | | | | kern/zalloc.c (zone_map_size): Increase to 64MiB. i386/i386at/model_dep.c (mem_size_init): Reduce cap to 1/6 of memory space to save room for zalloc area. linux/src/drivers/block/ide.h (INITIAL_MULT_COUNT): Set to 16. vm/vm_map.h (VM_MAP_COPY_PAGE_LIST_MAX): Set to 64. vm/vm_object.c (vm_object_cached_max): Set to 4000.
* * linux/src/drivers/block/triton.c (ide_init_triton): Enable BusSamuel Thibault2009-06-181-1/+11
| | | | Mastering if not enabled by BIOS.
* 2006-10-08 Thomas Schwinge <tschwinge@gnu.org>Thomas Schwinge2009-06-181-24/+51
| | | | | * linux/dev/drivers/block/ide.c: Move file... * linux/src/drivers/block/ide.c: ... here.
* 2006-10-08 Thomas Schwinge <tschwinge@gnu.org>Thomas Schwinge2009-06-181-0/+2
| | | | | | * linux/dev/drivers/block/ide-cd.c: Remove file. * linux/src/drivers/block/ide-cd.c (cdrom_sleep): Don't define function `#ifndef MACH'.
* 1998-11-30 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>Thomas Bushnell1999-04-269-0/+14041
Clean up linux emulation code to make it architecture-independent as much as possible. * linux: Renamed from linuxdev. * Makefile.in (objfiles): Add linux.o instead of linuxdev.o. (MAKE): New variable. Used for the linux.o target. * configure.in: Add AC_CHECK_TOOL(MAKE, make). * i386/i386/spl.h: Include <i386/ipl.h>, for compatibility with OSF Mach 3.0. Suggested by Elgin Lee <ehl@funghi.com>. * linux/src: Renamed from linux/linux. * linux/dev: Renamed from linux/mach. * linux/Drivers.in (AC_INIT): Use dev/include/linux/autoconf.h, instead of mach/include/linux/autoconf.h. * Makefile.in (all): Target ../linux.o instead of ../linuxdev.o. * linux/dev/drivers/block/genhd.c: Include <machine/spl.h> instead of <i386/ipl.h>. * linux/dev/drivers/net/auto_irq.c: Remove unneeded header files, <i386/ipl.h> and <i386/pic.h>. * linux/dev/init/main.c: Many i386-dependent codes moved to ... * linux/dev/arch/i386/irq.c: ... here. * linux/dev/arch/i386/setup.c: New file. * linux/dev/arch/i386/linux_emul.h: Likewise. * linux/dev/arch/i386/glue/timer.c: Merged into sched.c. * linux/dev/arch/i386/glue/sched.c: Include <machine/spl.h> instead of <i386/ipl.h>, and moved to ... * linux/dev/kernel/sched.c: ... here. * linux/dev/arch/i386/glue/block.c: Include <machine/spl.h> and <linux_emul.h>, instead of i386-dependent header files, and moved to ... * linux/dev/glue/blocl.c: ... here. * linux/dev/arch/i386/glue/net.c: Include <machine/spl.h> and <linux_emul.h>, instead of i386-dependent header files, and moved to ... * linux/dev/glue/net.c: ... here. * linux/dev/arch/i386/glue/misc.c: Remove `x86' and moved to ... * linux/dev/glue/misc.c: ... here. * linux/dev/arch/i386/glue/kmem.c: Moved to ... * linux/dev/glue/kmem.c: ... here.