Loading CREDITS +1 −5 Original line number Original line Diff line number Diff line Loading @@ -2475,13 +2475,9 @@ S: Potsdam, New York 13676 S: USA S: USA N: Dave Neuer N: Dave Neuer E: dneuer@innovation-charter.com E: dave.neuer@pobox.com E: mr_fred_smoothie@yahoo.com D: Helped implement support for Compaq's H31xx series iPAQs D: Helped implement support for Compaq's H31xx series iPAQs D: Other mostly minor tweaks & bugfixes D: Other mostly minor tweaks & bugfixes S: 325 E. Main St., Suite 3 S: Carnegie, PA 15105 S: USA N: Michael Neuffer N: Michael Neuffer E: mike@i-Connect.Net E: mike@i-Connect.Net Loading Documentation/DocBook/libata.tmpl +124 −32 Original line number Original line Diff line number Diff line Loading @@ -14,7 +14,7 @@ </authorgroup> </authorgroup> <copyright> <copyright> <year>2003</year> <year>2003-2005</year> <holder>Jeff Garzik</holder> <holder>Jeff Garzik</holder> </copyright> </copyright> Loading Loading @@ -44,30 +44,38 @@ <toc></toc> <toc></toc> <chapter id="libataThanks"> <chapter id="libataIntroduction"> <title>Thanks</title> <title>Introduction</title> <para> The bulk of the ATA knowledge comes thanks to long conversations with Andre Hedrick (www.linux-ide.org). </para> <para> <para> Thanks to Alan Cox for pointing out similarities libATA is a library used inside the Linux kernel to support ATA host between SATA and SCSI, and in general for motivation to hack on controllers and devices. libATA provides an ATA driver API, class libata. transports for ATA and ATAPI devices, and SCSI<->ATA translation for ATA devices according to the T10 SAT specification. </para> </para> <para> <para> libata's device detection This Guide documents the libATA driver API, library functions, library method, ata_pio_devchk, and in general all the early probing was internals, and a couple sample ATA low-level drivers. based on extensive study of Hale Landis's probe/reset code in his ATADRVR driver (www.ata-atapi.com). </para> </para> </chapter> </chapter> <chapter id="libataDriverApi"> <chapter id="libataDriverApi"> <title>libata Driver API</title> <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> <sect1> <title>struct ata_port_operations</title> <title>struct ata_port_operations</title> <sect2><title>Disable ATA port</title> <programlisting> <programlisting> void (*port_disable) (struct ata_port *); void (*port_disable) (struct ata_port *); </programlisting> </programlisting> Loading @@ -78,6 +86,9 @@ void (*port_disable) (struct ata_port *); unplug). unplug). </para> </para> </sect2> <sect2><title>Post-IDENTIFY device configuration</title> <programlisting> <programlisting> void (*dev_config) (struct ata_port *, struct ata_device *); void (*dev_config) (struct ata_port *, struct ata_device *); </programlisting> </programlisting> Loading @@ -88,6 +99,9 @@ void (*dev_config) (struct ata_port *, struct ata_device *); issue of SET FEATURES - XFER MODE, and prior to operation. issue of SET FEATURES - XFER MODE, and prior to operation. </para> </para> </sect2> <sect2><title>Set PIO/DMA mode</title> <programlisting> <programlisting> void (*set_piomode) (struct ata_port *, struct ata_device *); void (*set_piomode) (struct ata_port *, struct ata_device *); void (*set_dmamode) (struct ata_port *, struct ata_device *); void (*set_dmamode) (struct ata_port *, struct ata_device *); Loading @@ -108,6 +122,9 @@ void (*post_set_mode) (struct ata_port *ap); ->set_dma_mode() is only called if DMA is possible. ->set_dma_mode() is only called if DMA is possible. </para> </para> </sect2> <sect2><title>Taskfile read/write</title> <programlisting> <programlisting> void (*tf_load) (struct ata_port *ap, struct ata_taskfile *tf); void (*tf_load) (struct ata_port *ap, struct ata_taskfile *tf); void (*tf_read) (struct ata_port *ap, struct ata_taskfile *tf); void (*tf_read) (struct ata_port *ap, struct ata_taskfile *tf); Loading @@ -120,6 +137,9 @@ void (*tf_read) (struct ata_port *ap, struct ata_taskfile *tf); taskfile register values. taskfile register values. </para> </para> </sect2> <sect2><title>ATA command execute</title> <programlisting> <programlisting> void (*exec_command)(struct ata_port *ap, struct ata_taskfile *tf); void (*exec_command)(struct ata_port *ap, struct ata_taskfile *tf); </programlisting> </programlisting> Loading @@ -129,17 +149,37 @@ void (*exec_command)(struct ata_port *ap, struct ata_taskfile *tf); ->tf_load(), to be initiated in hardware. ->tf_load(), to be initiated in hardware. </para> </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> <programlisting> u8 (*check_status)(struct ata_port *ap); 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> </programlisting> <para> <para> Reads the Status ATA shadow register from hardware. On some Reads the Status/AltStatus/Error ATA shadow register from hardware, this has the side effect of clearing the interrupt hardware. On some hardware, reading the Status register has condition. the side effect of clearing the interrupt condition. </para> </para> </sect2> <sect2><title>Select ATA device on bus</title> <programlisting> <programlisting> void (*dev_select)(struct ata_port *ap, unsigned int device); void (*dev_select)(struct ata_port *ap, unsigned int device); </programlisting> </programlisting> Loading @@ -147,9 +187,13 @@ void (*dev_select)(struct ata_port *ap, unsigned int device); <para> <para> Issues the low-level hardware command(s) that causes one of N Issues the low-level hardware command(s) that causes one of N hardware devices to be considered 'selected' (active and 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> </para> </sect2> <sect2><title>Reset ATA bus</title> <programlisting> <programlisting> void (*phy_reset) (struct ata_port *ap); void (*phy_reset) (struct ata_port *ap); </programlisting> </programlisting> Loading @@ -162,17 +206,31 @@ void (*phy_reset) (struct ata_port *ap); functions ata_bus_reset() or sata_phy_reset() for this hook. functions ata_bus_reset() or sata_phy_reset() for this hook. </para> </para> </sect2> <sect2><title>Control PCI IDE BMDMA engine</title> <programlisting> <programlisting> void (*bmdma_setup) (struct ata_queued_cmd *qc); void (*bmdma_setup) (struct ata_queued_cmd *qc); void (*bmdma_start) (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> </programlisting> <para> <para> When setting up an IDE BMDMA transaction, these hooks arm When setting up an IDE BMDMA transaction, these hooks arm (->bmdma_setup) and fire (->bmdma_start) the hardware's DMA (->bmdma_setup), fire (->bmdma_start), and halt (->bmdma_stop) engine. the hardware's DMA engine. ->bmdma_status is used to read the standard PCI IDE DMA Status register. </para> </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> <programlisting> void (*qc_prep) (struct ata_queued_cmd *qc); void (*qc_prep) (struct ata_queued_cmd *qc); int (*qc_issue) (struct ata_queued_cmd *qc); int (*qc_issue) (struct ata_queued_cmd *qc); Loading @@ -190,20 +248,26 @@ int (*qc_issue) (struct ata_queued_cmd *qc); ->qc_issue is used to make a command active, once the hardware ->qc_issue is used to make a command active, once the hardware and S/G tables have been prepared. IDE BMDMA drivers use the and S/G tables have been prepared. IDE BMDMA drivers use the helper function ata_qc_issue_prot() for taskfile protocol-based helper function ata_qc_issue_prot() for taskfile protocol-based dispatch. More advanced drivers roll their own ->qc_issue dispatch. More advanced drivers implement their own ->qc_issue. implementation, using this as the "issue new ATA command to hardware" hook. </para> </para> </sect2> <sect2><title>Timeout (error) handling</title> <programlisting> <programlisting> void (*eng_timeout) (struct ata_port *ap); void (*eng_timeout) (struct ata_port *ap); </programlisting> </programlisting> <para> <para> This is a high level error handling function, called from the 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> </para> </sect2> <sect2><title>Hardware interrupt handling</title> <programlisting> <programlisting> irqreturn_t (*irq_handler)(int, void *, struct pt_regs *); irqreturn_t (*irq_handler)(int, void *, struct pt_regs *); void (*irq_clear) (struct ata_port *); void (*irq_clear) (struct ata_port *); Loading @@ -216,6 +280,9 @@ void (*irq_clear) (struct ata_port *); is quiet. is quiet. </para> </para> </sect2> <sect2><title>SATA phy read/write</title> <programlisting> <programlisting> u32 (*scr_read) (struct ata_port *ap, unsigned int sc_reg); u32 (*scr_read) (struct ata_port *ap, unsigned int sc_reg); void (*scr_write) (struct ata_port *ap, unsigned int sc_reg, void (*scr_write) (struct ata_port *ap, unsigned int sc_reg, Loading @@ -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. if ->phy_reset hook called the sata_phy_reset() helper function. </para> </para> </sect2> <sect2><title>Init and shutdown</title> <programlisting> <programlisting> int (*port_start) (struct ata_port *ap); int (*port_start) (struct ata_port *ap); void (*port_stop) (struct ata_port *ap); void (*port_stop) (struct ata_port *ap); Loading @@ -240,15 +310,17 @@ void (*host_stop) (struct ata_host_set *host_set); tasks. tasks. </para> </para> <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 ->port_stop() is called after ->host_stop(). It's sole function is to release DMA/memory resources, now that they are no longer is to release DMA/memory resources, now that they are no longer actively being used. actively being used. </para> </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> </sect1> </chapter> </chapter> Loading Loading @@ -279,4 +351,24 @@ void (*host_stop) (struct ata_host_set *host_set); !Idrivers/scsi/sata_sil.c !Idrivers/scsi/sata_sil.c </chapter> </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> </book> Documentation/SubmittingPatches +7 −1 Original line number Original line Diff line number Diff line Loading @@ -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 pass it on as a open-source patch. The rules are pretty simple: if you can certify the below: 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: By making a contribution to this project, I certify that: Loading @@ -291,6 +291,12 @@ can certify the below: person who certified (a), (b) or (c) and I have not modified person who certified (a), (b) or (c) and I have not modified it. 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 then you just add a line saying Signed-off-by: Random J Developer <random@developer.org> Signed-off-by: Random J Developer <random@developer.org> Loading Documentation/networking/vortex.txt +1 −1 Original line number Original line Diff line number Diff line Loading @@ -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: Please report problems to one or more of: Andrew Morton <andrewm@uow.edu.au> 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> Linux kernel mailing list <linux-kernel@vger.kernel.org> Please note the 'Reporting and Diagnosing Problems' section at the end Please note the 'Reporting and Diagnosing Problems' section at the end Loading MAINTAINERS +24 −24 Original line number Original line Diff line number Diff line Loading @@ -73,7 +73,7 @@ S: Status, one of the following: 3C359 NETWORK DRIVER 3C359 NETWORK DRIVER P: Mike Phillips P: Mike Phillips M: mikep@linuxtr.net M: mikep@linuxtr.net L: netdev@oss.sgi.com L: netdev@vger.kernel.org L: linux-tr@linuxtr.net L: linux-tr@linuxtr.net W: http://www.linuxtr.net W: http://www.linuxtr.net S: Maintained S: Maintained Loading @@ -81,13 +81,13 @@ S: Maintained 3C505 NETWORK DRIVER 3C505 NETWORK DRIVER P: Philip Blundell P: Philip Blundell M: philb@gnu.org M: philb@gnu.org L: netdev@oss.sgi.com L: netdev@vger.kernel.org S: Maintained S: Maintained 3CR990 NETWORK DRIVER 3CR990 NETWORK DRIVER P: David Dillow P: David Dillow M: dave@thedillows.org M: dave@thedillows.org L: netdev@oss.sgi.com L: netdev@vger.kernel.org S: Maintained S: Maintained 3W-XXXX ATA-RAID CONTROLLER DRIVER 3W-XXXX ATA-RAID CONTROLLER DRIVER Loading Loading @@ -130,7 +130,7 @@ S: Maintained 8169 10/100/1000 GIGABIT ETHERNET DRIVER 8169 10/100/1000 GIGABIT ETHERNET DRIVER P: Francois Romieu P: Francois Romieu M: romieu@fr.zoreil.com M: romieu@fr.zoreil.com L: netdev@oss.sgi.com L: netdev@vger.kernel.org S: Maintained S: Maintained 8250/16?50 (AND CLONE UARTS) SERIAL DRIVER 8250/16?50 (AND CLONE UARTS) SERIAL DRIVER Loading @@ -143,7 +143,7 @@ S: Maintained 8390 NETWORK DRIVERS [WD80x3/SMC-ELITE, SMC-ULTRA, NE2000, 3C503, etc.] 8390 NETWORK DRIVERS [WD80x3/SMC-ELITE, SMC-ULTRA, NE2000, 3C503, etc.] P: Paul Gortmaker P: Paul Gortmaker M: p_gortmaker@yahoo.com M: p_gortmaker@yahoo.com L: netdev@oss.sgi.com L: netdev@vger.kernel.org S: Maintained S: Maintained A2232 SERIAL BOARD DRIVER A2232 SERIAL BOARD DRIVER Loading Loading @@ -332,7 +332,7 @@ S: Maintained ARPD SUPPORT ARPD SUPPORT P: Jonathan Layes P: Jonathan Layes L: netdev@oss.sgi.com L: netdev@vger.kernel.org S: Maintained S: Maintained ASUS ACPI EXTRAS DRIVER ASUS ACPI EXTRAS DRIVER Loading Loading @@ -706,7 +706,7 @@ S: Orphaned DIGI RIGHTSWITCH NETWORK DRIVER DIGI RIGHTSWITCH NETWORK DRIVER P: Rick Richardson P: Rick Richardson L: netdev@oss.sgi.com L: netdev@vger.kernel.org W: http://www.digi.com W: http://www.digi.com S: Orphaned S: Orphaned Loading Loading @@ -812,7 +812,7 @@ S: Maintained ETHEREXPRESS-16 NETWORK DRIVER ETHEREXPRESS-16 NETWORK DRIVER P: Philip Blundell P: Philip Blundell M: philb@gnu.org M: philb@gnu.org L: netdev@oss.sgi.com L: netdev@vger.kernel.org S: Maintained S: Maintained ETHERNET BRIDGE ETHERNET BRIDGE Loading Loading @@ -875,7 +875,7 @@ S: Maintained FRAME RELAY DLCI/FRAD (Sangoma drivers too) FRAME RELAY DLCI/FRAD (Sangoma drivers too) P: Mike McLagan P: Mike McLagan M: mike.mclagan@linux.org M: mike.mclagan@linux.org L: netdev@oss.sgi.com L: netdev@vger.kernel.org S: Maintained S: Maintained FREEVXFS FILESYSTEM FREEVXFS FILESYSTEM Loading Loading @@ -1215,7 +1215,7 @@ S: Maintained IPX NETWORK LAYER IPX NETWORK LAYER P: Arnaldo Carvalho de Melo P: Arnaldo Carvalho de Melo M: acme@conectiva.com.br M: acme@conectiva.com.br L: netdev@oss.sgi.com L: netdev@vger.kernel.org S: Maintained S: Maintained IRDA SUBSYSTEM IRDA SUBSYSTEM Loading Loading @@ -1482,7 +1482,7 @@ MARVELL MV64340 ETHERNET DRIVER P: Manish Lachwani P: Manish Lachwani M: Manish_Lachwani@pmc-sierra.com M: Manish_Lachwani@pmc-sierra.com L: linux-mips@linux-mips.org L: linux-mips@linux-mips.org L: netdev@oss.sgi.com L: netdev@vger.kernel.org S: Supported S: Supported MATROX FRAMEBUFFER DRIVER MATROX FRAMEBUFFER DRIVER Loading Loading @@ -1592,13 +1592,13 @@ P: Andrew Morton M: akpm@osdl.org M: akpm@osdl.org P: Jeff Garzik P: Jeff Garzik M: jgarzik@pobox.com M: jgarzik@pobox.com L: netdev@oss.sgi.com L: netdev@vger.kernel.org S: Maintained S: Maintained NETWORKING [GENERAL] NETWORKING [GENERAL] P: Networking Team P: Networking Team M: netdev@oss.sgi.com M: netdev@vger.kernel.org L: netdev@oss.sgi.com L: netdev@vger.kernel.org S: Maintained S: Maintained NETWORKING [IPv4/IPv6] NETWORKING [IPv4/IPv6] Loading @@ -1614,7 +1614,7 @@ P: Hideaki YOSHIFUJI M: yoshfuji@linux-ipv6.org M: yoshfuji@linux-ipv6.org P: Patrick McHardy P: Patrick McHardy M: kaber@coreworks.de M: kaber@coreworks.de L: netdev@oss.sgi.com L: netdev@vger.kernel.org S: Maintained S: Maintained IPVS IPVS Loading @@ -1634,7 +1634,7 @@ NI5010 NETWORK DRIVER P: Jan-Pascal van Best and Andreas Mohr P: Jan-Pascal van Best and Andreas Mohr M: Jan-Pascal van Best <jvbest@qv3pluto.leidenuniv.nl> M: Jan-Pascal van Best <jvbest@qv3pluto.leidenuniv.nl> M: Andreas Mohr <100.30936@germany.net> M: Andreas Mohr <100.30936@germany.net> L: netdev@oss.sgi.com L: netdev@vger.kernel.org S: Maintained S: Maintained NINJA SCSI-3 / NINJA SCSI-32Bi (16bit/CardBus) PCMCIA SCSI HOST ADAPTER DRIVER NINJA SCSI-3 / NINJA SCSI-32Bi (16bit/CardBus) PCMCIA SCSI HOST ADAPTER DRIVER Loading Loading @@ -1676,7 +1676,7 @@ P: Peter De Shrijver M: p2@ace.ulyssis.student.kuleuven.ac.be M: p2@ace.ulyssis.student.kuleuven.ac.be P: Mike Phillips P: Mike Phillips M: mikep@linuxtr.net M: mikep@linuxtr.net L: netdev@oss.sgi.com L: netdev@vger.kernel.org L: linux-tr@linuxtr.net L: linux-tr@linuxtr.net W: http://www.linuxtr.net W: http://www.linuxtr.net S: Maintained S: Maintained Loading Loading @@ -1783,7 +1783,7 @@ S: Unmaintained PCNET32 NETWORK DRIVER PCNET32 NETWORK DRIVER P: Thomas Bogendrfer P: Thomas Bogendrfer M: tsbogend@alpha.franken.de M: tsbogend@alpha.franken.de L: netdev@oss.sgi.com L: netdev@vger.kernel.org S: Maintained S: Maintained PHRAM MTD DRIVER PHRAM MTD DRIVER Loading @@ -1795,7 +1795,7 @@ S: Maintained POSIX CLOCKS and TIMERS POSIX CLOCKS and TIMERS P: George Anzinger P: George Anzinger M: george@mvista.com M: george@mvista.com L: netdev@oss.sgi.com L: netdev@vger.kernel.org S: Supported S: Supported PNP SUPPORT PNP SUPPORT Loading Loading @@ -1830,7 +1830,7 @@ S: Supported PRISM54 WIRELESS DRIVER PRISM54 WIRELESS DRIVER P: Prism54 Development Team P: Prism54 Development Team M: prism54-private@prism54.org M: prism54-private@prism54.org L: netdev@oss.sgi.com L: netdev@vger.kernel.org W: http://prism54.org W: http://prism54.org S: Maintained S: Maintained Loading Loading @@ -2047,7 +2047,7 @@ SIS 900/7016 FAST ETHERNET DRIVER P: Daniele Venzano P: Daniele Venzano M: venza@brownhat.org M: venza@brownhat.org W: http://www.brownhat.org/sis900.html W: http://www.brownhat.org/sis900.html L: netdev@oss.sgi.com L: netdev@vger.kernel.org S: Maintained S: Maintained SIS FRAMEBUFFER DRIVER SIS FRAMEBUFFER DRIVER Loading Loading @@ -2106,7 +2106,7 @@ S: Maintained SONIC NETWORK DRIVER SONIC NETWORK DRIVER P: Thomas Bogendoerfer P: Thomas Bogendoerfer M: tsbogend@alpha.franken.de M: tsbogend@alpha.franken.de L: netdev@oss.sgi.com L: netdev@vger.kernel.org S: Maintained S: Maintained SONY VAIO CONTROL DEVICE DRIVER SONY VAIO CONTROL DEVICE DRIVER Loading Loading @@ -2163,7 +2163,7 @@ S: Supported SPX NETWORK LAYER SPX NETWORK LAYER P: Jay Schulist P: Jay Schulist M: jschlst@samba.org M: jschlst@samba.org L: netdev@oss.sgi.com L: netdev@vger.kernel.org S: Supported S: Supported SRM (Alpha) environment access SRM (Alpha) environment access Loading Loading @@ -2242,7 +2242,7 @@ S: Maintained TOKEN-RING NETWORK DRIVER TOKEN-RING NETWORK DRIVER P: Mike Phillips P: Mike Phillips M: mikep@linuxtr.net M: mikep@linuxtr.net L: netdev@oss.sgi.com L: netdev@vger.kernel.org L: linux-tr@linuxtr.net L: linux-tr@linuxtr.net W: http://www.linuxtr.net W: http://www.linuxtr.net S: Maintained S: Maintained Loading Loading
CREDITS +1 −5 Original line number Original line Diff line number Diff line Loading @@ -2475,13 +2475,9 @@ S: Potsdam, New York 13676 S: USA S: USA N: Dave Neuer N: Dave Neuer E: dneuer@innovation-charter.com E: dave.neuer@pobox.com E: mr_fred_smoothie@yahoo.com D: Helped implement support for Compaq's H31xx series iPAQs D: Helped implement support for Compaq's H31xx series iPAQs D: Other mostly minor tweaks & bugfixes D: Other mostly minor tweaks & bugfixes S: 325 E. Main St., Suite 3 S: Carnegie, PA 15105 S: USA N: Michael Neuffer N: Michael Neuffer E: mike@i-Connect.Net E: mike@i-Connect.Net Loading
Documentation/DocBook/libata.tmpl +124 −32 Original line number Original line Diff line number Diff line Loading @@ -14,7 +14,7 @@ </authorgroup> </authorgroup> <copyright> <copyright> <year>2003</year> <year>2003-2005</year> <holder>Jeff Garzik</holder> <holder>Jeff Garzik</holder> </copyright> </copyright> Loading Loading @@ -44,30 +44,38 @@ <toc></toc> <toc></toc> <chapter id="libataThanks"> <chapter id="libataIntroduction"> <title>Thanks</title> <title>Introduction</title> <para> The bulk of the ATA knowledge comes thanks to long conversations with Andre Hedrick (www.linux-ide.org). </para> <para> <para> Thanks to Alan Cox for pointing out similarities libATA is a library used inside the Linux kernel to support ATA host between SATA and SCSI, and in general for motivation to hack on controllers and devices. libATA provides an ATA driver API, class libata. transports for ATA and ATAPI devices, and SCSI<->ATA translation for ATA devices according to the T10 SAT specification. </para> </para> <para> <para> libata's device detection This Guide documents the libATA driver API, library functions, library method, ata_pio_devchk, and in general all the early probing was internals, and a couple sample ATA low-level drivers. based on extensive study of Hale Landis's probe/reset code in his ATADRVR driver (www.ata-atapi.com). </para> </para> </chapter> </chapter> <chapter id="libataDriverApi"> <chapter id="libataDriverApi"> <title>libata Driver API</title> <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> <sect1> <title>struct ata_port_operations</title> <title>struct ata_port_operations</title> <sect2><title>Disable ATA port</title> <programlisting> <programlisting> void (*port_disable) (struct ata_port *); void (*port_disable) (struct ata_port *); </programlisting> </programlisting> Loading @@ -78,6 +86,9 @@ void (*port_disable) (struct ata_port *); unplug). unplug). </para> </para> </sect2> <sect2><title>Post-IDENTIFY device configuration</title> <programlisting> <programlisting> void (*dev_config) (struct ata_port *, struct ata_device *); void (*dev_config) (struct ata_port *, struct ata_device *); </programlisting> </programlisting> Loading @@ -88,6 +99,9 @@ void (*dev_config) (struct ata_port *, struct ata_device *); issue of SET FEATURES - XFER MODE, and prior to operation. issue of SET FEATURES - XFER MODE, and prior to operation. </para> </para> </sect2> <sect2><title>Set PIO/DMA mode</title> <programlisting> <programlisting> void (*set_piomode) (struct ata_port *, struct ata_device *); void (*set_piomode) (struct ata_port *, struct ata_device *); void (*set_dmamode) (struct ata_port *, struct ata_device *); void (*set_dmamode) (struct ata_port *, struct ata_device *); Loading @@ -108,6 +122,9 @@ void (*post_set_mode) (struct ata_port *ap); ->set_dma_mode() is only called if DMA is possible. ->set_dma_mode() is only called if DMA is possible. </para> </para> </sect2> <sect2><title>Taskfile read/write</title> <programlisting> <programlisting> void (*tf_load) (struct ata_port *ap, struct ata_taskfile *tf); void (*tf_load) (struct ata_port *ap, struct ata_taskfile *tf); void (*tf_read) (struct ata_port *ap, struct ata_taskfile *tf); void (*tf_read) (struct ata_port *ap, struct ata_taskfile *tf); Loading @@ -120,6 +137,9 @@ void (*tf_read) (struct ata_port *ap, struct ata_taskfile *tf); taskfile register values. taskfile register values. </para> </para> </sect2> <sect2><title>ATA command execute</title> <programlisting> <programlisting> void (*exec_command)(struct ata_port *ap, struct ata_taskfile *tf); void (*exec_command)(struct ata_port *ap, struct ata_taskfile *tf); </programlisting> </programlisting> Loading @@ -129,17 +149,37 @@ void (*exec_command)(struct ata_port *ap, struct ata_taskfile *tf); ->tf_load(), to be initiated in hardware. ->tf_load(), to be initiated in hardware. </para> </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> <programlisting> u8 (*check_status)(struct ata_port *ap); 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> </programlisting> <para> <para> Reads the Status ATA shadow register from hardware. On some Reads the Status/AltStatus/Error ATA shadow register from hardware, this has the side effect of clearing the interrupt hardware. On some hardware, reading the Status register has condition. the side effect of clearing the interrupt condition. </para> </para> </sect2> <sect2><title>Select ATA device on bus</title> <programlisting> <programlisting> void (*dev_select)(struct ata_port *ap, unsigned int device); void (*dev_select)(struct ata_port *ap, unsigned int device); </programlisting> </programlisting> Loading @@ -147,9 +187,13 @@ void (*dev_select)(struct ata_port *ap, unsigned int device); <para> <para> Issues the low-level hardware command(s) that causes one of N Issues the low-level hardware command(s) that causes one of N hardware devices to be considered 'selected' (active and 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> </para> </sect2> <sect2><title>Reset ATA bus</title> <programlisting> <programlisting> void (*phy_reset) (struct ata_port *ap); void (*phy_reset) (struct ata_port *ap); </programlisting> </programlisting> Loading @@ -162,17 +206,31 @@ void (*phy_reset) (struct ata_port *ap); functions ata_bus_reset() or sata_phy_reset() for this hook. functions ata_bus_reset() or sata_phy_reset() for this hook. </para> </para> </sect2> <sect2><title>Control PCI IDE BMDMA engine</title> <programlisting> <programlisting> void (*bmdma_setup) (struct ata_queued_cmd *qc); void (*bmdma_setup) (struct ata_queued_cmd *qc); void (*bmdma_start) (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> </programlisting> <para> <para> When setting up an IDE BMDMA transaction, these hooks arm When setting up an IDE BMDMA transaction, these hooks arm (->bmdma_setup) and fire (->bmdma_start) the hardware's DMA (->bmdma_setup), fire (->bmdma_start), and halt (->bmdma_stop) engine. the hardware's DMA engine. ->bmdma_status is used to read the standard PCI IDE DMA Status register. </para> </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> <programlisting> void (*qc_prep) (struct ata_queued_cmd *qc); void (*qc_prep) (struct ata_queued_cmd *qc); int (*qc_issue) (struct ata_queued_cmd *qc); int (*qc_issue) (struct ata_queued_cmd *qc); Loading @@ -190,20 +248,26 @@ int (*qc_issue) (struct ata_queued_cmd *qc); ->qc_issue is used to make a command active, once the hardware ->qc_issue is used to make a command active, once the hardware and S/G tables have been prepared. IDE BMDMA drivers use the and S/G tables have been prepared. IDE BMDMA drivers use the helper function ata_qc_issue_prot() for taskfile protocol-based helper function ata_qc_issue_prot() for taskfile protocol-based dispatch. More advanced drivers roll their own ->qc_issue dispatch. More advanced drivers implement their own ->qc_issue. implementation, using this as the "issue new ATA command to hardware" hook. </para> </para> </sect2> <sect2><title>Timeout (error) handling</title> <programlisting> <programlisting> void (*eng_timeout) (struct ata_port *ap); void (*eng_timeout) (struct ata_port *ap); </programlisting> </programlisting> <para> <para> This is a high level error handling function, called from the 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> </para> </sect2> <sect2><title>Hardware interrupt handling</title> <programlisting> <programlisting> irqreturn_t (*irq_handler)(int, void *, struct pt_regs *); irqreturn_t (*irq_handler)(int, void *, struct pt_regs *); void (*irq_clear) (struct ata_port *); void (*irq_clear) (struct ata_port *); Loading @@ -216,6 +280,9 @@ void (*irq_clear) (struct ata_port *); is quiet. is quiet. </para> </para> </sect2> <sect2><title>SATA phy read/write</title> <programlisting> <programlisting> u32 (*scr_read) (struct ata_port *ap, unsigned int sc_reg); u32 (*scr_read) (struct ata_port *ap, unsigned int sc_reg); void (*scr_write) (struct ata_port *ap, unsigned int sc_reg, void (*scr_write) (struct ata_port *ap, unsigned int sc_reg, Loading @@ -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. if ->phy_reset hook called the sata_phy_reset() helper function. </para> </para> </sect2> <sect2><title>Init and shutdown</title> <programlisting> <programlisting> int (*port_start) (struct ata_port *ap); int (*port_start) (struct ata_port *ap); void (*port_stop) (struct ata_port *ap); void (*port_stop) (struct ata_port *ap); Loading @@ -240,15 +310,17 @@ void (*host_stop) (struct ata_host_set *host_set); tasks. tasks. </para> </para> <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 ->port_stop() is called after ->host_stop(). It's sole function is to release DMA/memory resources, now that they are no longer is to release DMA/memory resources, now that they are no longer actively being used. actively being used. </para> </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> </sect1> </chapter> </chapter> Loading Loading @@ -279,4 +351,24 @@ void (*host_stop) (struct ata_host_set *host_set); !Idrivers/scsi/sata_sil.c !Idrivers/scsi/sata_sil.c </chapter> </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> </book>
Documentation/SubmittingPatches +7 −1 Original line number Original line Diff line number Diff line Loading @@ -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 pass it on as a open-source patch. The rules are pretty simple: if you can certify the below: 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: By making a contribution to this project, I certify that: Loading @@ -291,6 +291,12 @@ can certify the below: person who certified (a), (b) or (c) and I have not modified person who certified (a), (b) or (c) and I have not modified it. 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 then you just add a line saying Signed-off-by: Random J Developer <random@developer.org> Signed-off-by: Random J Developer <random@developer.org> Loading
Documentation/networking/vortex.txt +1 −1 Original line number Original line Diff line number Diff line Loading @@ -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: Please report problems to one or more of: Andrew Morton <andrewm@uow.edu.au> 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> Linux kernel mailing list <linux-kernel@vger.kernel.org> Please note the 'Reporting and Diagnosing Problems' section at the end Please note the 'Reporting and Diagnosing Problems' section at the end Loading
MAINTAINERS +24 −24 Original line number Original line Diff line number Diff line Loading @@ -73,7 +73,7 @@ S: Status, one of the following: 3C359 NETWORK DRIVER 3C359 NETWORK DRIVER P: Mike Phillips P: Mike Phillips M: mikep@linuxtr.net M: mikep@linuxtr.net L: netdev@oss.sgi.com L: netdev@vger.kernel.org L: linux-tr@linuxtr.net L: linux-tr@linuxtr.net W: http://www.linuxtr.net W: http://www.linuxtr.net S: Maintained S: Maintained Loading @@ -81,13 +81,13 @@ S: Maintained 3C505 NETWORK DRIVER 3C505 NETWORK DRIVER P: Philip Blundell P: Philip Blundell M: philb@gnu.org M: philb@gnu.org L: netdev@oss.sgi.com L: netdev@vger.kernel.org S: Maintained S: Maintained 3CR990 NETWORK DRIVER 3CR990 NETWORK DRIVER P: David Dillow P: David Dillow M: dave@thedillows.org M: dave@thedillows.org L: netdev@oss.sgi.com L: netdev@vger.kernel.org S: Maintained S: Maintained 3W-XXXX ATA-RAID CONTROLLER DRIVER 3W-XXXX ATA-RAID CONTROLLER DRIVER Loading Loading @@ -130,7 +130,7 @@ S: Maintained 8169 10/100/1000 GIGABIT ETHERNET DRIVER 8169 10/100/1000 GIGABIT ETHERNET DRIVER P: Francois Romieu P: Francois Romieu M: romieu@fr.zoreil.com M: romieu@fr.zoreil.com L: netdev@oss.sgi.com L: netdev@vger.kernel.org S: Maintained S: Maintained 8250/16?50 (AND CLONE UARTS) SERIAL DRIVER 8250/16?50 (AND CLONE UARTS) SERIAL DRIVER Loading @@ -143,7 +143,7 @@ S: Maintained 8390 NETWORK DRIVERS [WD80x3/SMC-ELITE, SMC-ULTRA, NE2000, 3C503, etc.] 8390 NETWORK DRIVERS [WD80x3/SMC-ELITE, SMC-ULTRA, NE2000, 3C503, etc.] P: Paul Gortmaker P: Paul Gortmaker M: p_gortmaker@yahoo.com M: p_gortmaker@yahoo.com L: netdev@oss.sgi.com L: netdev@vger.kernel.org S: Maintained S: Maintained A2232 SERIAL BOARD DRIVER A2232 SERIAL BOARD DRIVER Loading Loading @@ -332,7 +332,7 @@ S: Maintained ARPD SUPPORT ARPD SUPPORT P: Jonathan Layes P: Jonathan Layes L: netdev@oss.sgi.com L: netdev@vger.kernel.org S: Maintained S: Maintained ASUS ACPI EXTRAS DRIVER ASUS ACPI EXTRAS DRIVER Loading Loading @@ -706,7 +706,7 @@ S: Orphaned DIGI RIGHTSWITCH NETWORK DRIVER DIGI RIGHTSWITCH NETWORK DRIVER P: Rick Richardson P: Rick Richardson L: netdev@oss.sgi.com L: netdev@vger.kernel.org W: http://www.digi.com W: http://www.digi.com S: Orphaned S: Orphaned Loading Loading @@ -812,7 +812,7 @@ S: Maintained ETHEREXPRESS-16 NETWORK DRIVER ETHEREXPRESS-16 NETWORK DRIVER P: Philip Blundell P: Philip Blundell M: philb@gnu.org M: philb@gnu.org L: netdev@oss.sgi.com L: netdev@vger.kernel.org S: Maintained S: Maintained ETHERNET BRIDGE ETHERNET BRIDGE Loading Loading @@ -875,7 +875,7 @@ S: Maintained FRAME RELAY DLCI/FRAD (Sangoma drivers too) FRAME RELAY DLCI/FRAD (Sangoma drivers too) P: Mike McLagan P: Mike McLagan M: mike.mclagan@linux.org M: mike.mclagan@linux.org L: netdev@oss.sgi.com L: netdev@vger.kernel.org S: Maintained S: Maintained FREEVXFS FILESYSTEM FREEVXFS FILESYSTEM Loading Loading @@ -1215,7 +1215,7 @@ S: Maintained IPX NETWORK LAYER IPX NETWORK LAYER P: Arnaldo Carvalho de Melo P: Arnaldo Carvalho de Melo M: acme@conectiva.com.br M: acme@conectiva.com.br L: netdev@oss.sgi.com L: netdev@vger.kernel.org S: Maintained S: Maintained IRDA SUBSYSTEM IRDA SUBSYSTEM Loading Loading @@ -1482,7 +1482,7 @@ MARVELL MV64340 ETHERNET DRIVER P: Manish Lachwani P: Manish Lachwani M: Manish_Lachwani@pmc-sierra.com M: Manish_Lachwani@pmc-sierra.com L: linux-mips@linux-mips.org L: linux-mips@linux-mips.org L: netdev@oss.sgi.com L: netdev@vger.kernel.org S: Supported S: Supported MATROX FRAMEBUFFER DRIVER MATROX FRAMEBUFFER DRIVER Loading Loading @@ -1592,13 +1592,13 @@ P: Andrew Morton M: akpm@osdl.org M: akpm@osdl.org P: Jeff Garzik P: Jeff Garzik M: jgarzik@pobox.com M: jgarzik@pobox.com L: netdev@oss.sgi.com L: netdev@vger.kernel.org S: Maintained S: Maintained NETWORKING [GENERAL] NETWORKING [GENERAL] P: Networking Team P: Networking Team M: netdev@oss.sgi.com M: netdev@vger.kernel.org L: netdev@oss.sgi.com L: netdev@vger.kernel.org S: Maintained S: Maintained NETWORKING [IPv4/IPv6] NETWORKING [IPv4/IPv6] Loading @@ -1614,7 +1614,7 @@ P: Hideaki YOSHIFUJI M: yoshfuji@linux-ipv6.org M: yoshfuji@linux-ipv6.org P: Patrick McHardy P: Patrick McHardy M: kaber@coreworks.de M: kaber@coreworks.de L: netdev@oss.sgi.com L: netdev@vger.kernel.org S: Maintained S: Maintained IPVS IPVS Loading @@ -1634,7 +1634,7 @@ NI5010 NETWORK DRIVER P: Jan-Pascal van Best and Andreas Mohr P: Jan-Pascal van Best and Andreas Mohr M: Jan-Pascal van Best <jvbest@qv3pluto.leidenuniv.nl> M: Jan-Pascal van Best <jvbest@qv3pluto.leidenuniv.nl> M: Andreas Mohr <100.30936@germany.net> M: Andreas Mohr <100.30936@germany.net> L: netdev@oss.sgi.com L: netdev@vger.kernel.org S: Maintained S: Maintained NINJA SCSI-3 / NINJA SCSI-32Bi (16bit/CardBus) PCMCIA SCSI HOST ADAPTER DRIVER NINJA SCSI-3 / NINJA SCSI-32Bi (16bit/CardBus) PCMCIA SCSI HOST ADAPTER DRIVER Loading Loading @@ -1676,7 +1676,7 @@ P: Peter De Shrijver M: p2@ace.ulyssis.student.kuleuven.ac.be M: p2@ace.ulyssis.student.kuleuven.ac.be P: Mike Phillips P: Mike Phillips M: mikep@linuxtr.net M: mikep@linuxtr.net L: netdev@oss.sgi.com L: netdev@vger.kernel.org L: linux-tr@linuxtr.net L: linux-tr@linuxtr.net W: http://www.linuxtr.net W: http://www.linuxtr.net S: Maintained S: Maintained Loading Loading @@ -1783,7 +1783,7 @@ S: Unmaintained PCNET32 NETWORK DRIVER PCNET32 NETWORK DRIVER P: Thomas Bogendrfer P: Thomas Bogendrfer M: tsbogend@alpha.franken.de M: tsbogend@alpha.franken.de L: netdev@oss.sgi.com L: netdev@vger.kernel.org S: Maintained S: Maintained PHRAM MTD DRIVER PHRAM MTD DRIVER Loading @@ -1795,7 +1795,7 @@ S: Maintained POSIX CLOCKS and TIMERS POSIX CLOCKS and TIMERS P: George Anzinger P: George Anzinger M: george@mvista.com M: george@mvista.com L: netdev@oss.sgi.com L: netdev@vger.kernel.org S: Supported S: Supported PNP SUPPORT PNP SUPPORT Loading Loading @@ -1830,7 +1830,7 @@ S: Supported PRISM54 WIRELESS DRIVER PRISM54 WIRELESS DRIVER P: Prism54 Development Team P: Prism54 Development Team M: prism54-private@prism54.org M: prism54-private@prism54.org L: netdev@oss.sgi.com L: netdev@vger.kernel.org W: http://prism54.org W: http://prism54.org S: Maintained S: Maintained Loading Loading @@ -2047,7 +2047,7 @@ SIS 900/7016 FAST ETHERNET DRIVER P: Daniele Venzano P: Daniele Venzano M: venza@brownhat.org M: venza@brownhat.org W: http://www.brownhat.org/sis900.html W: http://www.brownhat.org/sis900.html L: netdev@oss.sgi.com L: netdev@vger.kernel.org S: Maintained S: Maintained SIS FRAMEBUFFER DRIVER SIS FRAMEBUFFER DRIVER Loading Loading @@ -2106,7 +2106,7 @@ S: Maintained SONIC NETWORK DRIVER SONIC NETWORK DRIVER P: Thomas Bogendoerfer P: Thomas Bogendoerfer M: tsbogend@alpha.franken.de M: tsbogend@alpha.franken.de L: netdev@oss.sgi.com L: netdev@vger.kernel.org S: Maintained S: Maintained SONY VAIO CONTROL DEVICE DRIVER SONY VAIO CONTROL DEVICE DRIVER Loading Loading @@ -2163,7 +2163,7 @@ S: Supported SPX NETWORK LAYER SPX NETWORK LAYER P: Jay Schulist P: Jay Schulist M: jschlst@samba.org M: jschlst@samba.org L: netdev@oss.sgi.com L: netdev@vger.kernel.org S: Supported S: Supported SRM (Alpha) environment access SRM (Alpha) environment access Loading Loading @@ -2242,7 +2242,7 @@ S: Maintained TOKEN-RING NETWORK DRIVER TOKEN-RING NETWORK DRIVER P: Mike Phillips P: Mike Phillips M: mikep@linuxtr.net M: mikep@linuxtr.net L: netdev@oss.sgi.com L: netdev@vger.kernel.org L: linux-tr@linuxtr.net L: linux-tr@linuxtr.net W: http://www.linuxtr.net W: http://www.linuxtr.net S: Maintained S: Maintained Loading