Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0107b3cf authored by David Woodhouse's avatar David Woodhouse
Browse files

Merge with master.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux-2.6.git

parents 1c3f45ab 9ee1c939
Loading
Loading
Loading
Loading
+1 −5
Original line number Diff line number Diff line
@@ -2475,13 +2475,9 @@ S: Potsdam, New York 13676
S: USA

N: Dave Neuer
E: dneuer@innovation-charter.com
E: mr_fred_smoothie@yahoo.com
E: dave.neuer@pobox.com
D: Helped implement support for Compaq's H31xx series iPAQs
D: Other mostly minor tweaks & bugfixes
S: 325 E. Main St., Suite 3
S: Carnegie, PA 15105
S: USA

N: Michael Neuffer
E: mike@i-Connect.Net
+124 −32
Original line number Diff line number Diff line
@@ -14,7 +14,7 @@
  </authorgroup>

  <copyright>
   <year>2003</year>
   <year>2003-2005</year>
   <holder>Jeff Garzik</holder>
  </copyright>

@@ -44,30 +44,38 @@

<toc></toc>

  <chapter id="libataThanks">
     <title>Thanks</title>
  <para>
  The bulk of the ATA knowledge comes thanks to long conversations with
  Andre Hedrick (www.linux-ide.org).
  </para>
  <chapter id="libataIntroduction">
     <title>Introduction</title>
  <para>
  Thanks to Alan Cox for pointing out similarities 
  between SATA and SCSI, and in general for motivation to hack on
  libata.
  libATA is a library used inside the Linux kernel to support ATA host
  controllers and devices.  libATA provides an ATA driver API, class
  transports for ATA and ATAPI devices, and SCSI&lt;-&gt;ATA translation
  for ATA devices according to the T10 SAT specification.
  </para>
  <para>
  libata's device detection
  method, ata_pio_devchk, and in general all the early probing was
  based on extensive study of Hale Landis's probe/reset code in his
  ATADRVR driver (www.ata-atapi.com).
  This Guide documents the libATA driver API, library functions, library
  internals, and a couple sample ATA low-level drivers.
  </para>
  </chapter>

  <chapter id="libataDriverApi">
     <title>libata Driver API</title>
     <para>
     struct ata_port_operations is defined for every low-level libata
     hardware driver, and it controls how the low-level driver
     interfaces with the ATA and SCSI layers.
     </para>
     <para>
     FIS-based drivers will hook into the system with ->qc_prep() and
     ->qc_issue() high-level hooks.  Hardware which behaves in a manner
     similar to PCI IDE hardware may utilize several generic helpers,
     defining at a bare minimum the bus I/O addresses of the ATA shadow
     register blocks.
     </para>
     <sect1>
        <title>struct ata_port_operations</title>

	<sect2><title>Disable ATA port</title>
	<programlisting>
void (*port_disable) (struct ata_port *);
	</programlisting>
@@ -78,6 +86,9 @@ void (*port_disable) (struct ata_port *);
	unplug).
	</para>

	</sect2>

	<sect2><title>Post-IDENTIFY device configuration</title>
	<programlisting>
void (*dev_config) (struct ata_port *, struct ata_device *);
	</programlisting>
@@ -88,6 +99,9 @@ void (*dev_config) (struct ata_port *, struct ata_device *);
	issue of SET FEATURES - XFER MODE, and prior to operation.
	</para>

	</sect2>

	<sect2><title>Set PIO/DMA mode</title>
	<programlisting>
void (*set_piomode) (struct ata_port *, struct ata_device *);
void (*set_dmamode) (struct ata_port *, struct ata_device *);
@@ -108,6 +122,9 @@ void (*post_set_mode) (struct ata_port *ap);
	->set_dma_mode() is only called if DMA is possible.
	</para>

	</sect2>

	<sect2><title>Taskfile read/write</title>
	<programlisting>
void (*tf_load) (struct ata_port *ap, struct ata_taskfile *tf);
void (*tf_read) (struct ata_port *ap, struct ata_taskfile *tf);
@@ -120,6 +137,9 @@ void (*tf_read) (struct ata_port *ap, struct ata_taskfile *tf);
	taskfile register values.
	</para>

	</sect2>

	<sect2><title>ATA command execute</title>
	<programlisting>
void (*exec_command)(struct ata_port *ap, struct ata_taskfile *tf);
	</programlisting>
@@ -129,17 +149,37 @@ void (*exec_command)(struct ata_port *ap, struct ata_taskfile *tf);
	->tf_load(), to be initiated in hardware.
	</para>

	</sect2>

	<sect2><title>Per-cmd ATAPI DMA capabilities filter</title>
	<programlisting>
int (*check_atapi_dma) (struct ata_queued_cmd *qc);
	</programlisting>

	<para>
Allow low-level driver to filter ATA PACKET commands, returning a status
indicating whether or not it is OK to use DMA for the supplied PACKET
command.
	</para>

	</sect2>

	<sect2><title>Read specific ATA shadow registers</title>
	<programlisting>
u8   (*check_status)(struct ata_port *ap);
void (*dev_select)(struct ata_port *ap, unsigned int device);
u8   (*check_altstatus)(struct ata_port *ap);
u8   (*check_err)(struct ata_port *ap);
	</programlisting>

	<para>
	Reads the Status ATA shadow register from hardware.  On some
	hardware, this has the side effect of clearing the interrupt
	condition.
	Reads the Status/AltStatus/Error ATA shadow register from
	hardware.  On some hardware, reading the Status register has
	the side effect of clearing the interrupt condition.
	</para>

	</sect2>

	<sect2><title>Select ATA device on bus</title>
	<programlisting>
void (*dev_select)(struct ata_port *ap, unsigned int device);
	</programlisting>
@@ -147,9 +187,13 @@ void (*dev_select)(struct ata_port *ap, unsigned int device);
	<para>
	Issues the low-level hardware command(s) that causes one of N
	hardware devices to be considered 'selected' (active and
	available for use) on the ATA bus.
	available for use) on the ATA bus.  This generally has no
meaning on FIS-based devices.
	</para>

	</sect2>

	<sect2><title>Reset ATA bus</title>
	<programlisting>
void (*phy_reset) (struct ata_port *ap);
	</programlisting>
@@ -162,17 +206,31 @@ void (*phy_reset) (struct ata_port *ap);
	functions ata_bus_reset() or sata_phy_reset() for this hook.
	</para>

	</sect2>

	<sect2><title>Control PCI IDE BMDMA engine</title>
	<programlisting>
void (*bmdma_setup) (struct ata_queued_cmd *qc);
void (*bmdma_start) (struct ata_queued_cmd *qc);
void (*bmdma_stop) (struct ata_port *ap);
u8   (*bmdma_status) (struct ata_port *ap);
	</programlisting>

	<para>
When setting up an IDE BMDMA transaction, these hooks arm
	(->bmdma_setup) and fire (->bmdma_start) the hardware's DMA
	engine.
(->bmdma_setup), fire (->bmdma_start), and halt (->bmdma_stop)
the hardware's DMA engine.  ->bmdma_status is used to read the standard
PCI IDE DMA Status register.
	</para>

	<para>
These hooks are typically either no-ops, or simply not implemented, in
FIS-based drivers.
	</para>

	</sect2>

	<sect2><title>High-level taskfile hooks</title>
	<programlisting>
void (*qc_prep) (struct ata_queued_cmd *qc);
int (*qc_issue) (struct ata_queued_cmd *qc);
@@ -190,20 +248,26 @@ int (*qc_issue) (struct ata_queued_cmd *qc);
	->qc_issue is used to make a command active, once the hardware
	and S/G tables have been prepared.  IDE BMDMA drivers use the
	helper function ata_qc_issue_prot() for taskfile protocol-based
	dispatch.  More advanced drivers roll their own ->qc_issue
	implementation, using this as the "issue new ATA command to
	hardware" hook.
	dispatch.  More advanced drivers implement their own ->qc_issue.
	</para>

	</sect2>

	<sect2><title>Timeout (error) handling</title>
	<programlisting>
void (*eng_timeout) (struct ata_port *ap);
	</programlisting>

	<para>
This is a high level error handling function, called from the
	error handling thread, when a command times out.
error handling thread, when a command times out.  Most newer
hardware will implement its own error handling code here.  IDE BMDMA
drivers may use the helper function ata_eng_timeout().
	</para>

	</sect2>

	<sect2><title>Hardware interrupt handling</title>
	<programlisting>
irqreturn_t (*irq_handler)(int, void *, struct pt_regs *);
void (*irq_clear) (struct ata_port *);
@@ -216,6 +280,9 @@ void (*irq_clear) (struct ata_port *);
	is quiet.
	</para>

	</sect2>

	<sect2><title>SATA phy read/write</title>
	<programlisting>
u32 (*scr_read) (struct ata_port *ap, unsigned int sc_reg);
void (*scr_write) (struct ata_port *ap, unsigned int sc_reg,
@@ -227,6 +294,9 @@ void (*scr_write) (struct ata_port *ap, unsigned int sc_reg,
	if ->phy_reset hook called the sata_phy_reset() helper function.
	</para>

	</sect2>

	<sect2><title>Init and shutdown</title>
	<programlisting>
int (*port_start) (struct ata_port *ap);
void (*port_stop) (struct ata_port *ap);
@@ -240,15 +310,17 @@ void (*host_stop) (struct ata_host_set *host_set);
	tasks.  
	</para>
	<para>
	->host_stop() is called when the rmmod or hot unplug process
	begins.  The hook must stop all hardware interrupts, DMA
	engines, etc.
	</para>
	<para>
	->port_stop() is called after ->host_stop().  It's sole function
	is to release DMA/memory resources, now that they are no longer
	actively being used.
	</para>
	<para>
	->host_stop() is called after all ->port_stop() calls
have completed.  The hook must finalize hardware shutdown, release DMA
and other resources, etc.
	</para>

	</sect2>

     </sect1>
  </chapter>
@@ -279,4 +351,24 @@ void (*host_stop) (struct ata_host_set *host_set);
!Idrivers/scsi/sata_sil.c
  </chapter>

  <chapter id="libataThanks">
     <title>Thanks</title>
  <para>
  The bulk of the ATA knowledge comes thanks to long conversations with
  Andre Hedrick (www.linux-ide.org), and long hours pondering the ATA
  and SCSI specifications.
  </para>
  <para>
  Thanks to Alan Cox for pointing out similarities 
  between SATA and SCSI, and in general for motivation to hack on
  libata.
  </para>
  <para>
  libata's device detection
  method, ata_pio_devchk, and in general all the early probing was
  based on extensive study of Hale Landis's probe/reset code in his
  ATADRVR driver (www.ata-atapi.com).
  </para>
  </chapter>

</book>
+7 −1
Original line number Diff line number Diff line
@@ -271,7 +271,7 @@ patch, which certifies that you wrote it or otherwise have the right to
pass it on as a open-source patch.  The rules are pretty simple: if you
can certify the below:

        Developer's Certificate of Origin 1.0
        Developer's Certificate of Origin 1.1

        By making a contribution to this project, I certify that:

@@ -291,6 +291,12 @@ can certify the below:
            person who certified (a), (b) or (c) and I have not modified
            it.

	(d) I understand and agree that this project and the contribution
	    are public and that a record of the contribution (including all
	    personal information I submit with it, including my sign-off) is
	    maintained indefinitely and may be redistributed consistent with
	    this project or the open source license(s) involved.

then you just add a line saying

	Signed-off-by: Random J Developer <random@developer.org>
+1 −1
Original line number Diff line number Diff line
@@ -12,7 +12,7 @@ Don is no longer the prime maintainer of this version of the driver.
Please report problems to one or more of:

  Andrew Morton <andrewm@uow.edu.au>
  Netdev mailing list <netdev@oss.sgi.com>
  Netdev mailing list <netdev@vger.kernel.org>
  Linux kernel mailing list <linux-kernel@vger.kernel.org>

Please note the 'Reporting and Diagnosing Problems' section at the end
+24 −24
Original line number Diff line number Diff line
@@ -73,7 +73,7 @@ S: Status, one of the following:
3C359 NETWORK DRIVER
P:	Mike Phillips
M:	mikep@linuxtr.net
L:	netdev@oss.sgi.com
L:	netdev@vger.kernel.org
L:	linux-tr@linuxtr.net
W:	http://www.linuxtr.net
S:	Maintained
@@ -81,13 +81,13 @@ S: Maintained
3C505 NETWORK DRIVER
P:	Philip Blundell
M:	philb@gnu.org
L:	netdev@oss.sgi.com
L:	netdev@vger.kernel.org
S:	Maintained

3CR990 NETWORK DRIVER
P:	David Dillow
M:	dave@thedillows.org
L:	netdev@oss.sgi.com
L:	netdev@vger.kernel.org
S:	Maintained

3W-XXXX ATA-RAID CONTROLLER DRIVER
@@ -130,7 +130,7 @@ S: Maintained
8169 10/100/1000 GIGABIT ETHERNET DRIVER
P:	Francois Romieu
M:	romieu@fr.zoreil.com
L:	netdev@oss.sgi.com
L:	netdev@vger.kernel.org
S:	Maintained

8250/16?50 (AND CLONE UARTS) SERIAL DRIVER
@@ -143,7 +143,7 @@ S: Maintained
8390 NETWORK DRIVERS [WD80x3/SMC-ELITE, SMC-ULTRA, NE2000, 3C503, etc.]
P:	Paul Gortmaker
M:	p_gortmaker@yahoo.com
L:	netdev@oss.sgi.com
L:	netdev@vger.kernel.org
S:	Maintained

A2232 SERIAL BOARD DRIVER
@@ -332,7 +332,7 @@ S: Maintained

ARPD SUPPORT
P:	Jonathan Layes
L:	netdev@oss.sgi.com
L:	netdev@vger.kernel.org
S:	Maintained

ASUS ACPI EXTRAS DRIVER
@@ -706,7 +706,7 @@ S: Orphaned

DIGI RIGHTSWITCH NETWORK DRIVER
P:	Rick Richardson
L:	netdev@oss.sgi.com
L:	netdev@vger.kernel.org
W:	http://www.digi.com
S:	Orphaned

@@ -812,7 +812,7 @@ S: Maintained
ETHEREXPRESS-16 NETWORK DRIVER
P:	Philip Blundell
M:	philb@gnu.org
L:	netdev@oss.sgi.com
L:	netdev@vger.kernel.org
S:	Maintained

ETHERNET BRIDGE
@@ -875,7 +875,7 @@ S: Maintained
FRAME RELAY DLCI/FRAD (Sangoma drivers too)
P:	Mike McLagan
M:	mike.mclagan@linux.org
L:	netdev@oss.sgi.com
L:	netdev@vger.kernel.org
S:	Maintained

FREEVXFS FILESYSTEM
@@ -1215,7 +1215,7 @@ S: Maintained
IPX NETWORK LAYER
P:	Arnaldo Carvalho de Melo
M:	acme@conectiva.com.br
L:	netdev@oss.sgi.com
L:	netdev@vger.kernel.org
S:	Maintained

IRDA SUBSYSTEM
@@ -1482,7 +1482,7 @@ MARVELL MV64340 ETHERNET DRIVER
P:	Manish Lachwani
M:	Manish_Lachwani@pmc-sierra.com
L:	linux-mips@linux-mips.org
L:	netdev@oss.sgi.com
L:	netdev@vger.kernel.org
S:	Supported

MATROX FRAMEBUFFER DRIVER
@@ -1592,13 +1592,13 @@ P: Andrew Morton
M:	akpm@osdl.org
P:	Jeff Garzik
M:	jgarzik@pobox.com
L:	netdev@oss.sgi.com
L:	netdev@vger.kernel.org
S:	Maintained

NETWORKING [GENERAL]
P:	Networking Team
M:	netdev@oss.sgi.com
L:	netdev@oss.sgi.com
M:	netdev@vger.kernel.org
L:	netdev@vger.kernel.org
S:	Maintained

NETWORKING [IPv4/IPv6]
@@ -1614,7 +1614,7 @@ P: Hideaki YOSHIFUJI
M:	yoshfuji@linux-ipv6.org
P:	Patrick McHardy
M:	kaber@coreworks.de
L:	netdev@oss.sgi.com
L:	netdev@vger.kernel.org
S:	Maintained

IPVS
@@ -1634,7 +1634,7 @@ NI5010 NETWORK DRIVER
P:	Jan-Pascal van Best and Andreas Mohr
M:	Jan-Pascal van Best <jvbest@qv3pluto.leidenuniv.nl>
M:	Andreas Mohr <100.30936@germany.net>
L:	netdev@oss.sgi.com
L:	netdev@vger.kernel.org
S:	Maintained

NINJA SCSI-3 / NINJA SCSI-32Bi (16bit/CardBus) PCMCIA SCSI HOST ADAPTER DRIVER
@@ -1676,7 +1676,7 @@ P: Peter De Shrijver
M:	p2@ace.ulyssis.student.kuleuven.ac.be
P:	Mike Phillips
M:	mikep@linuxtr.net 
L:	netdev@oss.sgi.com
L:	netdev@vger.kernel.org
L:	linux-tr@linuxtr.net
W:	http://www.linuxtr.net
S:	Maintained
@@ -1783,7 +1783,7 @@ S: Unmaintained
PCNET32 NETWORK DRIVER
P:	Thomas Bogendrfer
M:	tsbogend@alpha.franken.de
L:	netdev@oss.sgi.com
L:	netdev@vger.kernel.org
S:	Maintained

PHRAM MTD DRIVER
@@ -1795,7 +1795,7 @@ S: Maintained
POSIX CLOCKS and TIMERS
P:	George Anzinger
M:	george@mvista.com
L:	netdev@oss.sgi.com
L:	netdev@vger.kernel.org
S:	Supported

PNP SUPPORT
@@ -1830,7 +1830,7 @@ S: Supported
PRISM54 WIRELESS DRIVER
P:	Prism54 Development Team
M:	prism54-private@prism54.org
L:	netdev@oss.sgi.com
L:	netdev@vger.kernel.org
W:	http://prism54.org
S:	Maintained

@@ -2047,7 +2047,7 @@ SIS 900/7016 FAST ETHERNET DRIVER
P:	Daniele Venzano
M:	venza@brownhat.org
W:	http://www.brownhat.org/sis900.html
L:	netdev@oss.sgi.com
L:	netdev@vger.kernel.org
S:	Maintained

SIS FRAMEBUFFER DRIVER
@@ -2106,7 +2106,7 @@ S: Maintained
SONIC NETWORK DRIVER
P:	Thomas Bogendoerfer
M:	tsbogend@alpha.franken.de
L:	netdev@oss.sgi.com
L:	netdev@vger.kernel.org
S:	Maintained

SONY VAIO CONTROL DEVICE DRIVER
@@ -2163,7 +2163,7 @@ S: Supported
SPX NETWORK LAYER
P:	Jay Schulist
M:	jschlst@samba.org
L:	netdev@oss.sgi.com
L:	netdev@vger.kernel.org
S:	Supported

SRM (Alpha) environment access
@@ -2242,7 +2242,7 @@ S: Maintained
TOKEN-RING NETWORK DRIVER
P:	Mike Phillips
M:	mikep@linuxtr.net
L:	netdev@oss.sgi.com
L:	netdev@vger.kernel.org
L:	linux-tr@linuxtr.net
W:	http://www.linuxtr.net
S:	Maintained
Loading